Skip to content

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

Merged
hua7450 merged 12 commits into
PolicyEngine:mainfrom
hua7450:msp-state-asset-income-rules
Oct 29, 2026
Merged

hua7450 merged 12 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), (C)(2) ("Only one general exclusion can be applied to the combined income of any couple", pp. 21–22) and (C)(5) ("The general exclusion is not applied to Income Based on Need (IBON).", p. 23); 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. For a couple whose exemptions total less than $20, the $20 SSI exclusion also stays the floor. Mississippi is false in the flag: Rule 4.2(C)(5) withholds its $50 only from income based on need, so alimony and other contributions keep it.
  • 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), and the $20 SSI floor for a couple whose only qualifying income is $10 of interest ($990);
    • Mississippi: $50 for an individual, on alimony ($950), 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>

@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 2, incremental review of af3e256ab5..7291aa7713.

IDs: C = critical, SA = should address, G = suggestion. New items continue the numbering after the highest prior ID in each class.

Paths: V/ = policyengine_us/variables/gov/hhs/medicare/savings_programs/; I = V/income/msp_countable_income.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

  • Reviewed head SHA: 7291aa7
  • Mode: incremental (round 2)
  • Scope: 3 PR commits and 2 merges of main (78ee886f0c to 4c65c82191, 3e659a6590 to 4a1a3cdeb7; neither touches MSP or SSI income files). PR files changed: I (+33/−10: the C1 block, one reference, one documentation sentence), two new parameters (P/income/state_general_exclusion_excludes_contributions.yaml, P/income/contribution_sources.yaml), one reference in P/income/state_general_exclusion.yaml, the ACWDL 21-31 title in both P/asset/state_limit/ files, TI Cases 12-17 (+129), TA Case 21 (+31), the changelog fragment, and one new candidate in source_conflicts/candidates.yaml:2194-2230. The last commit, 7291aa7713, came after the author's reply and adds an explicit Mississippi false to the new contributions flag. The us-va:tanf-up-standards-below-tanf candidate in the diff is main noise (#10253).
  • IL: PM 15-04-03-a ("The first $25 of earned or unearned income, other than SSI income and contributions, is exempt"; "A contribution is income received from a person outside the medical unit (i.e., child support, alimony)"); PM 06-12-01-b ("See PM 15-05-03 (AABD) to figure countable monthly income"); PM 15-05-03 ($25 disregard, and the $50 child support deductions behind G6); PM 06-12-01-c ("other than SSI income", no contributions exception); 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 (QMB countable income "see 89 Ill. Adm. Code 112, 113, 120"). All fetched this round; all support the values and titles.
  • MS: 23 Miss. Admin. Code Part 104, Rule 4.2, file pages 21-23 (revised 07/01/2025). (C)(1) on page 22; (C)(5) on page 23.
  • CA: ACWDL 21-31 was not re-fetched (DHCS returns an HTML block page). The G5 title comes from the round 1 reading of page 1.

Branch Status

  • 10 ahead and 34 behind main (1976c4b600). git merge-tree with main is clean. main changed no MSP or SSI income file since the merge base, only source_conflicts/candidates.yaml (+966 lines). The merged file has no duplicate ids, and the new id is not in the vendored register.
  • CI at head: 33 pass.
  • #10375 (stacked) has diverged: its head 8f9c019428 is 21 ahead and 5 behind this head, so it does not yet hold the C1 block or Cases 12-17 and 21. Merge this PR first. Then #10375 must merge main, keep both sides of I, TI and TA, and renumber its asset cases 22-25, as the author said. That is #10375's review, not a finding here.
  • #10146 (open) still edits I, TI and _apply_ssi_exclusions.py; #10332 (open) edits _apply_ssi_exclusions.py. The PR that merges second must keep general_exclusion=own_general_exclusion on the single path, general_exclusion=general_exclusion on the deemed path and the per-spouse block.

Round 1 items

ID Status Evidence
C1 RESOLVED I:62-97 is the suggested block; the single path passes own_general_exclusion (I:110); the deemed path keeps general_exclusion (I:130); the documentation sentence is at I:40-42. Both parameters are as suggested; the flag adds 89 Ill. Adm. Code 120.74, which ties QMB countable income to Part 120 and so to 120.335(a)(1). Cases 12-14 (TI:259-312) pass. Mutants: dropping the contributions subtraction fails Cases 12 and 13; dropping the single-path $20 floor fails Case 13; reading contributions for the year fails Case 14. The difference with PM 06-12-01-c is recorded as candidate us-il:msp-income-exemption-contributions; its example ($980 against $975) is correct, and follows: unknown matches the file's convention for entries with no statute. The couple-path $20 floor has no test (SA3).
SA1 RESOLVED Case 15 (TI:314-343), [1_792.5, 1_205]. Removing the deemed-path argument (I:130) now fails it (1 of 89 fails). Hand check: 600 − 25 = 575; (2,500 − 65) / 2 = 1,217.50; total 1,792.50. Spouse: (2,500 − 25 − 65) / 2 = 1,205. I accept leaving out the MS twin: the IL case pins the argument, and #10479 plans to change the MS behavior.
SA2 RESOLVED Case 16 (TI:345-373), 1,075. Reading own_monthly_income for the year fails it (3 of 89 fail). Hand check: 1,100 + 10 = 1,110; 25 + 10 = 35; 1,075.
G1 DEFERRED, accepted #10375 (open) carries the 2027-07-01 values. Merge order under Branch Status.
G2 RESOLVED TI Case 17 (TI:375-386): 480 in June 1999, 450 in July. TA Case 21 (TA:322-351): false in June 2022 (150,000 > 12,600), true in July (≤ 195,000). Moving the MS date to June or the CA couple date to June fails each case.
G3 DECLINED, accepted No older Illinois source turned up. The date is disclosed and changes no simulated year.
G4 RESOLVED P/income/state_general_exclusion.yaml:13-14. The page holds the $25.
G5 RESOLVED P/asset/state_limit/individual.yaml:9, couple.yaml:9 use the ACWDL 21-31 subject line.
G6 RESOLVED PR body, Out of scope. PM 15-05-03 lists both deductions and points to PM 15-04-03-f.
G7 DECLINED, accepted The reason holds: the monthly read lets Core divide, and it matches the monthly read of contributions at I:77. Style only.
G8 DEFERRED, accepted Issue #10514 (open) also covers msp_fpg. The body names it.
G9 DEFERRED, accepted Issue #10515 (open) covers the AABD per-spouse $25 and contributions. The body names it.

New findings

Critical

None.

Should address

SA3. The $20 SSI floor on the Illinois couple exemption has no test.

  • Where: I:90-97, the max_(ssi_general, ...) at I:92-95. This line came from my own C1 block in round 1, which had no case for it. The gap is mine as much as the PR's.
  • Evidence: if the floor is removed, all 17 TI cases, all 89 cases in the MSP folder and the 40 IL partner cases (read-only) still pass. Every IL couple case has a sum of exemptions of $25 or more (Cases 8, 9, 11, 12, 16). The code is right: for a couple whose exemptions total less than $20, 42 U.S.C. 1396a(r)(2) keeps SSI's $20 for the couple.
  • Why this severity: a missing edge case for an already-tested variable, on a line this round adds. It is the same kind of gap as SA1 and SA2.
  • Fix: append to TI. It passes at the head and fails without the floor ([1_000, 1_000]).
- name: Case 18, Illinois couple whose exemptions total less than 20 dollars keeps the SSI 20 dollar floor.
  period: 2026-01
  absolute_error_margin: 0.01
  input:
    people:
      person1:
        age: 72
        alimony_income: 12_000
      person2:
        age: 70
        interest_income: 120
    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: alimony earns no exemption; the $10 of interest earns $10.
    # 42 U.S.C. 1396a(r)(2) keeps the SSI $20 for the couple:
    # (12,000 + 120) / 12 = 1,010; 1,010 - 20 = 990.
    msp_countable_income: [990, 990]

Suggestions

