Repository navigation
Apply North Carolina Work First's 27.5% earnings exclusion and $25 minimum payment - #10260
PavelMakarchuk wants to merge 2 commits into
Conversation
…nimum payment North Carolina excludes 27.5% of gross earned income and does not count children's earnings (TANF State Plan, Financial Rules 3 and 6), and pays a family when the payment, 50% of the difference between countable income and the need standard, is $25 or more (Financial Rules 8). PE counted all earnings and required $25 of the reduced need standard per household member. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #10260 +/- ##
=========================================
Coverage 100.00% 100.00%
=========================================
Files 4 2 -2
Lines 76 31 -45
Branches 2 0 -2
=========================================
- Hits 76 31 -45
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:
|
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
PR Review: Apply North Carolina Work First's 27.5% earnings exclusion and $25 minimum paymentSummaryThe PR fixes two errors in North Carolina Work First (#10210):
It also recomputes 7 integration cases, 3 earned-income cases and 4 partner fixtures, adds 2 + 4 + 2 cases, and adds a
Three things need fixing:
Critical (must fix)None. Should address1. The partner contract test edits need Ziming Hua's three-question sign-off before merge. The PR changes
At head The edits look right to me (see "Verified correct"), but the sign-off is Ziming's, not the reviewer's. The changed cases for the comment are:
The file's header comment also changes. Partner impact: NC Work First amounts rise for every earner (each dollar of earnings now cuts the benefit by $0.3625, not $0.50). The size-3 cliff moves from $5,628 to $8,176 a year of earnings. Fix:
2. The new exclusion carries out half of Financial Rules 3. SSI recipients' earnings still count, and the 18-year-old test presents an approximation as the rule.
The two parts of this finding: (a) SSI recipients' earnings. The formula still counts 72.5% of an SSI recipient's earnings, although
(b) The 18-year-old test (
PolicyEngine includes every non-SSI member in the need standard, so counting their earnings is a consistent approximation. But the test name and comment state it as North Carolina's rule. Fix (either):
3. Add the The body (head
Suggestions
Verified correct
Axiom line assessmentThe line is missing (Should 3), and
Recommended line. File a dispatch-ready
CI statusAll 30 checks pass at
None is pending or failing. The "Partner API impact notice" workflow also ran and posted its Slack alert (see Should 1). Branch statusThe branch is 2 commits ahead of main (the change on 2026-10-16 and a merge of main on 2026-10-23) and 48 behind.
Verdict: REQUEST_CHANGES |
DTrim99
left a comment
There was a problem hiding this comment.
The law is right in every year (the State Plans, Financial Rules 6 and 8, and 10A NCAC 71W .0601(a)), the 50% payment formula matches, and all 27 expectations hand-check. Three should-address items: (1) the PR edits partners/analytics_coverage/.../nc/tanf.yaml (4 fixtures, 2 inputs) without @hua7450 as reviewer, and under CLAUDE.md his approval of a head with those edits is needed before merge; (2) Financial Rules 3-4 and 71W .0408(a) exclude SSI recipients' income, but an SSI parent's earnings still count ($91 vs $236/month); (3) there's no axiom line. Four suggestions. Full report in the comment above.
Summary
North Carolina Work First had two errors.
nc_tanf_countable_earned_incomeadded every member's gross earnings. The TANF State Plan FFY 2026-2028 Financial Rules has two rules here, and the 2022-2025 and 2016-2019 plans have the same wording. Rule 6 says "27.5% of gross earned income is excluded". Rule 3 says all income is counted "except the earnings of children". The Work First Manual, section 114 I also says "Do not count a child's earned income". The variable now excludes earnings of members under the program's child age limit (18) and then excludes 27.5% of the rest. The rate is a new parameter,gov.states.nc.ncdhhs.tanf.income.earned_income_exclusion_rate.nc_tanf_income_eligibledivided the reduced need standard by the household size and required $25 a month per person. Financial Rules 8 (FFY 2026-2028, p. 19) says "A family remains eligible if the result of the payment calculation is twenty-five dollars ($25.00) or more". The payment is 50% of the difference between countable income and the need standard. The test is now0.5 × reduced need standard ≥ $25 a month, with no division by household size. The existinghousehold_size > 0guard stays.Tests
nc_tanf_countable_earned_income.yaml: three existing cases now expect 72.5% of earnings ($1,000 gives $725, $500 gives $362.50). Two new cases: a 16-year-old's earnings are excluded (6,000 × 0.725 = $4,350), and an 18-year-old's earnings count ($2,175).nc_tanf_income_eligible.yaml: a size-6 unit with a $50 payment is eligible (main: 100 / 6 < 25, ineligible). A size-1 unit with a $20 payment is ineligible (main: eligible). Two controls test exactly $25 (eligible) and $24.50 (ineligible).integration.yaml: the issue's case is a parent of five with $7,176 a year of earnings. Countable income is $5,202.60 andnc_tanf= 0.5 × (8,376 − 5,202.60) = $1,586.70 (main: $0). A parent of two with $600 a month gets 0.5 × (544 − 435) = $54.50 a month (main: $0). Seven existing cases with earnings were recomputed by hand with the exclusion. Each has the arithmetic in a comment.partners/analytics_coverage/edge_cases/state/nc/tanf.yaml: four fixtures were recomputed. The two cliff fixtures moved to the new cliff: $8,176 a year of earnings gives a $300.20 payment (eligible), and $8,177 gives $299.84 (ineligible).Against main's code, the 16 new or changed assertions fail. With this PR,
gov/states/nc/ncdhhspasses (with the related SNAP, household and TANF files, 306 tests), the NC partner fixtures pass (20),gov/hhs/tanf/cashpasses (36), and the parameter and code-health checks pass (819).The
average_reduced_need_standard_thresholdparameter keeps its name to keep the change small. It now has the State Plan references, and its label already says "monthly minimum benefit".Fixes #10210
🤖 Generated with Claude Code