Skip to content

Keep dependents' business income off the filer's QBI deduction - #9866

Merged
MaxGhenis merged 2 commits into
mainfrom
fix-qbid-exclude-dependents
Oct 7, 2026
Merged

MaxGhenis merged 2 commits into
mainfrom
fix-qbid-exclude-dependents

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 6, 2026 •

Copy link
Copy Markdown
Contributor

The qualified business income deduction counted dependents' business income. qualified_business_income_deduction summed every member's qbid_amount. qbid_amount netted losses across every member, so a dependent's Schedule C loss cut the filer's QBI and a dependent's profit absorbed the filer's losses. From 2026, a dependent's QBI could also qualify the filer for the 199A(i) minimum. This was #9801's review finding 9, left as a pre-existing follow-up.

The law

  • The deduction is the taxpayer's. 26 USC 199A(a) allows it "in the case of a taxpayer other than a corporation" from "the combined qualified business income amount of the taxpayer". That amount covers "each qualified trade or business carried on by the taxpayer" ((b)(1)(A)).
  • Losses and the minimum. Losses net "with respect to qualified trades or businesses of the taxpayer" ((c)(2); Treas. Reg. 1.199A-1(d)(2)). The 199A(i) minimum looks at "aggregate qualified business income with respect to all active qualified trades or businesses of the taxpayer".
  • Whose return. A joint return is both spouses' (26 USC 6013(a)). A dependent with business income files their own return and takes the deduction there, as Keep dependents' above-the-line deductions off the filer's AGI #9801 established for above-the-line deductions: irs_gross_income already leaves a dependent's income off the filer's return.
  • Missouri. Mo. Rev. Stat. 143.022.2 subtracts "a percentage of such individual's business income, to the extent that such amounts are included in federal adjusted gross income".

The change

Following #9801's approach (sum over ~is_tax_unit_dependent):

  • qualified_business_income_deduction sums qbid_amount over the head and spouse. It also tests the 199A(i) minimum on their eligible QBI only.
  • qbid_amount nets losses within the head's and spouse's businesses. A dependent's businesses are netted alone, for the dependent's own return.
  • qualified_business_income_deduction_person shares the deduction between the head and spouse. A dependent's share is zero. From 2026 the 199A(i) minimum can give a deduction when every per-person amount is zero (the wage limit removed it). That deduction is now shared by the spouses' positive QBI, or given to the head, so the shares always sum to the deduction. On main it was dropped, and so was Iowa's share of it.
  • ia_qbi_deduction (Iowa) is now each spouse's qualified_business_income_deduction_person times Iowa's fraction. Before, it gave every member with a positive qbid_amount the whole tax unit's federal deduction. ia_taxable_income_joint sums members, so a dependent with business income, or two spouses with QBI, counted it twice.
  • mo_business_income_deduction counts the head's and spouse's positive QBI only.

The 199A(b)(3) threshold and phase-in still read the filer's taxable_income_less_qbid, which already excludes dependents' income. New tests cover all three bands with a dependent present.

