Add California premium assistance (Covered California state subsidy) - #9233
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #9233 +/- ##
=========================================
Coverage 100.00% 100.00%
=========================================
Files 5 6 +1
Lines 83 81 -2
=========================================
- Hits 83 81 -2
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
Review fixes applied (
|
hua7450
left a comment
There was a problem hiding this comment.
PR #9233 — California Premium Assistance (Covered California state subsidy)
Program Review
Source Documents
| # | Document | URL |
|---|---|---|
| 1 | 2026 California Premium Subsidy Program Design (board-adopted 2025-07-28, 5 pp) | https://board.coveredca.com/meetings/2025/July%2028,%202025/CoveredCA_2026_Premium_Subsidy_Program_Design_Final.pdf |
| 2 | 2026 State Premium Subsidy Policy Explainer (HBEX, pub. 2026-02-20, 3 pp) | https://hbex.coveredca.com/stakeholders/PDFs/2026-02_StatePremiumSub_PolicyExplainer-Final.pdf |
| 3 | CA Gov. Code Title 25 §§100800–100825, current text (leginfo capture, 3 pp) | https://leginfo.legislature.ca.gov/faces/codes_displayText.xhtml?lawCode=GOV&division=&title=25.&part=&chapter=&article= |
| 4 | Discovered: 2027 Premium Subsidy Program Design V4 (May 21, 2026; adopted June 18, 2026) | https://board.coveredca.com/meetings/2026/May%2021,%202026/CoveredCA_2027_Premium_Subsidy_Program_Design_V4_05-19-26.pdf |
| 5 | Discovered: Board Resolution 2026-22 (adoption, June 18, 2026; budget contingency satisfied) | https://board.coveredca.com/meetings/2026/June%2018,%202026/2026-22.pdf |
| 6 | Discovered: May 21, 2026 board slides (impact counts, 2026/2027 schedule side-by-side; deck file URL not recoverable) | https://board.coveredca.com/meetings/ (May 21, 2026 meeting) |
| 7 | Discovered: SB 78 (2019) enrolled text + SB 184 (Stats. 2022, Ch. 47) chaptered text — sunset history | https://leginfo.legislature.ca.gov/faces/billTextClient.xhtml?bill_id=202120220SB184 |
Ancillary corroboration: Covered California press release July 21, 2026 ($300M HCARF, 200% FPL expansion); 2024/2025 Enhanced CSR Program Designs (pre-2026 window check); Policy Explainer Brief-1 (2020–21 predecessor program).
Reviewed head SHA: 5f05623
Mode: full
Year: 2026-2027
Scope: PR changes only
Strengths first. This is a well-built implementation: the benefit formula is the correct direct residual (max_(0, slcsp − aca_ptc − ca_pct × max_(magi, 0))) — not the buggy min_(gap, premium_after_aptc) shape seen in a sibling PR; every numeric parameter value is exactly supported by the cited pages (zero deviations across 22 design-document checks); all #page anchors were opened and verified; the code is clean (no hardcoded values, correct entities/periods, correct adds-vs-formula usage); and the test arithmetic is hand-verifiable to the cent, including the fully derived integration Scenario 8, whose apparent circularity was resolved by closed-form derivation from parameters alone.
Critical (Must Fix)
C1 — No filer gate: non-filers absorb the entire federal share as state benefit.
ca_premium_subsidy_eligible.py:30-39 gates only on in_effect, any-member is_aca_ptc_eligible, and the FPL band; aca_ptc.py:26-29 zeroes the subtrahend for non-filers, so a single non-filer at 140% FPL with SLCSP $6,000 is paid $6,000 where the law pays $0 and an identical filer gets ≈$750 (hand-reproduced by codepath-1). Evidence: PD p.1 preamble grants subsidies "to the applicable return filers"; (d)(7) "'Applicable return filer' means … a return filer whose household income…" (PD #page=2); GC §100810(a)(6) "a responsible individual shall file a California income tax return … notwithstanding the return filing thresholds". Fix: add tax_unit_is_filer as a conjunct in ca_premium_subsidy_eligible, reword the docstring's "statutory definition" to "Program Design (d)(7)" (pdf-statute X2), and add the non-filer YAML case from tests F2. Codepath-1 CONFIRMED CRITICAL — CA's text is strictly stronger than NM #9232's, where the same defect class was already rated critical.
C2 — PY2027 parameter carry-forward contradicts the adopted 2027 Program Design.
All six parameters carry single 2026-01-01 entries through 2027 (in_effect.yaml:10-12 true until 2028-01-01). The adopted 2027 PD (V4; Board Res. 2026-22, June 18, 2026; contingency satisfied by the enacted Budget Act of 2026 — $300M HCARF) lowers the 150–165% schedule to 2.69%→3.41%, adds a 165–<200% tier at 3.41%→5.1%, and redefines the band as "at or above 100 percent and under 200 percent" (exclusive upper bound; 2027 PD #page=2, verified at 600 DPI). ~218,340 newly eligible consumers per the board slides. Fix: add 2027-01-01 entries — threshold [1, 1.5, 1.65, 2.0], initial [0, 0.0269, 0.0341], final [0, 0.0341, 0.051], fpl_limit 1.99 (≡ "under 200%" under the 2-decimal truncation, so <= needs no formula change); update tests (pct Case 12: 0.0355→0.0305; subsidy Case 16: 3,112.50→3,237.50; add a 2027 case in (1.65, 2.00) and the 1.99/2.00 edge pair); refresh the now-stale in_effect.yaml comment ("values … unverified" — they are now verified and different), add the missing carry-forward notes flagged in fpl_floor/fpl_limit (references F6), and fix programs.yaml verified_years: "2026-2027", which overclaims until real 2027 entries land (references F4). Mismatch-1 CONFIRMED on all counts. Keeping in_effect true through 2027 is correct (see Investigated and cleared).
C3 — ca_premium_subsidy missing from parameters/gov/household/household_health_benefits.yaml (4th occurrence in this PR series).
The subsidy is added to healthcare_benefit_value.py:22 but absent from the parameter list at household_health_benefits.yaml:3-10, which is what household_health_benefits.py:20 sums into household_benefits → household_net_income when include_health_benefits_in_net_income is on. Both sibling state marketplace programs (co_omnisalud, or_healthier_oregon_cost) are dual-registered; as shipped, the two canonical health aggregates diverge and net-income-with-health analyses silently drop up to ~$3.5k/yr per recipient. Fix: register it (register the take-up-gated variant once A1 lands), and sweep the identical omission in NM #9232, MD #9218, VT #9245. Codepath-2 Claim A CONFIRMED.
Should Address
A1 — Take-up asymmetry: raw state subsidy beside the take-up-gated assigned_aca_ptc.
healthcare_benefit_value.py:16-25 counts the federal side via assigned_aca_ptc (× takes_up_aca_if_eligible) but the state side raw; a non-taker unit is credited $3,461.31 (Scenario 3 inputs) computed net of a $3,200 federal credit it is simultaneously modeled as not receiving. PD p.1 (a) caps the amount at premiums of plans "enroll[ed] through the Exchange" and (c)(1) requires applying through the Exchange — a non-enrollee gets $0. The docstring's co_omnisalud/or_healthier_oregon_cost precedent is inapposite (those populations are PTC-ineligible, so the take-up flag is vacuous there — verified in their code). Fix: an assigned_ca_premium_subsidy twin used in both aggregates, resolving A1 and C3 in one move. Codepath-2 Claim B CONFIRMED (Should Address, matching NM #9232's A3 disposition on weaker text).
A2 — fpl_floor.yaml cites a nonexistent statutory subdivision.
fpl_floor.yaml:12-13 cites "CA Gov. Code Title 25 Section 100800(d)(7)"; §100800(d) contains only paragraphs (1)–(2), and the section's sole FPL figure is the 600% ceiling in (b) — neither "100 percent" nor "165 percent" appears anywhere in it (verified at 600 DPI; references F1 / pdf-statute X1 / regulatory S3 / ext-1 unanimous). The (d)(7) band definition is a subdivision of the 2026 Program Design, already cited as reference #1. Fix: drop the statute reference, or retitle it "CA Gov. Code § 100800(c) (Exchange adopts annual program design upon appropriation)". The trailing-period sectionNum=100800. URL form is leginfo-canonical and resolves — not an error.
A3 — PR-body legislative history is wrong: Title 25 was never repealed.
The PR body claims §100800 "was repealed effective January 1, 2023" and frames PY2026 as "re-enacted Title 25 authority". Verified chain (ext-1): SB 78 (2019) added the title with a §100825(b)(1) sunset ("shall remain in effect only until January 1, 2023"); SB 184 §6 (Stats. 2022, Ch. 47, eff. June 30, 2022) deleted the sunset before it triggered; AB 118 (2023) then amended §100800. Title 25 has been continuously in force since June 27, 2019. No parameter value depends on the wrong narrative — fix the PR body Historical Notes and the issue #1394 supersession note.
A4 — Eligibility documentation misstates the legal basis (comment rewrite required; no logic change).
ca_premium_subsidy_eligible.py:18-35: (i) §100805(b) disclaims the federal income requirements ("shall not be subject to the income requirements of that section") — the docs present the inherited test as a feature of the gate; (ii) the inherited test is an FPL-band test (ptc_income_eligibility), not a "required-contribution income test" as the comment says; (iii) record the load-bearing contingency: the inherited gate is provably non-binding only while the CA band ⊆ federal [1.00, 4.00) — if CA ever bands above 400% FPL (the 2020–21 predecessor went to 600%) or a reform narrows the federal band, decompose the gate to pays_aca_premium & ~separate + CA band (ext-1 item 3). Also add one sentence noting the unmodeled 26 CFR 1.36B-2(b)(2)(ii)–(v) MFS exceptions (PD p.3 (d)(7)(A)) — a simplification shared with the federal model (regulatory S6).
A5 — REQ-xxx planning markers survive in production test files.
Headers of ca_premium_subsidy.yaml:2 (REQ-010/011/013/014/016/017/026), ca_premium_subsidy_applicable_percentage.yaml:2 (REQ-008/009/025), ca_premium_subsidy_eligible.yaml:2 (REQ-001/003/004/024) plus inline (REQ-017, Case 6 "(REQ-003)"). Strip before merge per series convention; also remove the review-history meta comment in subsidy Case 13 ("the amount file previously tested only…").
A6 — Deprecated documentation = (...) field on all three variables, including future-editor commentary.
ca_premium_subsidy.py:15-30, ca_premium_subsidy_eligible.py:15-29, ca_premium_subsidy_applicable_percentage.py:14-18. Convention for new code: reference tuple + short inline comments. The closing "…a take-up-gated assigned_ variant … is a possible future refinement" (lines 26-30) is PR-description material, not durable documentation — and is superseded by A1.
A7 — programs.yaml placement and agency label deviate from convention.
programs.yaml:1126-1135: the entry is inserted between co_chp and co_omnisalud, splitting the Colorado block — move it to the CA cluster. agency: HBEX (Covered California) deviates from the agency: State convention used by all 20 comparable state entries. (verified_years handled under C2.)
A8 — §100825 citations use the whole-Title landing URL instead of section URLs.
in_effect.yaml:21-22, ca_premium_subsidy.py:13, ca_premium_subsidy_eligible.py:13 all cite codes_displayText.xhtml?…title=25.… (renders the entire title; the href does not land on the section named in the title). Fix: codes_displaySection.xhtml?lawCode=GOV§ionNum=100825. for in_effect (and consider adding §100800(c), the better authority for a time-limited switch); sectionNum=100805. / 100810. for the variables' actual reliance (references F3, code M5, pdf-statute X5).
Suggestions
S1 — Record the 150%-boundary resolution in applicable_percentage/threshold.yaml. The PD's "100% up to 150%" / "Above 150% up to 165%" leaves exactly 150% untiered (a drafting gap); the Explainer's "150% – At or Below 165%", 26 CFR 1.36B-3(g)(2)'s "at least 150% but less than 200%", and the truncation-mass argument (all of raw [150%, 151%) collapses onto 1.50) put it in the 3.19% band — the code is right; the file should say why (~$749–1,538/yr swing per mismatch-2).
S2 — Add an in_effect.yaml doc line on the ePTC condition precedent. Record that the PD's trigger (ePTC "not extended by September 30, 2025") fired, and that no conditioning logic is needed: for filers the residual telescopes to max_(0, (fed_pct − ca_pct) × income) and self-extinguishes under an ePTC-restoration reform (mismatch-2 item 4; the non-filer caveat is C1's fix).
S3 — Document the truncation edges. Raw income in [165%, 166%) truncates to 1.65 → eligible above the stated ceiling (mirrors the federal 400% edge; do not fork a CA-specific fraction), and the same truncation is what makes 2027's "under 200%" ≡ ≤ 1.99.
S4 — Add derived-chain tests: a Medi-Cal-intercepted case (e.g. single, $18,780, fraction 1.20 but Medicaid-eligible → subsidy $0; tests F1), a derived MFS exclusion case (F3), a dependent-only unit (F6), and truncation boundary pairs (F4). The non-filer case lands with C1.
S5 — Scenario 8 comment: state the income × (fed_pct − ca_pct) identity so the "model-derived" assertion is visibly non-circular (tests hand-verified 246.85 from parameters alone).
S6 — Interpolation clone: ca_premium_subsidy_applicable_percentage.py:40-51 carries two dead defensive branches, and this is the third verbatim copy of the federal searchsorted+interpolate block — a shared-helper candidate to file separately.
S7 — Gating shape: consider defined_for = "ca_premium_subsidy_eligible" on the amount variable, dropping the explicit where() (sibling/federal convention; current form is correct, just nonstandard).
S8 — PR-body hygiene: test counts are stale (claims 13 subsidy / 7 integration / 51 total vs actual 18 / 8 / 52); add a one-line scope note that the distinct 2020–2021 predecessor premium subsidy is out of scope (ext-1 item 4); the rate assertions inside mixed dollar cases are non-binding at the 0.01 margin (documenting only — the dedicated pct file pins them at 0.0001).
Verified correct (strongest confirmations)
- All nine numeric parameter values verified against PD p.2 (d)(4)/(d)(7) and Explainer Table 1 p.2 — zero deviations; every
#pageanchor opened as an image and the cited value confirmed visible. - Formula shape is the correct direct residual per PD (b)(1)(B) − (b)/(f)(2), with the "excess (if any)" floor; subtracting the allowed PTC (
aca_ptc, the (f)(2) form) is the right choice for a YEAR-period static model, and the negative-MAGI clamp is sound. - Federal ≥ CA premise hand-verified from repo parameters: the fed-minus-CA wedge is strictly positive on [1.00, 1.65], minimum exactly 1.000 pp at 1.50 — the "CA = federal − 1 pt" design signature (mismatch-2 item 4b; no external fetch needed).
- Eligibility operators inclusive at both ends per (d)(7); the explicit 100% floor correctly excludes the below-FPL immigration exception the federal gate admits; FPL vintage (prior-year FPG via
period.last_year) exactly matches (d)(11); household income = §36B MAGI per (d)(12)–(13). - Medi-Cal interaction captured via
ineligible_coverage; dependent exclusion handled structurally; MFS exclusion inherited correctly from the federal gate. - SB 184 continuity: Title 25 continuously in force since 2019 — the program rests on live law.
- Res. 2026-22 adoption + $300M HCARF funding: PY2027 program is real;
in_effecttrue through 2027 with a 2028-01-01 conservative sunset is the correct window. - Tests: boundary coverage on both sides of 0.99/1.00/1.50/1.65/1.66, all dollar expectations re-derived to the cent,
slcspYEAR-injection round-trip exact, Scenario 8 hand-verified dataset-independently, changelog fragment and parameter file formats clean, no reinvented variables.
Investigated and cleared
- "Repealed 2023" narrative — the legal-continuity worry is defused (SB 184 deleted the sunset before it triggered); only the PR prose is wrong (A3).
- Pre-2026
in_effectwindow — the §100800(d)(1) CY2024 $82.5M (and CY2025 $165M) funded the Enhanced Cost-Sharing Reduction wrap, not premium assistance, verified from the operative 2024/2025 program designs;falsebefore 2026-01-01 stands (ext-1 item 4). in_effectthrough 2027 — pdf-design M1 ("PY2027 unsupported, maybe end 2027-01-01") adjudicated a false positive: the 2027 design is adopted and funded; the parameters, not the window, are what need fixing (→ C2).- 150% boundary — keep code and document (S1); references F5's remedy (shift to 1.5001 / exclusive bracket) rejected — the PD does not actually decide the point, and three independent tiebreakers favor the code (mismatch-2 item 1).
- Enrolled-plan premium cap — closed as not-modeled-with-federal-precedent: the federal
aca_ptccarries the identical unmodeled §36B(b)(2)(A) cap and no plan-choice input exists; already disclosed in the CA docstring (mismatch-2 item 2). - ePTC condition precedent — pdf-design M5's reform-interaction premise is materially wrong: the residual self-neutralizes under restoration; doc line only (S2).
- Scenario 8 circularity — resolved: the 246.85 assertion is derivable from parameter files alone.
- Truncation + FPL vintage — vintage faithful to (d)(11); the Form 8962 2-dp truncation is unsupported-but-reasonable and not contradicted (both PDFs silent on rounding); do not fork a CA-specific fraction (mismatch-2 item 3).
- Trailing-period
sectionNum=URLs — leginfo-canonical, verified resolving; not an error. - 0.99-fraction injected eligibility cases — reachable states (via the pre-2026 immigration exception, exactly the population the CA floor excludes); no unreachable assertions.
Pre-existing upstream issues (not introduced by this PR)
- The federal filer gate lives only inside the
aca_ptcdollar formula, notis_aca_ptc_eligible— the structural reason state programs reusing the eligibility gate keep tripping over C1's defect class (NM, now CA). - Federal
aca_ptc.py's docstring does not disclose its own §36B(b)(2)(A) enrolled-plan-cap omission (the CA file discloses it; the federal one doesn't). - The searchsorted+interpolate block is now cloned three times (federal, NM, CA) — shared-helper candidate.
- (No report raised the
ptc_income_eligibility4.00-boundary issue for CA; the CA band sits far inside the federal band, so it cannot bind here.)
PDF Audit Summary
| Document | Pages examined | Matches | Mismatches raised | Disposition |
|---|---|---|---|---|
| 2026 Program Design (5 pp) | all 5 @300 DPI; pp.1–4 re-rendered @600 DPI | 22 (design audit) | 5 | M3 → C1; M1 superseded by 2027 docs → C2 window kept, parameters fixed; M2 → keep-code + S1; M4, M5 → closed |
| 2026 Policy Explainer (3 pp) | all 3 @300 DPI; p.2 @600 DPI | corroborates full schedule; Table 1 row decisive at the 150% edge | (counted above) | — |
| Title 25 capture (3 pp) | all 3 @300 DPI; pp.1–2 @600 DPI | 7 | 6 | X1 → A2; X2 → folded into C1; X3/X4 → A3; X5 → A8; X6 → A4 |
| 2027 PD V4 + Res. 2026-22 + board slides | key pages @600 DPI (slides @300) | schedule/band/adoption confirmed | — | ground truth for C2 |
All parameter-value checks: 0 numeric deviations. All findings are coverage/formula-shape/citation issues, not transcription errors.
Validation Summary
| Validator | Findings raised | Outcome after verification |
|---|---|---|
| regulatory | 3 critical / 6 should / 5 sugg | C1→C2 (renumbered), C2→C1, C3→C3 all confirmed; S1→A1, S2→A3, S3→A2, S4 folded into C2, S5→S1, S6→A4 |
| references | 7 | F1→A2, F2→A3, F3→A8, F4/F6 folded into C2, F5 remedy rejected (finding valid, code kept), F7→A6 |
| code | 1 high / 5 med / 5 low | H1→C3; M1→A5, M2→A6, M3/M4→A7, M5→A8; L1→S6, L2 noted, L3→S7, L4/L5→S8/A5 |
| tests | 3 med / 3 low | F2→C1 test, F1/F3/F4/F6→S4, F5→A5; Scenario 8 cleared by hand derivation |
| pdf-design | 22 matches / 5 mismatches | M1 false positive; M2 keep-code; M3→C1; M4/M5 closed |
| pdf-statute | 7 matches / 6 mismatches | X1→A2; X2→C1 wording; X3/X4→A3; X5→A8; X6→A4; "live tension" resolved by ext-1 |
| verifiers (5) | — | mismatch-1: C2 confirmed incl. exact 2027 values; mismatch-2: 4 adjudications (all keep/close/document); codepath-1: C1 CRITICAL; codepath-2: C3 + A1 confirmed; ext-1: A2/A3/A4 confirmed, pre-2026 window cleared |
Branch Status
47 commits behind main / 4 ahead; rebase recommended before fixes land. Staleness did not affect any finding (the NM sibling absent from this base was accounted for). CI: 33/33 passing at review time.
Review Severity
REQUEST_CHANGES — three confirmed criticals (C1 missing filer gate; C2 PY2027 parameters contradict the adopted 2027 Program Design; C3 missing household_health_benefits.yaml registration).
Next Steps
- Run the fix-pr workflow on C1–C3 and A1–A8. C3 and A1 should land as one move: create
assigned_ca_premium_subsidyand register it in both aggregates (mirroringassigned_aca_ptc's slot). - Sweep the
household_health_benefits.yamlregistration fix across the sibling PRs (NM #9232, MD #9218, VT #9245) — 4th consecutive occurrence. - File separately (not this PR's scope): federal
aca_ptc.pydocstring disclosure of the §36B(b)(2)(A) cap omission; a shared interpolation helper for the thrice-cloned searchsorted block; whether the filer gate belongs inis_aca_ptc_eligibleupstream. - When the PY2027 Policy Explainer publishes (~Feb 2027, per the 2026 pattern), corroborate the 2027 schedule — currently sourced from the 2027 PD + Res. 2026-22 + the July 21, 2026 press release (single primary source).
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>
…tests) - ca_premium_subsidy_eligible.py: add(...) > 0 instead of tax_unit.any(members(...)) - fpl_floor.yaml / applicable_percentage/threshold.yaml: drop trailing .0 on the integer 1 (numerically identical) - ca_premium_subsidy.py: docstring notes the raw-subsidy healthcare_benefit_value convention (sibling co_omnisalud/or pattern; takeup-gated variant a future refinement) and the out-of-scope reconciliation/appropriation caps - fpl_floor.yaml: section-anchored CA Gov. Code Section 100800(d)(7) reference; eligible variable dual #page anchor - Tests: derived-from-raw-income integration scenario asserting a genuine $246.85 subsidy; multi-member asymmetric-eligibility positive-dollar case; applicable-% clamp cross-checks; dual-nonzero healthcare_benefit_value case; positive PY2027 carry-forward case; slcsp==aca_ptc floor case (58/58 passing) No parameter values (beyond 1.0->1 formatting) or formula logic changed. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Critical: - C1: add the federal filing requirement (tax_unit_is_filer) to the eligibility gate; without it a non-filer absorbed the entire federal PTC as state benefit. - C2: the adopted 2027 Program Design (Board Res. 2026-22) changes the schedule - add 2027-01-01 entries: threshold [1,1.5,1.65,2.0], initial [0,0.0269,0.0341], final [0,0.0341,0.051], fpl_limit 1.99 (the new 165-<200% tier and lower 150-165% rates); update the affected pct/subsidy test values. - C3: register the benefit (via the take-up twin) in household_health_benefits.yaml. Should-address / suggestions: - A1: add the assigned_ca_premium_subsidy take-up twin + takeup flag (statute+reg condition the benefit on Exchange enrollment); wire both benefit lists to the twin. - A2: drop the nonexistent GC §100800(d)(7) citation on fpl_floor (retitle to (c)). - A4/A6/A7/A8: rewrite the eligibility docstring (§100805(b) disclaims the federal income test); reference over documentation=; move the entry to the CA cluster with agency: State; use section-anchored §100805/§100810/§100825 URLs. - A5: strip REQ test markers. S1/S2/S6/S7: 150%-band note, ePTC-trigger note, remove dead interpolation branches, defined_for = eligible. - Tests: non-filer + 2027-tier + 1.99/2.00-edge + household flow-through + take-up cases; derived Medi-Cal/MFS coverage. Note: the earlier "repealed 2023" history is corrected in the PR body (SB 184 deleted the sunset before it triggered; Title 25 has been continuously in force since 2019). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
5f05623 to
c1120a4
Compare
Review fixes applied (
|
Add California Premium Subsidy (Covered California, PY2026)
Summary
Implements the California Premium Subsidy — the statutory "Individual Market Assistance" program (state advance premium assistance subsidies) administered by Covered California — as a state top-up to the federal ACA premium tax credit for on-Exchange enrollees with household income from 100% to 165% of the federal poverty level.
This is the plan-year 2026 revival of the SB 78 (2019) program: with the enhanced federal PTC expiring after 2025, the Covered California board adopted the 2026 Program Design on July 28, 2025 (effective January 1, 2026), funded by a $190 million appropriation from the Health Care Affordability Reserve Fund. The subsidy zeroes out the expected premium contribution up to 150% FPL and applies a reduced applicable-percentage schedule (3.19%–3.91%, versus the federal 4.19%–4.91%) from 150% to 165% FPL.
New variables:
ca_premium_subsidy— annual state subsidy amount (TaxUnit, year)ca_premium_subsidy_eligible— eligibility flag (federal APTC eligibility plus the 100–165% FPL band)ca_premium_subsidy_applicable_percentage— CA expected-contribution percentage (linear interpolation within tiers)Parameter tree:
gov.states.ca.hbex.premium_subsidy(HBEX = California Health Benefit Exchange, Covered California's statutory name — mirrors the NMhcaand MDmhbeagency-node pattern).Closes #9220.
Note: issue #1394 covers the legacy 2020 FTB Form 3849 "California Premium Assistance Subsidy" (SB 78 vintage, paused in 2021 under ARPA); this PR models the revived PY2026 program under the continuously-in-force Title 25 authority (see Historical Notes) and supersedes that stub.
Regulatory Authority
Eligibility
An "applicable return filer" qualifies when all of the following hold (Program Design subdiv. (c), (d)(7), p.1–2):
is_aca_ptc_eligible/pays_aca_premium); takeup is assigned during microdata construction.tax_unit.any(is_aca_ptc_eligible). This inherits the married-filing-jointly requirement with its 26 CFR 1.36B-2(b)(2) exceptions (PD (d)(7)(A), p.3), the dependent exclusion (PD (d)(7)(B), p.3 — structural in the model), and the Medi-Cal interaction at ≤138% FPL (Policy Explainer Table 1 notes, p.2).fpl_floor(1.0) andfpl_limit(1.65) gates onaca_magi_fraction. The floor is explicit rather than inherited because the federal gate includes the below-poverty immigration exception, which the CA statutory "applicable return filer" definition excludes.Household income is ACA MAGI (26 CFR 1.36B-1(e); PD (d)(12), p.3), and the FPL vintage is the level in effect on the first day of open enrollment — the prior-year FPL, matching the existing
aca_magi_fractionconvention (PD (d)(11), p.3).Benefit Calculation
The applicable-percentage schedule (PD (d)(4), p.2; cross-checked against Policy Explainer Table 1, p.2):
The percentage rises linearly within each tier ("on a sliding scale in a linear manner", PD (d)(4)) — the formula reuses the searchsorted bracket interpolation from
aca_required_contribution_percentage, so at 157.5% FPL the applicable percentage is 3.55%.The subsidy is the residual after the federal APTC (PD (b), p.1):
gated by
ca_premium_subsidy_eligible, with the SLCSP benchmark annualized from the monthlyslcspvariable and the result floored at $0 ("the excess (if any)", PD (b)(1)(B)). Below 150% FPL the CA percentage is zero, so the state fills the full post-APTC gap to the benchmark (net consumer premium of approximately $0); from 150% to 165% FPL it pays the difference between the federal (4.19%–4.91%) and CA (3.19%–3.91%) expected-contribution amounts. Above 165% FPL only the federal APTC applies — unlike New Mexico, the program has no above-400%-FPL component.Requirements Coverage
in_effect.yamlca_premium_subsidy_eligibleis_aca_ptc_eligiblemachinerytax_unit.any(is_aca_ptc_eligible)fpl_floor.yaml,fpl_limit.yamlca_premium_subsidy_eligibleapplicable_percentage/{threshold,initial,final}.yamlca_premium_subsidy_applicable_percentageca_premium_subsidymax_(0, ...)max_(aca_magi, 0)add(tax_unit, period, ["slcsp"])aca_magi_fractionaca_ptcsubtrahendca_premium_subsidy_eligible(TaxUnit,defined_forCA)healthcare_benefit_valueadds entryprograms.yamlentry (verified_years: "2026-2027")changelog.d/ca-premium-assistance.added.mdintegration.yamlscenarios 1–7All 51 tests pass (12 eligibility, 12 applicable percentage, 13 subsidy, 7 integration, 7
healthcare_benefit_value).Not Modeled
aca_ptcand the NM program. Documented in the variable.Historical Notes
in_effecttrue 2026-01-01, false 2028-01-01). A PY2027 Program Design exists (board meeting May 21, 2026), confirming continuation, but its values have not been verified against this implementation —programs.yamlrecordsverified_years: "2026-2027"and the assumption is documented inin_effect.yaml.Files Added
Modified:
policyengine_us/variables/household/healthcare_benefit_value.py(addsca_premium_subsidy),policyengine_us/tests/policy/baseline/household/healthcare_benefit_value.yaml(new case 7),policyengine_us/programs.yaml(new entry).🤖 Generated with Claude Code