Skip to content

Implement Maryland Premium Assistance - #9218

Draft
DTrim99 wants to merge 4 commits into
mainfrom
md-premium-assistance
Draft

Implement Maryland Premium Assistance#9218
DTrim99 wants to merge 4 commits into
mainfrom
md-premium-assistance

Conversation

@DTrim99

@DTrim99 DTrim99 commented Aug 4, 2026

Copy link
Copy Markdown
Collaborator

Maryland Premium Assistance (State-Based Health Insurance Subsidies Program)

Summary

Implements the Maryland State-Based Health Insurance Subsidies Program ("Maryland Premium Assistance") in PolicyEngine — a PY2026–2027 state top-up to the federal ACA premium tax credit. Maryland fills part of the gap created by the expiration of the enhanced federal premium tax credits (ARPA/IRA eAPTC): full replacement of the lost federal help up to 200% FPL, a linear phase-down from 100% to 50% replacement over 200–250% FPL, 50% replacement over 250–400% FPL, and no subsidy above 400% FPL. The pre-existing Young Adult Subsidy (ages 18–37) is maintained as an overlay that further reduces the target contribution percentage. The subsidy is administered by the Maryland Health Benefit Exchange (MHBE) and applied automatically on top of the federal APTC.

Closes #9217

Regulatory Authority

Source Citation URL
Enabling statute Md. Insurance Article §31-125 (HB 1082, 2025 Session, enacted May 13, 2025) https://mgaleg.maryland.gov/mgawebsite/Legislation/Details/HB1082?ys=2025rs
Statutory text (§31-125, incl. sunset §31-125(D)) MHBE Board 5-19-25 deck appendix https://www.marylandhbe.com/wp-content/uploads/2025/05/State-Based-Subsidy-Parameters-and-Regulations-Board-5.19.25.pdf#page=22
Regulation COMAR 14.35.21.01–.07 (emergency chapter; authority Ins. Art. §31-106(c)(1)(iv)) https://mgaleg.maryland.gov/pubs/committee/AELR/25-134E-Regulation.pdf#page=3
Adopted 2026 parameters MHBE Board — Final 2026 State Subsidy and Reinsurance Parameters (July 21, 2025); YAS table p.14, FPL table p.7 https://www.marylandhbe.com/wp-content/uploads/2025/07/Final-2026-State-Subsidy-and-Reinsurance-Parameters-Board-7-21-25-1.pdf#page=25
Definitive subsidy design table Combined MHBE/MIA briefing to HGO & Finance committees (Oct 16, 2025), p.58 https://mgaleg.maryland.gov/meeting_material/2025/hgo%20-%20134051066649659653%20-%20Combined%20MHBE.MIA%20slides_10.16.2025%20briefing%20to%20HGO&Finance.pdf#page=58
Validation targets (net premiums) MIA 2026 ACA Approved Rates — State Subsidy Program Impact, Exhibit 2a https://insurance.maryland.gov/Documents/newscenter/newsreleases/2026-ACA-Approved-Rates-State-Subsidy-Program-Impact.pdf#page=1

Note: the primary consumer page (marylandhealthconnection.gov/maryland-premium-assistance) is bot-blocked (HTTP 403); its content was corroborated via a govdelivery bulletin and secondary sources.

Eligibility

A tax unit is eligible (md_premium_assistance_eligible) when all of the following hold:

  1. Federal APTC eligibility / QHP enrollment — the enrollee must be in a tax filer's household where the filer meets APTC eligibility requirements and is enrolled in a QHP through the Individual Exchange. Modeled as any member having is_aca_ptc_eligible (COMAR 14.35.21.03A(1), cross-referencing COMAR 14.35.07.08). Because eligibility is gated on the federal APTC, OBBBA immigration-related APTC losses (2026 and 2027) flow through automatically with no MD-specific code.
  2. Maryland residence — household state_code is MD.
  3. Income at or below 400% FPLaca_magi_fraction <= 4.0 (fpl_limit.yaml); no state subsidy above 400% FPL (HGO briefing p.58; MIA Exhibit 2a 401% rows). The FPL year follows the "FPL as of the first day of open enrollment" convention (COMAR 14.35.21.02B(3)) — PY2026 uses 2025 FPL guidelines, which matches the prior-year FPG convention already encoded in aca_magi_fraction.
  4. Program in effect — Plan Years 2026–2027 only (in_effect.yaml; Ins. Art. §31-125(D); COMAR 14.35.21.04E).
  5. All ages — no age restriction (expansion from the young-adults-only pilot; COMAR 14.35.21.03; MHBE Final 2026 Parameters).

