Skip to content

NJ Health Plan Savings: cite the 2026 documents for the 2026 claim - #9515

Open
mikewolfd wants to merge 1 commit into
PolicyEngine:mainfrom
mikewolfd:nj-njhps-py2026-citations
Open

mikewolfd wants to merge 1 commit into
PolicyEngine:mainfrom
mikewolfd:nj-njhps-py2026-citations

Conversation

@mikewolfd

Copy link
Copy Markdown
Contributor

What changes

The schedule ($20 / $40 / $50 / $100 / $50 per member per month across 138–600% FPL) is unchanged. What changes is what carries it into plan year 2026.

The parameters rested on the Treasury OTA addendum (a November 2021 pass-through calculation) and the DOBI FY2025–2026 budget response, whose 600% statement was conditional — "If the enhanced APTC are extended by the federal government in 2026, the Department intends to continue providing NJ Health Plan Savings subsidies up to 600% FPL" — and whose "$212.2M flat" is a superseded projection.

The FY2026–2027 budget response (p.4) states the outcome: "While the enhanced APTCs were not extended by the federal government in 2026, the Department continued providing NJ Health Plan Savings subsidies up to 600% FPL", with PY2025 actual spending of $224.9M and PY2026 estimated at $238.1M. Its PY2025 cohort averages ($16 under 200% FPL, $43 at 200–250%, $91 and $96 at 250–400%, $40 at 400%+) all sit at or under the schedule, as a premium-capped flat amount must. The Department's 2026-08-18 letter to the Assembly Budget Committee (p.5) fixes the FPL vintage: "For plan year 2026 (using 2025 FPL levels) … 600 percent of FPL is $192,900" for four.

Also: the addendum's bullets are on PDF page 9 (printed page 8); the variables' #page=8 anchor landed one page short.

Caveat, stated in the references: no New Jersey document for plan year 2026 restates the five amounts themselves (the Department declined to when the Legislature asked); the 2026 documents establish that the program continued to 600% FPL under 2025 FPL levels, and the cohort averages are consistent with the schedule.

Tests

No amounts change; policyengine-core test policyengine_us/tests/policy/baseline/gov/states/nj: 620 pass.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Q7xBzQqLTkE1HJLYJbG5S3

The schedule ($20/$40/$50/$100/$50 across 138–600% FPL) is unchanged; what
changes is what carries it into plan year 2026. The parameters rested on the
Treasury OTA addendum (a November 2021 pass-through calculation) and the
DOBI FY2025-2026 budget response, whose 600% statement was conditional —
"If the enhanced APTC are extended by the federal government in 2026, the
Department intends to continue providing NJ Health Plan Savings subsidies up
to 600% FPL" — and whose "$212.2M flat" is a superseded projection.

The FY2026-2027 budget response (p.4) states the outcome: "While the
enhanced APTCs were not extended by the federal government in 2026, the
Department continued providing NJ Health Plan Savings subsidies up to 600%
FPL", with PY2025 actual spending of $224.9M, PY2026 estimated at $238.1M,
FY2027 projected at $200.0M and the fund's FY2027 closing balance at $0.0M.
Its PY2025 cohort averages ($16 under 200% FPL, $43 at 200–250%, $91 and
$96 at 250–400%, $40 at 400%+) all sit at or under the schedule, as a
premium-capped flat amount must. The Department's 2026-08-18 letter to the
Assembly Budget Committee (p.5) fixes the vintage: "For plan year 2026
(using 2025 FPL levels) ... 600 percent of FPL is $192,900" for four.

The addendum's bullets are on PDF page 9 (printed page 8); the variables'
`#page=8` anchor landed one page short. No New Jersey document for plan
year 2026 restates the five amounts — Get Covered NJ's page sends the
reader to its calculator — and the comments now say so rather than imply
a confirmation that does not exist. 64 pass.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7xBzQqLTkE1HJLYJbG5S3
@codecov

codecov Bot commented Sep 17, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (61fac14) to head (5e3b942).
⚠️ Report is 175 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff            @@
##              main     #9515   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files            3         3           
  Lines           78        53   -25     
=========================================
- Hits            78        53   -25     
Flag Coverage Δ
unittests 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.

@hua7450 hua7450 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.

Looks good overall—just two minor citation nits below. The formulas and parameter values are unchanged, and all 64 NJHPS tests passed locally. Looks good to merge once these page references are corrected.

- title: NJ DOBI FY2025-2026 Budget Discussion Points, p.8 ("lowest ... $20 and the maximum is $100")
href: https://pub.njleg.state.nj.us/publications/budget/governors-budget/2026/dobi_response_2026.pdf#page=8
- title: NJ DOBI FY2026-2027 Budget Discussion Points, p.4 (schedule continued to 600% FPL in 2026; PY2025 cohort averages by FPL band)
href: https://pub.njleg.state.nj.us/publications/budget/governors-budget/2027/dobi_response_2027.pdf#page=4

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.

Minor nit: the newly cited PY2025 income-band averages ($16/$43/$91/$96/$40) are on page 5. Page 4 supports the continuation to 600% FPL. Could you retain the page-4 reference for continuation and add a page-5 reference for the averages, updating the explanatory comment accordingly?

- title: NJ DOBI FY2025-2026 Budget Discussion Points
href: https://pub.njleg.state.nj.us/publications/budget/governors-budget/2026/dobi_response_2026.pdf#page=8
- title: NJ DOBI FY2026-2027 Budget Discussion Points, p.4 (2026 outcome, PY2025 actual and PY2026 estimated NJHPS spending, FY2027 projection)
href: https://pub.njleg.state.nj.us/publications/budget/governors-budget/2027/dobi_response_2027.pdf#page=4

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.

Minor nit: the newly added $200.0M FY2027 expenditure projection and $0.0M closing balance are on page 11. Could you add that reference and update the comment/title to distinguish it from page 4, which supports the 2026 continuation and PY2025/PY2026 spending figures?

@DTrim99

DTrim99 commented Nov 13, 2026

Copy link
Copy Markdown
Collaborator

PR Review: NJ Health Plan Savings: cite the 2026 documents for the 2026 claim

Summary

This PR changes only citations and comments. It replaces the conditional FY2025-2026 DOBI statement with the FY2026-2027 budget response, which says the program did continue to 600% FPL in plan year 2026. It cites the Department's 2026-08-18 follow-up letter for the 2025 poverty-guideline vintage, and it moves the Treasury addendum anchor in the three variables from #page=8 to #page=9. I checked the diff line by line: the only non-comment lines that change are reference entries, reference titles and variable reference URLs. No parameter value, bracket or formula changes, so the PR's "formulas and values unchanged" claim holds.

The new sources are real and say what the PR says, but four pinpoints don't hold up:

  • Both of Ziming Hua's 2026-09-18 nits are correct and still open. No commit has landed since that review (the head is still 5e3b942, from 2026-09-17), and the author hasn't replied. The PY2025 band averages are on PDF page 5, not page 4. The FY2027 projection and the $0.0M closing balance are on page 11, not page 4.
  • "Printed page 8 (PDF page 9)" is wrong in four places. This file's printed page numbers match its PDF page numbers.
  • On the merged tree, the new #page=9 anchor no longer opens the page that main's Keep a filer who can be claimed as a dependent out of the premium tax credit family, and apply each state premium program's rule #10041 now quotes in nj_njhps_member_eligible.
  • Five reference titles put page numbers and quoted text in the title, which CLAUDE.md now rules out.

Critical

None.

Should address

1. The PY2025 band averages are on page 5, not page 4 (Ziming's first nit, still open). This affects the title at pmpm.yaml:13 and the comment at pmpm.yaml:38-42.

  • The reference title and the comment attribute "$16 under 200% FPL, $43 at 200-250%, $91 and $96 at 250-400%, $40 at 400%+" to the FY2026-2027 response, p.4.
  • Page 4 ends with "Below please find a chart detailing the average per member per month amount of health insurance premium savings received ... as of the last day of 2025." The chart itself is an image at the top of PDF page 5: the image is in the resources of the page whose text begins "3. The New Jersey Reinsurance Program's current sources...". Its "Average NJHPS ("State Subsidy") PMPM" column reads $16 / $43 / $91 / $96 / $40.
  • Page 4 does support the 600% continuation.
  • Fix: CLAUDE.md now allows one reference entry per source document (added after Ziming's review), so don't add a separate page-5 entry. Keep a single entry with href ...dobi_response_2027.pdf#page=4 and a quoted title ending #page 4-5. Change the comment to "p.4 (continuation); p.5 (PY2025 averages)".

2. The FY2027 projection and the closing balance are on page 11, not page 4 (Ziming's second nit, still open). This affects the comment at in_effect.yaml:15-16 and the title at in_effect.yaml:30.

  • The comment says the FY2026-2027 response "(p.4) ... projects $200.0M for FY2027 with the Health Insurance Affordability Fund's FY2027 closing balance at $0.0M". The title lists "FY2027 projection" under p.4.
  • Neither figure is on page 4. PDF page 11 has the Health Insurance Affordability Fund table, with FY 2027 Estimated "Expenditures ... ($200.0)" and "Closing Balance ... $0.0". Page 10 also states the $200.0M in its text ("projected to be $200.0 million in FY 2027").
  • Page 4 does hold the 2026 continuation, the PY2025 and PY2026 spending ($224,942,542 and $238,091,670), and "the Department has not determined the allocation for 2027".
  • Fix: keep one entry, href #page=4, with a quoted title ending #page 4,11. Split the comment so the FY2027 figures are cited to p.11.

3. The Treasury addendum page claims. This affects pmpm.yaml:25 and the comment above the addendum href in nj_njhps.py:12-13, nj_njhps_eligible.py:11-12 and nj_njhps_member_eligible.py:11-12.

  • (a) There is no printed/PDF offset. All four comments say the bullets are on "printed page 8 (PDF page 9)". The file combines the February 2021 methodology (pages 1-7) with the November 2021 addendum (pages 8-12), and its printed page numbers run continuously. The footer on PDF page 8 reads "8", page 9 reads "9" and page 12 reads "12". So the bullets are on PDF page 9 and printed page 9.
  • The old anchor was only partly wrong. The PR body says the old #page=8 anchor "landed one page short". In fact page 8 holds the eligibility text, and only the five bullets spill onto page 9. Page 8 has the lead-in ("the state subsidy was enhanced relative to the initial subsidy as follows:"), the 138% floor, "extending the subsidy to individuals up to 600% of FPL", and the condition that the subsidy is for those "otherwise eligible for the Advanced Premium Tax Credit (APTC)".
  • (b) Merged tree. Main's Keep a filer who can be claimed as a dependent out of the premium tax credit family, and apply each state premium program's rule #10041, merged today, rests nj_njhps_member_eligible on that condition:
    • Its documentation now says "Treasury's 1332 addendum describes NJHPS as for enrollees 'otherwise eligible for the Advanced Premium Tax Credit'".
    • Its new formula comment begins "Interpretation: NJHPS goes to enrollees otherwise eligible for APTC (Treasury 1332 addendum)".
    • That text is on PDF page 8 (and on page 1 for the initial subsidy), not page 9.
    • After the merge, this variable's only addendum link opens page 9, which does not show the text the variable quotes.
  • Fix: follow the CLAUDE.md rule for variable tuples, where the href opens the first cited page and a comment lists the pages:
    • In nj_njhps_member_eligible.py and nj_njhps_eligible.py, use #page=8 with # PDF pages 8-9, 12 above it.
    • In nj_njhps.py, #page=9 with # PDF pages 9, 12 is fine.
    • In all four places, drop "printed page 8". In pmpm.yaml:25, say "PDF page 9".

4. Reference titles carry page numbers and quoted page text. This affects fpl_limit.yaml:26, fpl_limit.yaml:28, in_effect.yaml:30, pmpm.yaml:11 and pmpm.yaml:13.

  • CLAUDE.md, "Parameter and variable references": "One cited page: #page=57 in the href only, no page in the title". For several pages, the title ends with #page a-b or #page a,b.
  • Each of the five new or changed titles adds "p.N (...)" with a quote or paraphrase. One example is NJ DOBI FY2025-2026 Budget Discussion Points, p.8 ("lowest ... $20 and the maximum is $100").
  • One paraphrase also overstates its page. pmpm.yaml:13 says "schedule continued to 600% FPL in 2026", but page 4 says the Department "continued providing NJ Health Plan Savings subsidies up to 600% FPL". It says nothing about the five amounts, and the PR body itself says no 2026 document restates them.
  • Fix: use plain document titles, for example NJ DOBI FY2026-2027 Budget Discussion Points and NJ DOBI follow-up response to the Assembly Budget Committee, 2026-08-18. Add a quoted #page list only where findings 1 and 2 need one, and keep the quotes in the YAML comments, where they already are.

Suggestions

  • in_effect.yaml:16: the quote "the 2027 allocation 'has not [been] determined'" rewrites the source. Page 4 reads "the Department has not determined the allocation for 2027". Quote it as written.
  • in_effect.yaml:17 ("Re-verify the schedule and the ceiling for PY2027"): the Get Covered NJ page, which is already cited, now says "An individual with an income of up to $95,760 and a family of four who makes up to $198,000". That is 6 x $15,960 and 6 x $33,000, which is 600% of the 2026 guidelines, the vintage plan year 2027 uses. It answers the ceiling half of that note. Because the page changes every plan year and no longer shows the PY2026 figures ($93,900 / $192,900), consider citing an archived snapshot for PY2026 or noting the date it was retrieved.
  • fpl_limit.yaml:11-14: the 2026-08-18 letter answers a question about the federal premium tax credit thresholds and doesn't mention NJHPS. Calling it the NJHPS poverty-guideline vintage is a reasonable inference, since NJHPS uses ACA MAGI against the same marketplace FPL. Still, "confirms plan year 2026 marketplace subsidies use the 2025 guidelines" would state exactly what the letter says.
  • PR body: add axiom: n/a: citations and comments only; no parameter value or formula change. No policy changes, so n/a is the valid form.

Verified correct

  • Values and formulas unchanged: in the merge-base diff, every non-comment line that changes is a reference title, a reference href or a variable reference URL. fpl_limit 2026-01-01: 6, in_effect false/true, and all pmpm brackets are unchanged.
  • FY2026-2027 response, p.4:
    • It contains, verbatim, "While the enhanced APTCs were not extended by the federal government in 2026, the Department continued providing NJ Health Plan Savings subsidies up to 600% FPL."
    • The spending figures round correctly: $224,942,542 → $224.9M (PY2025) and $238,091,670 → $238.1M (PY2026 estimate).
    • The page-4 citations in the three variables and in fpl_limit.yaml are therefore correct.
  • 2026-08-18 follow-up letter, p.5:
    • It contains, verbatim, "For plan year 2026 (using 2025 FPL levels), for a family of four, the 400 percent of FPL is $128,600, and 600 percent of FPL is $192,900".
    • Arithmetic: the 2025 guideline for four is 15,650 + 3 x 5,500 = 32,150. Then 4 x 32,150 = 128,600 and 6 x 32,150 = 192,900. For one person, 6 x 15,650 = 93,900, which matches the fpl_limit.yaml comment.
    • This vintage matches the model: aca_magi_fraction divides by the prior-year FPL.
  • FY2025-2026 response: the conditional "intends to continue providing NJ Health Plan Savings subsidies up to 600% FPL" is on p.6, so the existing fpl_limit #page=6 is right. "$20 and the maximum is $100" and "$400 a month for a family of four at 300% FPL" are on p.8.
  • Treasury addendum:
    • The five enhanced bullets are on PDF p.9, so #page=9 is right for the schedule.
    • Table 2 ("Enhanced Monthly State Subsidy" $20/$40/$50/$100/$50, 400-600% row) is on p.12.
    • The superseded Table 1 ($20/$30/$40/$95) is on p.5.
  • PY2025 averages against the schedule: 16 ≤ 40, 43 ≤ 50, 91 ≤ 100, 96 ≤ 100, 40 ≤ 50. All are at or below the schedule, as the comment says. (The "≥400%" row also includes people above 600% FPL, who get $0, which is consistent with it averaging below $50.)
  • Hand-checks against main's nj_njhps.yaml expectations. The PR leaves these and the formula untouched, so on the merged tree they test exactly the cited schedule. Each amount is min(12 x PMPM x members, max(0, SLCSP - APTC)):
    1. 140% FPL → $20: 12 x 20 = 240; residual 6,000 - 5,000 = 1,000 → 240.
    2. 180% → $40: 480; residual 3,000 → 480.
    3. 220% → $50: 600; residual 5,000 → 600.
    4. 300% → $100: 1,200; residual 8,000 → 1,200.
    5. 500% → $50: 600; residual 7,000 - 0 → 600.
    6. Exactly 600% → $50 band, and 6.0 ≤ fpl_limit 6 → 600. This matches "From 400% through 600%" (inclusive).
    7. 601% → above fpl_limit → ineligible → 0.
    8. Family of four at 300%: 12 x 100 x 4 = 4,800; residual 20,000 - 8,000 = 12,000 → 4,800. This matches FY2025-2026 p.8: "$400 a month for a family of four at 300% FPL – or $4,800 in savings a year".
    9. 145% → $20: 240; residual 5,100 - 5,000 = 100 → 100 (the cap binds).
  • Changelog: changelog.d/nj-njhps-py2026-citations.fixed.md is top-level with type fixed, and the changelog check passed.
  • Code-health on the merged tree (static read, no local run):

Axiom line assessment

The PR body has no axiom: line. The PR changes no policy (citations and comments only), so a line isn't strictly required. A one-line axiom: n/a: citations and comments only; no parameter value or formula change would record that (see Suggestions).

CI status

All 37 checks pass at head 5e3b942 (re-checked just before writing). That run dates from 2026-09-17, so it predates several things now on main: #10009 (the reference page convention), #10287 (the source-conflict ratchet) and #10041 (the NJHPS tax-family change). The static checks above found nothing that would fail on the merged tree, but merge main and re-run before merging.

Branch status

Verdict: REQUEST_CHANGES

@DTrim99 DTrim99 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.

Requesting changes: 0 critical, 4 should address, 4 suggestions (details in the report above). The PR changes only citations and comments; values and formulas are unchanged, and the two new quotes are verbatim. The open items are page references:

  • The PY2025 band averages are on PDF p.5, not p.4.
  • The $200.0M FY2027 projection and the $0.0M closing balance are on p.11, not p.4.
  • "printed page 8 (PDF page 9)" is wrong in four places: in this file the printed page and the PDF page are the same.
  • Five reference titles carry page labels and quotes, which CLAUDE.md's reference rules don't allow.

Ziming's two September notes are also still open. The branch is 1,264 commits behind main and its CI is from September, so a merge of main and a fresh CI run would help.

This branch has not been deployed

No deployments
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.

3 participants