Skip to content

Bump policyengine-us to >=1.711.0; pin otherprop→NIIT behavior#962

Merged
PavelMakarchuk merged 1 commit into
mainfrom
bump-pe-us-and-niit-test
Jun 4, 2026
Merged

Bump policyengine-us to >=1.711.0; pin otherprop→NIIT behavior#962
PavelMakarchuk merged 1 commit into
mainfrom
bump-pe-us-and-niit-test

Conversation

@PavelMakarchuk

Copy link
Copy Markdown
Collaborator

Summary

Why the bump

PE-US 1.710.6 (our current pin) carried a stale gov.states.ut.tax.income.credits.refundable parameter that listed ut_homeowner_renter_relief. That program is administered on Form TC-90CB (Renter) / Form TC-90H (Homeowner) — separate refund applications under Utah Code §§ 59-2A-205 and 59-2A-305 — not on the TC-40 income-tax return. The Utah Tax Commission's 2025 TC-40 instructions confirm: no reference to TC-90CB/TC-90H anywhere in the income-tax flow.

This caused a $1,412 phantom refundable credit for low-income UT seniors in the eCPS comparison (surfaced while investigating PR #961's regressions). The fix landed in PE-US main on June 2, 2026 as PR #8564. The credit continues to flow correctly via the household-level state_property_tax_credits aggregate, so TAXSIM sptcr (v40) is unaffected.

Why the new test

PR #961 routed TAXSIM otherprop to PE-US rental_income so passive rents/royalties enter the NIIT base, and disabled the auto-QBID gate. The behavior is anchored to:

  • IRC § 1411(c)(1)(A)(i): NII includes "gross income from interest, dividends, annuities, royalties, and rents".
  • Form 8960 Line 4a: "Income From Trades/Businesses/Farming, Rental Real Estate, Royalties, Partnerships, S Corporations, and Trusts".
  • IRC § 199A(d)(1): QBID requires a "qualified trade or business". Passive individual rentals typically do not meet the § 162 trade-or-business standard absent the § 1.199A-1(b)(14) safe harbor that TAXSIM input cannot signal.
  • TAXSIM-35 binary smoke test (single, age 45, otherprop=$1M, 2024): fiitax=\$353,188, niit=\$30,400 (= 3.8% × ($1M − $200K)).

Three pinning tests:

  1. test_otherprop_drives_niit_at_3_8_percent — asserts NIIT = $30,400 ±$10. If the YAML mapping ever drops otherprop from rental_income, this fails.
  2. test_otherprop_does_not_trigger_qbid — asserts fiitax ≈ $353,188 ±$50. If the QBID gate override regresses, PE applies ~$170K of QBID and the fiitax drops well outside tolerance.
  3. test_no_otherprop_no_niit_on_wages — control: wages-only filer must owe no NIIT.

Verification

Test plan

  • Three new tests pass
  • Full suite passes
  • UT regression closes on the specific records that surfaced it

policyengine-us 1.711.0 includes PR #8564 which unwires the Utah
Homeowner/Renter Relief credit from TC-40 refundable credits. Utah
Code § 59-2A-205 (homeowner) and § 59-2A-305 (renter) administer the
Circuit-Breaker credit on TC-90H and TC-90CB respectively — separate
refund applications — and the TC-40 income-tax instructions for tax
year 2025 carry no reference to either form. The fix removes a
phantom $1,412 refundable credit that PE-US 1.710.6 was applying to
qualifying UT seniors and pulls the credit back through the existing
state_property_tax_credits aggregate (sptcr / v40).

Also add a small regression test pinning the TAXSIM `otherprop` →
PE-US `rental_income` routing introduced in PR #961:
  • IRC § 1411(c)(1)(A)(i) rents/royalties in NIIT base
  • Form 8960 Line 4a
  • TAXSIM-35 binary smoke test ($1M otherprop single → fiitax
    $353,188, NIIT $30,400)
The QBID gate override in policyengine_runner.py is asserted by the
fiitax target — auto-QBID on rental_income would knock the fiitax by
roughly $170K, well outside the $50 tolerance.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@vercel

vercel Bot commented Jun 4, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
policyengine-taxsim Ready Ready Preview, Comment Jun 4, 2026 6:59pm

Request Review

@PavelMakarchuk PavelMakarchuk merged commit 16f26d4 into main Jun 4, 2026
12 checks passed
@PavelMakarchuk PavelMakarchuk deleted the bump-pe-us-and-niit-test branch June 4, 2026 19:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant