Skip to content

tax_unit_itemizes tiebreaker ignores state tax when federal tax is equal #8258

@DTrim99

Description

@DTrim99

Summary

When federal tax liability is the same under standard and itemized deductions, tax_unit_itemizes defers to a state-deduction-only tiebreaker. For states whose tax base flows from federal taxable income (e.g., Colorado), this can pick the wrong choice and produce a materially worse state tax result.

Affected file

policyengine_us/variables/gov/irs/income/taxable_income/deductions/tax_unit_itemizes.py

return where(
    federal_tax_equal,
    state_standard_deduction < state_itemized_deductions,   # tie → state preference (deductions only)
    tax_liability_if_itemizing < tax_liability_if_not_itemizing,
)

The tie branch compares state_standard_deduction vs state_itemized_deductions. States that don't have their own deduction system (CO uses federal taxable income directly) end up with both at 0, falling through to "don't itemize."

Concrete case (CO HoH, TY 2025)

Inputs: HoH, 2 dependents (ages 11, 2), $50,351 interest income, $30,000 property tax, $20,000 mortgage interest. No earned income.

Federal taxable income CO tax base CO tax Final CO
TaxAct (itemized $50K) $351 $351 $15 +$3,182 refund
PE (standard $23,625) $26,726 $26,726 $1,176 +$2,020 refund

Both produce federal tax = $0 (CTC absorbs $36 of tax under itemized; CTC absorbs $2,867 of tax under standard). The federal-tax tie triggers the deduction tiebreaker, and CO ends up using standard. PE is short on the CO refund by ~$1,162.

Source: PolicyEngine/policyengine-taxsim#889.

Suggested direction

When federal tax is equal under both choices, the tiebreaker should compare state tax outcomes under each federal itemization choice, not just state deductions. CO (and likely other states whose tax base flows from federal taxable income) need the federal choice to be made with state tax in mind.

Open question for design: this can be done by running a second branching simulation (mirroring tax_liability_if_itemizing / tax_liability_if_not_itemizing for state tax). Cost: another branching simulation. Alternative: a per-state hint that says "prefer federal itemizing when federal tax is tied" — cheaper but less general.

Reproduction

Run the taxsim CLI on this input:

taxsimid,year,state,mstat,page,sage,depx,pwages,swages,dividends,intrec,pensions,gssi,rentpaid,proptax,childcare,mortgage,age1,age2,idtl,opt1,opt1v
49631,2025,6,1,40,0,2,0,0,0,50351.313,0,0,0,30000,3000,20000,2,11,5,30,1

PE returns siitax = -2020.53. TaxAct ground truth: -3,182.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions