Data Model: Case Management
On this page
Overview
The case management service tracks the full lifecycle from hotline referral through case closure.
Its 26 domain tables (source of truth: services/craig-cases/migrations/) organize around the
intake-to-permanency workflow: persons, reports and screening, referrals, investigations, cases,
plans, contacts, and court orders, plus the encryption-lineage anchors.
Tables
| Table | Purpose |
|---|---|
|
The public-report lifecycle rows relocated from craig-intake (ADR-017 Step 3) — the
stateless edge forwards here; screened via |
|
Report screening decisions (single-parent supersession chains; the effective leaf drives convert — #767 write-side prevention) |
|
Report disposition follow-ups (the ADR-017 Step 3 trio’s third table): caseworker actions attached to non-terminal dispositions (screened-out-and-referred, I&R) |
|
ADR-019 report-entry ↔ person links — evidence-grade rows recording each deliberate
link (auto-link at convert or worker confirmation) between |
|
Supporting documents for reports (mirrors |
|
Mandated-reporter JWS replay-defense ledger (Plan C F-005): seen |
|
ADR-048 §D3 key↔data lineage anchor (singleton: KCV + canary) — what the cases boot verify checks the mounted field key against |
|
#1025/#1395 per-field scheme lineage — the authoritative record of which at-rest scheme
each allowlisted field’s data was written under; insert/equal-only, written by the
migrate gate’s |
|
Shared person registry — children, parents, reporters, perpetrators |
|
Hotline intakes — screening decisions, priority, county assignment |
|
Specific abuse/neglect allegations linked to a referral, victim, and perpetrator |
|
Field investigations opened from screened-in referrals |
|
Structured safety decisions produced by the rules engine during investigation |
|
Ongoing case management records opened after substantiated investigation |
|
Household composition — persons linked to a case with role and caregiver flag.
SSA-screening note (#1466 B5 + #1467 B6b, ADR-065 § Amendment #1479 D16): every
runtime mutation that changes what a screening cohort would contain bumps
|
|
Permanency plans with goals, strengths/needs assessment, and approval tracking |
|
Action items within a case plan assigned to workers or families |
|
Visitation and contact logs with narrative documentation |
|
Files attached to contacts — stored in object storage, metadata in DB |
|
Legal orders with findings, hearing dates, and uploaded documents |
|
SSA benefit assertions (#1466 B5-U2, ADR-065 §D4 — provenance class,
INSERT-only, indefinite-hold pending DFCS). Row-per-benefit
pointer-forward supersession chain: exactly-one-current per (person ×
kind × source × beneficiary_role) is STRUCTURAL (one chain root + at
most one successor per row — partial uniques, never a status column);
corrections/terminations/re-grants are successor rows. Keyed by
|
|
One row per screened member (#1466 B5-U2 — the D20 projection):
outcome category + |
|
#1557 (D3, ADR-066 §D7): the IV-E determination of record — the fleet’s first
persisted eligibility determination. Denormalized decision outputs (as-of
doctrine) + |
|
#1557 (UD5): notify-never-re-evaluate — ONE open item per case (partial
unique WHERE not dismissed; the #1172 standing-alert ON CONFLICT bump), opened
post-determination only, by three same-tx writers serialized on the case row
lock (facts fan-out / cohort seam / the run-invalidation consumer). Dismissal
records who/when/why in-row AND stages |
|
#1557: the cases-local run-invalidation marker (per-run, first-write-wins), written by the widened inbox consumer’s claim tx; the determination tx’s in-tx witness re-check consults it — delivered invalidations refuse, undelivered ones surface via the worklist on eventual delivery. |
|
ADR-062 §U upload-attempt tombstones (SU2 #1248): one immutable row per client
upload operation, id = the client-held request id; generation-fenced CAS
state machine + replay decision table live in |