Skip to content
1 change: 1 addition & 0 deletions changelog.d/fix-ctc-ss-tax-filer-spouse.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
The refundable child tax credit's social security taxes (26 U.S.C. 24(d)(2)) and the Additional Medicare Tax (Form 8959) now count only the head's and spouse's wages and self-employment income, not a tax unit dependent's. The CRFB AGI surtax's expanded base now adds only the head's and spouse's contributions, exclusions and tax-exempt Social Security.
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@ metadata:
unit: bool
period: year
label: CRFB surtax expanded base in effect
reference:
- title: "Committee for a Responsible Federal Budget, Break Glass: A Plan for the Next Economic Shock, footnote 2"
href: https://www.crfb.org/papers/break-glass-plan-next-economic-shock

values:
0000-01-01: false
Original file line number Diff line number Diff line change
@@ -1,6 +1,18 @@
description: Additional income sources for CRFB surtax expanded base beyond IRS gross income.
values:
2010-01-01:
# CRFB's Break Glass plan (footnote 2) applies the surtax to "a broad
# definition of income that includes Adjusted Gross Income (AGI) plus"
# retirement contributions, HSA/MSA contributions, deductible student
# loan interest, Social Security not counted toward AGI, tax-free bond
# interest and employer-provided health insurance. It does not address
# dependents. The base starts from the return's AGI, so person-level
# sources are summed over the head and spouse only, the people whose AGI
# it is; that attribution is inferred. Tax-unit-level sources describe
# the head's and spouse's own return. Which items belong, and which
# variable stands for each, is a separate question
# (PolicyEngine/policyengine-us#9763); the footnote does not list the
# foreign earned income exclusion.
# Retirement contributions (IRA, 401k, 403b)
- traditional_ira_contributions
- traditional_401k_contributions
Expand All @@ -10,7 +22,7 @@ values:
# Deductible student loan interest
- student_loan_interest_ald
# Social Security not counted toward AGI
- tax_exempt_social_security
- filer_tax_exempt_social_security
# Foreign earnings exclusion (tax unit level, may need special handling)
- foreign_earned_income_exclusion
# Tax-free bond interest
Expand All @@ -22,3 +34,6 @@ metadata:
unit: list
period: year
label: CRFB surtax expanded base additional sources
reference:
- title: "Committee for a Responsible Federal Budget, Break Glass: A Plan for the Next Economic Shock, footnote 2"
href: https://www.crfb.org/papers/break-glass-plan-next-economic-shock
Original file line number Diff line number Diff line change
@@ -1,17 +1,19 @@
description: The IRS defines social security taxes under the Child Tax Credit to include the following variables.
values:
2018-01-01:
# Person:
# Person (summed over the head and spouse only):
- employee_social_security_tax
- employee_medicare_tax
- self_employment_tax_ald_person
# Tax Unit (describes the head's and spouse's own return):
- unreported_payroll_tax
# Tax Unit:
- self_employment_tax_ald
- additional_medicare_tax
metadata:
unit: list
period: year
label: Child Tax Credit added social security taxes
label: Child Tax Credit added social security taxes
reference:
- title: 26 U.S. Code § 24(d)(2)(A)
href: https://www.law.cornell.edu/uscode/text/26/24#d_2_A
- title: 2024 Schedule 8812 (Form 1040), Part II-B, lines 21 to 23
href: https://www.irs.gov/pub/irs-prior/f1040s8--2024.pdf#page=2
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@ def formula(tax_unit, period, parameters):
"payroll_tax_gross_wages",
"taxable_self_employment_income",
]
wages_plus_se = add(tax_unit, period, ELEMENTS)
# As in the baseline, only the head's and spouse's earnings.
wages_plus_se = tax_unit_non_dep_add(tax_unit, period, ELEMENTS)
exclusion = amc.exclusion[tax_unit("filing_status", period)]
base = max_(0, wages_plus_se - exclusion)
base_tax = amc.rate * base
Expand Down
20 changes: 4 additions & 16 deletions policyengine_us/reforms/congress/wyden_smith/ctc_expansion.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,22 +57,10 @@ def formula(tax_unit, period, parameters):

relevant_earnings = earnings_over_threshold * phase_in_rate

# Compute "Social Security taxes" as defined in the US Code for the ACTC.
# This includes OASDI and Medicare payroll taxes, as well as half
# of self-employment taxes.
SS_ADD_VARIABLES = [
# Person:
"employee_social_security_tax",
"employee_medicare_tax",
"unreported_payroll_tax",
# Tax unit:
"self_employment_tax_ald",
"additional_medicare_tax",
]
SS_SUBTRACT_VARIABLES = ["excess_payroll_tax_withheld"]
social_security_tax = add(tax_unit, period, SS_ADD_VARIABLES) - add(
tax_unit, period, SS_SUBTRACT_VARIABLES
)
# "Social Security taxes" as defined in 26 U.S.C. 24(d)(2) for the
# ACTC: the head's and spouse's OASDI and Medicare payroll taxes and
# half of their self-employment taxes, as in the baseline.
social_security_tax = tax_unit("ctc_social_security_tax", period)
eitc = tax_unit("eitc", period)
social_security_excess = max_(0, social_security_tax - eitc)
qualifying_children = tax_unit("ctc_qualifying_children", period)
Expand Down
10 changes: 9 additions & 1 deletion policyengine_us/reforms/crfb/agi_surtax.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,15 @@ def formula(tax_unit, period, parameters):
agi = tax_unit("adjusted_gross_income", period)
p = parameters(period).gov.contrib.crfb.surtax
if p.increased_base.in_effect:
additional_sources = add(tax_unit, period, p.increased_base.sources)
# CRFB's Break Glass plan (footnote 2) defines the base as
# AGI plus other income. AGI is this return's, so the base
# adds the head's and spouse's own amounts; a tax unit
# dependent's income and deductions are on the dependent's
# own return. The plan does not address dependents, so this
# attribution is inferred.
additional_sources = tax_unit_non_dep_add(
tax_unit, period, p.increased_base.sources
)
agi = agi + additional_sources
filing_status = tax_unit("filing_status", period)
joint = filing_status == filing_status.possible_values.JOINT
Expand Down
Loading
Loading