Repository navigation
Conversation
…occupancy tests - End the disability income exclusion from 2024: 2021 Mont. Laws ch. 503 section 65 repeals 15-30-2110, MCA, for tax years after 2023 (section 70(1)). Drop it from the 2024 and 2025 subtraction lists. - Make the elderly homeowner/renter credit's federal refundable credits an actual-receipt input (MCA 15-30-2337(4), "all income received"; ARM 42.4.301(2)(b), "received") instead of this year's return entitlement. - Require a head or spouse who is 62, a Montana resident for 9 months and an owner, renter or lessee for 6 months (MCA 15-30-2338(1)(a)-(c)); another household member's bill no longer makes a rent-free occupant eligible. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…derly credit tests Cases that relied on this year's recovery rebate credit or EITC flowing into gross household income now record the payment received during the year. A business-loss case inputs eligibility, since its couple has no rent or property tax. Found in review; the 2021 TAXSIM case now counts the 1,400 Economic Impact Payment received in 2021 but not the 2021 EITC paid in 2022. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
PR Review: Fix Montana disability exclusion repeal, elderly credit receipt timing and occupancy testsPR #10331 (author: MaxGhenis), head
The PR has no comments or reviews yet. It touches no partner test file. Path prefixes:
Sources read for this review (all fetched 2026-10-21):
SummaryWhat is right.
There are no critical findings and four should-address items:
There are also five suggestions: Montana refundable-credit timing, test additions and trimming, pre-existing gaps, Status.
Critical (must fix)None. Should addressS1. The Axiom line
|
DTrim99
left a comment
There was a problem hiding this comment.
The law checks out: the SB 399 repeal is effective after 2023, s.2337(4) counts income received, and s.2338(1) requires 9 months of residence and 6 of occupancy. Four should-address items: (1) the 'pending: hub files parity' axiom line is invalid (use #1741 and #1512 queued, plus a new issue for receipt timing); (2) two candidates.yaml entries go stale; (3) the zero default drops the 2020-21 Economic Impact Payments, which were received in-year; (4) recording one occupant as a lessee zeroes everyone else's occupancy months (the owner's $1,150 claim becomes $41). Five suggestions. Full report in the comment above.
Statute-first fixes for three verified Montana model bugs. Plan: failing YAML tests first, then the fix, sources cited in parameter and variable metadata; run the affected test files one per process; the hub runs the impact (no microsimulation here). Local test results are under Tests.
axiom: TheAxiomFoundation/rulespec-us#1741 queued, extended with a comment (2024 repeal controls; historical corpus ingestion and re-pin); TheAxiomFoundation/rulespec-us#1864 queued (receipt timing; ARM corpus ingestion and re-pin); TheAxiomFoundation/rulespec-us#1512 queued, extended with a comment (residence and occupancy companions; historical sources, table restoration and re-pin).
1.
us-mt-disability-exclusion-after-repeal(2024+): fixedmt_disability_income_exclusion_eligible_personandmt_disability_income_exclusion_persongetformula_2024returning false and 0 (the person formula too, so an eligibility input cannot restore it). The 2024 and 2025 entries ofsubtractions.yamldropmt_disability_income_exclusion_person. Historical formulas, including Count taxable employment disability benefits in federal gross income (IRC 105(a)) #10185's taxable-benefit base, are unchanged.mt_subtractions$0 (main: $5,200). At 5.9% that is up to $306.80 of 2024 tax per affected filer.2.
us-mt-ehrc-gross-household-income-omissions(receipt timing 2017+): fixed in part; the 2009-2016 inclusion is left as isSource. MCA 15-30-2337(4): gross household income is "all income received by all individuals of a household" (current). ARM 42.4.301(2)(b) (from 11/10/2017) counts "federal refundable tax credits received"; the 2023 instructions, line 7 say "Combine all the refundable credits received by the members of the household in 2023".
Change (receipt timing).
mt_elderly_homeowner_or_renter_credit_federal_refundable_creditsis now an actual-receipt input (federal refundable credit cash the person received during the year, default 0), like the existingmt_elderly_homeowner_or_renter_credit_receivedand..._property_tax_rebate_receivedinputs. The formula that put the current return'sincome_tax_refundable_creditson the head is removed: those credits are paid after the year ends. Household summation counts each supplied receipt once.Left as is: federal refundable credits before 2017. The spec asked to add the variable to the 2009 source list, deduced from 15-30-2337(9)(a)'s "all nontaxable income"; it noted that no pre-2017 ARM text could be fetched. I fetched it: ARM 42.4.301(2)(b) as in effect 8/20/2004 to 11/9/2017 "further defined" gross household income to include "federal refunds received during the tax year to the extent that the amount recovered reduced the claimant's Montana income tax in a prior year" (rules.mt.gov). The 2016 Form 2EC instructions list "Federal income tax refunds taxable in Montana" and no refundable credit. Two readings are defensible:
Choosing between them also turns on how far a Montana administrative rule binds against the statute. RULINGS P2 leaves that open for state regulations ("raise it with Max if a case turns on it"). So the 2009 list is unchanged. The existing "do not count before 2017" case now supplies a receipt, so it still pins main's behaviour.
Witness. 2024: a 70-year-old with a $20,000 pension whose return has $5,000 of federal refundable credits: gross household income $20,000 (main: $25,000). A parent's 2024 EITC of $3,400 and refundable CTC of $1,125 are not 2024 receipts: the variable is 0 (main: $4,525).
Years. 2017 onward (the variable enters the source list in 2017; the input applies in every year it is listed).
3.
us-mt:elderly-credit-rent-free-occupants(2009+): fixedSource. MCA 15-30-2338(1): to claim, "an individual: (a) must have reached age 62 or older ...; (b) must have resided in Montana for at least 9 months of that period; (c) must have occupied one or more dwellings in Montana as an owner, renter, or lessee for at least 6 months of the claim period" (current; 2009, unamended since). The 2025 instructions, p. 44 carry the same attestations. ARM 42.4.302(2)(b) lets an eligible claimant use another's property tax bill as rent; it does not supply eligibility.
Change. New parameters
minimum_occupancy_months(6) andminimum_residency_months(9) from 2009. New Person inputsmt_elderly_homeowner_or_renter_credit_qualifying_occupancy_monthsandmt_elderly_homeowner_or_renter_credit_mt_residency_months(0-12).mt_elderly_homeowner_or_renter_credit_eligiblenow requires one head or spouse to meet age, residence and occupancy, and projects the result to the return's members. Defaults, so missing data does not establish eligibility:A rent-free lessee or owner without either amount is recorded through the input. The
gross_rentformula is unchanged; its comment now notes that the substitution reaches the credit only through an eligible claimant.Witness. 2024: a parent, 80, paying no rent and billed nothing, in the home of a 45-year-old child billed $4,000. Both are ineligible and both credits are $0 (main: the parent gets $341). The same parent recorded as a 12-month lessee still gets $341. Thresholds: 6 occupancy and 9 residence months qualify; 5 or 8 do not.
Years. 2009 onward.
Updated regressions. The automatic rent-free-parent cases from Count property tax billed in another household member's name as rent in Montana's elderly homeowner/renter credit (ARM 42.4.302(2)(b)) #9945 now record the parent as a lessee where they test the bill-as-rent arithmetic. The siblings case's non-owner sibling is now ineligible (pre-limit credit 0, was 41; the paid credit is unchanged). New cases cover the parent without status.
Invariants
mt_disability_income_exclusion_personis 0 andmt_disability_income_exclusion_eligible_personis false, even with eligibility supplied as an input; 2023 and earlier are unchanged.rraises gross household income by exactlyr, counted once on the person who received it. The current return'sincome_tax_refundable_creditsadds nothing. More receipts never raise the credit. Property-tested intest_mt_elderly_credit_refundable_credits.py(rewritten, Hypothesis).test_mt_elderly_credit_one_claimant.py) now checks the model against a reference that includes the occupancy rule, with lessee and non-lessee rent-free parents as explicit examples.Tests
The shared host ran at load 95-120, so each
policyengine-core testprocess took about 45 minutes. All runs were one file per process.mt_elderly_homeowner_or_renter_credit.yamlat 11aec73: 50 passed, 1 failed. The failure was the 2021 TAXSIM case, which relied on this year's EITC and Economic Impact Payment flowing in. 4e74b36 fixed it by supplying the payment received in 2021: expected 63.33, was 59.24.At 4e74b36, every affected YAML file passes, each in its own process:
mt_elderly_homeowner_or_renter_credit.yaml: 51 passed..._eligible.yaml: 11 passed..._federal_refundable_credits.yaml: 5 passed..._pre_one_claimant.yaml: 4 passed..._disability_and_unemployment.yaml: 13 passed..._unemployment_compensation_addback.yaml: 9 passed..._gross_household_income.yaml: 33 passedsubtractions/mt_disability_income_exclusion_person.yaml: 8 passedsubtractions/mt_disability_income_exclusion_eligible_person.yaml: 3 passedPython worked examples pass:
test_mt_elderly_credit_refundable_credits.py::test_worked_exampletest_mt_elderly_credit_one_claimant.py: the worked example, the lessee and non-lessee parent examples, and the newly-billed example (4 passed)An in-session Opus review read the whole diff, core's projector and
formula_YYYYsemantics, and every MT elderly-credit YAML and Python test. It found five more cases that would break: disability_and_unemployment Cases 7-9, unemployment_compensation_addback Case 7, a business-loss case in gross_household_income, andtest_mt_elderly_credit_nontaxable_income.py's worked example. All are fixed in 4e74b36. It found no circular dependency.Not run locally:
elderly_homeowner_or_renter/: gross_rent, selected_claimant, net_household_income, property_tax_billed, property_tax_rebate_received and dependent_deductions. The review traced their cases; it found that they either input eligibility or have a claimant billed property tax.test_mt_elderly_credit_*.pyfiles.CI covers both once this is ready for review.
The failing-first run on unmodified main was cancelled after 23 minutes because the host was CPU-starved. On main, the new 2024 disability case gives an exclusion of 5,200, the rent-free parent gets 341, and the current-return credit adds 5,000 to gross household income. Each of those follows directly from main's formulas, which this PR replaces.
Interaction with open PRs
mt_elderly_homeowner_or_renter_credit_unemployment_compensation_addback.yaml. It expects the 2020 recovery rebate credit (1,800) in gross household income through the formula this PR removes. Whichever PR lands second should give person1 the inputmt_elderly_homeowner_or_renter_credit_federal_refundable_credits: 1_800. This PR edits only Case 7 of that file.Follow-ups (not in this PR)
mt_refundable_credits_before_renter_credit) are also this year's return, not receipts; the same timing question applies.🤖 Generated with Claude Code