Skip to content

Net the 2026 section 68 taxable-income leg of the QBI and other non-itemized deductions - #10136

Merged
MaxGhenis merged 4 commits into
mainfrom
fix-68-taxable-income-leg
Oct 12, 2026
Merged

MaxGhenis merged 4 commits into
mainfrom
fix-68-taxable-income-leg

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 12, 2026 •

Copy link
Copy Markdown
Contributor

Fixes #9170.

Independent review: GPT-6.1 Sol approved (r1 approve with nits at 0624217ff6, follow-ups applied; r2 approve at adaa40787b; r3 approve at 50c302cee8).

What changes

From 2026, section 68(a) as rewritten by P.L. 119-21 sec. 70111(a) reduces itemized deductions by 2/37 of the lesser of "(1) such amount of itemized deductions, or (2) so much of the taxable income of the taxpayer for the taxable year (determined without regard to this section and increased by such amount of itemized deductions) as exceeds the dollar amount at which the 37 percent rate bracket under section 1 begins". Main took leg (2) as AGI minus exemptions. For an itemizer, taxable income increased by the itemized deductions is AGI less exemptions and every deduction section 63(b) allows besides itemized deductions, which section 63(d)(2) keeps out of "itemized deductions". Those are the QBI (199A), tips (224), overtime (225), senior (151(d)(5)(C)) and car-loan interest (163(h)(4)) deductions.

  1. taxable_income_before_itemized_deductions (new) is AGI − exemptions − every deductions_if_itemizing entry except the itemized deductions. Wagering losses are a section 165(d) itemized deduction listed apart from the others, so they are added back. The 2026 branch of itemized_taxable_income_deductions_reduction and Idaho's recomputation of the limitation (id_itemized_deductions) use it.
  2. taxable_income_less_qbid deducts itemized deductions before section 68 whenever the P.L. 119-21 section 68 applies. Sec. 70111(b)(1) amends 199A(e)(1) to read "taxable income shall be computed without regard to section 68 and without regard to any deduction allowable under this section", with the same effective date. This also removes the cycle reduction → QBI deduction → its taxable income → reduction.
  3. tax_unit_itemizes, while the P.L. 119-21 section 68 applies, takes itemized deductions from the branch that itemizes, the one tax_liability_if_itemizing already uses. The limitation now depends on the QBI deduction, which depends on the itemization choice. In branch mode this adds no branch. In other years, and in the prior-law counterfactual, it reads the main simulation's value as before.

For a federal non-itemizer, the main simulation's itemized_taxable_income_deductions, which states such as Idaho and Colorado read, now nets the QBI deduction as calculated with the standard deduction. The QBI deduction "if itemizing" could differ by at most 20% of the gap between itemized and standard deductions, so the reduction could differ by at most 2/37 of that. Either is closer to the statute than main's AGI less exemptions.

The full legal argument, with verbatim extracts (P.L. 119-21 secs. 70103 and 70111, 26 U.S.C. 63(b) and (d), 199A(e)(1), Rev. Proc. 2025-32 sec. 4.01, P.L. 119-108 sec. 2) and the 2026 IRS drafts that corroborate it (Schedule A line 18, Form 1040 lines 13a-13b, Schedule 1-A line 44), is in #9170 (comment).

Worked example (statute arithmetic)

2026, single, AGI $700,000 including $100,000 of qualified REIT dividends, $50,000 of itemized deductions:

main this PR (= statute)
199A taxable income 652,702.70 (after section 68) 650,000 (without section 68)
QBI deduction 20,000 20,000
leg (2): taxable income without section 68, plus itemized deductions 700,000 680,000
reduction: 2/37 × min(50,000, leg (2) − 640,600) 2,702.70 2,129.73
taxable income 632,702.70 632,129.73

With $300,000 of the AGI in REIT dividends, leg (2) is 640,000, so there is no reduction; main reduces by $2,702.70.

Which deductions matter today

Under current-law parameters only the QBI deduction moves results. Leg (2) can exceed a bracket start only when AGI does, and the lowest start is $384,350 (separate). By then the other 63(b) deductions are fully phased out:

  • tips: $25,000 less $100 per $1,000 of MAGI over $150,000 ($300,000 joint);
  • overtime: $12,500 ($25,000 joint), same phase-out;
  • tips and overtime are joint-only for married filers;
  • car-loan interest: $10,000 less $200 per $1,000 over $100,000 ($200,000 joint);
  • senior: $6,000 less 6 percent over $75,000 ($150,000 joint).

