Skip to content

Model SNAP student employment & training and work incentive placement exemptions#8793

Merged
PavelMakarchuk merged 1 commit into
PolicyEngine:mainfrom
hua7450:hua7450/issue8750
Jul 1, 2026
Merged

Model SNAP student employment & training and work incentive placement exemptions#8793
PavelMakarchuk merged 1 commit into
PolicyEngine:mainfrom
hua7450:hua7450/issue8750

Conversation

@hua7450

@hua7450 hua7450 commented Jun 30, 2026

Copy link
Copy Markdown
Collaborator

Summary

Models the two SNAP higher-education student exemptions that turn on being placed in or enrolled in an institution of higher education through an employment-and-training or work-incentive program. Both were previously flagged "Not modeled" in is_snap_ineligible_student.

Closes #8750

Regulatory authority

Exemption Statute Regulation
Exception 3 — placed through an employment & training program (WIOA Title I, a SNAP E&T program limited to career/technical or remedial coursework, the Trade Act §236, or a state/local E&T program) 7 USC 2015(e)(3) 7 CFR 273.5(b)(11)
Exception 7 — enrolled as a result of participation in a title-IV work incentive program (JOBS / its TANF-work-program successor) 7 USC 2015(e)(7) 7 CFR 273.5(b)(4)

Citation note: the SNAP student TANF-receipt exemption is (b)(3) / (e)(6) — a separate provision — and is already modeled via tanf_person > 0. The two exemptions here are (b)(11)/(e)(3) and (b)(4)/(e)(7).

What changed

Variable Entity / Period Role
is_snap_employment_training_student (new) Person / YEAR Bare input for Exception 3. (b)(11) / (e)(3).
is_snap_work_incentive_student (new) Person / YEAR Bare input for Exception 7. (b)(4) / (e)(7).
is_snap_employment_training_or_work_incentive_student (new) Person / YEAR Formula OR of the two inputs — a single override point for partners.
is_snap_ineligible_student (modified) Person / YEAR Consumes the combined variable; the two "Not modeled" stubs are removed.
meets_snap_parent_exception (fix) Person / YEAR Corrected a malformed reference (a missing comma had concatenated its two URLs into one string).
is_snap_employment_training_student ──┐  (e)(3)/(b)(11)
                                      ├─► is_snap_employment_training_or_work_incentive_student ──► is_snap_ineligible_student
is_snap_work_incentive_student      ──┘  (e)(7)/(b)(4)

Design notes

  • Faithful to the statute's causal requirement. Both exemptions require the school enrollment to come through the program, not mere participation/enrollment. Each input's documentation states this explicitly, so a screener maps only the affirmative "placed-through-program" fact.
  • One input per statutory provision (distinct citations preserved), plus a combined formula variable so a partner can override a single variable for the whole placement exemption, or set the two granular inputs for citation-precise data.
  • Pure inputs. The two inputs have no formula/defined_for and default to False; the half-time-or-more higher-education gate stays on the consumer (is_snap_ineligible_student is defined_for = "is_snap_higher_ed_student").
  • Non-breaking. Default-False inputs leave is_snap_ineligible_student unchanged everywhere until a data source populates them, so existing behavior and partner contract tests are unaffected.

Partner context

An API partner (MyFriendBen) currently overrides is_snap_ineligible_student directly. With this change they can instead feed inputs — either overriding is_snap_employment_training_or_work_incentive_student at one point, or mapping their student_job_training_program flag to is_snap_employment_training_student.

Tests

  • New unit test for the combined variable — 4 cases (neither / E&T only / work-incentive only / both).
  • Integration flow-through in is_snap_ineligible_student.yaml: E&T placement, work-incentive placement, plus the previously-untested exemptions (age 50+, disability, 20 hours/week, work-study) so every modeled exemption is now exercised end-to-end.
  • Input-purity tests (test_input_variable_definitions.py) confirm the two new inputs are pure data inputs.

Test plan

  • SNAP student YAML tests pass (44 cases)
  • Input-purity + SNAP-student-TANF core tests pass
  • CI passes

@hua7450 hua7450 changed the title SNAP Student Aork Requirement Model SNAP student employment & training and work incentive placement exemptions Jun 30, 2026
@codecov

codecov Bot commented Jun 30, 2026

Copy link
Copy Markdown

Codecov Report

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

Additional details and impacted files
@@            Coverage Diff            @@
##              main     #8793   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files            8         5    -3     
  Lines          104        65   -39     
=========================================
- Hits           104        65   -39     
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.

@hua7450 hua7450 marked this pull request as ready for review June 30, 2026 17:01
@hua7450 hua7450 requested a review from PavelMakarchuk June 30, 2026 17:01

@PavelMakarchuk PavelMakarchuk left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approve ✅

Verified against the verbatim 7 CFR 273.5(b) and 7 USC 2015(e) text — this is a faithful adoption of the enacted federal law:

  • is_snap_employment_training_student273.5(b)(11) / 2015(e)(3) (E&T / WIOA / Trade Act §236 / state-local placement) ✅
  • is_snap_work_incentive_student273.5(b)(4) / 2015(e)(7) (title-IV work-incentive) ✅
  • The separate TANF-receipt exception (b)(3)/(e)(6) is correctly left as tanf_person — not conflated.

Citations aren't swapped, the exemption correctly removes ineligibility (~(… | exception)), nothing is reinvented, and the code/test/reference checks are clean (full truth-table coverage). The one nuance — CFR still names the repealed JTPA/JOBS while the statute names WIOA/generic successors — is handled correctly by using the current WIOA framing.

Minor, non-blocking follow-ups (optional): add the 7 CFR 273.5(b) half to is_snap_ineligible_student's reference, and a downstream test asserting the exemption flips a SNAP eligibility outcome.

🤖 Review generated with Claude Code

@PavelMakarchuk PavelMakarchuk merged commit 9d0f713 into PolicyEngine:main Jul 1, 2026
29 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.

Model SNAP student E&T / workforce-program placement exemption (7 CFR 273.5(b)(11))

2 participants