Skip to content

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.)