-
Notifications
You must be signed in to change notification settings - Fork 30
Open
Description
Summary
The k1bx14p/k1bx14s derivation in finalprep.py uses E30400/E30500 directly:
secatip = np.minimum(mte, data["e30400"])
nonbox14 = data["e00900p"] + data["e02100p"]
box14 = np.where(
np.logical_and(nonbox14 <= 0, secatip <= 0), 0.0, secatip - nonbox14
)
data["k1bx14p"] = box14.round(2)However, E30400/E30500 in the IRS PUF are taxable SE income (post-0.9235 deduction factor), while E00900/E02100 are gross amounts. This mixes post-deduction and pre-deduction values in the subtraction.
Yale Budget Lab's approach
Yale's Tax-Data grosses up E30400/E30500 before the subtraction:
# process_puf.R
part_se = if_else(E25940 + E25980 - E25920 - E25960 != 0,
(E30400 + E30500) / 0.9235 - E00900 - E02100,
0)Question
Does Tax-Calculator expect k1bx14p/k1bx14s to be:
- Gross partnership SE income (pre-deduction) - would need the 0.9235 gross-up
- Taxable partnership SE income (post-deduction) - current approach is correct
This affects downstream users who need to compute SE tax correctly.
Impact
Without the gross-up, k1bx14 values are ~8% lower than they should be if gross amounts are expected.
| Approach | Formula | Weighted Sum |
|---|---|---|
| Current taxdata | (E30400 + E30500) - E00900 - E02100 |
$12.7B |
| Yale (with gross-up) | (E30400 + E30500) / 0.9235 - E00900 - E02100 |
$55.7B |
The difference arises because without grossing up, you're subtracting gross Sch C/F amounts from already-reduced taxable SE amounts, which understates the partnership SE residual.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels