From b7fe056343d3d5a1939d0d99916a716c15fc10bb Mon Sep 17 00:00:00 2001 From: PavelMakarchuk Date: Wed, 25 Mar 2026 18:33:56 -0400 Subject: [PATCH 1/4] Add SC OBBBA non-conformity addition for 2025 SC starts from federal taxable income but does not conform to OBBBA provisions. SC1040 line 2e adds back OBBBA deductions: 1. Standard deduction increase ($1,500 MFJ, $750 SINGLE) 2. Senior deduction ($6,000 per eligible person 65+) 3. Tip/overtime/auto loan interest deductions (if applicable) For the test case (MFJ, age 65, $100K pension): sc_obbba_addback = $7,500 (matching TaxAct) sc_taxable_income = $38,610 (matching TaxAct) Closes #7854 Co-Authored-By: Claude Opus 4.6 (1M context) --- changelog.d/fix-sc-obbba-addback.fixed.md | 1 + .../sc/tax/income/additions/additions.yaml | 4 ++ .../obbba/pre_obbba_standard_deduction.yaml | 27 +++++++++++ .../gov/states/sc/tax/income/integration.yaml | 46 +++++++++++++++++++ .../tax/income/additions/sc_obbba_addback.py | 45 ++++++++++++++++++ 5 files changed, 123 insertions(+) create mode 100644 changelog.d/fix-sc-obbba-addback.fixed.md create mode 100644 policyengine_us/parameters/gov/states/sc/tax/income/additions/obbba/pre_obbba_standard_deduction.yaml create mode 100644 policyengine_us/variables/gov/states/sc/tax/income/additions/sc_obbba_addback.py diff --git a/changelog.d/fix-sc-obbba-addback.fixed.md b/changelog.d/fix-sc-obbba-addback.fixed.md new file mode 100644 index 00000000000..43f38f0aa41 --- /dev/null +++ b/changelog.d/fix-sc-obbba-addback.fixed.md @@ -0,0 +1 @@ +Add SC OBBBA non-conformity addition for 2025 (standard deduction increase, senior deduction, tip/overtime/auto loan deductions). diff --git a/policyengine_us/parameters/gov/states/sc/tax/income/additions/additions.yaml b/policyengine_us/parameters/gov/states/sc/tax/income/additions/additions.yaml index 38aaf717700..312569faaae 100644 --- a/policyengine_us/parameters/gov/states/sc/tax/income/additions/additions.yaml +++ b/policyengine_us/parameters/gov/states/sc/tax/income/additions/additions.yaml @@ -7,6 +7,10 @@ values: # - Interest income on obligations of states and political subdivisions other than South Carolina # - Other additions to income - qualified_business_income_deduction + 2025-01-01: + - sc_state_tax_addback + - qualified_business_income_deduction + - sc_obbba_addback metadata: unit: list diff --git a/policyengine_us/parameters/gov/states/sc/tax/income/additions/obbba/pre_obbba_standard_deduction.yaml b/policyengine_us/parameters/gov/states/sc/tax/income/additions/obbba/pre_obbba_standard_deduction.yaml new file mode 100644 index 00000000000..a529aeeb71e --- /dev/null +++ b/policyengine_us/parameters/gov/states/sc/tax/income/additions/obbba/pre_obbba_standard_deduction.yaml @@ -0,0 +1,27 @@ +description: >- + South Carolina conforms to this standard deduction amount, + which is the pre-OBBBA indexed value for 2025. + +SINGLE: + 2025-01-01: 15_000 +JOINT: + 2025-01-01: 30_000 +HEAD_OF_HOUSEHOLD: + 2025-01-01: 22_500 +SEPARATE: + 2025-01-01: 15_000 +SURVIVING_SPOUSE: + 2025-01-01: 30_000 + +metadata: + unit: currency-USD + period: year + label: SC pre-OBBBA conformity standard deduction + breakdown: + - filing_status + propagate_metadata_to_children: true + reference: + - title: SC 1040 Instructions 2025 - Line 2e Other additions + href: https://dor.sc.gov/sites/dor/files/forms/SC1040Instr_2025.pdf#page=3 + - title: CBO Tax Parameters 2025 (pre-OBBBA projections) + href: https://www.cbo.gov/system/files/2025-01/53724-2025-01-Tax-Parameters.xlsx diff --git a/policyengine_us/tests/policy/baseline/gov/states/sc/tax/income/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/sc/tax/income/integration.yaml index 54720e34384..be00a16f91f 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/sc/tax/income/integration.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/sc/tax/income/integration.yaml @@ -83,3 +83,49 @@ state_fips: 45 output: sc_income_tax: 117 + +- name: SC joint 2025 pension with OBBBA addback + # TaxAct adds back $7,500 on SC1040 line 2e: + # $1,500 OBBBA standard deduction increase (MFJ $30K → $31.5K) + # $6,000 OBBBA senior deduction (1 eligible person age 65) + absolute_error_margin: 5 + period: 2025 + input: + people: + person1: + age: 65 + taxable_private_pension_income: 100_000 + social_security_retirement: 5_000 + is_tax_unit_head: true + person2: + age: 54 + social_security_retirement: 5_000 + is_tax_unit_spouse: true + person3: + age: 11 + is_tax_unit_dependent: true + is_tax_unit_head: false + is_tax_unit_spouse: false + person4: + age: 4 + is_tax_unit_dependent: true + is_tax_unit_head: false + is_tax_unit_spouse: false + tax_units: + tax_unit: + members: [person1, person2, person3, person4] + premium_tax_credit: 0 + local_income_tax: 0 + state_sales_tax: 0 + spm_units: + spm_unit: + members: [person1, person2, person3, person4] + snap: 0 + tanf: 0 + households: + household: + members: [person1, person2, person3, person4] + state_fips: 45 + output: + sc_obbba_addback: 7_500 + sc_income_tax: 1_677 diff --git a/policyengine_us/variables/gov/states/sc/tax/income/additions/sc_obbba_addback.py b/policyengine_us/variables/gov/states/sc/tax/income/additions/sc_obbba_addback.py new file mode 100644 index 00000000000..bd5beb9ed1c --- /dev/null +++ b/policyengine_us/variables/gov/states/sc/tax/income/additions/sc_obbba_addback.py @@ -0,0 +1,45 @@ +from policyengine_us.model_api import * + + +class sc_obbba_addback(Variable): + value_type = float + entity = TaxUnit + label = "South Carolina OBBBA non-conformity addition" + unit = USD + definition_period = YEAR + defined_for = StateCode.SC + reference = ( + "https://dor.sc.gov/sites/dor/files/forms/SC1040Instr_2025.pdf#page=3", + "https://www.congress.gov/bill/119th-congress/house-bill/1/text", + ) + + def formula(tax_unit, period, parameters): + p = parameters(period).gov.states.sc.tax.income.additions.obbba + # SC does not conform to OBBBA provisions that reduce + # federal taxable income. SC1040 line 2e adds back these + # amounts. + # + # 1. OBBBA standard deduction increase. + # Only applies if taxpayer used the standard deduction. + filing_status = tax_unit("filing_status", period) + itemizes = tax_unit("tax_unit_itemizes", period) + federal_std_ded = parameters(period).gov.irs.deductions.standard.amount[ + filing_status + ] + pre_obbba_std_ded = p.pre_obbba_standard_deduction[filing_status] + std_ded_addback = where( + itemizes, 0, max_(federal_std_ded - pre_obbba_std_ded, 0) + ) + # 2. OBBBA senior deduction (entirely new from OBBBA). + senior_deduction = tax_unit("additional_senior_deduction", period) + # 3. Other OBBBA deductions (tip, overtime, auto loan). + tip_deduction = tax_unit("tip_income_deduction", period) + overtime_deduction = tax_unit("overtime_income_deduction", period) + auto_loan_deduction = tax_unit("auto_loan_interest_deduction", period) + return ( + std_ded_addback + + senior_deduction + + tip_deduction + + overtime_deduction + + auto_loan_deduction + ) From 5958669262b8bd51c9bb2533ac38cea2e6d97cf4 Mon Sep 17 00:00:00 2001 From: PavelMakarchuk Date: Wed, 25 Mar 2026 18:43:12 -0400 Subject: [PATCH 2/4] Add SC DOR references and fix descriptions - Variable label: "SC federal non-conformity addition for the One Big Beautiful Bill Act" - Add SC DOR IRC Conformity Update page as primary reference - Fix SC1040 line reference: line 1e (not 2e) - Fix parameter description to explain non-conformity purpose - Update comments with official terminology and amounts Co-Authored-By: Claude Opus 4.6 (1M context) --- .../obbba/pre_obbba_standard_deduction.yaml | 13 +++++++++---- .../tax/income/additions/sc_obbba_addback.py | 19 ++++++++++--------- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/policyengine_us/parameters/gov/states/sc/tax/income/additions/obbba/pre_obbba_standard_deduction.yaml b/policyengine_us/parameters/gov/states/sc/tax/income/additions/obbba/pre_obbba_standard_deduction.yaml index a529aeeb71e..77c1eeaa7c0 100644 --- a/policyengine_us/parameters/gov/states/sc/tax/income/additions/obbba/pre_obbba_standard_deduction.yaml +++ b/policyengine_us/parameters/gov/states/sc/tax/income/additions/obbba/pre_obbba_standard_deduction.yaml @@ -1,6 +1,9 @@ description: >- - South Carolina conforms to this standard deduction amount, - which is the pre-OBBBA indexed value for 2025. + South Carolina uses this standard deduction amount for + federal non-conformity purposes under the One Big Beautiful + Bill Act. These are the pre-OBBBA indexed values; the + difference from the federal standard deduction is added back + on SC1040 line 1e. SINGLE: 2025-01-01: 15_000 @@ -16,12 +19,14 @@ SURVIVING_SPOUSE: metadata: unit: currency-USD period: year - label: SC pre-OBBBA conformity standard deduction + label: South Carolina pre-OBBBA conformity standard deduction breakdown: - filing_status propagate_metadata_to_children: true reference: - - title: SC 1040 Instructions 2025 - Line 2e Other additions + - title: SC DOR - Internal Revenue Code Conformity Update + href: https://dor.sc.gov/income-tax-south-carolina-internal-revenue-code-conformity-update + - title: SC 1040 Instructions 2025 - Line 1e Other additions href: https://dor.sc.gov/sites/dor/files/forms/SC1040Instr_2025.pdf#page=3 - title: CBO Tax Parameters 2025 (pre-OBBBA projections) href: https://www.cbo.gov/system/files/2025-01/53724-2025-01-Tax-Parameters.xlsx diff --git a/policyengine_us/variables/gov/states/sc/tax/income/additions/sc_obbba_addback.py b/policyengine_us/variables/gov/states/sc/tax/income/additions/sc_obbba_addback.py index bd5beb9ed1c..d5dacfddbff 100644 --- a/policyengine_us/variables/gov/states/sc/tax/income/additions/sc_obbba_addback.py +++ b/policyengine_us/variables/gov/states/sc/tax/income/additions/sc_obbba_addback.py @@ -4,23 +4,24 @@ class sc_obbba_addback(Variable): value_type = float entity = TaxUnit - label = "South Carolina OBBBA non-conformity addition" + label = "South Carolina federal non-conformity addition for the One Big Beautiful Bill Act" unit = USD definition_period = YEAR defined_for = StateCode.SC reference = ( + "https://dor.sc.gov/income-tax-south-carolina-internal-revenue-code-conformity-update", + "https://dor.sc.gov/sites/dor/files/forms/SC1040_2025.pdf", "https://dor.sc.gov/sites/dor/files/forms/SC1040Instr_2025.pdf#page=3", - "https://www.congress.gov/bill/119th-congress/house-bill/1/text", ) def formula(tax_unit, period, parameters): p = parameters(period).gov.states.sc.tax.income.additions.obbba - # SC does not conform to OBBBA provisions that reduce - # federal taxable income. SC1040 line 2e adds back these - # amounts. + # SC has not conformed to the One Big Beautiful Bill Act + # (signed July 4, 2025). SC1040 line 1e adds back federal + # deductions SC does not recognize. # - # 1. OBBBA standard deduction increase. - # Only applies if taxpayer used the standard deduction. + # 1. Standard deduction increase ($750 S/MFS, $1,125 HOH, + # $1,500 MFJ/SS). Only if taxpayer used standard deduction. filing_status = tax_unit("filing_status", period) itemizes = tax_unit("tax_unit_itemizes", period) federal_std_ded = parameters(period).gov.irs.deductions.standard.amount[ @@ -30,9 +31,9 @@ def formula(tax_unit, period, parameters): std_ded_addback = where( itemizes, 0, max_(federal_std_ded - pre_obbba_std_ded, 0) ) - # 2. OBBBA senior deduction (entirely new from OBBBA). + # 2. Enhanced senior deduction ($6,000 for age 65+). senior_deduction = tax_unit("additional_senior_deduction", period) - # 3. Other OBBBA deductions (tip, overtime, auto loan). + # 3. Other non-conformity deductions (tips, overtime, auto loan). tip_deduction = tax_unit("tip_income_deduction", period) overtime_deduction = tax_unit("overtime_income_deduction", period) auto_loan_deduction = tax_unit("auto_loan_interest_deduction", period) From a1ec754f93c7341acb90039ed4e95e2f2eebafe6 Mon Sep 17 00:00:00 2001 From: PavelMakarchuk Date: Wed, 25 Mar 2026 18:47:43 -0400 Subject: [PATCH 3/4] Fix parameter description to follow PolicyEngine standards Co-Authored-By: Claude Opus 4.6 (1M context) --- .../obbba/pre_obbba_standard_deduction.yaml | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/policyengine_us/parameters/gov/states/sc/tax/income/additions/obbba/pre_obbba_standard_deduction.yaml b/policyengine_us/parameters/gov/states/sc/tax/income/additions/obbba/pre_obbba_standard_deduction.yaml index 77c1eeaa7c0..53544d7369d 100644 --- a/policyengine_us/parameters/gov/states/sc/tax/income/additions/obbba/pre_obbba_standard_deduction.yaml +++ b/policyengine_us/parameters/gov/states/sc/tax/income/additions/obbba/pre_obbba_standard_deduction.yaml @@ -1,9 +1,4 @@ -description: >- - South Carolina uses this standard deduction amount for - federal non-conformity purposes under the One Big Beautiful - Bill Act. These are the pre-OBBBA indexed values; the - difference from the federal standard deduction is added back - on SC1040 line 1e. +description: South Carolina uses this amount as the pre-One Big Beautiful Bill Act standard deduction for federal non-conformity additions under the individual income tax program. SINGLE: 2025-01-01: 15_000 @@ -24,9 +19,9 @@ metadata: - filing_status propagate_metadata_to_children: true reference: - - title: SC DOR - Internal Revenue Code Conformity Update + - title: SC DOR Internal Revenue Code Conformity Update href: https://dor.sc.gov/income-tax-south-carolina-internal-revenue-code-conformity-update - - title: SC 1040 Instructions 2025 - Line 1e Other additions + - title: SC 1040 Instructions 2025, Line 1e href: https://dor.sc.gov/sites/dor/files/forms/SC1040Instr_2025.pdf#page=3 - - title: CBO Tax Parameters 2025 (pre-OBBBA projections) + - title: CBO Tax Parameters and Effective Marginal Tax Rates, Jan 2025 href: https://www.cbo.gov/system/files/2025-01/53724-2025-01-Tax-Parameters.xlsx From edd19cef44982922d03b7024a3e2096b655e5be2 Mon Sep 17 00:00:00 2001 From: PavelMakarchuk Date: Wed, 25 Mar 2026 19:33:28 -0400 Subject: [PATCH 4/4] =?UTF-8?q?Fix=20comments:=20line=201e=20=E2=86=92=20l?= =?UTF-8?q?ine=20e,=20page=20anchors,=20add=20IRS=20Rev.=20Proc.=20referen?= =?UTF-8?q?ce?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fix "SC1040 line 1e" to "SC1040 line e" (actual form label) - Fix #page=3 → #page=5 in 3 files (was pointing to TOC) - Replace CBO secondary source with IRS Rev. Proc. 2024-40 Section 3.01 (authoritative source for pre-OBBBA standard deduction values) Co-Authored-By: Claude Opus 4.6 (1M context) --- .../gov/states/sc/tax/income/additions/additions.yaml | 2 +- .../additions/obbba/pre_obbba_standard_deduction.yaml | 8 ++++---- .../states/sc/tax/income/additions/sc_obbba_addback.py | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/policyengine_us/parameters/gov/states/sc/tax/income/additions/additions.yaml b/policyengine_us/parameters/gov/states/sc/tax/income/additions/additions.yaml index 312569faaae..7a97ad0562b 100644 --- a/policyengine_us/parameters/gov/states/sc/tax/income/additions/additions.yaml +++ b/policyengine_us/parameters/gov/states/sc/tax/income/additions/additions.yaml @@ -18,7 +18,7 @@ metadata: label: South Carolina federal taxable income additions reference: - title: SC 1040 tax form instructions (2025) - href: https://dor.sc.gov/sites/dor/files/forms/SC1040Instr_2025.pdf#page=3 + href: https://dor.sc.gov/sites/dor/files/forms/SC1040Instr_2025.pdf#page=5 - title: SC 1040 tax form (2021) href: https://dor.sc.gov/forms-site/Forms/SC1040_2021.pdf#page=2 - title: SC 1040 tax form instructions (2021) diff --git a/policyengine_us/parameters/gov/states/sc/tax/income/additions/obbba/pre_obbba_standard_deduction.yaml b/policyengine_us/parameters/gov/states/sc/tax/income/additions/obbba/pre_obbba_standard_deduction.yaml index 53544d7369d..41c6ad1edda 100644 --- a/policyengine_us/parameters/gov/states/sc/tax/income/additions/obbba/pre_obbba_standard_deduction.yaml +++ b/policyengine_us/parameters/gov/states/sc/tax/income/additions/obbba/pre_obbba_standard_deduction.yaml @@ -21,7 +21,7 @@ metadata: reference: - title: SC DOR Internal Revenue Code Conformity Update href: https://dor.sc.gov/income-tax-south-carolina-internal-revenue-code-conformity-update - - title: SC 1040 Instructions 2025, Line 1e - href: https://dor.sc.gov/sites/dor/files/forms/SC1040Instr_2025.pdf#page=3 - - title: CBO Tax Parameters and Effective Marginal Tax Rates, Jan 2025 - href: https://www.cbo.gov/system/files/2025-01/53724-2025-01-Tax-Parameters.xlsx + - title: SC 1040 Instructions 2025, Line e + href: https://dor.sc.gov/sites/dor/files/forms/SC1040Instr_2025.pdf#page=5 + - title: IRS Revenue Procedure 2024-40, Section 3.01 + href: https://www.irs.gov/pub/irs-drop/rp-24-40.pdf#page=12 diff --git a/policyengine_us/variables/gov/states/sc/tax/income/additions/sc_obbba_addback.py b/policyengine_us/variables/gov/states/sc/tax/income/additions/sc_obbba_addback.py index d5dacfddbff..d4af5a07fcc 100644 --- a/policyengine_us/variables/gov/states/sc/tax/income/additions/sc_obbba_addback.py +++ b/policyengine_us/variables/gov/states/sc/tax/income/additions/sc_obbba_addback.py @@ -11,13 +11,13 @@ class sc_obbba_addback(Variable): reference = ( "https://dor.sc.gov/income-tax-south-carolina-internal-revenue-code-conformity-update", "https://dor.sc.gov/sites/dor/files/forms/SC1040_2025.pdf", - "https://dor.sc.gov/sites/dor/files/forms/SC1040Instr_2025.pdf#page=3", + "https://dor.sc.gov/sites/dor/files/forms/SC1040Instr_2025.pdf#page=5", ) def formula(tax_unit, period, parameters): p = parameters(period).gov.states.sc.tax.income.additions.obbba # SC has not conformed to the One Big Beautiful Bill Act - # (signed July 4, 2025). SC1040 line 1e adds back federal + # (signed July 4, 2025). SC1040 line e adds back federal # deductions SC does not recognize. # # 1. Standard deduction increase ($750 S/MFS, $1,125 HOH,