Skip to content

Apply state Medicare Savings Program asset limits and income exclusions (WA, CA, MN, IL, MS) - #10360

Open
hua7450 wants to merge 10 commits into
PolicyEngine:mainfrom
hua7450:msp-state-asset-income-rules
Open

hua7450 wants to merge 10 commits into
PolicyEngine:mainfrom
hua7450:msp-state-asset-income-rules

Conversation

@hua7450

@hua7450 hua7450 commented Oct 21, 2026 •

Copy link
Copy Markdown
Collaborator

Closes #10359

What and why

PolicyEngine applied the federal Medicare Savings Program (MSP) rules in every state and could only switch the asset test off by state. Five states use different rules, and this PR encodes them.

State Before After Source
WA Federal asset test ($9,950 / $14,910 in 2026) No asset test from 2023-01-01 WSR 22-21-043, p1 ("Effective Date of Rule: January 1, 2023") and p2; WAC 182-517-0100(2)(d); Laws of 2022, ch. 297, sec. 205(26) ("remove the asset limit test for the medicare savings plan program ... effective January 1, 2023") and sec. 211(79), pp. 274, 312
CA Federal limit until 2023; no test from 2024 $130,000 / $195,000 from 2022-07-01; no test in 2024–2025; $130,000 / $195,000 again from 2026-01-01 Welf. & Inst. Code 14005.62 (a), (c), (d); ACWDL 21-31, pp. 2, 4; ACWDL 22-25, p2; ACWDL 25-14, pp. 2, 8–9; ACWDL 25-27
MN Federal $9,950 / $14,910 $10,000 single / $18,000 couple from 2000-10-01, or the federal limit when it is higher Minn. Stat. 256B.057, subd. 3(a)(3); Laws 2000, ch. 488, art. 9, sec. 15
IL $20 SSI general income exclusion $25 income exemption on income other than SSI and contributions (alimony, child support, outside cash help), one for each applying spouse who has such income; the $20 SSI exclusion stays the floor IL DHS PM 06-12-01-c; PM 15-04-03-a ("The first $25 of earned or unearned income, other than SSI income and contributions, is exempt"; "Two $25 income exemptions are allowed if both persons have income other than SSI or contributions"); PM 06-12-01-b and PM 15-05-03, which send QMB countable income to PM 15-04-03-a; 89 Ill. Adm. Code 120.335(a)(1) ("other than SSI income, or contributions from a spouse or other individual"); 89 Ill. Adm. Code 120.74, which counts QMB income under Part 120
MS $20 SSI general income exclusion; asset test until 2024 $50 from 1999-07-01, once for a couple; no asset test from 1999-07-01 (Eligibility Manual p. 7220, "Effective 07-01-99, there will be no resource test."; 23 Miss. Code R. 103-1.8(A)(1)) 23 Miss. Admin. Code Part 104, Rule 1.1(C)(2)(b) (p9), Rule 4.2(A)(1) and (C)(2) ("Only one general exclusion can be applied to the combined income of any couple", pp. 21–22); DOM Eligibility Manual p. 5401 (revised 07-01-99)

