Skip to content

Add Massachusetts premium assistance (ConnectorCare) - #9240

Merged
hua7450 merged 5 commits into
mainfrom
ma-premium-assistance
Aug 13, 2026
Merged

Add Massachusetts premium assistance (ConnectorCare)#9240
hua7450 merged 5 commits into
mainfrom
ma-premium-assistance

Conversation

@DTrim99

@DTrim99 DTrim99 commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator

Add Massachusetts ConnectorCare premium assistance (PY2026)

Closes #9223

Summary

Adds the Massachusetts ConnectorCare premium wrap — the Health Connector's state subsidy layered on top of the federal ACA premium tax credit under M.G.L. c. 176Q and 956 CMR 12.00. The state pays the gap between the benchmark plan premium, the federal APTC, and a flat per-person monthly enrollee contribution the Board sets annually by plan type (956 CMR 12.12(9)). This PR implements the plan year 2026 flat-dollar schedule ($0/$53/$103/$152/$235 per person per month across five FPL bands).

New node: gov/states/ma/hic/connector_care/ (HIC = Commonwealth Health Insurance Connector Authority). New variables: ma_connector_care, ma_connector_care_eligible, ma_connector_care_member_eligible. The benefit is added to healthcare_benefit_value and registered in programs.yaml with verified_start_year: 2026.

Regulatory Authority

Local copies of all four PDFs live under sources/ (the mahealthconnector.org CDN returns 403 on generic user agents).

Eligibility

