Skip to content

Class: ClothingCategory

Mixin carrying clothing-specific slots, value maps, and UC rules. Applied to ClothingItem via mixins: [ClothingCategory]. Does NOT include accessories — see AccessoriesCategory (accessories.yaml).

Domain-level rules only (no lifecycle_state references). Lifecycle-aware rules (lc-*) live on ClothingItem in donation_item.yaml because lifecycle_state is a DonationItem slot invisible to this mixin.

Value maps grounded in CPI ontology demographic and size vocabularies. Underwear UC constraints reflect real social-sector hygiene policy. Seasonality: is_winter_suitable (boolean, standard tier) + season (SeasonEnum, optional, detailed tier). See schema description above for the full design rationale.

URI: inkind_knowledge_repo:ClothingCategory

 classDiagram
    class ClothingCategory
    click ClothingCategory href "../ClothingCategory/"
      CategoryMixin <|-- ClothingCategory
        click CategoryMixin href "../CategoryMixin/"


      ClothingCategory <|-- ClothingItem
        click ClothingItem href "../ClothingItem/"


      ClothingCategory : condition_grade





        ClothingCategory --> "0..1" UsedConditionGradeEnum : condition_grade
        click UsedConditionGradeEnum href "../UsedConditionGradeEnum/"



      ClothingCategory : demographic





        ClothingCategory --> "0..1" DemographicEnum : demographic
        click DemographicEnum href "../DemographicEnum/"



      ClothingCategory : intact_labels

      ClothingCategory : is_winter_suitable

      ClothingCategory : material





        ClothingCategory --> "0..1" ClothingMaterialEnum : material
        click ClothingMaterialEnum href "../ClothingMaterialEnum/"



      ClothingCategory : season





        ClothingCategory --> "*" SeasonEnum : season
        click SeasonEnum href "../SeasonEnum/"



      ClothingCategory : size





        ClothingCategory --> "0..1" ClothingSizeEnum : size
        click ClothingSizeEnum href "../ClothingSizeEnum/"



      ClothingCategory : subcategory





        ClothingCategory --> "0..1" ClothingSubcategoryEnum : subcategory
        click ClothingSubcategoryEnum href "../ClothingSubcategoryEnum/"



Inheritance

Class Properties

Property Value
Mixin Yes

Slots

Name Cardinality and Range Description Inheritance
condition_grade 0..1
UsedConditionGradeEnum
Observed wear/quality grade at sorting time direct
subcategory 0..1
ClothingSubcategoryEnum
Subcategory becomes a required field on DonationItem when item's lifecycle is... direct
material 0..1
ClothingMaterialEnum
Primary fibre or fabric composition direct
is_winter_suitable 0..1
Boolean
Whether this garment provides meaningful warmth in cold-weather conditions direct
demographic 0..1
DemographicEnum
Combined age-and-gender demographic suitability of clothing items direct
size 0..1
ClothingSizeEnum
Size of the clothing item direct
season *
SeasonEnum
Seasonal suitability direct
intact_labels 0..1
Boolean
Whether care and composition labels are present and legible direct

Mixin Usage

mixed into description
ClothingItem Clothing garments: tops, bottoms, outerwear, underwear, nightwear, sportswear

Rules

uc-underwear-condition-block

Rule Applied Preconditions Postconditions Elseconditions
slot_conditions {'subcategory': {'equals_string': 'underwear'}, 'condition_grade': {'any_of': [{'equals_string': 'fair'}, {'equals_string': 'poor'}]}} {'lifecycle_state': {'none_of': [{'equals_string': 'stored'}, {'equals_string': 'distributed'}]}}

uc-underwear-adult-used-block

Rule Applied Preconditions Postconditions Elseconditions
slot_conditions {'subcategory': {'equals_string': 'underwear'}, 'demographic': {'any_of': [{'equals_string': 'adult_male'}, {'equals_string': 'adult_female'}]}, 'usage': {'equals_string': 'used'}} {'lifecycle_state': {'none_of': [{'equals_string': 'stored'}, {'equals_string': 'distributed'}]}}

uc-poor-condition-block

Rule Applied Preconditions Postconditions Elseconditions
slot_conditions {'condition_grade': {'equals_string': 'poor'}} {'lifecycle_state': {'none_of': [{'equals_string': 'stored'}, {'equals_string': 'distributed'}]}}

vm-demographic-underwear

Rule Applied Preconditions Postconditions Elseconditions
slot_conditions {'subcategory': {'equals_string': 'underwear'}} {'demographic': {'any_of': [{'equals_string': 'baby'}, {'equals_string': 'child'}, {'equals_string': 'adult_male'}, {'equals_string': 'adult_female'}]}}

vm-size-baby

Rule Applied Preconditions Postconditions Elseconditions
slot_conditions {'demographic': {'equals_string': 'baby'}} {'size': {'any_of': [{'equals_string': 'baby_0_3m'}, {'equals_string': 'baby_3_6m'}, {'equals_string': 'baby_6_12m'}, {'equals_string': 'baby_12_18m'}, {'equals_string': 'baby_18_24m'}]}}

vm-size-child

Rule Applied Preconditions Postconditions Elseconditions
slot_conditions {'demographic': {'equals_string': 'child'}} {'size': {'any_of': [{'equals_string': 'child_2_3T'}, {'equals_string': 'child_4_5T'}, {'equals_string': 'child_6_7'}, {'equals_string': 'child_8_10'}, {'equals_string': 'child_12_14'}]}}

vm-size-adult

Rule Applied Preconditions Postconditions Elseconditions
slot_conditions {'demographic': {'any_of': [{'equals_string': 'adult_male'}, {'equals_string': 'adult_female'}, {'equals_string': 'unisex'}]}} {'size': {'any_of': [{'equals_string': 'xs_s'}, {'equals_string': 'm_l'}, {'equals_string': 'xl_plus'}, {'equals_string': 'one_size'}]}}

vm-season-winter

Rule Applied Preconditions Postconditions Elseconditions
slot_conditions {'season': {'equals_string': 'winter'}} {'is_winter_suitable': {'equals_string': 'true'}}

vm-season-not-winter-suitable

Rule Applied Preconditions Postconditions Elseconditions
slot_conditions {'is_winter_suitable': {'equals_string': 'false'}} {'season': {'any_of': [{'equals_string': 'summer'}, {'equals_string': 'spring_autumn'}]}}

vm-season-summer

Rule Applied Preconditions Postconditions Elseconditions
slot_conditions {'season': {'equals_string': 'summer'}} {'is_winter_suitable': {'equals_string': 'false'}}

vm-season-all

Rule Applied Preconditions Postconditions Elseconditions
slot_conditions {'season': {'equals_string': 'all_season'}} {'is_winter_suitable': {'equals_string': 'true'}}

See Also

Identifier and Mapping Information

Annotations

property value
completeness_minimal subcategory, usage
completeness_standard subcategory, demographic, size, is_winter_suitable, usage, condition_grade
completeness_detailed subcategory, demographic, size, is_winter_suitable, season, material, usage, condition_grade, intact_labels
coicop_division 03.1
material_winter_hint Fragment compiler may pre-fill is_winter_suitable=true when material in [wool, fleece, down] and is_winter_suitable=false when material in [linen, silk]. Sorter can always override.
season_ui_hint Fragment compiler may pre-fill is_winter_suitable=true when subcategory=outerwear and is_winter_suitable=false when subcategory=sportswear (swimwear). Sorter can override.

Schema Source

  • from schema: https://inkind-at.github.io/inkind-knowledge-repo

Mappings

Mapping Type Mapped Value
self inkind_knowledge_repo:ClothingCategory
native inkind_knowledge_repo:ClothingCategory

LinkML Source

Direct

name: ClothingCategory
annotations:
  completeness_minimal:
    tag: completeness_minimal
    value: subcategory, usage
  completeness_standard:
    tag: completeness_standard
    value: subcategory, demographic, size, is_winter_suitable, usage, condition_grade
  completeness_detailed:
    tag: completeness_detailed
    value: subcategory, demographic, size, is_winter_suitable, season, material, usage,
      condition_grade, intact_labels
  coicop_division:
    tag: coicop_division
    value: '03.1'
  material_winter_hint:
    tag: material_winter_hint
    value: Fragment compiler may pre-fill is_winter_suitable=true when material in
      [wool, fleece, down] and is_winter_suitable=false when material in [linen, silk].
      Sorter can always override.
  season_ui_hint:
    tag: season_ui_hint
    value: Fragment compiler may pre-fill is_winter_suitable=true when subcategory=outerwear
      and is_winter_suitable=false when subcategory=sportswear (swimwear). Sorter
      can override.
description: 'Mixin carrying clothing-specific slots, value maps, and UC rules. Applied
  to ClothingItem via mixins: [ClothingCategory]. Does NOT include accessories  see
  AccessoriesCategory (accessories.yaml).

  Domain-level rules only (no lifecycle_state references). Lifecycle-aware rules (lc-*)
  live on ClothingItem in donation_item.yaml because lifecycle_state is a DonationItem
  slot invisible to this mixin.

  Value maps grounded in CPI ontology demographic and size vocabularies. Underwear
  UC constraints reflect real social-sector hygiene policy. Seasonality: is_winter_suitable
  (boolean, standard tier) + season (SeasonEnum, optional, detailed tier). See schema
  description above for the full design rationale.'
from_schema: https://inkind-at.github.io/inkind-knowledge-repo
see_also:
- http://www.ebusiness-unibw.org/ontologies/cpi/ns#ClothingAndAccessories
is_a: CategoryMixin
mixin: true
slots:
- condition_grade
- subcategory
- material
- is_winter_suitable
- demographic
- size
- season
- intact_labels
slot_usage:
  subcategory:
    name: subcategory
    description: Subcategory becomes a required field on DonationItem when item's
      lifecycle is sorted.
    range: ClothingSubcategoryEnum
    required: false
  demographic:
    name: demographic
    range: DemographicEnum
    required: false
  size:
    name: size
    range: ClothingSizeEnum
    required: false
  is_winter_suitable:
    name: is_winter_suitable
    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."'
    range: boolean
    required: false
  season:
    name: season
    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.'
    range: SeasonEnum
    required: false
    multivalued: true
  material:
    name: 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.
    range: ClothingMaterialEnum
    required: false
  condition_grade:
    name: condition_grade
    range: UsedConditionGradeEnum
    required: false
rules:
- preconditions:
    slot_conditions:
      subcategory:
        name: subcategory
        equals_string: underwear
      condition_grade:
        name: condition_grade
        any_of:
        - equals_string: fair
        - equals_string: poor
  postconditions:
    slot_conditions:
      lifecycle_state:
        name: lifecycle_state
        none_of:
        - equals_string: stored
        - equals_string: distributed
  description: 'Underwear must be new or like_new condition. fair or poor graded underwear
    must not be redistributed. Reflects universal hygiene policy across social organisations.
    action: block, suggest: disposal.'
  title: uc-underwear-condition-block
- preconditions:
    slot_conditions:
      subcategory:
        name: subcategory
        equals_string: underwear
      demographic:
        name: demographic
        any_of:
        - equals_string: adult_male
        - equals_string: adult_female
      usage:
        name: usage
        equals_string: used
  postconditions:
    slot_conditions:
      lifecycle_state:
        name: lifecycle_state
        none_of:
        - equals_string: stored
        - equals_string: distributed
  description: 'Used adult underwear (adult_male or adult_female demographic) must
    not be redistributed. usage must be new. Reflects hygiene and dignity standards
    applied universally in the social sector. action: block.'
  title: uc-underwear-adult-used-block
