Skip to content

Count income of aged, blind, or disabled people who fail SSI's noncitizen test - #10240

Open
hua7450 wants to merge 39 commits into
mainfrom
medicaid-abd-noncitizen-countable-income
Open

hua7450 wants to merge 39 commits into
mainfrom
medicaid-abd-noncitizen-countable-income

Conversation

@hua7450

@hua7450 hua7450 commented Oct 15, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

medicaid_optional_senior_or_disabled_countable_income and ssi_countable_income returned $0 for anyone who was not is_ssi_eligible_individual or is_ssi_eligible_spouse. is_ssi_eligible_individual includes SSI's citizen and qualified-noncitizen test, including the 40-quarter rule for lawful permanent residents. An aged, blind, or disabled person who failed only that test therefore had all income ignored by every program that reuses SSI methodology.

Examples on main (2025):

Household main This PR
MA, age 70, LPR, 10 years since entry, 20 SSI quarters, $60,000 pension countable income $0, is_medicaid_eligible true $59,760, ineligible (same as with 40 quarters)
DC, age 70, undocumented, $60,000 pension countable income $0, eligible $59,760, ineligible
CA, age 68, TPS, $24,000 pension (SF CAAP Case 15) CAPI paid regardless of income CAPI $0

Fix

The zero was meant for the deeming role: a spouse who is not aged, blind, or disabled has their income deemed to the other spouse (20 CFR 416.1163), so their own countable income must be zero to avoid counting it twice. This PR gates that zero on is_ssi_aged_blind_disabled instead of SSI eligibility status:

  • medicaid_optional_senior_or_disabled_countable_income: Medicaid's ABD financial methodology follows SSI's (42 CFR 435.601) and counts the applicant's own income whether or not they meet SSI's noncitizen rules.
  • ssi_countable_income: the medically needy path (is_medically_needy_for_medicaid) reads this variable, so it had the same bypass.
  • defined_for on is_ssi_spousal_deeming_applies, ssi_income_deemed_from_ineligible_spouse and medicaid_optional_senior_or_disabled_income_deemed_from_ineligible_spouse moves from is_ssi_eligible_individual to is_ssi_aged_blind_disabled. Without this, a noncitizen married to a working spouse who is not aged, blind, or disabled would have the spouse's income ignored.

For citizens and qualified noncitizens nothing changes: the old and new gates differ only for aged, blind, or disabled people who fail SSI's noncitizen test. This PR does not touch any income limit or limit parameter.

Downstream effects

  • SSI: unchanged. uncapped_ssi is defined_for = "is_ssi_eligible", which still applies the noncitizen test. ssi_amount_if_eligible and ssi_pmv_amount change for this group, but ssi does not. New SSI-based supplements on main (the shared _ssi_state_supplement helper for Ohio, Oklahoma and New Jersey, and Maryland MEAP) gate on SSI eligibility or receipt and are unchanged.
  • Medicaid: optional ABD, medically needy, 209(b) spenddown and the MS Healthier Mississippi Waiver now count the income of these noncitizens.
  • CA CAPI: CAPI serves exactly this population, so on main its income test never reduces the benefit. With this PR it counts income; Pay California CAPI from the SSI/SSP standard per person, with spouse-to-spouse deeming #10379 makes CAPI's standard, couples and deeming match the law first.
  • CA state supplement: the countable income of a member who fails SSI's citizen or qualified-noncitizen test is left out of the supplement's SPM-unit income sum. SSI/SSP counts another member's income only when it is deemed (20 CFR 416.1160(a)), so a sibling's or a CAPI couple's income no longer reduces the supplement (Cases 10, 12 and 13). In an SSI couple computation with a spouse who fails the test, SSA treats that spouse as an ineligible spouse. If the spouse can receive CAPI (ca_capi_eligible_person; WIC 18938 bars undocumented people and TPS holders, Exclude undocumented and TPS immigrants from California CAPI eligibility (WIC 18938, MPP 49-020) #10482) and does, none of the CAPI-counted income is deemed (20 CFR 416.1161(a)(2)-(3)), so the supplement counts the recipient's own countable income rather than half of the couple's. If the spouse's income leaves no CAPI, it is deemed and the supplement is the lesser of the individual and couple totals (Case 15). POMS SI 01320.430 D compares the federal and state parts separately; the totals keep CAPI at zero there, so only the split between the supplement and CAPI can differ. A spouse who cannot receive CAPI gets no exclusion, so that spouse's income is deemed (Case 16). This gives SSA's totals in Cases 11, 14 and 15 and in Pay California CAPI from the SSI/SSP standard per person, with spouse-to-spouse deeming #10379's Cases 8 and 9, where the citizen's own income leaves no supplement and CAPI deems. The model's SSI is still the couple computation (Treat an aged, blind or disabled spouse who fails SSI's noncitizen test as an ineligible spouse, and base CAPI's mixed couple on actual SSI/SSP receipt #10481).
  • Maryland PAA: for people who fail SSI's citizen or qualified-noncitizen test, PAA imputes no federal SSI and counts only their own income (COMAR 07.03.07.07, 07.03.07.09A), and no spouse income is deemed to them. A person who reports SSI receipt (receives_ssi, for example under an exception the model does not encode) gets the SSI that SSA pays: the individual rate for the living arrangement less own income, and under spouse deeming the lesser of that and the couple computation (20 CFR 416.1163(d)-(e)). In another person's household the one-third reduction applies to the couple rate as well as the individual rate (20 CFR 416.1131; POMS SI 01320.400 B.1.e), and a medical treatment facility resident gets the $30 rate. Their PAA is unchanged from main ($511 a month in the test cases with and without a working spouse). Unchanged for citizens and qualified noncitizens.
  • Other SSI-methodology readers for noncitizens who fail the SSI test: MSP spousal deeming and SC SSP now see the person's income. CA WDP's intermediate deeming flags change, but WDP eligibility does not, because WDP applies SSI's noncitizen test itself. CO OAP reads the deeming flag only through ssi_in_kind_support_and_maintenance, for SSI reporters. CA San Bernardino and Orange County general relief read whether ca_capi > 0. CO SSP (clients outside an SSI couple computation), Idaho AABD, NE AABD, TX SSP, and Indiana RCAP and SAPN read ssi_countable_income but require SSI receipt (ssi > 0 or receives_ssi; Indiana RCAP also admits Medicaid enrollment, and SAPN requires both). They change only for a person who reports SSI receipt while failing the model's noncitizen test: that person's own countable income now reduces the payment. Indiana RCAP also admits Medicaid-enrolled noncitizens, whose payment can fall (in one review example from $1,501.06 to $1,021.06 a month). No YAML or partner case has such a person.

Merge order and overlaps

Tests

