Skip to content

Add Washington premium assistance (Cascade Care Savings) - #9239

Open
DTrim99 wants to merge 5 commits into
mainfrom
wa-premium-assistance
Open

Add Washington premium assistance (Cascade Care Savings)#9239
DTrim99 wants to merge 5 commits into
mainfrom
wa-premium-assistance

Conversation

@DTrim99

@DTrim99 DTrim99 commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator

Washington Cascade Care Savings (state premium assistance)

Summary

Closes #9222.

Adds Washington's Cascade Care Savings (CCS) program — the state premium assistance program administered by the Washington Health Benefit Exchange (WAHBE) under RCW 43.71.110. CCS pays a flat per-member-per-month (PMPM) subsidy toward marketplace premiums, applied after federal APTC, for enrollees with ACA MAGI up to 250% of the federal poverty level. This PR encodes the enacted plan year 2026 amounts (effective January 1, 2026), following the CO/NM/MD state premium assistance pattern.

New variables: wa_cascade_care_savings (TaxUnit, added to healthcare_benefit_value), wa_cascade_care_savings_eligible, and person-level wa_cascade_care_savings_member_eligible / wa_cascade_care_savings_member_amount.

Survey correction

The issue's survey figures were wrong. Issue #9222 reported "$55/month per adult, $30/month per child." There is no age split — the PY2026 maximum PMPM amounts are split by federal-subsidy status:

Group Definition 2025 max PMPM 2026 max PMPM
Group 1 Receives federal subsidies (APTC) $155 $55
Groups 2/3 No federal subsidies (incl. 1332-waiver immigrants) $250 $250

Verified against WAHBE's final PMPM release (page 1: "Customers with federal subsidies: $55 per member, per month (PMPM)"; "Customers without federal subsidies: $250 PMPM"; 2025-vs-2026 exhibit on page 7). No $30 child amount exists anywhere in the enacted policy, and none is encoded here.

Regulatory authority

