Plan: SNAP Ruleset & Configuration Alignment
On this page
Status
| Step | Description | Status |
|---|---|---|
1 |
Fill remaining citation gaps in rulesets/georgia/citations.toml for all SNAP keys |
Done (2026-04-09) — 148/148 keys cited, zero audit errors |
2 |
Fix EBT expungement (365 → 274 days per month) and Medicaid child 0-1 limit (220% → 205%) |
Done (2026-04-09) |
3 |
Add ABAWD time clock status tracking to canopy-snap store layer |
Done (2026-04-09) — migration, store module with 15 status enum, get_or_create/update/count functions |
4 |
Add self-employment parameters to jurisdiction.toml |
Done (2026-04-09) — [snap.self_employment] section with 40% deduction, boarder income method |
5 |
Add verification threshold parameters to jurisdiction.toml |
Done (2026-04-09) — [snap.verification_thresholds] with $50/$100/$25/$25/75% |
6 |
Add DSNAP parameters to jurisdiction.toml |
Done (2026-04-09) — [snap.dsnap] with 3-day SOP, net income basis, limits by HH size |
7 |
Update SNAP rulesets for PAMMS-specific deduction rules |
Done (2026-04-09) — added Georgia SMD ($161) option in medical deduction, homeless shelter deduction ($199) as alternative to excess shelter |
8 |
Verify all corrections with cargo xtask policy audit |
Done (2026-04-09) — 150/150 keys cited, zero staleness warnings |
Dependency: Plan 1 (Federal Parameter Data Completion) — federal files must be FY2026 before jurisdiction alignment
Branch: feature/snap-pamms-alignment
Context
SNAP Phase 1 UAT is code-complete (512 tests, 67 E2E), but the comprehensive PAMMS read (98 pages, sections 3000-3810 + appendices) revealed data discrepancies and missing configuration values. The core SNAP eligibility engine is correct architecturally — the issues are in parameter values and missing tracking features.
Key findings from PAMMS that need addressing:
-
cargo xtask policy auditreports 84 missing citations across all programs — approximately 30 are SNAP-related -
EBT expungement is 274 days per individual month, not 365 days flat (PAMMS 3805)
-
Medicaid child 0-1 income limit was 220% in jurisdiction.toml but PAMMS 2182 says 205% for non-Newborn Medicaid children
-
ABAWD time clock tracks 15 distinct monthly status values (C/E/D/A/G/H/M/N/O/P/R/S/W/X/T) — we currently track only hours
-
Self-employment 40% standard business deduction is a Georgia state option (PAMMS 3425)
-
Verification has specific monetary thresholds for when TPS verification is required ($50 earned income change, $100 unearned, $25 medical/child support, 75% of resource limit)
-
DSNAP (Disaster SNAP) has separate income limits and a 3-day SOP
-
Senior SNAP age threshold changed from 60 to 66 effective 2/2/2026 (PAMMS 3725)
Steps
Step 1: Fill SNAP Citation Gaps
Run cargo xtask policy audit and address every MISSING citation that starts with snap.. For each, read the corresponding PAMMS source file, verify the value in jurisdiction.toml, and add the citation to rulesets/georgia/citations.toml.
Missing SNAP citations to fill (from the audit output):
-
snap.abawd.discretionary_exemption_pct— PAMMS 3355 -
snap.abawd_waiver_areas— PAMMS 3355 -
snap.certification.*— PAMMS 3105 Chart 3105.1 -
snap.determination.*— PAMMS 3105 -
snap.disqualifications.*— PAMMS 3310, 3315 -
snap.expedited.*— PAMMS 3110 -
snap.ipv.*— PAMMS 3315 -
snap.issuance.*— PAMMS 3810 -
snap.sua.allow_actual_utility_costs— PAMMS 3617 -
snap.sua.available_tiers— PAMMS 3617
Each citation must include: value, authority, source_ref (PAMMS file path), effective_date, federal_citation, verified_date.
Step 2: Fix Remaining Incorrect Values
File: rulesets/georgia/jurisdiction.toml
Corrections with PAMMS citations:
| Key | Current | Correct | PAMMS Source |
|---|---|---|---|
|
365 |
274 |
PAMMS 3805 ("274 days" per month of benefits) |
|
220 |
205 |
PAMMS 2182 (220% is pregnant women; children 0-1 = 205%) |
|
149 |
149 |
Correct (verify against PAMMS A2) |
|
133 |
133 |
Correct (verify against PAMMS A2) |
Add citation entries for each corrected value.
Step 3: Add ABAWD Time Clock Status Tracking
Files: services/canopy-snap/migrations/ (new migration), services/canopy-snap/src/store/ (new or updated module)
PAMMS 3355 defines 15 ABAWD Time Clock (ATC) status values for each month of the 36-month window:
| Code | Meaning |
|---|---|
C |
Countable month (benefits received, work requirement not met) |
E |
Exempt (meets an exemption) |
D |
Discretionary exemption granted |
A |
ABAWD work requirement met |
G |
Good cause |
H |
Prorated month (does not count) |
M |
Month of regaining eligibility |
N |
Not receiving benefits |
O |
Over-issuance month |
P |
Pending (status not yet determined) |
R |
Regained eligibility (earned second 3-month period) |
S |
Second 3-month period month |
W |
Waived area |
X |
Not an ABAWD (aged out, exempt, not work registrant) |
T |
Transferred from another state |
Migration:
CREATE TABLE abawd_time_clock (
id UUID PRIMARY KEY,
person_id UUID NOT NULL,
period_start DATE NOT NULL, -- 36-month period start (e.g., 2023-12-01)
period_end DATE NOT NULL, -- 36-month period end (e.g., 2026-11-30)
month_statuses JSONB NOT NULL, -- {"2024-01": "N", "2024-02": "C", ...}
countable_months INTEGER NOT NULL DEFAULT 0,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE INDEX idx_abawd_clock_person ON abawd_time_clock(person_id);
Store functions: get_or_create_time_clock(pool, person_id), update_month_status(pool, person_id, month, status), count_countable_months(pool, person_id).
The existing canopy-snap/src/api/abawd_handler.rs activity recording should update the time clock after checking if hours meet the 80-hour threshold.
Step 4: Add Self-Employment Parameters
File: rulesets/georgia/jurisdiction.toml
[snap.self_employment]
standard_deduction_pct = 40 # Georgia state option (PAMMS 3425)
standard_deduction_enabled = true # AU must incur at least one allowable cost
farm_gross_minimum_for_loss_offset = 1000 # $1,000 annual gross to offset farm losses
boarder_income_deduction_method = "max_allotment_or_40pct" # PAMMS 3425
Add citations for each.
Step 5: Add Verification Threshold Parameters
File: rulesets/georgia/jurisdiction.toml
[snap.verification_thresholds]
# When TPS verification is required for changes (PAMMS 3035, 3715)
earned_income_change_cents = 5000 # $50 change triggers TPS verification
unearned_income_change_cents = 10000 # $100 change triggers TPS verification
medical_expense_change_cents = 2500 # $25 change triggers TPS verification
child_support_change_cents = 2500 # $25 change triggers TPS verification
resource_verification_pct = 75 # Verify when resources > 75% of limit
These thresholds inform the worker portal when to require verification documents vs. accept client statement.
Step 6: Add DSNAP Parameters
File: rulesets/georgia/jurisdiction.toml
[snap.dsnap]
# Disaster SNAP parameters (PAMMS 3125)
sop_days = 3 # 3 calendar days from interview
income_basis = "net" # Net income, NOT converted
proration_enabled = false # DSNAP benefits not prorated
# DSNAP gross income limits by HH size (FY2026, PAMMS 3125)
income_limits = [2258, 2716, 3174, 3647, 4143, 4639, 5098, 5556]
each_additional = 459
Step 7: Update SNAP Rulesets
Review rulesets/georgia/snap-eligibility.json against the PAMMS 3610 budgeting cascade. The ruleset should already implement the correct deduction order, but verify:
-
The standard deduction tiers reference the updated federal file values
-
The medical deduction correctly applies the $35 threshold and Georgia’s $161 SMD
-
The excess shelter deduction correctly applies the $744 cap (uncapped for elderly/disabled)
-
The child support deduction is included in the cascade
-
The homeless shelter deduction ($199) is an alternative to excess shelter
If the ruleset needs changes, update the JDM nodes. All threshold values must come from the input JSON (injected by params.rs from the federal/jurisdiction files), never hardcoded in the ruleset.
PAMMS Source References
-
Application processing:
dfcs-snap/modules/snap/pages/3105.adoc -
Expedited:
dfcs-snap/modules/snap/pages/3110.adoc -
AU composition:
dfcs-snap/modules/snap/pages/3205.adoc -
Categorical eligibility:
dfcs-snap/modules/snap/pages/3210.adoc -
Verification:
dfcs-snap/modules/snap/pages/3035.adoc -
ABAWD:
dfcs-snap/modules/snap/pages/3355.adoc -
Resources:
dfcs-snap/modules/snap/pages/3405.adoc -
Income:
dfcs-snap/modules/snap/pages/3420.adoc -
Self-employment:
dfcs-snap/modules/snap/pages/3425.adoc -
Budgeting:
dfcs-snap/modules/snap/pages/3610.adoc -
Deductions:
dfcs-snap/modules/snap/pages/3611.adocthrough3618.adoc -
Senior SNAP:
dfcs-snap/modules/snap/pages/3725.adoc -
Periodic reporting:
dfcs-snap/modules/snap/pages/3730.adoc -
EBT/issuance:
dfcs-snap/modules/snap/pages/3805.adoc,3810.adoc -
DSNAP:
dfcs-snap/modules/snap/pages/3125.adoc -
Financial standards:
dfcs-snap/modules/snap/pages/appendix-a-food-stamp-income-limits.adoc