Skip to content

Add North Dakota primary residence credit (HB 1176)#8996

Open
DTrim99 wants to merge 2 commits into
PolicyEngine:mainfrom
DTrim99:nd-primary-residence-credit
Open

Add North Dakota primary residence credit (HB 1176)#8996
DTrim99 wants to merge 2 commits into
PolicyEngine:mainfrom
DTrim99:nd-primary-residence-credit

Conversation

@DTrim99

@DTrim99 DTrim99 commented Jul 10, 2026

Copy link
Copy Markdown
Collaborator

Summary

Adds North Dakota's Primary Residence Credit (PRC), which HB 1176 (2025, 69th Legislative Assembly) raised from $500 to $1,600 starting tax year 2025.

The PRC is a flat credit against property tax on an owner-occupied primary residence, with no age or income limitation and one credit per household (N.D. Office of State Tax Commissioner; N.D.C.C. 57-02-08.9). It is modeled as min(amount, real_estate_taxes), so renters (who have no real estate taxes) receive $0.

Changes

  • New variable nd_primary_residence_credit (TaxUnit, defined_for = StateCode.ND) = min(amount, real_estate_taxes).
  • New parameter gov.states.nd.tax.property.primary_residence_credit.amount: $500 (2024) → $1,600 (2025+), matching prior law and HB 1176.
  • Wired into state_property_tax_credits.yaml (2024, 2025, 2026 blocks) so it flows into household net income like other state property-tax credits.
  • Restored nd_renters_refund to the 2026 block of state_property_tax_credits.yaml. It was present in 2024 and 2025 but was dropped from 2026 when the Indiana over-65 credit PR (Add Indiana over-65 property tax credit #8308) created a fresh 2026 list — an accidental omission that silently zeroed the ND renter's refund in 2026 microsimulations. See note below.

Note for reviewers

The nd_renters_refund restoration is an adjacent bug fix within the same ND rows of the aggregate. If the 2026 omission was in fact intentional, that one line can be dropped. (Separately, pa_property_tax_or_rent_rebate appears to have been dropped from the 2026 block the same way, but that is out of scope for this ND-focused PR.)

Tests

nd_primary_residence_credit.yaml covers: above-cap (→ $1,600), below-cap (→ property tax), the prior $500 cap in 2024, renter with no property tax (→ $0), non-ND resident (→ $0), and 2026 (→ $1,600).

References

🤖 Generated with Claude Code

HB 1176 (2025, 69th Legislative Assembly) raised the primary residence
credit from $500 to $1,600 starting tax year 2025. The credit is a flat
credit against property tax on an owner-occupied primary residence, with
no age or income limitation and one per household.

Also restore nd_renters_refund to the 2026 state property tax credit
aggregate; it was present in the 2024 and 2025 lists but dropped from the
2026 list when the Indiana over-65 credit PR created a fresh 2026 block.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@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 (ff39625) to head (98bf1e9).
⚠️ Report is 16 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff            @@
##              main     #8996   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files            1         1           
  Lines           18        13    -5     
=========================================
- Hits            18        13    -5     
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.

Independent review + the enrolled HB 1176 text (25.1003.06000) confirm the
$1,600 maximum is effective for taxable years beginning after December 31,
2025 (tax year 2026); tax years 2024 and 2025 remained at $500. The prior
commit incorrectly set $1,600 from 2025-01-01. Corrects the amount parameter,
the 2025 test cases (now $500), and the changelog/comment wording.

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

DTrim99 commented Jul 13, 2026

Copy link
Copy Markdown
Collaborator Author

Independent review + fixes applied

An independent program review (regulatory + references + patterns + tests) surfaced one critical correctness bug, now fixed after verifying against the enrolled bill.

🔴 Critical — FIXED: $1,600 effective year was wrong

The parameter had 2025-01-01: 1_600, but HB 1176's amendment to N.D.C.C. 57-02-08.9 is effective "for taxable years beginning after December 31, 2025" (tax year 2026). Tax years 2024 and 2025 remained at $500.

Verified from the enrolled bill text (25.1003.06000): the §57-02-08.9 version "Effective for the ... taxable years beginning after December 31, 2025" reads "limited to one thousand six hundred dollars", while the prior version is "five hundred dollars". Corroborated by the post-signing (July 2025) ND Tax Commissioner snapshot still showing $500 for the 2025 credit.

Fixed:

  • amount.yaml{2024-01-01: 500, 2026-01-01: 1_600} (2025 correctly inherits $500)
  • 2025 test cases now expect $500 (added below-cap 2025 → $300 and below-cap 2026 → $1,000 brackets)
  • Changelog/comment wording → "tax year 2026"
  • Upgraded the HB 1176 reference to the enrolled-bill PDF with the effective-date fact

🟢 Also confirmed clean

Formula shape (min(amount, real_estate_taxes)), no age/income test, renter/non-ND → $0, TY2024 = $500, code patterns, and the nd_renters_refund 2026 restoration are all correct.

⚠️ Scope note (applies to all state property-tax credits)

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, MN, etc. — is modeled for TAXSIM parity and does not change modeled net income. Flagging as a systemic question, not a defect in this PR.

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