Skip to content

Update SNAP ABAWD work requirements for HR1 (P.L. 119-21) with missing exemptions and CA delay#7453

Merged
PavelMakarchuk merged 7 commits intomainfrom
snap-abawd-hr1-update-rebased
Feb 23, 2026
Merged

Update SNAP ABAWD work requirements for HR1 (P.L. 119-21) with missing exemptions and CA delay#7453
PavelMakarchuk merged 7 commits intomainfrom
snap-abawd-hr1-update-rebased

Conversation

@MaxGhenis
Copy link
Contributor

Replaces #7415 (rebased to resolve merge conflicts). Original PR by @hua7450.

Summary

Updates SNAP ABAWD work requirements to reflect P.L. 119-21 (One Big Beautiful Bill Act), adds missing non-age work registration exemptions per 7 U.S.C. 2015(o)(3)(D), and properly handles California's delayed HR1 adoption (ACL 25-93) via a centralized state routing variable.

Closes #7446 is tracked as a follow-up (HI/AK delayed adoption parameters).

Regulatory Authority

Changes

Federal parameter updates

  • Corrected effective dates to 2025-07-04 (P.L. 119-21 enactment date)
  • Backdated ABAWD age exemption to 1997-03-01 (PRWORA effective date) with full FRA 2023 phase-in history:
    • 1997-03-01: 50 (original, ages 18-49 subject)
    • 2023-09-01: 51 (FRA phase 1, "over 51")
    • 2023-10-01: 53 (FRA phase 2, "over 53")
    • 2024-10-01: 55 (FRA phase 3, "over 55")
    • 2025-07-04: 65 (HR1/OBBB, "over 65")
  • Dependent age threshold backdated to 1997-03-01 (unchanged value of 18 until HR1 → 14)

HI/AK exemption removed

  • Removed blanket state exemption logic (is_exempt_state) from meets_snap_abawd_work_requirements formula
  • Both HI and AK are implementing ABAWD (effective Nov 1, 2025):
  • exempt_states.yaml parameter retained with updated description documenting preferential waiver authority per 7 U.S.C. 2015(o)(4)(A)(ii) and 2015(o)(7)
  • HI/AK delayed adoption parameters (effective 2025-11-01) tracked in Add HI/AK delayed ABAWD adoption parameters (Nov 2025) #7446

New variable: is_snap_abawd_hr1_in_effect

Centralizes state-level HR1 adoption routing using select(). States that delay HR1 adoption (currently CA) have their own hr1_in_effect parameter; all other states use the federal in_effect parameter.

New variable: is_snap_work_registration_exempt_non_age

Implements 7 CFR 273.7(b)(1) non-age exemptions used by ABAWD exemption (D):

  • (ii) Physically/mentally unfit (is_disabled)
  • (iv) Caring for dependent child under 6 or incapacitated person
  • (v) Receiving unemployment compensation
  • (viii) Enrolled at least half-time in school/training/higher ed

Intentionally omitted (documented in code):

  • (iii) Subject to TANF work requirements — requires TANF enrollment input
  • (vi) Drug/alcohol treatment participant — requires treatment program input
  • (vii) Working 30+ hrs/week — handled separately in ABAWD work activity check

Not implemented (documented in code)

  • (F)-(G) Native American/Indian exemptions per IHCIA definitions — requires tribal membership input variable

Refactored meets_snap_abawd_work_requirements

  • Uses is_snap_abawd_hr1_in_effect for pre/post HR1 branching
  • Structure follows 7 U.S.C. 2015(o)(3) letter by letter: (A) age, (B) disability, (C) parent, (D) work reg exempt, (E) pregnant
  • Pre-HR1 snapshot uses parameters("2025-06-01") (last month before effective date)

Deleted

  • ca_meets_snap_abawd_work_requirements.py and its tests (functionality merged into federal variable via is_snap_abawd_hr1_in_effect routing)

Behavioral Impact

  • Adding three ABAWD exemptions (child under 6, student, UI recipient) is a correct behavioral change — these exist in law but were missing
  • Removing HI/AK blanket exemption is a correct behavioral change — both states are implementing ABAWD
  • Backdating age parameters and adding FRA phase-in is a correct behavioral change for historical simulations

Test plan

  • 56 tests pass (policyengine-core test .../work_requirements -c policyengine_us -v)
  • Broader SNAP tests pass
  • Microsimulation test passes

Tests organized by statutory provision:

  • Pre-HR1 (7 CFR 273.24(c)): age boundaries (17/18, 54/55), disabled, work hours (19/20), parent with child under 18, pregnant, incapacitated caregiver, homeless, veteran
  • Post-HR1 (7 U.S.C. 2015(o)(3)): age boundaries (64/65), ages 55-64 no longer exempt, disabled, parent with child under 14 (boundary at 15), new work-reg-exempt paths (student, UI, child under 6), removed exemptions (homeless/veteran)
  • CA delayed adoption (ACL 25-93): age 55 still exempt, homeless/veteran still exempt, parent with child under 18, non-exempt fails
  • HR1 routing (is_snap_abawd_hr1_in_effect): TX post/pre-HR1, CA pre/post-adoption

hua7450 and others added 7 commits February 23, 2026 06:29
Fix broken test cases (9, 11, 16) by adjusting periods and expected
values after HR1 effective date moved to 2025-07-01. Add new cases
testing ages 60-64 not ABAWD-exempt post-HR1, incapacitated person
exemption, CA pre-HR1 rules, and SPM-unit-level CA/federal routing.

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

- Add is_snap_work_registration_exempt_non_age for 7 CFR 273.7(b)(1) non-age
  exemptions (disabled, child under 6, incapacitated, student, UI recipient)
- Absorb CA pre-HR1 delay logic into federal ABAWD variable using CA-specific
  parameters instead of hardcoded frozen date
- Delete ca_meets_snap_abawd_work_requirements (merged into federal variable)
- Add CA ABAWD age threshold parameters with delayed 2026-06-01 effective date
- Redesign test cases organized by statutory provision with legal citations

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Extract state-level HR1 adoption routing into single variable using select()
- Remove CA-specific parameters (use hardcoded pre-HR1 date instead)
- Remove state logic from ABAWD and aggregator formulas
- Fix test naming conventions and period formats per PolicyEngine standards
- Add explicit state_code to post-HR1 tests (default is CA which delays HR1)

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

The unemployment_compensation call with options=[DIVIDE] triggers a
policyengine-core bug where calculate_divide() rejects the decode_enums
kwarg. Since we only check > 0, yearly amount works identically.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
7 CFR 273.7(b)(1)(v) also exempts people who have applied for but
not yet received unemployment compensation; we are not tracking that yet.

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

codecov bot commented Feb 23, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (2dd3b64) to head (ca57403).
⚠️ Report is 31 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff            @@
##              main     #7453   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files            2         4    +2     
  Lines           24        79   +55     
=========================================
+ Hits            24        79   +55     
Flag Coverage Δ
unittests 100.00% <100.00%> (ø)

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.

@PavelMakarchuk PavelMakarchuk merged commit 5dd6477 into main Feb 23, 2026
9 checks passed
@PavelMakarchuk PavelMakarchuk deleted the snap-abawd-hr1-update-rebased branch February 23, 2026 16:13
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.

Add HI/AK delayed ABAWD adoption parameters (Nov 2025)

3 participants