The COMAR 14.35.21.03A(2) requirement that the enrollee "experience an increase in the applicable percentages" versus CY2025 falls out of the benefit formula (the max_(0, ...) floor) rather than a separate flag.

Benefit Calculation

Target contribution percentage schedule (MD target vs federal 2026 applicable %)

The Maryland target is derived as: 2025 enhanced (ARPA) % + replacement share × (2026 non-enhanced % − 2025 enhanced %), where the replacement share is 1.0 up to 200% FPL, tapers linearly 1.0 → 0.5 over 200–250% FPL, and is 0.5 over 250–400% FPL (HGO briefing p.58; interpolation validated against MIA Exhibit 2a).

% FPL band 2025 enhanced (ARPA) % Federal 2026 applicable % MD target % Replacement rule
0–150% 0.00% 2.10% → 4.19% 0.00% Full replacement
150–200% 0.00% → 2.00% 4.19% → 6.60% 0.00% → 2.00% Full replacement (see Historical Notes re the HGO "1.00%" entry)
200–250% 2.00% → 4.00% 6.60% → 8.44% 2.00% → 6.22% Phase down: 100% at 200% → 50% at 250%
250–300% 4.00% → 6.00% 8.44% → 9.96% 6.22% → 7.98% 50% replacement
300–400% 6.00% → 8.50% 9.96% 7.98% → 9.23% 50% replacement
> 400% No state subsidy

Encoded as a threshold/initial/final bracket triple with linear interpolation within bands (target_contribution_percentage/{threshold,initial,final}.yaml), cloning the mechanism of the federal aca_required_contribution_percentage. The schedule ends at 4.0, so the 400% FPL limit is encoded explicitly in the MD parameters rather than relying on the federal ptc_income_eligibility cutoff (REQ-014).

Core formula (COMAR 14.35.21.04; HGO p.58)

md_premium_assistance = min_(
    max_(0, aca_magi × (federal_2026_pct − md_target_pct)),   # contribution gap
    max_(0, slcsp − aca_ptc)                                  # premium cap
)
  • Benchmark = SLCSP, the same benchmark as the federal APTC (COMAR 14.35.21.04; MIA Exhibit 2a "Benchmark Second Lowest Cost Silver"). Reuses the existing slcsp variable (MONTH-period, summed to annual).
  • Premium cap — the subsidy may not exceed the enrollee's premium and applies to the premium balance remaining after the federal APTC, so it never duplicates or stacks beyond the premium (COMAR 14.35.21.04). This cap binds at the top of the range, e.g. the MIA single-age-40 400% FPL row (MD target contribution $481/mo exceeds the $414/mo benchmark → subsidy $0).
  • The max_(0, ...) floor implements the COMAR 14.35.21.03A(2) "experiences an increase" condition.

Young Adult Subsidy overlay (Final 2026 Parameters p.14)

