Model SNAP student employment & training and work incentive placement exemptions#8793
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. 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
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
PavelMakarchuk
left a comment
There was a problem hiding this comment.
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_student→ 273.5(b)(11) / 2015(e)(3) (E&T / WIOA / Trade Act §236 / state-local placement) ✅is_snap_work_incentive_student→ 273.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
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
Citation note: the SNAP student TANF-receipt exemption is
(b)(3)/(e)(6)— a separate provision — and is already modeled viatanf_person > 0. The two exemptions here are(b)(11)/(e)(3)and(b)(4)/(e)(7).What changed
is_snap_employment_training_student(new)(b)(11)/(e)(3).is_snap_work_incentive_student(new)(b)(4)/(e)(7).is_snap_employment_training_or_work_incentive_student(new)ORof the two inputs — a single override point for partners.is_snap_ineligible_student(modified)meets_snap_parent_exception(fix)reference(a missing comma had concatenated its two URLs into one string).Design notes
documentationstates this explicitly, so a screener maps only the affirmative "placed-through-program" fact.defined_forand default toFalse; the half-time-or-more higher-education gate stays on the consumer (is_snap_ineligible_studentisdefined_for = "is_snap_higher_ed_student").Falseinputs leaveis_snap_ineligible_studentunchanged 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_studentdirectly. With this change they can instead feed inputs — either overridingis_snap_employment_training_or_work_incentive_studentat one point, or mapping theirstudent_job_training_programflag tois_snap_employment_training_student.Tests
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.test_input_variable_definitions.py) confirm the two new inputs are pure data inputs.Test plan