Skip to content

Add Indiana supplemental homestead credit (SEA 1, 2025)#8997

Merged
DTrim99 merged 3 commits into
PolicyEngine:mainfrom
DTrim99:in-supplemental-homestead-credit
Jul 15, 2026
Merged

Add Indiana supplemental homestead credit (SEA 1, 2025)#8997
DTrim99 merged 3 commits into
PolicyEngine:mainfrom
DTrim99:in-supplemental-homestead-credit

Conversation

@DTrim99

@DTrim99 DTrim99 commented Jul 10, 2026

Copy link
Copy Markdown
Collaborator

Summary

Adds Indiana's Supplemental Homestead Credit, created by Senate Enrolled Act 1 (2025) (P.L.68-2025), SEC. 74, adding IC 6-1.1-20.6-7.7.

The credit is the lesser of 10% of the homestead property tax liability or $300, for property taxes first due and payable in 2026 and after. There is no age or income limit; it applies to owner-occupied homesteads. It is modeled as min(0.10 × real_estate_taxes, $300), so renters (with no real estate taxes) receive $0.

Changes

  • New variable in_supplemental_homestead_credit (TaxUnit, defined_for = StateCode.IN) = min(rate × real_estate_taxes, cap).
  • New parameters under gov.states.in.tax.property.supplemental_homestead_credit: rate (10%) and cap ($300), both from 2026.
  • Wired into the 2026 block of state_property_tax_credits.yaml, alongside the existing in_over_65_property_tax_credit.

Scope