- preconditions:
    slot_conditions:
      condition_grade:
        name: condition_grade
        equals_string: poor
  postconditions:
    slot_conditions:
      lifecycle_state:
        name: lifecycle_state
        none_of:
        - equals_string: stored
        - equals_string: distributed
  description: 'Items in poor condition should not be distributed. action: block,
    suggest: disposal.'
  title: uc-poor-condition-block
- preconditions:
    slot_conditions:
      subcategory:
        name: subcategory
        equals_string: underwear
  postconditions:
    slot_conditions:
      demographic:
        name: demographic
        any_of:
        - equals_string: baby
        - equals_string: child
        - equals_string: adult_male
        - equals_string: adult_female
  description: Underwear subcategory restricts demographic to baby, child, adult_male,
    adult_female. Unisex is not a valid demographic for underwear — underwear is always
    gender-specific at the redistribution level.
  title: vm-demographic-underwear
- preconditions:
    slot_conditions:
      demographic:
        name: demographic
        equals_string: baby
  postconditions:
    slot_conditions:
      size:
        name: size
        any_of:
        - equals_string: baby_0_3m
        - equals_string: baby_3_6m
        - equals_string: baby_6_12m
        - equals_string: baby_12_18m
        - equals_string: baby_18_24m
  description: baby demographic constrains size to infant size codes.
  title: vm-size-baby
- preconditions:
    slot_conditions:
      demographic:
        name: demographic
        equals_string: child
  postconditions:
    slot_conditions:
      size:
        name: size
        any_of:
        - equals_string: child_2_3T
        - equals_string: child_4_5T
        - equals_string: child_6_7
        - equals_string: child_8_10
        - equals_string: child_12_14
  description: child demographic constrains size to children's size codes.
  title: vm-size-child
- preconditions:
    slot_conditions:
      demographic:
        name: demographic
        any_of:
        - equals_string: adult_male
        - equals_string: adult_female
        - equals_string: unisex
  postconditions:
    slot_conditions:
      size:
        name: size
        any_of:
        - equals_string: xs_s
        - equals_string: m_l
        - equals_string: xl_plus
        - equals_string: one_size
  description: adult/unisex demographics constrain size to adult size codes.
  title: vm-size-adult
- preconditions:
    slot_conditions:
      season:
        name: season
        equals_string: winter
  postconditions:
    slot_conditions:
      is_winter_suitable:
        name: is_winter_suitable
        equals_string: 'true'
  description: season = winter implies is_winter_suitable = true. A garment explicitly
    tagged winter must be winter-suitable.
  title: vm-season-winter
- preconditions:
    slot_conditions:
      is_winter_suitable:
        name: is_winter_suitable
        equals_string: 'false'
  postconditions:
    slot_conditions:
      season:
        name: season
        any_of:
        - equals_string: summer
        - equals_string: spring_autumn
  description: is_winter_suitable = false implies that season cannot be winter and
    all season.
  title: vm-season-not-winter-suitable
- preconditions:
    slot_conditions:
      season:
        name: season
        equals_string: summer
  postconditions:
    slot_conditions:
      is_winter_suitable:
        name: is_winter_suitable
        equals_string: 'false'
  description: 'season = summer implies is_winter_suitable = false. A garment explicitly
    tagged summer-only is not winter-suitable. Note: if a sorter tags both summer
    and spring_autumn, the is_winter_suitable value is their explicit call  no rule
    fires.'
  title: vm-season-summer
- preconditions:
    slot_conditions:
      season:
        name: season
        equals_string: all_season
  postconditions:
    slot_conditions:
      is_winter_suitable:
        name: is_winter_suitable
        equals_string: 'true'
  description: season = all_season implies is_winter_suitable = true. All-season items
    are by definition suitable in winter.
  title: vm-season-all

Induced