Tests

  • qbid_dependents.yaml, 8 cases, hand-computed:
    • a dependent's Schedule C income, and a dependent's Schedule C loss;
    • below the threshold, in the phase-in range, and above it;
    • joint loss netting with a dependent;
    • the 199A(i) minimum, with and without the filer's own 1,000.
  • Iowa and Missouri. One new case each, for spouses plus a dependent, in ia_qbi_deduction.yaml and mo_business_income_deduction.yaml. The Iowa case also checks ia_taxable_income_joint: 88,000 here; on main 59,500, because the 13,500 deduction is taken three times.
  • The 199A(i) minimum alone. Two cases in qualified_business_income_deduction_person.yaml (2026): a single filer, [400], and a couple, [300, 100]. On main both give 0.
  • Property test. tests/core/test_qbid_dependents_invariants.py runs Hypothesis batches for 2026 and a seeded population of 200 tax units for 2025. Units are single, head of household, or joint with and without dependents, in Texas, Missouri and Iowa. Business income, losses, SSTB income, W-2 wages and property are large enough to reach the phase-in range.
  • Fails on main, passes here. On main (bab1a47c60), 9 of the 10 new YAML cases fail. For example, a dependent's 10,000 of Schedule C income takes the filer's deduction from 3,717.41 to 5,576.11, and a dependent's 600 of QBI lifts the filer's 2026 deduction from 100 to the 400 minimum. The case that passes on main is above the phase-in range, where a dependent without W-2 wages adds nothing. The property test fails both cases on main: in 62 of 200 seeded units the filer's deduction moves with dependents' inputs, by up to $135,844. On this branch all pass.
  • Readers' YAML. 376 cases pass. They cover the QBID folder, the QBID integration and person files, tip and overtime, itemizing, Iowa income, Missouri deductions, the Colorado add-back, Idaho, Utah, Oregon, Louisiana, the Illinois integration, and the CRFB senior-deduction reform. The suite ran under the shared heavy lock; the log is ~/reviews/pe-us-ms-hsa-qbid-2026-10-06/tests/qbid-readers.log.
  • Cost. The property test takes 29 s and 1.5 GB peak locally (macOS). It runs in the sequential rest-core Python group (make test-other-python-rest-core), with no new jobs or runners. GitHub Actions has had every recent PR-workflow run queued, so there is no fresh Linux timing or memory report for that group to compare against.

Follow-up (not in this PR): #9887. Iowa's ia_net_income (and Mississippi's ms_agi) move a dependent's net income onto the head's state return. In Iowa, a dependent's business income therefore still reaches the parent's taxable income, now without a QBI deduction. Whether those transfers are right is a state-law question for that issue.

Invariants (for every input)

  1. Dependents stay off the return. Dependents' business inputs never change the filer's deduction, its per-person shares, the head's and spouse's per-person amounts, Missouri's subtraction or Iowa's deduction.
  2. Conservation. The members' shares sum to the deduction, and a dependent's share is zero. The members' Iowa deductions sum to Iowa's fraction of the federal deduction.
  3. Differential. The deduction equals an independent numpy computation: the lesser of the head's and spouse's per-person amounts and 20% of (taxable income − net capital gain). From 2026 it is raised to the 199A(i) minimum on their eligible QBI. Missouri's equals its rate times their positive QBI.
  4. Bounds. The deduction is never negative. Before the minimum, it never exceeds the 20% cap or the previous all-member sum. For units without dependents it is unchanged.

Impact

Real microsimulations on the default dataset (populace_us_2024.h5@populace-us-2024-spm-20260909), one run per checkout and year under the shared heavy lock (lockrun.sh, run.py, compare.py in ~/reviews/pe-us-merge-backlog-2026-10-02/impact/), compared record by record; enum arrays are not compared. Outputs: ~/reviews/pe-us-ms-hsa-qbid-2026-10-06/microsim/. Base: main bab1a47c60; branch head 97041ee816.

2025 2026
QBI deduction −$693.1M (213 records, 680,932 tax units; up in 4 records, 16,404 units) −$772.6M (253 records, 762,237 units; up 16,522)
Federal taxable income +$693.1M +$744.5M
Federal income tax +$135.4M (192 records, 644,528 units; down in 16,404) +$145.7M (647,800 units)
State income tax +$0.17M (24 records) +$0.19M
ia_qbi_deduction −$941.7M (155 records) −$999.7M
mo_business_income_deduction 0 (7 records change, all with zero weight) 0
qualified_business_income_deduction_person −$693.1M −$499.3M; on main the shares summed to $273M less than the deduction in 2026, and now they match it
  • Why some deductions rise. A filer's deduction rises where a dependent's business loss had been netted against the filer's QBI.
  • Why Iowa tax doesn't move. The Iowa deduction falls by almost $1bn mostly because of the old double count: every member with a positive amount got the whole unit's deduction. But since TY2023 Iowa computes tax with ia_income_tax_consolidated, which does not read ia_qbi_deduction (married_filing_separately_on_same_return.availability is false from 2023). So Iowa tax changes only in TY2021–2022, which were not run.
  • Missouri. The Missouri change has no weighted effect in this dataset.

Axiom

axiom: TheAxiomFoundation/rulespec-us#1508 queued

us/statutes/26/199A.yaml takes the taxpayer's QBI as a tax-unit input and defers its composition (#1323). The issue asks that the composition be summed over taxpayer_or_spouse_of_tax_unit, as #1494 does for §62(a). It also covers the Missouri 143.022 subtraction, which the us-mo core defers. Signed encoder runs need Max's approval.

🤖 Generated with Claude Code

qualified_business_income_deduction summed every member's qbid_amount,
and qbid_amount netted losses and the 199A(i) minimum over every
member, so a dependent's Schedule C income raised the filer's deduction
and a dependent's loss cut it. Under 26 USC 199A(a) the deduction is the
taxpayer's, from their own (and a joint spouse's) qualified business
income; a dependent takes their own deduction on their own return.

- qualified_business_income_deduction sums qbid_amount, and the 199A(i)
  minimum's eligible QBI, over the head and spouse.
- qbid_amount nets the head's and spouse's losses together; a
  dependent's businesses are netted alone for the dependent's return.
- qualified_business_income_deduction_person shares the deduction
  between the head and spouse only.
- ia_qbi_deduction takes each spouse's share of the federal deduction;
  it gave every member with a positive qbid_amount the whole tax unit's
  deduction, a dependent included.
- mo_business_income_deduction counts the head's and spouse's business
  income only (Mo. Rev. Stat. 143.022: "such individual's business
  income").

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- qualified_business_income_deduction_person shares a deduction that
  comes only from the 199A(i) minimum (every per-person amount zero) in
  proportion to the spouses' positive QBI, or to the head, so the shares
  always sum to the deduction and Iowa no longer drops it.
- Tests assert the per-person shares rather than a dependent's
  qbid_amount, which is figured on the filer's taxable income.
- The Iowa case checks ia_taxable_income_joint (main: 59,500, taking the
  13,500 deduction three times; branch: 88,000).
- The property test drops its vacuous bound and the has_amounts carve-out,
  and says which checks recompute the aggregation.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis

Copy link
Copy Markdown
Contributor Author

Hand-off to the US + core hub. Head 97041ee816. Only CI remains; it is queued on GitHub's side.

Review (Opus 5.5, --task review --tier standard -m opus), in ~/reviews/pe-us-ms-hsa-qbid-2026-10-06/review/:

Round Head Verdict Report
r1 4823383 APPROVE, with P2/P3 notes review-qbid-r1.md
r2 (delta) 97041ee APPROVE review-qbid-r2.md
  • The r1 fixes are in 97041ee816.
  • A deduction that comes only from the 199A(i) minimum is now shared per person, so Iowa no longer drops it.
  • The tests no longer assert dependents' qbid_amount.
  • The Iowa case now checks ia_taxable_income_joint.
  • The property test's vacuous bound is gone.
  • r2's new P3 asked for a YAML case for the minimum-only fallback. It already exists: two 2026 cases in qualified_business_income_deduction_person.yaml.
  • r1/r2 P2 asked to link the Iowa follow-up. It is Iowa and Mississippi move a dependent's net income onto the head's state return #9887, linked in the body.

Passed locally.

  • The new and edited YAML files.
  • 376 reader cases under the heavy lock (tests/qbid-readers.log).
  • The property test (29 s, 1.5 GB).
  • On main, 9 of the 10 new cases fail and the property test fails both cases.

Microsim:

  • QBI deduction −$693M (TY2025) and −$773M (TY2026).
  • Federal income tax +$135M and +$146M.
  • State tax +$0.2M. Iowa's consolidated computation since 2023 does not read ia_qbi_deduction.

Axiom: TheAxiomFoundation/rulespec-us#1508, queued (pe-parity; §199A composition over taxpayer and spouse, plus Mo. 143.022).

No Max decision needed. This is a bug fix that moves aggregates.

Merge order:

Follow-ups: #9887 (Iowa/Mississippi dependent-income transfer).

@MaxGhenis
MaxGhenis merged commit e3a38da into main Oct 7, 2026
35 checks passed
@MaxGhenis

Copy link
Copy Markdown
Contributor Author

US + core hub merge audit, us#9866 at 97041ee8160fdfd712259706fa707ab29abfb422 (squash)

  • Reviews: independent Opus 5.5 (Subfleet): r1 APPROVE with P2/P3 notes at 4823383, then delta r2 APPROVE at this head. r2's P3 asked for a minimum-only YAML case; it already exists, as two 2026 cases.
  • Hand-off: from local_211e84d0. This is a bug fix that moves aggregates, so no Max decision is needed.
  • Gates checked live at merge:
    • gh pr checks exits 0 (35 pass);
    • MERGEABLE, and merges clean with current main;
    • not a draft;
    • no CHANGES_REQUESTED review;
    • head pinned.
  • Impact: a real microsim on the default dataset, now that dependents' business income stays off the filer's QBI deduction:
    • QBI deduction −$693M (TY2025) and −$773M (TY2026);
    • federal income tax +$135M and +$146M;
    • state tax +$0.2M.
  • Merge order: Subtract section 199A net capital gain, not adjusted net capital gain, in the QBI income limit #9886 is stacked on this PR. The hub retargets it to main next, and its CI starts then.
  • --admin: used only because a required approving review is the sole block.

@MaxGhenis
MaxGhenis deleted the fix-qbid-exclude-dependents branch October 7, 2026 13:10
MaxGhenis added a commit that referenced this pull request Oct 7, 2026
…, in the QBI income limit (#9886)

* Keep dependents' business income off the filer's QBI deduction

qualified_business_income_deduction summed every member's qbid_amount,
and qbid_amount netted losses and the 199A(i) minimum over every
member, so a dependent's Schedule C income raised the filer's deduction
and a dependent's loss cut it. Under 26 USC 199A(a) the deduction is the
taxpayer's, from their own (and a joint spouse's) qualified business
income; a dependent takes their own deduction on their own return.

- qualified_business_income_deduction sums qbid_amount, and the 199A(i)
  minimum's eligible QBI, over the head and spouse.
- qbid_amount nets the head's and spouse's losses together; a
  dependent's businesses are netted alone for the dependent's return.
- qualified_business_income_deduction_person shares the deduction
  between the head and spouse only.
- ia_qbi_deduction takes each spouse's share of the federal deduction;
  it gave every member with a positive qbid_amount the whole tax unit's
  deduction, a dependent included.
- mo_business_income_deduction counts the head's and spouse's business
  income only (Mo. Rev. Stat. 143.022: "such individual's business
  income").

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Address review r1 on the QBID dependents fix

- qualified_business_income_deduction_person shares a deduction that
  comes only from the 199A(i) minimum (every per-person amount zero) in
  proportion to the spouses' positive QBI, or to the head, so the shares
  always sum to the deduction and Iowa no longer drops it.
- Tests assert the per-person shares rather than a dependent's
  qbid_amount, which is figured on the filer's taxable income.
- The Iowa case checks ia_taxable_income_joint (main: 59,500, taking the
  13,500 deduction three times; branch: 88,000).
- The property test drops its vacuous bound and the has_amounts carve-out,
  and says which checks recompute the aggregation.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Subtract section 199A net capital gain in the QBI income limit

26 USC 199A(a)(2)(B) limits the deduction to 20% of taxable income over
net capital gain, which Treas. Reg. 1.199A-1(b)(3) defines as section
1222(11) net capital gain plus qualified dividends (Form 8995 line 12,
Form 8995-A line 34). The model subtracted adjusted_net_capital_gain,
which drops unrecaptured section 1250 gain and 28-percent rate gain, so
the limit was too high whenever a filer had either.

section_199a_net_capital_gain (new) is the smaller of Schedule D lines
15 and 16 (floored at zero) plus nonnegative qualified dividends, over
the head and spouse only, and is not reduced by a Form 4952 election
(unlike net_capital_gain, #9781). Replays the hub's stalled draft
(wip/hub-backup/qbid-net-capital-gain, 739df63) on top of #9866 and
masks dependents before netting, per the hub spec D1.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Pin negative qualified dividend handling in the 199A gain

Review r1 (P3): a negative dividend input adds nothing, and spouses'
dividends are summed before the zero floor.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

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.

1 participant