Skip to content

Class: PersonalCareCategory

Mixin for personal care, hygiene, and health product slots and UC rules. Applied to PersonalCareItem via mixins: [PersonalCareCategory]. Merges COICOP 06.1 and 12.1. See schema description for merge rationale. No condition_grade or assessment_result — is_sealed + expiry_date are the complete assessment vocabulary. See schema description.

URI: inkind_knowledge_repo:PersonalCareCategory

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


      PersonalCareCategory <|-- PersonalCareItem
        click PersonalCareItem href "../PersonalCareItem/"


      PersonalCareCategory : expiry_date

      PersonalCareCategory : is_sealed

      PersonalCareCategory : material

      PersonalCareCategory : subcategory





        PersonalCareCategory --> "1" PersonalCareSubcategoryEnum : subcategory
        click PersonalCareSubcategoryEnum href "../PersonalCareSubcategoryEnum/"



Inheritance

Class Properties

Property Value
Mixin Yes

Slots

Name Cardinality and Range Description Inheritance
subcategory 1
PersonalCareSubcategoryEnum
Subcategory within the item type direct
is_sealed 1
Boolean
Whether the item's original packaging/seal is intact direct
expiry_date 0..1
Date
Expiry or best-before date from the packaging direct
material 0..1
String
Primary material composition CategoryMixin

Mixin Usage

mixed into description
PersonalCareItem Personal care, hygiene, and health products

Rules

uc-personal-care-unsealed-consumables-block

Rule Applied Preconditions Postconditions Elseconditions
slot_conditions {'is_sealed': {'equals_string': 'false'}, 'subcategory': {'any_of': [{'equals_string': 'soap_body_wash'}, {'equals_string': 'shampoo_conditioner'}, {'equals_string': 'dental'}, {'equals_string': 'deodorant'}, {'equals_string': 'sanitary_products'}, {'equals_string': 'nappies_incontinence'}, {'equals_string': 'skincare'}, {'equals_string': 'cosmetics'}, {'equals_string': 'hair_styling'}, {'equals_string': 'otc_medication'}, {'equals_string': 'first_aid'}, {'equals_string': 'medical_consumables'}]}} {'lifecycle_state': {'none_of': [{'equals_string': 'stored'}, {'equals_string': 'distributed'}]}}

uc-personal-care-used-tools-block

Rule Applied Preconditions Postconditions Elseconditions
slot_conditions {'subcategory': {'equals_string': 'personal_care_tools'}, 'usage': {'equals_string': 'used'}} {'lifecycle_state': {'none_of': [{'equals_string': 'stored'}, {'equals_string': 'distributed'}]}}

uc-personal-care-expired-block

Rule Applied Preconditions Postconditions Elseconditions

See Also

Identifier and Mapping Information

Annotations

property value
completeness_minimal subcategory, is_sealed, usage
completeness_standard subcategory, is_sealed, expiry_date, usage
completeness_detailed subcategory, is_sealed, expiry_date, usage
coicop_divisions 06.1, 12.1
prescription_medication_note Prescription medications must NOT be accepted. Flag for pharmaceutical disposal. This is operational procedure — not enforceable by schema rule.

Schema Source

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

Mappings

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

LinkML Source

Direct

name: PersonalCareCategory
annotations:
  completeness_minimal:
    tag: completeness_minimal
    value: subcategory, is_sealed, usage
  completeness_standard:
    tag: completeness_standard
    value: subcategory, is_sealed, expiry_date, usage
  completeness_detailed:
    tag: completeness_detailed
    value: subcategory, is_sealed, expiry_date, usage
  coicop_divisions:
    tag: coicop_divisions
    value: 06.1, 12.1
  prescription_medication_note:
    tag: prescription_medication_note
    value: Prescription medications must NOT be accepted. Flag for pharmaceutical
      disposal. This is operational procedure — not enforceable by schema rule.
description: 'Mixin for personal care, hygiene, and health product slots and UC rules.
  Applied to PersonalCareItem via mixins: [PersonalCareCategory]. Merges COICOP 06.1
  and 12.1. See schema description for merge rationale. No condition_grade or assessment_result
   is_sealed + expiry_date are the complete assessment vocabulary. See schema description.'
