Repository navigation
Conversation
bba7a98 to
ee9c9ad
Compare
d366827 to
77b76bd
Compare
77b76bd to
df13e23
Compare
N.D.C.C. 57-02-08.1(5)(c) counts "any county, state, or federal public assistance benefits" and excludes only amounts "excluded from income by federal or state law". No federal or North Dakota law excludes SSI or TANF: the IRS leaves them out of gross income under its general welfare exclusion, which no statute or regulation enacts. Federal law does exclude SNAP (7 U.S.C. 2017(b)) and LIHEAP (42 U.S.C. 8624(f)(1)) for any purpose under state law, so those stay out. SFN 24777 line 7 already asks for S.S.I. The test cases take their expected values from the statute. The medical premium conservation test now gives its households no public assistance, so its North Dakota expectation still tests the medical base alone. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Tax Commissioner's guideline lists TANF among items that are not income; N.D.C.C. 57-02-08.1(5)(c) counts public assistance benefits and no law excludes TANF. The May 2013 guideline counted TANF as income. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…riants Hypothesis checks four properties over random SPM units: a dollar of SSI, TANF or general assistance adds at most a dollar of income, and exactly a dollar above the zero floor; SNAP changes neither income nor the refund; public assistance never raises the refund; and TANF counts once in total across the tax units of an SPM unit, split per member. Dropping ssi and tanf from income_sources fails both tests, and adding snap fails the SNAP check. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…Dakota public assistance invariants Answers the independent review of 7c476bc: - Invariant 1 speaks of a tax unit's share of TANF, so a tax unit in a shared SPM unit fits it, and says "exceeds zero". - Invariant 2 covers North Dakota LIHEAP, which 42 U.S.C. 8624(f)(1) excludes from income, and the test checks that the SNAP and LIHEAP inputs reach the model, so the guard is not vacuous. - situation() gives each SPM unit its own family. Without explicit families, the model puts every person in one. - A new example sits above the floor in a shared SPM unit. - The parameter comment and the candidate say the general welfare exclusion rests on IRS rulings, not a statute or regulation. The candidate adds that the Tax Commissioner's forms count SSI, which the IRS leaves out only under that doctrine: SFN 24777 line 7 and the 2026 homestead credit application. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
N.D.C.C. 57-02-08.1(5)(c) leaves out amounts excluded by federal or state law "with the exception of income from social security benefits". The clause excepts nothing else, so public assistance that a statute does exclude, SNAP and LIHEAP, stays out. The candidate and the test docstring now quote the whole clause. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The candidate said the particular inclusion controls the general exclusion. N.D.C.C. 1-02-07 first asks for a reading that gives both provisions effect, and reaches the special provision only on an irreconcilable conflict. The note now says that, and says where the social security exception came from: House Bill 1174 (2019) added it in the Act that created the state income tax deduction for social security, so it says nothing about benefits no statute excludes. It also cites the two forms and the Act as sources, and rewraps the property test's docstring. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…042 do The register note now says, as us-nd:renters-refund-federally-excluded-income and TheAxiomFoundation/rulespec-us#2042 do, that the exclusion removes what a statute or regulation leaves out of income, including by repealing the provision that counted it, and not a doctrine with no statutory basis such as the general welfare exclusion. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
df13e23 to
e2613c3
Compare
Answers the e2613c3 review's nits: the register note folds the general welfare exclusion into the exclusion sentence, so no pronoun dangles, and three test comments name who acts. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
PR Review: Count SSI and TANF in North Dakota renter's refund incomeSummaryThe fix is right. I read the statute and the Tax Commissioner's forms before the code.
The diff adds My basis is reading the statute and forms (PDF text), the code at the head and the CI logs, plus hand traces. I ran no Python locally. Critical (must fix)None. Should addressNone. Suggestions
Verified correctHand checks. Basis: arithmetic from the statute and the parameters at the head.
Refund parameters. Mutation. Basis: hand traces.
Entity and period.
Known limit: the TANF split.
No double counting. Callers and cycles. The #10697 test edits.
Other tests. The other callers of References (CLAUDE.md "Parameter and variable references").
Source conflicts.
Test design (CLAUDE.md "Test design and CI cost").
Housekeeping.
Axiom line assessment
CI status36 of 36 checks pass at
Branch status8 ahead and 77 behind main.
Verdict: APPROVE |
DTrim99
left a comment
There was a problem hiding this comment.
Approving. N.D.C.C. 57-02-08.1(5)(c) counts "any county, state, or federal public assistance benefits" and drops only amounts excluded by federal or state law. No statute or regulation excludes SSI or TANF, and the Tax Commissioner's own forms count SSI. All 11 hand checks pass, every new list entry is pinned, CI is green at a636752bf1, and the branch merges cleanly with main.
One small addition to the five optional suggestions in the report above: the new us-nd:renters-refund-tanf entry is state: ruled. The conflict is statute against agency guideline, which the project's statute-first rule (2026-10-19, refined 2026-10-20) covers. Naming that rule in the note, as other statute-first entries do, would show where the ruling comes from.
What changes
North Dakota renter's refund income now counts SSI and TANF. N.D.C.C. 57-02-08.1(5)(c) defines income as income "from all sources ... including any county, state, or federal public assistance benefits", and leaves out "any amount excluded from income by federal or state law with the exception of income from social security benefits". No federal or North Dakota law excludes SSI or TANF from income. The IRS leaves need-based public assistance out of gross income under its general welfare exclusion, which "is not based on any specific statutory or regulatory authority" (CRS IF12326). If the exclusion clause took in that doctrine, the public assistance clause would have almost nothing to count. N.D.C.C. 1-02-07 and 1-02-38(2) call for a reading that gives both clauses effect: the inclusion counts public assistance, and the exclusion removes what a statute or regulation leaves out of income, including by repealing the provision that counted it, as #10697 reads it, but not a doctrine with no statutory basis such as the general welfare exclusion. The model already counted general assistance on this reading.
The exception for social security says which excluded amounts come back. The Legislative Assembly added it in House Bill 1174 (2019), the Act that created a state income tax deduction for social security. In its fiscal note, the Tax Commissioner's office wrote that section 1 of that Act keeps the full benefit in the homestead income test, so the exception says nothing about benefits no statute excludes.
us-nd:renters-refund-tanfinsource_conflicts/candidates.yaml.Known limit
PolicyEngine pays TANF to an SPM unit, and
add()gives each member an equal share that counts in the member's tax unit. So a tax unit that shares an SPM unit with a TANF family (a grandparent living with a daughter and grandchild, say) counts a per-person share of the family's TANF. Wisconsin's homestead income (wi_homestead_income), Rhode Island's property tax relief income (ri_property_tax_household_income) and Michigan's household resources (mi_household_resources) add TANF into tax-unit income the same way.Tests
nd_renters_refund_income.yaml: case 3 now counts $6,000 of SSI ($18,000); a new case counts $3,600 of TANF and leaves out $2,400 of SNAP ($13,600); another counts a dependent's $9,000 of SSI ($27,000).nd_renters_refund.yamlcase 8 carries SSI through to the refund ($360 rather than $600).employment_income_before_lsr. The YAML runner leavesemployment_incomeinputs where they are, and TANF reads wages before any labor supply response, so a family whose case enters wages asemployment_incomedraws ND TANF and the case breaks. (PythonSimulationmoves the input itself; 152 state test files already enter wages this way.)core/test_medical_expense_premium_conservation.pygives its households no SSI or TANF. Its ND oracle tests the medical base, and without that input a two-person household in it with no income draws $8,553 of computed TANF.test_nd_renters_refund_public_assistance.py, Hypothesis). Droppingssiandtanffromincome_sourcesfails both tests, and addingsnapornd_liheapfails the SNAP and LIHEAP check.Invariants
These hold for every input; the property tests check them over random SPM units.
Impact (2026)
We estimate no change in the 2026 refund on the default Populace US 2024 release (
populace-us-2024-spm-20260909), comparing baseac21cd383b(#10697) with head73fd800090. Both branches have moved since: #10697 has merged with a new treatment of losses and possession income, and main has changed SSI (#10141, #10332). A rerun onmain(a009a1d) against this head is in progress.The sample holds 850 North Dakota tax unit records. Of those, 69 have a head or spouse who meets the age or disability test and pays rent, and 25 get the refund. One of the 69 (314 weighted units) has SSI: its income rises by $9,750, and with $13,916 of rent its refund stays at the $600 cap. None of the 69 has general assistance or a TANF share, so the per-person split in the known limit reaches no refund in this sample. A household below the cap does lose: in
nd_renters_refund.yamlcase 8, $9,000 of SSI cuts the refund from $600 to $360.The comparison script checks that income rises by a unit's SSI and TANF share wherever base income exceeds zero (largest gap $0.0007), stays within that amount at the zero floor, and that no refund rises. All three hold.
Test cost
The new test file joins CI's
remainingPython group. Locally it takes 8.2 s in pytest and 35 s with interpreter start and system build, and peaks at 1.34 GB RSS. The medical conservation test's five cases take 38 s.axiom: TheAxiomFoundation/rulespec-us#2042 queued (extended with the public assistance reading and companion tests 11 to 13; blocked on corpus capture of chapter 57-02 and a billed encoder run)
🤖 Generated with Claude Code