State Machines
On this page
Overview
This page documents the valid state transitions for all stateful entities across Canopy services. State transitions are enforced in application code — invalid transitions return HTTP 409 Conflict.
SNAP Determination Status
Valid statuses: approved, denied, pending_verification, pending_appeal, withdrawn, terminated, sanctioned, time_limit_exceeded, abawd_exceeded, disqualified
Source: canopy-reference/src/enums.rs::DeterminationStatus
SNAP Enrollment Status
Valid statuses: pending_issuance, active, suspended, terminated, expired
Source: services/canopy-enrollment/src/domain.rs
Fair Hearing (Appeal) Status
Valid statuses: pending, scheduled, decided, withdrawn
Source: services/canopy-appeals/src/domain.rs
Note: Continued benefits are auto-granted at filing if filed within 14 days of adverse action (7 CFR 273.15(k)). This is a flag on the appeal record, not a separate status.
IPV (Intentional Program Violation) Case Status
Valid statuses: referred, adh_scheduled, adh_notice_sent, adh_completed, waiver_accepted, court_referred, disqualified, cleared, withdrawn
court_referred is consumable (→ disqualified) but no live path
produces it today — the schema’s CHECK constraint admits it for future
court-referral intake; no transition edge creates it (#1493).
Transition validation enforced in: the per-transition WHERE clauses in
services/canopy-appeals/src/ipv/store.rs — the store predicates are the
single enforcement authority (the enforced matrix is documented on that
module’s doc, #1493; a wrong-status attempt matches zero rows and surfaces
as the API’s 404/409).
Certification Period Status
Valid statuses: active, recertifying, terminated, expired
Source: services/canopy-renewals/src/domain.rs
Benefit Issuance Status
Valid statuses: pending, issued, failed, expunged
Source: services/canopy-enrollment/src/domain.rs