Skip to content

Fix MA TAFDC income-test boundary and IL TANF minimum payment#8918

Merged
MaxGhenis merged 4 commits into
PolicyEngine:mainfrom
MaxGhenis:codex/tanf-review-ny-ma-il
Jul 6, 2026
Merged

Fix MA TAFDC income-test boundary and IL TANF minimum payment#8918
MaxGhenis merged 4 commits into
PolicyEngine:mainfrom
MaxGhenis:codex/tanf-review-ny-ma-il

Conversation

@MaxGhenis

Copy link
Copy Markdown
Contributor

Summary

TANF review covering three issues. Two produced verified code fixes (MA, IL); one (NY) was already fixed on main and is confirmed correct against the primary source, so it needs no change.

Massachusetts TAFDC financial eligibility — fixes #8790

Verified against 106 CMR 704.260. The regulation's income test is inclusive at the applicable Need Standard: total countable income "does not exceed" — i.e. "the assistance unit is eligible" when income "is equal to or is less than the appropriate Need Standard." PolicyEngine used a strict <, so a filing unit whose income exactly equals the standard was wrongly found ineligible.

  • ma_tafdc_financial_eligible: changed income < payment_standard to income <= payment_standard; retargeted the reference to 704.260.
  • On the second concern in the issue (payment standard vs. Need Standard): PolicyEngine's ma_tafdc_payment_standard is built from the TAFDC income-limit (Need Standard) tables, so it is the applicable Need Standard for this test. No separate variable is needed; documented inline.
  • Tests: added inclusive-boundary cases (income exactly equal to the Need Standard → eligible; one dollar above → ineligible).

Illinois TANF minimum payment and income eligibility — fixes #8761

Verified against IDHS PM 10-01-02 (WAG 10-01-02), manual item 15820:

A family qualifies for TANF benefits, if nonexempt income is at least $1 less than the Payment Level for the unit's size. TANF payments of less than $1 are not made. When the monthly benefit amount would be less than $1, eligibility for cash does not exist. … Regular monthly TANF benefits and Initial Prorated Entitlement (IPE) payments are rounded down to the nearest whole dollar.

  • New dated parameter gov.states.il.dhs.tanf.minimum_payment ($1).
  • il_tanf_income_eligible: changed income <= payment_level to payment_level - income >= minimum_payment (income equal to or above the payment level is ineligible).
  • il_tanf: floor the regular monthly benefit to whole dollars and pay nothing when the floored benefit is below the minimum.
  • Tests: added rounding and minimum-payment boundary cases; updated existing integration expectations to the floored amounts (e.g. 469.50 → 469, 237.06 → 237, 109.81 → 109, 325.75 → 325, 51.75 → 51); converted three unit tests from annual to monthly periods so the per-month rounding is exercised honestly.

New York earned income disregard — #8835 (no change needed)

The 62/63/64% disregard (effective 2023-06-01 / 2024-06-01 / 2025-06-01), keeping 50% dated to 2022-10-01, already landed on main in #8912. Primary-source review confirms the values and the disregard order (percentage EID first, then the $150 work-expense disregard, which PolicyEngine already carries):

  • 23-ADM-04: "Effective June 1, 2023, the EID will increase from 50% to 62%"; net income compared to the standard of need "after deducting the 62% EID and then the $150 work expense disregard."
  • 24-ADM-04: "Effective June 1, 2024, the EID increased from 62% to 63%."
  • 25-ADM-04: "Effective June 1, 2025, the EID increased from 63% to 64%."

The shelter-allowance sub-note in #8835 (PE's 277/283/400/... vs. an alternate 214/219/309/... schedule) is a county-schedule modeling question, not a value error, and is not resolved here.

Testing

All run with policyengine_core.scripts.policyengine_command test … -c policyengine_us:

  • NY TANF: 64 passed
  • MA TAFDC: 146 passed; full MA state tree: 369 passed
  • IL TANF: 121 passed; full IL state tree: 745 passed (no downstream regressions in programs that consume il_tanf / ma_tafdc)

🤖 Generated with Claude Code

MaxGhenis and others added 3 commits July 6, 2026 06:19
Massachusetts (PolicyEngine#8790): 106 CMR 704.260 makes the TAFDC financial
eligibility income test inclusive at the applicable Need Standard --
total countable income "does not exceed" (is equal to or less than) the
standard. PolicyEngine used a strict `<`, so a filing unit whose income
exactly equals the standard was wrongly denied. Switched to `<=` and
retargeted the reference to 704.260. PolicyEngine's payment standard is
built from the TAFDC income-limit (Need Standard) tables, so it is the
applicable Need Standard for this test.

Illinois (PolicyEngine#8761): IDHS PM 10-01-02 (WAG 10-01-02) requires that
nonexempt income fall below the payment level by at least the $1 minimum
payment for cash eligibility to exist, rounds regular monthly TANF
benefits down to the nearest whole dollar, and does not issue payments
below $1. PolicyEngine used `income <= payment_level` and paid the raw,
unrounded difference. Added a dated `minimum_payment` parameter, made
income eligibility require `payment_level - income >= minimum_payment`,
and floored the monthly benefit to whole dollars with a below-minimum
cutoff.

New York (PolicyEngine#8835) needs no change: the 62/63/64% earned income disregard
(2023/2024/2025) already landed on main in PolicyEngine#8912, and primary-source
review (23/24/25-ADM-04) confirms those values and the $150 work-expense
disregard order.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The changelog check requires changelog.d/<name>.<type>.md (no subdirectory).
Move the fixed fragments from changelog.d/fixed/<issue>.md to the flat form.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Collapse the parameters(period)...minimum_payment lookups onto one line
to satisfy ruff format --check.

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

codecov Bot commented Jul 6, 2026

Copy link
Copy Markdown

Codecov Report

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

Additional details and impacted files
@@            Coverage Diff            @@
##              main     #8918   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files            3         3           
  Lines           55        42   -13     
=========================================
- Hits            55        42   -13     
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.

The analytics-coverage edge cases pin annual il_tanf (and the tanf
aggregate) values; flooring each monthly benefit to whole dollars lowers
the annual totals by a few dollars. Update the five affected IL cases to
the floored amounts.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@MaxGhenis MaxGhenis merged commit b0b2705 into PolicyEngine:main Jul 6, 2026
36 checks passed
hua7450 added a commit to hua7450/policyengine-us that referenced this pull request Jul 6, 2026
The second upstream merge brought PolicyEngine#8918 (IL TANF floors each monthly
grant to whole dollars per IDHS PM 10-01-02 and adds the $1 minimum):
10 il_tanf assertions drop by a few dollars (e.g. the partial-year case
becomes exactly 7 x 493 + 3 x 513 = 4,990). Derivation comments updated.
The upstream suite-wide before_lsr fixture migration (PolicyEngine#8920) and its
re-pins of old fixture layouts were superseded by our rewrites; its
migration of the named partner fixtures merged cleanly. The MA TAFDC
inclusive-boundary fix (PolicyEngine#8918) moved no pinned values.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant