Skip to content

Document SNAP work-registration sanction income treatment and durations - #9309

Merged
hua7450 merged 1 commit into
PolicyEngine:mainfrom
DTrim99:snap-work-req-sanction-semantics
Aug 19, 2026
Merged

Document SNAP work-registration sanction income treatment and durations#9309
hua7450 merged 1 commit into
PolicyEngine:mainfrom
DTrim99:snap-work-req-sanction-semantics

Conversation

@DTrim99

@DTrim99 DTrim99 commented Aug 18, 2026

Copy link
Copy Markdown
Collaborator

Follow-up to #8862 / #8961, addressing #8968.

The three sanction semantics in #8968:

  1. Income treatment — already correct on main. A member sanctioned under the general work requirements (is_snap_work_registration_noncompliant) has is_snap_prorated_income_member = false, so their income is counted in full per 7 CFR 273.11(c)(1) — proration (273.11(c)(2)) applies only to ABAWD time-limit ineligibles — while still being excluded from the SNAP unit. This PR adds a regression test locking that behavior (the issue's acceptance criterion).
  2. Head-of-household household sanction (7 CFR 273.7(f)(5)) — deferred. It's a state option, and no state adopter is documented. An empty state-election parameter would add an inert, untested branch to the critical is_snap_eligible path, so I've left it out with a note rather than ship dead logic. Easy to add later behind a populated state list.
  3. Durations — documented. The flag is a per-month status with no duration logic; the 273.7(f)(2) minimum sanction periods (1/3/6 months, state options up to permanent) are the caller's responsibility. Documented on the variable.

No behavior change; baseline results are unchanged. is_snap_prorated_income_member suite 9/9.

🤖 Generated with Claude Code

…yEngine#8968)

The income-treatment acceptance criterion is already met on main: a member
sanctioned under the general work requirements (is_snap_work_registration_
noncompliant) has income counted in full per 7 CFR 273.11(c)(1) - proration
(273.11(c)(2)) applies only to ABAWD time-limit ineligibles - while still being
removed from the SNAP unit. Lock this with a regression test and document on the
sanction flag that it is a per-month status with no duration logic (273.7(f)(2)
minimum sanction periods are the caller's responsibility).

The optional head-of-household household sanction (7 CFR 273.7(f)(5)) is deferred:
no state adopter is documented, so an empty state-election parameter would add an
inert, untested branch to the SNAP eligibility path.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@codecov

codecov Bot commented Aug 18, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (8326a14) to head (4c8581a).
⚠️ Report is 53 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##              main     #9309    +/-   ##
==========================================
  Coverage   100.00%   100.00%            
==========================================
  Files           12         1    -11     
  Lines          161         9   -152     
==========================================
- Hits           161         9   -152     
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.

@DTrim99
DTrim99 requested a review from hua7450 August 19, 2026 13:35
@hua7450
hua7450 merged commit 9b4ab56 into PolicyEngine:main Aug 19, 2026
33 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.

2 participants