PolicyEngine / PolicyEngine/policyengine-us
SNAP ABAWD: model time-limit accrual, geographic waivers, and discretionary exemptions
- Dominant language
- Python
- Stars
- 162
- Forks
- 212
- Avg merge
- 3d 3h
- Merged PRs (30d)
- 97
Description
Parent: #8820
## Problem
The model treats a non-working, non-exempt ABAWD as ineligible in every month. Under 7 U.S.C. 2015(o)(2) and 7 CFR 273.24(b)(1), an ABAWD who is not meeting the work requirement remains eligible for **3 countable months in each 36-month period**; ineligibility begins only after those months are exhausted. The model also omits the two mechanisms that suspend the time limit in practice:
- **Geographic waivers** (7 U.S.C. 2015(o)(4); 7 CFR 273.24(f)): areas with unemployment over 10 percent (OBBBA narrowed the pre-2025 criteria) are waived, and months in waived areas are not countable.
- **State discretionary exemptions** (7 U.S.C. 2015(o)(6); 7 CFR 273.24(g)): states may exempt up to a percentage of covered individuals each month (OBBBA reduced the pool).
Together these mean current output should be read as an upper bound on ABAWD ineligibility: every non-working ABAWD is disqualified immediately and permanently, when in law many are in a grace period, a waived area, or a discretionary exemption slot.
## Evidence
- `meets_snap_abawd_work_requirements` (policyengine_us/variables/gov/usda/snap/eligibility/work_requirements/) tests current-month hours and exemptions only; no countable-month state exists.
- No parameter or variable represents waived areas or the discretionary exemption pool.
- #8961 (person-level disqualification) made the per-month consequence correct — the failing individual is removed from the unit with income prorated per 7 CFR 273.11(c)(2) — but the accrual question is untouched.
## Proposed scope
- Decide the modeling strategy for the 3-in-36 clock given monthly simulation without longitudinal state (e.g., an input variable for countable months used, a simplifying assumption documented per period, or a probabilistic adjustment at the data layer).
- Add a waiver representation (likely a state- or county-level parameter or input, coordinated with #8822 for Alaska boroughs).
- Represent discretionary exemptions, plausibly as a takeup-style adjustment applied in microdata construction rather than simulation time (with `economy: false` metadata if parameterized).
- Document which pieces are rules vs data (relates to PolicyEngine/populace#248).
## Acceptance criteria
- ABAWD ineligibility no longer applies from month one where a grace month, waiver, or discretionary exemption applies under the chosen representation.
- The chosen simplifications are documented in variable `documentation` and visible from this issue.
- Tests cover at least: an ABAWD within their countable months, an ABAWD in a waived area, and an ABAWD past the limit.
Contributor guide
Research direction
Start with meets_snap_abawd_work_requirements under policyengine_us/variables/gov/usda/snap/eligibility/work_requirements/ and review the parent issue #8820, person-level change #8961, Alaska coordination issue #8822, and PolicyEngine/populate#248. Decide and document the representation for countable months, geographic waivers, and discretionary exemptions. Done means grace-period, waived-area, and past-limit tests pass and the simplifications appear in variable documentation.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- backend, data
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100