Skip to content

Project Medicaid LTC home equity limits with CMS's rounded CPI-U increase - #10162

Merged
MaxGhenis merged 4 commits into
mainfrom
fix-home-equity-limit-projection
Oct 14, 2026
Merged

MaxGhenis merged 4 commits into
mainfrom
fix-home-equity-limit-projection

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 12, 2026 •

Copy link
Copy Markdown
Contributor

Summary

This PR fixes two problems in main's Medicaid long-term care home equity limits (parameters/gov/hhs/medicaid/eligibility/long_term_care/home_equity/). Both were flagged in the #9184 thread on 8/20.

  1. agricultural_limit.yaml stepped on February 1, not January 1.
    • It used plain gov.bls.cpi.cpi_u uprating, which appends a value at every CPI-U entry after the last explicit value.
    • CPI-U's projected entries are keyed on February 1, so the limit read $1,189,000 in January 2028 and $1,217,000 from February 2028.
  2. The 2027 and 2028 values were not CMS figures.
    • limit.yaml and agricultural_limit.yaml pinned 2027-01-01: 1_159_000, and the agricultural file also pinned 2028-01-01: 1_189_000. Both were cited to CMCS bulletins that don't contain them.
    • These were CPI-U projections computed with the wrong method: an unrounded ratio, on a series that is seasonally adjusted from 2024.
    • Two citation titles were also wrong.

Method

42 USC 1396p(f)(1)(C) increases the limits "from year to year based on the percentage increase in the consumer price index ... rounded to the nearest $1,000".

CMS's annual bulletins report a "CPI Increase for " to one decimal place and apply that rounded percentage to the prior year's limit:

  • 2020: 1.7%
  • 2021: 1.4%
  • 2022: 5.4%
  • 2025: 2.4%
  • 2026: 3.0%

Each is the September-to-September change in the not seasonally adjusted CPI-U (BLS CUUR0000SA0), rounded to 0.1%. The rounding matters: $893,000 × 1.014 = $905,502, which rounds to the published 2021 maximum of $906,000. The unrounded 1.371% would give $905,000.

extend_medicaid_home_equity_limits in parameters/uprating_extensions.py now projects the limits this way. It follows the existing Louisiana CPI-U precedent in that module (get_la_cpi_u_percentage_increase), which also handles the model's CPI-U series being seasonally adjusted from January 2024:

  • Percentage: published Septembers come from the new gov.bls.cpi.cpi_u_nsa_september (2018–2025, from the BLS API) when both years have one. Otherwise both Septembers come from the model series through get_projected_cpi_u_for_month, so the two series are never mixed. The change is rounded to 0.1% (half up) and floored at zero.
  • Agricultural limit: each year after the last published value is the prior year's limit times (1 + percentage), rounded to the nearest $1,000, effective January 1.
  • Non-agricultural limit: every year before 2028 (P.L. 119-21 §71108(c), when the $1,000,000 cap on other homes begins) that has no value in the YAML takes the agricultural projection, since the two are the same indexed maximum before the cap. The hand-entered 2027 value is gone; a published 2027 value added later takes precedence.

With the current CPI-U path, the 2027 projection is 3.1%, giving $1,165,000 for both limits (was $1,159,000). The agricultural limit is $1,192,000 in 2028 and $1,219,000 in 2029.

Citations

Corrected subject lines and pages:

  • May 28, 2025 and April 27, 2026 bulletins: #page=2.
  • December 9, 2025 bulletin: #page=3.
  • November 18, 2025 bulletin: #page=9, where its §71108 dollar figures are.

limit.yaml had cited the April 2026 PDF under the December 2025 bulletin's subject line.

Tests

tests/core/test_medicaid_home_equity_limit_indexing.py, 19 cases. One builds a three-person simulation; the rest read parameters or call the extension helpers on a small synthetic parameter tree. Locally 19 passed in 1.19s, after model import. It checks against independent CMS figures, not PolicyEngine output:

  • test_cpi_increase_matches_cms: the computed percentage equals CMS's reported "CPI Increase" for 2020, 2021, 2022, 2025 and 2026.
  • test_year_to_year_increases_reproduce_cms_limits: chaining the computed increases reproduces the published minimum and maximum for 2020→2021, 2021→2022 and 2022→2025 (through 2023 and 2024).
  • test_a_falling_index_is_not_an_increase: a synthetic 1% fall gives 0 and a 1% rise gives 1.0. The real 2014–15 dip already rounds to −0.0%, so it couldn't test the floor.
  • Published 2025 and 2026 values are unchanged.
  • The agricultural limit is the year-to-year projection for 2027–2040 and constant within each year (no February step).
  • The 2027 non-agricultural limit equals the agricultural limit, and from 2028 the cap is $1,000,000 with the agricultural limit above it.
  • test_non_agricultural_fill_follows_its_own_coverage: on a synthetic tree, 2027 is filled from the agricultural projection whether or not CMS's 2027 agricultural value has been encoded first.
  • test_chassis_screen_reads_each_years_agricultural_limit: in 2029 the chassis screen passes an agricultural home at the projected 2028 limit + $1 and at the 2029 limit, and fails it at the 2029 limit + $1. The thresholds come from the parameters because they move with the CPI-U forecast. Freezing the screen's lookup at 2028 fails this test; a YAML case with an all-years override cannot catch that.

is_medicaid_long_term_care_home_equity_eligible.yaml:

  • Cases 3b, 5, 9, 17 and 18 no longer pin projected dollar amounts.
  • New Case 21 sets agricultural_limit to $1,200,000 with an inline parameter override. In 2029 it brackets both thresholds exactly:
    • agricultural $1,200,000 passes and $1,200,001 fails;
    • non-agricultural $1,000,000 passes and $1,000,001 fails.

Local runs:

  • That YAML file: 22 passed.
  • is_medicaid_long_term_care_eligible.yaml: 3 passed.
  • test_parameter_files.py, code_health/test_uprating_placement.py, tests/policy/baseline/parameters/ (including test_uprating_extensions.py) and the new test: 76 passed.

Invariants (tested)

  • CMS percentages: the computed increase equals every CMS-reported "CPI Increase" on file.
  • CMS limits: year-to-year application reproduces the published limits.
  • Non-negativity: the percentage is never negative.
  • January-only steps: projected values change only on January 1.
  • Cap consistency: before the 2028 cap the two limits are equal; from 2028 the non-agricultural limit is $1,000,000 and the agricultural limit exceeds it.

Impact

Published years 2025–2026 are unchanged. Projected years move:

  • 2027: both limits $1,165,000 instead of $1,159,000.
  • Agricultural 2028: $1,192,000, which is $3,000 above the old January value ($1,189,000) and $25,000 below the old February–December value ($1,217,000). Later years follow the same January-only path.

Only the YEAR-period chassis screen (is_medicaid_long_term_care_home_equity_eligible) reads these parameters on main. Open PR #9184 reads limit (WA) and its own minimum_limit, which still uses an unrounded cadence; the hub owns that PR.

axiom: us:statutes/42/1396p/f (f)(1)(C) year-to-year CMS indexing — rulespec-us#1718 queued; §71108 2028 cap and agricultural carve-out — rulespec-us#1593 queued

Follow-up from the #9184 review thread (8/20); chip w1-08.

🤖 Generated with Claude Code

MaxGhenis and others added 2 commits October 12, 2026 14:23
… projection

The agricultural home equity limit used plain CPI-U uprating, which follows
the CPI-U series' February 1 projection keys, so the limit stepped on
February 1 (2028: $1,189,000 in January, $1,217,000 from February). It now
uses the September-to-September CPI-U cadence effective January 1 that CMS
applies under 42 USC 1396p(f)(1)(C), which reproduces CMS's published 2026
limits from 2025. Its unpublished 2027 and 2028 values are dropped in favor
of that uprating.

The non-agricultural limit's 2027 value ($1,159,000) appears in no CMS
bulletin; it is the CPI-U projection. Uprating cannot fill a year before
the fixed 2028 $1,000,000 value, so it stays, labeled as a projection, with
a test that keeps it equal to the uprated agricultural limit. The
bulletin citations now carry their actual subject lines and pages.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Review r1 found that the Sep-to-Sep CPI-U ratio misses CMS's published 2021
maximum: CMS applies its reported "CPI Increase" rounded to 0.1%
($893,000 x 1.014 = $906,000; the unrounded 1.371% gives $905,000). The
model's CPI-U series is also seasonally adjusted from 2024, so it gives
2.3% for 2025 where CMS used 2.4%.

extend_medicaid_home_equity_limits now projects the limits in
uprating_extensions.py, following the Louisiana precedent: the percentage
is the not seasonally adjusted September-to-September change (published
Septembers in the new cpi_u_nsa_september, otherwise both months from the
model series), rounded to 0.1% and floored at zero, applied year to year
and rounded to the nearest $1,000. This reproduces every CMS percentage on
file (2020, 2021, 2022, 2025, 2026) and the published 2021, 2022, 2025 and
2026 limits. The non-agricultural 2027 value is now derived rather than
hand-entered ($1,165,000 on the current CPI-U path), and a YAML case with
a parameter override restores agricultural boundary coverage after 2028.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis MaxGhenis changed the title Index Medicaid LTC home equity limits on January 1 and label the 2027 projection Project Medicaid LTC home equity limits with CMS's rounded CPI-U increase Oct 12, 2026
MaxGhenis and others added 2 commits October 12, 2026 15:32
…rs by date

Review r2 found that Case 21's inline override sets every year, so a lookup
frozen at 2028 would still pass. A simulation test now reads the 2028 and
2029 projected limits from the parameters and checks the chassis screen at
2028 + $1, the 2029 limit and 2029 + $1; freezing the lookup at 2028 fails
it. The zero-floor test now uses a synthetic 1% fall, since the 2014-15 dip
already rounded to -0.0%. The non-agricultural fill now covers every
unencoded year before the section 71108(c) start year rather than the gap
between the two newest values, so adding a later explicit value cannot
skip 2027.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Review r3: starting the non-agricultural fill at the agricultural limit's
first projected year would skip 2027 if CMS's 2027 agricultural value were
encoded before the non-agricultural one, leaving 2027 at the 2026 value.
The fill now starts after the non-agricultural limit's earliest encoded
year. A regression on a small parameter tree covers both orders; the old
range fails it.

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

DTrim99 commented Oct 13, 2026

Copy link
Copy Markdown
Collaborator

PR Review: Project Medicaid LTC home equity limits with CMS's rounded CPI-U increase

PR #10162 (author: MaxGhenis, head 843ba057b8, merge-base 2e9eea7e6e). 7 files (+367/−29), 4 commits. Follow-up to the #9184 review thread.

Summary

The PR replaces how main projects the Medicaid long-term care home equity limits (gov.hhs.medicaid.eligibility.long_term_care.home_equity):

  • New projection. extend_medicaid_home_equity_limits (policyengine_us/parameters/uprating_extensions.py:623-670) takes the prior year's limit and applies CMS's "CPI Increase", which is the September-to-September change in the not seasonally adjusted CPI-U, rounded to 0.1% and floored at zero. It then rounds to the nearest $1,000, effective January 1. It follows the Louisiana CPI-U precedent already in that module.
  • New series. gov.bls.cpi.cpi_u_nsa_september holds the BLS Septembers for 2018–2025.
  • Dropped values. The hand-entered 2027 values ($1,159,000 in both files) and the 2028 agricultural value ($1,189,000) are gone. Neither appears in any CMS bulletin. The non-agricultural 2027 limit is now filled from the agricultural projection, because before the §71108 cap the two limits are the same indexed maximum.
  • February step fixed. The old uprating: gov.bls.cpi.cpi_u block on the agricultural limit made it step on February 1 (2028: $1,189,000 in January, $1,217,000 from February). That block is removed.
  • Citations. Bulletin subject lines and page anchors are corrected.
  • Tests. A new Python test file (19 cases) checks the method against CMS's published percentages and limits. Five YAML cases no longer pin projected dollars, and a new Case 21 brackets both post-2028 limits with a parameter override.

The policy content is right:

  • The method matches 42 U.S.C. 1396p(f)(1)(C) and how CMS applies it. It reproduces every CMS "CPI Increase" checked (2020, 2021, 2022, 2025, 2026) and every published minimum and maximum, including 2021, where only the rounded percentage gives CMS's $906,000.
  • All eight September CPI-U values match BLS.
  • The post-2028 structure matches P.L. 119-21 §71108: the non-agricultural limit is a fixed $1,000,000 and the agricultural limit stays indexed.
  • At the head, 2027 projects to $1,165,000 (3.1%). The agricultural limit is $1,192,000 in 2028 and $1,219,000 in 2029, as the PR body says. Values change only on January 1.
  • Every expectation I hand-checked holds. CI is green, the branch merges cleanly, and the axiom line points to two open, dispatch-ready pe-parity issues.

I found nothing critical and nothing that must change. The suggestions below are optional polish.

Critical (must fix)

None.

Should address

None.

Suggestions

  1. Add the September 2026 CPI-U when BLS publishes it, and guard the series the way Louisiana's is guarded.
    • Timing. The BLS release schedule lists "September 2026 | Oct. 14, 2026 | 08:30 AM" (https://www.bls.gov/schedule/news_release/cpi.htm). Until that value is in cpi_u_nsa_september.yaml, 2027 comes from the model series: June 2026 interpolated toward CBO's 2027 average gives 3.1%. NSA August 2026 is 3.4% above August 2025 (334.980 / 323.976). If September comes in near that, CMS's 2027 limit would be $1,168,000, not $1,165,000 (1,130,000 × 1.034 = 1,168,420).
    • Guard test. policyengine_us/tests/policy/baseline/gov/states/la/tax/income/test_la_cpi_u_indexing.py:206-214 (test_nsa_decembers_are_current_with_the_monthly_series) fails when cpi_u is refreshed past a December without its NSA value. The September series has no such check. Without one, a refresh of cpi_u past September 2026 that skips cpi_u_nsa_september.yaml would quietly compute 2027 from SA values. The difference is at most about 0.1 percentage point, but the precedent's guard costs nothing to copy.
  2. Test polish (policyengine_us/tests/core/test_medicaid_home_equity_limit_indexing.py).
    • Back-test the latest step directly. Line 47 checks 2020→2021, 2021→2022 and 2022→2025, but not 2025→2026, the step from the newest YAML value. Add (2025, 2026): 730,000 × 1.030 = 751,900 → 752,000 and 1,097,000 × 1.030 = 1,129,910 → 1,130,000. Both reproduce.
    • Pin the exact-half rounding. Both roundings use ROUND_HALF_UP on purpose (Python's round would round half to even), but no case lands on an exact half. Two cases would lock that in: adjust_home_equity_limit_for_inflation(500_000, 0.1) == 501_000 (500,500 rounds up), and a synthetic September pair 100 → 102.45 that gives 2.5. I ran both at the head and they pass.
  3. Reference polish.
    • Statute on the agricultural file. agricultural_limit.yaml:16-26 is the parameter the indexing rule actually projects, but only limit.yaml:19-20 cites 42 U.S.C. 1396p(f)(1)(C). Add the same Cornell reference to the agricultural file, for example 42 USC 1396p(f)(1)(B)-(C) - Home equity limits and annual CPI-U indexing at https://www.law.cornell.edu/uscode/text/42/1396p#f_1.
    • Enacted text. In both files the H.R. 1 entry (agricultural_limit.yaml:25-26, limit.yaml:21-22) links to the whole bill on congress.gov, which returns 403 to scripted fetches. §71108 is on file pages 226–227 of the enacted law (139 Stat. 296–297). Under main's convention it could read title: "Public Law 119-21, Section 71108 #page 226-227", href: https://www.govinfo.gov/content/pkg/PLAW-119publ21/pdf/PLAW-119publ21.pdf#page=226. The entry predates this PR.
  4. Code reuse (uprating_extensions.py).
    • Shared helper. get_cms_cpi_u_percentage_increase (574-606) repeats get_la_cpi_u_percentage_increase (457-491) line for line, apart from the series and the month. Likewise adjust_home_equity_limit_for_inflation (609-615) differs from adjust_la_amount_for_inflation only in its rounding interval. One helper, for example get_nsa_cpi_u_percentage_increase(cpi, nsa_series, month, year), would keep the published-versus-model-series rule in one place.
    • Cap year. HOME_EQUITY_NON_AGRICULTURAL_CAP_START_YEAR = 2028 (620) restates the 2028-01-01: 1_000_000 entry in limit.yaml. Module-level statutory constants are an accepted pattern there (EDUCATOR_EXPENSE_CAP_STATUTORY_BASE, the HSA bases). Still, if the cap date ever moved in the YAML alone, the year in between would hold the prior year's limit without any warning. Derive the year from the YAML, or assert in the extension that limit has an entry dated that year.
  5. Backfill the published 2020–2024 limits. This gap predates the PR.
    • Both limits start at 2025, so backdating gives $1,097,000 for 2015–2024. The PR's own test module already lists the CMS maxima for 2020 ($893,000, June 24, 2020 bulletin p. 2), 2021 ($906,000, June 4, 2021 p. 2) and 2022 ($955,000, June 2, 2022 p. 2). The method reproduces 2023 ($1,033,000) and 2024 ($1,071,000).
    • The YEAR screen has no start date, so for example a 2022 household with $1,000,000 of equity passes today, but CMS's 2022 maximum was $955,000 (June 2, 2022 bulletin p. 2).
    • Add the 2020–2024 values to both files with their bulletins, or open an issue.
  6. Line up Add Medicaid LTSS financial eligibility screen (TX, DE, WA) #9184's minimum_limit with this method once both land.
    • Add Medicaid LTSS financial eligibility screen (TX, DE, WA) #9184 (open) adds home_equity/minimum_limit.yaml. It still uses core uprating: (at_defined_interval on gov.bls.cpi.cpi_u: an unrounded ratio on the SA series), so the minimum and maximum would be indexed two different ways.
    • The PR body flags this and leaves it to the hub. A small addition to extend_medicaid_home_equity_limits that projects minimum_limit too, plus the §71108 rule that deems it $1,000,000 if it ever exceeds that, would close it.

Verified correct

  • The law.

    • 42 U.S.C. 1396p(f)(1)(C) (Cornell): "The dollar amounts specified in this paragraph shall be increased, beginning with 2011, from year to year based on the percentage increase in the consumer price index for all urban consumers (all items; United States city average), rounded to the nearest $1,000."
    • (f)(1)(A) sets the $500,000 minimum, and (B) lets a state substitute an amount up to $750,000. Both amounts are indexed. The model uses the indexed maximum, as before.
  • P.L. 119-21 §71108 (139 Stat. 296–297, file pp. 226–227).

    • (a)(1) splits (B) in two. Clause (i) covers a home "located on a lot that is zoned for agricultural use". Clause (ii) covers other homes, with an amount that "does not exceed $1,000,000".
    • (a)(2) excludes "the amount specified in subparagraph (B)(ii)" from indexing. It also deems any indexed amount "(other than the amount specified in subparagraph (B)(i) (relating to certain agricultural homes))" above $1,000,000 to equal $1,000,000.
    • (c): "The amendments made by subsection (a) shall apply beginning on January 1, 2028."
    • So from 2028 the model's fixed $1,000,000 non-agricultural limit and its indexed, uncapped agricultural limit are right, and before 2028 the two limits are the same indexed maximum.
    • CMS reads the law the same way. The November 18, 2025 CIB (p. 9) says §71108 will "cap the maximum home equity limit at $1,000,000, except that this limit will not apply to homes on land zoned for agricultural use". It adds that the agricultural maximum "will continue to increase based on CPI-U increases in lieu of the $1,000,000 cap".
  • CMS figures (each bulletin's chart page). The 2020–2022 figures are the PR test module's CMS data, not parameter values; I re-read all five bulletins.

    Year Bulletin Page CPI Increase Minimum Maximum
    2020 June 24, 2020 (cib062420-new) 2 1.7% 595,000 893,000
    2021 June 4, 2021 (cib060421) 2 1.4% 603,000 906,000
    2022 June 2, 2022 (cib06022022) 2 5.4% 636,000 955,000
    2025 May 28, 2025 (cib05282025) 2 2.4% 730,000 1,097,000
    2026 Dec. 9, 2025 (cib12092025) / Apr. 27, 2026 (cib04272026) 3 / 2 3.0% 752,000 1,130,000
    • September basis. The April 27, 2026 chart (p. 2) also prints "CPI Increase, Since September 1988: 171.1%". That is 324.800 / 119.8 (NSA, September 1988), so CMS works from September values.
    • Annual adjustment. The December 9, 2025 CIB (p. 1) says the home equity limitation is "increased each year based on increases in the CPI for All Urban Consumers (CPI-U)". The charts show "Effective 1-1-26 Unless Otherwise Noted".
  • BLS Septembers. All eight cpi_u_nsa_september.yaml values match the BLS API for CUUR0000SA0: 252.439, 256.759, 260.280, 274.310, 296.808, 307.789, 315.301 and 324.800. The API's latest month is August 2026, so no 2026 September exists yet.

  • CMS's method reproduced. Each September-to-September change is unrounded first, then rounded:

    • 2016 −0.036% → 0.0, consistent with the zero floor
    • 2020 1.711% → 1.7
    • 2021 1.371% → 1.4
    • 2022 5.390% → 5.4
    • 2023 8.202% → 8.2
    • 2024 3.700% → 3.7
    • 2025 2.441% → 2.4
    • 2026 3.013% → 3.0
    • Chained limits. Applying these to the prior rounded limit reproduces every published figure. Minimum: 595,000 → 603,000 → 636,000 → 688,000 → 713,000 → 730,000 → 752,000. Maximum: 893,000 → 906,000 → 955,000 → 1,033,000 → 1,071,000 → 1,097,000 → 1,130,000.
    • 2021 decides it. 893,000 × 1.014 = 905,502 → 906,000 (published), while the unrounded 1.3713% gives 905,246 → 905,000. A cumulative factor from the statutory base also misses: 750,000 × 260.280 / 215.969 (September 2009) = 903,880 → 904,000. So chaining the rounded percentage is the method that fits.
  • Projection at the head (probe on the extracted head tree, policyengine-core 3.33.0).

    • 2027. September 2025 (324.245, an SA observation) to September 2026 (interpolated: 332.568 × (340.3 / 332.568)^(3/12.5) = 334.408) is +3.134% → 3.1%. 1,130,000 × 1.031 = 1,165,030 → 1,165,000 for both limits.
    • 2028. +2.256% → 2.3%. 1,165,000 × 1.023 = 1,191,795 → 1,192,000 agricultural, and $1,000,000 non-agricultural.
    • 2029. 2.3%, giving 1,219,000. 2030 gives 1,247,000.
    • No February step. The February, June/July and December readings equal January in every projected year.
    • Main, for comparison. 2027 is 1,159,000. The agricultural limit is 1,189,000 on 2028-01-01 and 1,217,000 from 2028-02-01, so the YEAR screen reads 1,217,000 for 2029. That matches the PR body's "Impact" section.
  • Code.

    • Decimal arithmetic. Decimal(repr(...)) for the ratio and Decimal(str(...)) for the amount, both ROUND_HALF_UP, avoid binary-float half-rounding errors. A probe gives 500,500 → 501,000 and 2.45% → 2.5.
    • No mixing of series. NSA is used only when both Septembers are published. Otherwise both come from the model series.
    • Ordering. The extension runs after the CPI-U extension (uprating_extensions.py:1138-1139), so projected months exist through 2100. It also runs before backdate_parameters in CountryTaxBenefitSystem.__init__, so the non-agricultural fill sees encoded_years = {2025, 2026, 2028} and fills only 2027.
    • Reforms. Reforms are applied after the pipeline, so a reform value for any year overrides the projection. As with the other extensions, projections don't respond to reforms of CPI-U, and the docstring says so.
    • Cost. All 74 projected years' percentages take 0.08 s, the same as the Louisiana helper.
  • Callers. On main and at the head, only is_medicaid_long_term_care_home_equity_eligible (YEAR, reads at January 1) reads these parameters. It feeds is_medicaid_long_term_care_eligible. The other YAML files with home equity inputs (is_medicaid_eligible.yaml, is_medicaid_long_term_care_eligible.yaml) use 2028 non-agricultural cases at $1,000,000 and $1,000,001, which this PR doesn't change. Add Medicaid LTSS financial eligibility screen (TX, DE, WA) #9184 reads limit and its own minimum_limit.

  • Hand checks:

    • Percentages (test_cpi_increase_matches_cms). 2021 is 260.280 / 256.759 = 1.3713% → 1.4. 2026 is 324.800 / 315.301 = 3.0127% → 3.0.
    • Chained limits (test_year_to_year_increases_reproduce_cms_limits). 2020→2021 maximum: 906,000. 2022→2025 minimum: 688,000, 713,000, 730,000. 2022→2025 maximum: 1,033,000, 1,071,000, 1,097,000.
    • Zero floor (test_a_falling_index_is_not_an_increase). 99/100 gives −1.0, floored to 0. 101/100 gives 1.0.
    • Case 3b. 2027: 1,130,001 ≤ 1,165,000, so true.
    • Cases 5 and 9. 2028 agricultural: 1,000,001 ≤ 1,192,000 is true, and 2,000,000 is false.
    • Cases 17 and 18. 2029 agricultural: 1,130,001 ≤ 1,219,000 is true, and 2,000,000 is false.
    • Case 21. With the agricultural limit overridden to 1,200,000: 1,200,000 passes and 1,200,001 fails; for other homes 1,000,000 passes and 1,000,001 fails. Result [true, false, true, false].
    • test_chassis_screen_reads_each_years_agricultural_limit. 1,192,001 and 1,219,000 pass and 1,219,001 fails, giving [True, True, False].
    • test_non_agricultural_fill_follows_its_own_coverage. With 3% synthetic growth and no published 2027 value, 2027 is 1,130,000 × 1.03 = 1,163,900 → 1,164,000. That is above 1,130,000 and equals the agricultural value, and 2028 stays at 1,000,000.
  • Test results:

    • At the head: the new Python file, 19 passed. is_medicaid_long_term_care_home_equity_eligible.yaml plus is_medicaid_long_term_care_eligible.yaml, 25 passed (22 + 3).
    • Merged with current main: the Python file, 19 passed.
    • Head's YAML on the merge-base code: 22 of 22 also pass. This is by design: the edited YAML cases stop pinning CPI-dependent dollars. The cases that fail on the old code are in the Python file, which checks the CMS percentages, the January-only steps and the fill rule. The PR body explains why those can't be YAML: projected thresholds move with each CPI-U refresh, and an inline override applies to every year.
  • Test design (main's CLAUDE.md, "Justify Python coverage"). The Python cases test helper functions, parameter invariants and one three-person Simulation on the shared system, which doesn't rebuild the model. They are checked against independent CMS figures, and the PR body explains why each needs Python.

  • References:

    • Every #page anchor shows the cited value: May 28, 2025 p. 2; April 27, 2026 p. 2; December 9, 2025 p. 3; November 18, 2025 p. 9, where the §71108 dollar figures are (p. 8 has only the heading).
    • The new titles match each bulletin's subject line. Main's limit.yaml had put the December 2025 subject line on the April 2026 PDF, and that is fixed.
    • There is one entry per document and no page text in any title.
    • cpi_u_nsa_september.yaml follows the cpi_u_nsa_december.yaml template (description, label, economy: false, BLS series reference).
  • Changelog. changelog.d/fix-home-equity-limit-projection.fixed.md is top-level, typed fixed, and accurate.

  • PR-body claims. These all check out:

    • the before/after values
    • the 3.1% figure for 2027
    • "Published years 2025–2026 are unchanged"
    • only the YEAR screen reads these parameters on main
    • the 2014–15 dip rounds to −0.0%
    • 19 Python cases

Axiom line assessment

Valid. The line reads axiom: us:statutes/42/1396p/f (f)(1)(C) year-to-year CMS indexing — rulespec-us#1718 queued; §71108 2028 cap and agricultural carve-out — rulespec-us#1593 queued.

  • The module exists. us/statutes/42/1396p/f.yaml is in rulespec-us. Its indexed amounts use statutory amount × (1 + cumulative_cpi_u_increase_rate_since_statutory_base_year), rounded once. That is exactly the gap NYC School Tax Credit Fixed Amount #1718 records: a single cumulative factor can't reproduce CMS's chained 2021 figure.
  • NYC School Tax Credit Fixed Amount #1718 is OPEN and labelled pe-parity. It has the module path and companion test file, the corpus row, verbatim (f)(1)(C), and the CMS bulletin figures. Its required year-to-year output includes the zero floor. Its six companion cases all come from CMS bulletins (2021, 2022 and 2026, minimum and maximum), not from PolicyEngine output. It was written against 6a54ffeb56, and the method has not changed since. It records its blocker (encoder dispatch and approval).
  • Add abolition parameters #1593 is OPEN and labelled pe-parity. It has the verbatim §71108 and 1396p(f) text, the post-2028 required outputs, a corpus blocker, and companion cases. Its hypothetical $1,200,000 agricultural maximum is the same figure as this PR's Case 21.

CI status

All 26 checks pass (gh pr checks 10162).

Branch status

  • Position: 27 commits behind main, 4 ahead.
  • Merge: git merge-tree --write-tree PolicyEngine/main 843ba057b8 is clean (tree f2722aec10). GitHub reports MERGEABLE, blocked only on review.

Verdict: APPROVE

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

Approving: the projection follows 42 U.S.C. 1396p(f)(1)(C) and H.R. 1 § 71108. It reproduces every published CMS home equity limit tested (2020, 2021, 2022, 2025, 2026), including 2021's $906,000, which only the rounded 1.4% increase gives. All 8 BLS Septembers match, and 12 hand checks pass. Six optional suggestions in the comment above, notably adding the September 2026 CPI once BLS publishes it on Oct 14 (2027 would become $1,168,000).

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