Reconstruct gross CHIP per-capita value for premium netting#8094
Merged
Reconstruct gross CHIP per-capita value for premium netting#8094
Conversation
MACPAC Exhibit 33 "CHIP Spending by State" reports federal + state shares of net-of-cost-sharing CHIP expenditures (gross expenditures minus CMS-21 offsetting collections). Because MACPAC is the source of PolicyEngine's per-enrollee CHIP value, `per_capita_chip` already has household premium revenue netted out. For consumers that track household-paid CHIP premiums separately (e.g. cliff calculators that show a per-tier premium cliff against the gross benefit received), naively subtracting `chip_premium` double-counts. Adds: - `cost_sharing_offsets/separate_chip.yaml` — CMS-21 FY2024 family-paid collections by state on the separate-CHIP sheets - `cost_sharing_offsets/medicaid_expansion_chip.yaml` — placeholder for M-CHIP state figures (Connecticut, Delaware, Massachusetts, Michigan, New York), populated in a follow-up as M-CHIP sheets are parsed - `cost_sharing_offsets/total.yaml` — sum used by the derived variables - `per_capita_chip_gross` — per-enrollee gross value = net + offsets - `chip_gross` — person-level analog to `chip` Data source: CMS Medicaid Financial Management Report FY 2024 CHIP Net Expenditures (https://www.medicaid.gov/medicaid/financial-management/state-expenditure-reporting-for-medicaid-chip/expenditure-reports-mbescbes).
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #8094 +/- ##
==========================================
Coverage 100.00% 100.00%
==========================================
Files 18 2 -16
Lines 353 32 -321
Branches 4 0 -4
==========================================
- Hits 353 32 -321
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
M-CHIP sheet research confirmed the 5 Medicaid-expansion / combination CHIP states (CT, DE, MA, MI, NY) do not report premium revenue on CMS-21 Cost Sharing Offset lines. They do report it on Line 49 Less Collection on the Separate CHIP sheets. Line 49 can also include third-party liability recoveries, so it is a proxy rather than a pure premium figure; documented in the description. FY2024 values (Separate CHIP sheet, absolute dollars): - CT: $1.82M (HUSKY B premiums) - DE: $0.14M (appears under-reported versus Delaware's $15/$25 monthly schedule) - MA: $10.86M (CommonHealth + Family Assistance premiums) - MI: $5.51M (MIChild $10/mo premiums) - NY: $9.04M (Child Health Plus premiums; FY2023 had a $99M one-time entry inconsistent with steady premium flow)
MaxGhenis
added a commit
to PolicyEngine/cliff-watch
that referenced
this pull request
Apr 19, 2026
… household cost
Restructures the repo as a proper installable Python package:
- `cliff_watch/` (was `scripts/`) with `__init__.py` exporting the
public API; dev_api_server renamed to `dev_server`.
- `pyproject.toml` with hatchling build + pytest, ruff, coverage
dev extras. `cliff-watch-dev-server` console script entry point.
- `examples/sample_household.json` (was `scripts/sample_household.json`).
- `api/_shared.py` imports repointed from `scripts.*` to `cliff_watch.*`.
- `tests/` with `pytest.importorskip("policyengine_us")` + a
conditional marker that skips CHIP-premium tests when the installed
policyengine-us release predates the variable (post #8086).
Adds CHIP premium wiring:
- `_calculate_variable` and `_calculate_variable_array` now gracefully
return defaults when a variable isn't in the installed PolicyEngine-US
release. Lets cliff-watch ship against versions pre/post new variables.
- `chip_premium` (household, annual USD) is pulled alongside the
existing benefit bundle and surfaced as a new `household_costs`
section in the calculator return value.
- `net_resources = market_income + core_support - taxes
- total_household_costs`.
- `HOUSEHOLD_COST_DEFINITIONS` in config and metadata API so the
frontend can render the new line.
- Series payload exposes `chip_premium` per earnings point.
Tests:
- `test_chip_premium_surfaces_at_texas_enrollment_fee_band` — structural
regression on the new household_costs shape.
- `test_missouri_premium_cliff_reduces_net_resources` — verifies that
the MO family-of-4 premium schedule produces the cliff behavior once
policyengine-us exposes `chip_premium` (skipped on older pins).
Caveat:
- Uses `chip` (MACPAC net-of-premium spending) rather than `chip_gross`
pending PolicyEngine/policyengine-us#8094 landing in a release.
Small baseline bias for the 17 CHIP-premium states; cliff shapes are
correct either way. Swap to `chip_gross` is a follow-up.
MaxGhenis
added a commit
to PolicyEngine/cliff-watch
that referenced
this pull request
Apr 19, 2026
…urces (#2) * Refactor scripts into a cliff_watch package and add CHIP premium as a household cost Restructures the repo as a proper installable Python package: - `cliff_watch/` (was `scripts/`) with `__init__.py` exporting the public API; dev_api_server renamed to `dev_server`. - `pyproject.toml` with hatchling build + pytest, ruff, coverage dev extras. `cliff-watch-dev-server` console script entry point. - `examples/sample_household.json` (was `scripts/sample_household.json`). - `api/_shared.py` imports repointed from `scripts.*` to `cliff_watch.*`. - `tests/` with `pytest.importorskip("policyengine_us")` + a conditional marker that skips CHIP-premium tests when the installed policyengine-us release predates the variable (post #8086). Adds CHIP premium wiring: - `_calculate_variable` and `_calculate_variable_array` now gracefully return defaults when a variable isn't in the installed PolicyEngine-US release. Lets cliff-watch ship against versions pre/post new variables. - `chip_premium` (household, annual USD) is pulled alongside the existing benefit bundle and surfaced as a new `household_costs` section in the calculator return value. - `net_resources = market_income + core_support - taxes - total_household_costs`. - `HOUSEHOLD_COST_DEFINITIONS` in config and metadata API so the frontend can render the new line. - Series payload exposes `chip_premium` per earnings point. Tests: - `test_chip_premium_surfaces_at_texas_enrollment_fee_band` — structural regression on the new household_costs shape. - `test_missouri_premium_cliff_reduces_net_resources` — verifies that the MO family-of-4 premium schedule produces the cliff behavior once policyengine-us exposes `chip_premium` (skipped on older pins). Caveat: - Uses `chip` (MACPAC net-of-premium spending) rather than `chip_gross` pending PolicyEngine/policyengine-us#8094 landing in a release. Small baseline bias for the 17 CHIP-premium states; cliff shapes are correct either way. Swap to `chip_gross` is a follow-up. * Use calculator's Simulation loader in skip predicate and fix scripts path references
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Prerequisite for cliff-watch CHIP premium handling and for #8089's MOOP architecture.
Problem
per_capita_chipis sourced from MACPAC Exhibit 33 "CHIP Spending by State". MACPAC aggregates net CHIP expenditures — specifically, federal + state shares equal gross expenditures minus the "Premiums: Cost Sharing Offset" lines on CMS-21 (the form states file quarterly). Soper_capita_chipalready has household premium revenue netted out.Consumers that track
chip_premiumseparately as a household-paid cost (e.g. the in-flight cliff calculator, SPM-style MOOP accounting) would double-count if they subtractedchip_premiumon top of achipvalue that already netted it.Fix
Add CMS-21 cost-sharing offset figures as calibration parameters and expose a gross counterpart:
parameters/calibration/gov/hhs/cms/chip/cost_sharing_offsets/separate_chip.yaml— FY2024 family-paid collections by state, separate-CHIP sheetparameters/calibration/gov/hhs/cms/chip/cost_sharing_offsets/medicaid_expansion_chip.yaml— zeros placeholder for M-CHIP states (CT, DE, MA, MI, NY) pending a second-pass parse of the M-CHIP sheetsparameters/calibration/gov/hhs/cms/chip/cost_sharing_offsets/total.yaml— sum (currently equalsseparate_chipuntil M-CHIP lands)per_capita_chip_gross— per-enrollee gross = net spending + offset, divided by enrollmentchip_gross— person-level sum, counterpart to existingchipData notes
FY 2024 FMR CHIP NET EXPENDITURES.xlsxM-CHIP tabs. NY Child Health Plus especially should have substantial revenue.Source
CMS Medicaid Financial Management Report — FY 2024 CHIP Net Expenditures Excel workbook: https://www.medicaid.gov/medicaid/financial-management/state-expenditure-reporting-for-medicaid-chip/expenditure-reports-mbescbes
CMS-21 form layout (cost-sharing offset lines): https://www.medicaid.gov/medicaid-chip-program-information/by-topics/data-and-systems/downloads/collection-systems/chip-cms21-expenditure-forms.pdf
Testing
3/3 new tests pass. 57/57 CHIP tests pass.
make format/ruff checkclean.Test plan