Skip to content

Update MA CCFA parent fees: fix two fee percentages, add FY2026 income brackets - #9369

Merged
hua7450 merged 4 commits into
PolicyEngine:mainfrom
hua7450:ma-ccfa-copay-fy2026
Sep 2, 2026
Merged

Update MA CCFA parent fees: fix two fee percentages, add FY2026 income brackets#9369
hua7450 merged 4 commits into
PolicyEngine:mainfrom
hua7450:ma-ccfa-copay-fy2026

Conversation

@hua7450

@hua7450 hua7450 commented Sep 1, 2026

Copy link
Copy Markdown
Collaborator

Summary

Three changes to the Massachusetts CCFA parent fee encoding, all verified cell-by-cell against the official EEC workbooks:

  1. Retroactive fix of two fee percentages. The FY2025 and FY2026 Parent Fee Tables both list 4.45% at fee level 3 and 7.6% at fee level 10 — the only values consistent with the chart's uniform 0.45-percentage-point progression. The encoded 4.5%/7.5% were transcription errors, so they are corrected on the existing 2023-10-01 layer rather than dated. The model previously overcharged level-3 families and undercharged level-10 families.
  2. FY2026 income brackets (Parent Fee Table effective October 1, 2025): every family size's bracket widened (family of 2: $218 → $231 per level; family of 12: $391 → $418), encoded as a 2025-10-01 layer. Fee percentages are otherwise identical between FY2025 and FY2026, so no new fee_percentages layer is needed.
  3. Fiscal-year poverty-guideline anchor (added in the review round). ma_ccfa_fpg is now a MONTH variable, so each fiscal year's chart switches to its own poverty guidelines in October (FY2026 → the 2025 guidelines from October 2025). It was YEAR-defined, which made its October branch unreachable and left October–December on the previous fiscal year's anchor.

Found by the #9365 copay sweep.

Encoding: literal chart dollars, exact reproduction

The bracket parameter stores the charts' printed dollar bracket widths (income_bracket_width.yaml, replacing the previous derived income-ratio increments), and both copay formulas anchor at the chart FPG — the printed fee level 1 ceiling, i.e. the monthly FPG rounded half up, which the chart's step 4 itself designates ("the FPG ... can be found as the upper income limit of Fee Level 1"). Fee level = 1 + ⌈income above chart FPG ÷ width⌉; fee = level percentage × income above chart FPG.

Verification against both workbooks:

  • All 1,210 printed min/max bracket cells (28 levels × 11 family sizes × 2 editions) reconstruct exactly from base + width.
  • A full-dollar simulation (310,640 incomes, $0 to each column's 85%-SMI ceiling) reproduces the chart's fee-level assignment with zero mismatches in both editions.
  • The chart-FPG anchor equals floor(monthly FPG + 0.5) for every family size in both years (FY2025: 20,440/12 → 1,703; FY2026: 21,150/12 → 1,763).
Size 2 3 4 5 6 7 8 9 10 11 12
FY2025 width $218 $268 $317 $367 $417 $412 $408 $404 $400 $396 $391
FY2026 width $231 $283 $336 $389 $442 $438 $434 $430 $426 $422 $418

Sources

Both are XLSX workbooks (mass.gov blocks automated fetchers; verified from manually downloaded copies).

Changes

File Change
copay/fee_level/fee_percentages.yaml Level 3 → 0.0445, level 10 → 0.076 (retroactive); FY2026 reference; FY2024-proxy note
copay/fee_level/income_bracket_width.yaml New: printed dollar widths, 2023-10-01 (FY2025) and 2025-10-01 (FY2026) layers
copay/fee_level/income_ratio_increments.yaml Removed (superseded by the dollar widths)
copay/fee_level/maximum_level.yaml FY2026 reference
ma_ccfa_copay_level.py Fee level from dollar widths above the chart FPG; FY2026 reference; label CCSP → CCFA
ma_ccfa_base_copay.py Subtracts the chart FPG per the chart's step 4; chart references added
ma_ccfa_fpg.py MONTH-defined, returns the monthly guideline for the fiscal year containing the month; FY2026 reference
tests/.../ma_ccfa_fpg.yaml 2 new year-keyed cases pinning the turnover: September 2025 → 1,703.33 (2024 guidelines), October 2025 → 1,762.50 (2025 guidelines)
tests/.../ma_ccfa_base_copay.yaml 15 new cases: level-3 and level-10 percentage fixes; the FY2026 worked example (family of 2, $1,850 → 87 × 4% = $3.48); a bracket-move case; family of 7; bracket-ceiling and one-dollar-above pairs for family sizes 2, 4 and 6 (FPG 1,762.50 rounds up to 1,763, 2,679.17 rounds down to 2,679 — distinguishing half-up rounding from half-to-even and ceiling); family of 10; fee level 28 cap at $10,000; family of 3 at $2,700 moving from level 4 (FY2025) to level 3 (FY2026)
tests/.../ma_ccfa_copay_level.yaml Renamed from ma_ccsp_copay_level.yaml (contents unchanged)
tests/.../ma_ccfa.yaml One copay expectation moves 4 cents (363.16 → 363.12) from the chart-FPG anchor

Note: the FY2026 chart's printed example result ("$2.28") is an arithmetic slip in the source — its own stated calculation is 4% × ($1,850 − $1,763) = $3.48, which the model now returns exactly.

Review response

All five should-address items from the /review-program report are addressed, plus the reference, boundary-case and second-size suggestions:

  • codecov/project — the reviewer's diagnosis was right: the one uncovered branch was if month >= 10 in ma_ccfa_fpg.py, which a YEAR-defined variable can never take. Rather than delete it or add a pragma, the variable is now MONTH-defined so the branch does what it was written to do, and the new ma_ccfa_fpg.yaml cases cover both arms.
  • FPG rounding — the ceiling/+1 pairs above pin half-up rounding against both half-to-even (family of 2) and ceiling (family of 4).
  • FY2024 proxy note, in-PR cap case, description wording — done as suggested.
  • Not taken: Wayback captures (the mass.gov slugs are per fiscal year, so they do not rotate; the 403 is bot-blocking only).

Not modeled / unchanged (by design)

  • Maximum fee level (28), multi-child ratios, and the copay formula structure — identical in both chart editions.
  • The FY2026 workbook's bundled SMI eligibility chart (50/85/100% SMI) belongs to the income-eligibility tree, not the copay tree, and is out of scope here (as are the CCFA-26-01 eligibility changes effective 1/1/2026).

Part of #9365.

Test plan

  • policyengine-core test policyengine_us/tests/policy/baseline/gov/states/ma: 441 passed
  • MA partner contract tests (partners/analytics_coverage/signatures/ma.yaml, edge_cases/federal/childcare/{ccdf,head_start}/ma.yaml) and RI CCAP integration: 18 passed
  • CI passes

🤖 Generated with Claude Code

https://claude.ai/code/session_01Gu18CFcw8DPpLrhQQ8eTRs

The FY2025 and FY2026 Parent Fee Tables both list 4.45% at fee level 3
and 7.6% at fee level 10; the encoded 4.5%/7.5% were transcription
errors, fixed retroactively on the 2023-10-01 layer. The FY2026 table
(effective October 1, 2025) widens every family size's income brackets;
encoded as a 2025-10-01 layer of income ratio increments derived from
the chart's constant dollar bracket widths over the 2025 poverty
guidelines, validated dollar-by-dollar against the chart's brackets.
Fee percentages are otherwise unchanged between FY2025 and FY2026.

Part of PolicyEngine#9365.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ASXyC4DNpinDieKCdkNgL8
@codecov

codecov Bot commented Sep 1, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (2a0cbba) to head (3ffb1ca).
⚠️ Report is 11 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff            @@
##              main     #9369   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files            1         3    +2     
  Lines           20        57   +37     
  Branches         1         1           
=========================================
+ Hits            20        57   +37     
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.

@hua7450
hua7450 marked this pull request as ready for review September 1, 2026 02:56
Replaces the derived income-ratio increments with the charts' literal
dollar bracket widths (income_bracket_width.yaml) and anchors both
copay formulas at the chart FPG (the printed fee level 1 ceiling,
monthly FPG rounded half up). All 1,210 printed bracket cells in the
FY2025 and FY2026 charts reconstruct exactly from base plus width, and
a full-dollar simulation (310,640 incomes) now reproduces every chart
assignment with zero mismatches in both editions.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ASXyC4DNpinDieKCdkNgL8
@hua7450
hua7450 requested a review from DTrim99 September 1, 2026 18:28
@DTrim99

DTrim99 commented Sep 1, 2026

Copy link
Copy Markdown
Collaborator

PR #9369 Review — MA CCFA parent fees

Program review

Massachusetts Child Care Financial Assistance (CCFA) parent fees. This PR
(1) corrects two fee percentages in the EEC parent-fee schedule (fee level 3:
4.5% → 4.45%; fee level 10: 7.5% → 7.6%), (2) adds the FY2026 income-bracket
layer, and (3) restructures the fee-level assignment from an FPG-ratio increment
model to a dollar-bracket model. The old income_ratio_increments.yaml parameter
is deleted and replaced by income_bracket_width.yaml (dollar widths by family
size 2–12, per fiscal year).

The restructured level formula is:

fee_level = 1 + ceil((income − roundedFPG) / bracket_width)   capped at maximum_level = 28

with half-up FPG rounding roundedFPG = np.floor(fpg + 0.5).

The restructure logic and every changed/added value are verified. The formula
reproduces the EEC chart's fee-level assignment at every printed bracket boundary
and at the top-bracket cap, for every family size and both fiscal years; all fee
percentages and bracket widths match the official charts exactly.

Source documents

Both were read directly from the source XLSX workbooks (via openpyxl, captured
through the Wayback Machine because mass.gov WAF-blocks automated tooling with
HTTP 403; the live hrefs resolve normally for real users).

Branch status

Branch is 13 commits behind main. Informational only — not a review finding.

Critical

None. Every changed value traces to an authoritative EEC source that
corroborates the exact figure, the restructured formula reproduces the chart at
every boundary, and there is no untested restructured-formula branch (the new
formula is entirely straight-line and is executed by the added tests).

Should address

  1. codecov/project check is failing (coverage ratio gate). This is the one
    failing CI check. It is not a test or build failure and not an
    untested new branch. Diagnosis: the whole-project coverage ratio has
    tipped just below target, driven by a pre-existing uncovered branch in
    ma_ccfa_fpg.py — the if month >= 10: (FY-current-October) arm, which is
    unreachable by YAML tests because their periods are YYYY or YYYY-01, so
    month is always 1 and only the else arm runs. ma_ccfa_fpg.py's formula
    is unchanged by this PR (only its reference tuple changed), so this is a
    pre-existing gap surfaced by the ratio, not a newly introduced one; this PR's
    churn (deleting a parameter, adding the FY2026 layer, rewriting the formula)
    shifted the coverage denominator enough to expose it.
    Remedy: add a test that reaches the month >= 10 FPG branch (e.g. a
    microsimulation-level test), or otherwise lift patch/project coverage, so the
    gate passes. If the branch is genuinely unreachable through YAML by
    construction, a # pragma: no cover with an explanatory comment is the honest
    alternative. Confirm against the actual codecov annotation before acting.

  2. No FPG half-up-rounding boundary test. The half-up rounding
    (np.floor(fpg + 0.5)) is the change that shifts the integration case to
    363.12 / 1236.88, but no test isolates it. Every FPG in the suite is asserted
    as a whole dollar; the rounding is exercised only incidentally as a ~4-cent
    shift (family-of-3 raw FPG ≈ 2151.67 → 2152). Nothing distinguishes half-up
    from np.round (round-half-to-even) or truncation. Add a case at a family
    size whose monthly FPG has a fractional part ≥ 0.5 and one < 0.5, pinning the
    copay so np.floor(x + 0.5) is distinguishable — otherwise a future rounding
    "cleanup" would pass the whole suite. (FY2026 family-of-2 FPG is exactly
    1762.5, a true half, so this boundary genuinely matters.)

  3. fee_percentages.yaml lacks the FY2024-proxy caveat its sibling has. The
    4.45%/7.6% fixes and the bracket widths are dated on the 2023-10-01
    (FY2024) layer but are corroborated by the FY2025 chart used as an FY2024
    proxy. income_bracket_width.yaml documents this inline ("Can't find official
    documentation for FY2024, assuming the same as FY2025");
    fee_percentages.yaml carries no equivalent note. Add a mirroring comment so
    the assumption is documented in both files. (The corroboration is sound — both
    charts print identical percentages — this is a traceability gap, not a wrong
    value.)

  4. maximum_level cap is pinned only in an unmodified, mis-named file. The
    cap (level 28) is exercised solely by the pre-existing
    copay/ma_ccsp_copay_level.yaml Case 5 (family of 2, $8,000 → 28), whose
    filename says ma_cc**sp** not ma_ccfa. The PR restructured the very formula
    the cap sits on but added no cap case of its own. Add a maximum_level case to
    copay/ma_ccfa_base_copay.yaml (income far above the top bracket → level 28,
    not 29/30) so the cap is defended inside the PR's own diff.

  5. Parameter description wording nit. income_bracket_width.yaml's
    description "Massachusetts uses these monthly income bracket widths ..." uses
    the plural "these ... widths" rather than the standard generic singular
    placeholder. It is consistent with the existing file family (the sibling
    fee_percentages.yaml and the deleted file share the pattern), hence
    should-address, not critical. Suggested: "Massachusetts sets fee levels using
    this monthly income bracket width per household size under the Child Care
    Financial Assistance program."

Suggestions

  • Add durable/archived (Wayback) citations alongside the live mass.gov hrefs.
    mass.gov returns HTTP 403 to bots for both charts (bot-blocking, not a broken
    link — real browsers resolve the files), and the XLSX files may rotate on the
    next fiscal-year update, so archived captures would improve auditability.
  • Normalize href form between params and variables: the parameter YAML hrefs omit
    /download while the variable reference tuples include it. Both are
    well-formed mass.gov patterns; a single consistent form is cleaner.
  • Add maximum_level.yaml's FY2026 reference for parity with the three files this
    PR updated (currently carries only the FY2025 reference).
  • Add explicit bracket-boundary level cases: income exactly on a bracket
    ceiling (income = fpg + k*width) and one dollar above, to lock the ceil
    semantics; plus a size-6 (width peak) and a large-family (size ≥ 10) case, since
    the non-monotonic widths are currently spot-checked only on the declining side.
  • Consider a paired FY2025/FY2026 case at a size other than family-of-2 so the
    2023-10-012025-10-01 layer transition is pinned at a second size.

Value audit summary

Fully clean — 0 mismatches. Independently re-audited against both official
EEC XLSX charts:

  • Fee percentages L2–L28 match exactly, with a uniform +0.45pp progression
    (level 2 = 4.00% → level 27 = 15.25%; the single non-0.45 step L27→L28 is the
    chart's own capped top level). The two corrected cells — level 3 = 4.45%
    and level 10 = 7.6% — sit exactly on the ramp; the prior 4.5%/7.5% broke
    it and matched neither chart, confirming they were transcription errors.
  • FY2026 bracket widths {231, 283, 336, 389, 442, 438, 434, 430, 426, 422,
    418} and FY2025 widths {218, 268, 317, 367, 417, 412, 408, 404, 400, 396,
    391} match exactly (family sizes 2–12), including the non-monotonic peak at
    family size 6
    (442 / 417).
  • FPG anchors match (FY2026 family-of-2 = 1763; FY2025 family-of-2 = 1703).
  • Retroactive fee-% fix on the 2023-10-01 layer is source-justified: the
    fee-% column is byte-for-byte identical across FY2025 and FY2026, so applying
    the corrected column back to the effective date is source-accurate.
  • The chart's own worked example prints "$2.28" where its stated method (87 ×
    0.04) yields 3.48 — an arithmetic slip in the source; the test correctly
    asserts the computed 3.48, not the printed slip.

Validation summary

Check Result
Value audit (fees + widths + FPG) Clean — 0 mismatches, both fiscal years
Restructured formula vs chart Reproduces every bracket boundary + top cap
FPG half-up rounding Correct and consistent across both consumers
Deleted income_ratio_increments.yaml Clean removal — zero stale consumers (git grep)
Hard-coded policy values None
References All trace to authoritative EEC sources
Changelog Present (ma-ccfa-copay-fy2026.fixed.md, top-level, .fixed)
CI checks 32 functional checks pass; 1 failing: codecov/project (coverage ratio)

The codecov/project failure is a coverage-ratio gate, not a test/build failure —
see Should Address #1 for the pre-existing-branch diagnosis and remedy.

Review severity

COMMENT. No critical issues. This is a solid values fix plus a well-verified
formula restructure. The should-address items are coverage and reference/
documentation improvements — chiefly clearing the codecov/project ratio gate
(driven by a pre-existing uncovered branch) and adding an FPG-rounding boundary
test.

Next steps

Run /fix-pr 9369 to apply the should-address items (codecov coverage, FPG
rounding boundary test, fee_percentages.yaml FY2024 caveat, in-PR
maximum_level cap case, description wording).

🤖 Generated with Claude Code /review-program

hua7450 and others added 2 commits September 1, 2026 15:37
Make ma_ccfa_fpg a monthly variable so each fiscal year's Parent Fee
Table switches to its own poverty guideline anchor in October, and pin
the September/October 2025 turnover. Add bracket-ceiling and one-dollar-
above cases for family sizes 2, 4 and 6 (distinguishing half-up FPG
rounding from half-to-even and ceiling), a large-family case, an in-PR
fee level 28 cap case, and a second-size FY2025/FY2026 pair. Rename the
mis-named ma_ccsp_copay_level test file and label, document the FY2024
proxy in fee_percentages.yaml, and normalize the chart references.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Gu18CFcw8DPpLrhQQ8eTRs
@DTrim99

DTrim99 commented Sep 2, 2026

Copy link
Copy Markdown
Collaborator

PR #9369 Re-Review — MA CCFA parent fees (fee-% fix + FY2026 brackets + dollar-bracket restructure + FPG YEAR→MONTH)

Re-review note

This is a re-review following the author's response to a prior COMMENT review that raised five
should-address items. Status of those five:

  1. codecov / FPG-branch coverage → RESOLVED. The new ma_ccfa_fpg.yaml Cases 4 and 5 cover
    both sides of the fiscal-year switch (2025-09 → else branch → 1,703.33; 2025-10 →
    month >= 10 branch → 1,762.50). CI is now green (the prior codecov/project failure is
    resolved).
  2. FPG half-up-rounding boundary test → RESOLVED. ma_ccfa_base_copay.yaml Case 9 (half-up
    pushes up, keeping level 2) and Case 11 (half-up rounds down) pin both directions of
    np.floor(x + 0.5); the 1,762.50 exact-half case would fail under banker's rounding.
  3. FY2024-proxy caveat on fee_percentages.yaml → RESOLVED. The caveat now documents that the
    2023-10-01 layer carries FY2025 values as a proxy for the un-located FY2024 chart.
  4. Durable Wayback citation → DOWNGRADED to minor SUGGESTION. The mass.gov /download links
    WAF-block automated clients (HTTP 403) but resolve for real users in a browser. Adding an
    archive.org snapshot alongside the live link is a nice-to-have, not a blocker.
  5. Param-description wording nit → RESOLVED.

Net: 4 of 5 prior items fully resolved, 1 downgraded to a suggestion.

New logic verified this pass: the ma_ccfa_fpg.py YEAR→MONTH conversion (annual ÷ 12 with a
month >= 10 October fiscal-year guideline switch) is correct; both consumers are MONTH-defined so
there is no regression; the restructured level formula
min(1 + ceil((income − halfUpMonthlyFPG) / width), 28) reproduces the EEC chart; and the deleted
income_ratio_increments.yaml plus the CCSP→CCFA rename leave zero stale references at PR head.


Program Review

Massachusetts EEC Child Care Financial Assistance (CCFA) parent-fee (copay) schedule. This PR:

  • Corrects two transcribed fee percentages (level 3: 0.045 → 0.0445; level 10: 0.075 → 0.076).
  • Adds the FY2026 bracket-width layer (effective 2025-10-01) and retains the FY2025 layer
    (2023-10-01, also serving as the FY2024 proxy).
  • Restructures the bracket parameter from unitless "income ratio increments" to a monthly
    currency-denominated "income bracket width" and rewrites the fee-level formula accordingly.
  • Converts ma_ccfa_fpg from an annual to a monthly value (annual ÷ 12) with an October
    fiscal-year guideline switch, matching the chart's monthly-income basis.

Source Documents

  • EEC Parent Fee Chart FY2026 — effective 2025-10-01 (mass.gov/doc/parent-fee-chart-fy2026/download).
  • EEC Parent Fee Chart FY2025 — effective 2024-10-01 (mass.gov/doc/parent-fee-chart-fy2025/download).
  • EEC Financial Assistance Policy Guide (Feb 1 2022), cited in ma_ccfa_base_copay.py.
  • gov/hhs/fpg.yaml — the shared federal poverty guidelines (calendar-year keyed) that
    ma_ccfa_fpg reuses rather than reinventing.

Values were audited directly against the FY2025 and FY2026 chart workbooks (read with openpyxl).
The FY2024 chart could not be located; per the YAML caveat, the 2023-10-01 layer intentionally
carries FY2025 values, which the FY2026 chart repeats unchanged for the fee-% column.

Branch Status

The PR branch is reported as 13 commits behind main. This is informational only and is not a
review finding.

Critical

None.

Should Address

None.

The one borderline formatting item (trailing whitespace) is classified as a suggestion below; see
the rationale there.

Suggestions

  1. Trailing whitespace — ma_ccfa.yaml:29 (integration test). The line
    - name: Case 3, integration test, family of 2, $1800 monthly income. has a trailing space.
    This is a pre-existing line that this PR's diff hunks did not introduce or touch. Because it
    is out of scope for the change under review, it is a suggestion rather than a blocker; a
    make format / whitespace cleanup would remove it opportunistically.

  2. Durable / Wayback citation (prior item b, still open, minor). The mass.gov /download chart
    links WAF-block automated clients (verified HTTP 403) though they resolve for real users. A
    Wayback snapshot returns 200 and is available, e.g.
    http://web.archive.org/web/20250902041737/https://www.mass.gov/doc/parent-fee-chart-fy2025/download.
    Consider citing an archive.org snapshot alongside (not replacing) the live link for the FY2025
    and FY2026 charts so the 2025-10-01 bracket-width layer stays independently verifiable.

  3. Formula/code doc niceties (optional).

    • ma_ccfa_fpg.py: a one-line note that the returned value is the monthly (÷12) guideline
      anchor and that rounding is applied downstream would aid future readers.
    • A comment on the month >= 10 branch noting that fpg.yaml is January-keyed, so
      {year}-10-01 deliberately resolves to the CY{year} January line (mapping FY→CY), would make
      the branch's intent explicit.
    • ma_ccfa_base_copay.yaml Case 11 comment says the FPG "rounds down"; the code applies half-up
      floor(x + 0.5). Here 0.17 < 0.5 so the result is identical (2,679), but the wording is loose.
    • fee_percentages.yaml:7 uses range(0,29) (no space) while income_bracket_width.yaml:8 uses
      range(2, 13); normalizing spacing would be tidier. Pre-existing; not touched by this PR.
    • No test pins a pre-Oct-2024 (FY2024) period; a single 2024-09 FPG case would lock the
      documented copy-forward layer. Low risk.

Value Audit Summary

All PR #9369 values reproduce the EEC Parent Fee Tables exactly:

  • Fee percentages (levels 2–28): byte-for-byte identical to both charts; max diff across all 27
    levels = 0.00000 pp. Level 3 = 4.45% and level 10 = 7.6% both confirmed against FY2025 and FY2026.
  • Bracket widths (family size 2–12): 22/22 exact match across both years — FY2026
    {231, 283, 336, 389, 442, 438, 434, 430, 426, 422, 418}; FY2025
    {218, 268, 317, 367, 417, 412, 408, 404, 400, 396, 391}. Non-monotonic peak at family size 6 in
    both charts, confirmed.
  • Maximum level = 28 (85% SMI): confirmed against both charts.
  • Monthly FPG anchors: FY2026 fam-2 = 21,150 ÷ 12 = 1,762.50 →(half-up)→ 1,763 (chart 1,763);
    FY2025 fam-2 = 20,440 ÷ 12 = 1,703.33 →(half-up)→ 1,703 (chart 1,703). Both reconcile.

Two descriptive caveats — neither is a value error:

  • The fee-% progression is a uniform +0.45 pp for levels 2→27; the final step 27 (0.1525) → 28
    (0.156) is +0.35 pp because the top level is capped at the 85%-SMI rate 0.156. This is a chart
    property, faithfully mirrored in the repo.
  • ma_ccfa_fpg.py returns the raw annual/12 float (1,762.50 / 1,703.33) and does not itself round;
    the half-up round to the chart's integer ceiling is applied downstream in the copay-level logic.
    Tests confirm this produces 1,763 consistently, so behavior is correct — an optional doc note is
    the only follow-up.

No value mismatch; no diff exceeds 0.3.

Validation Summary

  • CI: 33/33 green. The prior codecov/project failure is resolved by the new FPG-branch tests.
  • Test coverage is genuinely adequate (not green-by-luck): the month >= 10 FPG branch and the
    half-up rounding boundary (both prior blockers) are exercised with tight absolute_error_margin: 0.01 margins; the level-28 cap is pinned; both corrected fee percentages (4.45% / 7.6%) are
    pinned; FY2025↔FY2026 bracket differences are tested across family sizes including the size-6
    width peak; and Case 6 correctly asserts the computed 3.48 rather than the chart's printed
    arithmetic slip (2.28). Every expected value recomputed to the cent.
  • Deletions/renames clean: income_ratio_increments.yaml (deleted) and the CCSP→CCFA rename leave
    zero stale references at PR head; the ma_ccfa_copay_level.py lookup now uses
    p.income_bracket_width.
  • Reference format correct: parameters use title/href dict lists; variables use bare-string tuples.
    Changelog fragment present (changelog.d/ma-ccfa-copay-fy2026.fixed.md, .fixed type).

Review Severity

APPROVE — 0 critical / 0 should-address / suggestions only.

Per-agent severity counts:

Agent Critical Should Address Suggestions
Regulatory 0 0 2
References 0 0 2
Tests 0 0 2
Value audit 0 0 2
Code 0 0 (see note) 2

The code agent raised the trailing-whitespace line as a should-address by its default formatting
rule. On judgment it is reclassified here as a suggestion: it is trailing whitespace on a
pre-existing line that this PR did not introduce or touch, so it is out of scope for the change
under review and non-blocking. Final consolidated counts: 0 critical / 0 should-address / 5
suggestions → APPROVE.

Next Steps

  • Optional: run make format to sweep the pre-existing trailing whitespace at ma_ccfa.yaml:29.
  • Optional: add archive.org snapshots alongside the live mass.gov chart links for durable citation.
  • Optional: the minor code/comment doc niceties listed under Suggestions.
  • The PR is functionally complete and correct; none of the above blocks merge.

🤖 Generated with Claude Code /review-program

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

Auto-approving per standing authorization: this re-review is clean (0 critical / 0 should-address; 5 non-blocking suggestions). CI is now fully green — the prior codecov/project failure is resolved by the new ma_ccfa_fpg.yaml month-branch coverage. Of the prior review's 5 should-address items, 4 are fully resolved and 1 (durable Wayback citation) is downgraded to a suggestion. The new FPG YEAR→MONTH conversion (annual÷12 with the month>=10 FY-October guideline switch) is verified correct — both consumers are MONTH-defined (no regression), the restructured dollar-bracket level formula reproduces the EEC chart, and the deleted income_ratio_increments param + CCSP→CCFA rename leave zero stale references. Value audit re-confirms 0 mismatches: fee %s (L3 4.45% / L10 7.6%, 0.45pp), 22/22 bracket widths, max level 28, and the monthly FPG anchors (1763/1703). Full findings in the review comment above. 🤖 /review-program

@hua7450
hua7450 merged commit 07a2ccc into PolicyEngine:main Sep 2, 2026
33 checks passed
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.

2 participants