Skip to content

Add comprehensive SNAP utility allowance data (FY2019-FY2026, sub-regions, household size)#7726

Open
MaxGhenis wants to merge 12 commits intomainfrom
add-snap-sua-data
Open

Add comprehensive SNAP utility allowance data (FY2019-FY2026, sub-regions, household size)#7726
MaxGhenis wants to merge 12 commits intomainfrom
add-snap-sua-data

Conversation

@MaxGhenis
Copy link
Contributor

@MaxGhenis MaxGhenis commented Mar 7, 2026

Summary

  • Add FY2019, FY2023, and FY2026 SNAP utility allowance values for all 53 states/territories
  • Split Alaska into 6 SNAP utility sub-regions (Central, Northern, Northwest, Southcentral, Southeast, Southwest) per 7 AAC 45.531, with county-to-region mapping
  • Split New York into 3 sub-regions (Nassau/Suffolk, NYC, Other NY) with county mapping
  • Add household-size-based SUA and BUA for AZ, TN, VA (NC was already modeled)
  • Add HI and GU individual utility allowances (electricity, gas, water) that vary by household size
  • Rename participating_statesstates parameter files for clarity

Data sourced from USDA SNAP utility allowance spreadsheets and snapscreener.com.

Test plan

  • All 257 SNAP tests pass locally
  • CI passes

🤖 Generated with Claude Code

Adds Standard Utility Allowance (HCSUA) values from USDA FNS xlsx files:
- FY2019 (2018-10-01): 53 state/territory entries
- FY2023 (2022-10-01): 52 entries (CO already existed)

Fills the FY2023 gap and extends coverage back to FY2019.

Closes #7721

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@codecov
Copy link

codecov bot commented Mar 7, 2026

Codecov Report

❌ Patch coverage is 85.50725% with 10 lines in your changes missing coverage. Please review.
✅ Project coverage is 94.15%. Comparing base (63a7861) to head (12d5d62).
⚠️ Report is 24 commits behind head on main.

Files with missing lines Patch % Lines
..._us/variables/gov/usda/snap/snap_utility_region.py 80.76% 8 Missing and 2 partials ⚠️
Additional details and impacted files
@@             Coverage Diff             @@
##              main    #7726      +/-   ##
===========================================
- Coverage   100.00%   94.15%   -5.85%     
===========================================
  Files            5        4       -1     
  Lines           69      171     +102     
  Branches         2       14      +12     
===========================================
+ Hits            69      161      +92     
- Misses           0        8       +8     
- Partials         0        2       +2     
Flag Coverage Δ
unittests 94.15% <85.50%> (-5.85%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

MaxGhenis and others added 2 commits March 7, 2026 08:45
Test 2 (2021, CA): Jan-Sep now uses FY2019 value (415) instead of 0
Test 3 (2020, CA): Now uses FY2019 value (415*12=4980) instead of 0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds HCSUA values effective 2025-10-01 for all 50 states + DC.
Data sourced from snapscreener.com/data which compiles state-published
SUA values. HI/GU/VI remain 0 (use individual utility allowances).

Closes #7030

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@MaxGhenis MaxGhenis changed the title Add FY2019 and FY2023 SNAP SUA values for all states Add FY2019, FY2023, and FY2026 SNAP SUA values for all states Mar 7, 2026
MaxGhenis and others added 6 commits March 7, 2026 09:05
Add 2025-10-01 (FY2026) entries from snapscreener.com for:
- BUA (limited/main.yaml) - all 53 states/territories
- Electricity, gas, water, sewage, trash, phone - all 53 states/territories
- NC household-size SUA (by_household_size/amount.yaml) - sizes 1-10

Update NC SUA test expectations for FY2026 values taking effect Oct 2025.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Simpler, clearer parameter name for the list of states that vary
SUA/LUA by household size.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add FY2024-FY2026 household-size-based values for:
- AZ: 2 tiers (HH1-3, HH4+) for both SUA and BUA
- TN: 10 tiers (HH1 through HH10+) for SUA and BUA
- VA: 2 tiers (HH1-3, HH4+) for SUA only (VA has no BUA)

Also adds FY2026 values for NC BUA by household size.

Source: USDA FNS SUA Table FY2024/FY2025, snapscreener.com FY2026

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…owances

- Split AK into 6 SNAP utility sub-regions (Central, Northern, Northwest,
  Southcentral, Southeast, Southwest) per 7 AAC 45.531
- Split NY into 3 sub-regions (Nassau/Suffolk, NYC, Other NY)
- Add county-to-region mapping in snap_utility_region formula
- Add HI and GU individual utility allowances (electricity, gas, water)
  that vary by household size
- Update snap_individual_utility_allowance to handle by-household-size
  lookups for HI/GU

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@MaxGhenis MaxGhenis changed the title Add FY2019, FY2023, and FY2026 SNAP SUA values for all states Add comprehensive SNAP utility allowance data (FY2019-FY2026, sub-regions, household size) Mar 7, 2026
@MaxGhenis MaxGhenis requested a review from hua7450 March 7, 2026 15:25
MaxGhenis and others added 3 commits March 7, 2026 10:26
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The breakdown metadata referenced state_code which caused AK/NY
sub-region keys to be silently dropped during parameter loading.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@MaxGhenis
Copy link
Contributor Author

Microsim impact analysis

Ran household-level examples comparing 2024 vs 2026 values — all features working correctly:

SUA examples:

State 2024 SUA 2026 SUA Change
CA $7,299 $7,956 +$657 (+9.0%)
NC HH3 (by HH size) $8,607 $9,216 +$609 (+7.1%)
AK (Southcentral sub-region) $7,053 $7,092 +$39 (+0.6%)
NY (Other NY sub-region) $9,933 $10,524 +$591 (+6.0%)

IUA examples:

State 2024 IUA 2026 IUA Change
HI HH2 (by HH size) $11,331 $11,608 +$277
AK (Southcentral) $7,053 $7,132 +$79

Aggregate microsim (Enhanced CPS): Utility expense variables (electricity_expense, gas_expense, etc.) are all zero in the current microdata, so the aggregate SNAP impact is near-zero. The parameters are correct and verified at the household level — the microdata gap is tracked separately.

@hua7450
Copy link
Collaborator

hua7450 commented Mar 9, 2026

Program Review: PR #7726 -- Add comprehensive SNAP utility allowance data

Source Documents


Critical (Must Fix)

  1. WY FY2026 SUA value orphaned after metadata block

    • File: policyengine_us/parameters/gov/usda/snap/income/deductions/utility/standard/main.yaml (line 493)
    • The entry 2025-10-01: 510 appears AFTER the metadata: block instead of under the WY: key. The YAML parser will attach this value to the metadata dict, meaning Wyoming has no FY2026 SUA value. Any WY SNAP calculation after Oct 2025 returns FY2025 value ($497) instead of the correct $510.
    • Found independently by: reference-checker (C1) and code-validator (Critical).
    • Fix: Move 2025-10-01: 510 under the WY: key before the metadata: block.
  2. Indiana SUA (SUA 1) FY2025 value is wrong: $502 should be $473

    • File: policyengine_us/parameters/gov/usda/snap/income/deductions/utility/standard/main.yaml (line 177)
    • Repo has 2024-10-01: 502. The Indiana FSSA Policy Manual Section 3020.00.00 (PDF 2, p.6) states SUA 1 = $473 from 5/1/2024 through 9/30/2025. The $502 value does not appear in any Indiana source -- it matches Oregon/Washington FY2025 values and was likely a data extraction error.
    • Confirmed at 600 DPI against PDF 2, p.6.
    • Impact: $29/month overstatement (+6.1%) for Indiana SNAP households from 10/1/2024 through 9/30/2025.
    • Found independently by: IN/CA PDF auditor (B.1) and reference-checker (C2).
    • Fix: Remove the 2024-10-01: 502 entry. The existing 2023-05-01: 473 remains in effect through 9/30/2025.
  3. Indiana LUA (SUA 2) FY2025 value is wrong: $274 should be $276

    • File: policyengine_us/parameters/gov/usda/snap/income/deductions/utility/limited/main.yaml (line 139)
    • Repo has 2024-05-01: 274. The Indiana FSSA Policy Manual Section 3020.00.00 (PDF 2, p.6) states SUA 2 = $276 from 5/1/2024 through 9/30/2025.
    • Confirmed at 600 DPI against PDF 2, p.6.
    • Impact: $2/month understatement for Indiana SNAP households from 5/1/2024 through 9/30/2025.
    • Fix: Either remove the 2024-05-01: 274 entry (since $276 from 2023-05-01 remains in effect) or correct to 2024-05-01: 276.
  4. Alaska county mapping: 3 boroughs/census areas incorrectly assigned to South Central (should be Southwest)

    • File: policyengine_us/variables/gov/usda/snap/snap_utility_region.py (lines 89-96)
    • BRISTOL_BAY_BOROUGH_AK, DILLINGHAM_CENSUS_AREA_AK, and LAKE_AND_PENINSULA_BOROUGH_AK are mapped to AK_SOUTHCENTRAL but Alaska FSP-77 (PDF 1, p.2) lists them under the "Southwestern Utility Region (SW)."
    • All 3 confirmed at 600 DPI against FSP-77 p.2.
    • Impact: Affected households receive South Central SUA ($591 FY2026) instead of correct Southwest SUA ($1,064 FY2026) -- a $473/month understatement.
    • Fix: Move these 3 entries from AK_SOUTHCENTRAL to AK_SOUTHWEST in snap_utility_region.py.
  5. Alaska county mapping: 2 boroughs missing from Southeast region (default to Central)

    • File: policyengine_us/variables/gov/usda/snap/snap_utility_region.py (lines 99-113)
    • HAINES_BOROUGH_AK and PETERSBURG_BOROUGH_AK are not in any region mapping list. They default to AK_C (Central) via the fallback logic. Alaska FSP-77 (PDF 1, p.2) lists both under the "Southeastern Utility Region (SE)."
    • Both confirmed at 600 DPI against FSP-77 p.2.
    • Note: HAINES_BOROUGH_AK and PETERSBURG_BOROUGH_AK may also be missing from the county enum (county_enum.py); if so, they must be added there first.
    • Impact: Affected households receive Central SUA ($625 FY2026) instead of correct Southeast SUA ($517 FY2026).
    • Fix: Add both to the AK_SOUTHEAST list in snap_utility_region.py (and to county_enum.py if absent).
  6. County-to-region mapping formula has zero test coverage

    • File: policyengine_us/variables/gov/usda/snap/snap_utility_region.py (formula method)
    • Tests: snap_utility_region.yaml (1 test for IL pass-through only)
    • The snap_utility_region formula contains the most complex new logic in this PR: mapping state_code + county_str to 6 AK sub-regions and 3 NY sub-regions using nested where() calls. Not a single test exercises this code path with AK or NY county inputs. This means the 5 county mapping errors above (items 4-5) could not have been caught by the test suite.
    • Priority: P0 from test coverage agent.
    • Fix: Add tests for at least: one AK county per region, AK default fallback, one NY NYC county, one NY Nassau/Suffolk county, one NY other county.
  7. FY2026 values for ~45 states rely on snapscreener.com estimates (not official sources)

    • Files: standard/main.yaml, limited/main.yaml, all single/*.yaml
    • Only 5 states have officially verified FY2026 values (CA, IL, IN, NY, TX). The remaining ~45 states use snapscreener.com estimates based on the USDA-approved 2.7% CPI-U adjustment. Several outlier states show increases inconsistent with the 2.7% methodology and are unverified:
      • NJ: +11.3% ($878 -> $977)
      • PA: +13.1% ($758 -> $857)
      • ME: +4.7% ($1,047 -> $1,096)
      • ND: +0.9% ($765 -> $772)
    • The working_references.md transparently documents which values are estimates vs. official.
    • Severity note: This is informational for FY2025 and earlier values (all verified), but the unverified outlier FY2026 values for NJ, PA, ME, ND warrant a follow-up issue.

Should Address

  1. No tests for AZ, TN, or VA household-size-varying SUA

    • Files: snap_standard_utility_allowance.yaml
    • The standard/by_household_size/states parameter lists AZ, NC, TN, VA. Only NC is tested. No test verifies the AZ size 3/4 tier boundary (314 vs 426), TN per-person SUA schedule (439-586), or VA size 3/4 tier boundary (369 vs 467).
  2. No tests for AZ or TN household-size-varying LUA

    • Files: snap_limited_utility_allowance.yaml
    • The limited/by_household_size/states parameter lists AZ, NC, TN. Only NC is tested.
  3. No tests verifying AK/NY sub-regions produce different SUA values

    • The IUA test covers AK_C only. No test verifies that AK_NW returns 1,078 vs AK_SE returning 503, or that NY_NYC returns 1,034 vs NY_ONY returning 854.
  4. Hard-coded MAX_SPM_SIZE = 10 in 3 variable files (pre-existing)

    • Files: snap_individual_utility_allowance.py, snap_standard_utility_allowance.py, snap_limited_utility_allowance.py
    • Should be parameterized, though it is tied to the parameter table dimension (sizes 1-10) and is functionally correct.
  5. spm_unit_size accessed with period instead of period.this_year (pre-existing)

    • Files: same 3 variable files as above
    • spm_unit_size is YEAR-defined. Using period from a MONTH formula triggers auto-conversion (divides by 12), which is semantically incorrect for a count variable. May work correctly in practice due to framework handling.
  6. documentation field used instead of reference in variable files (pre-existing)

    • Files: snap_utility_region.py, snap_individual_utility_allowance.py, snap_standard_utility_allowance.py, snap_limited_utility_allowance.py
    • Per PolicyEngine standards, variables should use a reference field with a URL rather than plain-text documentation.
  7. unit = USD on boolean variables (pre-existing)

    • Files: snap_limited_utility_allowance_by_household_size.py, snap_standard_utility_allowance_by_household_size.py
    • Boolean variables should not have unit = USD.
  8. Parameter references use name: instead of title: (pre-existing)

    • Files: 8 existing parameter YAML files (all under standard/ and limited/ and single/)
    • PolicyEngine parameter patterns specify title: as the reference field name. The new by_household_size/ files correctly use title:.
  9. Maryland SUA effective dates changed from January to October

    • File: standard/main.yaml
    • The USDA FY2025 Excel footnote states Maryland's SUA is effective January 1. The PR changes pre-FY2023 MD entries from January-based to October-based dates, contradicting the official guidance.
  10. No FY2026-specific USDA reference in parameter metadata

    • All files receiving FY2026 values lack a corresponding FY2026 reference in their metadata blocks.
  11. standard/by_household_size/amount.yaml has only one reference (snapscreener)

    • This file should also reference the official USDA FNS SUA spreadsheet.
  12. Colorado inline references missing #page=XX (pre-existing)

    • Files: standard/main.yaml, limited/main.yaml
    • CO entries reference a 227-page dynamically-generated PDF without page numbers.

Suggestions

  1. Add integration test for full county-to-allowance chain

    • Test the end-to-end flow: state_code + county_str -> snap_utility_region -> snap_utility_region_str -> snap_standard_utility_allowance for an AK or NY household.
  2. Add test for household size = 0 edge case

    • The formulas use min_(MAX_SPM_SIZE, spm_size) but never max_(1, ...). Querying size-dependent parameters with key 0 could produce unexpected behavior.
  3. Add test for wrong allowance type returns zero

    • No test confirms that the SUA formula returns 0 when snap_utility_allowance_type: IUA, or vice versa.
  4. Guam IUA error margin of 3 could be tightened

    • The GU tests use absolute_error_margin: 3 -- this could be tightened once official FY2025 GU values are confirmed.
  5. Inconsistent test naming conventions

    • New tests use different naming styles than pre-existing ones. Minor style issue.
  6. Google Sheets link for FY2024 data

    • Six files reference a Google Sheets copy of the USDA FY2024 SUA table because the original USDA URL returned 404. The reference should note it is a cached/archived copy.
  7. Create follow-up issue for OBBBA "Heat and Eat" policy change

    • The OBBBA / H.R. 1 change restricting HCSUA eligibility for non-elderly/non-disabled LIHEAP-only households starting FY2026 affects the snap_utility_allowance_type formula logic, not the dollar amounts in this PR. Worth tracking separately.
  8. Copper River Census Area split is a known granularity limitation

    • The FSP-77 splits the Copper River Census Area between Northern (specific communities) and South Central (Chugach subarea communities). The repo cannot model this since it uses county/borough/census-area as the smallest geographic unit. Informational only.

PDF Audit Summary

Category Count
Confirmed correct 84
Mismatches (confirmed + visually verified at 600 DPI) 7
Unverifiable items (gas/trash FY2026 AK -- not in FSP-77) 12

Breakdown of confirmed correct values:

  • Alaska FY2025 SUA: 6 regions (all match USDA FY2025 Excel)
  • Alaska FY2026 SUA: 6 regions (all match FSP-77 p.2)
  • Alaska FY2025 individual utilities: 30 values (6 regions x 5 types, all match USDA Excel)
  • Alaska FY2026 individual utilities (electricity, phone, sewer, water): 24 values (all match FSP-77 p.2)
  • Alaska FY2025 gas_and_fuel: 6 regions (all match USDA Excel)
  • Alaska LUA/BUA: all regions confirmed zero (correct)
  • Indiana FY2026 (SUA 1-4): 4 values (all match PDF 2)
  • Indiana FY2025 (SUA 3, SUA 4): 2 values (match PDF 2)
  • California FY2026 (SUA, LUA, TUA): 3 values (all match PDF 4)
  • California FY2025 (SUA, LUA, TUA): 3 values (all match PDF 4)

Breakdown of 7 confirmed mismatches:

  1. IN SUA 1 (HCSUA): repo $502, correct $473 (confirmed PDF 2 p.6 at 600 DPI)
  2. IN SUA 2 (LUA): repo $274, correct $276 (confirmed PDF 2 p.6 at 600 DPI)
  3. AK BRISTOL_BAY_BOROUGH mapped to SC, correct is SW (confirmed FSP-77 p.2 at 600 DPI)
  4. AK DILLINGHAM_CENSUS_AREA mapped to SC, correct is SW (confirmed FSP-77 p.2 at 600 DPI)
  5. AK LAKE_AND_PENINSULA_BOROUGH mapped to SC, correct is SW (confirmed FSP-77 p.2 at 600 DPI)
  6. AK HAINES_BOROUGH missing from SE region mapping (confirmed FSP-77 p.2 at 600 DPI)
  7. AK PETERSBURG_BOROUGH missing from SE region mapping (confirmed FSP-77 p.2 at 600 DPI)

Validation Summary

Check Result
Regulatory Accuracy 2 value mismatches (IN SUA, IN LUA), 5 county mapping errors (AK), 1 structural issue (WY YAML)
Reference Quality FY2019-FY2025 fully traceable; FY2026 partially traceable (~45 states from snapscreener)
Code Patterns 4 pre-existing warnings (hard-coded constant, period usage, documentation field, unit mismatch); no new violations
Test Coverage P0: county mapping formula untested; P1-P2: AZ/TN/VA SUA/LUA, sub-region differentiation untested
PDF Value Audit 7 mismatches / 84 confirmed correct / 12 unverifiable
CI Status Passing (codecov warnings only)

Review Severity: REQUEST_CHANGES

Rationale: 6 critical issues require code changes:

  • 1 structural YAML error (WY data loss)
  • 2 confirmed value mismatches (IN SUA $502->$473, IN LUA $274->$276)
  • 5 confirmed county mapping errors (3 wrong region, 2 missing)
  • County mapping formula has zero test coverage (the feature most likely to contain bugs, and it does)

These are not edge cases or informational notes. The Indiana and Alaska issues produce materially incorrect SNAP benefit calculations for affected households.


Next Steps

To auto-fix issues: /fix-pr 7726

Priority order for fixes:

  1. WY YAML: move 2025-10-01: 510 under WY: key (1 line move)
  2. IN SUA: remove 2024-10-01: 502 from standard/main.yaml (1 line deletion)
  3. IN LUA: remove 2024-05-01: 274 from limited/main.yaml (or correct to 276)
  4. AK county mapping: move Bristol Bay, Dillingham, Lake and Peninsula from AK_SOUTHCENTRAL to AK_SOUTHWEST in snap_utility_region.py
  5. AK county mapping: add Haines Borough and Petersburg Borough to AK_SOUTHEAST list (may require additions to county_enum.py)
  6. Add county mapping tests for snap_utility_region (AK and NY county inputs)

Copy link
Collaborator

@hua7450 hua7450 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See detailed review comment above. 6 critical issues require fixes before merge: WY YAML structural error, 2 Indiana value mismatches (confirmed at 600 DPI), 5 Alaska county mapping errors (confirmed against FSP-77), and zero test coverage for the county mapping formula.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants