Fix Vermont Act 71 retirement exemption stacking - #9196
Conversation
…tirement exclusion stack with the §5830e(a)-(c) election; model still forces a single max_() choice Closes PolicyEngine#9146
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #9196 +/- ##
=========================================
Coverage 100.00% 100.00%
=========================================
Files 2 2
Lines 31 89 +58
=========================================
+ Hits 31 89 +58
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:
|
|
Cross-family dual review (Claude Fable 5 + GPT-5.6-sol, independent). The core direction is right and verified: for Act 71 years the formula now returns the self-phased military exclusion plus the best post-phase-out election among the modeled (a)/(b) options — exactly the correction #9146 asked for — and the changed arithmetic reproduces by hand (e.g. military $30,000 + SS $1,000 × 0.50 at AGI $60,000 = $30,500; live sims confirm no pre-2025 behavior change). Blockers before this can close #9146:
|
Issue #9146
Vermont Act No. 71 changed 32 V.S.A. § 5830e(e) so the military retirement and survivor benefit exclusion under subsection (d) may be taken in addition to one elected exclusion under subsections (a)-(c). The existing Vermont retirement income exemption formulas still treated post-2025 exclusions as a single
max_()choice among Social Security, military retirement, and CSRS/other retirement amounts, then applied the phase-out band selected from that raw winner.This updates the 2025+ behavior, keyed by
p.military_retirement.income_based_structure.in_effect, to calculate the military income-based exemption separately and add it to the best post-phase-out exclusion among Social Security and CSRS/other contributory retirement. Earlier years keep the existing single-election behavior through the same parameter branch.Eligibility is also updated so the non-military AGI gate applies only to the elected § 5830e(a)-(c) component, while military income can independently keep the variable defined. Nearby Act No. 71 citation comments are corrected.
Modified files:
policyengine_us/variables/gov/states/vt/tax/income/adjusted_gross_income/subtractions/retirement_income_exemption/vt_retirement_income_exemption.pypolicyengine_us/variables/gov/states/vt/tax/income/adjusted_gross_income/subtractions/retirement_income_exemption/vt_retirement_income_exemption_eligible.pypolicyengine_us/tests/policy/baseline/gov/states/vt/tax/income/agi/subtractions/vt_retirement_income_exemption.yamlpolicyengine_us/tests/policy/baseline/gov/states/vt/tax/income/agi/subtractions/vt_retirement_income_exemption_eligible.yamlDiff size: +184 / -27.