G10. The Mississippi entry in the contributions flag cites the wrong clause, and no test pins it.

  • Where: P/income/state_general_exclusion_excludes_contributions.yaml:19-20 and :26-29 (commit 7291aa7713).
  • Evidence: Rule 4.2(C)(1) (file page 22) says only that the exclusion "applies to the individual applicant's or recipient's own income, which includes income which has been deemed to them". It does not mention contributions. The clause that supports false is (C)(5) on page 23: "The general exclusion is not applied to Income Based on Need (IBON)." That is the only exception, so alimony and outside cash help keep the $50. The value is correct and equals the default for an unlisted state. If MS is set to true, all 17 TI cases still pass.
  • Fix: change the reference and the comment:
    - title: "23 Mississippi Administrative Code Part 104, Rule 4.2(C)(1) and (C)(5) - General Income Exclusion #page 22-23"
      href: https://www.sos.ms.gov/adminsearch/ACCode/00000278c.pdf#page=22
MS:
  # Rule 4.2(C)(5) withholds the exclusion only from income based on need,
  # so alimony and other contributions keep it.
  0000-01-01: false

Optional: append to TI. It passes at the head and fails if MS is true (980).

- name: Case 19, Mississippi applies its 50 dollar exclusion to alimony.
  period: 2026-01
  absolute_error_margin: 0.01
  input:
    age: 70
    alimony_income: 12_000
    state_code: MS
  output:
    # Rule 4.2(C)(5) withholds the exclusion only from income based on need:
    # 12,000 / 12 - 50 = 950.
    msp_countable_income: 950

Investigated and cleared

  • contribution_sources: all three sources are in the SSI unearned list (policyengine_us/parameters/gov/ssa/ssi/income/sources/unearned.yaml:16-18). financial_assistance is "Cash financial assistance from friends or relatives outside the household", which fits PM 15-04-03-a's "outside the medical unit".
  • qualifying_income floor (I:80): it only matters when an unearned loss offsets contributions, because own_monthly_income already includes them. The surviving mutant is near-equivalent.
  • Deemed path keeps general_exclusion: PM 15-04-03-a says that income of other persons in the standard "is not considered a contribution", and one applicant gets one $25. Correct as coded. The mutant that passes own_general_exclusion here survives, but it differs only for an applicant whose own income is all contributions or under $25.
  • Unlisted states: Core fills missing breakdown keys with 0, so every state other than IL is false.
  • Candidate entry: years.from: 2026 matches the current manual pages that were read; 73 other candidates use 2026. test_source_conflicts.py passes (103).
  • Formatting and changelog: ruff format --check on I is clean; one top-level fragment, changelog.d/msp-state-asset-income-rules.fixed.md, with an accurate updated sentence.
  • Partner tests: none edited. IL signatures and IL edge cases pass at the head (40/40, read-only), so the C1 change moved no partner value.

Tests run

  • TI and TA at the head: 38 passed (17 + 21).
  • MSP folder (gov/hhs/medicare/savings_programs): 89 passed.
  • policyengine_us/tests/code_health/test_source_conflicts.py: 103 passed.
  • IL partner tests (analytics_coverage/signatures/il.yaml, edge_cases/state/il), read-only: 40 passed.
  • Mutants on a copy (deleted after use), MSP folder: C1 subtraction removed (2 fail), single floor removed (1 fail), contributions read for the year (1 fail), deemed argument removed (1 fail), own income read for the year (3 fail), MS date to June (1 fail), CA couple date to June (1 fail), couple floor removed (0 fail: SA3), MS flag true (0 fail: G10), deemed path with own_general_exclusion (0 fail; cleared above).
  • Proposed Cases 18 and 19: both pass at the head; Case 18 fails without the couple floor, Case 19 fails with MS true.
  • Hand checks: Cases 12-17 and TA Case 21 are all correct (arithmetic above and in the round 1 items).

Verdict

REQUEST_CHANGES: C1, SA1, SA2 and G2 are resolved, and the other suggestions are done or reasonably declined or deferred. SA3 (one test case for the couple $20 floor) is open; G10 is a suggestion.

@hua7450

hua7450 commented Oct 29, 2026

Copy link
Copy Markdown
Collaborator Author

Thanks, Pavel. Round 2 is applied at 5bb5a50. That head also merges main at b210b45 (d97fd10), which brought in 10361, 10373 and 10370-10372 with no conflicts and no change to an MSP or SSI income file. Tests were not run locally; CI will.

Item Status Where
SA3 Fixed. Your Case 18, verbatim: an Illinois couple whose exemptions total $10 keeps the $20 floor, so 1,010 - 20 = 990. policyengine_us/tests/policy/baseline/gov/hhs/medicare/savings_programs/income/msp_countable_income.yaml:388
G10 Done. The reference now cites Rule 4.2(C)(1) and (C)(5), #page 22-23, with the href on page 22. The comment uses your (C)(5) wording. I checked page 23 myself: "The general exclusion is not applied to Income Based on Need (IBON)." Your optional Case 19 (Mississippi, alimony, 950) is added too. policyengine_us/parameters/gov/hhs/medicare/savings_programs/eligibility/income/state_general_exclusion_excludes_contributions.yaml:19-29; msp_countable_income.yaml:419

The PR body now covers both cases, the Mississippi false and the (C)(5) citation. TheAxiomFoundation/rulespec-us#1936 is updated to this head.

@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 3, incremental review of 7291aa7713..5bb5a500e0.

IDs: C = critical, SA = should address, G = suggestion. New items continue the numbering after the highest prior ID in each class.

Paths: V/ = policyengine_us/variables/gov/hhs/medicare/savings_programs/; I = V/income/msp_countable_income.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

  • Reviewed head SHA: 5bb5a50
  • Mode: incremental (round 3)
  • Scope: one PR commit (5bb5a500e0, 1:38pm EDT) and one merge of main (d97fd10407, which brings in #10361, #10370, #10371, #10372, #10373, #10252, #10255 and others). PR files changed: P/income/state_general_exclusion_excludes_contributions.yaml (+3/−3: the Mississippi reference title and comment) and TI (+43: Cases 18 and 19). I is byte-identical to the prior head. The source_conflicts/candidates.yaml hunks in the diff are all main noise (new AK, IA, IL HBWD, KY, ME, ND, NH, UT, VT, WA, WV and WY entries). No line is removed, and the PR's us-il:msp-income-exemption-contributions entry (candidates.yaml:2626) is unchanged. The main merge changes Medicaid aged/disabled files, but no MSP or SSI income file. The PR body now describes Cases 18 and 19, the Mississippi false and the (C)(5) citation.
  • MS: I fetched 23 Miss. Admin. Code Part 104 again. Rule 4.2 is on file pages 21-23 and still shows "Revised eff. 07/01/2025". (C)(1) is on page 22: "The general exclusion applies to the individual applicant's or recipient's own income, which includes income which has been deemed to them." (C)(5) is on page 23: "The general exclusion is not applied to Income Based on Need (IBON)." The other anchors in the PR also hold: Rule 1.1(C)(2)(b) on page 9 ("The $20 general exclusion is raised to a $50 general exclusion") and Rule 4.2(C)(2) on page 22.
  • IL, CA: no Illinois or California reference changed this round, so I did not fetch them again. The round 2 readings apply.

Branch Status

  • 12 ahead and 26 behind main at 95cf2373a0. git merge-tree with that commit is clean. The merged candidates.yaml has 299 ids and no duplicates. main has since moved 4 commits to 360f63a443 (3:28pm EDT, the Virginia TANF #10503). None of them touches an MSP, SSI or source-conflict file.
  • CI at head: 33 pass (re-checked at 3:34pm EDT). The "CI passes" box in the PR body test plan is still unticked. The author can tick it.
  • Partner tests: the PR edits no file under tests/policy/baseline/partners/ against its merge base. The IL, CA and WA signatures and state edge cases pass at the head (156/156, read-only).
  • #10375 (stacked) has caught up: its head 5a37f33d7f is 51 ahead and 0 behind this head, so it now holds the C1 block and Cases 12-19. Merge this PR first, then #10375.
  • #10146 and #10332 are still open and still edit _apply_ssi_exclusions.py (and #10146 also edits I and TI). The round 2 note still applies: the PR that merges second must keep general_exclusion=own_general_exclusion on the single path (I:110), general_exclusion=general_exclusion on the deemed path (I:130) and the per-spouse block (I:89-97).

Round 2 items

ID Status Evidence
C1 RESOLVED (holds) I is unchanged since round 2. The block is at I:62-97. Cases 12-14 (TI:259-312) pass at the head.
SA1 RESOLVED (holds) Case 15 (TI:314-343) passes. I:130 is unchanged.
SA2 RESOLVED (holds) Case 16 (TI:345-373) passes.
SA3 RESOLVED Case 18 (TI:388-417) is my round 2 case word for word, [990, 990]. It passes at the head. If I remove the max_(ssi_general, ...) floor at I:92-95, Case 18 fails, and it is the only failure in the MSP folder (1 of 91). Hand check: (12,000 + 120) / 12 = 1,010; the alimony earns no exemption and the $10 of interest earns $10, so the exemptions total $10; the $20 SSI floor applies; 1,010 − 20 = 990 for each spouse.
G1 DEFERRED, accepted #10375 (open) carries the 2027-07-01 California values and now contains this head.
G2 RESOLVED (holds) TI Case 17 (TI:375-386) and TA Case 21 pass.
G3 DECLINED, accepted The Illinois start date stays disclosed in the PR body. It changes no simulated year.
G4 RESOLVED (holds) P/income/state_general_exclusion.yaml is unchanged.
G5 RESOLVED (holds) The P/asset/state_limit/ files are unchanged.
G6 RESOLVED (holds) PR body, Out of scope, still names the $50 child support deductions.
G7 DECLINED, accepted Style only. The reason holds.
G8 DEFERRED, accepted Issue #10514 is open and the body names it.
G9 DEFERRED, accepted Issue #10515 is open and the body names it.
G10 RESOLVED P/income/state_general_exclusion_excludes_contributions.yaml:19-20 now cites "Rule 4.2(C)(1) and (C)(5) ... #page 22-23", with the href on page 22. The comment at :27-28 uses the (C)(5) reading. The page numbers match the PDF (see Source Documents). The optional Case 19 (TI:419-429) is added and gives 950. If I set MS to true, Case 19 fails (980 against 950), and it is the only failure in the MSP folder (1 of 91). Hand check: 12,000 / 12 = 1,000; 1,000 − 50 = 950. Alimony is not income based on need, so the $50 applies under (C)(5).

New findings

Critical

None.

Should address

None.

Suggestions

None.

Tests run

  • TI and TA at the head: 40 passed (19 + 21).
  • MSP folder (gov/hhs/medicare/savings_programs): 91 passed.
  • policyengine_us/tests/code_health/test_source_conflicts.py: 103 passed.
  • Partner tests, read-only (analytics_coverage/signatures/{il,ca,wa}.yaml, edge_cases/state/{il,ca,wa}): 156 passed.
  • Mutants on a copy (deleted after use), MSP folder: couple $20 floor removed (1 fail: Case 18); Mississippi contributions flag set to true (1 fail: Case 19).
  • Merge check: git merge-tree of the head with main at 95cf2373a0 is clean, with no duplicate candidate ids.
  • Hand checks: Cases 18 and 19 are correct (arithmetic in the table above).

Verdict

APPROVE: SA3 and G10 are resolved with the exact cases and citation that I asked for, and both new cases fail under the mutation that they guard against. No C or SA item is open. The round 1 items stay resolved or reasonably declined or deferred. Merge this PR before #10375.

@hua7450
hua7450 merged commit 631ff8c into PolicyEngine:main Oct 29, 2026
33 checks passed
hua7450 added a commit to hua7450/policyengine-us that referenced this pull request Oct 29, 2026
…into ca-medi-cal-asset-limit-2027

Keep main's PolicyEngine#10360 MSP files and append this PR's 2027 rows, SB 164 and
AB 173 references, and MSP Cases 22-25. For the aged, blind and disabled
test file, take PolicyEngine#10364's file and append this PR's cases, then apply
Pavel's G1: with California's inclusive limit flags from PolicyEngine#10364, the 2028
eligible cases sit exactly at $21,000 and $31,000.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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