Skip to content

Implement Maryland Child Care Scholarship (CCS)#7889

Open
hua7450 wants to merge 15 commits into
PolicyEngine:mainfrom
hua7450:md-ccap
Open

Implement Maryland Child Care Scholarship (CCS)#7889
hua7450 wants to merge 15 commits into
PolicyEngine:mainfrom
hua7450:md-ccap

Conversation

@hua7450
Copy link
Copy Markdown
Collaborator

@hua7450 hua7450 commented Mar 26, 2026

Summary

Implements Maryland's Child Care Scholarship (CCS) program in PolicyEngine, including eligibility, income calculation with SMI base-year freeze, copayment, provider reimbursement rates (with historical 5/23/22 schedule + current 3/1/26 schedule), and benefit computation.

Closes #7888

Regulatory Authority

Program Overview

  • Official name: Child Care Scholarship (CCS) Program (formerly "Child Care Subsidy Program")
  • Administration: Maryland State Department of Education (MSDE), Division of Early Childhood, Office of Child Care
  • Funding: CCDF federal block grant + state funds
  • Type: Voucher-based child care subsidy
  • Current caseload: 41,148 children / 27,235 families (Jan 2026, per Feb 2026 briefing)
  • Waitlist: ~4,929 children

Eligibility

Requirement Source How Modeled
Must reside in Maryland COMAR 13A.14.06.03(A)(1) defined_for = StateCode.MD
Child under 13 (non-disabled) COMAR 13A.14.06.02 age < p.age_threshold.child (param = 13)
Child under 19 (disabled) COMAR 13A.14.06.02 age < p.age_threshold.disabled_child (param = 19)
Child is U.S. citizen or qualified alien COMAR 13A.14.06.03(B) is_ccdf_immigration_eligible_child
TCA recipients exempt from income test COMAR 13A.14.06.03(F)(1) is_tanf_enrolled
SSI recipients exempt from income test COMAR 13A.14.06.03(F)(1) ssi > 0
Income at/below 75% SMI (initial) COMAR 13A.14.06.03H (Feb 2026 W&M slide 21) countable_income <= md_smi * 0.75
Income at/below 85% SMI (continuation) 45 CFR 98.21 countable_income <= md_smi * 0.85 (via md_ccs_enrolled)

Income Calculation

Per COMAR 13A.14.06.03F(8), countable income includes annual gross income from 15 sources:

  • Earned: employment income; self-employment income (after 30% flat deduction per .03F(8)(a)(i))
  • Unearned: Social Security, pension, interest, dividends, rental income, alimony, child support received, unemployment compensation, workers' compensation, veterans' benefits, disability benefits, capital gains, farm income, military retirement pay
  • Child support is counted as gross income per COMAR .02B(28)(b)(x) ("Alimony and child support") and the receipt-based counting rule at .03F(8)(c). Chapter 525 of 2022 does not exclude child support from income — it only bars MSDE from requiring child-support pursuit as an eligibility condition.
  • Excluded (COMAR .02B(28)(c); not modeled): child support paid for a child outside the household, and $2,500 of child support tax intercepts/arrearages.

Income Thresholds + SMI Base-Year Freeze

MD freezes the SMI base year for CCS eligibility on a fiscal-year schedule (FY starts July 1). Implemented via smi_freeze_in_effect (bool) + smi_frozen_year parameters — when the freeze is in effect the formula pins SMI to smi_frozen_year, otherwise it uses the current-year SMI. Verified against Feb 2026 W&M briefing slide 21.

MD Fiscal Year SMI base year used Source
FY2019-2022 (2018-07-01 onward) 2018 SMI Feb 2026 briefing slide 21
FY2023-2024 (2022-07-01 onward) 2021 SMI Feb 2026 briefing slide 21
FY2025 mid-year (2024-12-15 onward) Current-year SMI (unfrozen) Jan 2025 OCC info session

Note: HHS SMI data in this repo now covers FFY2018 (2017-10-01) onward following the #8356 backfill, so the base-year freeze resolves to real 2018 and 2021 SMI values.

Historical initial-eligibility SMI rate (independent of base-year freeze), as implemented in smi_rate/initial.yaml:

Effective Date Rate Source
2018-01-01 50% COMAR 13A.14.06.03H
2018-07-01 65% COMAR 13A.14.06.03H
2022-07-01 75% COMAR 13A.14.06.03H (Feb 2026 W&M slide 21)

Copayment Structure

Current flat copayments (effective since 2022 legislation, capped per Ch 717 of 2024):

Service Unit Hours/Day Weekly Copay
UNIT_1 (hourly) ≤3 hours $1/week
UNIT_2 (part-time) >3 to <6 hours $2/week
UNIT_3 (full-time) ≥6 hours $3/week

Categorical exemptions (copayment = $0):

Category Source Variable
TCA recipients COMAR 13A.14.06.12(A)(1) is_tanf_enrolled
SSI recipients COMAR 13A.14.06.12(A)(1) ssi > 0
SNAP recipients Ch 525/526 of 2022 (Educ. Art. § 9.5-113) receives_snap (bare-input bool, NEW)
WIC recipients Ch 525/526 of 2022 (Educ. Art. § 9.5-113) receives_wic (existing)

receives_snap is a new federal-level bare-input variable to avoid a cycle through snap_dependent_care_deduction → childcare_expenses → md_ccs if we used the computed snap value. The § 9.5-113 waiver is also conditioned on employment/education, which is implicitly satisfied for any family that already passes md_ccs_activity_eligible.

Federal cap: Copayment cannot exceed 7% of family gross income (45 CFR 98.45(l)(3)).

Copayment assessed for up to 3 children per COMAR 13A.14.06.12; 4th+ child is free.

Provider Reimbursement Rates

  • Formal rates (payment/formal/): 7 market regions (U/V/W/X/Y/Z/BC) × 2 provider types (licensed center, licensed family) × 2 age groups (infant, regular). Only UNIT_3 (full-time) base rates are stored; UNIT_2 and UNIT_1 are derived in md_ccs_payment_rate.py via unit_count / 3 (i.e., × 2/3 and × 1/3) per COMAR 13A.14.06.11.
  • Informal rates (payment/informal/rates.yaml): 24 counties × 2 age groups. UNIT_3 rates only; UNIT_2/UNIT_1 derived in the same way.
  • Historical schedule: 2022-05-23 (from Wayback Machine) and current schedule 2026-03-01 (60th percentile of 2024 MRS) both encoded. Informal rates have been operational at MSDE since 2020-11-23 (70th percentile of March 2021 MRS).

UNIT_3 formal rates, current schedule (effective 2026-03-01):

Region Family Regular Family Infant Center Regular Center Infant
U $200 $225 $244 $325
V $175 $200 $200 $264
W $262 $300 $305 $420
X $325 $350 $424 $554
Y $250 $288 $312 $427
Z $170 $185 $207 $297
BC $225 $252 $282 $376

UNIT_3 formal rates, historical schedule (effective 2022-05-23 through 2026-02-28):

Region Family Regular Family Infant Center Regular Center Infant
U $176 $200 $205 $296
V $142 $175 $175 $242
W $230 $270 $262 $370
X $300 $325 $381 $481
Y $220 $250 $278 $378
Z $150 $168 $183 $262
BC $182 $210 $250 $303

Benefit Formula

benefit = min(max(expenses - copay, 0), max_reimbursement) / 12

Where:

  • expenses = spm_unit_pre_subsidy_childcare_expenses (annual)
  • copay = weekly copayment × 52 (annualized), summed across up to 3 eligible children
  • max_reimbursement = provider reimbursement rate × 52, summed across eligible children — based on region, provider type, child age, and service unit at the period's effective rate schedule

The benefit flows into household and SPM-unit income via md_child_care_subsidies, which is registered in both child_care_subsidy_programs.yaml (federal aggregator) and household_state_benefits.yaml (household net income).

Not Modeled (by design)

What Source Why Excluded
Activity/work requirement COMAR 13A.14.06.03(E) Administrative verification, not simulatable
Immunization requirement COMAR 13A.14.06.03(D) Health/administrative requirement
Child support cooperation COMAR 13A.14.06.04 Administrative requirement
Service groups / priority levels COMAR 13A.14.06.08 Waitlist management, not simulatable
24-month eligibility period Jan 2025 briefing Administrative period management
Presumptive eligibility Ch 525/526 of 2022 Administrative fast-track process

Deferred to Follow-up PR

  • Non-traditional rates (evenings/weekends) — separate rate schedule not yet encoded
  • Section 8 / Housing Choice Voucher copayment waiver — listed in Ch 525/526 § 9.5-113 but no existing receives_housing_voucher bare-input in the codebase

Files Added

policyengine_us/
  parameters/gov/states/md/msde/ccs/
    age_threshold/
      child.yaml                           # Age 13 (non-disabled)
      disabled_child.yaml                  # Age 19 (disabled)
    copay/
      federal_cap_rate.yaml                # 7% federal cap
      max_children_with_copay.yaml         # Up to 3 children
      unit_hours.yaml                      # Service unit hour brackets
      weekly_amount.yaml                   # $1/$2/$3 by unit type
    income/
      countable_income/
        sources.yaml                       # 15 income sources
      self_employment_deduction_rate.yaml  # 30% deduction
      smi_freeze_in_effect.yaml            # SMI base-year freeze toggle (NEW)
      smi_frozen_year.yaml                 # Pinned SMI base year when frozen (NEW)
      smi_rate/
        initial.yaml                       # 75% SMI (with history 50/65/75)
        continuation.yaml                  # 85% SMI
    payment/
      formal/
        licensed_center.yaml               # UNIT_3 center rates by region/age (historical + current)
        licensed_family.yaml               # UNIT_3 family rates by region/age (historical + current)
      informal/
        rates.yaml                         # UNIT_3 informal rates by county/age
      infant_age_threshold.yaml            # Infant age cutoff
      unit_count.yaml                      # 3/2/1 multiplier numerator (formula divides by 3)
      region_bc_counties.yaml              # Region-county mappings (Baltimore City)
      region_u_counties.yaml
      region_v_counties.yaml
      region_w_counties.yaml
      region_x_counties.yaml
      region_y_counties.yaml
      region_z_counties.yaml

  variables/gov/states/md/msde/ccs/
    md_ccs.py                              # Main benefit variable
    md_ccs_enrolled.py                     # Input: currently enrolled (for continuation eligibility)
    md_ccs_countable_income.py             # Income calculation (adds + SE deduction)
    md_ccs_income_eligible.py              # Income eligibility (initial vs continuation, SMI freeze)
    md_ccs_weekly_copay.py                 # Copayment with exemptions + federal cap
    md_ccs_provider_type.py                # Provider type input (LICENSED_CENTER/LICENSED_FAMILY/INFORMAL/NONE)
    md_child_care_subsidies.py             # State aggregator
    eligibility/
      md_ccs_activity_eligible.py          # Work/education activity eligibility
      md_ccs_eligible.py                   # Overall eligibility
      md_ccs_eligible_child.py             # Child-level eligibility
    payment/
      md_ccs_age_group.py                  # Child age group (infant vs regular)
      md_ccs_payment_rate.py               # Provider reimbursement rate lookup (UNIT_2/1 derived)
      md_ccs_region.py                     # Market region assignment (REGION_U..Z + REGION_BC)
      md_ccs_service_unit.py               # Service unit determination

  variables/gov/usda/snap/
    receives_snap.py                       # NEW bare-input bool (federal-level), to avoid SNAP→CCS cycle

  tests/policy/baseline/gov/states/md/msde/ccs/
    md_ccs.yaml                            # 5 benefit tests
    md_ccs_activity_eligible.yaml          # 7 activity eligibility tests
    md_ccs_age_group.yaml                  # 4 age group tests
    md_ccs_countable_income.yaml           # 4 income calculation tests
    md_ccs_eligible.yaml                   # 4 eligibility tests
    md_ccs_eligible_child.yaml             # 5 child eligibility tests
    md_ccs_income_eligible.yaml            # 5 income eligibility tests
    md_ccs_payment_rate.yaml               # 7 payment rate tests
    md_ccs_region.yaml                     # 7 region tests
    md_ccs_service_unit.yaml               # 6 service unit tests
    md_ccs_weekly_copay.yaml               # 8 copayment tests
    integration.yaml                       # 7 integration tests
    edge_cases.yaml                        # 12 edge case tests

Totals: 24 parameter files, 15 variable files (14 MD + 1 federal receives_snap), 13 test files (81 test cases)

Also modified:

  • policyengine_us/parameters/gov/hhs/ccdf/child_care_subsidy_programs.yaml — register md_child_care_subsidies
  • policyengine_us/parameters/gov/household/household_state_benefits.yaml — include md_child_care_subsidies so the benefit flows into household net income
  • policyengine_us/programs.yaml — add CCS to program registry

Test plan

  • 81 tests pass locally
  • CI passes

hua7450 and others added 2 commits March 26, 2026 11:10
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Adds eligibility, income calculation, copayment, and provider reimbursement
rate parameters for Maryland's CCS program (COMAR 13A.14.06).

Includes formal rates (7 regions) and informal rates (24 counties),
enum-keyed parameter lookups, and 78 test cases.

Closes PolicyEngine#7888

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@codecov
Copy link
Copy Markdown

codecov Bot commented Mar 26, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (16a0dce) to head (56a5da2).
⚠️ Report is 30 commits behind head on main.

Additional details and impacted files
@@             Coverage Diff             @@
##             main     #7889      +/-   ##
===========================================
+ Coverage   94.69%   100.00%   +5.30%     
===========================================
  Files           7        15       +8     
  Lines         113       259     +146     
  Branches        2         1       -1     