How the model applies them

  • eligibility.asset.applies: Washington is false from 2023-01-01 (it was true). California is true again from 2026-01-01. Mississippi is false from 1999-07-01 (it was 2024-01-01).
  • New eligibility.asset.state_limit.{individual,couple} (by state: CA, MN). msp_asset_eligible tests resources against the higher of the federal and state limits. Under 42 U.S.C. 1396a(r)(2) a state may be less restrictive than the federal rule but not more. Minnesota's statute adds that when the Part D low-income subsidy limits exceed $10,000 or $18,000, the person's assets may be up to the subsidy limit. Whether that means the full subsidy limit ($16,590 / $33,100 in 2026) or the federal MSP level ($9,950 / $14,910) is not settled (rulespec-us 1936, interpretations). Minnesota's own chart, DHS-3461A, lists $10,000 / $18,000, as the PR does.
  • New eligibility.income.state_general_exclusion (by state: IL, MS). msp_countable_income takes the larger of the $20 SSI exclusion and the state amount. It applies that amount once for an individual and once for a person with a deemed ineligible spouse. For Illinois's per-spouse exemption, each spouse's earned and unearned income are floored at zero separately, so a self-employment loss earns no exemption and does not offset unearned income.
  • For a couple who both have Medicare, the exclusion comes off the combined income once, as in SSI and Mississippi. Illinois is the exception: under the new by-state flag eligibility.income.state_general_exclusion_per_spouse (IL true), each spouse gets their own $25, capped at that spouse's own income (PM 15-04-03-a; 89 Ill. Adm. Code 120.335(a)(1)).
  • Illinois gives its $25 only on income other than SSI and contributions. Under the new by-state flag eligibility.income.state_general_exclusion_excludes_contributions (IL true), the income the $25 is capped at leaves out the sources in the new list eligibility.income.contribution_sources (alimony_income, child_support_received, financial_assistance). The $20 SSI exclusion stays the floor, so a person whose only income is alimony keeps $20 (42 U.S.C. 1396a(r)(2)). An applicant with a deemed ineligible spouse gets one $25: the spouse has income.
  • Values dated after January 1 (California's 2022-07-01) apply from that month, because the MSP variables are monthly.

Example (January 2026, Illinois): a couple with $1,100 and $740 a month of Social Security counts 1,840 − 2 × 25 = $1,790. That is under the $1,803.33 QMB couple limit. One exemption for the couple would give $1,815, over the limit. If the second spouse's $740 were alimony, it would earn no exemption: 1,840 − 25 = $1,815, over the QMB limit.

Not confirmed against a primary source

  • Illinois start date: no Illinois source says when the $25 exemption began. The parameter starts on 1997-03-01, the revision date on PM 06-12-01-c. The YAML comment says the exemption was in effect no later than that date. PM 06-12-01-c names QMB only. SLIB and QI-1 reach the same $25 through PM 06-13-01-b and PM 06-14-01-b, which send countable income to PM 15-05-03 ("AABD income disregard of $25").
  • Illinois contributions: PM 06-12-01-c, the QMB exemption page, exempts "income, other than SSI income" and names no exception for contributions. PM 15-04-03-a, to which PM 06-12-01-b sends QMB countable income, and 89 Ill. Adm. Code 120.335(a)(1) both leave contributions out. The PR follows the regulation and records the difference as an unreviewed candidate, us-il:msp-income-exemption-contributions, in source_conflicts/candidates.yaml.
  • Mississippi start date: the 1999 manual implies the $50 exclusion from 07-01-99. Page 5401 sets the break-even point at "FPL + $50" from that date but does not state the exclusion.
  • Mississippi statute: Miss. Code Ann. 43-13-115 could not be retrieved (403 from every host tried), so it was not checked. The $50 rests on 23 Miss. Admin. Code Part 104. That rule cites Social Security Act 1902(r)(2), which lets a state use a less restrictive income method.
  • California state plan amendment: the CMS-approved amendment for the $130,000 limit was not read. DHCS's host blocked downloads. ACWDL 25-27 states: "DHCS has received federal approval from the Centers for Medicare and Medicaid Services (CMS) to implement higher asset limits than the federally established limits for MSP eligibility determinations."

Limitations

  • Minnesota applies $18,000 to "a married couple or family of two or more". PolicyEngine applies the couple limit to married couples only.
  • California's limit also depends on household size: $130,000 for one person plus $65,000 for each additional household member. MSP tests one person or a couple, so only the $130,000 / $195,000 amounts apply. A single Medicare beneficiary living with a child is held to $130,000.
  • Mississippi replaces SSI's ineligible-spouse budgeting with one combined couple test, excludes up to $5 a month of interest, dividends and royalties, and can disregard cost-of-living increases (23 Miss. Admin. Code Part 104, Rule 1.1(C)(2)(c), (d), (g)). PolicyEngine deems an ineligible spouse's income only above the SSI couple-minus-individual difference and models neither exclusion. Follow-up issue Medicare Savings Programs: Mississippi's combined couple test for an ineligible spouse, $5 investment income exclusion and COLA disregard #10479.
  • ACWDL 25-14 (pp. 2–3) applies the reinstated 2026 asset test to existing members only at their next renewal or change in circumstances. The model applies it to everyone from January 2026.

Out of scope

Test plan

  • YAML cases follow the sources:
    • Washington: the asset test in December 2022 (ineligible at $100,000) and none in January 2023;
    • California: June and July 2022 for an individual and a couple (the $130,000 / $195,000 limits start), December 2025 (no test), an individual at and above $130,000 in 2026, and a couple at and above $195,000;
    • Minnesota: an individual at and above $10,000, and a couple at $18,000 and $18,001;
    • Illinois: $25 for an individual, two exemptions for a couple who both have income ($1,790), one when only one spouse has income ($1,075), none for a spouse whose only income is a self-employment loss ($1,475), none for a spouse whose only income is alimony ($1,815, not QMB), the $20 floor for a single person with only alimony ($980), the full $25 for a person with Social Security and alimony ($975), one $25 with a deemed ineligible spouse ($1,792.50), and a spouse's exemption capped at their $10 of interest ($1,075);
    • Mississippi: $50 for an individual, once for a couple ($1,750), $20 in June 1999 and $50 from July 1999, and the asset test in June 1999 but not July 1999.
  • Source conflicts: one unreviewed candidate, us-il:msp-income-exemption-contributions (above). Welf. & Inst. Code 14005.62(a)(1) directs DHCS to seek approval for "a disregard of" $130,000 in nonexempt property. Subdivision (c) of the same section calls that amount "the asset limit", and subdivision (d) operates it only as federally approved. The approved implementation (ACWDL 25-27) applies it as the MSP limit, which is what the PR encodes.
  • make format (ruff)
  • Changelog fragment in changelog.d/
  • CI passes (tests were not run locally)

The two partner contract cases in these states keep their expected values, and no file in tests/policy/baseline/partners/ changes:

  • The California senior holds $50,000 in assets, under the $130,000 limit.
  • The Illinois senior is single, so the per-spouse rule does not reach them, and has no contribution income. Their countable income falls from $874.17 to $871.67 a month, which keeps them in QMB.

axiom: TheAxiomFoundation/rulespec-us#1936 queued

🤖 Generated with Claude Code

hua7450 and others added 2 commits October 21, 2026 16:30
- Washington: no MSP asset test from 2023-01-01 (WSR 22-21-043).
- California: $130,000 / $195,000 asset limit from 2022-07-01; asset test
  reinstated from 2026-01-01 (ACWDL 21-31, 22-25, 25-14, 25-27).
- Minnesota: $10,000 / $18,000 asset limit, or the federal limit when
  higher (Minn. Stat. 256B.057 subd. 3).
- Illinois $25 and Mississippi $50 general income exclusions in place of
  the SSI $20.

Closes PolicyEngine#10359

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
hua7450 and others added 2 commits October 26, 2026 16:49
…atute references

- Illinois gives each applying spouse with income their own $25 exemption
  (PM 15-04-03-a, 89 Ill. Adm. Code 120.335(a)(1)); new by-state flag
  state_general_exclusion_per_spouse, used only in the couple path.
- Tests pin Washington before 2023, California July 2022 and December
  2025, California's couple limit, and Minnesota's individual and couple
  limits from above.
- Cite Welf. & Inst. Code 14005.62, Laws of Washington 2022 ch. 297 and the
  official Mississippi rules; label the Illinois and Mississippi start
  dates as in-effect-by dates.

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

- A spouse's own income for the Illinois $25 exemption floors earned and
  unearned income separately, so a self-employment loss earns no
  exemption and does not raise countable income.
- Mississippi's MSP asset test ended 1999-07-01 (Eligibility Manual page
  7220; 23 Miss. Code R. 103-1.8(A)(1)), not 2024.

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

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

Program Review

PR #10360, "Apply state Medicare Savings Program asset limits and income exclusions (WA, CA, MN, IL, MS)" (hua7450). Round 1, full review.

IDs: C = critical, SA = should address, G = suggestion.

Paths: V/ = policyengine_us/variables/gov/hhs/medicare/savings_programs/; I = V/income/msp_countable_income.py; A = V/eligibility/msp_asset_eligible.py; P/ = policyengine_us/parameters/gov/hhs/medicare/savings_programs/eligibility/; TI and TA = the msp_countable_income.yaml and msp_asset_eligible.yaml tests under policyengine_us/tests/policy/baseline/gov/hhs/medicare/savings_programs/. Line numbers refer to the reviewed head. PDF links use file page numbers.

Source Documents

Branch Status

  • 5 ahead and 21 behind main at setup; main is now 4c65c82191 (30 behind). Only #10283 there touches SSI (institutional amounts), and nothing touches MSP files or SSI income rules. MERGEABLE.
  • Dependency: #10375 (same author, open) is stacked on this PR and #10374. It lowers CA's state_limit to $21,000 / $31,000 on 2027-07-01. Merge this PR first and #10375 right after (G1). #10375 already plans to renumber its MSP cases.
  • #10146 (MaxGhenis) rewrites the same lines in I; #10332 splits _apply_ssi_exclusions but keeps general_exclusion=. The PR that merges second must carry the general_exclusion= arguments, the per-spouse block and the C1 change.
  • #10364 shares no file; its uses_msp_limit (AR, OK, SC) reads only the federal limits. #10240 changes is_ssi_spousal_deeming_applies (I:56); no text conflict.

What the PR gets right

  • Values and dates match primary sources in all five states: WA no test from 2023-01-01; CA $130,000 / $195,000 from 2022-07-01, no test in 2024-2025, test again from 2026; MN $10,000 / $18,000 from 2000-10-01; IL $25; MS $50 and no test from 1999-07-01.
  • Design. max_(federal, state) for the limit (A:32-38) and the exclusion (I:60-62) follows 42 U.S.C. 1396a(r)(2). A state limit of 0 means "none", so no .inf is needed. No hard-coded values.
  • IL per-spouse rule. The cap at each spouse's income and the separate zero floors are correct; the body's $1,790 example reproduces.
  • Monthly dates start in the right month (MS $480 in June 1999, $450 in July; CA couple at $150,000 ineligible June 2022, eligible July 2022).
  • Tests and body. 19 new cases, all correct by hand. The body discloses every unconfirmed point. No partner test changes.

Critical (Must Fix)

C1. Illinois gives its $25 exemption on contributions (alimony, child support, outside cash help).

  • Where: I:60-76 and the single path I:84-90. Both count all of ssi_unearned_income, which includes alimony_income, child_support_received and financial_assistance (policyengine_us/parameters/gov/ssa/ssi/income/sources/unearned.yaml:16-18).
  • Evidence: PM 15-04-03-a, which the PR quotes, exempts "the first $25 of earned or unearned income, other than SSI income and contributions", defines a contribution as income from outside the medical unit (child support, alimony), and allows two exemptions only if both persons have such other income. 89 Ill. Adm. Code 120.335(a)(1), cited in both IL files, also leaves out "contributions from a spouse or other individual". QMB (PM 06-12-01-b), SLIB and QI-1 all route to PM 15-05-03, which applies the $25 of PM 15-04-03-a. PM 06-12-01-c is silent on contributions; the regulation governs.
  • Runs at the head, January 2026:
Household Head Illinois rule
IL couple 70+; SS $1,300/mo and alimony only $540/mo 1,790; QMB true 1,840 − 25 = 1,815 > $1,803.33: not QMB
Same with child support or outside cash help 1,790 1,815
IL single, alimony only $1,000/mo 975 No $25; SSI $20 floor: 980
  • Why this severity: a regulatory mismatch with the PR's own sources, not listed as a limitation, and a test proves a flip from QMB to SLMB. The group is small.
  • Fix: on a copy of the head, 200 tests pass with it (MSP folder 82, Cases 12-14, the SA1/SA2/G2 cases, partner healthcare 70 and IL/CA/WA signatures 40, read-only). ruff format --check is clean.

New P/income/state_general_exclusion_excludes_contributions.yaml:

description: States exclude contributions from the income that the state general income exclusion applies to under the Medicare Savings Programs, if this is true.
metadata:
  unit: bool
  period: year
  label: MSP state general income exclusion excludes contributions
  breakdown:
    - state_code
  reference:
    - title: Illinois Department of Human Services Policy Manual PM 15-04-03-a - AABD Income Disregard (Community Cases)
      href: https://www.dhs.state.il.us/page.aspx?item=16387
    - title: Illinois Department of Human Services Policy Manual PM 06-12-01-b - QMB Income Limit
      href: https://www.dhs.state.il.us/page.aspx?item=14177
    - title: Illinois Department of Human Services Policy Manual PM 15-05-03 - AABD Community
      href: https://www.dhs.state.il.us/page.aspx?item=16446
    - title: 89 Illinois Administrative Code 120.335(a)(1) - Exempt Unearned Income
      href: https://www.ilga.gov/ftp/JCAR/AdminCode/089/089001200H03350R.html

IL:
  0000-01-01: false
  # Same start as state_general_exclusion.
  1997-03-01: true