name: ClothingCategory
annotations:
  completeness_minimal:
    tag: completeness_minimal
    value: subcategory, usage
  completeness_standard:
    tag: completeness_standard
    value: subcategory, demographic, size, is_winter_suitable, usage, condition_grade
  completeness_detailed:
    tag: completeness_detailed
    value: subcategory, demographic, size, is_winter_suitable, season, material, usage,
      condition_grade, intact_labels
  coicop_division:
    tag: coicop_division
    value: '03.1'
  material_winter_hint:
    tag: material_winter_hint
    value: Fragment compiler may pre-fill is_winter_suitable=true when material in
      [wool, fleece, down] and is_winter_suitable=false when material in [linen, silk].
      Sorter can always override.
  season_ui_hint:
    tag: season_ui_hint
    value: Fragment compiler may pre-fill is_winter_suitable=true when subcategory=outerwear
      and is_winter_suitable=false when subcategory=sportswear (swimwear). Sorter
      can override.
description: 'Mixin carrying clothing-specific slots, value maps, and UC rules. Applied
  to ClothingItem via mixins: [ClothingCategory]. Does NOT include accessories  see
  AccessoriesCategory (accessories.yaml).

  Domain-level rules only (no lifecycle_state references). Lifecycle-aware rules (lc-*)
  live on ClothingItem in donation_item.yaml because lifecycle_state is a DonationItem
  slot invisible to this mixin.

  Value maps grounded in CPI ontology demographic and size vocabularies. Underwear
  UC constraints reflect real social-sector hygiene policy. Seasonality: is_winter_suitable
  (boolean, standard tier) + season (SeasonEnum, optional, detailed tier). See schema
  description above for the full design rationale.'
from_schema: https://inkind-at.github.io/inkind-knowledge-repo
see_also:
- http://www.ebusiness-unibw.org/ontologies/cpi/ns#ClothingAndAccessories
is_a: CategoryMixin
mixin: true
slot_usage:
  subcategory:
    name: subcategory
    description: Subcategory becomes a required field on DonationItem when item's
      lifecycle is sorted.
    range: ClothingSubcategoryEnum
    required: false
  demographic:
    name: demographic
    range: DemographicEnum
    required: false
  size:
    name: size
    range: ClothingSizeEnum
    required: false
  is_winter_suitable:
    name: is_winter_suitable
    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."'
    range: boolean
    required: false
  season:
    name: season
    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.'
    range: SeasonEnum
    required: false
    multivalued: true
  material:
    name: 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.
    range: ClothingMaterialEnum
    required: false
  condition_grade:
    name: condition_grade
    range: UsedConditionGradeEnum
    required: false
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: ClothingCategory
    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: ClothingCategory
    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: ClothingCategory
    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: ClothingCategory
    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: ClothingCategory
    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: ClothingCategory
    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: ClothingCategory
    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: ClothingCategory
    domain_of:
    - ClothingCategory
    range: boolean
rules:
- preconditions:
    slot_conditions:
      subcategory:
        name: subcategory
        equals_string: underwear
      condition_grade:
        name: condition_grade
        any_of:
        - equals_string: fair
        - equals_string: poor
  postconditions:
    slot_conditions:
      lifecycle_state:
        name: lifecycle_state
        none_of:
        - equals_string: stored
        - equals_string: distributed
  description: 'Underwear must be new or like_new condition. fair or poor graded underwear
    must not be redistributed. Reflects universal hygiene policy across social organisations.
    action: block, suggest: disposal.'
  title: uc-underwear-condition-block
- preconditions:
    slot_conditions:
      subcategory:
        name: subcategory
        equals_string: underwear
      demographic:
        name: demographic
        any_of:
        - equals_string: adult_male
        - equals_string: adult_female
      usage:
        name: usage
        equals_string: used
  postconditions:
    slot_conditions:
      lifecycle_state:
        name: lifecycle_state
        none_of:
        - equals_string: stored
        - equals_string: distributed
  description: 'Used adult underwear (adult_male or adult_female demographic) must
    not be redistributed. usage must be new. Reflects hygiene and dignity standards
    applied universally in the social sector. action: block.'
  title: uc-underwear-adult-used-block
- preconditions:
    slot_conditions:
      condition_grade:
        name: condition_grade
        equals_string: poor
  postconditions:
    slot_conditions:
      lifecycle_state:
        name: lifecycle_state
        none_of:
        - equals_string: stored
        - equals_string: distributed
  description: 'Items in poor condition should not be distributed. action: block,
    suggest: disposal.'
  title: uc-poor-condition-block
- preconditions:
    slot_conditions:
      subcategory:
        name: subcategory
        equals_string: underwear
  postconditions:
    slot_conditions:
      demographic:
        name: demographic
        any_of:
        - equals_string: baby
        - equals_string: child
        - equals_string: adult_male
        - equals_string: adult_female
  description: Underwear subcategory restricts demographic to baby, child, adult_male,
    adult_female. Unisex is not a valid demographic for underwear — underwear is always
    gender-specific at the redistribution level.
  title: vm-demographic-underwear
- preconditions:
    slot_conditions:
      demographic:
        name: demographic
        equals_string: baby
  postconditions:
    slot_conditions:
      size:
        name: size
        any_of:
        - equals_string: baby_0_3m
        - equals_string: baby_3_6m
        - equals_string: baby_6_12m
        - equals_string: baby_12_18m
        - equals_string: baby_18_24m
  description: baby demographic constrains size to infant size codes.
  title: vm-size-baby
- preconditions:
    slot_conditions:
      demographic:
        name: demographic
        equals_string: child
  postconditions:
    slot_conditions:
      size:
        name: size
        any_of:
        - equals_string: child_2_3T
        - equals_string: child_4_5T
        - equals_string: child_6_7
        - equals_string: child_8_10
        - equals_string: child_12_14
  description: child demographic constrains size to children's size codes.
  title: vm-size-child
- preconditions:
    slot_conditions:
      demographic:
        name: demographic
        any_of:
        - equals_string: adult_male
        - equals_string: adult_female
        - equals_string: unisex
  postconditions:
    slot_conditions:
      size:
        name: size
        any_of:
        - equals_string: xs_s
        - equals_string: m_l
        - equals_string: xl_plus
        - equals_string: one_size
  description: adult/unisex demographics constrain size to adult size codes.
  title: vm-size-adult
- preconditions:
    slot_conditions:
      season:
        name: season
        equals_string: winter
  postconditions:
    slot_conditions:
      is_winter_suitable:
        name: is_winter_suitable
        equals_string: 'true'
  description: season = winter implies is_winter_suitable = true. A garment explicitly
    tagged winter must be winter-suitable.
  title: vm-season-winter
- preconditions:
    slot_conditions:
      is_winter_suitable:
        name: is_winter_suitable
        equals_string: 'false'
  postconditions:
    slot_conditions:
      season:
        name: season
        any_of:
        - equals_string: summer
        - equals_string: spring_autumn
  description: is_winter_suitable = false implies that season cannot be winter and
    all season.
  title: vm-season-not-winter-suitable
- preconditions:
    slot_conditions:
      season:
        name: season
        equals_string: summer
  postconditions:
    slot_conditions:
      is_winter_suitable:
        name: is_winter_suitable
        equals_string: 'false'
  description: 'season = summer implies is_winter_suitable = false. A garment explicitly
    tagged summer-only is not winter-suitable. Note: if a sorter tags both summer
    and spring_autumn, the is_winter_suitable value is their explicit call  no rule
    fires.'
  title: vm-season-summer
- preconditions:
    slot_conditions:
      season:
        name: season
        equals_string: all_season
  postconditions:
    slot_conditions:
      is_winter_suitable:
        name: is_winter_suitable
        equals_string: 'true'
  description: season = all_season implies is_winter_suitable = true. All-season items
    are by definition suitable in winter.
  title: vm-season-all