from_schema: https://inkind-at.github.io/inkind-knowledge-repo
see_also:
- http://www.productontology.org/id/Personal_hygiene
- https://company.auntbertha.com/openeligibility/
is_a: CategoryMixin
mixin: true
slots:
- subcategory
- is_sealed
- expiry_date
slot_usage:
  subcategory:
    name: subcategory
    range: PersonalCareSubcategoryEnum
    required: true
  is_sealed:
    name: is_sealed
    description: Whether the item's original packaging/seal is intact. UC block for
      most consumable subcategories when false. Primary safety signal for personal
      care items — replaces condition_grade.
    required: true
  expiry_date:
    name: expiry_date
    annotations:
      uc_action:
        tag: uc_action
        value: block
      uc_suggest:
        tag: uc_suggest
        value: disposal
      uc_note:
        tag: uc_note
        value: Dynamic date comparison — runtime enforcement by Django model clean()
    description: 'Expiry or best-before date from the packaging. UC block: expiry_date
      < today (runtime check by Django model clean()). Secondary safety signal  important
      for medications, skincare, food.'
    range: date
rules:
- preconditions:
    slot_conditions:
      is_sealed:
        name: is_sealed
        equals_string: 'false'
      subcategory:
        name: subcategory
        any_of:
        - equals_string: soap_body_wash
        - equals_string: shampoo_conditioner
        - equals_string: dental
        - equals_string: deodorant
        - equals_string: sanitary_products
        - equals_string: nappies_incontinence
        - equals_string: skincare
        - equals_string: cosmetics
        - equals_string: hair_styling
        - equals_string: otc_medication
        - equals_string: first_aid
        - equals_string: medical_consumables
  postconditions:
    slot_conditions:
      lifecycle_state:
        name: lifecycle_state
        none_of:
        - equals_string: stored
        - equals_string: distributed
  description: 'Unsealed consumable personal care products must not be redistributed.
    A PC (Policy Constraint) override at the org level can permit specific subcategories
    (e.g. bulk bar soap) if org policy allows. action: block.'
  title: uc-personal-care-unsealed-consumables-block
- preconditions:
    slot_conditions:
      subcategory:
        name: subcategory
        equals_string: personal_care_tools
      usage:
        name: usage
        equals_string: used
  postconditions:
    slot_conditions:
      lifecycle_state:
        name: lifecycle_state
        none_of:
        - equals_string: stored
        - equals_string: distributed
  description: 'Used personal care tools must not be redistributed. Health and sanitary
    safety  no PC override permitted. action: block.'
  title: uc-personal-care-used-tools-block
- annotations:
    enforcement:
      tag: enforcement
      value: application_layer
    uc_action:
      tag: uc_action
      value: block
    uc_suggest:
      tag: uc_suggest
      value: disposal
    uc_note:
      tag: uc_note
      value: expiry_date < today — runtime check by Django model clean()
  description: Items past expiry date must not be redistributed. Runtime check — dynamic
    date comparison not expressible as a static LinkML rule. Enforced by Django model
    clean() at save time.
  title: uc-personal-care-expired-block

Induced

name: PersonalCareCategory
annotations:
  completeness_minimal:
    tag: completeness_minimal
    value: subcategory, is_sealed, usage
  completeness_standard:
    tag: completeness_standard
    value: subcategory, is_sealed, expiry_date, usage
  completeness_detailed:
    tag: completeness_detailed
    value: subcategory, is_sealed, expiry_date, usage
  coicop_divisions:
    tag: coicop_divisions
    value: 06.1, 12.1
  prescription_medication_note:
    tag: prescription_medication_note
    value: Prescription medications must NOT be accepted. Flag for pharmaceutical
      disposal. This is operational procedure — not enforceable by schema rule.
description: 'Mixin for personal care, hygiene, and health product slots and UC rules.
  Applied to PersonalCareItem via mixins: [PersonalCareCategory]. Merges COICOP 06.1
  and 12.1. See schema description for merge rationale. No condition_grade or assessment_result
   is_sealed + expiry_date are the complete assessment vocabulary. See schema description.'
from_schema: https://inkind-at.github.io/inkind-knowledge-repo
see_also:
- http://www.productontology.org/id/Personal_hygiene
- https://company.auntbertha.com/openeligibility/
is_a: CategoryMixin
mixin: true
slot_usage:
  subcategory:
    name: subcategory
    range: PersonalCareSubcategoryEnum
    required: true
  is_sealed:
    name: is_sealed
    description: Whether the item's original packaging/seal is intact. UC block for
      most consumable subcategories when false. Primary safety signal for personal
      care items — replaces condition_grade.
    required: true
  expiry_date:
    name: expiry_date
    annotations:
      uc_action:
        tag: uc_action
        value: block
      uc_suggest:
        tag: uc_suggest
        value: disposal
      uc_note:
        tag: uc_note
        value: Dynamic date comparison — runtime enforcement by Django model clean()
    description: 'Expiry or best-before date from the packaging. UC block: expiry_date
      < today (runtime check by Django model clean()). Secondary safety signal  important
      for medications, skincare, food.'
    range: date
