Repository navigation
Conversation
MaxGhenis
force-pushed
the
nd-renters-refund-public-assistance
branch
from
November 9, 2026 10:33
bba7a98 to
ee9c9ad
Compare
MaxGhenis
force-pushed
the
nd-renters-refund-public-assistance
branch
from
November 9, 2026 11:21
ee9c9ad to
c8e9bdb
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>
MaxGhenis
force-pushed
the
nd-renters-refund-public-assistance
branch
from
November 9, 2026 11:22
c8e9bdb to
d366827
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stacked on #10697, which rewrites
nd_renters_refund_income.py; this PR retargets tomainand rebases once #10697 merges.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 excludes. 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. Later commits on both branches change only tests and the source-conflict register.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