PolicyEngine / PolicyEngine/microcosm
QBI base −31%/−40% vs targets and JCT; add per-component repeal-revenue benchmarks (amount residuals can't see yield gaps)
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 0
- Forks
- 4
- Avg merge
- 1d 3h
- Merged PRs (30d)
- 94
Description
Summary
Two related findings from validating deduction/credit repeal scoring on the dense release populace-us-2024-f0af251-703bd81a565c-20260620 (bundle 4.18.7), against external scorekeeper estimates:
-
The QBI base runs well below external benchmarks. The release's own diagnostics show the QBI-linked target residual at −31% (relative_error on the JCT
qualified_business_income_deductionrevenue-loss target), and repealing §199A in isolation yields $45.9B (TY2026) vs JCT's $76.4B FY2026 individuals line (JCX-45-25) — a −40% gap, the largest among the deduction toggles after tips/overtime (which have no input base at all). -
On-surface amount residuals cannot see repeal-revenue gaps — propose adding per-component repeal-revenue benchmarks to the validation surface. The itemized-deduction amount calibrates to +1.8% on this release, yet repealing each Schedule A line in isolation scores far below its own JCT line:
| Component repealed alone | PE TY2026 ($B) | JCX-45-25 FY2026 ($B) | Diff |
|---|---|---|---|
| SALT (cap → $0) | 23.9 | 59.5 | −60% |
| Mortgage interest | 23.0 | 53.0 | −57% |
| Charitable | 60.1 | 81.5 | −26% |
| Medical | 9.1 | 13.8 | −34% |
| Casualty/theft | 0.0 | 0.2 | no base in data |
The claimed bases are plausible in level (SALT $288.5B under the $40k cap; mortgage $215.7B among 17.7M itemizers), so the shortfall is yield per dollar of base — the marginal-rate composition of who holds the deductions, plus the un-aged TY2022/23 target vintage (aging tracked in PolicyEngine/ledger#71). A benchmark family of "repeal component X → revenue vs the JCT line" (computed per release, like the reform-validation checks in calibration-diagnostics) would catch this class directly, where amount residuals structurally cannot.
Suggested actions
- Investigate the −31% QBI target residual on the dense build (it was −81% on June builds — improved but far from closed).
- Add per-component repeal-revenue benchmarks (SALT / mortgage / charitable / medical / QBI vs their JCX-45-25 lines; full-itemized vs TPC's interaction-adjusted estimate, since JCT lines are non-additive) to the release validation surface.
- Casualty-loss inputs are absent entirely (immaterial at ~$0.2B/yr, but a completeness note alongside #278's input-coverage findings).
Related: #278 (sparse-release input coverage), #257 (degenerate-input gates), #272 (validation-config input checks).
Repro: policyengine[us]==4.18.7, managed_microsimulation, zero each component's cap/ceiling (or medical.floor→1.0, casualty.active→false) for 2026+, sum the income_tax delta.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the managed_microsimulation reproduction using policyengine[us]==4.18.7, zeroing each listed component for 2026+ and measuring the income_tax delta. Read the calibration-diagnostics reform-validation checks and related issues #278, #257, and #272; done means explaining or addressing the QBI residual and adding per-component repeal-revenue benchmarks to the release validation surface.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- data, testing-qa
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100