Skip to content

Move taxable-income ceiling from SALT to aggregate itemized deductions - #9191

Open
saisharan0103 wants to merge 1 commit into
PolicyEngine:mainfrom
saisharan0103:mergepath/issue-9167-salt-simulation-taxable-income-ceiling-m
Open

Move taxable-income ceiling from SALT to aggregate itemized deductions#9191
saisharan0103 wants to merge 1 commit into
PolicyEngine:mainfrom
saisharan0103:mergepath/issue-9167-salt-simulation-taxable-income-ceiling-m

Conversation

@saisharan0103

Copy link
Copy Markdown
Contributor

Issue #9167 identifies that salt_deduction diverges from the §164(b)(7) SALT amount when AGI minus exemptions is below otherwise allowable SALT.

Root cause: the simulation-only taxable-income ceiling was applied inside salt_deduction.formula, so the component variable reflected a whole-return itemized deduction constraint instead of the statutory SALT deduction. That also made gov.simulation.limit_itemized_deductions_to_taxable_income affect only SALT rather than aggregate itemized deductions.

Changes:

  • Remove the simulation ceiling branch from salt_deduction.formula, leaving the variable to return min_(salt_cap, salt).
  • Apply the simulation ceiling in itemized_taxable_income_deductions.formula after itemized_taxable_income_deductions_reduction, limiting aggregate itemized deductions to max_(0, adjusted_gross_income - exemptions) when the flag is true.
  • Add a focused 2026 low-AGI SALT regression case.
  • Include the required changelog fragment.

…ing makes salt_deduction diverge from the §164(b)(7) amount at low AGI

Closes PolicyEngine#9167
@codecov

codecov Bot commented Aug 2, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 85.71429% with 1 line in your changes missing coverage. Please review.
✅ Project coverage is 96.66%. Comparing base (838be3f) to head (18cacca).
⚠️ Report is 14 commits behind head on main.

Files with missing lines Patch % Lines
...ns/itemizing/itemized_taxable_income_deductions.py 85.71% 0 Missing and 1 partial ⚠️
Additional details and impacted files
@@             Coverage Diff             @@
##              main    #9191      +/-   ##
===========================================
- Coverage   100.00%   96.66%   -3.34%     
===========================================
  Files            2        2              
  Lines           31       30       -1     
  Branches         0        1       +1     
===========================================
- Hits            31       29       -2     
- Partials         0        1       +1     
Flag Coverage Δ
unittests 96.66% <85.71%> (-3.34%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@MaxGhenis

Copy link
Copy Markdown
Contributor

Cross-family dual review (Claude Fable 5 + GPT-5.6-sol, independent). The federal intent matches #9167salt_deduction now reports the §164(b)(7) amount and the simulation-only ceiling moves to the aggregate — and the new fixture's arithmetic is correct. Blocked on blast radius:

  1. Direct state consumers change materially. AZ (az_itemized_deductions), CO (co_state_addback), and UT (ut_federal_deductions_for_taxpayer_credit) read salt_deduction and previously observed the AGI-capped component. Differential sim against this PR's parent: 2026 CO single, AGI $20,000, SALT $30,000, state withholding $25,000 → co_state_addback $3,900 → $13,900, co_income_tax $152.60 → $592.60, with federal taxable income unchanged. Each of those states needs a capped-vs-uncapped ruling from its own worksheet (CO DR 0104 line 5e treatment, AZ Form 140 Schedule A adjustments, Utah §59-10-1018) plus tests — or the consumers need insulating.
  2. The relocated ceiling now caps all itemized deductions, not just SALT. A household with zero SALT and $30,000 of other itemized deductions against AGI − exemptions = $10,000 drops from $30,000 to $10,000 of reported deductions, which can flip tax_unit_itemizes and feeds QBID/AMT and many state starting points. That's a much wider behavior change than the issue's low-AGI SALT reporting defect, with no neutrality evidence or coverage (the single new fixture has SALT only and no state).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants