Skip to content

Add SNAP work program participant input to satisfy the general work requirement#8618

Merged
hua7450 merged 3 commits into
PolicyEngine:mainfrom
hua7450:snap-work-program-participant
Jun 10, 2026
Merged

Add SNAP work program participant input to satisfy the general work requirement#8618
hua7450 merged 3 commits into
PolicyEngine:mainfrom
hua7450:snap-work-program-participant

Conversation

@hua7450

@hua7450 hua7450 commented Jun 9, 2026

Copy link
Copy Markdown
Collaborator

Summary

Adds is_snap_work_program_participant, a boolean input variable (Person, MONTH, defaults to false) for a person who participates in, or otherwise complies with, a SNAP employment and training program or workfare assignment. The input can satisfy the SNAP general work requirement. It does not satisfy the ABAWD work requirement.

Fixes #8617

Regulatory basis

  • 7 CFR 273.7(a)(1): non-exempt work registrants must participate in a SNAP E&T program if assigned by the state agency, and must participate in workfare if assigned.
  • 7 CFR 273.7(f): disqualification applies when a person refuses or fails without good cause to comply with applicable work requirements.

The variable documentation now states that willingness to participate alone does not satisfy this input when the person has an assignment requiring participation.

Scope

  • General check only. The flag is an OR condition in meets_snap_general_work_requirements, whose formula is grouped as exempted (the 273.7(b)(1) exemptions, including the 30-hour worker exemption in (b)(1)(vii)) and compliant (the (a)(1) work program route).
  • ABAWD unchanged. The flag does not satisfy 7 CFR 273.24, which requires actual hours of work or qualifying work program participation. A test case verifies the flag does not leak into the ABAWD check. We continue to collapse the 3-months-in-36 time limit into "must meet the work requirement now" since we don't track the cumulative clock at the moment.
  • Default false → no baseline, microsimulation, or partner-facing behavior change unless the input is set.

Downstream note

medicaid_community_engagement_pass_through_eligible consumes meets_snap_general_work_requirements, so a SNAP recipient with this flag set is also deemed compliant with the HR1 Medicaid community engagement requirement via the pass-through. This is consistent with the pass-through's meaning (complying with SNAP work requirements) but is a new optional input partners may want to know about.

Test plan

  • make format
  • policyengine-core test policyengine_us/tests/policy/baseline/gov/usda/snap/eligibility/work_requirements/meets_snap_general_work_requirements.yaml -c policyengine_us
  • policyengine-core test policyengine_us/tests/policy/baseline/gov/usda/snap/eligibility/work_requirements/meets_snap_work_requirements.yaml -c policyengine_us
  • CI passes

…equirement

Adds is_snap_work_program_participant, a boolean input that satisfies
the general work requirement under 7 CFR 273.7(a)(1). Willingness to
comply suffices for non-exempt registrants since disqualification under
273.7(f) applies only to refusal without good cause. The flag does not
satisfy the ABAWD requirement, which requires actual hours under
7 CFR 273.24.

Fixes PolicyEngine#8617

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

codecov Bot commented Jun 9, 2026

Copy link
Copy Markdown

Codecov Report

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

Additional details and impacted files
@@             Coverage Diff              @@
##             main     #8618       +/-   ##
============================================
+ Coverage   77.77%   100.00%   +22.22%     
============================================
  Files           1         2        +1     
  Lines           9        29       +20     
============================================
+ Hits            7        29       +22     
+ Misses          2         0        -2     
Flag Coverage Δ
unittests 100.00% <100.00%> (+22.22%) ⬆️

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

PR Review

Reviewed in a fresh worktree off snap-work-program-participant. This is a tight, well-scoped change: one optional boolean input, one OR clause in the general work-requirement formula, and good test coverage. I verified regulatory accuracy, references, code patterns, and tests directly.

🔴 Critical (Must Fix)

None.

🟡 Should Address

None blocking.

🟢 Suggestions

  1. ABAWD route is intentionally conservative — document the limitation, don't fix it now. The flag satisfies only the general requirement. In reality, ABAWD compliance (7 CFR 273.24) can be met by a qualifying work program or workfare for 20 hrs/week — but a single generic flag can't carry the "20 hours of a qualifying program" semantics, so excluding it from ABAWD is the right call here. The variable docstring already states this. Worth a tracking issue if/when ABAWD-qualifying participation gets modeled separately.

  2. Confirmed downstream effect via the Medicaid pass-through. medicaid_community_engagement_pass_through_eligible consumes meets_snap_general_work_requirements, so setting this input also flips HR1 Medicaid community-engagement compliance via the pass-through. You flagged this in the description — confirming it's real and consistent with the pass-through's meaning (complying with SNAP work requirements). No change needed; partners should just be aware.

Verification notes

  • Regulatory: OR-ing the (a)(1) work-program/workfare compliance route alongside the (b)(1) exemptions in the general check is correct per 7 CFR 273.7. Confirmed the flag is referenced only in meets_snap_general_work_requirements.py and never in meets_snap_abawd_work_requirements.py, so the "does not leak into ABAWD" claim holds in code, not just in tests.
  • Test logic: Traced Cases 10–12 against meets_snap_work_requirements_person (the no_dependent_child ? abawd & general : general combiner). Case 10 (single → ABAWD applies → still fails), Case 11/12 (parent + 17yo dependent → pre-HR1 child threshold 18 waives ABAWD → flag alone flips the unit) all check out. The Case 12 comment about the under-18 dependent waiving ABAWD is accurate.
  • Patterns/convention: bool/Person/MONTH, is_ prefix, CFR #a_1 reference, no explicit default — all consistent with sibling inputs like is_snap_work_registration_exempt_non_age. Default False ⇒ no baseline/microsim change, as described.
  • References: Variable points to law.cornell.edu/cfr/text/7/273.7#a_1; no new parameters, so no parameter references required.

Validation Summary

Check Result
Regulatory Accuracy 0 issues
Reference Quality 0 issues
Code Patterns 0 issues
Formatting (params & vars) 0 issues
Test Coverage 0 gaps
CI Status ✅ Passing (all suites)

Recommendation: Approve. Clean, correct, and well-tested. The two suggestions are informational, not blockers.


🤖 Generated with Claude Code

@hua7450 hua7450 merged commit 546fd53 into PolicyEngine:main Jun 10, 2026
26 checks passed
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 general work requirement has no compliance pathway for non-working registrants

2 participants