Three modeled gates, matching the in_effect & income_band & aptc_eligible structure of the other state premium-assistance implementations:

  1. Massachusetts residency via defined_for = StateCode.MA (956 CMR 12.04(1)(c)).
  2. Income band: 100-400% FPL, both bounds inclusive, via aca_magi_fraction against fpl_floor (1.0) and fpl_limit (4.0). For 2026 the operational program runs Plan Types 2A-3C only: Plan Type 1 (<100% FPL) is eliminated and the 3D tier (400.1-500%) lapsed with the enhanced APTCs, with only 3C (300.1-400%) surviving from the pilot.
    • Reg-vs-Overview conflict, documented in code: the amended regulation text still says "at or below 500 percent of the FPL" and still defines Plan Types 1 and 3D (§12.04(3), #page=6). The consumer-facing 2026 Overview (100-400% only) is treated as controlling for the operational program; the conflict is noted in the parameter and variable documentation so a future re-expansion is a parameter change, not a re-architecture.
  3. At least one APTC-eligible member: ma_connector_care_member_eligible = is_aca_ptc_eligible (956 CMR 12.04(3)(a)2 → 45 CFR 155.305(f)). Citizenship/lawful presence, incarceration, no-affordable-employer-coverage, and Medicare/MassHealth exclusions are inherited through the federal PTC eligibility chain rather than re-modeled.

An in_effect parameter gates the program to 2026 onward (pre-2026 program history unmodeled — see Not Modeled).

Benefit Calculation

The PY2026 enrollee contribution is a flat per-person monthly dollar amount by FPL band — decoupled from the percent-of-income affordability schedule since 2025 (Affordability Memo p.2), so this is a single_amount step bracket over aca_magi_fraction with no interpolation:

Plan Type FPL band Monthly premium per person
2A 100-150% $0
2B 150.1-200% $53
3A 200.1-250% $103
3B 250.1-300% $152
3C 300.1-400% $235

Bracket thresholds use the x.0001 lower-exclusive convention (1.0 → 0, 1.5001 → 53, 2.0001 → 103, 2.5001 → 152, 3.0001 → 235) matching the published "150.1%" banding. A bracket comment notes the 3C tier is a pilot extended through FY2026 that may lapse.

The subsidy:

ma_connector_care = max(0, annual SLCSP − aca_ptc − 12 × per_person_premium × n_eligible_members)

gated by ma_connector_care_eligible, where n_eligible_members counts APTC-eligible members (the CO/WA convention). Documented approximations:

  • Benchmark proxy: the actual guarantee is a lowest-cost ConnectorCare-designated plan per region at the Board minimum premium (§12.04(3)(c)); the model uses the existing slcsp (second-lowest-cost silver) as the benchmark, slightly overstating the wrap where the lowest-cost plan is cheaper.
  • Full-APTC election: §12.04(3)(c) conditions the minimum premium on electing the full APTC, so the full aca_ptc is netted out.
  • Full-year enrollment via MONTHS_IN_YEAR; floored at zero (no clawback where APTC plus contribution exceeds the benchmark, e.g. the $235 3C tier).
  • The wrap is a benefit paid to carriers, not taxable income: added to healthcare_benefit_value, not routed through income.

Requirements Coverage

28 requirements were extracted from the sources and approved at the scope checkpoint; all 46 tests pass.

Category REQs Status
Eligibility (ELIG-1..6) 6 All covered — residency, in_effect, floor/limit, member gate, federal-chain inheritance
Schedule (SCHED-1..5) 5 All covered — Table 3 amounts, band boundaries, flat-dollar step function, per-person basis, §12.12(9) authority
Calculation (CALC-1..7) 7 All covered — residual formula, full-APTC netting, member count, SLCSP proxy documented, zero floor, annualization, benefit aggregation
Parameters (PARAM-1..5) 5 All covered — in_effect, fpl_limit, fpl_floor, enrollee_premium bracket with #page-anchored references, house style
Variables (VAR-1..4) 4 All covered — three variables with verified reference anchors
Tests (TEST-1..6) 6 Covered; TEST-1 partial — ma_connector_care_member_eligible has no dedicated unit file and is asserted as an output within integration scenarios
Registry (REG-1..3) 3 Covered — programs.yaml entry, changelog fragment, formatting clean. REG-1 deviation: registered as a standalone State entry rather than a state_implementations item under the ACA PTC parent

Test files (run individually with policyengine-core test):

File Tests
ma_connector_care_eligible.yaml 8
ma_connector_care.yaml (all 12 band boundaries 0.99-4.01, hand-computed $928 residual, zero-floor, edge cases) 23
integration.yaml (incl. a scenario deriving slcsp/aca_ptc/is_aca_ptc_eligible from raw employment income) 8
household/healthcare_benefit_value.yaml (MA wrap case) 7
Total 46

Not Modeled

  • Cost-sharing wrap: ConnectorCare's reduced co-pays and out-of-pocket maximums (Overview Table 4) — a separate benefit, excluded as the MD implementation excluded its cost-sharing split.
  • Plan choice: enrollees choosing costlier carriers pay premium differentials; the model assumes the lowest-cost plan at the Board minimum, proxied by SLCSP.
  • Stale regulation text: the un-repealed 500% ceiling and Plan Types 1 (<100%) and 3D (400.1-500%) in 956 CMR 12.04(3); the 2026 operational bands (2A-3C) are implemented, with both readings documented.
  • Pre-2026 program history (2006-2025): affordability-coupled contributions and Plan Types 1/3D — left to future backdating work; in_effect is false before 2026.
  • Enrollment mechanics: hardship premium waivers (§12.12(7)), termination/reinstatement, special enrollment periods, monthly carrier payment flows (§12.12(10)).
  • Partial-year enrollment and mid-year plan-type changes (§12.12(8)); full-year assumed.
  • American Indian / Alaska Native cost-sharing variants (cost-sharing only, out of scope with the wrap).
  • Takeup: eligibility implies receipt, matching the MD/WA premium-assistance implementations.

Files Added

changelog.d/
└── ma-premium-assistance.added.md
policyengine_us/
├── programs.yaml                                          (entry added)
├── parameters/gov/states/ma/hic/connector_care/
│   ├── enrollee_premium.yaml
│   ├── fpl_floor.yaml
│   ├── fpl_limit.yaml
│   └── in_effect.yaml
├── variables/gov/states/ma/hic/connector_care/
│   ├── ma_connector_care.py
│   ├── ma_connector_care_eligible.py
│   └── ma_connector_care_member_eligible.py
├── variables/household/income/household/
│   └── healthcare_benefit_value.py                        (adds ma_connector_care)
└── tests/policy/baseline/
    ├── gov/states/ma/hic/connector_care/
    │   ├── integration.yaml
    │   ├── ma_connector_care.yaml
    │   └── ma_connector_care_eligible.yaml
    └── household/healthcare_benefit_value.yaml            (MA case added)

14 files changed, 1,290 insertions.

🤖 Generated with Claude Code

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

Additional details and impacted files
@@            Coverage Diff            @@
##              main     #9240   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files            5         4    -1     
  Lines           86        57   -29     
=========================================
- Hits            86        57   -29     
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 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 ConnectorCare Overview 2026 + amended 956 CMR + board memos). PDF audit 12/0 — all five per-person premiums ($0/$53/$103/$152/$235), the plan-type band boundaries, fpl_floor/fpl_limit, and the residual formula verified; the omitted Type 1 / 3D / 500% bands confirmed intentional (the amended CMR still lists them, but the 2026 Overview operationally supersedes them). Applied the one critical, all should-address items, and suggestions:

Critical

  • in_effect.yaml: the Seal-of-Approval Board Memo reference URL 404'd — replaced it with the working board_meetings/2025/07-10-25/ path (verified HTTP 200; #page=6 kept).

