Tax-input coverage gaps surfaced by the reform-validation registry on us-6.2.1 (tracker)
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 35/100
- Issue type
- Bug
- Clarity
- Mostly clear
- Activity status
- Active
- Tech stack
- python
- Domain
- data-engineering
Research direction
Start with the referenced diagnosis memos and the listed entry points: us_runtime/sipp_tips.py, us_runtime/scf_auto_loans.py, us/spec/sources.yaml, us_runtime/puf_aggregate_records.py, and us_runtime/validation_input_coverage.py; related issues include #505, #586, #252, #579, #253, and #958. Compare the identified inputs and registry results with the cited external benchmarks before choosing a gap to investigate. Done means the selected coverage discrepancy is addressed or tracked against its existing issue and validated against the relevant benchmark.
Written by the indexing model from the issue text.
Description
Found by the policyengine-scorecard reform-validation diagnosis (batch 2), PolicyEngine/policyengine-scorecard#146. Memos: diagnosis/batch2/A.md (A2-A4) and diagnosis/batch2/B.md (B1, B2, B5, B6).
This tracker collects input-coverage gaps that the reform-validation registry shows on the certified bundle us-6.2.1 (policyengine-us 2.2.1 + populace-us-2024-spm-20260915). In every case the engine models the provision; the release's inputs cannot reach the benchmark. Each section links the existing issue where one exists and records only what is new. microcosm paths are relative to packages/microcosm-build/src/microcosm/build/ @ 581b569.
Benchmarks used below (extracted)
JCX-35-25 (July 1, 2025), PDF p. 2, Chapter 2, $ millions, FY2025-2034:
"1. No tax on tips (sunset 12/31/28) [5] ... tyba 12/31/24 --- -10,121 -7,664 -8,078 -5,262 -90 -98 -107 -117 -127 -31,664"
"3. No tax on car loan interest ... iia 12/31/24 -1,932 -5,400 -8,070 -9,916 -5,313 --- --- --- --- --- -30,631"
JCX-35-25, PDF p. 4, Chapter 4, Subchapter C:
"4. Permanent and expanded reinstatement of partial deduction for charitable contributions of individuals who do not elect to itemize ... tyba 12/31/25 --- -1,543 -7,791 -8,149 ..."
JCX-48-24, Table 1 "Tax Expenditure Estimates By Budget Function, Fiscal Years 2024 - 2028", Individuals, $ billions, 2024-2028:
(PDF p. 33, Income Security) "Net exclusion of pension contributions and earnings: Plans covering partners and sole proprietors (sometimes referred to as "Keogh plans") ... 16.6 17.1 17.7 20.4 22.5"
(PDF p. 32, Health) "Deduction for health insurance premiums and long-term care insurance premiums by the self-employed ... 8.4 9.3 11.9 13.4 14.0"
IRS SOI Publication 1304, Table 1.4 "All Returns: Sources of Income, Adjustments, and Tax Items, by Size of Adjusted Gross Income, Tax Year 2023 (Filing Year 2024)" (
23in14ar.xls), money in thousands of dollars, row "All returns, total":
"Payments to a Keogh plan" (cols 115-116): 946,019 returns; 30,130,848
"Self-employed health insurance deduction" (cols 117-118): 3,595,764 returns; 31,232,604
"Alternative minimum tax" (cols 143-144): 150,167 returns; 2,752,164
IRS SOI Publication 1304, Table 3.3 "All Returns: Tax Liability, Tax Credits, and Tax Payments, by Size of Adjusted Gross Income, Tax Year 2023 (Filing Year 2024)" (
23in33ar.xls), row "All returns, total":
"Tax credits > Nonrefundable credits > Nonrefundable education credit" (cols 8-9): 7,211,349 returns; 7,554,668
"Tax credits > Total refundable credits > American opportunity credit" (cols 40-41): 5,821,688 returns; 5,090,364
PE values are calendar-2026 liability changes for OBBBA rows. The FY2027 JCT column is the like-for-like comparator for these provisions (FY2026 is a partial first year; A.md item A1).
- [ ] A2. Tip income: incidence inside tipped occupations is too low (see #505, #586)
- Registry: PE -$1.93B vs JCT -$7.66B FY2027 (0.25) and -$10.12B FY2026 (0.19).
- H5 (2024, weighted):
tip_income$34.3B on 2.97M recipients. Of 22.97M wage earners with a Treasury-listed occupation code, 1.72M (7.5%) have tips > 0. Waitstaff (Census 2018 occupation 4110, mapped to TTOC 102 inus_runtime/sipp_tips.py:133-184): 1.68M wage earners, 0.124M (7.4%) with tips. Bartenders: 18%. - 2026 simulation:
tip_income_deduction$16.9B on 1.54M tax units. At PE's revenue per deducted dollar (about 11.4%), JCT's FY2027 value needs about $67B of deductions, about 4x PE's. - Mechanism (
us_runtime/sipp_tips.py): annual tips are the December monthly SIPP amount x 12 (:3-7,:334); training is capped at 10,000 rows (:114,:419-423), and the code notes that "seed 0 materially under-samples positive tip rows in the 10,000-row cap" (:117-119). The occupation code "is a predictor, not a domain mask" (:25). The plausibility band checks only the all-person share with tips (:127), not incidence inside listed occupations. - New relative to #505: #505 attributes the carrier deficit to the December-reference participation concept; the within-occupation incidence above is consistent with that explanation.
- Proposed: two-stage incidence/amount model conditional on a listed occupation; stratified donor sampling of positives; a gate on within-occupation incidence; the JCX-45-25 deduction line from #586 as a target.
- [ ] A3. Qualified car-loan interest: the proxy uses one year of loan issuance as the stock (see #252, #586, #981)
- Registry: PE -$1.08B vs JCT -$8.07B FY2027 (0.13) and -$5.40B FY2026 (0.20).
- #252 says the input "is never imputed". That is stale:
us_runtime/scf_auto_loans.py:454-472now sets qualifying interest =auto_loan_interestx min(1, 6,000,000 / weighted households with positive interest). The docstring (:15-24) calls 6M the number of qualifying loans "issued annually". - The statute covers all post-2024 indebtedness, so the eligible stock grows each year:
26 U.S.C. 163(h)(4)(A) and (B)(i) (Cornell LII, current text): "In the case of taxable years beginning after December 31, 2024, and before January 1, 2029, for purposes of this subsection the term “personal interest” shall not include qualified passenger vehicle loan interest." ... "the term “qualified passenger vehicle loan interest” means any interest which is paid or accrued during the taxable year on indebtedness incurred by the taxpayer after December 31, 2024, for the purchase of, and that is secured by a first lien on, an applicable passenger vehicle for personal use."
- By TY2026 the stock holds about two annual vintages (less payoffs); the proxy holds one, and the engine uprates the input by CPI-U only (
policyengine_us/variables/.../qualified_passenger_vehicle_loan_interest.py:20). First-order: a vintage-corrected input moves PE to about -$2.2B (0.27x FY2027). Most of the gap stays open: at PE's revenue per deducted dollar (about 10%), JCT's FY2027 value needs about $80B of deductions, more than all H5 auto-loan interest ($75.6B in 2026). - Proposed: a vintage-stock share for the dataset's target year (sum over 2025+ vintages of 6M x survival), and an external household auto-debt benchmark for total
auto_loan_interest. Update or close #252.
- [ ] A4. Non-itemizer cash giving: donor incidence is about half of an external benchmark (new)
- Registry: PE -$3.52B vs JCT -$7.79B FY2027 (0.45).
charitable_cash_donationscomes from thepuf_tax_detailstage, "IRS PUF 2015 (uprated)" (us/spec/sources.yaml:110-111, output list:283); the PUF field mapped to cash contributions is E19800 (us_runtime/puf_aggregate_records.py:115). Hypothesis, not verified against the PUF codebook: the field is observed only for itemizers, which would under-represent non-itemizer donors.- H5: 23.9% of households and 19.1% of tax units have cash donations > 0 (25.5% of households give in any form); 4.8% at AGI $0-25K, 7.2% at AGI $25-50K.
- External benchmark:
Lilly Family School of Philanthropy, news release (October 24, 2024), on its Philanthropy Panel Study (part of the PSID): "The share of Americans who give to charity declined from 50.9% in 2018 to 46.9% in 2020, following the onset of the pandemic."
- 2026 simulation: 18.3M of 147.5M non-itemizing tax units claim the deduction ($21.6B). At PE's revenue per deducted dollar (about 16%), JCT's FY2027 value needs about 40M claimants at PE's average amount, about 2.2x PE. A capped $1,000/$2,000 deduction scales mainly with donor count.
- Proposed: impute giving incidence and amount for all households from a source that observes non-itemizers (PSID PPS or CE cash contributions), or add a non-itemizer deduction target once an SOI series is sourced.
- [ ] B1. Self-employed (Keogh/SEP/SIMPLE) pension contributions at about 3% of SOI (see #579)
- Registry: PE $0.21B vs JCT $16.6B (0.01). Note: JCT's line is a net exclusion of contributions and earnings, so a contribution-only repeal cannot reach it; the data gap is still the main factor.
- H5:
self_employed_pension_contributions_desired$1.373B on 5.38M persons (1,654 records); among holders p50 $276, p99 $1,380, max $1,771. Engine ALD: $1.013B on 5.33M tax units. SOI: $30.13B on 946,019 returns (above), so PE dollars are 3.4% of SOI on 5.6x the claimants. At AGI $200K+, PE $0.23B vs SOI $24.3B. - Mechanism (
us/spec/sources.yaml:524-530, stageretirement_contributions): "Measured ASEC RETCB_VAL is allocated across self-employed pension, defined-contribution, and IRA pools ... QRF-imputes all five leaves onto the PUF half from the ASEC rows and PUF-imputed income." The PUF half does not carry tax-form Keogh amounts. - Proposed: source the PUF half from the PUF Keogh-deduction field (verify the field ID in the codebook), or add SOI Table 1.4 "Payments to a Keogh plan" returns and amount as targets.
- [ ] B2. Self-employed health insurance: right claimant count, half the amount (see #579)
- Registry: PE $2.38B vs JCT $8.4B (0.28).
- Engine ALD: $14.84B on 3.688M tax units (mean $4,024). SOI: $31.23B on 3,595,764 returns (mean $8,686). Count ratio 1.03, amount ratio 0.475.
- By AGI (SOI Table 1.4 col 118): below $200K, PE $12.59B vs SOI $14.51B (0.87); at $200K and above, PE $2.25B vs SOI $16.73B (0.13).
- Source (
us/spec/sources.yaml:2847-2927,attribute_self_employed_health_premiums): the ASEC reported premium is copied onto Schedule-C persons outside ESI and outside a Medicare proxy. - Proposed: test the CPS premium under-report, the Medicare-proxy exclusion and tax-unit premium assignment (not verified); add SOI Table 1.4 SEHI returns and amount by AGI as targets.
- [ ] B5. Education credits at 10% of SOI: LLC structurally zero (see #253)
- Registry: PE $0.78B vs SOI $7.55B nonrefundable education credit (0.10).
- LLC:
is_eligible_for_lifetime_learning_credit.py:29-47requiresattends_eligible_educational_institution_for_lifetime_learning_creditandhas_lifetime_learning_credit_1098_t_or_exception(bool inputs, so False when absent). Neither is in the H5, solifetime_learning_credit= 0. - AOTC:
qualified_tuition_expenses$4.40B on 1.18M persons (426 records). Nonrefundable AOTC is at most 0.6 x $4.40B = $2.64B even without a liability limit. PE claimant units are about 11% of SOI's 7.2M nonrefundable-credit returns. - The coverage gate registers only
qualified_tuition_expensesfor this row (us_runtime/validation_input_coverage.py:122-126), so the LLC zero passes the gate. - Proposed: LLC factual inputs for a non-AOTC student population (graduate, part-time, non-degree); widen tuition to SOI scale; register both LLC flags in
US_VALIDATION_PROVISION_INPUT_LEAVES(:106); add SOI Table 3.3 education-credit targets. #253's numbers are from f0af251; update it.
- [ ] B6. AMT from 70 records: top-tail compression (see #958; #254 is stale)
- Registry: PE $4.39B vs SOI $2.75B (1.60). PE's AMT comes from 70 records; the top 10 hold 87% of AMT dollars.
- By AGI (PE 2024 filers vs SOI TY2023 Table 1.4 col 1 and cols 143-144): $1M-1.5M PE 94.1K payers / $1.30B vs SOI 16,889 / $0.26B; $1.5M-2M PE 75.0K / $1.35B vs SOI 18,284 / $0.32B; $5M-10M and $10M+ PE 0 vs SOI 6,264 / $0.18B and 4,164 / $0.26B.
- This is the same tail compression as #958 (too many returns at $1-2M, almost none above $5M), seen through AMT. #254 says AMT is 59% under; on us-6.2.1 it is 1.6x over, and the history moved $1.13B -> $4.39B across releases at a fixed engine for part of the path.
- Proposed: track under #958; comment on #254 that its sign changed.
- Dominant language
- Python
- Stars
- 0
- Forks
- 5
- Avg merge
- 1d 18h
- Merged PRs (30d)
- 114
Getting set up
- No Dockerfile or Docker Compose file
- No pull request template
- Read the contributing 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.
More from PolicyEngine/microcosm
-
Update two stale comments about the export-mass reviewed-exclusion registerPossibly taken A pull request linked to this issue is open or already merged. Open
Difficulty 1/5 Under an hour Newbie friendliness 88/100
PolicyEngine/microcosm#1108 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 85/100
PolicyEngine/microcosm#475 ·
Maintainers usually reply within 1 day
-
Difficulty 5/5 Over a week Newbie friendliness 35/100
PolicyEngine/microcosm#1135 ·
Maintainers usually reply within 1 day
-
Difficulty 4/5 3-5 days Newbie friendliness 48/100
PolicyEngine/microcosm#1133 ·
Maintainers usually reply within 1 day
-
Difficulty 4/5 3-5 days Newbie friendliness 57/100
PolicyEngine/microcosm#1132 ·
Maintainers usually reply within 1 day
All issues in PolicyEngine/microcosm
Similar issues
-
Maven path-index: "Ambiguous or noncanonical artifact path" error does not report the offending pathOpen
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
pulp/pulp_maven#524 ·
Maintainers usually reply within 1 day
-
Difficulty 1/5 1-3 hours Newbie friendliness 82/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
Maintainers usually reply within 3 days
-
Difficulty 1/5 1-3 hours Newbie friendliness 88/100
infinispan/langchain-infinispan#34 ·
Maintainers usually reply within 1 day
-
Difficulty 1/5 Under an hour Newbie friendliness 85/100
521xueweihan/HelloGitHub#3891 ·