attributes:
  subcategory:
    name: subcategory
    annotations:
      label_en:
        tag: label_en
        value: Subcategory
      label_de:
        tag: label_de
        value: Unterkategorie
    description: Subcategory within the item type. Overridden via slot_usage in each
      concrete DonationItem subclass to a category-specific enum.
    from_schema: https://inkind-at.github.io/inkind-knowledge-repo
    rank: 1000
    alias: subcategory
    owner: PersonalCareCategory
    domain_of:
    - ClothingCategory
    - AccessoriesCategory
    - FootwearCategory
    - FurnitureCategory
    - BeddingTextilesCategory
    - HouseholdCategory
    - ElectronicsCategory
    - ToysCategory
    - SportsCategory
    - BooksCategory
    - StationeryCategory
    - PersonalCareCategory
    - MobilityAidsCategory
    - BabyInfantCategory
    - AnyValue
    range: PersonalCareSubcategoryEnum
    required: true
  is_sealed:
    name: is_sealed
    annotations:
      label_en:
        tag: label_en
        value: Sealed Packaging
      label_de:
        tag: label_de
        value: Versiegelte Verpackung
    description: Whether the item's original packaging/seal is intact. UC block for
      most consumable subcategories when false. Primary safety signal for personal
      care items — replaces condition_grade.
    from_schema: https://inkind-at.github.io/inkind-knowledge-repo
    rank: 1000
    alias: is_sealed
    owner: PersonalCareCategory
    domain_of:
    - PersonalCareCategory
    - BabyInfantCategory
    range: boolean
    required: true
  expiry_date:
    name: expiry_date
    annotations:
      uc_action:
        tag: uc_action
        value: block
      uc_suggest:
        tag: uc_suggest
        value: disposal
      uc_note:
        tag: uc_note
        value: Dynamic date comparison — runtime enforcement by Django model clean()
    description: 'Expiry or best-before date from the packaging. UC block: expiry_date
      < today (runtime check by Django model clean()). Secondary safety signal  important
      for medications, skincare, food.'
    from_schema: https://inkind-at.github.io/inkind-knowledge-repo
    rank: 1000
    alias: expiry_date
    owner: PersonalCareCategory
    domain_of:
    - PersonalCareCategory
    - BabyInfantCategory
    - FoodCategory
    range: date
  material:
    name: material
    annotations:
      label_en:
        tag: label_en
        value: Material
      label_de:
        tag: label_de
        value: Material
    description: Primary material composition. Range overridden per class.
    from_schema: https://inkind-at.github.io/inkind-knowledge-repo
    rank: 1000
    alias: material
    owner: PersonalCareCategory
    domain_of:
    - ClothingCategory
    - AccessoriesCategory
    - FootwearCategory
    - FurnitureCategory
    - BeddingTextilesCategory
    - HouseholdCategory
    - ToysCategory
    - CategoryMixin
    range: string
rules:
- preconditions:
    slot_conditions:
      is_sealed:
        name: is_sealed
        equals_string: 'false'
      subcategory:
        name: subcategory
        any_of:
        - equals_string: soap_body_wash
        - equals_string: shampoo_conditioner
        - equals_string: dental
        - equals_string: deodorant
        - equals_string: sanitary_products
        - equals_string: nappies_incontinence
        - equals_string: skincare
        - equals_string: cosmetics
        - equals_string: hair_styling
        - equals_string: otc_medication
        - equals_string: first_aid
        - equals_string: medical_consumables
  postconditions:
    slot_conditions:
      lifecycle_state:
        name: lifecycle_state
        none_of:
        - equals_string: stored
        - equals_string: distributed
  description: 'Unsealed consumable personal care products must not be redistributed.
    A PC (Policy Constraint) override at the org level can permit specific subcategories
    (e.g. bulk bar soap) if org policy allows. action: block.'
  title: uc-personal-care-unsealed-consumables-block
- preconditions:
    slot_conditions:
      subcategory:
        name: subcategory
        equals_string: personal_care_tools
      usage:
        name: usage
        equals_string: used
  postconditions:
    slot_conditions:
      lifecycle_state:
        name: lifecycle_state
        none_of:
        - equals_string: stored
        - equals_string: distributed
  description: 'Used personal care tools must not be redistributed. Health and sanitary
    safety  no PC override permitted. action: block.'
  title: uc-personal-care-used-tools-block
- annotations:
    enforcement:
      tag: enforcement
      value: application_layer
    uc_action:
      tag: uc_action
      value: block
    uc_suggest:
      tag: uc_suggest
      value: disposal
    uc_note:
      tag: uc_note
      value: expiry_date < today — runtime check by Django model clean()
  description: Items past expiry date must not be redistributed. Runtime check — dynamic
    date comparison not expressible as a static LinkML rule. Enforced by Django model
    clean() at save time.
  title: uc-personal-care-expired-block