Registry / references / docs

  • programs.yaml: status: completepartial (this PR models the premium axis only; cost-sharing / dental / NEMT are out of scope), agencyState and full_name trimmed to match sibling entries (ma_eaedc, co_omnisalud), with a notes line recording the premium-only scope.
  • Added a direct ConnectorCare Overview 2026 #page=1 citation on fpl_limit/fpl_floor so the 100–400% band is visible alongside the CMR sub-band cites.
  • fpl_floor 1.01, fpl_limit 4.04, enrollee_premium first bracket 1.01 (numerically identical).
  • ma_connector_care_member_eligible.py docstring: removed two clauses that overclaimed the federal PTC gate (non-incarceration / affordable employer coverage — is_aca_ptc_eligible doesn't check those).

Tests (50/50 passing)

  • A new dedicated ma_connector_care_member_eligible.yaml (3 person-level cases) covering the pass-through gate.
  • A multi-member derived-from-raw-income integration scenario (married couple → 189% FPL) with aca_magi_fraction, slcsp, and aca_ptc all derived, asserting a genuine $1,155.92 subsidy.

No parameter values (beyond 1.01 / 4.04 formatting) or formula logic changed. Rebased onto current main; CI green.

🤖 Generated with Claude Code

@DTrim99
DTrim99 force-pushed the ma-premium-assistance branch from eb95bb4 to 41046b5 Compare August 6, 2026 16:15
@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 ma-premium-assistance branch 3 times, most recently from 29bc780 to 98d3ff0 Compare August 11, 2026 20:49

@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 4 commits August 13, 2026 10:40
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ance

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…s, tests)

- in_effect.yaml: fix the 404ing Seal-of-Approval Board Memo href to the
  working board_meetings/2025/07-10-25/ path (verified HTTP 200; #page=6 kept)
- fpl_limit.yaml / fpl_floor.yaml: add a direct ConnectorCare Overview 2026
  #page=1 (100-400% band) citation alongside the CMR sub-band cites
- fpl_floor 1.0->1, fpl_limit 4.0->4, enrollee_premium first bracket 1.0->1
  (bare-integer form; numerically identical)
- programs.yaml: status complete->partial (premium axis only; cost-sharing/
  dental/NEMT out of scope, per the registry convention), agency ->State and
  full_name trimmed to match sibling entries, notes added
- ma_connector_care_member_eligible.py: trim docstring clauses that overclaimed
  the federal PTC-eligibility gate (removed non-incarceration / affordable-ESI)
- Tests: new dedicated ma_connector_care_member_eligible.yaml (3 person-level
  cases) and a multi-member derived-from-raw-income integration scenario
  asserting derived aca_magi_fraction 1.89 / aca_ptc 9_572.08 /
  ma_connector_care 1_155.92 (50/50 passing)

No parameter values (beyond 1.0->1 / 4.0->4 formatting) or formula logic changed.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@DTrim99
DTrim99 force-pushed the ma-premium-assistance branch from 98d3ff0 to f8e47e3 Compare August 13, 2026 14:43
Resolves a conflict in tests/policy/baseline/household/healthcare_benefit_value.yaml
where main's WA Cascade Care Savings PR and this branch both added a "Case 16".
Keeps main's WA cases 16-17 and renumbers the MA ConnectorCare case to 18.
healthcare_benefit_value.py auto-merged with both ma_connector_care and
wa_cascade_care_savings in the adds list.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@hua7450
hua7450 merged commit a1b03db into main Aug 13, 2026
33 checks passed
@hua7450
hua7450 deleted the ma-premium-assistance branch August 13, 2026 16:33
hua7450 added a commit that referenced this pull request Aug 13, 2026
Resolves two conflicts caused by sibling premium-assistance PRs landing in main
(#9239 WA, #9240 MA):

- tests/policy/baseline/household/healthcare_benefit_value.yaml: main's WA cases
  16-17 and MA case 18 are kept; the two NJHPS cases are renumbered 19-20. The
  derived case's stale cross-reference to "Case 7" now points at Case 19, the
  forced NJHPS case it contrasts with.
- programs.yaml: keeps main's ma_connector_care entry and re-inserts nj_njhps
  after it, preserving id order ahead of nj_unemployment_insurance.

healthcare_benefit_value.py auto-merged with ma_connector_care, nj_njhps, and
wa_cascade_care_savings all in the adds list. nj_njhps stays inert in main's
non-NJ cases because nj_njhps_eligible is defined_for StateCode.NJ.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
hua7450 added a commit that referenced this pull request Aug 13, 2026
Resolves three conflicts caused by sibling premium-assistance PRs landing in main
(#9239 WA, #9240 MA, #9244 NJ):

- variables/household/healthcare_benefit_value.py: both sides appended to the
  adds list; keeps vt_premium_assistance and wa_cascade_care_savings in
  alphabetical order.
- tests/policy/baseline/household/healthcare_benefit_value.yaml: main's cases
  16-20 (WA, MA, NJ) are kept; the two Vermont cases are renumbered 21-22. The
  derived case's stale cross-reference to "Case 7" now points at Case 21, the
  forced Vermont case it contrasts with.
- programs.yaml: both entries land at the tail of the state section; keeps
  vt_premium_assistance ahead of main's wa_cascade_care_savings.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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 Massachusetts ConnectorCare (state premium + cost-sharing wrap)

2 participants