Repository navigation
Net the 2026 section 68 taxable-income leg of the QBI and other non-itemized deductions - #10136
Merged
Merged
Conversation
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>
This was referenced Oct 12, 2026
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
marked this pull request as ready for review
October 12, 2026 08:50
Contributor
Author
|
Hand-off to the US + core hub.
|
Contributor
Author
|
US + core hub merge audit, us#10136 at
|
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #9170.
Independent review: GPT-6.1 Sol approved (r1 approve with nits at
0624217ff6, follow-ups applied; r2 approve atadaa40787b; r3 approve at50c302cee8).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.
taxable_income_before_itemized_deductions(new) is AGI − exemptions − everydeductions_if_itemizingentry 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 ofitemized_taxable_income_deductions_reductionand Idaho's recomputation of the limitation (id_itemized_deductions) use it.taxable_income_less_qbiddeducts 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.tax_unit_itemizes, while the P.L. 119-21 section 68 applies, takes itemized deductions from the branch that itemizes, the onetax_liability_if_itemizingalready 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:
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:
They count under reforms that widen those phase-outs, and the tests cover them through direct inputs.
Not changed here
casualty_loss_deductionis off from 2018 (gov.irs.deductions.itemized.casualty.active). Noted on Personal casualty losses are non-deductible from 2018 in PolicyEngine, but §165(h)(5) still allows losses attributable to federally (and, from 2026, State) declared disasters #9920 for whoever models disaster losses.taxable_income_less_qbiddoes not subtract personal exemptions. That predates this PR and matters only in reforms that restore exemptions; a follow-up session is proposed for it.Invariants
For every input, with the P.L. 119-21 section 68 in force:
tax_unit_itemizes,taxable_income_less_qbid, the QBI deduction, Idaho itemized deductions andhousehold_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
ad02ee1b2fwith this PR at0624217ff6. 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 oftax_unit_itemizes, which a 2026 run with default settings does not take. Sums are weighted; the record counts are of tax units.itemized_taxable_income_deductions_reductionitemized_taxable_income_deductionsqualified_business_income_deductiontaxable_incomeincome_taxstate_income_taxhousehold_net_incometax_unit_itemizes,total_itemized_taxable_income_deductions,household_benefitsThe comparison files are
fixes/10136-impact/compare.2026.jsonon 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_baseis right given its input. But the 2026 composition never derivestaxable_income_determined_without_section_68, nor 199A'staxable_income_computed_without_section_199A, so two committed fixtures contradict 199A(a)(2) arithmetic. #1697 has the verbatim law, a pasteablereview_findingand companion tests from the same arithmetic as the YAML here.🤖 Generated with Claude Code