From d35c29b59f13ecea85d7f7d5ea1162c1c14289b9 Mon Sep 17 00:00:00 2001 From: PavelMakarchuk Date: Mon, 13 Jul 2026 10:25:34 -0400 Subject: [PATCH] Fix CT pension subtraction 2024 phase-out leaking into 2019-2023 (#9008) The TY2024 phase-out brackets in the CT pension/annuity subtraction were defined only from 2024-01-01, so at earlier instants they resolved to their 2024 values, granting a nonzero subtraction above the pre-2024 $100k (joint) / $75k (other) AGI cliff. Added explicit 2019-01-01: 0 amounts to each 2024-only bracket in joint.yaml and non_joint.yaml. Co-Authored-By: Claude Opus 4.8 --- ...ct-pension-subtraction-cliff-9008.fixed.md | 1 + .../pensions_or_annuity/joint.yaml | 8 +++++ .../pensions_or_annuity/non_joint.yaml | 8 +++++ .../gov/states/ct/tax/income/integration.yaml | 29 ++++++++++++++++ .../ct_pension_annuity_subtraction.yaml | 33 +++++++++++++++++++ 5 files changed, 79 insertions(+) create mode 100644 changelog.d/ct-pension-subtraction-cliff-9008.fixed.md diff --git a/changelog.d/ct-pension-subtraction-cliff-9008.fixed.md b/changelog.d/ct-pension-subtraction-cliff-9008.fixed.md new file mode 100644 index 00000000000..5e6b3fec03c --- /dev/null +++ b/changelog.d/ct-pension-subtraction-cliff-9008.fixed.md @@ -0,0 +1 @@ +Fixed the Connecticut pension and annuity subtraction so the 2024 phase-out brackets no longer leak into 2019-2023, where the subtraction is zero above the AGI cliff. diff --git a/policyengine_us/parameters/gov/states/ct/tax/income/subtractions/pensions_or_annuity/joint.yaml b/policyengine_us/parameters/gov/states/ct/tax/income/subtractions/pensions_or_annuity/joint.yaml index 33a50efe194..d5a11485515 100644 --- a/policyengine_us/parameters/gov/states/ct/tax/income/subtractions/pensions_or_annuity/joint.yaml +++ b/policyengine_us/parameters/gov/states/ct/tax/income/subtractions/pensions_or_annuity/joint.yaml @@ -33,32 +33,40 @@ brackets: - threshold: 2024-01-01: 105_000 amount: + 2019-01-01: 0 2024-01-01: 0.7 - threshold: 2024-01-01: 110_000 amount: + 2019-01-01: 0 2024-01-01: 0.55 - threshold: 2024-01-01: 115_000 amount: + 2019-01-01: 0 2024-01-01: 0.4 - threshold: 2024-01-01: 120_000 amount: + 2019-01-01: 0 2024-01-01: 0.25 - threshold: 2024-01-01: 125_000 amount: + 2019-01-01: 0 2024-01-01: 0.1 - threshold: 2024-01-01: 130_000 amount: + 2019-01-01: 0 2024-01-01: 0.05 - threshold: 2024-01-01: 140_000 amount: + 2019-01-01: 0 2024-01-01: 0.025 - threshold: 2024-01-01: 150_000 amount: + 2019-01-01: 0 2024-01-01: 0 diff --git a/policyengine_us/parameters/gov/states/ct/tax/income/subtractions/pensions_or_annuity/non_joint.yaml b/policyengine_us/parameters/gov/states/ct/tax/income/subtractions/pensions_or_annuity/non_joint.yaml index 8bdf8f1446d..b28fbe31fd0 100644 --- a/policyengine_us/parameters/gov/states/ct/tax/income/subtractions/pensions_or_annuity/non_joint.yaml +++ b/policyengine_us/parameters/gov/states/ct/tax/income/subtractions/pensions_or_annuity/non_joint.yaml @@ -33,32 +33,40 @@ brackets: - threshold: 2024-01-01: 77_500 amount: + 2019-01-01: 0 2024-01-01: 0.7 - threshold: 2024-01-01: 80_000 amount: + 2019-01-01: 0 2024-01-01: 0.55 - threshold: 2024-01-01: 82_500 amount: + 2019-01-01: 0 2024-01-01: 0.4 - threshold: 2024-01-01: 85_000 amount: + 2019-01-01: 0 2024-01-01: 0.25 - threshold: 2024-01-01: 87_500 amount: + 2019-01-01: 0 2024-01-01: 0.1 - threshold: 2024-01-01: 90_000 amount: + 2019-01-01: 0 2024-01-01: 0.05 - threshold: 2024-01-01: 95_000 amount: + 2019-01-01: 0 2024-01-01: 0.025 - threshold: 2024-01-01: 100_000 amount: + 2019-01-01: 0 2024-01-01: 0 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ct/tax/income/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/ct/tax/income/integration.yaml index 84b9e738aa8..2c51c277e41 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ct/tax/income/integration.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ct/tax/income/integration.yaml @@ -103,3 +103,32 @@ output: income_tax: -733 ct_income_tax: 2_415 + +- name: CT 2021 joint filer with federal AGI above the 100k cliff gets no pension and annuity subtraction (taxsim 1077) + period: 2021 + absolute_error_margin: 2 + input: + people: + head: + age: 71 + taxable_private_pension_income: 46_772.66 + taxable_interest_income: 955.58 + social_security_retirement: 10_204.63 + spouse: + age: 69 + taxable_private_pension_income: 46_772.66 + taxable_interest_income: 955.58 + social_security_retirement: 10_204.63 + tax_units: + tax_unit: + members: [head, spouse] + households: + household: + members: [head, spouse] + state_code: CT + output: + adjusted_gross_income: 112_804 + ct_pension_annuity_subtraction: 0 + ct_social_security_benefit_adjustment: 12_246 + ct_agi: 100_559 + ct_income_tax: 4_671 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ct/tax/income/subtractions/ct_pension_annuity_subtraction.yaml b/policyengine_us/tests/policy/baseline/gov/states/ct/tax/income/subtractions/ct_pension_annuity_subtraction.yaml index 912b51a3ec2..1bbbee659bf 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ct/tax/income/subtractions/ct_pension_annuity_subtraction.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ct/tax/income/subtractions/ct_pension_annuity_subtraction.yaml @@ -107,3 +107,36 @@ taxable_pension_income: 10_000 output: ct_pension_annuity_subtraction: 0 + +- name: Joint household with $112,804 AGI in 2021 is above the cliff and gets no subtraction + period: 2021 + input: + state_code: CT + is_tax_unit_head_or_spouse: true + filing_status: JOINT + adjusted_gross_income: 112_804 + taxable_pension_income: 10_000 + output: + ct_pension_annuity_subtraction: 0 + +- name: Single household with $85,000 AGI in 2021 is above the cliff and gets no subtraction + period: 2021 + input: + state_code: CT + is_tax_unit_head_or_spouse: true + filing_status: SINGLE + adjusted_gross_income: 85_000 + taxable_pension_income: 10_000 + output: + ct_pension_annuity_subtraction: 0 + +- name: Joint household with $99,000 AGI in 2021 is below the cliff and gets the 42 percent subtraction + period: 2021 + input: + state_code: CT + is_tax_unit_head_or_spouse: true + filing_status: JOINT + adjusted_gross_income: 99_000 + taxable_pension_income: 10_000 + output: + ct_pension_annuity_subtraction: 4_200