diff --git a/changelog.d/codex-crfb-indefinite-reforms.fixed.md b/changelog.d/codex-crfb-indefinite-reforms.fixed.md new file mode 100644 index 00000000000..8900b70e6e8 --- /dev/null +++ b/changelog.d/codex-crfb-indefinite-reforms.fixed.md @@ -0,0 +1 @@ +Remove hard-coded end dates from CRFB Social Security credit and senior deduction extension reforms. diff --git a/policyengine_us/reforms/crfb/non_refundable_ss_credit.py b/policyengine_us/reforms/crfb/non_refundable_ss_credit.py index daf95325db7..66753340c08 100644 --- a/policyengine_us/reforms/crfb/non_refundable_ss_credit.py +++ b/policyengine_us/reforms/crfb/non_refundable_ss_credit.py @@ -86,7 +86,6 @@ def formula(tax_unit, period, parameters): def modify_parameters(parameters): parameters.gov.irs.credits.non_refundable.update( start=instant("2026-01-01"), - stop=instant("2035-12-31"), value=[ "foreign_tax_credit", "cdcc", diff --git a/policyengine_us/reforms/crfb/senior_deduction_extension.py b/policyengine_us/reforms/crfb/senior_deduction_extension.py index 5dae41293d5..56bd3d19c4f 100644 --- a/policyengine_us/reforms/crfb/senior_deduction_extension.py +++ b/policyengine_us/reforms/crfb/senior_deduction_extension.py @@ -8,7 +8,6 @@ def modify_parameters(parameters): # Update deductions_if_itemizing to include additional_senior_deduction after 2028 parameters.gov.irs.deductions.deductions_if_itemizing.update( start=instant("2029-01-01"), - stop=instant("2099-12-31"), value=[ "qualified_business_income_deduction", "wagering_losses_deduction", @@ -20,7 +19,6 @@ def modify_parameters(parameters): # Update deductions_if_not_itemizing to include additional_senior_deduction after 2028 parameters.gov.irs.deductions.deductions_if_not_itemizing.update( start=instant("2029-01-01"), - stop=instant("2099-12-31"), value=[ "standard_deduction", "qualified_business_income_deduction", diff --git a/policyengine_us/tests/policy/contrib/crfb/non_refundable_ss_credit.yaml b/policyengine_us/tests/policy/contrib/crfb/non_refundable_ss_credit.yaml index 924147e093a..03385a5afaa 100644 --- a/policyengine_us/tests/policy/contrib/crfb/non_refundable_ss_credit.yaml +++ b/policyengine_us/tests/policy/contrib/crfb/non_refundable_ss_credit.yaml @@ -145,3 +145,16 @@ # Phase out = 6% * (165k - 150k) = $900 # Credit = max(0, 600 - 900) = 0 ss_credit: 0 + +- name: Late-year SS credit still reduces non-refundable income tax + period: 2073 + reforms: policyengine_us.reforms.crfb.non_refundable_ss_credit.non_refundable_ss_credit_reform_object + input: + gov.contrib.crfb.ss_credit.in_effect: true + taxable_social_security: 30_000 + taxable_income: 1_000_000 + filing_status: SINGLE + output: + highest_tax_rate: 0.35 + ss_credit: 600 + income_tax_non_refundable_credits: 600 diff --git a/policyengine_us/tests/policy/contrib/crfb/senior_deduction_extension.yaml b/policyengine_us/tests/policy/contrib/crfb/senior_deduction_extension.yaml index d1640a155da..be09e6aa0ea 100644 --- a/policyengine_us/tests/policy/contrib/crfb/senior_deduction_extension.yaml +++ b/policyengine_us/tests/policy/contrib/crfb/senior_deduction_extension.yaml @@ -112,3 +112,30 @@ # qualified_business_income_deduction: 2_000 # additional_senior_deduction: 6_000 (from extension) taxable_income_deductions_if_not_itemizing: 29_800 + +- name: Integration test - extension continues working at the 2100 modeling endpoint + period: 2100 + reforms: policyengine_us.reforms.crfb.senior_deduction_extension.senior_deduction_extension + input: + gov.contrib.crfb.senior_deduction_extension.applies: true + people: + senior1: + age: 67 + senior2: + age: 69 + tax_units: + tax_unit: + members: [senior1, senior2] + filing_status: JOINT + adjusted_gross_income: 100_000 + tax_unit_itemizes: true + itemized_taxable_income_deductions: 30_000 + qualified_business_income_deduction: 5_000 + wagering_losses_deduction: 0 + households: + household: + members: [senior1, senior2] + state_code: CA + output: + additional_senior_deduction: 12_000 + taxable_income_deductions_if_itemizing: 47_000