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

Diagram

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

Diagram

Valid statuses: pending_issuance, active, suspended, terminated, expired

Source: services/canopy-enrollment/src/domain.rs

Fair Hearing (Appeal) Status

Diagram

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

Diagram

Valid statuses: referred, adh_scheduled, adh_notice_sent, adh_completed, waiver_accepted, court_referred, disqualified, cleared, withdrawn

NOTE
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

Diagram

Valid statuses: active, recertifying, terminated, expired

Source: services/canopy-renewals/src/domain.rs

Benefit Issuance Status

Diagram

Valid statuses: pending, issued, failed, expunged

Source: services/canopy-enrollment/src/domain.rs

Edit this page · default