Regression cases in the variable-named files:

  • medicaid_optional_senior_or_disabled_countable_income.yaml: single LPR with 20 quarters; mixed couple with deemed spouse wages
  • medicaid_optional_senior_or_disabled_income_deemed_from_ineligible_spouse.yaml: mixed couple
  • ssi_countable_income.yaml: single LPR (SSI stays $0); mixed couple
  • ssi_income_deemed_from_ineligible_spouse.yaml: deeming applies to the noncitizen spouse
  • is_medically_needy_for_medicaid.yaml: an over-limit case, a case that qualifies after spenddown, and a noncitizen dependent parent's pension that does not count against the head
  • is_medicaid_eligible.yaml Cases 21-23: the MA and DC examples above, plus a low-income LPR who stays eligible
  • ca_capi.yaml: an aged LPR without 40 quarters whose $24,000 pension leaves no CAPI; a mixed couple with income whose CAPI the model now computes ($479.76 a month in 2025)
  • ca_capi_person.yaml Cases 16 and 17: Pay California CAPI from the SSI/SSP standard per person, with spouse-to-spouse deeming #10379's Cases 8 and 9 with the CAPI member as tax-unit head; the supplement counts the citizen's own income, so the citizen is paid nothing and CAPI deems ($239.94 and $118.83 a month); Case 18: a spouse who is not aged, blind or disabled earns $2,000 a month, above the deeming threshold, so CAPI is $773.44
  • msp_countable_income.yaml Case 20: spouse wages are deemed to a permanent resident without 40 quarters; SC OSS integration.yaml Case 8: a counted pension above the net income limit
  • ca_state_supplement.yaml Case 10: an aged citizen SSI recipient sharing an SPM unit with a CAPI-eligible sibling keeps the citizen-alone supplement ($368.81 a month in 2025); Case 11: an aged citizen married to a CAPI-eligible spouse, the citizen's own income counted ($620.81 a month); Case 12: an undocumented sibling who is not CAPI-eligible does not reduce the supplement; Case 13: nor does a married CAPI couple in the unit; Case 14: a mixed couple where both have income ($453.94 supplement, $64.89 CAPI); Case 15: a CAPI spouse whose $2,000 pension leaves no CAPI, so it is deemed ($118.83 supplement); Case 16: an undocumented spouse who cannot receive CAPI, whose $700 pension is deemed ($488.44 supplement)
  • md_paa.yaml Case 11: an aged LPR without 40 quarters in CARE Home Level D with a working spouse gets $998 a month ($1,478 need less the person's own $480); Case 12: the same person reporting SSI receipt, with no spouse, gets the imputed SSI ($967 − $480 = $487; PAA $511); Case 13: with a working spouse, SSA pays min($1,450 − $947.50, $967 − $480) = $487, so PAA stays $511; Cases 14-16: the couple computation binds ($2.50 imputed), the one-third reduction on the couple rate ($509.17), and the $30 medical-facility rate
  • The CAPI-eligible personas in the CAPI and California supplement cases are aged permanent residents with 39 quarters, who stay eligible once Exclude undocumented and TPS immigrants from California CAPI eligibility (WIC 18938, MPP 49-020) #10482 excludes undocumented people and TPS holders from CAPI.
  • CAPI tests from Pay California CAPI from the SSI/SSP standard per person, with spouse-to-spouse deeming #10379: the pinned ssi_countable_income and deeming inputs this PR now computes are removed where the case has the underlying income; the remaining pins say they isolate the CAPI formula

ca_sf_caap.yaml Case 15 is updated to the expectations its own comment predicted once CAPI counted income (budget unit size 2, countable income $2,000, grant $0).

No partner contract test (tests/policy/baseline/partners/**) is affected. I did not run the tests locally; CI will validate them.

Local reviews

The 2026-10-19 review found six critical downstream defects that the old $0 had masked; a second review on 2026-10-26 checked the fixes and the main merge.

Finding Disposition
CA state supplement subtracts a CAPI-eligible relative's income from an SSI recipient's supplement Fixed here (ca_state_supplement.py)
Maryland PAA deems spouse income and imputes SSI to people SSI bars Fixed here; people who report SSI receipt get the SSI SSA pays (capped under deeming) and no spouse deeming (COMAR counts own income)
Medically needy test sums income over the tax unit Fixed in #10370, which must merge first
CAPI standard leaves out the state supplement portion #10379
CAPI applies the couple rate under deeming without the 416.1163(e)(2) cap #10379 (POMS SI 01320.430)
CAPI pools income across unmarried members of the SPM unit #10379 (per-person CAPI)
#10146 port list incomplete Listed above
CO OAP and CA WDP claims overstated Corrected above
Mixed-couple supplement case missing Added (Case 11)

Review round 1 (2026-10-27)

Item Disposition
C1 MD PAA: no one-third reduction on the couple rate Fixed; Cases 15 and 16
SA1 medically needy tax-unit sum Resolved by #10370 (on main, merged here); Case 13
SA2 state supplement masked by CAPI eligibility Mask on SSI's noncitizen test, plus, in a mixed SSI couple computation, the citizen's own income when the spouse receives CAPI and deeming when not (see above), so #10379's unpaid-spouse deeming (its C1) still applies; Cases 11-15
SA3 MSP and MD deeming cap untested MSP Case 6 (now Case 20, after #10360's cases), MD Case 14, SC Case 8
G1 MD PAA comment Fixed; #10544 for the citizen case
G2 Case 11 benchmark NOTE and body use the public income-maintenance exclusion; #10481 updated
G3 parent deeming Known limitations; #10243 extended
G4, G5, G6 body Updated
G7 shared immigration test KY: SSI's gate kept with a NOTE (aligning it broke KY Case 5, which supplies SSI eligibility); a shared variable across about a dozen files is left for a follow-up
SC OSS immigration test #10545
#10379 review round 2: G10 role-swapped twins and Case 13's above-threshold twin ca_capi_person.yaml Cases 16-18

Review round 2 (2026-10-30)

Item Disposition
SA4 the mixed-couple branch assumed a spouse who fails the test can receive CAPI Fixed: keyed on the spouse's ca_capi_eligible_person; ca_state_supplement.yaml Case 16
G8 cite 416.1161 and 416.2025 Added to ca_state_supplement's references
#10379's G12 (in-kind support on the separated path) Tracked in #10549
Merge with #10519 and #10546 (2026-10-30) ca_capi.yaml Case 5 takes #10519's $14,807.28 (cooking facilities by default); ca_capi.yaml Case 10 and ca_state_supplement.yaml Cases 10-13 set living_arrangements_allow_for_food_preparation: false, keeping their no-cooking values

Known limitations (not changed here)

axiom: TheAxiomFoundation/rulespec-us#1940 queued

🤖 Generated with Claude Code

medicaid_optional_senior_or_disabled_countable_income and
ssi_countable_income zeroed income for anyone who was not an SSI-eligible
individual or spouse, and that status includes SSI's citizen and
qualified-noncitizen test. Aged, blind, or disabled people who fail only
that test (for example, LPRs with fewer than 40 quarters, or undocumented
residents of states that cover them) therefore passed the optional ABD and
medically needy Medicaid income tests, and CAPI, regardless of income.

Gate the zero, and the spousal-deeming variables, on aged, blind, or
disabled status instead. The zero still applies to a spouse who is not
aged, blind, or disabled, whose income is deemed to the other spouse.
SSI benefits are unchanged because is_ssi_eligible still applies the
noncitizen test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
hua7450 and others added 2 commits October 21, 2026 18:22
…n status

Counting the own income of aged, blind or disabled people who fail SSI's
noncitizen test exposed two downstream defects found in the 2026-10-19
review:

- The California state supplement summed ssi_countable_income over the whole
  SPM unit, so a CAPI-eligible relative's income reduced an SSI recipient's
  supplement. CAPI budgets its own members' income (MPP 49-035), and SSI/SSP
  counts another member's income only when it is deemed (20 CFR
  416.1160(a)), so CAPI-eligible members are left out of the sum.
- Maryland PAA deemed spouse income and imputed federal SSI to people SSA
  cannot pay. For people who fail SSI's citizen or qualified-noncitizen
  test, PAA now counts only their own income and imputes no SSI (COMAR
  07.03.07.07 and 07.03.07.09A).

The CAPI test that encoded the federal-benefit-only standard is replaced
with an over-income case that holds before and after the CAPI rework.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
CAPI payment standards equal the SSI/SSP payment standards less $10 for an
individual and $20 for a couple (MPP 49-050.1, .11-.13). The model instead
used the federal benefit rate plus the SPM unit's state supplement
payment, pooled every CAPI-eligible member's income against one unit
standard, applied the $10/$20 offset once a year, and left the tax-unit
spouse of a noncitizen couple out.

- ca_capi_payment_standard: the SSI/SSP standard for an individual, or half
  the couple standard, built from the state supplement parameters, less the
  monthly offset.
- ca_capi_person: the standard less the person's own countable income
  (MPP 49-055.3), with spouse-to-spouse deeming computed as POMS SI
  01320.430 D prescribes (federal and state parts each the lesser of the
  individual and deeming amounts).
- ca_capi sums ca_capi_person; ca_capi_income_eligible asks whether any
  member's income is below their standard (MPP 49-035.1).
- Both members of a noncitizen couple, and the noncitizen spouse of a
  citizen, are CAPI-eligible (MPP 49-055.4, 49-050.13).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
hua7450 and others added 2 commits October 26, 2026 16:24
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
hua7450 and others added 3 commits October 26, 2026 21:04
…uples, one standard per arrangement

- Offsets are $0 from June 1, 2019 (WIC 18941; ACIN I-23-19); new mixed-couple offset (MPP 49-050.13) before then
- Mixed couple: couple standard less the couple's countable income and the spouse's SSI/SSP (MPP 49-005(e)(3), 49-035.221)
- Title XIX facility $62 and non-medical out-of-home care $1,626.07 replace the community standard; no-cooking allowance only on the aged or disabled amount
- Floor the standards at the federal benefit rate while the CA SSP parameters hold 1991 totals (issue 7787)
- No deeming for a Title XIX facility resident (20 CFR 416.1160(a)(1))
- candidates.yaml: us-ca:capi-payment-standard-offset (open, Pavel's sign-off) and us-ca:capi-spousal-deeming-method (unreviewed)

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

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

# Conflicts:
#	policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/ca_capi.yaml
hua7450 and others added 3 commits October 26, 2026 21:39
…tests, CAPI test pins

- Maryland PAA keeps imputed SSI and spouse deeming for people who report SSI receipt
- CA state supplement: mixed-couple case and the matching computed CAPI case; comment and reference fixes
- CAPI tests from #10379: drop pins this PR now computes, keep the rest with accurate comments

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

COMAR 07.03.07.07 counts the individual's own income; only the imputed SSI keeps the receipt exception. Drop md_paa.yaml Case 13, which codified the deeming.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
hua7450 and others added 3 commits October 26, 2026 22:52
…-2025 floor a stopgap; LPR test personas

- One-blind couple rate adds no food allowance (WIC 12200(b), (e)); candidates item us-ca:ssp-blind-couple-food-allowance (unreviewed)
- Floor comment and pinned pre-2025 cases say the values are known-low; issue 10480 backfills the totals
- Mixed-couple note gives the ineligible-spouse example (issue 10481)
- CAPI test personas are aged permanent residents with 39 quarters (issue 10482)
- PDF page comments without spaces

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…barred SSI reporters in Maryland PAA

- Resolve the CAPI test conflicts with this branch's versions and switch their personas to permanent residents with 39 quarters
- md_paa_imputed_federal_ssi: for a person who fails SSI's noncitizen test but reports SSI, impute the individual rate for the arrangement, or under deeming the lesser of the couple and individual computations (20 CFR 416.1163(d)-(e)); md_paa.yaml Case 13 gives $511
- CA state supplement Case 11 and the CAPI mixed-couple case use a permanent resident with 39 quarters

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@hua7450
hua7450 marked this pull request as ready for review October 27, 2026 02:56

@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 #10240, "Count income of aged, blind, or disabled people who fail SSI's noncitizen test" (hua7450). Round 1, full review.

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

Paths: V/ = policyengine_us/variables/gov/, T/ = policyengine_us/tests/policy/baseline/gov/, IMP = V/states/md/dhs/fia/paa/md_paa_imputed_federal_ssi.py, CNT = V/states/md/dhs/fia/paa/md_paa_countable_income.py, SSP = V/states/ca/cdss/state_supplement/ca_state_supplement.py, MN = V/hhs/medicaid/eligibility/categories/medically_needy/is_medically_needy_for_medicaid.py, MDT = T/states/md/dhs/fia/paa/md_paa.yaml, SSPT = T/states/ca/cdss/state_supplement/ca_state_supplement.yaml. Line numbers refer to the reviewed head. Every PDF link uses the file page number.

Source Documents

Changed since the analysis

The analysis ran at c4145b0b0e. Since then only source_conflicts/candidates.yaml changed in the PR files (a13747ee8c, the CAPI offset ruling, and a VA TANF entry from main). Every item below was checked again at the head.

Branch Status

  • 19 commits ahead and 6 behind main (8ea43422e6); MERGEABLE; only the required review blocks it. The 6 main commits share only source_conflicts/candidates.yaml with this PR.
  • Merge order: #10379 and #10370 first, then this PR. The body says the same, but nothing in Git enforces it.
    • #10379 has changes requested, so its head will move. Merge its final head here before it lands (the body's --ours step names 0e105dfb23; this branch carries f1bed699be, G4), then run the CAPI, CA SSP and T/local/ca folders again.
    • #10370 is a hard gate for SA1. It also has changes requested.
  • After this PR: #10361 (it depends on this PR) and the ABD couple follow-up.
  • #10146: the body's five port points are present in its monthly twins. It also rewrites msp_countable_income (SA3) and the SSP line that SA2 changes.
  • #10332 is not in the body. It makes ssi_countable_income MONTH and merges without a conflict marker at the gate (G5).
  • #10364: combine its Python conflict by hand, as the body says. #10386, #10391, #10394, #9732, #10374, #10375 and #10382 append to the same test files.
  • #8017 (Iowa) requires a citizen or qualified noncitizen. With its files overlaid, T/states/ia passed 765/765 with and without this PR. Run it again after both merge.

What the PR gets right

  • The gate change is exact: the old and new gates differ only for ABD people who fail SSI's noncitizen test, and SSI does not change (uncapped_ssi keeps defined_for = "is_ssi_eligible").
  • The legal premise holds: Medicaid's ABD methodology follows SSI's, with immigration as a separate test (42 CFR 435.601(b)(2), 435.406); CAPI counts its member's income and deems from an ineligible spouse (MPP 49-035.11, .71-.72); the MD PAA noncitizen branch matches COMAR 07.03.07.07 and .09A.
  • Spousal income deeming now keys on ABD status, like parental income and spousal resource deeming. In a mixed ABD couple, the result no longer depends on which spouse is the tax-unit head.
  • No hard-coded values (IMP reads gov.ssa.ssi.amount), correct periods, vectorized code, no new cycles.
  • Each new case fails under at least one of 26 code mutations. The body states its merge order, port list and limits. No partner test is edited; the changelog fragment is correct.

Critical (Must Fix)

C1. MD PAA: for an SSI reporter, the couple rate is not reduced by one third in another person's household.

  • Where: IMP:46-56. individual_rate applies the one-third reduction for ANOTHER_PERSONS_HOUSEHOLD, but couple_ssi = p.couple - (countable_income + deemed_income) uses the full couple rate.
  • Rule: 20 CFR 416.1131(a) reduces the Federal benefit rate by one third in another person's household. Under deeming, POMS SI 01320.400 B.1.e says the FBR "is reduced by the value of the one-third reduction (VTR) for an eligible couple, if appropriate" (example: SI 00835.210 C.1). The model's own V/ssa/ssi/ssi_amount_if_eligible.py:55-66 does this.
  • Evidence (MD, January 2025, care home level D, aged LPR with 20 quarters who reports SSI, another person's household):
Household Head: imputed SSI / PAA Law: imputed SSI / PAA Citizen's SSI, same household
No own income; spouse wages $1,000 a month (deemed $457.50) $644.67 / $833.33 $509.17 / $968.83 $509.17
Own Social Security $100 a month; spouse wages $1,500 a month (deemed $717.50) $564.67 / $833.33 $169.17 / $1,228.83 $169.17

PAA is understated by $135.50 and $395.50 a month. On main deeming never reached these people, so this is not a regression, but the new formula does not follow its own stated rule. A flat individual rate (no reduction, no medical-facility rate) passes every existing case: neither branch has a test.

  • Why this severity: an incorrect formula in new code, confirmed by a case that fails at the head. The reach is near zero (a PAA resident seldom gets free food and shelter), which affects priority, not the category.
  • Fix (ran at the head; passes ruff format --check). Replace IMP:45-56 with:
        in_medical_facility = arrangement == arrangements.MEDICAL_TREATMENT_FACILITY
        # The one-third reduction applies to the Federal benefit rate in use:
        # the individual rate, or the couple rate under spouse deeming
        # (20 CFR 416.1131; POMS SI 01320.400 B.1.e).
        vtr_factor = where(
            arrangement == arrangements.ANOTHER_PERSONS_HOUSEHOLD,
            1 - p.one_third_reduction_rate,
            1,
        )
        individual_rate = where(
            in_medical_facility, p.medical_facility, p.individual * vtr_factor
        )
        individual_ssi = individual_rate - countable_income
        deemed_income = person("ssi_income_deemed_from_ineligible_spouse", period)
        couple_ssi = p.couple * vtr_factor - (countable_income + deemed_income)

Optional: add "https://secure.ssa.gov/poms.nsf/lnx/0501320400" to the reference tuple; #10141's _ssi_living_arrangement_amount can later replace this block. Append to MDT after the SA3 Case 14 (the head fails Case 15 with 644.67; the fix passes both cases):

- name: Case 15, SSI reporter without 40 quarters under the one-third reduction with a working spouse.
  period: 2025-01
  absolute_error_margin: 0.01
  input:
    people:
      person1:
        age: 70
        immigration_status: LEGAL_PERMANENT_RESIDENT
        years_since_us_entry: 30
        ssi_qualifying_quarters_earnings: 20
        receives_ssi: true
        ssi_countable_resources: 1_000
        md_paa_living_arrangement: CARE_HOME_LEVEL_D
        ssi_lives_in_another_persons_household: true
        ssi_receives_shelter_from_others_in_household: true
        ssi_others_pay_all_meals: true
      person2:
        age: 60
        employment_income: 12_000 # 1,000 a month
    marital_units:
      marital_unit:
        members: [person1, person2]
    tax_units:
      tax_unit:
        members: [person1, person2]
    spm_units:
      spm_unit:
        members: [person1, person2]
    households:
      household:
        members: [person1, person2]
        state_code: MD
  output:
    # No own income, so the $20 general exclusion goes to the wages:
    # (1,000 - 20 - 65) x 0.5 = 457.50 deemed a month.
    ssi_income_deemed_from_ineligible_spouse: [457.50, 0]
    md_paa_countable_income: [0, 457.50]
    # The one-third reduction applies to the couple rate under deeming
    # (POMS SI 01320.400 B.1.e): min(1,450 x 2/3 - 457.50, 967 x 2/3 - 0) = 509.17.
    md_paa_imputed_federal_ssi: [509.17, 0]
    # PAA = 1,478 - 0 - 509.17 = 968.83.
    md_paa: [968.83, 0]

Case 16 ("SSI reporter without 40 quarters in an MDH Rehabilitative Residence gets the $30 medical-facility rate"), one person in MD, 2025-01: age 70, LEGAL_PERMANENT_RESIDENT, years_since_us_entry: 30, ssi_qualifying_quarters_earnings: 20, receives_ssi: true, social_security_survivors: 120, ssi_countable_resources: 1_000, md_paa_living_arrangement: REHAB_RESIDENCE, ssi_lives_in_medical_treatment_facility: true, ssi_medicaid_pays_majority_of_care: true. Output: md_paa_eligible: true, md_paa_countable_income: 0, md_paa_imputed_federal_ssi: 30 (42 U.S.C. 1382(e)(1)(B)), md_paa: 72 (the $102 PNA less 30).

Should Address

SA1. Medically needy: at this head a noncitizen dependent's income counts against another adult.

  • Where: MN:23-27 sums ssi_countable_income - medical_expenses over the tax unit. This PR un-zeroes the income that the sum reads.
  • Rule: 42 CFR 435.602(a)(2)(i): apart from a spouse, or a parent of a child under 21 or blind or disabled, "the agency must not consider income and resources of any relative as available to an individual."
  • Evidence (MA 2026; aged citizen head with a $20,000 pension and $15,000 of medical expenses; a dependent parent aged 90 with a $30,000 pension). Is the head medically needy?
Dependent parent Head Merge-base code Head plus #10370
LPR, 20 quarters False True True
Undocumented False True True
Citizen False False True

main already over-counts citizen dependents. With #10370 overlaid, the medically needy folder passed 25/25.

  • Why SA: the PR exposes more people to a regulatory mismatch, but the code is in a file it does not change, and #10370 fixes it. It is a merge gate.
  • Fix (Case 5 fails at the head and passes with #10370):
    1. Merge #10370 first, then merge main into this branch.
    2. Append this case to T/hhs/medicaid/eligibility/categories/medically_needy/is_medically_needy_for_medicaid.yaml. Renumber it if #10370, #10374 or #10375 add cases first.
- name: Case 5, an aged noncitizen dependent parent's pension does not count against the head.
  period: 2026
  input:
    people:
      head:
        age: 70
        immigration_status: CITIZEN
        pension_income: 20_000
        medicaid_medically_needy_medical_expenses: 15_000
        ssi_countable_resources: 1_000
        is_in_medicaid_medically_needy_category: true
        is_optional_senior_or_disabled_for_medicaid: false
      parent:
        age: 90
        is_tax_unit_dependent: true
        immigration_status: LEGAL_PERMANENT_RESIDENT
        years_since_us_entry: 10
        ssi_qualifying_quarters_earnings: 20
        pension_income: 30_000
        ssi_countable_resources: 0
    tax_units:
      tax_unit:
        members: [head, parent]
    marital_units:
      head_unit:
        members: [head]
      parent_unit:
        members: [parent]
    households:
      household:
        members: [head, parent]
        state_code: MA
  output:
    # The parent's 30,000 - 240 = 29,760 now counts (this PR), but a parent's
    # income is never deemed to an adult child aged 70 (42 CFR
    # 435.602(a)(2)(i)). The head: 20,000 - 240 - 15,000 = 4,760 <= 522 x 12
    # = 6,264.
    ssi_countable_income: [19_760, 29_760]
    is_medically_needy_for_medicaid: [true, false]

SA2. The CA state supplement leaves out income by CAPI eligibility instead of by the rule it cites.

  • Where: SSP:27-31, where(capi_eligible, 0, person_countable_income).
  • Rule: 20 CFR 416.1160(a) deems income only from an ineligible spouse, an ineligible parent, a sponsor or an essential person. A sibling's income never reaches an SSI/SSP recipient.
  • Evidence: today V/states/ca/cdss/capi/eligibility/ca_capi_eligible_person.py:15-22 is exactly the group whose income this PR un-zeroes, so results are correct. Issue #10482 will remove undocumented and TPS people from CAPI. Then a citizen sharing an SPM unit with an undocumented sibling gets $0 instead of $4,425.72 a year (-$368.81 a month). The test personas survive #10482; the mask does not.
  • Why SA: a proxy in place of the legal test in the PR's own comment, which a tracked change turns into a wrong value.
  • Fix (ran; at the head it gives the same results, because in CA the two masks are the same set). Replace SSP:20-32 with:
        person = spm_unit.members
        # SSI/SSP counts another member's income only when it is deemed
        # (20 CFR 416.1160(a)). A spouse's income already reaches the SSI
        # recipient's own countable income through the couple computation or
        # deeming, and CAPI budgets its own members' income (CAPI regulations
        # MPP 49-035). So the countable income of a member who fails SSI's
        # citizen or qualified-noncitizen test, whether or not CAPI-eligible,
        # is not added again.
        immigration_status = person("immigration_status", period.this_year)
        is_citizen = immigration_status == immigration_status.possible_values.CITIZEN
        is_qualified_noncitizen = person(
            "is_ssi_qualified_noncitizen", period.this_year
        )
        meets_ssi_immigration_test = is_citizen | is_qualified_noncitizen
        person_countable_income = person("ssi_countable_income", period)
        countable_income = spm_unit.sum(
            where(meets_ssi_immigration_test, person_countable_income, 0)
        )
        return max_(0, payment_standard - ssi - countable_income)

Append to SSPT (the head fails it; the fix passes):

- name: Case 12, 2025 aged citizen sharing an SPM unit with an undocumented sibling who is not CAPI-eligible keeps the supplement.
  period: 2025
  absolute_error_margin: 0.01
  input:
    people:
      person1:
        age: 70
        is_tax_unit_head: true
        immigration_status: CITIZEN
        social_security_retirement: 6_000 # 500 a month
      person2:
        age: 72
        is_tax_unit_head: true
        immigration_status: UNDOCUMENTED
        pension_income: 6_000 # 500 a month
        # WIC 18938 and MPP 49-020 bar undocumented people from CAPI (#10482).
        ca_capi_eligible_person: false
    tax_units:
      tax_unit1:
        members: [person1]
      tax_unit2:
        members: [person2]
    marital_units:
      marital_unit1:
        members: [person1]
      marital_unit2:
        members: [person2]
    spm_units:
      spm_unit:
        members: [person1, person2]
    households:
      household:
        members: [person1, person2]
        state_code: CA
  output:
    # Each has 500 - 20 = 480 a month of countable income.
    ssi_countable_income: [5_760, 5_760]
    ssi: [5_844, 0] # 487 * 12
    ca_state_supplement_payment_standard: 16_029.72 # 1,335.81 * 12
    # A sibling's income is never deemed to an SSI/SSP recipient
    # (20 CFR 416.1160(a)), so the supplement stays 1,335.81 - 487 - 480 =
    # 368.81 a month.
    ca_state_supplement: 4_425.72 # 368.81 * 12

SA3. No test pins the new results for MSP or for the MD deeming cap.

  • Where: msp_countable_income reads is_ssi_spousal_deeming_applies; IMP:57-63 takes the lesser of the individual and couple computations.
  • Evidence: this PR changes both results for a new group. An aged LPR with 20 quarters, $1,000 a month of unearned income and a spouse earning $20,000 now has MSP countable income of $1,780.83 a month (QMB false, SLMB true), against $980 (QMB true) before. Putting back the old MSP behavior passes all 216 related cases. In MDT Cases 11-13 the individual computation always binds, so ignoring deeming passes too.
  • Why SA: missing edge cases for already-tested variables. #10146 rewrites msp_countable_income, and nothing would catch a missed port.
  • Fix (both pass at the head and catch the change). Append to T/hhs/medicare/savings_programs/income/msp_countable_income.yaml (5 cases, so this is Case 6):
- name: Case 6, spouse income is deemed to an aged permanent resident without 40 SSI quarters.
  period: 2025-01
  absolute_error_margin: 0.01
  input:
    people:
      person1:
        age: 70
        is_tax_unit_head: true
        immigration_status: LEGAL_PERMANENT_RESIDENT
        years_since_us_entry: 10
        ssi_qualifying_quarters_earnings: 20
        ssi_unearned_income: 12_000
      person2:
        age: 55
        is_tax_unit_spouse: true
        ssi_earned_income: 20_000
    tax_units:
      tax_unit:
        members: [person1, person2]
    marital_units:
      marital_unit:
        members: [person1, person2]
  output:
    # SSI methodology deems the spouse's wages whether or not the person
    # meets SSI's noncitizen test: 20,000 > (1,450 - 967) x 12 = 5,796.
    # (1,000 - 20) + (1,666.67 - 65) / 2 = 980 + 800.83 = 1,780.83.
    is_ssi_spousal_deeming_applies: [true, false]
    msp_countable_income: [1_780.83, 790.83]

Append to MDT (before the C1 cases):

- name: Case 14, SSI reporter without 40 quarters whose deemed spouse wages make the couple computation lower.
  period: 2025-01
  absolute_error_margin: 0.01
  input:
    people:
      person1:
        age: 70
        immigration_status: LEGAL_PERMANENT_RESIDENT
        years_since_us_entry: 30
        ssi_qualifying_quarters_earnings: 20
        receives_ssi: true
        social_security_survivors: 6_000 # 500 a month
        ssi_countable_resources: 1_000
        md_paa_living_arrangement: CARE_HOME_LEVEL_D
      person2:
        age: 60
        employment_income: 24_000 # 2,000 a month
    marital_units:
      marital_unit:
        members: [person1, person2]
    tax_units:
      tax_unit:
        members: [person1, person2]
    spm_units:
      spm_unit:
        members: [person1, person2]
    households:
      household:
        members: [person1, person2]
        state_code: MD
  output:
    # Couple countable 480 + (2,000 - 65) x 0.5 = 1,447.50; deemed
    # 1,447.50 - 480 = 967.50 a month.
    ssi_income_deemed_from_ineligible_spouse: [967.50, 0]
    md_paa_countable_income: [480, 957.50]
    # SSA pays min(1,450 - 1,447.50, 967 - 480) = min(2.50, 487) = 2.50
    # (20 CFR 416.1163(d)-(e)).
    md_paa_imputed_federal_ssi: [2.50, 0]
    # PAA = 1,478 - 480 - 2.50 = 995.50.
    md_paa: [995.50, 0]

Optional (ran): SC OSS Case 8 in T/states/sc/scdhhs/ssi_state_supplement/integration.yaml, a one-person SC household in 2026: age 70, LEGAL_PERMANENT_RESIDENT, years_since_us_entry: 10, ssi_qualifying_quarters_earnings: 20, pension_income: 24_000, is_in_residential_care_facility: true. Output: ssi_countable_income: 23_760 (above the 21,648 NIL), sc_ssi_state_supplement_eligible: false, sc_ssi_state_supplement: 0. Its result also holds for another reason (Out of scope).

Suggestions

G1. The MD PAA comment is false at the head.

  • Where: CNT:48-52.
  • Evidence: "The SSI cascade deems spouse income only to people SSA can pay" no longer holds ($467.50 is deemed to the LPR in MDT Cases 11 and 13). COMAR 07.03.07.07 and PAA Manual 900 have no spouse rule, yet CNT:57-61 still adds deemed income for citizens: in Case 13's household a citizen gets PAA of $28, the LPR reporter $511, and COMAR gives both $511.
  • Why a suggestion: the citizen result is main's, and the body lists it under Known limitations. Only the new comment is this PR's.
  • Fix (comment only; ran). Replace CNT:48-52 with:
        # COMAR 07.03.07.07 counts the individual's own income and has no
        # spousal deeming, so people who fail SSI's citizen or
        # qualified-noncitizen test count their own income alone, including
        # those who report SSI receipt.
        # NOTE: for citizens and qualified noncitizens the SSI deemed amount is
        # still added, although their imputed SSI already reflects it. This
        # predates the noncitizen change and is a known limitation.

Open an issue with the $28 / $511 example (the 416.1163(e)(2) cap from #10141 gives both $511).

G2. The Case 11 benchmark leaves out the public income-maintenance exclusion.

  • Where: SSPT:419-427; the body's Known limitations ("$470 + $368.81 = $838.81"); #10481 proposal step 1.
  • Rule: 20 CFR 416.1161(a)(2)-(3) excludes from deeming a public income-maintenance payment and the income counted in figuring it, "regardless of who receives that payment" (POMS SI 01320.141 A). CAPI is one (416.1142(a)(6); POMS SI 00830.175 A.1).
  • Evidence: SSA deems none of the CAPI spouse's $500 and pays the citizen $487 SSI and $368.81 SSP, $855.81 in all. The model's $845.81 is $10 low, and the comment's $838.81 is $17 low. If #10481 follows the comment, it adds an error.
  • Fix (comment only; ran). Replace SSPT:419-427 with:
# NOTE: SSA treats the noncitizen spouse as an ineligible spouse (20 CFR
# 416.1160(d)), but it deems none of the spouse's income. CAPI is state-funded
# assistance based on need, a public income-maintenance payment (20 CFR
# 416.1142(a)(6); POMS SI 00830.175), and income counted in figuring such a
# payment is not deemed, whoever receives it (20 CFR 416.1161(a)(2)-(3);
# POMS SI 01320.141 A). SSA pays SSI of 967 - 480 = 487 and a state
# supplement of 1,335.81 - 967 = 368.81, 855.81 in all. The model's couple
# computation for a mixed-status couple pays 235 + 610.81 = 845.81. This is
# a pre-existing ssi_claim_is_joint limitation (#10481): it counts aged,
# blind or disabled head/spouse status rather than SSI eligibility. The
# expected values below are the model's.

In the body, write: "SSA deems none of the CAPI spouse's income, because income counted in figuring CAPI is excluded from deeming (20 CFR 416.1161(a)(2)-(3); POMS SI 01320.141 A), so it pays $487 + $368.81 = $855.81." Tell #10481 too.

G3. The ineligible-parent form of the couple-status gap is not tracked.

  • Where: V/ssa/ssi/eligibility/status/is_ssi_ineligible_parent.py:10-16 returns ~is_ssi_aged_blind_disabled & ... (not changed here).
  • Rule: 20 CFR 416.1160(d), an ineligible parent "is not eligible for SSI benefits"; 416.1165.
  • Evidence (TX 2026, disabled citizen child aged 10, parent with $36,000 of wages): a parent who is not ABD deems $5,562 a year and the child gets $550.50 SSI in January. A disabled LPR parent with 20 quarters, or a disabled citizen parent with too much income, deems $0, and the child gets $994. #10243 and #10481 cover spouses only.
  • Fix: add to Known limitations, and open an issue or extend #10243: "SSI parent-to-child deeming (is_ssi_ineligible_parent) also keys on aged, blind or disabled status, so such a parent who is not eligible for SSI deems nothing to an eligible child (20 CFR 416.1160(d), 416.1165)."

G4. Bring the body up to date.

  • The --ours merge step names #10379 head 0e105dfb23; this branch carries f1bed699be. #10364 is now 45120fa173.
  • Add to the downstream list: IN RCAP for Medicaid-enrolled noncitizens (V/states/in/fssa/ssp/in_ssp_rcap_eligible.py:20-34; $1,501.06 to $1,021.06 a month in one example), NE AABD, TX SSP, and CA SBD and OC General Relief (ca_capi > 0). CO OAP reads the deeming flag through ssi_in_kind_support_and_maintenance, for SSI reporters only. Say that ssi_amount_if_eligible and ssi_pmv_amount change for this group, while ssi does not.

G5. After #10332, read the gate with period.this_year.

  • Where: V/ssa/ssi/eligibility/income/ssi_countable_income.py:78.
  • Evidence: #10332 makes ssi_countable_income MONTH without touching the gate lines, so the merge has no conflict marker, and the gate then reads a YEAR boolean with a month. Name #10332 in the merge section, with the rule the body gives for the #10146 twins.

G6. The #10379 changelog fragment can be released twice.

  • Where: changelog.d/ca-capi-ssi-ssp-standard.fixed.md.
  • Evidence: release commits delete fragments (for example 4a1a3cdeb7). If a release uses #10379's fragment before this branch merges main, the merge keeps this branch's copy. After that merge, delete it here if it is still present.

G7. Share the SSI immigration test, and align the KY copy of the old gate.

  • CNT:53-56 and IMP:29-34 add two inline copies of citizen | is_ssi_qualified_noncitizen (about ten files have it; SA2 adds one). A shared variable would keep them in step.
  • V/states/ky/dcbs/ssp/ky_ssp_countable_income.py:40-42 ("Mirror ssi_countable_income") keeps the old gate. It has no effect, because KY SSP requires is_ssi_eligible. Align it or add a NOTE.

Investigated and cleared

  • Gates differ only for ABD people who fail the noncitizen test. Proved by Boolean reduction and microsimulation. The wider deeming defined_for also admits ABD couples, where nobody is an ineligible spouse, so no result changes.
  • The C1 amounts ($135.50 and $395.50). Two households; both reproduce to the cent.
  • MSP, MS HMW and 209(b). MSP follows SSI methodology (42 U.S.C. 1396d(p)(1)(B)); SA3 adds its test. MS HMW and 209(b) code is unchanged, and the Medicaid countable-income cases cover their input.
  • #10379's request for unpinned deeming and couple-income cases here. Done: the CAPI tests now compute both, and reversing either gate fails them.
  • References. Every PR-own link supports its claim. CAPI PDF page 25 is MPP 49-035. 8 U.S.C. 1612(a)(2)(E) is "Aliens receiving SSI on August 22, 1996".
  • Microsimulation (2026, at c4145b0b0e, same code). 362,484 weighted ABD people fail the test (none in CA; no LPRs, because quarters default to 40). Their optional ABD flag falls by 44,490 and the medically needy flag by 7,563. Medicaid enrollment, ssi, MSP flags, md_paa, CAPI and net income do not change.

Out of scope / follow-up

  • MD PAA citizen deeming (G1 issue).
  • SC OSS has no SSI immigration gate, although S.C. Code Regs. 126-920(A)(5) requires SSI's criteria: an undocumented aged CRCF resident with a $900 a month pension gets $1,804 on main, $924 here, and $0 by law. Open an issue.
  • is_ssi_qualified_noncitizen has no 7-year limit for refugees and asylees.
  • SSI deeming ignores 416.1161(a)(2)-(3) for any public income-maintenance payment, SNAP included from 9/30/2024; this PR extends deeming to more people. Sponsor deeming (416.1166a) is not modeled.
  • Tracked: #10481 and #10243 (couple status), #10482 (CAPI exclusions), #10370 (medically needy unit).

Validation Summary

Check Result
CI 77a9e5c9bc: 33 pass, 0 fail
Local tests 14 changed YAML files 153/153 at both heads. At c4145b0b0e (same code): SSI 246, Medicaid 720, MSP/CA/MD 717, other readers 1,352, CA local 867, Python 90
Fix runs C1, SA2, SA3, G1, G2 on a copy of the head: the Next Steps folders, 2,992 passed, 0 failed. The head fails C1 Case 15 and SA2 Case 12; SA1 Case 5 passes with #10370
Partner contract tests None edited; 623 pass; no fix changes one
References and law All PR-own references support their claims. C1 contradicts 20 CFR 416.1131 and POMS SI 01320.400 B.1.e
Code and mutation No hard-coded values. 26 mutations: 21 caught; the new cases catch 4 of the other 5; the fifth changes no result
Branch 19 ahead / 6 behind main; MERGEABLE; main shares only candidates.yaml
PR body Gate claims accurate; G2, G3 and G4 corrections. axiom: line present (process note, not counted)
Other reviews None

Review Severity: REQUEST_CHANGES

One critical item (C1) and three should-address items (SA1-SA3) are open; seven suggestions are open.

Next Steps

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

  1. Apply C1 (the reduction on the couple rate) with Cases 15 and 16.
  2. Apply SA2 (mask on SSI's immigration test) with Case 12.
  3. Add the SA3 cases (MSP Case 6 and MD Case 14; SC Case 8 is optional).
  4. Take the suggestions that you agree with, update the body, and open the G1, G3 and SC OSS issues.
  5. Run make format, then T/ssa/ssi, T/hhs/medicaid, T/hhs/medicare/savings_programs, T/states/ca/cdss, T/local/ca, T/states/md and T/states/sc/scdhhs.
  6. Merge #10379's final head here, wait for #10379 and #10370 to land, merge main, add SA1 Case 5, and check the G6 fragment.

hua7450 and others added 4 commits October 29, 2026 13:44
… gate, offset and floor cases

- C1: the mixed-couple computation needs a spouse paid SSI/SSP (MPP 49-005(e)(3), 49-050.13); otherwise the spouse is an ineligible spouse and CAPI deems the couple's income (49-005(i)(2)); the payment standard follows the same gate; ca_capi_person Cases 8-9
- SA1: no-cooking default NOTE with amounts and issue 10296
- SA2: the state supplement's dependent amount needs the child to meet SSI's immigration and resource conditions; three cases
- SA3/SA4: couple, mixed-couple, floor and 2019 deeming offset cases; mixed couple with the citizen's income
- G1/G5: candidates entries list both programs; WIC 12200(g) cited
- G3/G4/G7/G9: notes, Title XIX reads both inputs, shorter docstring, Case N names

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

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

# Conflicts:
#	policyengine_us/tests/policy/baseline/gov/hhs/medicaid/eligibility/categories/medically_needy/is_medically_needy_for_medicaid.yaml
…SSP immigration mask, new cases

- C1: md_paa_imputed_federal_ssi reduces the couple rate by one third in another person's household (20 CFR 416.1131; POMS SI 01320.400 B.1.e); md_paa Cases 14-16
- SA1: medically needy Case 13 (a noncitizen dependent parent's pension does not count against the head), now that #10370 is on main
- SA2: the CA state supplement leaves out a member who fails SSI's noncitizen test, except a spouse in an SSI couple computation; Case 12; Case 11 and the CAPI mixed-couple case restated
- SA3: MSP Case 6 and SC OSS Case 8
- G1/G2/G7: MD PAA comment, Case 11 note on the public income-maintenance exclusion, KY SSP gate aligned

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
hua7450 and others added 9 commits October 29, 2026 14:54
…individuals; Case N names

- ca_capi_couple_computation: SSI's couple computation, except when exactly one spouse is in a Title XIX facility by either input (20 CFR 416.414(b)(3)); used by the helper, the payment standard and ca_capi_person; Case 20
- ca_state_supplement_dependent_amount.yaml Cases 4 and 5 named

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

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…the KY gate with a NOTE; drop stale comments

- ca_state_supplement: members who fail SSI's noncitizen test are left out; in an SSI couple computation with such a spouse, the citizen's own countable income counts, since SSA deems none of the CAPI-counted income (20 CFR 416.1160(d), 416.1161(a)(2)-(3)); Cases 11 and 13-14, CAPI Case 10 restated to the law's totals
- ky_ssp_countable_income: SSI's eligibility gate kept, with a NOTE (an aligned gate broke KY Case 5)
- Removed "until PR 10240" comments that this PR makes false

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…es CAPI; otherwise deem

The 416.1161(a)(2)-(3) exclusion covers income counted for a CAPI payment the spouse receives. When the spouse's income leaves no CAPI, it is deemed and the supplement is the lesser of the individual and couple computations (416.1163). The spouse test uses the tax-unit head or spouse. Case 15.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…als; cite POMS SI 01320.430 D

The CAPI-receipt branch always equalled the deemed lesser-of, so it is dropped; results are unchanged.

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

hua7450 commented Oct 29, 2026

Copy link
Copy Markdown
Collaborator Author

Reply to review 5675568106. All items are addressed at head e3b765b1ce. That head merges #10379 at 27d605fa4d, which brings main with #10370; the fixes are in 91898a0659, 59a97d8c96, c4542119b5, f4e10a9d7a and c065a35bee. Line numbers are at that head.

Paths: V/ = policyengine_us/variables/gov/, T/ = policyengine_us/tests/policy/baseline/gov/.

Item Status Where
C1 MD PAA: no one-third reduction on the couple rate Fixed, your code; POMS SI 01320.400 added to the references V/states/md/dhs/fia/paa/md_paa_imputed_federal_ssi.py:47-60; T/states/md/dhs/fia/paa/md_paa.yaml Cases 15 (:397, 509.17 / 968.83) and 16 (:440, 30 / 72)
SA1 medically needy tax-unit sum Resolved: #10370 is on main and merged here. Your case is Case 13, after #10370's Cases 3-10 and this PR's former Cases 3-4 (now 11-12). T/hhs/medicaid/eligibility/categories/medically_needy/is_medically_needy_for_medicaid.yaml:372
SA2 state supplement masked by CAPI eligibility Fixed, with one change (below): your immigration-test mask, plus the citizen's own income in a mixed SSI couple computation V/states/ca/cdss/state_supplement/ca_state_supplement.py:27-88; T/states/ca/cdss/state_supplement/ca_state_supplement.yaml Cases 11-15 (:424, :469, :513, :560, :594); T/states/ca/cdss/capi/ca_capi.yaml Case 10 (:246)
SA3 MSP and MD deeming cap Added MSP Case 6, MD Case 14 and the optional SC Case 8 T/hhs/medicare/savings_programs/income/msp_countable_income.yaml:117; md_paa.yaml:356; T/states/sc/scdhhs/ssi_state_supplement/integration.yaml:203
G1 MD PAA comment Done, your text. Issue for the citizen case: #10544 ($28 vs $511) V/states/md/dhs/fia/paa/md_paa_countable_income.py:48-54
G2 Case 11 benchmark Done: the NOTE and the body use the public income-maintenance exclusion ($855.81). #10481 is updated (comment). ca_state_supplement.yaml:413-424; ca_capi.yaml Case 10
G3 parent-to-child deeming Done: added to Known limitations, and #10243 extended (comment) PR body
G4 body Done: the --ours step names #10379's head 27d605fa4d, #10364 is 45120fa173, and the downstream list now covers IN RCAP, NE AABD, TX SSP, SBD and OC General Relief, CO OAP through ISM, and ssi_amount_if_eligible / ssi_pmv_amount PR body
G5 #10332 Done in the merge section PR body
G6 #10379 fragment Noted in the merge section: delete changelog.d/ca-capi-ssi-ssp-standard.fixed.md here after #10379 lands, if it is still present PR body
G7 shared test; KY Partly. KY keeps SSI's gate with a NOTE. Aligning the gate broke ky_ssp_countable_income.yaml Case 5, which supplies is_ssi_eligible_individual and no age. A shared immigration-test variable would touch about a dozen files, so I left it for a follow-up. V/states/ky/dcbs/ssp/ky_ssp_countable_income.py:40-42
Out of scope: SC OSS immigration test Issue #10545 —

The SA2 change. Your mask leaves out the CAPI spouse's half of a couple's income, but in the model the citizen's own ssi_countable_income is only the other half. Combined with #10379's C1 (CAPI deems from a spouse paid no SSI or supplement), this goes wrong in #10379's ca_capi_person.yaml Case 8: a citizen with $1,600 of Social Security and a CAPI spouse with none.

  • The mask pays the citizen a supplement of 1,233.94 − 790 = $443.94. That counts as a paid spouse, so CAPI stays on the mixed path, and the couple gets $518.83 against the law's $239.94.

So for a citizen in an SSI couple computation with a spouse who fails the test (ca_state_supplement.py:37-84), SSA treats the spouse as ineligible (20 CFR 416.1160(d)):

  • If the spouse receives CAPI, none of the CAPI-counted income is deemed (416.1161(a)(2)-(3)), so the supplement counts the citizen's own countable income, with SSI's exclusions applied to it.
  • If the spouse's own income leaves no CAPI, the income is deemed (416.1163, 416.2025(b)(3)).

The code takes max(own income, couple income − (couple standard − individual standard)). That is the lesser of the individual and couple totals, which equals own income whenever the spouse would receive CAPI. POMS SI 01320.430 D takes the lesser of each part separately. Using totals keeps CAPI at zero when the spouse's income is deemed, so only the SSI/supplement versus CAPI split can differ, not the couple's total; the code says so in a NOTE.

The results:

Household Citizen SSI + supplement CAPI Law
#10379 Case 8 (citizen $1,600, spouse $0) 0 + 0 239.94 0 / 239.94
#10379 Case 9 (citizen $2,000, spouse $0) 0 + 0 118.83 0 / 118.83
Case 11 (each $500, 2025) 235 + 620.81 = 855.81 479.76 487 + 368.81 = 855.81 / 479.76
Case 14 (each $800, 2026) 0 + 453.94 64.89 214 + 239.94 = 453.94 / 64.89
Case 15 (citizen $0, spouse $2,000, 2026) 0 + 118.83 0 min(1,233.94, 2,098.83 − 1,980) = 118.83 / 0

Your Case 12 (undocumented sibling) and a new Case 13 (a married CAPI couple in the citizen's SPM unit) keep the $368.81 supplement. Only the SSI-supplement split in Case 11 still differs from SSA's; that is the joint-SSI part of #10481.

Tests were not run locally; CI will run them.

hua7450 and others added 4 commits October 29, 2026 17:46
…t separates a CAPI couple

Apply Pavel's SA5 fix (20 CFR 416.414(b)(3)) with Cases 14 and 15, name the
state supplement change in the changelog (G11), and add a resource-test case
for the dependent amount.

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

# Conflicts:
#	policyengine_us/tests/policy/baseline/gov/hhs/medicaid/income/medicaid_optional_senior_or_disabled_countable_income.yaml
#	policyengine_us/tests/policy/baseline/gov/hhs/medicare/savings_programs/income/msp_countable_income.yaml
#	policyengine_us/variables/gov/hhs/medicaid/income/medicaid_optional_senior_or_disabled_countable_income.py
…ng case for CAPI

Pavel's G10 on PR 10379: with the CAPI member as tax-unit head, the state
supplement counts the citizen's own income, so CAPI deems (Cases 16 and 17).
Case 18 is Case 13 above the deeming threshold.

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 #10240, "Count income of aged, blind, or disabled people who fail SSI's noncitizen test" (hua7450). Round 2, incremental review of 77a9e5c9bc..2467454e79.

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/, T/ = policyengine_us/tests/policy/baseline/gov/, SSP = V/states/ca/cdss/state_supplement/ca_state_supplement.py, SSPT = T/states/ca/cdss/state_supplement/ca_state_supplement.yaml, CPT = T/states/ca/cdss/capi/ca_capi_person.yaml. Line numbers refer to the reviewed head.

Source Documents

  • Reviewed head SHA: 2467454
  • Mode: incremental (round 2)
  • Scope: I isolated this PR's own work with git diff 3b9dd3b34b HEAD (3b9dd3b34b, #10379's head, is an ancestor of the head) and compared it with the same diff at round 1 (f1bed699be..77a9e5c9bc). The PR's own work changed in 13 files:
    • Code: SSP (+75: an immigration-test mask and a mixed-couple branch), md_paa_imputed_federal_ssi.py (C1), md_paa_countable_income.py (G1), ky_ssp_countable_income.py (a NOTE), and ca_capi_person.py, where only a stale 3-line NOTE is removed.
    • Tests: SSPT Cases 11-15, T/states/ca/cdss/capi/ca_capi.yaml Cases 9-10, CPT Cases 16-18, md_paa.yaml Cases 14-16, MSP Case 20, SC Case 8, medically needy Case 13, and one comment in is_optional_senior_or_disabled_for_medicaid.yaml.
    • Also the changelog fragment and the PR body.
    • Main merges: e3b765b1ce and 5add59c8f0. Through #10379's merges, the branch also brings #10370, #10364, #10360, #10361, #10363 and #10373 from main.
  • SSI law: 20 CFR 416.1161 (a)(2)-(3). Fetched this round: the exclusion covers public income-maintenance payments that the ineligible spouse "receives", and the income counted in figuring them. Also 416.2025 (b)(3), fetched: under deeming, the state supplement uses "the higher of the State supplementary rates for an eligible couple or an eligible individual". Also 416.1131, 416.1160(a), (d), 416.1163(d)-(e), 416.414(b)(3).
  • POMS: SI 01320.400 B.1.e, SI 01320.430 D, SI 01320.141 A (checked in round 1).
  • California: WIC 18938 (from #10482's text); CAPI MPP 49-005, 49-035, 49-055.32.
  • Issues and comments: #10544 and #10545 (both opened 2026-10-29), the #10481 comment 6504203775, the #10243 comment 6504203026, and #10482 (body read; it does not mention SSP).

Branch Status

  • 36 commits ahead of main (d983c32370) and 1 behind. The missing commit is a release commit (CHANGELOG.md, pyproject.toml, uv.lock and three other PRs' fragments), so it has no overlap. The PR is MERGEABLE; the requested changes block it.
  • CI at the head: 33 pass, 1 pending (Contrib tests / Full Suite - Contrib (other-shard-1)). Wait for it or re-run it before merge.
  • #10379 moved after this head. Its head is now 7c380f66d6 (6:22pm EDT), one commit past 3b9dd3b34b, and that commit changes only source_conflicts/candidates.yaml. The body's own rule applies: merge #10379's final head here before the --ours step. This is a process step, not a finding.
  • The #10379 fragment (changelog.d/ca-capi-ssi-ssp-standard.fixed.md) is still here, and #10379 is still open, so the G6 step still applies at merge time.

Round 1 items

ID Status Evidence
C1 RESOLVED md_paa_imputed_federal_ssi.py:50-60 applies vtr_factor to both the individual and the couple rate, as suggested, and :19 cites POMS SI 01320.400. md_paa.yaml Case 15 (:397): min(1,450 x 2/3 - 457.50, 967 x 2/3) = 509.17, PAA 1,478 - 509.17 = 968.83. Case 16 (:440): $30 imputed, PAA 102 - 30 = 72. Both pass.
SA1 RESOLVED #10370 is on main (e7f041c334) and merged here. Case 13 (is_medically_needy_for_medicaid.yaml:372) pins ssi_countable_income: [19_760, 29_760] (this PR's gate) and [true, false]. It passes.
SA2 RESOLVED (author's correction accepted) SSP:31-36, 85-87 masks the SPM-unit sum on SSI's immigration test. Case 12 (SSPT:469), the round-1 case unchanged, passes. The author is right that the round-1 fix alone was incomplete once #10379's unpaid-spouse rule landed: with only the mask, CPT Case 8 gives a supplement of $443.94 against $0, a mutation confirms it, and I withdraw that part of the suggested fix. The new mixed-couple branch (SSP:37-84) gives SSA's totals in SSPT Cases 11, 14 and 15 and in ca_capi.yaml Case 10 (hand-checked below). The author's claim holds: the lesser of the totals, min(I - own, C - couple), equals own income exactly when CAPI = C - I - spouse income > 0. Only the split between SSI and the supplement can differ from POMS D, not the couple's total. One gap in the branch's gate is new item SA4.
SA3 RESOLVED MSP Case 20 (msp_countable_income.yaml:431): 980 + (1,666.67 - 65)/2 = 1,780.83. MD Case 14 (md_paa.yaml:356): min(2.50, 487) = 2.50, PAA 995.50. SC Case 8 (integration.yaml:203): 23,760 > 1,804 x 12 = 21,648. All pass.
G1 RESOLVED md_paa_countable_income.py:48-54 has the suggested comment. #10544 is open with the $28 / $511 case.
G2 RESOLVED The NOTE at SSPT:413-423 and the ca_capi.yaml Case 10 NOTE use 416.1161(a)(2)-(3) and $855.81. The #10481 comment says the same.
G3 RESOLVED The body's Known limitations has the parent-deeming item. The #10243 comment has the TX example.
G4 RESOLVED The body names #10379 at 3b9dd3b34b (correct at this head; see Branch Status), #10364 as merged, and the full downstream list (IN RCAP, NE AABD, TX SSP, SBD and OC General Relief, CO OAP through ISM, and ssi_amount_if_eligible / ssi_pmv_amount).
G5 RESOLVED The merge section names #10332 with the period.this_year rule.
G6 RESOLVED The merge section says to delete the #10379 fragment after #10379 lands.
G7 DEFERRED (accepted) KY: the NOTE at ky_ssp_countable_income.py:40-42 is accurate, because ky_ssp_claim_type.py:30-34 requires is_ssi_eligible. KY passes 417/417. The shared immigration-test variable is left for a follow-up, with no issue number. That is acceptable for a suggestion. This round adds a third inline copy (SSP:31-36), so a tracking issue would help.
SC OSS (out of scope) DEFERRED #10545 is open.

New findings

Critical

None.

Should address

SA4. The CA supplement's mixed-couple branch assumes that a spouse who fails SSI's noncitizen test can receive CAPI.

  • Where: SSP:49-56. spouse_fails_test uses ~meets_ssi_immigration_test. When the spouse's income leaves room for CAPI, the branch then counts only the citizen's own income.
  • Rule: the branch's own comment (SSP:37-43) cites 20 CFR 416.1161(a)(2)-(3). That exclusion covers a public income-maintenance payment that the ineligible spouse "receives". A spouse who cannot receive CAPI gets no exclusion, and the spouse's income is deemed under 416.1163 and 416.2025(b)(3). WIC 18938 bars undocumented people and TPS holders from CAPI (#10482).
  • Evidence (CA, January 2026; aged citizen with Social Security of $320 a month; aged undocumented spouse with a pension of $700 a month):
Code Citizen SSI + supplement Spouse CAPI
Head (model's current CAPI eligibility) 245.50 + 688.44 = 933.94 164.89
Head, spouse ca_capi_eligible_person: false (as after #10482) 245.50 + 688.44 = 933.94 0
Fix below, same input 245.50 + 488.44 = 733.94 0
#10379 head 3b9dd3b34b, same input 245.50 + 0 = 245.50 0
Law: 700 > 497, so the income is deemed. SSI = min(994 - 300, 1,491 - 1,000) = 491; supplement = min(239.94, 607.83) = 239.94 730.94 0
  • Today, ca_capi_eligible_person (V/states/ca/cdss/capi/eligibility/ca_capi_eligible_person.py:15-22) is the same set as "aged, blind or disabled and fails the test". So the branch agrees with the model's own CAPI, and the couple's total ($1,098.83) is the same at both heads.
  • Once #10482 lands, the branch still excludes the spouse's income. The citizen is then overpaid $203 a month in this household, and by up to about $368 a month in general.
  • The fix brings the citizen to $733.94. The $3 gap that remains is the joint SSI (#10481).
  • #10482's proposed fix does not mention SSP.
  • The microsimulation reach is zero today: round 1 found no CA residents in the group that fails the test.
  • Why SA: the code uses a proxy for the legal test that its own comment states, and a tracked change turns the proxy into a wrong value. This is the same reason that made round-1 SA2 an SA.
  • Fix (ran on a copy of the head: T/states/ca/cdss 459/459 with the new case, T/local/ca 867/867, ruff format --check passes; no current case changes). Replace SSP:49-56 with:
        # The exclusion needs a spouse who can receive CAPI, so key on CAPI
        # eligibility rather than on SSI's noncitizen test alone (issue 10482).
        capi_eligible = person("ca_capi_eligible_person", period.this_year)
        spouse_capi_eligible = (
            person.marital_unit.sum(capi_eligible & head_or_spouse) > 0
        )
        in_mixed_couple = (
            person("ssi_couple_computation_applies", period)
            & meets_ssi_immigration_test
            & spouse_capi_eligible
        )

This adds no dependency cycle: the round-1 head read ca_capi_eligible_person in SSP. Append to SSPT (the head fails it with 688.44; the fix passes):

- name: Case 16, 2026 citizen married to an aged spouse who fails SSI's noncitizen test and cannot receive CAPI, so the spouse's income is not excluded.
  period: 2026-01
  absolute_error_margin: 0.01
  input:
    people:
      person1:
        age: 72
        immigration_status: CITIZEN
        social_security: 3_840 # 320 a month
      person2:
        age: 70
        immigration_status: UNDOCUMENTED
        pension_income: 8_400 # 700 a month
        # WIC 18938 bars undocumented people from CAPI (#10482).
        ca_capi_eligible_person: false
    marital_units:
      marital_unit:
        members: [person1, person2]
    households:
      household:
        members: [person1, person2]
        state_code: CA
        living_arrangements_allow_for_food_preparation: true
  output:
    # The spouse receives no CAPI, so 20 CFR 416.1161(a)(2)-(3) does not
    # apply and the spouse's 700 a month, above the 1,491 - 994 = 497
    # threshold, is deemed (20 CFR 416.1163). The model's joint SSI gives each
    # spouse (320 + 700 - 20) / 2 = 500: SSI 745.50 - 500 = 245.50 and a
    # supplement of 1,233.94 - 245.50 - 500 = 488.44, 733.94 in all.
    # NOTE: SSA pays min(994 - 300, 1,491 - 1,000) = 491 of SSI and 239.94 of
    # supplement, 730.94 in all; the gap is the joint SSI (#10481).
    ssi: [245.50, 0]
    ca_state_supplement: 488.44
    ca_capi_person: [0, 0]

Alternative that also closes SA4: add SSP's mixed-couple gate to #10482's proposed fix list and put a NOTE at SSP:49.

Suggestions

G8. Cite the rules that the new branch applies.

  • Where: SSP:17-21. The tuple cites WIC 12200, 20 CFR 416.1160 and CAPI MPP 49-035. The branch also relies on 416.1161 (the exclusion) and 416.2025 (the supplement under deeming), which its comments name.
  • Fix: add "https://www.law.cornell.edu/cfr/text/20/416.1161" and "https://www.law.cornell.edu/cfr/text/20/416.2025" to the tuple. Both resolve, and the second is "Optional supplementation: Countable income".

Investigated and cleared

  • #10379's SA5 fix is carried correctly and is neither undone nor doubled. ca_capi_person.py:30-49 is the same as at 3b9dd3b34b; this PR removes only the stale NOTE that was at the #10379 version's lines 105-107.
    • The separated path computes own_alone from ssi_earned_income and ssi_unearned_income. It never reads the ssi_countable_income that this PR un-zeroes.
    • ssi_income_deemed_from_ineligible_spouse stays 0 for an aged, blind or disabled couple, because is_ssi_spousal_deeming_applies is false for both spouses.
    • Probes give the same CAPI at both heads. #10379 Case 14 gives [62, 253.94]. A citizen with Social Security of $800 and an LPR spouse with a pension of $40 in a CA Title XIX facility gives [0, 42].
    • In that second household, the citizen's total at the head (335.50 + 118.44 = 453.94) equals the law's 214 + 239.94. At #10379 it was 413.94. With a high-income facility spouse, the supplement is $0 at both heads, because the federal SSI ignores the CA-only facility input. That gap predates this PR.
  • Role symmetry. SSPT Case 14 with the LPR as tax-unit head gives the same 453.94 / 64.89 as Case 14 itself. At #10379 the swap gave 443.94 / 864.89, and CPT Cases 16-17 pin the swap.
  • New cases are functional. Three mutations:
    • Dropping the mixed-couple branch fails 8 cases: CPT 8, 9, 16 and 17, SSPT 11, 14 and 15, and ca_capi.yaml 10.
    • Using own income only fails SSPT Case 15.
    • Restoring the old deeming defined_for fails CPT Cases 2-5, 7 and 18 and one ca_capi_income_eligible.yaml case.
  • Periods in SSP. YEAR booleans and enums are read with period.this_year. ssi_countable_income is read with period (÷12). The YEAR inputs passed to _apply_ssi_exclusions are annual, and the result is divided by 12. ssi_couple_computation_applies is MONTH. There are no hard-coded values.
  • Partner contract tests. None is edited, and 623/623 pass at the head.

Hand-checks of new cases (2026 FBR 994 / 1,491; SSI/SSP 1,233.94 / 2,098.83; state parts 239.94 / 607.83)

  • CPT Case 16: the joint SSI is 1,491 - 1,580 < 0, so SSI is 0. The citizen's own 1,580 exceeds 1,233.94, so the supplement is 0. The unpaid citizen is an ineligible spouse, so the income is deemed. Federal min(994, -89) gives 0. State min(239.94, 607.83 - 89) = 239.94. This matches the law: the LPR has no income to deem, and the citizen's own income bars SSI/SSP.
  • CPT Case 17: state min(239.94, 607.83 - 489) = 118.83.
  • CPT Case 18: (2,000 - 20 - 65)/2 = 957.50 is deemed, because 2,000 > 497. Federal min(994, 533.50) + state 239.94 = 773.44.
  • SSPT Case 11: 1,335.81 - 235 - 480 = 620.81 (x 12 = 7,449.72). The law gives 487 + 368.81, the same 855.81 in all.
  • SSPT Cases 12 and 13: 1,335.81 - 487 - 480 = 368.81 (x 12 = 4,425.72).
  • SSPT Case 14: 1,233.94 - 780 = 453.94; SSA gives 214 + 239.94. CAPI: 2,098.83 - 1,580 - 453.94 = 64.89.
  • SSPT Case 15: max(0, 1,980 - 864.89) = 1,115.11, so the supplement is 118.83. The law gives federal 0 and state min(239.94, 118.83) = 118.83. CAPI is 0.
  • ca_capi.yaml Case 10: 2,057.83 + 257.74 = 2,315.57 (x 12 = 27,786.84). CAPI: 2,315.57 - 980 - 855.81 = 479.76 (x 12 = 5,757.12).

Tests run

All at the head (2467454e79), one folder at a time, with the snapshot package confirmed on the import path:

  • T/ssa/ssi: 246 passed.
  • T/states/ca/cdss: 458 passed.
  • T/hhs/medicaid: 835 passed.
  • T/hhs/medicare/savings_programs: 92 passed.
  • T/states/md/dhs: 129 passed.
  • T/states/sc/scdhhs: 32 passed.
  • T/states/ky/dcbs: 417 passed.
  • T/local/ca: 867 passed.
  • tests/policy/baseline/partners: 623 passed.
  • SA4 fix on a copy: T/states/ca/cdss 459 passed (with Case 16), T/local/ca 867 passed. The head fails Case 16 (688.44 against 488.44).
  • Mutations: 3 runs; results under Investigated and cleared. All copies are deleted. The probe scripts are in b3-pr10240-ssi-noncitizen-income-scratch/probes/.

Verdict

REQUEST_CHANGES: ten of the eleven round-1 items are resolved, including C1 and SA1-SA3, and G7 is acceptably deferred. One new should-address item is open (SA4, the mixed-couple gate on CAPI eligibility). Either the one-line fix with Case 16, or a #10482 entry with a NOTE, closes it. G8 is optional.

hua7450 and others added 2 commits October 30, 2026 10:48
…izen-countable-income

# Conflicts:
#	policyengine_us/tests/policy/baseline/gov/hhs/medicaid/eligibility/is_medicaid_eligible.yaml
#	policyengine_us/tests/policy/baseline/gov/hhs/medicaid/income/medicaid_optional_senior_or_disabled_countable_income.yaml
#	policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/ca_capi.yaml
#	policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/ca_capi_person.yaml
#	policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/eligibility/ca_capi_income_eligible.yaml
#	policyengine_us/variables/gov/states/ca/cdss/capi/ca_capi_person.py
#	source_conflicts/candidates.yaml
…ibility; cite 416.1161 and 416.2025

Pavel's SA4 on PR 10240: the 416.1161(a)(2)-(3) exclusion needs a spouse who
can receive CAPI, so a spouse who fails SSI's noncitizen test but is barred
from CAPI (WIC 18938) has income deemed (Case 16). G8 adds the two rules the
branch applies to the reference tuple.

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

hua7450 commented Oct 30, 2026 •

Copy link
Copy Markdown
Collaborator Author

Reply to review 5711668382. Both items are addressed at head df7b398834: 0b909d0d77 merges main (with #10379, squash-merged as 7f736e8f3a), and df7b398834 has the fixes. Line numbers are at that head.

Paths: SSP = policyengine_us/variables/gov/states/ca/cdss/state_supplement/ca_state_supplement.py, SSPT = policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement.yaml.

Item Status Where
SA4 the mixed-couple branch assumes a spouse who fails the test can receive CAPI Fixed with your one-line fix: the branch now keys on the spouse's ca_capi_eligible_person (head or spouse in the marital unit), with your comment citing #10482. Your Case 16 is added as written: ssi [245.50, 0], ca_state_supplement 488.44, CAPI [0, 0], with the NOTE that SSA pays 491 + 239.94 and the $3 gap is the joint SSI (#10481). SSP:51-61; SSPT Case 16 (:625)
G8 cite the rules the branch applies Done: 20 CFR 416.1161 and 416.2025 added to the reference tuple. SSP:17-23

The main merge.

The merge needs no --ours step any more. #10379's G12 (in-kind support on the separated path) is tracked in #10549; when it is fixed, its new ca_capi_person.yaml case goes after this PR's Cases 16-18.

Tests were not run locally; CI will run them.

Update (head c1602d488f): merged main with #10519 (cooking facilities now the default) and #10546: ca_capi.yaml Case 5 takes #10519's $14,807.28, and the five cases here that meant no cooking (ca_capi.yaml Case 10, ca_state_supplement.yaml Cases 10-13) now set living_arrangements_allow_for_food_preparation: false, so their values are unchanged.

…izen-countable-income

# Conflicts:
#	policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/ca_capi.yaml

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.

2 participants