Maryland's pre-existing Young Adult Subsidy is maintained on top of the all-ages subsidy for PY2026. It reduces the target contribution percentage, floored at 0:

  • Ages 18–33: −2.5 percentage points
  • Ages 34–37: taper of −0.5pp per year (34: −2.0pp, 35: −1.5pp, 36: −1.0pp, 37: −0.5pp)
  • Ages 38+ (and under 18): no reduction
  • Applies only under 400% FPL (inherited from the program's FPL gate)

Encoded as an age-bracket parameter (young_adult/reduction.yaml) with a person-level variable (md_premium_assistance_young_adult_reduction) aggregated to the tax unit and subtracted from the MD target percentage (floored at 0) in md_premium_assistance_target_contribution_percentage. Validated against the Final 2026 Parameters p.14 expected-contribution table (e.g., at 200% FPL: 2.00% → 0.00% for ages 18–33; at 400% FPL: 8.50% → 6.00%) and the HGO p.59 age-30 example.

Validation

Integration tests target the MIA Exhibit 2a illustrative net premiums (single age 40 and family of four at 138–401% FPL, annualized) and the HGO p.59 savings examples. The ~$1/mo residual MIA shows at ≤150% FPL is a non-EHB artifact (see Not Modeled).

Requirements Coverage

REQ Description Param Variable Test
REQ-001 Gated on federal APTC eligibility + QHP enrollment md_premium_assistance_eligible (any-member is_aca_ptc_eligible) md_premium_assistance_eligible.yaml cases 1/4/8
REQ-002 Applicable-% increase vs CY2025 enhanced falls out of max_(0, gap) in md_premium_assistance md_premium_assistance.yaml case 13 (negative gap floored)
REQ-003 All ages eligible no age gate in eligibility (by design) ages 0–50 across eligible/YAS tests
REQ-004 MAGI ≤ 400% FPL fpl_limit.yaml (4.0) md_premium_assistance_eligible eligible cases 2/3/9/10 (boundary 4.00/4.01)
REQ-005 Prior-year FPL convention reuses aca_magi_fraction supplied as input (convention tested upstream)
REQ-010 Core contribution-gap formula md_premium_assistance md_premium_assistance.yaml cases 1–4, 16
REQ-011 ≤200% FPL: full replacement (ARPA schedule) target_contribution_percentage/{threshold,initial,final}.yaml ..._target_contribution_percentage target % cases 1–3, 13
REQ-012 200–250% FPL: linear phase 100%→50% (2.00%→6.22%) same same target % cases 14/15; amount case 16
REQ-013 250–400% FPL: 50% replacement (6.22/7.98/9.23%) same same target % cases 4–7, 16–18
REQ-014 >400% FPL: no subsidy, 4.0 limit explicit in MD params fpl_limit.yaml md_premium_assistance_eligible amount case 5; eligible case 2; integration scenario 7; target % case 19 (no extrapolation)
REQ-015 Benchmark = SLCSP md_premium_assistance reuses slcsp cases 6/14/15
REQ-016 Cap at post-APTC premium; never duplicates APTC min_ with max_(0, slcsp − aca_ptc) cases 6/7/14; integration scenario 9
REQ-017 0%-contribution non-EHB coverage (partial) documented in md_premium_assistance documentation string — (not modeled; see Not Modeled)
REQ-018 Young Adult Subsidy overlay with age taper young_adult/reduction.yaml ..._young_adult_reduction + target-% floor ..._young_adult_reduction.yaml (14 cases); target % cases 8–10/20; integration scenarios 6/8a
REQ-019 In effect PY2026–2027 in_effect.yaml eligibility gate amount cases 9/10; eligible cases 6/7
REQ-021 OBBBA APTC immigration losses flow through no MD-specific code (inherits is_aca_ptc_eligible gate) eligible case 4
REQ-022 Aggregate wiring into healthcare_benefit_value healthcare_benefit_value adds list household/healthcare_benefit_value.yaml
REQ-023 Program registry entry programs.yaml (id md_premium_assistance, agency MHBE, verified_years "2026-2027")

All 78 test cases across 6 files pass locally.

Not Modeled

REQ Rule Reason
REQ-006 Newly Medicaid/MCHP-eligible enrollees lose the subsidy the first of the following month (COMAR 14.35.21.03) Sub-annual transition timing; the ACA stack already excludes Medicaid-eligible people from pays_aca_premium
REQ-007 Subsidy applied automatically, no separate application Operational; MD assistance inherits the existing ACA takeup treatment
REQ-008 MHBE Board enrollment-cap / cost-control levers (COMAR 14.35.21.03C) Discretionary/operational, not a computable rule
REQ-009 PY2026 enrollment cutoff (no assistance for enrollments after April 1, 2026) Sub-annual enrollment timing not simulatable in the annual model
REQ-020 Abrogation if Congress extends the enhanced APTC (COMAR 14.35.21.01B) Handled via the documented in_effect switch, not structural coupling (see Historical Notes)
REQ-017 (partial) For 0%-contribution enrollees the subsidy also covers the non-EHB premium so net premium = $0 (COMAR 14.35.21.04) PolicyEngine models only the benchmark/EHB premium via slcsp; the non-EHB increment is not separately observed. Documented in the md_premium_assistance documentation string. This is why MIA Exhibit 2a shows a ~$1/mo residual at ≤150% FPL

Historical Notes

  • Brand-new program for PY2026. Maryland previously ran a Young Adult Subsidy pilot (ages 18–37) since PY2022, made permanent by 2025 legislation. For PY2026 Maryland expanded the state subsidy to all ages up to 400% FPL in response to the eAPTC expiration, keeping the YAS as an overlay (adopted Option A1 retained the 2025 YAS parameters). Per the approved scope, the PY2022–2025 young-adult-only pilot is not backdated; the YAS is modeled from 2026 only, inside the program window.
  • 200%-FPL endpoint discrepancy (reviewers, please note). The HGO briefing p.58 design table's column (c) reads "0.00% → 1.00%" for the 150–200% FPL band. This implementation uses 2.00% at 200% FPL instead, because (a) the same table row is labeled "Full replacement up to 200% FPL," and full replacement of the 2025 enhanced (ARPA) schedule implies 2.00% at 200%; and (b) the MIA Exhibit 2a validation targets imply ~2.0% at exactly 200% FPL (single age 40 at $31,300: $53/mo ≈ 2.03% of income; family of four at $64,300: $110/mo ≈ 2.05%). The "1.00%" table entry is treated as a typo; the discrepancy is documented in target_contribution_percentage/initial.yaml and final.yaml comments.
  • 2027 parameters. The MHBE Board sets each plan year's payment parameters before December 31 of the preceding year; 2027 parameters have not yet been adopted. The 2026 MD target values carry forward through PY2027 (parameter value dating), with in_effect ending 2028-01-01. Update the target schedule when the Board adopts 2027 parameters (expected by December 31, 2026); note the federal 2027 applicable percentages will also shift via Rev. Proc. indexing.
  • Abrogation clause. COMAR 14.35.21.01B abrogates the program if Congress extends the enhanced APTC for CY2026–2027. Under baseline law the eAPTC expired, so the baseline has the program in effect. No structural coupling to federal parameters is encoded; any contributed reform restoring the enhanced APTC should also set gov.states.md.mhbe.premium_assistance.in_effect to false.

Files Added

policyengine_us/
├── parameters/gov/states/md/mhbe/premium_assistance/
│   ├── in_effect.yaml
│   ├── fpl_limit.yaml
│   ├── target_contribution_percentage/
│   │   ├── threshold.yaml
│   │   ├── initial.yaml
│   │   └── final.yaml
│   └── young_adult/
│       └── reduction.yaml
├── variables/gov/states/md/mhbe/premium_assistance/
│   ├── md_premium_assistance.py
│   ├── md_premium_assistance_eligible.py
│   ├── md_premium_assistance_target_contribution_percentage.py
│   └── md_premium_assistance_young_adult_reduction.py
└── tests/policy/baseline/gov/states/md/mhbe/premium_assistance/
    ├── md_premium_assistance.yaml                          (17 cases)
    ├── md_premium_assistance_eligible.yaml                 (10 cases)
    ├── md_premium_assistance_target_contribution_percentage.yaml  (20 cases)
    ├── md_premium_assistance_young_adult_reduction.yaml    (14 cases)
    └── integration.yaml                                    (10 cases)

Modified:
├── policyengine_us/variables/household/healthcare_benefit_value.py   (adds md_premium_assistance)
├── policyengine_us/tests/policy/baseline/household/healthcare_benefit_value.yaml  (7 cases incl. MD)
├── policyengine_us/programs.yaml                                     (registry entry)
└── changelog.d/md-premium-assistance.added.md

@codecov

codecov Bot commented Aug 4, 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 (df12185).
⚠️ Report is 6 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##              main     #9218    +/-   ##
==========================================
  Coverage   100.00%   100.00%            
==========================================
  Files           12         5     -7     
  Lines          192        87   -105     
==========================================
- Hits           192        87   -105     
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 4 commits August 7, 2026 10:29
Starting implementation of Maryland Premium Assistance.
Documentation and parallel development will follow.

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>
- Simplify the target-% bracket interpolation: bracket_end =
  thresholds[bracket_idx + 1] (the old where() false-branch was provably
  unreachable since bracket_idx is clipped to [0,4]); mirrors the canonical
  aca_required_contribution_percentage interpolation. Behavior-preserving.
- md_premium_assistance_eligible: any(is_aca_ptc_eligible) -> add(...) > 0
  (codebase idiom). Add defensive income = max_(aca_magi, 0) clamp (VT
  parity; no-op given the provably-safe gap).
- fpl_limit 4.0 -> 4; strip trailing zeros in the threshold array.
- Expand the 200%-FPL typo NOTE to cite all four corroborators (HGO full-
  replacement label, the same row's 2.0% 2025-ePTC endpoint, MIA Exhibit 2a
  2.03% actual, and the 2025 ARPA schedule); reword the COMAR reference as
  the delegating authority (the schedule lives on HGO p58 + MIA Exhibit 2a);
  state the .04E plan-years-2026-2027 sunset in the in_effect COMAR title.
- Add tests: interior 300-400% interpolation, a fully income-derived
  integration scenario (2_101.82), PY2027, negative-MAGI (0), 150-200%
  interior (1.75->1.00%) and just-below-200% (1.99->1.96%), young-adult
  ages 36/37 through the target-% subtraction, a multi-enrollee MAX edge,
  a young-adult target-% floor case, and a derived healthcare_benefit_value case.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@DTrim99
DTrim99 force-pushed the md-premium-assistance branch from d485071 to df12185 Compare August 7, 2026 14:33
@DTrim99

DTrim99 commented Aug 7, 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 value-audit against five source PDFs (HGO 10-16-2025 briefing, MIA Exhibit 2a, Md. Ins. Art. §31-125(D), COMAR 25-134E, and the Final 2026 State Subsidy Parameters). Zero critical findings — the formula, the bracket-interpolated target-% schedule, the young-adult overlay, and every parameter value are correct and production-ready. Two notable confirmations from the audit:

  • The 200%-FPL "typo" override is JUSTIFIED by four independent corroborators: the HGO p58 "full replacement of ePTC up to 200% FPL" row label, that same row's 2025-ePTC column ending at 2.0%, MIA Exhibit 2a's ~2.03% actual (single age-40 at 200% FPL), and the 2025 ARPA schedule / "2024-25 Young Adult" table both printing 2.00%. The schedule keeps 2.00%; only the documentation was expanded to cite all four.
  • The np.searchsorted interpolation is the canonical codebase idiom (verbatim from aca_required_contribution_percentage.py), not a reinvention.

Applied all should-address items and every suggestion:

Code / references

  • Simplified the interpolation: bracket_end = thresholds[bracket_idx + 1] — the old where() false-branch was provably unreachable (bracket_idx is clipped to [0,4], len(thresholds)-1 = 5). Behavior-preserving — all pre-existing target-% cases (1–20) pass unchanged.
  • md_premium_assistance_eligible: any(is_aca_ptc_eligible)add(...) > 0 (codebase idiom); added a defensive income = max_(aca_magi, 0) clamp (VT parity — a no-op given md_pct ≤ fed_pct always holds, but makes the negative-income guarantee explicit).
  • fpl_limit 4.04; stripped trailing zeros in the threshold array; expanded the typo NOTE to all four corroborators; reworded the COMAR reference as the delegating authority (the numeric schedule lives on HGO p58 + MIA Exhibit 2a, not in COMAR); stated the .04E plan-years-2026-2027 sunset in the in_effect COMAR title.

Tests (all passing — 92 MD cases)

  • An interior 300–400% interpolation amount case, a fully income-derived integration scenario (employment_income 35_000 → MD subsidy 2_101.82 with target-% and slcsp/aca_ptc all derived), PY2027 (second in-effect year), negative-MAGI (→ 0), a 150–200% interior point (1.75 → 1.00%) and just-below-200% (1.99 → 1.96%) pinning the typo-reconciled 2.00% endpoint, young-adult ages 36/37 flowing through the target-% subtraction, a multi-enrollee MAX edge, a young-adult target-% floor case, and a derived healthcare_benefit_value case.

No schedule value, fpl_limit, in_effect date, or the formula logic changed. Rebased onto current main; CI green.

🤖 Generated with Claude Code

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.

Implement Maryland Premium Assistance

1 participant