PolicyEngine / PolicyEngine/policyengine-us
VT: §5830e(c) other-contributory retirement exclusion is unmodeled — the (a)-(c) election only sees Social Security and CSRS
- Dominant language
- Python
- Stars
- 162
- Forks
- 212
- Avg merge
- 3d 3h
- Merged PRs (30d)
- 97
Description
Follow-up from #9146 / PR #9196. Act 71 (2025) lets the §5830e(d) military exclusion stack with **one** elected exclusion among subsections (a) Social Security, (b) CSRS, and (c) other contributory retirement systems. PR #9196 implements the election over the modeled options — but only (a) and (b) exist in the model:
- `vt_csrs_retirement_pay_exclusion` sums only `csrs_retirement_pay`, whose documentation limits it to federal CSRS.
- No Vermont variable reads any other contributory-pension input, so a subsection (c) pension (e.g. a municipal or state contributory system other than CSRS) can never qualify, be elected, or stack with the military exclusion. Filers whose best (a)-(c) option is a (c) pension are under-computed.
Modeling questions to settle before implementing:
1. Which input carries (c) income — a new dedicated input (cleanest), or a mapping from `pension_income` net of the modeled CSRS/military/SS amounts (risks double-counting and mislabeling non-contributory DB pensions)?
2. (c) shares the (b) reduction band under §5830e(e)'s election structure as amended — confirm the band parameters apply to (c) identically (the current `csrs/reduction/*` parameters would then deserve a rename or a shared parent).
Until then the election is over {SS, CSRS} only; PR #9196 was rescoped accordingly.
Contributor guide
Research direction
Start with PR #9196 and the existing vt_csrs_retirement_pay_exclusion variable and csrs/reduction/* parameters. Determine which input should represent subsection (c) income and confirm whether it shares subsection (b)'s reduction band. Done means the election covers Social Security, CSRS, and the other contributory system without double-counting, and that the military exclusion can stack with the elected option.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- backend
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 38/100