Enum: ItemLifecycleStateEnum
Lifecycle states for a DonationItem. Ordered; transitions enforced by Django model clean(). The fragment engine drives the sorted transition on sorting episode completion; attribute_completeness is set at the same time.
Design rationale for explicit lifecycle states:
States are enforced by the model (illegal transitions raise validation
errors). The fragment engine reads lifecycle_state to determine which
fragment is valid. This replaces implicit UI-flow sequencing with
explicit data-level sequencing — which is the prerequisite for
multi-org configuration and concurrent access control.
No state machine library is needed: a status field with transition
validation in the model layer is sufficient.
sorted and attribute_completeness are ORTHOGONAL:
sorted = the sorting episode completed (process fact)
minimal = episode done but limited data captured, e.g. label missing
An item is always sorted when the episode completes — attribute_completeness
records how much was captured, not whether the episode was complete.
Transitions:
announced → received (item physically arrives)
received → sorting_in_progress (sort episode launched)
sorting_in_progress → sorted (sort episode completed;
attribute_completeness set)
sorted → stored (storage assignment made)
sorted → disposed (unsuitable; Phase 2)
stored → distributed (given to beneficiary; Phase 2)
stored → shared (transferred to org; Phase 2)
stored → disposed (culled from stock; Phase 2)
URI: inkind_knowledge_repo:ItemLifecycleStateEnum
Permissible Values
| Value | Meaning | Description |
|---|---|---|
| announced | None | Donor indicated intent to donate; item not yet physically present |
| received | None | Item physically arrived and registered against a DonationCollection |
| sorting_in_progress | None | Active sorting episode in progress |
| sorted | None | Sorting episode completed |
| stored | None | Item assigned to a physical StorageLocation |
| disposed | None | Item deemed unsuitable for redistribution and disposed of |
| distributed | None | Item given to a beneficiary |
| shared | None | Item transferred to another organisation via the Share workflow |
Slots
| Name | Description |
|---|---|
| lifecycle_state |
Identifier and Mapping Information
Schema Source
- from schema: https://inkind-at.github.io/inkind-knowledge-repo
LinkML Source
name: ItemLifecycleStateEnum
description: "Lifecycle states for a DonationItem. Ordered; transitions enforced by\
\ Django model clean(). The fragment engine drives the sorted transition on sorting\
\ episode completion; attribute_completeness is set at the same time.\nDesign rationale\
\ for explicit lifecycle states:\n States are enforced by the model (illegal transitions\
\ raise validation\n errors). The fragment engine reads lifecycle_state to determine\
\ which\n fragment is valid. This replaces implicit UI-flow sequencing with\n \
\ explicit data-level sequencing — which is the prerequisite for\n multi-org configuration\
\ and concurrent access control.\n No state machine library is needed: a status\
\ field with transition\n validation in the model layer is sufficient.\n\nsorted\
\ and attribute_completeness are ORTHOGONAL:\n sorted = the sorting episode\
\ completed (process fact)\n minimal = episode done but limited data captured,\
\ e.g. label missing\n An item is always sorted when the episode completes — attribute_completeness\n\
\ records how much was captured, not whether the episode was complete.\n\nTransitions:\n\
\ announced → received (item physically arrives)\n received\
\ → sorting_in_progress (sort episode launched)\n sorting_in_progress\
\ → sorted (sort episode completed;\n \
\ attribute_completeness set)\n sorted → stored \
\ (storage assignment made)\n sorted → disposed \
\ (unsuitable; Phase 2)\n stored → distributed (given to\
\ beneficiary; Phase 2)\n stored → shared (transferred\
\ to org; Phase 2)\n stored → disposed (culled from stock;\
\ Phase 2)"
from_schema: https://inkind-at.github.io/inkind-knowledge-repo
rank: 1000
permissible_values:
announced:
text: announced
description: Donor indicated intent to donate; item not yet physically present.
Optional state — used when pre-registration is supported.
received:
text: received
description: Item physically arrived and registered against a DonationCollection.
usage must be set at this point. Category-specific assessment slots are absent
— they are populated during sorting.
sorting_in_progress:
text: sorting_in_progress
description: Active sorting episode in progress. Fragment engine sets this on
episode launch to prevent concurrent editing of the same item.
sorted:
text: sorted
description: Sorting episode completed. Assessment and category attributes recorded.
attribute_completeness set by the fragment engine. Item is ready for storage
assignment.
stored:
text: stored
description: Item assigned to a physical StorageLocation. storage_unit FK is set
at this transition.
disposed:
text: disposed
description: Item deemed unsuitable for redistribution and disposed of. Terminal
state. (Phase 2 stub — declared now for schema completeness.)
distributed:
text: distributed
description: Item given to a beneficiary. Terminal state. (Phase 2 stub.)
shared:
text: shared
description: Item transferred to another organisation via the Share workflow.
Terminal state. (Phase 2 stub.)