Net the property tax credit out of the MO WFTC liability cap - #9197
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #9197 +/- ##
=========================================
Coverage 100.00% 100.00%
=========================================
Files 2 5 +3
Lines 31 62 +31
=========================================
+ Hits 31 62 +31
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:
|
Form MO-WFTC Lines 7-10 cap the credit at MO-1040 Line 36 tax less Lines 42-43, and RSMo 143.177.3 applies the WFTC "after reduction for all other credits allowed thereon." The cap previously used raw pre-credit tax, overpaying the WFTC to households eligible for both the WFTC and the property tax credit. Fixes #9179 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The Form MO-WFTC line 8 netting of the property tax credit is specific to the WFTC; the aggregate reads the already-capped applied credit, so a WFTC-specific base there would only suppress future credits placed ahead of the WFTC in the ordered list. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
b012ba3 to
f556aea
Compare
Rename mo_income_tax_less_property_tax_credit to mo_wftc_liability_cap and move it next to mo_wftc: the quantity exists only as Form MO-WFTC Line 9 (MO-1040 has no such line), so a WFTC-scoped name keeps it from being mistaken for a real return line. Disambiguate the mo_income_tax_before_refundable_credits label, which duplicated mo_income_tax's "Missouri income tax", and add the #page=17 anchor to the 4711_2021.pdf refundability citations. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
MaxGhenis
left a comment
There was a problem hiding this comment.
Merging under the cross-family dual-review protocol (Claude Fable 5 + GPT-5.6-sol, independent reviews, both merge-ok with no blocking findings).
Verified: RSMo 143.177.3 ordering language confirmed verbatim against revisor.mo.gov; the aggregate-unaffected claim proven against ordered_capped_state_non_refundable_credits (applied credit A = min(W, max(T−P, 0)) ⇒ aggregate min(A, max(T,0)) = A); all 19 changed YAML cases executed and passed; label dedup checked against metadata consumers. Nonblocking notes: the refundable-WFTC reform's taxsim_state_eitc umbrella still keys on baseline mo_wftc (predates this PR), and the partial-overlap case could additionally assert the aggregate path.
Summary
Fixes the Missouri Working Families Tax Credit's tax-liability cap to net out the (refundable) Missouri Property Tax Credit, matching Form MO-WFTC lines 7–10. Previously the cap used raw pre-credit tax, so PolicyEngine overpaid the WFTC to households eligible for both credits.
Fixes #9179
Legal basis
Changes
mo_wftc_liability_cap= max(mo_income_tax_before_credits−mo_property_tax_credit, 0), with a comment noting MO-1040 Line 42 (Form MO-TC) is not modeled. It lives incredits/next tomo_wftc.pywith a WFTC-scoped name because the quantity exists only as Form MO-WFTC Line 9 — MO-1040 itself has no such line, so a genericincome_tax/name would invite reuse as a real return line.mo_wftc.pyonly. Themo_non_refundable_creditsaggregate stays onmo_income_tax_before_credits: it reads the already-capped appliedmo_wftc, so the aggregate equals the applied credit either way, and the Form MO-WFTC line 8 netting is WFTC-specific — a WFTC-specific aggregate base would wrongly suppress any future credit placed ahead of the WFTC in the ordered list. (The issue originally suggested changing both call sites; that was based on the incorrect assumption that the aggregate recomputes credits from their potentials.)mo_property_tax_creditremains inrefundable.yaml(it is genuinely refundable per RSMo 135.020).mo_income_tax.pyandmo_income_tax_before_refundable_credits.pyto name RSMo 135.020 explicitly and link the refundability citation with a#page=17anchor.mo_income_tax_before_refundable_creditsto "Missouri income tax before refundable credits" — it previously shared the exact label "Missouri income tax" withmo_income_tax, leaving two indistinguishable variables in API/app metadata that differ by the full refundable PTC.Test plan
mo_wftc.yaml: PTC exhausting liability → WFTC $0; PTC partially reducing the cap → WFTC $40.mo_wftc_liability_capvariable (reduction and zero floor), undertests/.../credits/wftc/.mo_wftc$0, net MO tax −$429.32 (previously PolicyEngine paid the full $16.89 of WFTC).🤖 Generated with Claude Code