Skip to content

Comments

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

Open
hua7450 wants to merge 10 commits intoPolicyEngine:mainfrom
hua7450:snap-abawd-hr1-update
Open

Update SNAP ABAWD work requirements for HR1 (P.L. 119-21) with missing exemptions and CA delay#7415
hua7450 wants to merge 10 commits intoPolicyEngine:mainfrom
hua7450:snap-abawd-hr1-update

Conversation

@hua7450
Copy link
Collaborator

@hua7450 hua7450 commented Feb 17, 2026

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

🤖 Generated with Claude Code

hua7450 and others added 2 commits February 16, 2026 20:34
Starting implementation of federal SNAP ABAWD work requirement changes
from the One Big Beautiful Bill Act. Key updates: verify effective dates,
add Native American/Indian exemption, update dependent child age threshold.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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>
@codecov
Copy link

codecov bot commented Feb 17, 2026

Codecov Report

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

Additional details and impacted files
@@            Coverage Diff            @@
##              main     #7415   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files            4         4           
  Lines           76        79    +3     
  Branches         1         0    -1     
=========================================
+ Hits            76        79    +3     
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.

…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>
@hua7450 hua7450 changed the title Update SNAP ABAWD work requirements for HR1 (P.L. 119-21) Refactor SNAP ABAWD work requirements: add missing exemptions, eliminate CA duplicate Feb 17, 2026
@hua7450 hua7450 changed the title Refactor SNAP ABAWD work requirements: add missing exemptions, eliminate CA duplicate Update SNAP ABAWD work requirements for HR1 (P.L. 119-21) with missing exemptions and CA delay Feb 18, 2026
@hua7450 hua7450 marked this pull request as ready for review February 18, 2026 22:51
hua7450 and others added 3 commits February 18, 2026 17:52
- 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>
@PavelMakarchuk
Copy link
Collaborator

SNAP ABAWD Parameter Audit — PR #7415

Sources


🔴 Critical

1. HI/AK exempt_states parameter may be incorrect

The PR treats Hawaii and Alaska as categorically exempt from ABAWD (exempt_states.yaml adds [HI, AK] effective 2025-07-01). However, the law does not create a blanket exemption — it provides:

  • A preferential waiver pathway (150% of national unemployment rate vs 10% for other states)
  • A temporary good faith exemption authority (through Dec 31, 2028), which requires states to apply and the Secretary to approve

Hawaii's own DHS FAQ (updated Oct 16, 2025) confirms it is implementing the expanded ABAWD rules, estimating ~16,000 individuals aged 55-64 and ~10,000 households with children 14+ will be affected. Alaska had a pre-OBBB FY 2025 area waiver (approved Sept 2024), but Hawaii did not appear on the FY 2025 waiver list.

This parameter should be re-evaluated — treating these states as blanket-exempt contradicts both the statutory framework and Hawaii's own implementation materials.


🟡 Should Address

2. Effective date 2025-07-01 vs 2025-07-04

All 4 federal parameter files use 2025-07-01. The FNS memo explicitly states: "These changes were effective upon enactment, July 4, 2025." The PR's own working_references.md also says the correct date is July 4, 2025. While monthly granularity makes this functionally equivalent for most simulations, consider using 2025-07-04 for accuracy (or document why July 1 was chosen).

3. Hardcoded "2025-06-01" in two variables

Both meets_snap_abawd_work_requirements.py and meets_snap_work_requirements.py use parameters("2025-06-01") to snapshot pre-HR1 values. If the federal effective date is updated (e.g., to 2025-07-04), this hardcoded date must be updated in two separate files with no programmatic link. Consider adding a comment explaining the relationship, or defining the pre-HR1 snapshot date in a single location.

4. Native American/Indian exemption not implemented

HR1 added new ABAWD exemptions under 7 U.S.C. 2015(o)(3)(F)-(G) for Indians, Urban Indians, and California Indians per IHCIA definitions. CA ACL 25-93 (pp. 5-7) also details this. This requires a new person-level input variable for tribal membership status — should be tracked as a follow-up issue.


✅ Confirmed Correct

Parameter Repo Value Regulatory Source Status
Age threshold (exempted) 55 → 65 7 U.S.C. 2015(o)(3)(A): "under 18, or over 65"
Dependent child age 18 → 14 7 U.S.C. 2015(o)(3)(C): "under 14 years of age"
Homeless/veteran removal in_effect: false → true FNS memo: "removes exceptions for homeless individuals, veterans"
CA delay date 2026-06-01 ACL 25-93 p.3: "effective June 1, 2026"
CA #page=3 citation Correct page Page 3 contains the operative date language

✅ Code Quality

Check Verdict
select() state routing in is_snap_abawd_hr1_in_effect Correct — vectorized boolean arrays handled properly
where() vectorization (3 uses) Correct — element-wise operations verified
YEAR/MONTH period compatibility Correct — auto-conversion for is_disabled, is_snap_higher_ed_student, unemployment_compensation
Age 60-64 bug fix Correct and important — replacing meets_snap_general_work_requirements with is_snap_work_registration_exempt_non_age prevents age-based general work reg exemption from creating a backdoor ABAWD exemption for ages 60-64. Per FNS memo: "Individuals aged 60 or older remain exempt from the general work requirements" but are NOT automatically ABAWD-exempt.

🟢 Suggestions

  • Add comments in is_snap_work_registration_exempt_non_age.py explaining why 7 CFR 273.7(b)(1) exemptions (iii), (vi), (vii) are intentionally omitted
  • The sources/working_references.md (390 lines) is helpful context but may not belong in the repo long-term
  • The ca_meets_snap_abawd_work_requirements deletion is mentioned in the changelog but not in the diff — clarify if it was deleted in a prior commit

Pre-existing Issues (not from this PR)

  • Foster youth exemption (FRA 2023) was never implemented; HR1 removes it
  • is_parent is narrower than statutory "responsible for care" (misses grandparents, siblings, etc.)
  • FRA 2023 age phase-in dates (50/52/54) not captured; HR1 supersedes them

Test Coverage: 47 tests ✅

Comprehensive coverage across pre/post HR1 periods, all statutory exemption categories (A)-(E), removed exemptions, CA delayed adoption, and age boundaries.


Validation Summary

Check Result
Regulatory Accuracy 1 critical (HI/AK), 1 should-address (effective date)
Reference Quality References correct; #page=3 verified
Code Patterns All vectorization correct; age 60-64 fix is important improvement
Test Coverage 47 tests; comprehensive

@hua7450 hua7450 removed the request for review from PavelMakarchuk February 20, 2026 18:26
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>
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)

2 participants