===========================================
+ Hits          107       259     +152     
+ Misses          6         0       -6     
Flag Coverage Δ
unittests 100.00% <100.00%> (+5.30%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 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 and others added 5 commits March 26, 2026 12:50
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add region_w_counties.yaml and update md_ccs_region.py
- Add MD CCS to programs.yaml registry
- Add #page=XX to 5 session law PDF references
- Fix continuation.yaml to cite state source as primary
- Document frozen SMI limitation with TODO

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Replace all broken dsd.maryland.gov URLs with regs.maryland.gov
- Fix continuation.yaml: .03(B) → .03(H) (Income Eligibility Scale)
- Fix self_employment_deduction_rate.yaml: (F)(6) → (F)(8)(a)(i)
- Fix sources.yaml: (F)(3)-(8) → .02 (Gross income definition)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@hua7450 hua7450 changed the title Implement Maryland CCAP (Child Care Assistance Program) Implement Maryland Child Care Scholarship (CCS) May 20, 2026
@hua7450 hua7450 marked this pull request as ready for review May 20, 2026 19:27
@hua7450 hua7450 requested a review from PavelMakarchuk May 20, 2026 20:49
Copy link
Copy Markdown
Collaborator

@PavelMakarchuk PavelMakarchuk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Program Review — PR #7889: Maryland Child Care Scholarship (CCS)

Author: hua7450
Diff: 3,807 lines (new state program)
CI: All functional checks pass; codecov/patch soft fail (expected for new program)
Posting mode: LOCAL ONLY

Source Documents

Eight authoritative sources consulted:

  1. COMAR 13A.14.06 (Child Care Scholarship Program regulations) — HTML extract; defines eligibility, gross income (.02B(28)), countable income sources (.03F(8)), copay matrix (.12), unit-rate derivation (.11)
  2. Chapter 525 of 2022 (HB 995) — child-support pursuit prohibition; effective July 1, 2022; does NOT exclude child support from income
  3. Chapter 717 of 2024 (SB 362) — §9.5-111(d) statutory copay cap anchored to Jan 1, 2024 operational levels
  4. February 2026 W&M Committee Briefing — slide 21 (SMI base-year freeze pattern), slide 22 (75% SMI initial threshold administrative origin)
  5. MSDE Rate page (current) — operational rate workbooks
  6. MSDE Rate page (Wayback Machine, historical) — pre-2024 rate snapshots
  7. January 2025 OCC Info Session — MSDE program operations
  8. 45 CFR 98.21(b), 98.45(l)(3) — federal CCDF continuation eligibility (85% SMI) and 7% co-payment cap

Critical (Must Fix Before Merge)

1. Child support exclusion regulatorily unsupported

Finding: income/countable_income/sources.yaml omits child_support_received and cites Chapter 525 of 2022 as authority for excluding it. This citation is incorrect:

  • Chapter 525 of 2022 (HB 995) only prohibits MSDE from requiring child-support pursuit as a condition of eligibility. It does NOT exclude child support from gross income.
  • COMAR 13A.14.06.02B(28)(b)(x) explicitly INCLUDES "Alimony and child support" in gross income.
  • COMAR 13A.14.06.03F(8)(c) instructs contractors to count child support actually received.

Fix options:

  • Add child_support_received to countable income sources list, OR
  • Locate authoritative MSDE policy memo (not Chapter 525) supporting the exclusion and update citation accordingly.

Without one of these, Maryland CCS income test under-counts gross income and over-grants eligibility/under-charges copay.

2. md_child_care_subsidies aggregator missing from household-level wiring

Finding: md_child_care_subsidies aggregator variable is not included in:

  • policyengine_us/variables/household/income/household/household_benefits/household_state_benefits.yaml
  • policyengine_us/variables/household/income/spm_unit/spm_unit_benefits.py

Impact: Silent under-counting of household and SPM unit benefits in microsimulation. The federal child_care_subsidy_programs aggregator picks it up, but downstream household income computations omit it.

Precedent: Same asymmetry was flagged in the WA WCCC review and fixed in the AL CCSP review. Peer state CCDF programs (DE/CO/CA/NE/SC/VA) all appear in household_state_benefits.yaml. Confirmed by both the code-validator pass and the rates audit pass.

Fix: Add md_child_care_subsidies to both files, matching the peer-state pattern.


Should Address

  1. Changelog filename typo. changelog.d/md-ccap.added.md should be changelog.d/md-ccs.added.md (same pattern observed in AL CCSP / AR SRA reviews).

  2. receives_snap naming convention. Breaks the project convention is_X_enrolled (cf. is_tanf_enrolled, is_wccc_enrolled, chip_enrolled). Rename to is_snap_enrolled and add a reference field. Cycle-avoidance justification is real and well-documented and should be preserved as an inline comment.

  3. Hard-coded /3 divisor. md_ccs_payment_rate.py:3676 divides by literal 3 to convert UNIT_3 to UNIT_1. Derive from p.unit_count["UNIT_3"] for parameter-driven correctness.

  4. PR body's "HHS SMI starts 2021" claim is wrong. Actual HHS SMI dataset begins 2017-10-01. The deferred-backfill issue (#8355) may be moot. Update PR body. Reconsider whether smi_frozen_year 2018 is needed if the backfill isn't necessary.

  5. 45 CFR citation typo. Code comment cites 98.45(k), but the 7% copay cap is actually at 98.45(l)(3). Fix the code comment.

  6. Chapter 525 effective date mismatch. sources.yaml uses 2022-05-01 as start date, but Ch 525 effective date is July 1, 2022. Either use 2022-07-01 or document the rationale.

  7. 75% SMI threshold not actually in Chapter 525. This value came from MSDE administrative action documented in the February 2026 W&M briefing slide 22. initial.yaml citation to Ch 525 is misleading. Fix citation to slide 22 plus MSDE memo.

  8. Multi-sentence parameter descriptions (skill requires single sentence) in:

    • smi_freeze_in_effect.yaml
    • weekly_amount.yaml
    • licensed_center.yaml
    • licensed_family.yaml
    • unit_count.yaml
  9. Missing tests — coverage gaps:

    • Region V formal rates entirely untested (only 5 of 7 regions have rate-lookup tests)
    • UNIT_1 formal derivation untested (only informal hourly tested)
    • SMI freeze critically under-tested: only FY2024 path; missing FY2019-2022 (2018 SMI) and explicit FY2025+ unfrozen assertions
    • Historical SMI rate transitions (50% / 65% / 75%) — zero coverage at periods 2016 / 2019 / 2020 / 2022
    • No exact-at-threshold tests for 75% / 85% SMI
    • Only 2 of 14 income sources tested (employment, self-employment)
    • No federal-aggregator integration test (md_ccs → md_child_care_subsidies → child_care_subsidy_programs)
  10. Test count discrepancy. PR body says 53 tests; actual count is 81 across 14 YAML files. Update PR body.

  11. md_ccs_region default discrepancy. Code default is REGION_W, but tests document "default = Region Z (Allegany)". Reconcile.

  12. Reference precision:

    • 11 payment files cite the MSDE rates landing page (navigation-only); replace with direct workbook links.
    • copay/unit_hours.yaml 3-hr / 6-hr boundaries are not in COMAR .11; cite the operational MSDE source.
    • income/countable_income/sources.yaml cites COMAR .02B(28) but the operational source list is at .03F; add .03F cite.
    • Verify the #page=19 anchor in CH_717_sb0362E.pdf actually lands on the copay freeze section.
  13. Copay description overreach. "Frozen at Jan 1, 2024 levels by Chapter 717" overstates Ch 717's scope. Chapter 717 is a one-directional cap with a legislative-notification escape valve. Rewrite YAML description accordingly.

  14. Rank-aware copay logic. COMAR .12A(3)(a)-(c) assigns the highest copay to the youngest child; PR code ignores birth-order assignment. Defensible under the current flat $1/$2/$3 schedule but breaks if the regional matrix is restored. Document the assumption explicitly in code comments.

  15. unit_hours.yaml boundary. 3.0001 epsilon is brittle; consider inclusive/exclusive boundary semantics or document the convention.

  16. Copay citation chain. Ch 717 + MSDE operational schedule should be presented as a coherent chain, not a single citation that overreaches.

  17. Receipt-tracking variable scope. receives_snap is currently MD-specific; consider whether a generic is_snap_enrolled would benefit other state programs.


Suggestions

  1. Add reconciliation comments cross-referencing parameter YAML headers in md_ccs_payment_rate.py.
  2. Add inline comment in receives_snap.py documenting the cycle anti-pattern rationale and why direct dependency on snap is avoided.
  3. integration.yaml Case 3: clarify that the TCA waiver path isn't actually exercised in the test scenario.
  4. Section 8 Housing Choice Voucher and Guaranteed Access Grant copay waivers from Chapter 525 are properly deferred — open a follow-up issue tracking Phase-2 work.
  5. smi_frozen_year.yaml — clarify base-year tag semantics in description.
  6. federal_cap_rate.yaml effective date — consider 2024-08-01 (CCDF Final Rule binding date) instead of 2022-05-01.

Investigated and Cleared

$1 / $2 / $3 copay schedule — DEFENSIBLE

COMAR formally codifies a different regional × age × birth-order matrix ranging $2.42–$90.46. However:

  • Chapter 717 of 2024 §9.5-111(d) anchors the flat operational schedule statutorily.
  • MSDE operational practice has used flat $1/$2/$3 (1st/2nd/3rd child) since Jan 1, 2024.
  • Code-path verifier confirmed values reflect operational practice with statutory anchor.

Action retained as a SHOULD-address: clarify citation chain (Ch 717 is a one-directional cap, not full statutory replacement of COMAR matrix) and rewrite copay description.

7% cap uses countable income (not literal gross) — DEFENSIBLE

Code uses md_ccs_countable_income, which IS COMAR's "gross income for CCS" per .03F(3) + .02B(28) + .03F(8)(a)(i). 45 CFR is silent on which income base applies to the 7% cap. No regulatory mismatch.

Only nit retained: code comment citation typo (98.45(k) → 98.45(l)(3)).


PDF Audit Summary

Category Count
Confirmed correct data points ~80 across 15 categories
Mismatches 1 (child support exclusion)
Investigated and cleared 2 ($1/$2/$3 copay; 7% cap base)

Confirmed-correct items:

  • All 56 UNIT_3 formal rate cells (7 regions × 2 provider types × 2 ages × 2 schedules) match PR-body transcription exactly
  • UNIT_2 / UNIT_1 derivation (× 2/3, × 1/3) per COMAR .11.B(3) / .C(2) / .D
  • 24 jurisdictions (23 counties + Baltimore City) allocated exactly once across 7 region files
  • Informal 24-county × 2 age structure plausible (operational post-2020 schedule)
  • Age 13 / 19 cutoffs match COMAR .02.B(11) verbatim
  • 30% self-employment deduction per COMAR .03F(8)(a)(i)
  • 85% SMI continuation per 45 CFR 98.21(b)
  • 75% SMI initial threshold value correct (citation needs fix)
  • SMI base-year freeze pattern (smi_freeze_in_effect + smi_frozen_year) correctly aligns with W&M slide 21
  • TCA / SSI categorical exemption from income test
  • 3-children copay cap
  • 7% federal cap
  • Benefit formula order
  • Federal aggregator wiring (child_care_subsidy_programs.yaml + programs.yaml)
  • Citizenship via federal is_ccdf_immigration_eligible_child reuse
  • receives_snap cycle reality

Validation Summary

Check Result
Regulatory Accuracy 1 critical + 2 should
Reference Quality 0 critical + 6 should + 5 suggestions
Code Patterns 2 critical + 8 should
Test Coverage 0 critical + 7 should-add
PDF Value Audit 1 mismatch / ~80 data points confirmed
CI Status All functional PASS; codecov/patch soft fail (expected)

Review Severity: REQUEST_CHANGES

Two critical findings block merge:

  1. Child support exclusion lacks regulatory support. Chapter 525 of 2022 doesn't actually exclude child support from income; COMAR explicitly includes it. Either add child_support_received to countable income, or find authoritative MSDE policy citation supporting the exclusion.

  2. md_child_care_subsidies aggregator missing from household_state_benefits.yaml causes silent under-counting in microsim. Same pattern WA WCCC review flagged; AL CCSP fixed it.

Both fixes are localized. Otherwise this is a high-quality Phase-1 implementation:

  • 56 rate cells verified exact against COMAR-derived workbooks
  • Full federal CCDF helper reuse (is_ccdf_immigration_eligible_child)
  • Correct SMI base-year freeze pattern aligned with W&M slide 21
  • Correct benefit formula order
  • Sensible deferrals (Section 8 / GAG waivers) for Phase 2

Next Steps

Run /fix-pr 7889 to apply the two critical fixes and the should-address items.

hua7450 and others added 2 commits June 1, 2026 00:29
… fix citations

Critical:
- Count child_support_received in MD CCS countable income per COMAR
  13A.14.06.02B(28)(b)(x) and .03F(8)(c); Chapter 525 does not exclude it
- Add md_child_care_subsidies to household_state_benefits.yaml (both brackets)
  so the benefit flows into household net income

Should-address:
- 45 CFR 98.45(k) -> (l)(3) for the 7% copayment cap
- Single-sentence parameter descriptions (5 files); drop Chapter 717 freeze overreach
- Add slide 22 citation for the 75% SMI initial threshold
- Rename changelog fragment md-ccap -> md-ccs

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@hua7450
Copy link
Copy Markdown
Collaborator Author

hua7450 commented Jun 1, 2026

Thanks for the thorough review, @PavelMakarchuk — addressed in 875088f7. Summary of what changed and where I pushed back, with the verification I ran.

Critical

1. Child support exclusion — fixed ✅
You're right. I pulled the actual COMAR text (regs.maryland.gov + the mdrules.elaws.us mirror) and re-read the full Chapter 525 bill: .02B(28)(b)(x) lists "Alimony and child support" together as an inclusion, and .03F(8)(c) counts it on a receipt basis. Ch 525 only bars MSDE from requiring child-support pursuit — it doesn't exclude it from income.

  • Added child_support_received to income/countable_income/sources.yaml; removed the Ch 525 "excluded" comment/refs; re-cited COMAR .02B(28)(b)(x) + .03F(8)(c).
  • Updated md_ccs_countable_income.yaml Case 4 (now counted → $3,000) and the variable reference.
  • Documented the real .02B(28)(c) carve-outs (support paid for a child outside the household, $2,500 intercepts) as not-modeled.

2. md_child_care_subsidies wiring — partially fixed, with a pushback

  • ✅ Added to household_state_benefits.yaml (both date brackets) — confirmed it was genuinely missing from household_net_income.
  • ❌ I did not add it to spm_unit_benefits.py. Tracing the chain: md_child_care_subsidies already flows into the federal child_care_subsidies aggregator, which nets out of childcare_expensesspm_unit_spm_expenses → so it already raises SPM net income. Adding it to spm_unit_benefits too would double-count it. No peer state's _child_care_subsidies wrapper is in that list either (only co_ccap_subsidy). So household-list only.

Should-address (done)

  • Changelog md-ccapmd-ccs
  • 45 CFR 98.45(k)98.45(l)(3) (verified on Cornell LII) ✅
  • Single-sentence descriptions on the 5 flagged param files ✅
  • Copay description: dropped the Ch 717 "freeze" overreach → "cap" ✅
  • 75% SMI citation ✅ — small correction: the threshold history is on slide 21; slide 22 in this deck is the Market Rate Survey, so I cited slide 21.

Clarifications / pushbacks

  • receives_snap name kept. It reads as "actually receives SNAP," which is semantically distinct from is_X_enrolled enrollment. The cycle-avoidance rationale is documented at the call site (md_ccs_weekly_copay.py:26-29).
  • Rank-aware copay — already documented in code (md_ccs_weekly_copay.py:43-46): we don't track the youngest/2nd/3rd-child distinction, moot under the flat $1/$2/$3 schedule.
  • SNAP/WIC copay waiver authority — confirmed it's genuinely Ch 525 (Educ. Art. § 9.5‑113 lists WIC/SNAP/HCV/SSI/TCA); the statute's employment/education condition is implicitly satisfied via md_ccs_activity_eligible.
  • SMI threshold dates — verified against W&M slide 21: the param's 2018-07-01: 0.65 (FY2019) and 2022-07-01: 0.75 (FY2023) are correct. Also corrected the PR-body attribution: the 65% expansion wasn't Ch 595/596 of 2019 (that bill sets reimbursement-rate percentiles, not income eligibility) — it was a 2018 budget/admin action codified in COMAR .03H.

Deferred to follow-up

  • Expanded test coverage (Region V, UNIT_1 formal, SMI-freeze years, historical transitions, at-threshold, federal-aggregator integration test).
  • Full reference-precision sweep (direct workbook links, #page=19 anchor check).

PR description updated to match all of the above.

@hua7450 hua7450 requested a review from PavelMakarchuk June 1, 2026 13:34
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 CCAP (Child Care Assistance Program)

2 participants