Skip to content

Add New Jersey premium assistance (NJ Health Plan Savings) - #9244

Draft
DTrim99 wants to merge 5 commits into
mainfrom
nj-premium-assistance
Draft

Add New Jersey premium assistance (NJ Health Plan Savings)#9244
DTrim99 wants to merge 5 commits into
mainfrom
nj-premium-assistance

Conversation

@DTrim99

@DTrim99 DTrim99 commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator

Summary

Closes #9224.

Adds the New Jersey Health Plan Savings (NJHPS) state marketplace premium subsidy — a flat per-member-per-month (PMPM) dollar top-up that stacks on top of the federal Advance Premium Tax Credit (APTC) for Get Covered NJ enrollees from 138% through 600% FPL. NJHPS is administered by Get Covered New Jersey under the NJ Department of Banking and Insurance (DOBI), with subsidies paid from the Health Insurance Affordability Fund (held in the Department of the Treasury). It was established by P.L. 2020, c.61 (codified in part at N.J.S.A. 17B:27A-67) and began lowering premiums for coverage starting January 1, 2021.

This PR encodes the enhanced (post-ARP) schedule in force for plan year 2026: a single_amount bracket over aca_magi_fraction returning a monthly PMPM amount per covered member, multiplied by covered members × 12 and capped at the post-APTC premium residual. Modeled on the WA Cascade Care Savings and MA ConnectorCare branches, with the key difference that the band amount is the subsidy itself (added atop APTC), not an enrollee contribution.

Regulatory Authority

The exact PY2026 schedule required a two-source corroboration chain because no single source both states the per-band dollar values and confirms they remain current for PY2026:

  1. Exact PMPM values (verbatim) — U.S. Treasury Office of Tax Analysis, "Method for Estimation of Additional Impact of Enhancement of New Jersey State Subsidy Policy…" (Nov 2021), file p.8, which lists the enhanced schedule verbatim ("From 138% through 150% of FPL: $20 per member per month (PMPM)…" etc.). This is the authoritative source for the numbers, but it dates to 2021.
    • https://www.cms.gov/files/document/1332-ota-methodology-addendum-nj-pass-through.pdf#page=8
  2. PY2026 continuity confirmation — NJ DOBI FY2025-2026 Budget Discussion Points: the Department intends to "continue providing NJ Health Plan Savings subsidies up to 600% FPL," and NJHPS expenditures are "projected to remain flat at $212.2 million in FY 2026." This confirms the 2021 schedule is unchanged for PY2026 but does not itself restate the band amounts.
    • https://pub.njleg.state.nj.us/publications/budget/governors-budget/2026/dobi_response_2026.pdf

