Skip to content

S-corp income: emulator treats scorp as active (no NIIT, no passive-loss limit); TAXSIM treats it as passive (3.8% NIIT) #1053

Description

@PavelMakarchuk

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).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions