Skip to content

Fix Vermont retirement-income exemption eligibility gate for Social Security filers#8853

Open
PavelMakarchuk wants to merge 1 commit into
mainfrom
fix-vt-retirement-exemption-ss-gate
Open

Fix Vermont retirement-income exemption eligibility gate for Social Security filers#8853
PavelMakarchuk wants to merge 1 commit into
mainfrom
fix-vt-retirement-exemption-ss-gate

Conversation

@PavelMakarchuk

Copy link
Copy Markdown
Collaborator

Summary

The Vermont retirement-income exemption eligibility variable vt_retirement_income_exemption_eligible tested AGI against the CSRS reduction-end threshold for all filers, whereas the main exemption formula vt_retirement_income_exemption correctly branches on use_ss to select the Social Security phase-out endpoint. The two were consistent only while the CSRS and Social Security thresholds were identical.

S.51 (2025) (32 V.S.A. § 5830e) raised the Social Security thresholds by $5,000 (single: $60k → $65k eligibility end; joint: $75k → $80k), but the CSRS thresholds were left unchanged. As a result, a Social Security filer with AGI between the stale CSRS end and the true Social Security end was gated out of eligibility and received a $0 exemption, even though the phase-out formula would have granted a partial exemption.

Fix

Mirror the use_ss branch used by the main formula inside the eligibility gate, so both use the same Social Security reduction-end threshold for Social Security electors. This keeps the gate and the formula consistent and preserves the code's existing model of the two elections' thresholds as independent parameter paths (no YAML changes needed).

Evidence

  • 32 V.S.A. § 5830e(a)(1)(C), (a)(2)(C)
  • S.51 (2025), Vermont tax credit package (raises Social Security thresholds by $5,000)
  • 2025 Vermont Income Tax Return Booklet, p. 16 — Retirement Income Exemption Worksheet (Schedule IN-112, Part I, Line 12)

Reproduction (taxsim #999, single, age 74, TY2025)

AGI $60,942 sits in the 2025 single partial band ($55k–$65k). Correct SS end = $65,000 → ratio 0.41 → exemption = $20,725.08 × 0.41 = $8,497.28 (matches filled IN-112 Line 12 = $8,497). Before this fix PE used the stale CSRS end ($60,000), gated the filer out, and returned $0. After the fix PE produces exemption $8,497.28, VT income tax $1,281.20 — matching TaxAct and the worksheet.

Tests

Adds two integration tests to vt_retirement_income_exemption.yaml covering the single (taxsim #999) and joint (taxsim #1000) records. Both pass; neighboring VT tests still pass.

Resolves policyengine-taxsim #999 and #1000.

Fixes #8837

🤖 Generated with Claude Code

The eligibility variable vt_retirement_income_exemption_eligible tested AGI
against the CSRS reduction-end threshold for all filers, while the main
formula vt_retirement_income_exemption branches on use_ss to pick the Social
Security phase-out endpoint. After S.51 (2025) raised the Social Security
thresholds by $5,000 (single $60k->$65k, joint $75k->$80k end) but left the
CSRS thresholds unchanged, Social Security filers with AGI in the new partial
band were gated out and received a $0 exemption.

Mirror the use_ss branch in the eligibility gate so it uses the matching
Social Security reduction-end threshold, keeping the gate and formula
consistent. Adds integration tests for taxsim #999 (single) and #1000 (joint).

Fixes #8837

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@codecov

codecov Bot commented Jul 2, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (f9e58e7) to head (5b654ce).
⚠️ Report is 44 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff            @@
##              main     #8853   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files            3         1    -2     
  Lines           55        24   -31     
=========================================
- Hits            55        24   -31     
Flag Coverage Δ
unittests 100.00% <100.00%> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant