Skip to content

Support qualifying work-program participation in SNAP ABAWD work requirement#8857

Draft
daphnehanse11 wants to merge 2 commits into
PolicyEngine:mainfrom
daphnehanse11:snap-abawd-work-program-hours
Draft

Support qualifying work-program participation in SNAP ABAWD work requirement#8857
daphnehanse11 wants to merge 2 commits into
PolicyEngine:mainfrom
daphnehanse11:snap-abawd-work-program-hours

Conversation

@daphnehanse11

Copy link
Copy Markdown
Collaborator

Fixes #8823

Summary

meets_snap_abawd_work_requirements previously treated ABAWD work activity as employment hours only (weekly_hours_worked_before_lsr >= 20). Under 7 U.S.C. 2015(o)(2) and 7 CFR 273.24(a)(1), an ABAWD also fulfills the work requirement by:

  • (ii) participating in and complying with a qualifying work program (SNAP E&T, WIOA, Trade Act) for 20+ hours per week;
  • (iii) any combination of work and qualifying work-program participation totaling 20+ hours per week; or
  • (iv) participating in and complying with a workfare program under 7 CFR 273.7(m), regardless of hours.

This PR adds two person-level input variables and updates the ABAWD formula so the work-activity condition is satisfied when combined employment plus qualifying work-program hours meet the 20-hour threshold, or when the person participates in workfare.

Design rationale

  • Hours input (weekly_snap_work_program_hours) rather than a boolean: 7 CFR 273.24(a)(1)(iii) allows any combination of work and work-program hours to meet the threshold, which a boolean cannot represent. An hours input composes naturally with weekly_hours_worked_before_lsr (same YEAR definition period and hour unit) and keeps the threshold comparison in one place against the existing gov.usda.snap.work_requirements.abawd.weekly_hours_threshold parameter.
  • Separate boolean (is_snap_workfare_participant) for workfare: under 7 CFR 273.24(a)(1)(iv), workfare satisfies the requirement regardless of hours (workfare hours are derived from the benefit divided by minimum wage), so it cannot be folded into the hours input without distorting the rule.
  • General work registration unchanged: meets_snap_general_work_requirements (7 CFR 273.7) is untouched, preserving the legal distinction between general work-registration compliance and ABAWD qualifying activity under 7 CFR 273.24. Note: the issue references an existing is_snap_work_program_participant variable, but no such variable exists in the codebase — the general formula uses hours and exemptions only — so this PR adds the ABAWD-specific inputs directly.
  • Minimal diff: the edit is confined to the work-activity condition since parallel PRs are editing other parts of this formula (state effective dates, area waivers).

Data layer

Survey data does not capture work-program or workfare participation, so both inputs default to zero/false, preserving current behavior for all existing data. Companion data issue: PolicyEngine/populace#249. The variable documentation states this assumption explicitly.

Tests

New YAML cases 33-37 in meets_snap_abawd_work_requirements.yaml:

  • Work-program participation of 20 hrs with no employment meets the rule (pre- and post-HR1);
  • Combined 10 work + 10 program hours meets the rule;
  • Combined 10 + 9 hours fails;
  • Workfare participation meets the rule with zero hours;
  • Existing cases 6-7 continue to cover employment-hours-only compliance.
$ uv run policyengine-core test policyengine_us/tests/policy/baseline/gov/usda/snap/eligibility/work_requirements -c policyengine_us
collected 66 items
...
======================== 66 passed, 1 warning in 7.61s =========================

🤖 Generated with Claude Code

…irement

Add weekly_snap_work_program_hours and is_snap_workfare_participant
input variables and count qualifying work-program hours toward the
20-hour ABAWD work-activity threshold, alone or combined with
employment hours, per 7 U.S.C. 2015(o)(2) and 7 CFR 273.24(a)(1).
Workfare participation under 7 CFR 273.7(m) satisfies the requirement
regardless of hours.

Fixes PolicyEngine#8823

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@codecov

codecov Bot commented Jul 2, 2026

Copy link
Copy Markdown

Codecov Report

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

Additional details and impacted files
@@            Coverage Diff            @@
##              main     #8857   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files            5         3    -2     
  Lines           62        52   -10     
=========================================
- Hits            62        52   -10     
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 Harness.
📢 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.

@daphnehanse11

Copy link
Copy Markdown
Collaborator Author

Correction to the PR description: is_snap_work_program_participant does exist on current upstream main (used by meets_snap_general_work_requirements as a compliance channel) — the "variable does not exist" finding came from a stale local base ~2,400 commits behind. The substantive change here (hours-based ABAWD qualifying work-program input + workfare boolean, combined against the 20-hour threshold per 7 CFR 273.24(a)(1)) still stands and merges cleanly, but reviewers should weigh whether weekly_snap_work_program_hours should feed or reconcile with is_snap_work_program_participant rather than sit alongside it.

🤖 Generated with Claude Code

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.

SNAP ABAWD: support qualifying work-program participation or hours

1 participant