Class: ClothingItem
Clothing garments: tops, bottoms, outerwear, underwear, nightwear, sportswear. COICOP 03.1 (clothing). Grounded in CPI (Clothing Product Information ontology):
http://www.ebusiness-unibw.org/ontologies/cpi/ns#ClothingAndAccessories
Assessment: condition_grade (wear grade). The demographic→size value map and all UC rules (underwear condition, adult underwear must be new) are defined in ClothingCategory (categories/clothing.yaml).
Lifecycle-aware rules here:
lc-sorted-clothing-condition-grade-required
lc-sorted-clothing-demographic-required
lc-sorted-clothing-size-required
URI: cpi:ClothingAndAccessories
classDiagram
class ClothingItem
click ClothingItem href "../ClothingItem/"
ClothingCategory <|-- ClothingItem
click ClothingCategory href "../ClothingCategory/"
DonationItem <|-- ClothingItem
click DonationItem href "../DonationItem/"
ClothingItem : attribute_completeness
ClothingItem --> "0..1" AttributeCompletenessEnum : attribute_completeness
click AttributeCompletenessEnum href "../AttributeCompletenessEnum/"
ClothingItem : category
ClothingItem : condition_grade
ClothingItem --> "0..1" UsedConditionGradeEnum : condition_grade
click UsedConditionGradeEnum href "../UsedConditionGradeEnum/"
ClothingItem : created_at
ClothingItem : demographic
ClothingItem --> "0..1" DemographicEnum : demographic
click DemographicEnum href "../DemographicEnum/"
ClothingItem : donation_source
ClothingItem --> "0..1" DonationSource : donation_source
click DonationSource href "../DonationSource/"
ClothingItem : id
ClothingItem : intact_labels
ClothingItem : is_winter_suitable
ClothingItem : lifecycle_state
ClothingItem --> "1" ItemLifecycleStateEnum : lifecycle_state
click ItemLifecycleStateEnum href "../ItemLifecycleStateEnum/"
ClothingItem : material
ClothingItem --> "0..1" ClothingMaterialEnum : material
click ClothingMaterialEnum href "../ClothingMaterialEnum/"
ClothingItem : season
ClothingItem --> "*" SeasonEnum : season
click SeasonEnum href "../SeasonEnum/"
ClothingItem : size
ClothingItem --> "0..1" ClothingSizeEnum : size
click ClothingSizeEnum href "../ClothingSizeEnum/"
ClothingItem : sorting_notes
ClothingItem : source_collection
ClothingItem --> "0..1" DonationCollection : source_collection
click DonationCollection href "../DonationCollection/"
ClothingItem : storage_unit
ClothingItem --> "0..1" StorageLocation : storage_unit
click StorageLocation href "../StorageLocation/"
ClothingItem : subcategory
ClothingItem --> "0..1" ClothingSubcategoryEnum : subcategory
click ClothingSubcategoryEnum href "../ClothingSubcategoryEnum/"
ClothingItem : updated_at
ClothingItem : usage
ClothingItem --> "1" ItemUsageEnum : usage
click ItemUsageEnum href "../ItemUsageEnum/"
Inheritance
- DonationItem
- ClothingItem [ ClothingCategory]
Class Properties
| Property | Value |
|---|---|
| Class URI | cpi:ClothingAndAccessories |
Slots
| Name | Cardinality and Range | Description | Inheritance |
|---|---|---|---|
| condition_grade | 0..1 UsedConditionGradeEnum |
Observed wear/quality grade at sorting time | ClothingCategory |
| subcategory | 0..1 ClothingSubcategoryEnum |
Subcategory becomes a required field on DonationItem when item's lifecycle is... | ClothingCategory |
| material | 0..1 ClothingMaterialEnum |
Primary fibre or fabric composition | ClothingCategory, CategoryMixin |
| is_winter_suitable | 0..1 Boolean |
Whether this garment provides meaningful warmth in cold-weather conditions | ClothingCategory |
| demographic | 0..1 DemographicEnum |
Combined age-and-gender demographic suitability of clothing items | ClothingCategory |
| size | 0..1 ClothingSizeEnum |
Size of the clothing item | ClothingCategory |
| season | * SeasonEnum |
Seasonal suitability | ClothingCategory |
| intact_labels | 0..1 Boolean |
Whether care and composition labels are present and legible | ClothingCategory |
| id | 1 Uriorcurie |
A unique identifier for the entity | DonationItem |
| usage | 1 ItemUsageEnum |
Provenance condition — was the item ever used before donation? Orthogonal to ... | DonationItem |
| category | 1 String |
Type-defining slot on DonationItem | DonationItem |
| lifecycle_state | 1 ItemLifecycleStateEnum |
Current lifecycle state of the entity | DonationItem |
| attribute_completeness | 0..1 AttributeCompletenessEnum |
Data quality tier set by the fragment engine on sorting completion | DonationItem |
| source_collection | 0..1 DonationCollection |
FK — the DonationCollection (arrival type) this item was registered from | DonationItem |
| donation_source | 0..1 DonationSource |
Reference to the DonationSource — privacy boundary between item records and d... | DonationItem |
| storage_unit | 0..1 StorageLocation |
FK — set when lifecycle_state transitions to stored | DonationItem |
| sorting_notes | 0..1 String |
Free-text notes recorded by the sorter during sorting | DonationItem |
| created_at | 1 Datetime |
Timestamp when the entity was created | DonationItem |
| updated_at | 1 Datetime |
Timestamp when the entity record was last modified | DonationItem |
Rules
lc-sorted-clothing-is-winter-suitable-required
| Rule Applied | Preconditions | Postconditions | Elseconditions |
|---|---|---|---|
| slot_conditions | {'lifecycle_state': {'equals_string': 'sorted'}, 'subcategory': {'any_of': [{'equals_string': 'tops'}, {'equals_string': 'bottoms'}, {'equals_string': 'outerwear'}, {'equals_string': 'nightwear'}]}} |
{'is_winter_suitable': {'required': True}} |
lc-used-clothing-condition-grade-required
| Rule Applied | Preconditions | Postconditions | Elseconditions |
|---|---|---|---|
| slot_conditions | {'usage': {'equals_string': 'used'}, 'lifecycle_state': {'equals_string': 'sorted'}} |
{'condition_grade': {'required': True}} |
lc-sorted-clothing-demographic-required
| Rule Applied | Preconditions | Postconditions | Elseconditions |
|---|---|---|---|
| slot_conditions | {'lifecycle_state': {'equals_string': 'sorted'}} |
{'demographic': {'required': True}} |
lc-sorted-clothing-size-required
| Rule Applied | Preconditions | Postconditions | Elseconditions |
|---|---|---|---|
| slot_conditions | {'lifecycle_state': {'equals_string': 'sorted'}} |
{'size': {'required': True}} |
lc-sorted-clothing-subcategory-required
| Rule Applied | Preconditions | Postconditions | Elseconditions |
|---|---|---|---|
| slot_conditions | {'lifecycle_state': {'equals_string': 'sorted'}} |
{'subcategory': {'required': True}} |
See Also
Identifier and Mapping Information
Annotations
| property | value |
|---|---|
| label_en | Clothing |
| label_de | Kleidung |
Schema Source
- from schema: https://inkind-at.github.io/inkind-knowledge-repo
Mappings
| Mapping Type | Mapped Value |
|---|---|
| self | cpi:ClothingAndAccessories |
| native | inkind_knowledge_repo:ClothingItem |
LinkML Source
Direct
name: ClothingItem
annotations:
label_en:
tag: label_en
value: Clothing
label_de:
tag: label_de
value: Kleidung
description: "Clothing garments: tops, bottoms, outerwear, underwear, nightwear, sportswear.\
\ COICOP 03.1 (clothing). Grounded in CPI (Clothing Product Information ontology):\n\
\ http://www.ebusiness-unibw.org/ontologies/cpi/ns#ClothingAndAccessories\n\nAssessment:\
\ condition_grade (wear grade). The demographic→size value map and all UC rules\
\ (underwear condition, adult underwear must be new) are defined in ClothingCategory\
\ (categories/clothing.yaml).\nLifecycle-aware rules here:\n lc-sorted-clothing-condition-grade-required\n\
\ lc-sorted-clothing-demographic-required\n lc-sorted-clothing-size-required"
from_schema: https://inkind-at.github.io/inkind-knowledge-repo
see_also:
- http://www.ebusiness-unibw.org/ontologies/cpi/ns#ClothingAndAccessories
is_a: DonationItem
mixins:
- ClothingCategory
class_uri: cpi:ClothingAndAccessories
rules:
- preconditions:
slot_conditions:
lifecycle_state:
name: lifecycle_state
equals_string: sorted
subcategory:
name: subcategory
any_of:
- equals_string: tops
- equals_string: bottoms
- equals_string: outerwear
- equals_string: nightwear
postconditions:
slot_conditions:
is_winter_suitable:
name: is_winter_suitable
required: true
description: is_winter_suitable required at sorted state for tops, bottoms, outerwear,
and nightwear. Not required for underwear (thermally neutral base layer) or sportswear
(assessed differently by the SportsItem category). The thermal character of a
garment is independent of usage — sorters assess what they hold.
title: lc-sorted-clothing-is-winter-suitable-required
- preconditions:
slot_conditions:
usage:
name: usage
equals_string: used
lifecycle_state:
name: lifecycle_state
equals_string: sorted
postconditions:
slot_conditions:
condition_grade:
name: condition_grade
required: true
description: For used clothing (usage = used), condition_grade is required.
title: lc-used-clothing-condition-grade-required
- preconditions:
slot_conditions:
lifecycle_state:
name: lifecycle_state
equals_string: sorted
postconditions:
slot_conditions:
demographic:
name: demographic
required: true
description: demographic required at sorted state for all ClothingItem instances.
Drives demand signal matching (e.g. "adult female tops, size M").
title: lc-sorted-clothing-demographic-required
- preconditions:
slot_conditions:
lifecycle_state:
name: lifecycle_state
equals_string: sorted
postconditions:
slot_conditions:
size:
name: size
required: true
description: size required at sorted state. Drives demand signal matching and storage
slot assignment.
title: lc-sorted-clothing-size-required
- preconditions:
slot_conditions:
lifecycle_state:
name: lifecycle_state
equals_string: sorted
postconditions:
slot_conditions:
subcategory:
name: subcategory
required: true
description: subcategory required at sorted state. Drives demand signal matching,
UC rule evaluation (underwear constraints), and storage routing. Not required
at received state — category is known but subcategory is determined during sorting.
title: lc-sorted-clothing-subcategory-required
Induced
name: ClothingItem
annotations:
label_en:
tag: label_en
value: Clothing
label_de:
tag: label_de
value: Kleidung
description: "Clothing garments: tops, bottoms, outerwear, underwear, nightwear, sportswear.\
\ COICOP 03.1 (clothing). Grounded in CPI (Clothing Product Information ontology):\n\
\ http://www.ebusiness-unibw.org/ontologies/cpi/ns#ClothingAndAccessories\n\nAssessment:\
\ condition_grade (wear grade). The demographic→size value map and all UC rules\
\ (underwear condition, adult underwear must be new) are defined in ClothingCategory\
\ (categories/clothing.yaml).\nLifecycle-aware rules here:\n lc-sorted-clothing-condition-grade-required\n\
\ lc-sorted-clothing-demographic-required\n lc-sorted-clothing-size-required"
from_schema: https://inkind-at.github.io/inkind-knowledge-repo
see_also:
- http://www.ebusiness-unibw.org/ontologies/cpi/ns#ClothingAndAccessories
is_a: DonationItem
mixins:
- ClothingCategory
attributes:
condition_grade:
name: condition_grade
annotations:
label_en:
tag: label_en
value: Wear Grade
label_de:
tag: label_de
value: Abnutzungsgrad
description: "Observed wear/quality grade at sorting time. Grounded in schema:OfferItemCondition\
\ and schema:itemCondition. Applied to wear-graded categories: clothing, accessories,\
\ footwear, books, stationery, household, toys, general sports equipment.\n\
Required at sorted state regardless of usage:\n new item, no defects \
\ → like_new\n new item, manufacturing defect → fair or poor\n used item,\
\ minimal wear → like_new or good\nSorters record what they observe,\
\ not what the label says.\nCategories using structured assessment_result enums\
\ instead (furniture, electronics, bedding, protective sports gear, mobility\
\ aids, baby equipment) do NOT declare this slot."
from_schema: https://inkind-at.github.io/inkind-knowledge-repo
see_also:
- schema:OfferItemCondition
- schema:LikeNewCondition
- schema:DamagedCondition
- schema:itemCondition
rank: 1000
alias: condition_grade
owner: ClothingItem
domain_of:
- ClothingCategory
- AccessoriesCategory
- FootwearCategory
- HouseholdCategory
- ToysCategory
- SportsCategory
- BooksCategory
- StationeryCategory
- BabyInfantCategory
- OtherItem
range: UsedConditionGradeEnum
required: false
subcategory:
name: subcategory
annotations:
label_en:
tag: label_en
value: Subcategory
label_de:
tag: label_de
value: Unterkategorie
description: Subcategory becomes a required field on DonationItem when item's
lifecycle is sorted.
from_schema: https://inkind-at.github.io/inkind-knowledge-repo
rank: 1000
alias: subcategory
owner: ClothingItem
domain_of:
- ClothingCategory
- AccessoriesCategory
- FootwearCategory
- FurnitureCategory
- BeddingTextilesCategory
- HouseholdCategory
- ElectronicsCategory
- ToysCategory
- SportsCategory
- BooksCategory
- StationeryCategory
- PersonalCareCategory
- MobilityAidsCategory
- BabyInfantCategory
- AnyValue
range: ClothingSubcategoryEnum
required: false
material:
name: material
annotations:
label_en:
tag: label_en
value: Material
label_de:
tag: label_de
value: Material
description: Primary fibre or fabric composition. Optional — detailed completeness
tier. Select the dominant fibre for blended fabrics; use synthetic_blend when
no single synthetic dominates. Exact fibre percentages from legible care labels
may be noted in sorting_notes. See ClothingMaterialEnum for full vocabulary
and ontology grounding.
from_schema: https://inkind-at.github.io/inkind-knowledge-repo
rank: 1000
alias: material
owner: ClothingItem
domain_of:
- ClothingCategory
- AccessoriesCategory
- FootwearCategory
- FurnitureCategory
- BeddingTextilesCategory
- HouseholdCategory
- ToysCategory
- CategoryMixin
range: ClothingMaterialEnum
required: false
is_winter_suitable:
name: is_winter_suitable
annotations:
label_en:
tag: label_en
value: Winter Suitable
label_de:
tag: label_de
value: Wintertauglich
description: 'Whether this garment provides meaningful warmth in cold-weather
conditions. Required at standard completeness for tops, bottoms, outerwear,
nightwear. The sorter''s direct assessment — not inferred from subcategory or
material. The primary emergency distribution filter: "all winter-suitable clothing
for adults."'
from_schema: https://inkind-at.github.io/inkind-knowledge-repo
see_also:
- schema:itemCondition
rank: 1000
alias: is_winter_suitable
owner: ClothingItem
domain_of:
- ClothingCategory
- FootwearCategory
- BeddingTextilesCategory
- BabyInfantCategory
range: boolean
required: false
demographic:
name: demographic
annotations:
label_en:
tag: label_en
value: Demographic
label_de:
tag: label_de
value: Demografie
description: Combined age-and-gender demographic suitability of clothing items.
Valid values depend on subcategory (see value_map above). Grounded in cpi:designatedFor
and schema.org wearable size groups. Not applicable to AccessoriesItem — accessories
use the simpler AccessoriesDemographicEnum (baby/child/adult/all_ages).
from_schema: https://inkind-at.github.io/inkind-knowledge-repo
see_also:
- cpi:designatedFor
- schema:WearableSizeGroupBaby
- schema:WearableSizeGroupChildrens
- schema:WearableSizeGroupAdult
rank: 1000
alias: demographic
owner: ClothingItem
domain_of:
- ClothingCategory
- AccessoriesCategory
- FootwearCategory
- SportsCategory
- AnyValue
range: DemographicEnum
required: false
size:
name: size
annotations:
label_en:
tag: label_en
value: Size
label_de:
tag: label_de
value: Größe
description: Size of the clothing item. Valid values constrained by demographic
via value map rules (vm-size-baby, vm-size-child, vm-size-adult). Grounded in
cpi:ClothingSize and schema.org size systems.
from_schema: https://inkind-at.github.io/inkind-knowledge-repo
see_also:
- cpi:ClothingSize
- schema:WearableSizeGroupAdult
- schema:WearableSizeSystemEU
rank: 1000
alias: size
owner: ClothingItem
domain_of:
- ClothingCategory
- AnyValue
range: ClothingSizeEnum
required: false
season:
name: season
annotations:
label_en:
tag: label_en
value: Season
label_de:
tag: label_de
value: Saison
description: 'Seasonal suitability. Optional — detailed completeness tier. Multivalued:
a garment may span seasons (e.g. spring_autumn + summer). VM rules auto-derive
is_winter_suitable for the extreme values (winter, summer, all_season); spring_autumn
leaves the sorter to set is_winter_suitable explicitly.'
from_schema: https://inkind-at.github.io/inkind-knowledge-repo
see_also:
- schema:itemCondition
rank: 1000
alias: season
owner: ClothingItem
domain_of:
- ClothingCategory
- FootwearCategory
range: SeasonEnum
required: false
multivalued: true
intact_labels:
name: intact_labels
annotations:
show_if:
tag: show_if
value: subcategory in [tops, bottoms, outerwear, underwear, nightwear, sportswear]
label_en:
tag: label_en
value: Intact care and composition labels
label_de:
tag: label_de
value: Unversehrte Pflege- und Materialetiketten
description: Whether care and composition labels are present and legible. Improves
match quality for beneficiaries with care requirements (e.g. allergy to certain
materials). Detailed completeness tier.
from_schema: https://inkind-at.github.io/inkind-knowledge-repo
rank: 1000
alias: intact_labels
owner: ClothingItem
domain_of:
- ClothingCategory
range: boolean
id:
name: id
description: A unique identifier for the entity.
from_schema: https://inkind-at.github.io/inkind-knowledge-repo
rank: 1000
slot_uri: schema:identifier
identifier: true
alias: id
owner: ClothingItem
domain_of:
- NamedThing
- SocialOrganisation
- Actor
- StorageLocation
- DonationSource
- DonationCollection
- DonationItem
- DemandSignal
- Campaign
- ProvenanceRecord
range: uriorcurie
required: true
usage:
name: usage
annotations:
label_en:
tag: label_en
value: Provenance
label_de:
tag: label_de
value: Provenance
description: Provenance condition — was the item ever used before donation? Orthogonal
to condition_grade and assessment_result. Maps to schema:NewCondition / schema:UsedCondition.
usage = new does NOT imply no defects — manufacturing defects are possible and
assessment must always be performed regardless of usage.
from_schema: https://inkind-at.github.io/inkind-knowledge-repo
see_also:
- schema:OfferItemCondition
- schema:NewCondition
- schema:UsedCondition
rank: 1000
slot_uri: schema:itemCondition
alias: usage
owner: ClothingItem
domain_of:
- DonationItem
range: ItemUsageEnum
required: true
category:
name: category
annotations:
label_en:
tag: label_en
value: Item Type
label_de:
tag: label_de
value: Artikeltyp
description: Type-defining slot on DonationItem. Value is the class URI of the
concrete subclass (e.g. inkind_knowledge_repo:ClothingItem). linkml-validate,
gen-json-schema, and gen-pydantic all use this slot to dispatch to the correct
subclass schema and valid slot set. For other entities (DemandSignal, StorageLocation)
the range is overridden via slot_usage to CategoryEnum.
notes:
- Due to a limitation in LinkML, the designates_type annotation was removed because
the range is an Enum and not a string.
from_schema: https://inkind-at.github.io/inkind-knowledge-repo
rank: 1000
slot_uri: schema:additionalType
designates_type: true
alias: category
owner: ClothingItem
domain_of:
- DonationItem
- DemandSignal
range: string
required: true
lifecycle_state:
name: lifecycle_state
description: Current lifecycle state of the entity. Concrete enum range applied
via slot_usage. Transitions enforced by Django model clean().
from_schema: https://inkind-at.github.io/inkind-knowledge-repo
rank: 1000
alias: lifecycle_state
owner: ClothingItem
domain_of:
- DonationSource
- DonationCollection
- DonationItem
- DemandSignal
- Campaign
range: ItemLifecycleStateEnum
required: true
attribute_completeness:
name: attribute_completeness
description: 'Data quality tier set by the fragment engine on sorting completion.
Not derived from field presence. Not a lifecycle gate. Used by the match engine
to filter candidates by data quality tier. See AttributeCompletenessEnum for
the relationship to lifecycle_state. Set by: fragment_engine. Read by: match_engine.'
from_schema: https://inkind-at.github.io/inkind-knowledge-repo
rank: 1000
alias: attribute_completeness
owner: ClothingItem
domain_of:
- DonationItem
range: AttributeCompletenessEnum
required: false
source_collection:
name: source_collection
description: FK — the DonationCollection (arrival type) this item was registered
from. Null for items not arriving as part of a collection.
from_schema: https://inkind-at.github.io/inkind-knowledge-repo
rank: 1000
alias: source_collection
owner: ClothingItem
domain_of:
- DonationItem
range: DonationCollection
required: false
donation_source:
name: donation_source
description: Reference to the DonationSource — privacy boundary between item records
and donor identity. Concrete range applied via slot_usage.
from_schema: https://inkind-at.github.io/inkind-knowledge-repo
rank: 1000
slot_uri: inkind_knowledge_repo:donation_source
alias: donation_source
owner: ClothingItem
domain_of:
- DonationCollection
- DonationItem
range: DonationSource
required: false
storage_unit:
name: storage_unit
description: FK — set when lifecycle_state transitions to stored. Null until the
item reaches stored state.
from_schema: https://inkind-at.github.io/inkind-knowledge-repo
rank: 1000
alias: storage_unit
owner: ClothingItem
domain_of:
- DonationItem
range: StorageLocation
required: false
sorting_notes:
name: sorting_notes
annotations:
label_en:
tag: label_en
value: Notes
label_de:
tag: label_de
value: Notizen
description: Free-text notes recorded by the sorter during sorting. Required by
UC warn rules to capture explicit sorter confirmation (e.g. incomplete pair,
body-contact item, inconclusive assessment).
from_schema: https://inkind-at.github.io/inkind-knowledge-repo
rank: 1000
alias: sorting_notes
owner: ClothingItem
domain_of:
- DonationItem
range: string
created_at:
name: created_at
description: Timestamp when the entity was created.
from_schema: https://inkind-at.github.io/inkind-knowledge-repo
rank: 1000
alias: created_at
owner: ClothingItem
domain_of:
- DonationSource
- DonationCollection
- DonationItem
range: datetime
required: true
updated_at:
name: updated_at
description: Timestamp when the entity record was last modified.
from_schema: https://inkind-at.github.io/inkind-knowledge-repo
rank: 1000
alias: updated_at
owner: ClothingItem
domain_of:
- DonationItem
range: datetime
required: true
class_uri: cpi:ClothingAndAccessories
rules:
- preconditions:
slot_conditions:
lifecycle_state:
name: lifecycle_state
equals_string: sorted
subcategory:
name: subcategory
any_of:
- equals_string: tops
- equals_string: bottoms
- equals_string: outerwear
- equals_string: nightwear
postconditions:
slot_conditions:
is_winter_suitable:
name: is_winter_suitable
required: true
description: is_winter_suitable required at sorted state for tops, bottoms, outerwear,
and nightwear. Not required for underwear (thermally neutral base layer) or sportswear
(assessed differently by the SportsItem category). The thermal character of a
garment is independent of usage — sorters assess what they hold.
title: lc-sorted-clothing-is-winter-suitable-required
- preconditions:
slot_conditions:
usage:
name: usage
equals_string: used
lifecycle_state:
name: lifecycle_state
equals_string: sorted
postconditions:
slot_conditions:
condition_grade:
name: condition_grade
required: true
description: For used clothing (usage = used), condition_grade is required.
title: lc-used-clothing-condition-grade-required
- preconditions:
slot_conditions:
lifecycle_state:
name: lifecycle_state
equals_string: sorted
postconditions:
slot_conditions:
demographic:
name: demographic
required: true
description: demographic required at sorted state for all ClothingItem instances.
Drives demand signal matching (e.g. "adult female tops, size M").
title: lc-sorted-clothing-demographic-required
- preconditions:
slot_conditions:
lifecycle_state:
name: lifecycle_state
equals_string: sorted
postconditions:
slot_conditions:
size:
name: size
required: true
description: size required at sorted state. Drives demand signal matching and storage
slot assignment.
title: lc-sorted-clothing-size-required
- preconditions:
slot_conditions:
lifecycle_state:
name: lifecycle_state
equals_string: sorted
postconditions:
slot_conditions:
subcategory:
name: subcategory
required: true
description: subcategory required at sorted state. Drives demand signal matching,
UC rule evaluation (underwear constraints), and storage routing. Not required
at received state — category is known but subcategory is determined during sorting.
title: lc-sorted-clothing-subcategory-required