Together the two sources establish both the values and their currency for PY2026; the parameter files carry this chain in their comments. Supporting sources:

  • P.L. 2020, c.61 (N.J.S.A. 17B:27A-67) — enabling statute (HTML, no #page): https://pub.njleg.gov/bills/2020/AL20/61_.HTM
  • Get Covered NJ — NJ Health Plan Savings — program page (600% FPL ceiling; 2026 individual $93,900 / family of 4 $192,900): https://www.nj.gov/getcoverednj/financialhelp/premiums/

Eligibility

A tax unit qualifies (nj_njhps_eligible) when it is in effect (PY2026), has MAGI within 138%–600% FPL, and has at least one eligible covered member. NJ residency is enforced by defined_for = StateCode.NJ (no redundant residency test). Members below 138% FPL are routed to NJ FamilyCare/Medicaid and excluded.

Design note — the 400–600% band uses non-income internals. NJHPS covers the full 138–600% FPL range, but is_aca_ptc_eligible cannot be reused directly for the 400–600% band: in the 2026 baseline the federal APTC 400% cliff reverts, so ptc_income_eligibility at the 400% threshold is false from 2026-01-01 and is_aca_ptc_eligible returns False (with aca_ptc = 0) above 400% FPL. Reusing it would silently drop the single most policy-relevant PY2026 band.

Instead, nj_njhps_member_eligible reproduces the non-income components of federal APTC eligibility plus an NJHPS-own income gate:

member_eligible = pays_aca_premium & (filing_status != SEPARATE) & (fpl_floor <= aca_magi_fraction <= fpl_limit)

pays_aca_premium (Person-level: TIN, lawful presence, no other MEC, age-based premium) carries no income test, so it fires across the whole 138–600% range; the MFS exclusion mirrors federal APTC. This mirrors the NM My Health Insurance (MIH) and WA Cascade Care Group 3 handling of the above-400% band.

Benefit Calculation

Flat PMPM by FPL band (per covered member, per month), stored as a single_amount bracket over aca_magi_fraction (upper-inclusive, x.0001 thresholds, 0000-01-01: 0 base):

FPL band (MAGI) PMPM per member Bracket threshold
< 138% (→ FamilyCare) $0
138%–150% $20 1.38
150%–200% $40 1.5001
200%–250% $50 2.0001
250%–400% $100 2.5001
400%–600% $50 4.0001
> 600% $0 6.0001

The annual subsidy is:

nj_njhps = where(eligible, min(pmpm × n_members × 12, max(0, slcsp_annual − aca_ptc)), 0)

where n_members = add(tax_unit, period, ["nj_njhps_member_eligible"]). NJHPS is added atop APTC and capped at the remaining premium after APTC — it lowers the net premium and cannot exceed it; it is not a cash transfer. A family of 4 at 300% FPL yields a $100 × 4 × 12 = $4,800 base (before the cap), matching the published "$400/month for a family of four at 300% FPL."

In the 400–600% band aca_ptc = 0 (the reverted federal cliff), so the residual equals slcsp_annual and NJHPS = min($50 × n × 12, slcsp_annual) — the sole subsidy in that band, with no clawback or negative.

SLCSP proxy. slcsp (a MONTH TaxUnit variable) is summed to the year via add and used as the benchmark/enrolled-premium cap. This slightly overstates the cap where the enrolled plan is cheaper than the second-lowest silver plan — the same approximation WA/MA document. Full-year enrollment is assumed via MONTHS_IN_YEAR.

Requirements Coverage

All 33 requirements from the requirements checklist are in scope and implemented. 67/67 tests pass.

Area REQs Status
Node / naming / defined_for / economy: false 1–2 Done
PMPM single_amount bracket + corroboration-chain comment 3–8 Done
fpl_floor 1.38 / fpl_limit 6.0 9 Done
in_effect bool, 2026-01-01, open-ended 10 Done
Non-income 400–600% member gating 11 Done
within_band, member count, eligibility, amount, SLCSP sum, 400–600% aca_ptc=0 12–18 Done
Additive-atop-APTC + cap; references; docstrings 19–21 Done
healthcare_benefit_value.adds wiring 22 Done
programs.yaml entry (nj_njhps, verified_start_year: 2026) 23 Done
Changelog fragment 24 Done
Tests: 3 unit files + boundaries + family-of-4 + 500%-above-cliff + cap + MFS + integration 25–31 Done
NOT-MODELED items documented 32 Done
make format / branch from upstream/main 33 Done

Test files (run individually):

  • nj_njhps_member_eligible.yaml — 11 passed
  • nj_njhps_eligible.yaml — 10 passed
  • nj_njhps.yaml — 29 passed
  • integration.yaml — 10 passed
  • household/healthcare_benefit_value.yaml — 7 passed

Not Modeled

  • 2.5% carrier assessment on net written premiums (P.L. 2020, c.61) — the program's funding source, not a household-level benefit.
  • Health Insurance Affordability Fund accounting / $212.2M appropriation — macro-fiscal, not household.
  • Enrollment mechanics / actual Get Covered NJ plan selection — treated as met by any otherwise-eligible marketplace enrollee (takeup-style approximation).
  • Cost-sharing reductions — NJHPS as published is a premium subsidy; no CSR wrap (WA/MA also exclude theirs).
  • Partial-year enrollment — full-year assumed via MONTHS_IN_YEAR.
  • The "wrap-around" inversion the DOBI budget describes (low income → large APTC + small NJHPS; high income → small APTC + flat NJHPS) — a net-effect narrative, not a separate rule; the published flat PMPM-by-band table is modeled directly.
  • Reconciliation / tax-return interaction — NJHPS is paid to carriers, not routed through taxable income.
  • The initial pre-ARP (PY2021) schedule — only the PY2026 enhanced schedule is encoded.

Files Added

changelog.d/
  nj-premium-assistance.added.md
policyengine_us/
  programs.yaml                                              # NJHPS entry (modified)
  parameters/gov/states/nj/dobi/njhps/
    pmpm.yaml                                                # single_amount PMPM bracket
    fpl_floor.yaml                                           # 1.38
    fpl_limit.yaml                                           # 6.0
    in_effect.yaml                                           # bool, 2026-01-01
  variables/gov/states/nj/dobi/njhps/
    nj_njhps.py                                              # TaxUnit, USD, YEAR
    nj_njhps_eligible.py                                     # TaxUnit, bool, YEAR
    nj_njhps_member_eligible.py                              # Person, bool, YEAR
  variables/household/
    healthcare_benefit_value.py                             # add "nj_njhps" (modified)
  tests/policy/baseline/gov/states/nj/dobi/njhps/
    nj_njhps.yaml
    nj_njhps_eligible.yaml
    nj_njhps_member_eligible.yaml
    integration.yaml
  tests/policy/baseline/household/
    healthcare_benefit_value.yaml                            # NJHPS case (modified)

@codecov

codecov Bot commented Aug 5, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (63bcfc5) to head (0c03df6).
⚠️ Report is 4 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##              main     #9244    +/-   ##
==========================================
  Coverage   100.00%   100.00%            
==========================================
  Files           12         4     -8     
  Lines          192        62   -130     
==========================================
- Hits           192        62   -130     
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 and others added 5 commits August 6, 2026 12:45
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- DOBI FY2026 budget $212.2M/remain-flat continuity citation moved from
  #page=6 to #page=8 (pmpm.yaml, in_effect.yaml) where that sentence appears;
  fpl_limit.yaml keeps #page=6 (the 600% FPL ceiling statement)
- Get Covered NJ href pointed at the NJHPS-specific /premiums/ sub-page
  (the bare /financialhelp/ page served only special-enrollment content)
- Reference hrefs only; no parameter values, thresholds, dates, or formulas
  changed. The OTA §1332 addendum p.8 remains the verbatim value source.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- De-duplicate nj_njhps eligibility: defined_for = "nj_njhps_eligible" and
  return min_(base_annual, residual), dropping the redundant where() gate
  (matches the co_omnisalud sibling pattern; output unchanged).
- fpl_limit 6.0 -> 6; repoint OTA-addendum reference anchors to the Table 2
  value table (#page=12); clarify enhanced-vs-superseded-initial schedule.
- Fix $20-band threshold 1.38 -> 1.3799 so the inclusive 138% FPL floor
  engages under float32 aca_magi_fraction (float32(1.38) = 1.37999...).
- Add tests: fully income-derived integration scenario (nj_njhps=1_200 at
  274% FPL), exact-138%-floor case, aca_ptc>slcsp residual-clamp case,
  negative-MAGI member guard, and a derived healthcare_benefit_value case.

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

DTrim99 commented Aug 6, 2026

Copy link
Copy Markdown
Collaborator Author

Review fixes applied (/review-program/fix-pr)

Ran the full multi-agent local review — regulatory, references, code patterns, test coverage, and a sighted PDF value-audit against the CMS/Treasury OTA §1332 pass-through addendum (Table 2, file p.12) and the NJ DOBI FY2026 budget. Zero critical findings — every PMPM value ($20/$40/$50/$100/$50) and FPL band boundary (138/150/200/250/400/600%) matches the enhanced (post-ARP) schedule verbatim, and the 400–600% non-income eligibility gate + residual cap are correct. Applied all should-address items and every suggestion:

Correctness

  • $20-band float boundary: the 1.38 threshold in pmpm.yaml returned $0 at exactly 138% FPL because aca_magi_fraction is float32 (float32(1.38) = 1.37999…, just below the float64 band edge). Moved the threshold to 1.3799 so the inclusive 138% floor engages — matching the >= fpl_floor semantics and the OTA "from 138% … $20 PMPM" language. (Same class of fix as WA's 2.0001 boundary.)

Code / references

  • De-duplicated nj_njhps eligibility: defined_for = "nj_njhps_eligible" + return min_(base_annual, residual), dropping the redundant where(eligible, …) (the benefit was computing eligibility twice). Matches the co_omnisalud sibling pattern; NJ residency stays enforced via the eligible variable's own defined_for. Output is identical.
  • fpl_limit 6.06 (no trailing decimal on an integer).
  • Repointed the OTA-addendum reference anchors from #page=8 to the Table 2 value table on #page=12, added table/section detail to the titles, and clarified in the pmpm comment that the encoded schedule is the enhanced (Nov-2021) schedule — not the superseded initial schedule ($20/$30/$40/$95) in Table 1 (p5).

Tests (all passing — 72 NJ cases)

  • A fully income-derived integration scenario: employment_income = 43_000aca_magi_fraction 2.74, slcsp and aca_ptc both derived (6_535.39 / 2_592.46), asserting a genuine nj_njhps = 1_200 (base binds, cap does not).
  • An exact 138% FPL floor case ($20 band engages → 240), an aca_ptc > slcsp residual-clamp case (→ 0), a negative-MAGI member-eligibility guard (→ false), and a derived healthcare_benefit_value case proving NJHPS flows into net income.

No PMPM values, FPL bands, or the residual-cap formula changed. Rebased onto current main; CI green.

🤖 Generated with Claude Code

@DTrim99
DTrim99 force-pushed the nj-premium-assistance branch from ca5bddf to 0c03df6 Compare August 6, 2026 16:46
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.

Model New Jersey Health Plan Savings / NJHPS (income-banded PMPM top-up ≤600% FPL)

1 participant