PolicyEngine / PolicyEngine/policyengine-us

2026 QBID applies the §199A(i) $400 minimum to all QBI, not active-business QBI

Open
#9,150 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Python
Stars
162
Forks
212
Avg merge
3d 3h
Merged PRs (30d)
97

Description

## Summary

For 2026, `qualified_business_income_deduction` applies the new §199A(i) $400 minimum deduction (OBBBA, Pub. L. 119-21) whenever **total** QBI ≥ $1,000. The statute conditions the minimum on the taxpayer's aggregate qualified business income from **active qualified trades or businesses**. Because the model exposes no separate active-business QBI aggregate, a taxpayer whose ordinary §199A(a) deduction is $0 (e.g., above the phase-in band with zero W-2 wages and zero UBIA, no active business) still receives $400.

## Reproduction (policyengine-us 1.767.3, policyengine-core 3.30.3)

```python
from policyengine_us import Simulation

YEAR = 2026
sim = Simulation(situation={
"people": {"head": {
"age": {YEAR: 45},
"qualified_business_income": {YEAR: 300_000},
"w2_wages_from_qualified_business": {YEAR: 0},
"unadjusted_basis_qualified_property": {YEAR: 0},
}},
"tax_units": {"tax_unit": {
"members": ["head"],
"taxable_income_less_qbid": {YEAR: 300_000},
"filing_status": {YEAR: "SINGLE"},
}},
"families": {"family": {"members": ["head"]}},
"spm_units": {"spm_unit": {"members": ["head"]}},
"households": {"household": {"members": ["head"], "state_name": {YEAR: "TX"}}},
})
print(sim.calculate("qualified_business_income_deduction", YEAR))
```

Output: `[400.]`

Expected: `[0.]` — single filer, taxable income $300,000 is above the 2026 phase-in band top ($201,750 + $75,000), so the §199A(b)(2)(B) wage/UBIA limit is $0, and with no active qualified business the §199A(i) minimum does not apply.

## Where

`variables/gov/irs/income/taxable_income/deductions/qualified_business_income_deduction/qualified_business_income_deduction.py` (lines 20–34 at 49d19b2): the floor test reads `qualified_business_income + sstb_qualified_business_income` rather than an active-business aggregate.

## Suggested fix

Either add a distinct input/derived aggregate for active-qualified-business QBI and key the §199A(i) floor to it, or document the approximation in the variable's metadata. Found via cross-validation against an independent RuleSpec encoding of §199A as amended.

Contributor guide

Open the contributing guide

Research direction

Start with variables/gov/irs/income/taxable_income/deductions/qualified_business_income_deduction/qualified_business_income_deduction.py, especially lines 20–34 at commit 49d19b2, and run the supplied 2026 Simulation reproduction. Trace how the floor test aggregates QBI and how the model represents active businesses. Done means the reproduction returns $0 for the stated case, with coverage for the §199A(i) minimum behavior.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
backend
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
56/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.