PolicyEngine / PolicyEngine/policyengine-us

SNAP ABAWD: model time-limit accrual, geographic waivers, and discretionary exemptions

Open
#8,967 0 comments 0 reactions 0 assignees View on GitHub
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.