Surfaced while reviewing #1051 (which fixes QBID routing for pass-through inputs but explicitly defers the passive/active question to a tax-expert review). This tracks the remaining S-corp divergence.
NIIT
The taxsimtest binary treats scorp as passive net investment income and applies the 3.8% NIIT:
scorp = $300,000, single, TY2025 → binary niit = 3,800.00 (3.8% × ($300k − $200k)).
PolicyEngine treats S-corp income as active (material participation) — net_investment_income = 0, so NIIT = $0 — for both s_corp_income and partnership_s_corp_income. (Note: #1051's description of partnership_s_corp_income as "NIIT-eligible" does not match PE's actual behavior — it applies no NIIT.)
Passive-loss limitation (§469)
Related: PE allows a $100k S-corp loss to fully offset other income (no §469 limitation); if scorp is passive, TAXSIM may limit it. Tracked alongside #1003.
Prevalence
15.6% of all eCPS records have |scorp| > $200,000 (66.5% of scorp records), so the NIIT divergence is material, not an edge case — though the exact per-record impact interacts with the §199A wage limit / --assume-w2-wages handling at high income.
The question (needs the tax-expert read @feenberg flagged)
Should the emulator treat TAXSIM scorp as passive (→ NIIT + §469 passive-loss limitation) or active? This depends on what taxsimtest assumes about material participation for S-corp income. Once decided, the fix is to set the appropriate passive/material-participation characteristic on the mapped PE variable.
Related: #384 (FICA/QBI umbrella), #1003 (pass-through losses), #1018 (scorp characteristics), #1051 (QBID routing, merged).
Surfaced while reviewing #1051 (which fixes QBID routing for pass-through inputs but explicitly defers the passive/active question to a tax-expert review). This tracks the remaining S-corp divergence.
NIIT
The
taxsimtestbinary treatsscorpas passive net investment income and applies the 3.8% NIIT:scorp = $300,000, single, TY2025 → binaryniit = 3,800.00(3.8% × ($300k − $200k)).PolicyEngine treats S-corp income as active (material participation) —
net_investment_income = 0, so NIIT = $0 — for boths_corp_incomeandpartnership_s_corp_income. (Note: #1051's description ofpartnership_s_corp_incomeas "NIIT-eligible" does not match PE's actual behavior — it applies no NIIT.)Passive-loss limitation (§469)
Related: PE allows a $100k S-corp loss to fully offset other income (no §469 limitation); if
scorpis passive, TAXSIM may limit it. Tracked alongside #1003.Prevalence
15.6% of all eCPS records have
|scorp| > $200,000(66.5% of scorp records), so the NIIT divergence is material, not an edge case — though the exact per-record impact interacts with the §199A wage limit /--assume-w2-wageshandling at high income.The question (needs the tax-expert read @feenberg flagged)
Should the emulator treat TAXSIM
scorpas passive (→ NIIT + §469 passive-loss limitation) or active? This depends on whattaxsimtestassumes about material participation for S-corp income. Once decided, the fix is to set the appropriate passive/material-participation characteristic on the mapped PE variable.Related: #384 (FICA/QBI umbrella), #1003 (pass-through losses), #1018 (scorp characteristics), #1051 (QBID routing, merged).