Skip to content

Uprate premium inputs by premium series, not CMS out-of-pocket spending - #10085

Open
MaxGhenis wants to merge 11 commits into
mainfrom
premium-inputs-cms-uprating
Open

MaxGhenis wants to merge 11 commits into
mainfrom
premium-inputs-cms-uprating

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 11, 2026 •

Copy link
Copy Markdown
Contributor

Builds on #10083 (merged 2026-10-11 as 35f3c1f92a), which added the ESI premium per enrollee series. main is merged in, and the diff against main is this PR's change alone.

What changes

Five premium inputs uprated by calibration.gov.hhs.cms.moop_per_capita, CMS's out-of-pocket health spending per capita. CMS defines that series to leave premiums out: "Premium payments for private insurance plans (including Medicare Advantage private plans) are not included in out-of-pocket spending" (NHEA methodology paper, 2024, file page 14). Each input now follows a premium series.

Input What the data put in it Uprating after ×2034/2024 before → after
health_insurance_premiums_without_medicare_part_b CPS ASEC PHIP_VAL, the premiums the person reported paying CMS ESI premium per enrollee (from #10083) 1.4126 → 1.6405
other_health_insurance_premiums PHIP_VAL less modeled CHIP, Medicaid and Marketplace premiums CMS ESI premium per enrollee 1.4126 → 1.6405
health_insurance_premiums PHIP_VAL, only for self-employed people under 65 without ESI New: CMS direct purchase premium per enrollee 1.4126 → 1.6333
long_term_health_insurance_premiums Nothing (no dataset fills it) New: CPI-U medical care 1.4126 → 1.3566
medicare_part_b_premiums_reported Nothing (the dataset stores a retired name the engine ignores) New: Part B standard premium 1.4126 → 1.9376

The ratios are computed by the engine from each version's parameters (scripts/per_person_ratios.py): base is #10083's head 5b30a11f90; the PR's are at this branch's head.

New parameters

  • calibration/gov/hhs/cms/direct_purchase_premium_per_enrollee.yaml: NHE projections Table 17, "Spending per Enrollee", "Direct Purchase" row, 2013–2034.
  • gov/bls/cpi/cpi_u_medical_care.yaml: BLS annual means (CUUR0000SAM) for 2015–2022, then CBO's February 2026 calendar-year series ("CPI-U, medical care", sheet "2. Calendar Year", row 59) for 2023–2036.
  • calibration/gov/hhs/cms/medicare_part_b_premium_per_enrollee.yaml: the standard monthly premium for 2013–2026 (2026 Trustees Report Table III.C2), then the Trustees' intermediate estimates for 2027–2035 (Table V.E2, file page 213).

Extension. uprating_extensions.py grows each series at its last published one-year rate to 2100 and holds the 2100 value after that. This is the rule moop_per_capita and #10083's ESI series use.

  • Direct purchase: 9,589 / 9,158 (4.7% a year) from 2035.
  • Medical care CPI: 813.07 / 788.642 (3.1% a year) from 2037.
  • Part B: 360.6 / 338.5 (6.5% a year) from 2036.

The per-capita classifier from #10083 already treats per_enrollee paths as per-person rates. The CPI series sits under gov.bls.cpi, like CPI-U, because a path under calibration.gov.cbo would be divided by population.

Docs. spm-poverty.qmd no longer lists premiums among the inputs that follow out-of-pocket spending. It says which inputs follow each premium series and why.

What the data put in each input

Microcosm (packages/microcosm-build/src/microcosm/build/us/spec/sources.yaml, stage other_health_insurance_premiums, at origin/main 909586128):

  • health_insurance_premiums_without_medicare_part_b is CPS ASEC PHIP_VAL on ASEC rows (us_runtime/cps_carried.py). On PUF-support rows it is imputed jointly with the next input by a QRF trained on CPS donors.
  • other_health_insurance_premiums is max(PHIP_VAL − chip_premium − marketplace_net_premium − medicaid_premium, 0) on ASEC rows, with the same QRF for PUF support.
  • health_insurance_premiums is a copy of PHIP_VAL, made only where Schedule C income is positive, the person is under 65 with no Social Security disability income, and the person has no ESI (microcosm#451 item 2).
  • long_term_health_insurance_premiums and medicare_part_b_premiums_reported have no producer. The certified file stores the retired name medicare_part_b_premiums, which microcosm's own stored-input register (microcosm-data/.../stored_inputs.py) says the engine ignores. No formula reads medicare_part_b_premiums_reported. The long-term care input feeds Ohio's medical deduction and Washington's senior property tax exemption.

What PHIP_VAL holds (Census question HIPREM, identical in the 2023–2025 ASEC; cpsmar25.pdf file page 289):

  • It is what the person paid out of pocket last year for all health insurance premiums covering themselves or others in the household, comprehensive and supplemental (such as dental and vision).
  • It includes the worker's share of an employer plan. The employer's share is asked separately, with no dollar amount.
  • Social Security and SSDI recipients report their Medicare premiums (Part B, Part D and Medicare Advantage) in the Social Security section, and the premium question tells them not to report those again. Census releases that amount as PEMCPREM. Medicare premiums paid by people without Social Security or SSDI are not addressed by the wording.
  • A family premium sits on the payer's record.
  • No Census source says whether payroll deductions are pre- or post-tax, whether Marketplace amounts are net of advance credits, or whether long-term care insurance counts.

Plan mix, measured on the certified dataset (populace_us_2024.h5, sha256 6496cc43…aee84, the model's DEFAULT_DATASET). Dollars are 2024, weighted, and grouped by coverage at interview (scripts/plan_mix.py, plan_mix_certified.json):

Input Total People with ESI Under 65, direct purchase 65+, no ESI Other (no coverage at interview, Medicaid, other public)
health_insurance_premiums_without_medicare_part_b $432.3B 64.9% 8.8% 16.6% 9.7%
other_health_insurance_premiums $410.5B 66.7% 7.1% 17.1% 9.1%
health_insurance_premiums $18.3B 0% 48.9% 0% 51.1% (42.5% uncovered at interview)

Why each series

Reported and other premiums → ESI premium per enrollee. These inputs mix plan types, so one index has to stand for all of them.

  • Who pays these dollars. People with ESI pay two thirds of them. On CMS's own accounts, the employee share of ESI is about four fifths of household private premiums: ESI spending ($1,429.1B) less employer contributions ($1,047B) is $382B, against $468B of household private health insurance premiums in Table 16 (2024).
  • The pre-tax move. Microcosm's pre-tax producer (branch esi-pre-tax-premiums-454, the follow-up to microcosm#1189) routes an eligible ESI policyholder's PHIP_VAL, capped at wages, into pre_tax_health_insurance_premiums. Under the disjoint contract of Document disjoint health premium inputs and correct consumer treatment #10046, those dollars must then leave the reported inputs; that branch does not yet do this removal, so it is a contract the producer still has to meet. Uprate ESI premium inputs by CMS ESI premium per enrollee #10083 uprates the pre-tax input by the ESI index, so giving the reported inputs the same index means a move that does meet the contract leaves the dollars' growth unchanged. A test and a Hypothesis property check this on the engine side; they do not test the producer.
  • The employee share grows with the index. ESI spending less employer contributions, per ESI enrollee, grows within 0.1 percentage point a year of the index over 2024–2034 and 2026–2034. Employees pay 26.6% to 26.8% of ESI premiums in every year from 2024 to 2034. Tests check both.
  • The cost of one index. The direct purchase part of these inputs follows ESI growth instead of its own. The two indexes end about 0.4% apart by 2034 (1.6405 against 1.6333), but they differ in between: 2025 is 1.077 against 1.021, and 2026 is 1.148 against 1.187.
  • Why not private health insurance per enrollee (excluding Medigap)? That row averages over plan types whose enrollment shares shift: direct purchase enrollment falls 9.8% in 2026 while ESI holds flat. Choosing it would also move the pre-tax dollars onto a different path (1.6518 against 1.6405).

Directly supplied premiums → direct purchase premium per enrollee. In the data this input holds only self-employed people under 65 without ESI. Direct purchase per enrollee is the closest CMS series for that group, but it is still a proxy. Census's premium question covers all of the payer's premiums for anyone in the household last year, and only 48.9% of these dollars sit on people with direct purchase coverage at interview. CMS's direct purchase category is premiums "for policies that are not available through an employer or a union-based plan", including Marketplace plans (methodology paper, file page 29).

  • Alternative representations. For these people, the full reported premium also sits in health_insurance_premiums_without_medicare_part_b, which follows the ESI index. Those two equal each other in 2024 and differ afterwards by the ratio of the two indexes: 3.4% in 2026, 0.4% in 2034. other_health_insurance_premiums is a different quantity, the residual after modeled program premiums and a floor at zero, so it already differs in 2024 for 413 of the 1,379 records.
  • Who reads which. medical_expense_health_insurance_premiums uses the direct input when it is nonzero. SPM MOOP adds other_health_insurance_premiums to the current-year modeled program premiums (Marketplace, CHIP, Medicaid, Medicare), so its total is neither reported input alone.

Long-term care premiums → CPI-U medical care, as a proxy. CMS's health expenditure projections have no long-term care insurance premium series, and the NHEA methodology paper never mentions long-term care insurance.

  • Why this index. 26 U.S.C. 213(d)(10)(B) indexes the deductible limits on these premiums by the chained CPI-U medical care component for August of the preceding year. Neither CBO nor CMS projects that index. CBO does project the unchained CPI-U medical care component by calendar year, to 2036, which this PR uses as the proxy.
  • Why not direct purchase per enrollee. Its 2026 jump of 16.3% is a Marketplace effect. CMS expects direct purchase enrollment to fall by 3.7 million "largely due to the expiration of enhanced marketplace subsidies", and per-enrollee growth to rise partly from "higher acuity among Marketplace enrollees who maintained their coverage" (NHE projections forecast summary, file pages 1 and 2). Neither applies to long-term care policies.
  • Effect. Microcosm does not produce this input and the certified dataset does not store it, so the change moves no aggregate.

Reported Part B premiums → the Part B standard premium. Under 42 U.S.C. 1395r(i)(3), a premium with an income-related adjustment is the standard premium times 1.4, 2.0, 2.6, 3.2 or 3.4, before rounding to the dime. A reported premium at a fixed income tier therefore grows with the standard premium. The series is a growth proxy, not a forecast of each person's payment: hold-harmless limits (1395r(f)) and Medicare Advantage premium reductions move some people's premiums differently. A test checks the series against the model's own gov.hhs.medicare.part_b.base_premium for 2021–2026.

Sources, verified from the files

Source URL Retrieved sha256
NHE projections tables (Table17 inside dated 2026-09-03) https://www.cms.gov/files/zip/nhe-projections-tables.zip (Last-Modified 2026-09-03) 2026-10-11 264f822618a5e1829138aea57cc6c8bf45bbaf072a72898fef5547f7ece6cd70
NHEA methodology paper, 2024 https://www.cms.gov/files/document/definitions-sources-and-methods.pdf 2026-10-11 9c5755666847a78103016f04da937326744071a9a6736f4e77e91ce9e7af8629
NHE projections methodology, June 24, 2026 https://www.cms.gov/research-statistics-data-and-systems/statistics-trends-and-reports/nationalhealthexpenddata/downloads/projectionsmethodology.pdf 2026-10-11 ce62fe2c236cc96ce287027784b141584ddf39e62c5fd8ddc3e771a014944817
NHE projections forecast summary https://www.cms.gov/files/document/nhe-projections-forecast-summary.pdf 2026-10-11 dee0ae96eb168277d63dd0c108d3097fc044d0c6cf9c8df99aa6e2b8f7150116
2026 Medicare Trustees Report (transmitted 2026-06-09) https://www.cms.gov/oact/tr/2026 2026-10-11 ffa56b9137006872300b0346149eae1613d09a172b6ba118aad48e66dfc48fa8
CBO Economic Projections, February 2026 (cbo.gov refuses automated downloads; Wayback capture of 2026-09-22, values identical to CBO's data repository at US-CBO/cbo-data@284a956) https://www.cbo.gov/system/files/2026-02/51135-2026-02-Economic-Projections.xlsx 2026-10-11 ae8f4920702fabf8fb3136bc94a42c53466cff5e890dec22396d8dc49dc2f776
BLS CPI-U medical care, monthly, CUUR0000SAM (API) https://data.bls.gov/timeseries/CUUR0000SAM 2026-10-11 2f2d4026… (2017–2026), 7ffc8b64… (2015–2016)

Each transcription is checked against the source's own components:

  • Direct purchase: every value equals Table 17's figure and lies within rounding of the same table's spending over enrollment.
  • Medical care CPI: every CBO level equals the published figure. Each annual change matches CBO's published percentage change to 0.001 point, which also checks the BLS 2022 value. The BLS means for 2022–2024 match.
  • Part B: every value equals the Trustees' tables, and 2013–2026 equal half the aged actuarial rate plus the repayment add-on, rounded to 10 cents, as 42 U.S.C. 1395r(a)(3), (a)(6) and (c) require.

Aggregate effect

Real microsimulation runs, one per year and side, on the model's default dataset (populace_us_2024.h5 @ populace-us-2024-spm-20260909, sha256 6496cc43…aee84). Base is current main (b2aaef3391), and the PR side is this head (2ebef84217). They ran as frozen snapshots in one heavy_run.sh job under the shared heavy lock (impact2/inner.sh). Per-record arrays, compare.{2026,2034}.json and poverty.*.json are in impact2/ in the evidence folder.

Weighted total 2026 main 2026 PR Change 2034 main 2034 PR Change
health_insurance_premiums_without_medicare_part_b $466.8B $504.3B +$37.5B (+8.0%) $639.8B $743.1B +$103.2B (+16.1%)
other_health_insurance_premiums $443.3B $478.9B +$35.6B (+8.0%) $607.6B $705.7B +$98.0B (+16.1%)
health_insurance_premiums $19.8B $22.1B +$2.3B (+11.7%) $27.2B $31.4B +$4.2B (+15.6%)
SPM medical out-of-pocket expenses $1,045.1B $1,080.6B +$35.5B (+3.4%) $1,410.6B $1,508.4B +$97.9B (+6.9%)
SPM unit net income $14,712.2B $14,678.8B −$33.4B $19,044.7B $18,952.7B −$92.0B
SPM poverty rate 14.28% 14.49% +0.21 pt (+0.74M people) 14.86% 15.14% +0.28 pt (+0.99M people)
Self-employed health insurance deduction $15.9B $17.5B +$1.6B $21.9B $24.8B +$3.0B
Federal income tax $2,593.3B $2,591.9B −$1.4B $3,731.9B $3,728.0B −$3.9B
State income tax $576.8B $576.3B −$0.44B $802.3B $801.0B −$1.3B
SNAP $94.0B $94.3B +$0.25B $98.6B $99.2B +$0.56B
Household net income $17,165.9B $17,168.0B +$2.1B $22,382.7B $22,388.6B +$5.9B

An earlier frozen pair, #10083's head 5b30a11f90 against this PR's first commit 9e6b734f12 (impact/ in the evidence folder), gave the same input and MOOP changes to within $1 million. Its poverty changes were +0.21 points in 2026 and +0.28 points in 2034. main's other changes since then move the base levels (SNAP, state tax) but not this PR's effect.

  • The three inputs move by exactly their per-person factor ratios: 1.1476 / 1.0624 = 1.0802 in 2026, and 1.6405 / 1.4126 = 1.1613 in 2034. The weights are unchanged.
  • Household net income rises because premiums lower taxes and raise SNAP, and premiums are not subtracted from it. SPM resources subtract medical out-of-pocket expenses, so SPM poverty rises.
  • Direction by year. From 2026 on, both premium series run above out-of-pocket spending per capita (2026 factors: ESI 1.148, direct purchase 1.187, against 1.062). In 2025 the ESI factor is higher (1.077 against 1.031) and the direct purchase factor is lower (1.021). The medical care CPI, for the unfilled long-term care input, runs below out-of-pocket spending from 2027.

Invariants and tests

tests/core/test_premium_input_uprating.py (155 tests) reads the parameter tree:

  1. Transcription: each series equals its source, and agrees with the source's own components (above).
  2. Employee share: employee contributions per ESI enrollee grow with the ESI index, and employees pay 26.6% to 26.8% of ESI premiums in every year from 2024 to 2034.
  3. Move neutrality: the pre-tax and both reported inputs name the same series.
  4. Agreement: the Part B series equals gov.hhs.medicare.part_b.base_premium for 2021–2026.
  5. Bounds and order (Hypothesis): each index is positive in every year. Each is strictly increasing from its last published dip to 2100: direct purchase from 2020, Part B from 2023, medical care CPI throughout. A separate test pins the dips CMS reports, so the data isn't smoothed.
  6. Extension rule (Hypothesis): past its last published year, each index grows at its last one-year rate and holds its 2100 value after 2100.
  7. Guard: no input with "premium" in its name uprates by out-of-pocket spending.

tests/microsimulation/test_premium_input_microsim_uprating.py (26 tests) runs the engine:

  1. Uprating (Hypothesis, one vectorized simulation per example): in a Simulation, each of the five inputs and the pre-tax input equals its 2024 amount times its index ratio.
  2. Move neutrality (Hypothesis): splitting a premium in any proportion between the pre-tax input and a reported input leaves the uprated total equal to the whole premium times the ESI ratio, in every later year.
  3. Dataset extension: in extend_single_year_dataset, each person follows the ratio, and weighted totals grow by the ratio times population growth.

Also updated: test_uprating_series (expected series), test_per_capita_uprating (the new paths are per-person rates), test_uprating_extensions (each new series extends at its last rate and is flat after 2100).

Mutation check: reverting other_health_insurance_premiums to out-of-pocket spending fails 9 tests, including the move-neutrality property.

Test cost

Local macOS, each file run alone in its own process:

File Pytest time Peak RSS
Collection only (system build) — 1.05 GB
tests/core/test_premium_input_uprating.py (155 tests) 5.1s to 12.3s 0.94 to 1.05 GB
tests/microsimulation/test_premium_input_microsim_uprating.py (26 tests) 6.5s to 14.8s 1.00 to 1.19 GB

The ranges are runs at different host loads. Linux numbers will come from this PR's own CI artifacts.

The core file adds no memory over the system build that the Rest/core group already pays. The microsimulation file adds about 140 MB in isolation.

Coordination with #10046

#10046 (draft) adds documentation strings to the same premium variables, inserting them just above the uprating = line that this PR and #10083 change. A trial merge (git merge-tree) conflicts in four files: two from this PR (health_insurance_premiums_without_medicare_part_b.py, long_term_health_insurance_premiums.py) and two from #10083 (pre_tax_health_insurance_premiums.py, employer_sponsored_insurance_premiums.py). Each resolves by keeping both sides: #10046's documentation, then this PR's comment and uprating line. No content disagrees.

#10097 (merged). HSA payroll contributions now follow the 223(b)(2) limit. The merge with main keeps #10097's HSA sentence and series. As its session asked, the out-of-pocket list in spm-poverty.qmd now ends "…lab and prescription expenses."

#10084 (open) and #10119 (open).

Other suites run locally

  • 546 passed, 1 xfailed (pre-existing): the Python suites that set these inputs or exercise uprating, namely the dependent ALD, Idaho premium, Ohio medical deduction, Schedule A pre-tax premium, per-capita, series, ESI and premium uprating, dataset extension, extension, reform backdating, Michigan household resources and system import tests.
  • 309 passed: the 29 YAML files that set any of the five inputs.
  • 166 passed: the reference-URL, parameter-key, uprating-placement and Rest-group code-health suites.
  • ruff format and ruff check are clean.

Independent review

Round 1 (GPT-6.1 Sol, at caf654d7b5): APPROVE, with seven non-blocking findings. All are addressed in 772c2ab338:

  1. Alternative representations. The 3.4% and 0.4% gaps apply to the direct input against the full reported premium. other_health_insurance_premiums is a residual and already differs in 2024.
  2. Long-term care. CPI-U medical care is now called a proxy for the chained August index the statute uses, in the docs, the comment and the tests. "No CMS series" is narrowed to the projections having no long-term care premium series.
  3. Producer transfer. The pre-tax move is described as a contract the producer still has to meet, not something its branch does today.
  4. Direct purchase. It is called the closest CMS series for the self-employed group, with its composition and time-period limits stated.
  5. Part B. The fixed multiple is stated within an income tier and before rounding, as a growth proxy. The follow-up says the "standard base" freezes.
  6. Test coverage. The tests now pin the BLS means for 2015–2024 and check the employee share in every year from 2024 to 2034.
  7. Small fixes. There is one Trustees reference in the YAML, "about 0.4%", forecast-summary file pages 1 and 2, and the Uprate ESI premium inputs by CMS ESI premium per enrollee #10083 status.

The reviewer independently re-derived all 67 parameter values from the source files and re-hashed every source. They recomputed every aggregate and both poverty rates from the per-record arrays, and ran 363 tests. Full text: out_review_r1_full.md in the evidence folder.

Round 2 (GPT-6.1 Sol, at 772c2ab338): APPROVE. It found findings 3, 4 and 6 resolved and 1, 2, 5 and 7 partly resolved, all non-blocking, plus two new low findings:

  • an unsupported universal claim that "nobody projects" the chained index;
  • the frozen impact pair needs labelling after the merge with main.

2ebef84217 finishes them all:

  • SPM MOOP adds modeled program premiums to the residual.
  • The statute's index is for "August of the preceding year", and "CBO and CMS do not project" it.
  • The Part B growth-proxy caveat is now in the docs and the test docstring.
  • The Trustees reference title carries #page 89-90,213.
  • The aggregate table now comes from a re-run of current main against this head; see Aggregate effect.

The reviewer also confirmed that the PR's 275 tests passed in CI at 772c2ab338. That run's Rest job failed only on main's test_known_violations_only_shrink (the Illinois AABD entry #9902 removed), which is outside this diff. Full text: out_review_r2_full.md.

Follow-ups, not in this PR (each queued as a separate task)

  • moop_per_capita is from CMS's February 2025 release. The current Table 03 has 2026 at $1,826, against $1,720 in the YAML. Update CMS out-of-pocket per-capita uprater to NHE projections 2025-2034 #10084 (open) refreshes it. If it merges first, the "before" column above rises: out-of-pocket spending grows faster in the new release. This PR's "after" factors don't depend on it.
  • health_savings_account_payroll_contributions followed out-of-pocket spending, which counts spending from HSAs rather than contributions into them. Uprate HSA payroll contributions by the 223(b)(2) contribution limit #10097 (merged) moved it to the 26 U.S.C. 223(b)(2) family limit, and this branch merges that change.
  • gov.hhs.medicare.part_b.base_premium stops at 2026, so the modeled standard base premium stays at $202.90 a month in later years. The new Trustees series makes a projection available.

Evidence (sources with SHA256SUMS, research notes, scripts, run JSON): ~/reviews/premium-inputs-cms-uprating-2026-10/.

axiom: n/a: microsim input uprating (data aging); no policy rule changes

🤖 Generated with Claude Code

MaxGhenis and others added 7 commits October 11, 2026 06:48
employer_sponsored_insurance_premiums uprated by CBO employment income
(per capita after the per-capita conversion), and
pre_tax_health_insurance_premiums by CMS out-of-pocket spending per
capita, which by CMS's own definition excludes premiums. Both are shares
of employer plan premiums, so both now follow CMS NHE Table 17's
employer-sponsored insurance spending per enrollee (2013-2034, 2025-2034
projections release), extended past 2034 at the 2033-2034 growth rate.

The per-capita classifier now treats per_enrollee paths as per-person
rates, like per_capita ones, so they are neither divided by population
nor rejected as unclassified.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…fier

- Split the ESI tests: parameter and property checks stay in tests/core;
  the Simulation and dataset-extension checks move to
  tests/microsimulation (fewer Hypothesis examples, one vectorized
  simulation each).
- Assert the 22 published Table 17 values exactly, keeping the
  spending-over-enrollment consistency check.
- Per-person markers count only in a path's last segment, so a marker
  in an ancestor folder no longer hides a national total.
- Cite the methodology paper's file page 29 in the href, the ZIP as the
  Table 17 source, and the 2035-2100 extension endpoint.
- Describe the index as a premium-growth proxy at fixed coverage per
  policy and roughly constant employer share.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
health_insurance_premiums_without_medicare_part_b and
other_health_insurance_premiums follow CMS ESI premium per enrollee, like
pre_tax_health_insurance_premiums; health_insurance_premiums follows a new
CMS direct purchase premium per enrollee series (NHE projections Table 17).
CMS out-of-pocket spending excludes premiums by definition.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…rality

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No dataset fills long_term_health_insurance_premiums and no CMS series
measures long-term care insurance premiums; 26 U.S.C. 213(d)(10)(B)
indexes the deductible limits on them by the medical care CPI. Adds
gov.bls.cpi.cpi_u_medical_care: BLS annual means to 2022, CBO's February
2026 calendar-year series for 2023-2036, extended at its 2035-2036 rate.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Adds calibration.gov.hhs.cms.medicare_part_b_premium_per_enrollee: the
standard monthly premium for 2013-2026 (2026 Trustees Report Table III.C2)
and the Trustees' intermediate estimates for 2027-2035 (Table V.E2),
extended at the 2034-2035 rate. A premium with any income-related
adjustment is a fixed multiple of the standard premium (42 U.S.C.
1395r(i)(3)).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Core tests cover transcription, the Part B statutory components, agreement
with the model's Part B premium, Hypothesis bounds and extension rules for
each index; the microsimulation test covers all five inputs. The SPM
methodology page says which inputs follow which premium series.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Base automatically changed from esi-premium-nhe-uprating to main October 11, 2026 13:38
MaxGhenis and others added 3 commits October 11, 2026 11:31
…uprating

# Conflicts:
#	docs-quarto/methodology/spm-poverty.qmd
#	policyengine_us/parameters/uprating_extensions.py
#	policyengine_us/tests/core/test_per_capita_uprating.py
#	policyengine_us/tests/core/test_uprating_series.py
#	policyengine_us/tests/policy/baseline/parameters/test_uprating_extensions.py
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Long-term care: CPI-U medical care by calendar year is a proxy for the
  chained August index 26 U.S.C. 213(d)(10)(B) uses; CMS's projections have
  no long-term care premium series.
- Part B: within an income tier, a premium is a fixed multiple of the
  standard premium before rounding; hold-harmless and Medicare Advantage
  reductions move some premiums differently.
- Direct purchase is the closest CMS series for the self-employed slice,
  not a claim about how each premium was bought.
- Move neutrality is conditional on a producer removing moved dollars.
- Tests pin BLS means for 2015-2024 and the employee share in every year
  2024-2034; one Trustees reference.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…wording

Keeps #10097's HSA sentence and series; the CMS out-of-pocket list now ends
with prescription expenses. Long-term care: the statute's index is for
August of the preceding year and CBO and CMS do not project it. Part B: a
growth proxy, not each person's premium. Trustees reference title carries
its file pages.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis

Copy link
Copy Markdown
Contributor Author

Hand-off to the US + core hub. Head 2ebef8421767474ebb815d92d63c1c4a7674e5f5.

This branch has not been deployed

No deployments
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.

1 participant