They count under reforms that widen those phase-outs, and the tests cover them through direct inputs.

Not changed here

Invariants

For every input, with the P.L. 119-21 section 68 in force:

  • 0 ≤ reduction ≤ 2/37 × itemized deductions, so allowed itemized deductions ≥ 35/37 of them.
  • The reduction equals 2/37 × min(itemized, max(0, AGI − exemptions − 63(b) deductions − bracket start)), with the 2026 bracket starts restated from Rev. Proc. 2025-32 sec. 4.01. This is a differential test against an independent restatement, which also checks the parameter file.
  • Each 63(b) deduction lowers leg (2) one for one. It never raises the reduction and never lowers it by more than 2/37 of itself. Wagering losses leave leg (2) unchanged.
  • More AGI never lowers the reduction. More of any itemized deduction never lowers allowed itemized deductions.
  • With the QBI deduction calculated from qualified REIT dividends, it equals min(20% × dividends, 20% × max(0, AGI − itemized deductions before section 68)). The reduction nets it out of leg (2), whether the itemization choice is an input or calculated.
  • Every entry point gives the same values in branch and non-branch itemization modes (checked with a script for the reduction, tax_unit_itemizes, taxable_income_less_qbid, the QBI deduction, Idaho itemized deductions and household_net_income, 2025 and 2026).

Tests

  • YAML from statute arithmetic and Rev. Proc. 2025-32:

    • itemized_taxable_income_deductions_reduction.yaml: single, joint, separate and head of household, plus a REIT case where the 20%-of-taxable-income cap binds;
    • taxable_income_before_itemized_deductions.yaml;
    • taxable_income_less_qbid.yaml: 2026, and the 2026 prior-law counterfactual;
    • tax_unit_itemizes.yaml: a case the corrected limitation flips to itemizing.

    Seven of the new cases fail on main; the head of household case (leg (1) binds) and the counterfactual pass there, as designed.

  • Property and differential tests: four new tests (five cases) in tests/core/test_itemized_deduction_limitation_properties.py. All fail on main.

  • Cost of the property file: 28.2 s and 2.31 GB peak RSS on main, against 32.8 s and 2.76 GB on this branch. These are back-to-back local macOS runs under a host load of about 260, not CI. The new 2026 tests take about 1.3 s of call time.

Microsimulation

A real 2026 microsimulation on the default dataset, comparing main at the merge base ad02ee1b2f with this PR at 0624217ff6. The runs went one at a time under the shared heavy lock. The later commits change only tests and the non-OBBB, non-branching path of tax_unit_itemizes, which a 2026 run with default settings does not take. Sums are weighted; the record counts are of tax units.

Output Change Records changed (weighted)
itemized_taxable_income_deductions_reduction −$35.5M (base $10.63bn) 90 (151,427), all down
itemized_taxable_income_deductions +$35.5M 90 (151,427)
qualified_business_income_deduction −$0.6M 7 (4,666), all down
taxable_income −$32.1M 61 (135,758): 57 down, 4 up
income_tax −$10.3M 61 (135,758)
state_income_tax −$392 5 (717)
household_net_income +$10.3M 60 (135,758)
tax_unit_itemizes, total_itemized_taxable_income_deductions, household_benefits 0 0
  • The reduction falls for top-bracket itemizers with a QBI deduction.
  • The QBI deduction falls slightly where its 20%-of-taxable-income cap binds, because that taxable income now ignores section 68.
  • That is also why taxable income rises for 4 units.

The comparison files are fixes/10136-impact/compare.2026.json on the hub host.

YAML suites at 50c302cee8: the IRS shard (tests/policy/baseline/gov/irs, per subfolder) and the Idaho, Colorado, Georgia, South Carolina, Utah and Louisiana folders passed, 4,364 cases with 0 failures, under the shared heavy lock. The 15 other state files that read the changed variables (96 cases) passed locally.

axiom: TheAxiomFoundation/rulespec-us#1697 queued. us:statutes/26/68#itemized_deduction_reduction_base is right given its input. But the 2026 composition never derives taxable_income_determined_without_section_68, nor 199A's taxable_income_computed_without_section_199A, so two committed fixtures contradict 199A(a)(2) arithmetic. #1697 has the verbatim law, a pasteable review_finding and companion tests from the same arithmetic as the YAML here.

🤖 Generated with Claude Code

MaxGhenis and others added 2 commits October 11, 2026 21:15
Section 68(a)(2), as rewritten by P.L. 119-21 sec. 70111(a), measures
"taxable income ... (determined without regard to this section and increased
by such amount of itemized deductions)". For an itemizer that is AGI less
exemptions and every deduction 63(b) allows besides itemized deductions
(199A, 224, 225, 151(d)(5)(C), 163(h)(4)). The reduction used AGI minus
exemptions, overstating the base for filers with a QBI deduction.

- New taxable_income_before_itemized_deductions gives that amount; the
  reduction and Idaho's recomputation of it use it.
- Section 199A(e)(1), as amended by sec. 70111(b), computes taxable income
  without regard to section 68, so taxable_income_less_qbid deducts
  itemized deductions before the limitation from 2026. This also keeps the
  reduction -> QBID -> reduction chain acyclic.
- tax_unit_itemizes reads itemized deductions from the itemizing branch,
  since the QBI deduction (and so the limitation) depends on the choice.

Fixes #9170

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- YAML cases for single, joint, separate and head-of-household filers, with
  2026 37 percent bracket starts from Rev. Proc. 2025-32 sec. 4.01, and a
  qualified REIT dividend case where the QBI deduction is capped by taxable
  income computed without regard to section 68 (199A(e)(1)).
- taxable_income_before_itemized_deductions unit cases (63(b)/(d), the 2029
  end of the OBBB deductions, wagering losses as an itemized deduction).
- An itemization-choice case the corrected limitation flips.
- Property and differential tests: leg (2) and the reduction restated from
  the statute; bounds; each 63(b) deduction lowers leg (2) one for one;
  monotonicity in AGI and itemized components; a calculated QBI deduction
  with the itemization choice set and calculated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 2 commits October 11, 2026 22:55
Review follow-ups (GPT-6.1 Sol, approve with nits):
- tax_unit_itemizes reads itemized deductions from the itemizing branch only
  when the rewritten section 68 is in force, the only case where they depend
  on the itemization choice; other years and the prior-law counterfactual
  keep the main-simulation value, so non-branching mode adds no branch there.
- A 2026 case with branch_to_determine_itemization false.
- The property tests' docstring states that gambling losses outside the
  limited base is a model limitation (#10070), not the law; the 2026
  monotonicity check raises one itemized component instead of seven.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…non-branching case

Optional nits from the Sol delta review (approve): allowed itemized
deductions rise by at least 35/37 of an increase; the comment cites tests 6
and 8; the non-branching itemization case asserts the 60,000 QBI deduction.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis marked this pull request as ready for review October 12, 2026 08:50
@MaxGhenis

Copy link
Copy Markdown
Contributor Author

Hand-off to the US + core hub.

@MaxGhenis
MaxGhenis merged commit 2e9eea7 into main Oct 12, 2026
33 checks passed
@MaxGhenis

Copy link
Copy Markdown
Contributor Author

US + core hub merge audit, us#10136 at 50c302cee8391f485e8ddc11a76e721708eae790 (squash): Net the 2026 section 68 taxable-income leg of the QBI and other non-itemized deductions.

@MaxGhenis
MaxGhenis deleted the fix-68-taxable-income-leg branch October 12, 2026 17:33
MaxGhenis added a commit that referenced this pull request Oct 14, 2026
From 2026 tax_unit_itemizes opens the itemizing branch for the section 68
limitation (#10136) with only tax_unit_itemizes overridden. From
policyengine-core 3.33 (#560), set_input on a branch drops the values stored
after the overridden variable was first stored anywhere in the simulation,
so that branch lost the inherited section 1341 method and chose its own as a
filer forced to itemize. Its itemized deductions then decided itemization on
a liability tie, or always with itemization branching off: CI failed two 2026
grid points, and a 2026 household with branching off came out at $4,988
instead of $4,100.

get_itemization_branch builds the itemizing and non-itemizing branches for
all three callers, adding the method as an input whenever someone qualifies,
so they share one branch and none chooses a method. A 2026 test covers that
household in every calculation order under both itemization settings; it
fails before this change.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.

§68 limitation base uses an AGI-minus-exemptions proxy instead of taxable income determined without §68

1 participant