SEA 1 created several property-tax credits. This PR adds the flagship supplemental homestead credit (universal to homesteaders, no income test). For context on the others:

  • The Over-65 $150 credit (IC 6-1.1-51.3-1) is already implemented as in_over_65_property_tax_credit (Add Indiana over-65 property tax credit #8308).
  • The Blind/Disabled $125 credit (IC 6-1.1-51.3-2) is a possible follow-up.
  • The SEA 1 veteran credits were repealed by HEA 1427-2025 (veterans keep their pre-existing deductions), so they are intentionally not modeled.

Tests

in_supplemental_homestead_credit.yaml covers: below-cap ($2,000 → $200), the $3,000 liability boundary (→ $300 cap), above-cap ($5,000 → $300), renter with no property tax (→ $0), and non-IN resident (→ $0).

References

🤖 Generated with Claude Code

@codecov

codecov Bot commented Jul 10, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (3802d8e) to head (1bff82e).
⚠️ Report is 21 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff            @@
##              main     #8997   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files            2         1    -1     
  Lines           26        13   -13     
=========================================
- Hits            26        13   -13     
Flag Coverage Δ
unittests 100.00% <100.00%> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@DTrim99

DTrim99 commented Jul 13, 2026

Copy link
Copy Markdown
Collaborator Author

Independent review + fixes applied

Independent review confirmed the credit is regulatorily correct (IC 6-1.1-20.6-7.7 = lesser of 10% of homestead liability or $300, 2026+, no age/income test, no phase-in). No critical issues. Applied the findings:

🟢 Suggestions — applied

  • Added a formula NOTE that real_estate_taxes is a proxy for the homestead-only liability (PE has no homestead-specific real-estate-tax variable; the effect is bounded by the $300 cap).
  • Trimmed the rate.yaml description ("up to a cap") and the reference-title glosses down to the section citation.
  • Adopted Case N test naming with absolute_error_margin.

⚠️ Scope note (confirmed)

state_property_tax_credits feeds only taxsim_state_property_tax_credit (TAXSIM parity) — it does not currently flow into household_net_income. So this credit, like the sibling in_over_65_property_tax_credit, is modeled for TAXSIM parity and does not change modeled net income. Pre-existing/systemic, not a defect in this PR; flagging for visibility.

@PavelMakarchuk PavelMakarchuk left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review (multi-validator: regulatory accuracy, references, code patterns, test coverage)

Verdict: Approve — core formula, rate, cap, and start year all verified against the statute; no blocking issues.

Verified against IC 6-1.1-20.6-7.7 (via the DLGF memo, pp. 9–10)

  • Formula correct: credit = lesser of 10% of homestead property tax liability or $300 — min_(rate × property_tax, cap) matches subsection (c) exactly.
  • No phase-in on this credit: SEA 1's phase-in schedules apply to the deductions (homestead standard deduction phasing down, supplemental deduction phasing in), not to this credit — flat 0.1 / $300 from 2026 is correct.
  • Start year correct: "first due and payable in calendar years beginning after December 31, 2025" → 2026 block wiring, alphabetical placement, no other list entries dropped.
  • Scope decisions correct: veteran credits rightly omitted (eliminated by HEA 1427-2025, which reinstated the deductions); no age/income limit matches the statute; stacking with in_over_65_property_tax_credit is correct (separate provisions).
  • Since real_estate_taxes represents tax actually paid (net of deductions/circuit breaker), applying 10% to it aligns with "property tax liability first due and payable."

🟡 Non-blocking items worth addressing

  1. Wrong page anchor: the DLGF memo citation uses #page=2 (copied from the over-65 credit) in cap.yaml, rate.yaml, and the variable — the supplemental homestead credit section is on pp. 9–10. Also add a #page= anchor to the enrolled-act PDF (SEC. 74 sits deep in the document).
  2. Aggregate-level tests: all tests hit the standalone variable; nothing exercises the actual change (the 2026 list entry). Mirroring vt_renter_credit_in_aggregate.yaml, add: (a) a 2026 case asserting taxsim_state_property_tax_credit picks up the credit, ideally a senior homeowner showing it stacks with in_over_65_property_tax_credit; (b) a 2025 case asserting the aggregate is 0 — note the standalone variable computes nonzero in 2025 via backward parameter extrapolation (no in_effect gate, unlike the MI pattern), so only the list gating protects earlier years.
  3. Documented statutory approximations (bounded by the $300 cap, fine given available data, worth a comment): credit granted on real_estate_taxes > 0 rather than IC 6-1.1-12-37 homestead qualification; base is total real-estate tax rather than homestead-only; subsection (d)'s referendum-tax exclusion not modeled.

🟢 Suggestions

  • cap.yaml description verb: "Indiana limits its supplemental homestead credit to this amount..." per parameter conventions.
  • A multi-person tax unit case (e.g., $1,500 + $1,500 → $300) would pin the add() aggregation against the cap.

DTrim99 and others added 3 commits July 15, 2026 11:52
Senate Enrolled Act 1 (2025), SEC. 74, adds IC 6-1.1-20.6-7.7, a
supplemental homestead credit equal to the lesser of 10% of the homestead
property tax liability or $300, for property taxes first due and payable in
2026 and after. There is no age or income limit; it applies to owner-
occupied homesteads.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Note in the formula that real_estate_taxes is a proxy for the homestead-only
  liability (bounded by the $300 cap).
- Trim the rate parameter description and the reference-title glosses to the
  section citation only.
- Adopt Case N test naming with error margins.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Fix the DLGF memo page anchor (#page=2 -> #page=9, the supplemental homestead
  credit section) in cap.yaml, rate.yaml, and the variable; add #page=124
  (SEC. 74) to the enrolled-act citations.
- Add an aggregate regression test: 2026 senior homeowner stacking the
  supplemental credit ($200) with the over-65 credit ($150) in
  taxsim_state_property_tax_credit (350), and a 2025 case asserting the umbrella
  excludes it (only the year-keyed list gates earlier years).
- Add a multi-person tax-unit case ($1,500 + $1,500 -> $300 cap).
- Document the statutory approximations (homestead qualification proxy, total vs
  homestead-only base, unmodeled referendum-tax exclusion) and use "limits" in
  the cap description.

Rebased onto upstream/main (post-PolicyEngine#9006).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@DTrim99

DTrim99 commented Jul 15, 2026

Copy link
Copy Markdown
Collaborator Author

Changes applied (@PavelMakarchuk review) — thanks for the approve

All non-blocking items addressed:

🟡 Addressed

  1. Page anchors — corrected the DLGF memo citation from #page=2 to #page=9 (the supplemental homestead credit section) in cap.yaml, rate.yaml, and the variable, and anchored the enrolled act to #page=124 (SEC. 74).
  2. Aggregate tests — added in_supplemental_homestead_credit_in_aggregate.yaml: a 2026 senior homeowner case showing the credit stacks with in_over_65_property_tax_credit (200 + 150 → taxsim 350), and a 2025 case asserting the umbrella excludes it (only the year-keyed list gates earlier years, since the variable has no in_effect gate).
  3. Approximation notes — documented in the variable: eligibility proxied by real_estate_taxes > 0 vs IC 6-1.1-12-37 homestead qualification, total vs homestead-only base, and the unmodeled subsection (d) referendum-tax exclusion.

🟢 Suggestions

  • cap.yaml now reads "Indiana limits its supplemental homestead credit to this amount."
  • Added a multi-person tax-unit case ($1,500 + $1,500 → $300 cap).

Rebased onto main (post-#9006). CI re-running.

@DTrim99 DTrim99 force-pushed the in-supplemental-homestead-credit branch from 7cb204e to 1bff82e Compare July 15, 2026 15:56
@DTrim99 DTrim99 requested review from PavelMakarchuk and removed request for PavelMakarchuk July 15, 2026 18:19
@DTrim99 DTrim99 merged commit 7f5b28b into PolicyEngine:main Jul 15, 2026
35 checks passed
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.

2 participants