New P/income/contribution_sources.yaml:

description: The Medicare Savings Programs treat these income sources as contributions, which are income from a person outside the medical unit, when a state excludes contributions from its general income exclusion.
values:
  # Same start as the SSI unearned income source list these come from.
  1975-01-01:
    - alimony_income
    - child_support_received
    - financial_assistance
metadata:
  unit: list
  period: year
  label: MSP contribution income sources
  reference:
    - title: Illinois Department of Human Services Policy Manual PM 15-04-03-a - AABD Income Disregard (Community Cases)
      href: https://www.dhs.state.il.us/page.aspx?item=16387
    - title: 89 Illinois Administrative Code 120.335(a)(1) - Exempt Unearned Income
      href: https://www.ilga.gov/ftp/JCAR/AdminCode/089/089001200H03350R.html

In I, replace lines 59-76 with the block below, and at I:89 pass general_exclusion=own_general_exclusion. The deemed path keeps general_exclusion: deeming means the spouse has income, so one $25 applies.

        ssi_general = parameters(period).gov.ssa.ssi.income.exclusions.general
        state_exclusion = p.state_general_exclusion[state]
        general_exclusion = max_(ssi_general, state_exclusion)
        # Illinois exempts the first $25 of income other than SSI and
        # contributions such as alimony and child support, and gives each
        # applying spouse their own exemption (PM 15-04-03-a; 89 Ill. Adm.
        # Code 120.335(a)(1)); SSI and Mississippi allow one per couple.
        # Floor each kind of income: a self-employment loss earns no exemption
        # and does not offset unearned income.
        own_monthly_income = max_(person("ssi_earned_income", period), 0) + max_(
            person("ssi_unearned_income", period), 0
        )
        excludes_contributions = p.state_general_exclusion_excludes_contributions[
            state
        ].astype(bool)
        contributions = add(person, period, p.contribution_sources)
        qualifying_income = where(
            excludes_contributions,
            max_(own_monthly_income - contributions, 0),
            own_monthly_income,
        )
        # The SSI general exclusion stays the floor (42 U.S.C. 1396a(r)(2)).
        own_general_exclusion = where(
            excludes_contributions,
            max_(ssi_general, min_(state_exclusion, qualifying_income)),
            general_exclusion,
        )
        per_spouse = p.state_general_exclusion_per_spouse[state].astype(bool)
        couple_general_exclusion = where(
            per_spouse,
            max_(
                ssi_general,
                person.marital_unit.sum(min_(state_exclusion, qualifying_income)),
            ),
            general_exclusion,
        )

Add to the documentation block: "Illinois gives its $25 only on income other than SSI and contributions (alimony, child support, outside cash help); the $20 SSI exclusion stays the floor." Append to TI (Cases 12 and 13 fail at the head; all pass with the fix):

- name: Case 12, Illinois allows no exemption for a spouse whose only income is a contribution.
  period: 2026-01
  absolute_error_margin: 0.01
  input:
    people:
      person1:
        age: 72
        social_security_retirement: 15_600
      person2:
        age: 70
        alimony_income: 6_480
    tax_units:
      tax_unit:
        members: [person1, person2]
    marital_units:
      marital_unit:
        members: [person1, person2]
    spm_units:
      spm_unit:
        members: [person1, person2]
        spm_unit_is_married: true
    households:
      household:
        members: [person1, person2]
        state_code: IL
  output:
    # PM 15-04-03-a: a contribution (alimony) earns no exemption, so one $25.
    # (15,600 + 6,480) / 12 - 25 = 1,815, above the 1,803.33 QMB couple limit.
    msp_countable_income: [1_815, 1_815]
    is_qmb_eligible: [false, false]

- name: Case 13, Illinois single person whose only income is a contribution keeps the SSI $20 floor.
  period: 2026-01
  absolute_error_margin: 0.01
  input:
    age: 70
    alimony_income: 12_000
    state_code: IL
  output:
    # 89 Ill. Adm. Code 120.335(a)(1): no $25 on contributions.
    # 42 U.S.C. 1396a(r)(2) keeps the SSI $20: 12,000 / 12 - 20 = 980.
    msp_countable_income: 980

- name: Case 14, Illinois exemption on Social Security is unchanged when the person also has alimony.
  period: 2026-01
  absolute_error_margin: 0.01
  input:
    age: 70
    social_security_retirement: 6_000
    alimony_income: 6_000
    state_code: IL
  output:
    # 500 + 500 = 1,000; Social Security alone exceeds $25: 1,000 - 25 = 975.
    msp_countable_income: 975

Should Address

Both cases below pass at the head and with the C1 fix. Each uses the tax_units, marital_units, spm_units and households blocks of Case 8 (TI:150-163, state_code: IL) after people.

SA1. The deemed-spouse path with a state exclusion has no test.

  • Where: I:104-110 (new argument at I:109). Cases 6-11 cover only singles and couples who both have Medicare.
  • Evidence: if the argument is removed, the deemed path falls back to $20 and all 31 cases in the two test files still pass. The code is right (IL 1,792.50, MS 1,767.50, TX 1,797.50).
  • Why this severity: a missing edge case for an already-tested variable, on a line this PR adds.
  • Fix: append to TI. An MS twin (expected [1_767.5, 1_192.5]) is optional; it pins the MS limitation in #10479.
- name: Case 15, Illinois applies one 25 dollar exemption when income is deemed from an ineligible spouse.
  period: 2026-01
  absolute_error_margin: 0.01
  input:
    people:
      person1:
        age: 70
        social_security_retirement: 7_200
      person2:
        age: 50
        employment_income: 30_000
    # Entity blocks of TI:150-163.
  output:
    # PM 15-04-03-a: one applicant, so one $25. Deemed: unearned 600 - 25 = 575;
    # earned (2,500 - 65) / 2 = 1,217.50; 575 + 1,217.50 = 1,792.50.
    # The second value belongs to the spouse without Medicare.
    msp_countable_income: [1_792.5, 1_205]

SA2. The per-spouse cap is tested only at its end points.

  • Where: I:68-75. Case 9 has a spouse with no income; Case 8 has spouses above $25 a month.
  • Evidence: no case has a spouse with $0 to $25 a month, the only range where the cap's period matters. Reading own_monthly_income for the year ($120 caps at $25, not $10) passes all 31 cases.
  • Why this severity: a missing edge case for an already-tested variable.
  • Fix: append to TI. It fails under the yearly read ([1_060, 1_060]).
- name: Case 16, Illinois caps a spouse's 25 dollar exemption at that spouse's income.
  period: 2026-01
  absolute_error_margin: 0.01
  input:
    people:
      person1:
        age: 72
        social_security_retirement: 13_200
      person2:
        age: 70
        interest_income: 120
    # Entity blocks of TI:150-163.
  output:
    # PM 15-04-03-a: "If total income is less than $25, exempt the actual amount."
    # (13,200 + 120) / 12 = 1,110; exemptions 25 + 10 = 35; 1,110 - 35 = 1,075.
    msp_countable_income: [1_075, 1_075]

Suggestions

G1. California's limit has no end, but WIC 14005.62(e) makes the section inoperative on 2027-07-01.

  • Where: P/asset/state_limit/individual.yaml:22-24, couple.yaml:22-24. At the head, a CA single person with $100,000 is still eligible in July 2027.
  • Why this severity: outside this PR's scope, and #10375 (open, stacked) carries the new value. If #10375 stalls, this becomes should-address.
  • Fix: no change here. Merge #10375 right after this PR.

G2. Pin MS's income start date and CA's couple start date.

  • Where: P/income/state_general_exclusion.yaml:31, P/asset/state_limit/couple.yaml:24. Their twins are pinned (TA Cases 20 and 13); these are not. The IL date is an estimate (G3), so it gets no case.
  • Fix: both pass at the head and fail on the change they pin. Append to TI:
- name: Case 17, Mississippi's 50 dollar exclusion starts in July 1999.
  period: 1999
  absolute_error_margin: 0.01
  input:
    age: 70
    social_security_retirement: 6_000
    state_code: MS
  output:
    # 500 - 20 = 480 in June; 500 - 50 = 450 from July.
    msp_countable_income:
      1999-06: 480
      1999-07: 450

Append to TA, with the entity blocks of TA:147-160 and state_code: CA:

- name: Case 21, California's couple MSP asset limit starts in July 2022.
  period: 2022
  input:
    people:
      person1:
        age: 70
        bank_account_assets: 75_000
      person2:
        age: 68
        bank_account_assets: 75_000
    # Entity blocks of TA:147-160, state_code: CA.
  output:
    # Federal 2022 couple limit 12,600 through June; 195,000 from July 1, 2022.
    msp_asset_eligible:
      2022-06: [false, false]
      2022-07: [true, true]