Source What it establishes
RCW 43.71.110 Establishes the premium assistance program; WAHBE sets amounts annually within the omnibus appropriations act
WAHBE Final PY2026 CCS Maximum PMPM Methodology (Sept. 30, 2025) Enacted $55/$250 amounts (#page=1, exhibit #page=7); Group 1/2/3 definitions (#page=5); county lowest-cost Cascade Silver cap (#page=6)
WAHBE PY2026 Final Cascade Care Savings Policy Eligibility §4 (#page=8), amount methodology §5 incl. benchmark premium expectation (#page=11), APTC-first ordering and general-welfare (non-taxable) treatment (#page=12)

All #page= anchors were verified against locally extracted PDF text. Note the policy PDF is a redlined final draft with dual-numbering artifacts (e.g., "14.15." for definition 15, "20265" for 2026); citations use the final numbering.

Eligibility

A tax unit is eligible when the program is in effect, ACA MAGI is at or below 250% FPL (aca_magi_fraction <= 2.5, per 26 U.S.C. §36B(d)(2) at the tax-filing-household level; Policy §4(1)(c), §4(11)), and at least one member falls in a modeled group:

  • Group 1 (federally subsidized): is_aca_ptc_eligible — this single gate embeds the §4(1)(e)-(g) and §4(2)(a) tests (accepts all APTC; ineligible for MEC via Medicaid/Medicare; no other affordable MEC via ESHI), mirroring the CO premium assistance pattern.
  • Group 3 (1332-waiver population): immigration_status == UNDOCUMENTED and not wa_apple_health_expansion_eligible — the Apple Health Expansion exclusion implements §4(1)(f) and prevents double-counting with the existing Medicaid-cost proxy (Expansion covers undocumented adults up to 138% FPL, so modeled Group 3 is the undocumented 138–250% FPL population).
  • Group 2 (lawfully present but APTC-ineligible) is not separately identifiable in the model — it requires filing-behavior and sub-100%-FPL APTC-denial facts the model does not represent. Documented in the variable docstrings; see Not modeled.

All four variables use defined_for = StateCode.WA.

Benefit calculation

Per Policy §5(1) (#page=11), with APTC applied first (§5(3), #page=12):

  1. Per-member PMPM build-up: each eligible member contributes $55 (with federal subsidy) or $250 (without); the household base is the sum, annualized ×12.
  2. Benchmark premium expectation (new for PY2026, §5(1)(e)): a per-member monthly minimum contribution of $0 (≤150% FPL), $10 (>150–200%), or $15 (>200% FPL), encoded as a single-amount bracket over aca_magi_fraction starting 2026-01-01. It enters only the cap, never the base amount.
  3. Cap: min_(12 × PMPM sum, max_(0, slcsp_annual − aca_ptc − 12 × Σ per-member expectation)), floored at zero.

Documented approximations:

  • SLCSP dual-proxy: county-level plan premiums are unavailable, so SLCSP proxies both the enrolled plan (cap i) and the county lowest-cost Cascade Silver plan (cap ii). Under one proxy, cap (ii) always binds and the statute's two caps collapse to the single expression above. SLCSP ≥ lowest-cost Silver by construction, so the cap is slightly generous on that margin. Wakely confirms the cap is "the lowest cost silver Cascade Care rate in a county" (final PMPM #page=6).
  • Cascade-plan takeup: enrollment in a standard Cascade Silver/Gold plan is unobservable; every otherwise-eligible marketplace enrollee is treated as enrolled (see Not modeled).
  • Full-year enrollment (×12); per-person lowest-cost Silver net premiums computed at household level.

The benefit is not taxable (general welfare exclusion, §5(5)) and involves no reconciliation — it is a monthly premium payment to issuers, not a tax credit (§7). in_effect turns on 2026-01-01 with no end date: RCW 43.71.110 is permanent law funded by annual appropriations ($55M for PY2026, $5M reserved contingent on the 1332 waiver), so PY2027+ carries the PY2026 amounts forward as the current-law assumption.

Requirements coverage

43/43 tests pass across four files (wa_cascade_care_savings_eligible.yaml 10, wa_cascade_care_savings.yaml 17, integration.yaml 9, household/healthcare_benefit_value.yaml 7).

Requirement Citation Status
REQ-1 WA residency Policy §4(1)(a); RCW 43.71.110(4) defined_for = StateCode.WA; non-WA tests
REQ-2 Income ≤ 250% FPL (ACA MAGI) Policy §4(1)(c), §4(11) fpl_limit = 2.5; 2.49/2.5/2.51 boundary tests
REQ-3 Group 1 gate Policy §4(1)(e)-(g), §4(2)(a) is_aca_ptc_eligible; tested
REQ-4 Group 3 gate (1332 waiver) Policy §4(1)(b) immigration_status == UNDOCUMENTED; tested
REQ-5 Apple Health Expansion exclusion Policy §4(1)(f) ~wa_apple_health_expansion_eligible; overlap tests
REQ-6 Cascade-plan enrollment Policy §3 def. 14/15, §4(13) Takeup approximation, documented
REQ-7 §4(2)(b)-(c) filing-behavior exclusions Policy §4(2) Documented as not modeled
REQ-8 Tax-unit eligibility variable wa_cascade_care_savings_eligible; tested
REQ-9 $55 / $250 PMPM parameters Final PMPM p.1, p.7 2026-01-01, monthly; tested
REQ-10 Per-member build-up ×12 Policy §5(1)(c) Mixed-household tests
REQ-11/13 Net-premium cap (SLCSP proxy) Policy §5(1)(d); final PMPM p.6 Cap-binds, cap=0, floor-order, tie tests
REQ-12 Benchmark expectation $0/$10/$15 Policy §5(1)(e) Bracket parameter; 150%/200% boundary tests
REQ-14 healthcare_benefit_value wiring; not taxable Policy §5(5) In adds; wiring test
REQ-15 No reconciliation Policy §7 Documented
REQ-20 in_effect 2026-01-01, open-ended Policy §2; RCW 43.71.110 2025 off-year and 2027 carry-forward tests
REQ-22 Tests + programs.yaml + changelog wa_cascade_care_savings entry, verified_start_year: 2026

REQ-21 (2025 backdate: $155/$250, no benchmark expectation, enrollment-freeze caveat) was deliberately not taken in this PR.

Not modeled

  • REQ-6 Cascade Silver/Gold standard-plan enrollment: plan choice is unobservable; all otherwise-eligible QHP enrollees are treated as Cascade-enrolled (takeup approximation).
  • REQ-7 §4(2)(b)-(c) exclusions for non-intent-to-file and failure-to-reconcile: filing-behavior facts not represented in the model.
  • REQ-16 COFA Islander Premium Assistance ineligibility test: no COFA variable exists; population is small.
  • REQ-17 Takeup counts: Wakely's best estimate is ~72,240 Group 1 + ~8,090 Group 2/3 recipients vs ~248,290 total Exchange enrollment, so the model overstates participation absent a microdata takeup adjustment.
  • REQ-18 Enrollment mechanics: SEPs, partial-month proration, the up-to-10% reserve, and the §11 low-funds contingency (activated PY2025, assumed off for PY2026).
  • REQ-19 Group 2 (lawfully present, APTC-ineligible): not separately identifiable; would use the same $250 parameter as Group 3 if it becomes identifiable.

Files added

changelog.d/
└── wa-premium-assistance.added.md
policyengine_us/parameters/gov/states/wa/wahbe/cascade_care_savings/
├── amount/
│   ├── with_federal_subsidy.yaml       # $55 PMPM (2026)
│   └── without_federal_subsidy.yaml    # $250 PMPM (2026)
├── benchmark_expectation.yaml          # $0 / $10 / $15 by FPL band
├── fpl_limit.yaml                      # 2.5
└── in_effect.yaml                      # true from 2026-01-01
policyengine_us/variables/gov/states/wa/wahbe/cascade_care_savings/
├── wa_cascade_care_savings.py
├── wa_cascade_care_savings_eligible.py
├── wa_cascade_care_savings_member_amount.py
└── wa_cascade_care_savings_member_eligible.py
policyengine_us/tests/policy/baseline/gov/states/wa/wahbe/cascade_care_savings/
├── integration.yaml
├── wa_cascade_care_savings.yaml
└── wa_cascade_care_savings_eligible.yaml

Modified: policyengine_us/programs.yaml (program registry entry), policyengine_us/variables/household/healthcare_benefit_value.py (adds wa_cascade_care_savings), policyengine_us/tests/policy/baseline/household/healthcare_benefit_value.yaml (wiring test).

@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 (40661ac) to head (c617a09).
⚠️ Report is 15 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff            @@
##              main     #9239   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files            9         5    -4     
  Lines          156        86   -70     
=========================================
- Hits           156        86   -70     
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 force-pushed the wa-premium-assistance branch from 0ee940b to b0a61c3 Compare August 6, 2026 15:37
@DTrim99

DTrim99 commented Aug 6, 2026

Copy link
Copy Markdown
Collaborator Author

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

Full multi-agent review (regulatory, references, code patterns, test coverage, PDF value audit against the PY2026 Final CCS Policy + PMPM Methodology). 0 critical, 0 value mismatches — the $55/$250 PMPM split by federal-subsidy status (confirming the "$30/child" survey figure was wrong), the $0/$10/$15 benchmark-expectation tiers, the ≤250% FPL limit, and the SLCSP−APTC−expectation cap all verified; the redlined-PDF page anchors (§4 body p.8, §5 p.11) confirmed correct; and the round-1 Group 3 fix (Apple Health Kids exclusion + Group 1/Group 3 mutual exclusivity) confirmed correct and complete. Applied all should-address items and suggestions:

References / docs

  • in_effect.yaml: the PMPM #page=1 title over-attributed the "$5M Section 1332 reserve" to a page that only supports the $55M appropriation — trimmed the title and added a CCS Policy #page=5 footnote citation that actually documents the reserve; de-duplicated the description.

Tests (77/77 passing)

  • Two derived-from-raw-income integration scenarios (single Group-1 filer → $660; couple → $1,320) with the ACA chain (aca_magi_fraction, slcsp, aca_ptc) derived from wages.
  • An MFS exclusion case driven by a real filing_status: SEPARATE, a 2.0001 benchmark-tier float-boundary pin (correctly $10, not $15), an exactly-2.5-FPL-ceiling case, and a two-tax-unit healthcare_benefit_value aggregation case.
  • New dedicated unit test files for the two Person-level helpers — wa_cascade_care_savings_member_eligible.yaml (8 cases) and wa_cascade_care_savings_member_amount.yaml (7 cases) — covering the Group 1/3 gates, the Apple Health Kids exclusion, and Group 1/Group 3 mutual exclusivity ($55, not $55+$250).

No parameter values or formula logic changed. Rebased onto current main; CI green.

🤖 Generated with Claude Code

@DTrim99
DTrim99 marked this pull request as ready for review August 10, 2026 13:00
@DTrim99
DTrim99 requested a review from hua7450 August 10, 2026 13:00
@DTrim99
DTrim99 force-pushed the wa-premium-assistance branch 3 times, most recently from edff4be to 9d655b3 Compare August 11, 2026 20:47

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

fix merge conflicts, then good to merge.

DTrim99 and others added 5 commits August 12, 2026 17:08
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>
…force group exclusivity

- Group 3 gate now also excludes wa_apple_health_kids_eligible (undocumented
  children under 19 have Medicaid MEC per Policy sec. 4(1)(f)) and requires
  ~is_aca_ptc_eligible, making Groups 1 and 3 structurally mutually exclusive
  (no $55+$250 stacking)
- Corrected helper documentation (MEC-based gate, not an income floor; SLCSP
  second-lowest-vs-lowest silver proxy wording)
- 13 new test cases pinning the fixed contract; 56/56 passing

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- in_effect.yaml: trim the PMPM title to the $55M appropriation and add a
  CCS Policy #page=5 footnote citation corroborating the $5M Section 1332
  reserve (was over-attributed to PMPM p.1); de-duplicate the description
- Tests: two derived-from-raw-income integration scenarios (single Group-1
  filer -> $660; couple -> $1,320; ACA chain derived from wages), an
  MFS-via-real-filing_status exclusion case, a 2.0001 benchmark-tier pin, an
  exactly-2.5-FPL-ceiling case, and a two-tax-unit healthcare_benefit_value
  aggregation case
- NEW dedicated Person-helper unit test files:
  wa_cascade_care_savings_member_eligible.yaml (8 cases) and
  wa_cascade_care_savings_member_amount.yaml (7 cases) covering the Group 1/3
  gates, Apple Health Kids exclusion, and Group1/Group3 mutual exclusivity
  (77/77 WA tests passing)

No parameter values or formula logic changed.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@DTrim99
DTrim99 force-pushed the wa-premium-assistance branch from 9d655b3 to c617a09 Compare August 12, 2026 21:12
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 Washington Cascade Care Savings (flat $55 adult / $30 child PMPM top-up)

2 participants