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
Slots
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'}]}} |
|
| 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
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