Plan: Federal Parameter Data Completion
On this page
Status
| Step | Description | Status |
|---|---|---|
1 |
Audit existing federal parameter files against PAMMS Appendix A |
Done (2026-04-09) — found FY2025 values in all 3 files, rounding errors in income limits |
2 |
Update snap-deductions-2026.json to FY2026 COLA values |
Done (2026-04-09) — standard deductions $209/$223/$261/$299, shelter cap $744, homeless $199, assets $3,000/$4,500 |
3 |
Update snap-income-limits-2026.json if needed |
Done (2026-04-09) — fixed 9 rounding errors vs PAMMS, added 165% FPL elderly/disabled and max allotments |
4 |
Add snap-budgeting-factors.json (conversion factors, proration table) |
Done (2026-04-09) — conversion factors, proration day table, self-employment 40%, verification minimums |
5 |
Create rulesets/federal/citations.toml for federal parameter provenance |
Done (2026-04-09) — 7 citations covering all federal parameter files |
6 |
Verify with cargo xtask policy audit |
Done (2026-04-09) — 148/148 citations valid, no staleness warnings |
Branch: feature/federal-parameter-completion
Context
A comparison of Canopy’s rulesets/federal/snap-deductions-2026.json against PAMMS Appendix A (effective October 2025, MT-84) reveals the file contains FY2025 values, not FY2026. The FNS annual COLA update was not applied. Additionally, several federal parameters needed by the budgeting engine are not in data files: income conversion factors (weekly/biweekly/semi-monthly), benefit proration day-of-month factors, and the full Basis of Issuance (BOI) tables.
Per ADR-003, all eligibility parameters must be in data files — never hardcoded in Rust. Per ADR-011, every federal parameter file must have a corresponding citation in rulesets/federal/citations.toml.
Scope
In scope:
-
Update
snap-deductions-2026.jsonstandard deductions, shelter cap, homeless deduction, and asset limits to FY2026 values -
Verify
snap-income-limits-2026.jsonmatches PAMMS Appendix A exactly -
Verify
snap-allotments-2026.jsonmatches PAMMS Appendix A exactly -
Create
snap-budgeting-factors.jsonwith conversion factors and proration table -
Create
rulesets/federal/citations.tomlwith FNS/Federal Register provenance for all files -
Verify
fpl-2026.jsonis current
Out of scope:
-
Georgia-specific parameters (those are in
rulesets/georgia/jurisdiction.tomland itscitations.toml) -
JDM ruleset logic changes (covered in Plans 2 and 3)
-
TANF/Medicaid federal parameters (covered in Plans 3 and 4)
Steps
Step 1: Audit Existing Federal Parameter Files
Read each file in rulesets/federal/ and compare against PAMMS source data:
File: snap-deductions-2026.json
Current (FY2025) vs. required (FY2026) from PAMMS dfcs-snap/modules/snap/pages/appendix-a-food-stamp-income-limits.adoc and 3613.adoc:
| Parameter | Current (FY2025) | Required (FY2026) |
|---|---|---|
Standard deduction (AU 1-3) |
$198 |
$209 |
Standard deduction (AU 4) |
$208 |
$223 |
Standard deduction (AU 5) |
$244 |
$261 |
Standard deduction (AU 6+) |
$279 |
$299 |
Excess shelter cap |
$672 ($67,200¢) |
$744 ($74,400¢) |
Homeless shelter deduction |
$180 ($18,000¢) |
$199 ($19,900¢) |
Asset limit (standard) |
$2,750 ($275,000¢) |
$3,000 ($300,000¢) |
Asset limit (elderly/disabled) |
$4,250 ($425,000¢) |
$4,500 ($450,000¢) |
Dependent care cap (under 2) |
$200 ($20,000¢) |
$200 (unchanged) |
Dependent care cap (2+) |
$175 ($17,500¢) |
$175 (unchanged) |
Medical threshold |
$35 ($3,500¢) |
$35 (unchanged) |
Earned income deduction % |
20% |
20% (unchanged) |
jurisdiction.toml sets dependent_care_capped = false.
File: snap-income-limits-2026.json
Verify against PAMMS Appendix A income limits table:
| HH Size | Gross 130% FPL | Net 100% FPL | Elderly/Disabled 165% FPL | Max Allotment |
|---|---|---|---|---|
1 |
$1,696 |
$1,305 |
$2,152 |
$298 |
2 |
$2,292 |
$1,763 |
$2,909 |
$546 |
3 |
$2,888 |
$2,221 |
$3,665 |
$785 |
4 |
$3,483 |
$2,680 |
$4,421 |
$994 |
5 |
$4,079 |
$3,138 |
$5,177 |
$1,183 |
6 |
$4,675 |
$3,596 |
$5,934 |
$1,421 |
7 |
$5,271 |
$4,055 |
$6,690 |
$1,571 |
8 |
$5,867 |
$4,513 |
$7,446 |
$1,789 |
Each add’l |
+$596 |
+$459 |
+$757 |
+$218 |
Minimum allotment for 1-2 person AUs: $24 (was $23 in FY2025).
Step 2: Update snap-deductions-2026.json
Replace the FY2025 values with FY2026 values from the table above. The file structure stays the same — only numeric values change.
File: rulesets/federal/snap-deductions-2026.json
{
"_comment": "SNAP deduction parameters for FY2026 (October 2025 - September 2026).",
"_source": "FNS Federal Register, SNAP Cost-of-Living Adjustments, PAMMS Appendix A MT-84",
"_fiscal_year": "2026",
"_effective_date": "2025-10-01",
"standard_deduction": {
"_comment": "Standard deduction by household size (7 CFR 273.9(d)(1))",
"1_3": 209,
"4": 223,
"5": 261,
"6_plus": 299
},
"earned_income_deduction_pct": 20,
"dependent_care_deduction_max_cents": {
"under_2": 20000,
"2_and_over": 17500
},
"medical_deduction_threshold_cents": 3500,
"excess_shelter_deduction_cap_cents": 74400,
"homeless_shelter_deduction_cents": 19900,
"net_income_limit_pct_fpl": 100,
"gross_income_limit_pct_fpl": 130,
"asset_limit_cents": {
"standard": 300000,
"elderly_disabled": 450000
}
}
Also verify snap-income-limits-2026.json and snap-allotments-2026.json match the PAMMS table. If they already contain FY2026 values, no change needed.
Step 3: Add snap-budgeting-factors.json
File: rulesets/federal/snap-budgeting-factors.json (NEW)
This file contains federally mandated budgeting constants from 7 CFR 273.10 and PAMMS 3605/3610:
{
"_comment": "SNAP budgeting constants per 7 CFR 273.10 and PAMMS 3605/3610",
"_source": "7 CFR 273.10, FNS Handbook 501",
"income_conversion_factors": {
"_comment": "Multiply income by factor to convert to monthly (7 CFR 273.10(c)(2))",
"weekly": 4.3333,
"biweekly": 2.1666,
"semi_monthly": 2.0,
"monthly": 1.0
},
"benefit_computation": {
"_comment": "Net income multiplied by this percent to get AU contribution (7 CFR 273.10(e)(2)(ii))",
"net_income_percent": 30
},
"self_employment": {
"_comment": "Optional standard deduction for cost of doing business (7 CFR 273.11(a)(2))",
"standard_deduction_pct": 40,
"farm_gross_minimum_for_loss_offset": 1000
},
"proration_factors": {
"_comment": "Day-of-month factor for initial month benefit proration. Factor = (days remaining including application day) / total days in a 30-day month. PAMMS 3810.",
"1": 1.0000, "2": 0.9667, "3": 0.9334, "4": 0.9000, "5": 0.8667,
"6": 0.8334, "7": 0.8000, "8": 0.7667, "9": 0.7334, "10": 0.7000,
"11": 0.6667, "12": 0.6334, "13": 0.6000, "14": 0.5667, "15": 0.5334,
"16": 0.5000, "17": 0.4667, "18": 0.4334, "19": 0.4000, "20": 0.3667,
"21": 0.3334, "22": 0.3000, "23": 0.2667, "24": 0.2334, "25": 0.2000,
"26": 0.1667, "27": 0.1334, "28": 0.1000, "29": 0.0667, "30": 0.0334,
"31": 0.0334
},
"ebt_issuance_schedule": {
"_comment": "Georgia EBT staggered issuance dates by last 2 digits of client ID (PAMMS 3810). This is a state option, not federal, but stored here for reference.",
"00_09": 5, "10_19": 7, "20_29": 9, "30_39": 11, "40_49": 13,
"50_59": 15, "60_69": 17, "70_79": 19, "80_89": 21, "90_99": 23
},
"minimum_verification": {
"_comment": "Minimum pay stubs/records required for income verification (PAMMS 3605)",
"weekly_biweekly_semimonthly": "1 month or 4 consecutive weeks",
"monthly": "2 months",
"irregular": "3 months"
}
}
ebt_issuance_schedule is Georgia-specific but included in the federal file because the proration factors interact with issuance dates. If a future jurisdiction uses different stagger dates, move to jurisdiction.toml.
Step 4: Create rulesets/federal/citations.toml
File: rulesets/federal/citations.toml (NEW)
[meta]
jurisdiction = "federal"
schema_version = 1
last_full_audit = "2026-04-07"
audited_by = "pamms_audit"
[citations."snap-deductions-2026"]
authority = "fns_memo"
source_ref = "FNS SNAP COLA Memo FY2026"
effective_date = "2025-10-01"
federal_citation = "7 CFR 273.9(d)"
verified_date = "2026-04-07"
notes = "Verified against PAMMS Appendix A (MT-84)"
[citations."snap-income-limits-2026"]
authority = "fns_memo"
source_ref = "FNS SNAP COLA Memo FY2026"
effective_date = "2025-10-01"
federal_citation = "7 CFR 273.10"
verified_date = "2026-04-07"
notes = "Verified against PAMMS Appendix A (MT-84)"
[citations."snap-allotments-2026"]
authority = "fns_memo"
source_ref = "FNS Thrifty Food Plan Adjustment FY2026"
effective_date = "2025-10-01"
federal_citation = "7 CFR 273.10(e)(2)(ii)"
verified_date = "2026-04-07"
[citations."snap-budgeting-factors"]
authority = "federal_register"
source_ref = "7 CFR 273.10, FNS Handbook 501"
effective_date = "2002-03-01"
federal_citation = "7 CFR 273.10(c)(2), 7 CFR 273.10(e)(2)(ii)"
verified_date = "2026-04-07"
notes = "Conversion factors and proration table are long-standing federal constants"
[citations."fpl-2026"]
authority = "federal_register"
source_ref = "HHS Poverty Guidelines 2026"
effective_date = "2026-01-01"
federal_citation = "42 USC 9902(2)"
verified_date = "2026-04-07"
[citations."snap-alien-eligibility"]
authority = "federal_register"
source_ref = "7 CFR 273.4"
effective_date = "2025-07-04"
federal_citation = "7 CFR 273.4, OBBBA 2025"
verified_date = "2026-04-07"
notes = "Updated for OBBBA effective 7/4/2025"
Step 5: Update params.rs If Loading Changed
If the new snap-budgeting-factors.json file introduces fields that canopy-snap/src/params.rs needs to load, add the loading logic. Specifically:
-
income_conversion_factors— needed by the budgeting cascade for converting pay frequency to monthly -
proration_factors— needed by benefit issuance for initial month proration -
self_employment.standard_deduction_pct— needed by determine.rs when self-employment income is present
The SnapParameterTable struct in params.rs may need new fields. Follow the existing pattern: load JSON at startup, parse into struct, inject as Arc<SnapParameterTable> Extension.
PAMMS Source References
-
Income limits:
dfcs-snap/modules/snap/pages/appendix-a-food-stamp-income-limits.adoc -
Standard deductions:
dfcs-snap/modules/snap/pages/3613.adoc -
Shelter deductions:
dfcs-snap/modules/snap/pages/3617.adoc -
Homeless deduction:
dfcs-snap/modules/snap/pages/3618.adoc -
Budgeting methodology:
dfcs-snap/modules/snap/pages/3610.adoc -
Prospective budgeting/conversion:
dfcs-snap/modules/snap/pages/3605.adoc -
Proration/issuance:
dfcs-snap/modules/snap/pages/3810.adoc -
Resources/assets:
dfcs-snap/modules/snap/pages/3405.adoc