G3. The IL start date (1997-03-01) is a manual revision date. P/income/state_general_exclusion.yaml:26-27, ..._per_spouse.yaml:20-21. IL QMB began in 1989 (89 Ill. Adm. Code 120.74). It is disclosed and changes no simulated year. Move it back only if an older source turns up.

G4. Add PM 15-05-03 to P/income/state_general_exclusion.yaml after line 16. PM 06-13-01-b and 06-14-01-b only point to it, and it holds the $25.

    - title: Illinois Department of Human Services Policy Manual PM 15-05-03 - AABD Community
      href: https://www.dhs.state.il.us/page.aspx?item=16446

G5. Use the ACWDL 21-31 subject line (page 1) at P/asset/state_limit/individual.yaml:9 and couple.yaml:9, as the 22-25 and 25-14 entries do:

    - title: "California DHCS All County Welfare Directors Letter 21-31, Increases to the Asset Limits for Non-Modified Adjusted Gross Income Medi-Cal Programs #page 2,4"

G6. PR body, Out of scope: add "Illinois also deducts up to $50 a month of current child support received and court-ordered child support paid (PM 15-05-03, PM 15-04-03-f). The model does not apply these deductions."

G7. I reads the same incomes for the year (I:44-45) and again for the month (I:68-70). The result is correct. Optional style: own_monthly_income = (max_(earned_income, 0) + max_(unearned_income, 0)) / MONTHS_IN_YEAR (not run; run TI after). Moot if #10146 merges first.

G8. Follow-up issue (pre-existing): the couple limit follows spm_unit_is_married (A:26), not the person's marriage. At the head, an unmarried 92-year-old in a married couple's SPM unit passes with TX $12,000, CA $140,000 and MN $12,000. TX shows it predates the PR; the PR widens the gap (CA $65,000, MN $8,000, federal $4,960). It overstates eligibility. Fix: person.marital_unit.nb_persons() == 2, as in #10364.

G9. Follow-up issue: IL's couple disregard differs by program. policyengine_us/parameters/gov/hhs/medicaid/eligibility/categories/senior_or_disabled/income/disregard/couple.yaml:47-48 gives one $25 per couple, while this PR gives two under MSP from the same AABD rule (PM 15-04-03-a).

Investigated and cleared

  • Pooled per-spouse exemptions (rejected). A claim held that each $25 must come off its owner's income before SSI's $65 and one-half ($1,430 against the model's $1,417.50 for $12,000 SS plus $12,000 wages). No source sets that order. PM 15-05-03 uses a pooled budget, IL's own earned-income rule is out of scope, and the model matches 20 CFR 416.1160. No action.
  • MN LIS clause. max_(federal, state) is the literal reading and matches DHS-3461A; the body discloses the open reading (rulespec-us #1936).
  • CA 2024-2025 state_limit is inert (applies is false). MS in-kind support never enters MSP income. The IL asset test stays federal (PM 06-12-01-a).
  • Loss handling. The body's self-employment-loss claim is accurate; a rental loss still offsets under the existing combined rule.
  • ACWDL 25-27 is unreadable, but ACWDL 25-14 and WIC 14005.62 support the same values.
  • Surviving mutants: one equivalent (every state value exceeds the federal one) and a missing unearned floor that needs a rare rental loss.

Out of scope / follow-up

  • MS couple test, $5 interest and COLA disregard (#10479); IL earned income (PM 08-02-03-a); MN and WA COLA timing; higher-income-limit states; CA household size; MN "family of two or more"; CA reinstatement at renewal. All are in the PR body.
  • #10364's uses_msp_limit path bypasses state_limit and applies. No defect unless CA or MN is flagged later.
  • Open issues for G8 and G9.

Validation Summary

Check Result
CI 33 pass, 3 skipping at af3e256ab5
Local tests TA 20/20, TI 11/11; MSP folder 82; gov/hhs/medicaid 695
Partner contract tests None edited. Read-only: healthcare edge cases 70/70; IL, CA, WA signatures 40/40
References All new entries checked; pages and anchors correct. ACWDL 25-27 unreadable. G4, G5
Regulatory WA, CA, MN, MS correct. IL contributions (C1). CA sunset via #10375 (G1)
Code patterns No hard-coded values; vectorized; full metadata; changelog correct
Tests and mutation 19 new cases, functional. 30/38 mutants killed; 34 with SA1, SA2, G2
C1 fix 200 pass on a copy of the head; vectorized run matches hand values
PR body axiom: line present (process note only, not counted). G6
Other reviews None

Review Severity: REQUEST_CHANGES

C1, SA1 and SA2 are open, and any open critical or should-address item requires changes; G1-G9 are suggestions.

Next Steps

To auto-fix issues: run the fix-pr workflow for this PR.

  1. Apply C1: two parameters, the block in I, the documentation sentence, Cases 12-14.
  2. Add Cases 15 and 16 (SA1, SA2).
  3. Take the suggestions that you agree with. G8 and G9 need follow-up issues only.
  4. Run make format, then TI, TA and the MSP test folder.
  5. Merge this PR before #10375. Whichever of this PR and #10146 merges second carries the C1 change.

hua7450 and others added 3 commits October 27, 2026 14:58
…w tests

Illinois's $25 exemption applies only to income other than SSI and
contributions (PM 15-04-03-a; 89 Ill. Adm. Code 120.335(a)(1)), with the
$20 SSI exclusion as the floor. Adds the deemed-spouse, per-spouse cap
and Mississippi and California start-date cases, and fixes two
reference titles.

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

hua7450 commented Oct 27, 2026

Copy link
Copy Markdown
Collaborator Author

Thanks, Pavel. Changes are at be43df1, which also merges main (4c65c82; no MSP or SSI income file changed there). Tests were not run locally; CI will.

Item Disposition
C1 Fixed. Your two parameters (state_general_exclusion_excludes_contributions, contribution_sources), the formula block, own_general_exclusion on the single path and the documentation sentence are in. Cases 12-14 are added as written. I also cited 89 Ill. Adm. Code 120.74 on the new flag: it counts QMB income under Part 120, which ties 120.335(a)(1) to QMB. PM 06-12-01-c names only SSI, so I recorded the difference as an unreviewed candidate, us-il:msp-income-exemption-contributions, in source_conflicts/candidates.yaml. The PR follows the regulation and PM 15-04-03-a.
SA1 Fixed. Case 15 (Illinois, deemed spouse: 1,792.50 and 1,205). I left out the Mississippi twin. The Illinois case already pins the general_exclusion argument on the deemed path, and the Mississippi value would pin behavior that #10479 plans to change.
SA2 Fixed. Case 16 (a spouse with $10 a month of interest: 1,075).
G1 No change. #10375 (head 4579b28) adds the 2027-07-01 values. Merge this PR first. Its four MSP asset cases are also numbered 21-24, and this PR now adds a Case 21 at the end of the same file. When #10375 merges this head, it keeps both sides and renumbers its cases 22-25.
G2 Done. msp_countable_income.yaml Case 17 (Mississippi, $480 in June 1999 and $450 in July) and msp_asset_eligible.yaml Case 21 (California couple, June and July 2022).
G3 No change. No older Illinois source turned up; the start date stays disclosed.
G4 Done. PM 15-05-03 added to state_general_exclusion.yaml.
G5 Done. The ACWDL 21-31 subject line in both state_limit files.
G6 Done. Added to the PR body's Out of scope list.
G7 Declined. Reading the yearly values and dividing by 12 is the pattern this repo avoids in monthly formulas. The bare monthly read lets Core divide, and it matches the new monthly read of contributions.
G8 Follow-up issue #10514. It also covers msp_fpg, which uses the same spm_unit_is_married flag for the income limit.
G9 Follow-up issue #10515. I also added the contributions rule to #10472 (the same Illinois $25 in the medically needy budget).

The PR body and TheAxiomFoundation/rulespec-us#1936 describe the new head.

hua7450 and others added 2 commits October 27, 2026 15:58
Brings in main's CI fix.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Mississippi's general exclusion applies to all of the applicant's own
income (23 Miss. Admin. Code Part 104, Rule 4.2(C)(1)), so it does not
exclude contributions. Listing it also satisfies the guard against
single-member breakdown parameters. Results are unchanged.

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

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.

Medicare Savings Programs: outdated asset rules in WA, CA and MN, and state income exclusions in IL and MS

2 participants