Repository navigation
Count SSI, TANF and workers' compensation in Montana's elderly homeowner/renter credit income (MCA 15-30-2337(9)(a)(vi)) - #10144
Merged
Conversation
… income MCA 15-30-2337(9)(a) counts all nontaxable income, including (vi) cash public assistance and relief. Schedule 2EC line 16 (2024, 2025) names SSI and workers' compensation, and the 2014-2023 instructions list SSI payments and workers' compensation as disability benefits. Add ssi, tanf_person (the SPM unit's TANF per capita, so the household sum counts it once) and workers_compensation to every period of the gross income sources, with worked Schedule 2EC / Form 2EC cases for 2016-2025. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
For a claimant, another adult and a child in four arrangements (one return or two, one SPM unit or two, and more assistance), gross household income adds every member's SSI and workers' compensation and the TANF once; the credit matches an independent reading of Schedule 2EC lines 18 to 30, does not depend on the arrangement, stays within the cap and never rises with more assistance. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Gross household income now counts SSI, and the model computes SSI for a claimant aged 65 or older with little income (take-up defaults to true). Three gross household income cases and three property-test builders are about other items, so they now input no SSI; SSI has its own cases in the government assistance tests. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Review follow-ups: gi_cash_assistance is outside federal AGI and 15-30-2337(9)(a) counts all nontaxable income (a government-funded pilot is also "any other government assistance" on Schedule 2EC line 16), so it joins every period of the sources. The worked cases move into mt_elderly_homeowner_or_renter_credit.yaml (and the SNAP guard into the gross household income file), with a guaranteed income case, the 2016 worksheet total corrected to line 10 and the references consolidated to one per document, with the 2009 MCA text for the 2009 period. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…overnment-assistance
#9900's one-claimant property test (now on main) builds claimants aged 65 or older with little income, for whom the model computes SSI, which gross household income now counts; its reference leaves SSI out, so the builder inputs none. Reference titles follow the repo format: no page in a single-page title, and quoted titles ending in "#page N-M" for several. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis
added a commit
that referenced
this pull request
Oct 12, 2026
MaxGhenis
marked this pull request as ready for review
October 13, 2026 00:22
Contributor
Author
|
Hand-off to the US + core hub (session
|
Contributor
Author
|
US + core hub merge audit, us#10144 at
|
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.
Montana's elderly homeowner/renter credit counted
general_assistanceandveterans_benefitsbut not SSI, TANF, workers' compensation or guaranteed income payments. Since #9915, gross household income sums every household member's income, so a member receiving SSI or TANF should change the claimant's credit; before this PR it didn't.What the law and forms count
The statute and every form checked agree, so the sources are added to all three periods of the list (2009, 2017, 2023).
Change
gross_income_sources.yamlgains, in every period:ssi: person-level SSI (monthly, summed over the year).tanf_person: the SPM unit'stanfdivided by its size.tanfitself cannot go in this list. The formula'sadd(person, ...)raisesValueError: You requested to aggregate tanf (defined for spm_units) to people(checked in Core 3.32.15), and a Personaddsattribute would instead project the full amount onto every member. SPM units nest in households, so the per capita shares summed over the household count each unit's TANF once, however members are split among tax units.tanfsums every state's program,mt_tanfincluded.workers_compensation: person-level input.gi_cash_assistance: guaranteed income pilot payments. The model keeps them out of federal AGI (and files them undermarket_income), and (9)(a) counts all nontaxable income; a government-funded pilot is also "any other government assistance" on line 16.None of these is in federal AGI (
irs_gross_incomesources),dependent_gross_income,social_security(which excludes SSI),general_assistanceorveterans_benefits, so nothing is counted twice. SNAP and LIEAP stay out (2014–2017 instructions); a case pins SNAP. The references are consolidated to one entry per document.Because the model computes SSI for anyone 65 or older with little income (take-up defaults to true), existing cases built on such claimants now see that SSI. Three gross household income cases and four property-test builders (
household_members,dependent_deductions,rebate_receipts, and #9900'sone_claimant) test other items, so they now inputssi: 0; SSI has its own cases.Circular dependencies
The new path is the MT credit → gross household income →
ssi/tanf_person→tanf→ every state's TANF program. In a microsimulation each state's formula runs for its own records. No TANF or SSI parameter list or formula names an income tax, refundable credit or net income variable. The only paths back to Montana tax run through behavioral responses: SSI or a state's TANF reads earnings and hours that labor-supply responses adjust, and South Carolina TANF countscapital_gains, which capital-gains responses adjust. Both responses return 0 without a reform (labor_supply_behavioral_response.py,capital_gains_responses.py), labor supply also has a re-entry guard, and their measurements run in cloned branches with the responses neutralized (behavioral_response_measurements.py). The 10% microsim screen and the full 2026 pair ran every state without error.Tests
In
mt_elderly_homeowner_or_renter_credit.yaml, worked line by line from each year's schedule. The 8 new cases fail on main's parameter; all 36 cases in the file pass:mt_tanfpaid to a separate SPM unitmt_elderly_homeowner_or_renter_credit_gross_household_income.yamladds the SNAP guard (unchanged on both).test_mt_elderly_credit_government_assistance.py(Hypothesis, plus a worked example that fails on main) covers what fixed YAML cases cannot: randomized amounts across arrangements that must agree, a check against an independent Schedule 2EC reference, and monotonicity. Invariants, for a claimant 62 or older, another adult and a child, in four arrangements (one return or two, one SPM unit or two, and one with extra assistance):Cost. The file runs in the Rest job's
remainingpytest group (REST_PYTHON_GROUPSin the Makefile). On main's last Rest run with the timing artifact (run 38206682508, main 63cb12b), that group took 28:15.90 wall clock with 14,639,084 KB max RSS (rest-python-remaining-resources.txt). Its sibling Montana property tests took 0.8–10.7 s each. Local (macOS, load ~54, not Linux CI): the new file takes 9.5 s in pytest (28.7 s with model import) and peaks at 1.39 GB RSS, against 9.4 s and 1.44 GB for its siblingtest_mt_elderly_credit_household_members.pymeasured the same way. It runs 15 Hypothesis examples, each one smallSimulationon the shared system, and keeps nothing resident. This PR's Rest artifact will give the Linux figure; its incremental effect on the group's peak RSS is not measured separately. Thessi: 0pins don't change the other files' setup.Local runs at f9d8d64 (after merging main 3d908a6) pass: the whole
gov/states/mtfolder and Montana contrib viatest_batched.py --workers 1, the state roll-up files, the code-health reference and person-addschecks, and everytest_mt_elderly_credit_*.py. Logs:~/reviews/mt-ehrc-government-assistance-2026-10/tests.log.Impact (2026, full-file pair)
Full-file microsimulation on the default dataset (
populace_us_2024), head f9d8d64 against its merge base with main, 3d908a6, run once in the hub impact pipeline (~/reviews/us-hub/fixes/10144-impact/compare.2026.json). Sums are weighted.mt_elderly_homeowner_or_renter_creditmt_elderly_homeowner_or_renter_credit_gross_household_incomemt_elderly_homeowner_or_renter_credit_net_household_incomemt_income_tax,state_income_taxhousehold_net_incomeincome_tax,household_benefits,ssi,tanf_person,workers_compensationgi_cash_assistanceis zero for every record in the dataset, so it moves nothing here. Gross household income rises for 20 people, but only one household's credit changes; the run keeps no record-level detail to say why the others do not move. A run at b662ed1 (beforegi_cash_assistanceand the merge with main) gave the same figures.Review
GPT-6.1 Sol reviewed this in two rounds. Round 1 (b662ed1) asked for variable-named YAML files, cost documentation,
gi_cash_assistance, the guarded-path and Core wording, one reference per document and the 2016 worksheet line number. Round 2 (87cef23) confirmed those, found no modelling defect, and asked for this documentation, the Axiom comment and the reference-title format. Round 3 (f9d8d64) approved, with one wording nit on the dependency paragraph, applied above. Reports:~/reviews/mt-ehrc-government-assistance-2026-10/review/.Related
mt_ssp). It is cash public assistance under (9)(a)(vi) and should join this list when it lands.axiom: TheAxiomFoundation/rulespec-us#1512 queued (extension comment)
🤖 Generated with Claude Code