Repository navigation
Conversation
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>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…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
…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>
…-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>
|
@PavelMakarchuk Along with the review, one source-conflict sign-off for this PR:
A one-word answer is enough: "statute" or "regulation". The other two candidates in this PR ( |
|
Ruling on
The candidate will record this comment as the ruling. The register entry and the code marker follow the merge. |
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>
Brings in main's CI fix. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
PavelMakarchuk
left a comment
There was a problem hiding this comment.
Program Review
PR #10379, "Pay California CAPI from the SSI/SSP standard per person, with spouse-to-spouse deeming" (hua7450). Round 1, full review.
IDs: C = critical, SA = should address, G = suggestion.
Paths: CAPI/ = policyengine_us/variables/gov/states/ca/cdss/capi/, P = CAPI/ca_capi_person.py, PS = CAPI/ca_capi_payment_standard.py, H = CAPI/_ca_capi_ssi_ssp_standard.py, SSP/ = policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/, T/ = policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/, OFF/ = policyengine_us/parameters/gov/states/ca/cdss/capi/payment_standard_offset/, CAND = source_conflicts/candidates.yaml. "MPP" is the CDSS CAPI regulations PDF. Line numbers refer to the reviewed head. Every PDF link uses the file page number.
Source Documents
- Reviewed head SHA: f1bed69
- Mode: full
- Scope: 16 files, 1,289 insertions and 89 deletions against the merge base
4a1a3cdeb7. The full analysis ran atb5dea77577. The only later change in scope isa13747ee8c(CANDonly; see "Changed since the analysis"). - California statute: WIC 12200, 18938, 18940, 18941.
- CDSS: PDF MPP Chapter 49, CAPI regulations (pages 3-4, 10, 25, 28, 30, 32, 44-47). PDF ACIN I-23-19 (pages 2, 4). PDF ACIN I-59-25 (pages 3, 5). Form SOC 452 (4/99), column headers and line C (link at
CAND:692). - SSA: POMS SI 01415.058 (2026), SI 01415.057 (2025), SI 01415.056 (2024), SI 01320.430 (C-D).
- Federal: 20 CFR 416.1160, 416.1161, 416.1163, 416.414.
- Issues: #10296, #10480, #10481, #10482, #7892; the ruling record in PR comment 6451310006.
- Year: target 2026. Values checked for 2019, 2024, 2025 and 2026.
Changed since the analysis
a13747ee8c moves us-ca:capi-payment-standard-offset (CAND:631-669) to ruled for the statute; the body records it. The two merges of main change no CAPI, CA SSP or SSI file. No item depends on the change: the ruling keeps the offsets before 2019-06-01, so the SA3 cases stay valid.
Branch Status
- The branch is 9 commits ahead and 6 behind
main(8ea43422e6). It is MERGEABLE; only the required review blocks it. The 6 commits (#10365, #10051, #10345 and version bumps) change no CAPI, SSP or SSI file, and a trial merge withmainis clean. - Merge order: this PR, then #10240. #10240 is stacked on this branch. It makes deeming reachable for noncitizens and counts their income (G3).
- #7787 (mattunrath) backdates the CA SSP parameters and edits
T/ca_capi.yaml(text conflict). It also changes pre-2025 CAPI, so re-check the known-low cases (G2, SA3). - Open PRs that change inputs CAPI reads: #10141 (couple status from marriage;
jointstill works), #10146 (monthly deeming and countable-income variables; then read those atP:24,26,90), #10332, #10382 and #10383 (G4). About nine open PRs also append toCAND: expect append-only conflicts.
What the PR gets right
- The offsets ($10 / $20 / $10 through May 2019, $0 from 2019-06-01) match MPP 49-050.11-.13 (page 44) and WIC 18941, and the register now records the ruling.
- Every 2026 standard matches ACIN I-59-25 page 5 and POMS SI 01415.058: $1,233.94, $1,318.32, $1,362.81, $1,091.27, $1,626.07 and $62 for individuals; $2,098.83, $2,356.57, $2,238.44 and $2,324.35 for couples.
- The per-person benefit with couple halves follows MPP 49-055.3-.4 (page 47), and so does dropping
~is_ssi_eligible_spouse(49-005(e)(3)). With a paid spouse, the mixed-couple total equals the couple standard less the couple's income, and the spouse's SSI/SSP has no $20 exclusion (49-035.221, 49-035.53(m)). - Deeming matches POMS SI 01320.430 D.1-D.3, C.4.c and C.7, with no deeming in a Title XIX facility (20 CFR 416.1160(a)(1)).
- No hard-coded amounts, correct periods, vectorized code (seven household types in one run match seven separate runs).
- The 48 cases have correct hand calculations and catch 22 of 32 code mutations. The body tracks its limits in issues. No partner test is edited; the changelog fragment is correct.
Critical (Must Fix)
C1. The mixed-couple computation runs when the aged, blind or disabled spouse is paid no SSI/SSP.
- Where:
P:48-50,P:61-63,P:94-97;PS:36. - Rule: MPP 49-050.13 (page 44) gives the mixed-couple standard only when the other member "is receiving SSI/SSP", and 49-005(e)(3) (page 3) treats only such a spouse as eligible. A spouse "not eligible for CAPI or SSI/SSP" is an ineligible spouse (49-005(i)(2), page 4; 20 CFR 416.1160(d)), whose income is deemed (WIC 18940(b); MPP 49-035.71; 20 CFR 416.1163).
- Code:
mixed = joint & ~(marital_unit.sum(capi_eligible) > 1)never asks whether the spouse is paid. - Evidence (January 2026, aged citizen 72 with Social Security, aged LPR 68 with 39 quarters and no income, cooking facilities):
| Citizen's countable income | Model SSI / SSP | Model CAPI | Law CAPI (POMS SI 01320.430 D) |
|---|---|---|---|
| $1,580 ($1,600 Social Security) | 0 / 0 | $518.83 | $239.94 |
| $1,980 ($2,000 Social Security) | 0 / 0 | $118.83 | $118.83 |
For a spouse countable income C of $1,491 or more, the PR pays 2,098.83 - C and the law pays min(239.94, 2,098.83 - C). The overpayment is 1,858.89 - C: up to $367.89 a month, and $278.89 (+116%) at C = $1,580. The merge base paid this household $0, so the branch is new code.
- Why this severity: a regulatory mismatch in new code, reachable without pinned inputs. The NOTE at
P:41-47and #10481 concede the rule, and documentation does not save a choice that contradicts a clear rule. SOC 452's lesser-of-totals rule gives the PR's number, but the form's headers send this spouse to deeming, and the PR uses POMS D for deeming: after #10240, a non-ABD spouse with the same income gets $239.94, an ABD spouse $518.83. Ifus-ca:capi-spousal-deeming-methodis ruled for SOC 452, the dollar effect falls to about $0, but the gate is still needed. - Fix (ran at the head;
Ponly):
# P:41-47, replace the NOTE with:
# NOTE: SSI couple status ignores SSI's noncitizen test, so the model
# can still pay such a spouse SSI that SSA would not (issue 10481).
# P:50
couple_with_spouse = joint & ~(person.marital_unit.sum(capi_eligible) > 1)
# after P:60 (couple_income = ...)
# A spouse counts as an eligible spouse only while receiving SSI/SSP
# (MPP 49-005(e)(3), 49-050.13). A spouse paid neither is an
# ineligible spouse (MPP 49-005(i)(2)), whose income is deemed.
spouse_paid = (spouse_ssi + spouse_ssp) > 0
mixed = couple_with_spouse & spouse_paid
unpaid_spouse = couple_with_spouse & ~spouse_paid
# P:78
deeming_income = where(unpaid_spouse, couple_income, countable_income)
couple_federal = fbr.couple - deeming_income
# P:89-93
deeming = (
(person("is_ssi_spousal_deeming_applies", period.this_year) & ~joint)
| unpaid_spouse
) & ~medical_facilityAdd to T/ca_capi_person.yaml (the head fails Case 8 by $278.89; the fix passes both):
- name: Case 8, aged citizen spouse with income too high for SSI/SSP is an ineligible spouse, so CAPI deems the spouse's income.
period: 2026-01
absolute_error_margin: 0.01
input:
people:
person1:
age: 72
immigration_status: CITIZEN
# 1,600 a month; countable 1,580 after the $20 exclusion.
social_security: 19_200
person2:
age: 68
immigration_status: LEGAL_PERMANENT_RESIDENT
ssi_qualifying_quarters_earnings: 39
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 is paid no SSI/SSP, so is an ineligible spouse (MPP
# 49-005(i)(2)). POMS SI 01320.430 D: federal min(994, 1,491 - 1,580) -> 0;
# state min(239.94, 607.83 - (1,580 - 1,491)) = 239.94.
ssi: [0, 0]
ca_state_supplement: 0
ca_capi_person: [0, 239.94]Case 9, "spouse income above the couple state supplement leaves the couple state part", is the same case with social_security: 24_000 (countable 1,980) and only ca_capi_person: [0, 118.83] in the output (state min(239.94, 607.83 - 489)).
Optional: the same gate at PS:36 (no value changes). Below $1,491 the model still pays the citizen joint SSI (#10481), so a step of about $368 remains until #10481 lands.
Should Address
SA1. Every aged or disabled CAPI recipient gets the no-cooking allowance unless the input is set.
- Where:
H:41-46, used atH:61andH:75-76. - Evidence:
living_arrangements_allow_for_food_preparationhas no formula and nodefault_value, so it is False. An aged LPR in January 2026 gets $1,362.81 with it omitted and $1,233.94 with it set. CAPI did not read it before, so the bias is new here. The microdata do not set it; #10296 reports 735 of 1,259 California SPM units with a supplement at the no-cooking share (2025 Enhanced CPS). - Direction and size: upward, +$128.87 a month per individual (+10.4%) and +$257.74 per couple (+12.3%), for every CAPI unit in microsimulation. Eligibility flips only for countable income from $1,233.94 to $1,362.81.
T/ca_capi.yaml:94pins this default on purpose. - Why SA: a biased microsimulation default that does not flip eligibility for a meaningful share.
- Fix (ran): replace the NOTE at
H:41-43, add the same facts to the body's "Not changed" list, and extend #10296 to CAPI.
# NOTE: living_arrangements_allow_for_food_preparation has no default
# value and the microdata do not set it, so every aged or disabled
# person gets the no-cooking allowance (+$128.87 a month in 2026, +$257.74
# for a couple) unless it is set (issue 10296).Do not set default_value = True here. That root fix changes 3 partner contract tests in partners/analytics_coverage/edge_cases/state/ca/state_supplement.yaml (aged single, no income: $4,425.72 to $2,879.28 a year). It is partner-facing and belongs with #10296.
SA2. The state supplement pays a disabled noncitizen child whom CAPI now also pays.
- Where:
SSP/ca_state_supplement_dependent_amount.py:23-25(outside the diff), read byP:55-59. - Evidence (January 2026, LPR parent 40, disabled LPR child 10, 39 quarters): the child gets CAPI $1,091.27 and the unit SSP $1,091.27: $2,182.54 against a $1,091.27 standard. An undocumented disabled child also gets the SSP; a citizen child correctly gets $97.27. It also reaches the new mixed branch: a mixed couple with this child has a unit SSP of $1,579.71, all attributed to the spouse, so the CAPI spouse gets $0 instead of $864.89.
T/ca_capi_payment_standard.yamlCases 11 and 12 (lines 234, 264) assert only the payment standard. - Why SA: the formula is pre-existing, but it gives a wrong value in a variable this PR adds and pays the child twice the SSI/SSP standard.
- Fix (ran; whole
gov/states/ca/cdssfolder passes, no partner change). Do not useca_state_supplement_eligible_personitself: it requires a tax-unit head or spouse, so it zeroes every child (8 SSP failures).
# The child must meet the SSI/SSP conditions that
# ca_state_supplement_eligible_person applies to adults; a child who
# fails SSI's noncitizen test gets CAPI instead (WIC 18938, 18941).
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_resource_test = person("meets_ssi_resource_test", period)
eligible = meets_resource_test & (is_citizen | is_qualified_noncitizen)
dependent_count = spm_unit.sum(
dependent & dependent_age_eligible & (is_ssi_disabled | blind) & eligible
)Tests (the head fails the first and third; the fix passes all three). All three use 2026-01 and cooking facilities.
- "Disabled noncitizen child who fails SSI's noncitizen test gets CAPI, not the state supplement": the household of
T/ca_capi_payment_standard.yamlCase 11, without its marital units and withliving_arrangements_allow_for_food_preparation: true. Output:ca_capi_person: [0, 1_091.27],ca_state_supplement_dependent_amount: 0,ca_state_supplement: 0. - "Disabled citizen child keeps the state supplement above SSI" (SSP folder): the same household with both people
CITIZENand no quarters lines. Output:ssi: [0, 994],ca_state_supplement: 97.27. - "Mixed couple with a disabled noncitizen child, the child's standard does not reduce the CAPI spouse": the
T/ca_capi.yaml:127couple plus the child asperson3, with marital units[person1, person2]and[person3]. Output:ca_capi_person: [0, 864.89, 1_091.27].
With a citizen disabled child, the pro-rata simplification still gives the child's $97.27 SSP to the spouse (CAPI $767.62, not $864.89); say so in the NOTE atP:53-54. If you keep this fix out of the PR, open an issue and add a NOTE next to Cases 11 and 12.
SA3. No test covers the couple and mixed-couple offsets, the couple and out-of-home care floors, or deeming before June 2019.
- Where:
PS:39(p.couple,p.mixed_couple; values atOFF/couple.yaml:3andOFF/mixed_couple.yaml:3),H:92,100,102(floors),P:88(deeming offset). - Evidence: only the individual offset has a boundary case (Case 15). Five code changes survive all 48 cases: the $20 offset on a mixed couple, the $10 offset on a CAPI couple, no couple floor, no out-of-home care floor, no deeming offset before June 2019. Each case below catches one.
- Why SA: missing edge cases for already-tested variables.
- Fix (ran: all pass at the head and with the C1 and SA2 fixes; mark them as known-low stopgap values tied to #10480). For
T/ca_capi_payment_standard.yaml:
- name: Case 16, CAPI couple, the 20 couple offset applies through May 2019 and ends in June 2019.
period: 2019
absolute_error_margin: 0.01
input:
people:
person1:
age: 72
immigration_status: LEGAL_PERMANENT_RESIDENT
ssi_qualifying_quarters_earnings: 39
person2:
age: 68
immigration_status: LEGAL_PERMANENT_RESIDENT
ssi_qualifying_quarters_earnings: 39
marital_units:
marital_unit:
members: [person1, person2]
households:
household:
members: [person1, person2]
state_code: CA
living_arrangements_allow_for_food_preparation: true
output:
# Couple standard max(1,167, 2019 couple FBR 1,157) = 1,167 (known-low,
# issue 10480). May: (1,167 - 20) / 2 = 573.50 each (MPP 49-050.12).
# June: 1,167 / 2 = 583.50 each (WIC 18941).
ca_capi_payment_standard:
2019-05: [573.5, 573.5]
2019-06: [583.5, 583.5]Case 17 (mixed couple) is Case 16 with person1 a CITIZEN without quarters; output 2019-05: [0, 1_157] and 2019-06: [0, 1_167] (1,167 - 10, MPP 49-050.13). Case 18 (couple floor) is Case 16 with period: 2024-01; output [707.5, 707.5] (max(1,167, 1,415) / 2). Case 19 (out-of-home care floor): one LPR aged 70 with 39 quarters, in_out_of_home_care_facility: true, cooking facilities, period: 2024-01; output ca_capi_payment_standard: 943 ((1,167 + 709) / 2 = 938, floored; POMS gives $1,575.07). For T/ca_capi_person.yaml:
- name: Case 10, deeming keeps the 10 individual offset through May 2019.
period: 2019
absolute_error_margin: 0.01
input:
people:
person1:
age: 70
immigration_status: LEGAL_PERMANENT_RESIDENT
ssi_qualifying_quarters_earnings: 39
# Supplied as in Case 2. The spouse earns 500 per month; couple
# countable income (500 - 20 - 65) / 2 = 207.50 per month, all deemed.
is_ssi_spousal_deeming_applies: true
ssi_income_deemed_from_ineligible_spouse: 2_490
ssi_countable_income: 2_490
person2:
age: 50
employment_income: 6_000
marital_units:
marital_unit:
members: [person1, person2]
households:
household:
members: [person1, person2]
state_code: CA
living_arrangements_allow_for_food_preparation: true
output:
# Standards max(630, 771) = 771 and max(1,167, 1,157) = 1,167 (known-low,
# issue 10480). Federal min(771, 1,157 - 207.50) = 771; state 0.
# May: 771 - 10 = 761 (MPP 49-050.11); June: 771 (WIC 18941).
ca_capi_person:
2019-05: [761, 0]
2019-06: [771, 0]Optional: a direct case for the "one CAPI person, non-ABD spouse below the deeming threshold" branch (LPR 70 with 39 quarters; spouse 50 with employment_income: 3_600; 2026-01; ca_capi_payment_standard and ca_capi_person both [1_233.94, 0]).
SA4. The mixed-couple tests put all income on the CAPI member.
- Where:
P:60-63;T/ca_capi_person.yaml:189(Case 6) andT/ca_capi.yaml:127. - Evidence: in both cases the SSI/SSP spouse has no countable income, so subtracting only the CAPI member's own income gives the same results, and that change survives every case.
- Why SA: a missing edge case for a tested variable.
- Fix (ran; passes at the head and with the C1 fix): add "Case 11, mixed couple where the SSI/SSP spouse has the income subtracts the couple's income" to
T/ca_capi_person.yaml. It is Case 6 with the pension moved to the citizen:person1getspension_income: 5_040,ssi: 594andssi_countable_income: 4_800(994 - 400 SSI);person2gets onlyssi_countable_income: 0; the SPM unit keepsca_state_supplement: 239.94. Output:ca_capi_person: [0, 864.89](2,098.83 - 400 - 594 - 239.94).
Suggestions
G1. The one-blind couple standard differs between CAPI and the state supplement, and the register entry does not say so.
- Where:
H:70-80;CAND:1119-1153(us-ca:ssp-blind-couple-food-allowance). - Evidence: an aged and blind couple without cooking (January 2026) has an SSP standard of $2,367.31 as citizens (POMS reading) and a CAPI standard of $2,238.44 as noncitizens (WIC 12200(b), (e)), although WIC 18941 makes them equal. The entry lists only the CAPI helper and asks how the SSP treats them: it adds the allowance.
- Why a suggestion: the sources leave the rule open, the conflict is recorded, and the effect is small ($128.87 a month).
- Fix (ran;
test_source_conflicts.py103 passed):
pe_us:
follows: conflicting-source
code:
- policyengine_us/variables/gov/states/ca/cdss/capi/_ca_capi_ssi_ssp_standard.py
- policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_food_allowance.py
- policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_payment_standard.py
prs:
- https://github.com/PolicyEngine/policyengine-us/pull/10379
state: unreviewed
note: 'PE-US is split, although WIC 18941 makes CAPI equal SSI/SSP. CAPI follows the statute:
_ca_capi_ssi_ssp_standard.py adds no food allowance to the one-blind couple rate, and a couple both aged or
disabled takes the aged or disabled rate with the couple allowance when that is higher. The state supplement
follows POMS: ca_state_supplement_food_allowance.py adds the individual allowance for the aged or disabled member,
so in January 2026 the same couple has a $2,367.31 standard as citizens and $2,238.44 as CAPI recipients. The
ACIN I-59-25 table lists no such combination. The ruling should set both programs.'G2. Disclose the other known-low pre-2025 standards.
- Where:
H:82-104;T/ca_capi_payment_standard.yaml:323-370(Cases 14, 15);T/ca_capi.yaml:202. - Evidence: the pinned cases say they are known-low (2024 aged $943 against $1,182.94; May / June 2019 $761 / $771 against $921.72 / $931.72). The body does not name the out-of-home care and Title XIX gaps.
- Why a suggestion: pre-existing 1991 data, tracked in #10480. Keep the pins: SA3 needs them.
- Fix: add to the body's "Pre-2025 years" section: "Out-of-home care is also floored (January 2024: $943 against $1,575.07), and the Title XIX standard, which is not floored, is $42 against $62 (POMS SI 01415.056; ACIN I-23-19 gives $51 from June 2019)."
G3. Correct the body on what works before #10240.
- Where: body sections "Relation to #10240" and "Not changed";
P:24-27,89-93;T/ca_capi.yaml:118-121. - Evidence: on this head SSI's countable income is $0 for a person who fails SSI's noncitizen test, except the tax-unit spouse. A single CAPI person with a $520 pension gets $1,233.94 (law $733.94). A CAPI couple with a $420 pension each gets $1,688.84 in all (law $1,278.83), because only the spouse's half counts. Deeming never runs unpinned. The merge base did the same, so this is not a regression. The body's $1,300 example gives SSI $105.50, SSP $488.44 and CAPI $224.89; at this head it is $105.50, $0 and $713.33 (same $818.83 total).
- Fix: say "Until #10240 merges, CAPI ignores the income of a single person and of the tax-unit head; only the tax-unit spouse's half of a couple's income counts, and deeming runs only with pinned inputs." Correct the $1,300 split, and add a NOTE at
P:89that names #10240. AtT/ca_capi.yaml:118-121, add that SSI now zeroes this income for people who fail the noncitizen test.
G4. The Title XIX standard and SSI's couple test read different inputs.
- Where:
H:47-49,P:31;jointcomes fromssi_couple_computation_applies, which readsssi_federal_living_arrangement. - Evidence: a CAPI couple with only
ca_in_medical_care_facilityset on one spouse gets $555.71 each; the law gives $62 + $1,233.94. With both inputs set the result is correct. A NOTE documents this. - Fix (not run): also treat
ssi_federal_living_arrangement == MEDICAL_TREATMENT_FACILITYas Title XIX, or follow #10383.
G5. Cite WIC 12200(g) for the out-of-home care amount and link the helper to the open couple-standard conflict.
- Where:
H:12-13,51-53;CAND:1154(us-ca:ssp-nmohc-couple-standard). - Evidence: MPP 49-050.24 (page 45) only defines the arrangement; the amount is WIC 12200(g). The individual standard is half the couple amount, so a $3,239.14 ruling would give $1,619.57, which no source gives.
- Fix (ran with G1): cite 12200(g) in the docstring, and add the helper path to that entry's
pe_us.codeand #10379 to itsprs.
G6. Share the deeming core and cache the standards.
- Where:
P:65-92againstpolicyengine_us/variables/gov/ssa/ssi/_ssi_state_supplement.py:7-50;PS:24andP:73both call the helper. - Evidence: both encode the POMS D lesser-of rule, so a fix there (for example #10146) would not reach CAPI. The helper runs twice per person and is not in a trace.
- Fix (not run): two Person MONTH standard variables and one ungated deeming core for both programs.
G7. Two guards can never bind.
- Where:
H:73,76(the one-aged-or-disabled couple branch) andP:81(max_(..., individual_supplement)). - Evidence: such a couple always has a blind member, whose rate is higher, and the couple state part exceeds the individual part in every year. Removing either changes no case.
- Fix: drop both, or add a one-line NOTE that each is a guard.
G8. OFF/mixed_couple.yaml:3 starts at 1991-01-01.
- Evidence: CAPI began in 1998 (WIC 18944(b)); 49-050.13 dates from 2003. An aged LPR gets $7,440 of CAPI for 1995. The siblings do the same.
- Fix: low impact; a pre-1998 gate in a follow-up.
G9. Shorten dated examples in comments and align test names.
- Where:
P:41-47(C1 removes it), the 25-line docstring atH:5-29; older names inT/ca_capi.yamlandT/eligibility/. - Fix: keep one-line NOTEs with the issue number; use the "Case N, description." form.
Investigated and cleared
- "The divergence appears only when CAPI reaches $0." Rejected: at a spouse income of $1,600 the PR pays $518.83 against $239.94 (C1).
- SA2 fix with
ca_state_supplement_eligible_person. Rejected: it zeroes every child. - Drop the known-low pins. Not adopted: SA3 needs them.
- The second SSI/SSP encoding as should-address. Lowered to G1: the SSP variable is SPM-level; the conflict is recorded.
- Double counting, resources, children. No double counting while the spouse is paid; no circular dependency; the missing resource gate on
ca_capi_persondoes not affectca_capi; 867 CA local cases pass.is_tax_unit_dependentis an acceptable proxy for a child living with a parent. - Uncaught code changes. One is equivalent, one is the documented pro-rata SSP simplification, two are the G7 guards.
Out of scope / follow-up
- #10480 (2008-2024 SSP totals, then remove the floor); #10481 (couple status for spouses who fail the noncitizen test); #10482 (undocumented and TPS); #7892 (SSP structure, reduced needs); #10296 (SSP cooking default, partner impact).
- Sponsor deeming (MPP 49-037); county programs could read
ca_capi_person. The microsimulation was not run.
Validation Summary
| Check | Result |
|---|---|
| CI | f1bed699be: 33 pass, 0 fail (b5dea77577: 33 pass, 3 skipping) |
| Local tests | CAPI folder 48/48 at f1bed699be. At b5dea77577 (same code): CA SSP 57, CA local 867, SSI 243, contrib 12, partner and edge cases (read-only) 115, test_source_conflicts.py 103 |
| Fix runs | C1, SA2 and G1/G5 on a copy of f1bed699be: new cases plus gov/states/ca/cdss 443 passed; SSI, CA local, 32 CA partner and edge files, 2 contrib 1,198 passed; register test 103. The head fails the 3 defect cases |
| Partner contract tests | None edited; no fix here changes one (the SA1 default_value root fix changes 3) |
| References and law | All references corroborate; 2026 values and offsets match; C1 contradicts MPP 49-050.13 |
| Code and mutation | No hard-coded values; vectorized. 32 mutations: 22 caught, SA3/SA4 catch 6, 4 cleared |
| Branch | 9 ahead / 6 behind main; MERGEABLE; trial merge clean |
| PR body | Accurate except G2 and G3. axiom: line present (process note, not counted) |
| Other reviews | None |
Review Severity: REQUEST_CHANGES
One critical item (C1) and four should-address items (SA1-SA4) are open; nine suggestions are open.
Next Steps
To auto-fix issues: run the fix-pr workflow for this PR.
- Apply C1 (the receipt gate and deeming from an unpaid spouse) with Cases 8 and 9.
- Apply SA2 with its three cases, or open an issue and add the NOTEs.
- Add the SA3 and SA4 cases. Update the SA1 NOTE and the body, and extend #10296 to CAPI.
- Take the suggestions that you agree with.
- Run
make format, thengov/states/ca/cdss,gov/ssa/ssi,gov/local/caandtest_source_conflicts.py. - Merge before #10240, then add one unpinned deeming case and one unpinned couple-income case there.
Summary
California's Cash Assistance Program for Immigrants (CAPI) pays aged, blind or disabled noncitizens who are barred from SSI. Since June 1, 2019, CAPI benefits must equal SSI/SSP benefits (WIC 18941), and the federal and state SSI/SSP laws, including the deeming rules, govern CAPI (WIC 18940). The CAPI regulations are Chapter 49 of the CDSS Eligibility and Assistance Standards (MPP 49, CAPI regulations); page numbers below are PDF pages of that file. The model computed CAPI differently:
ca_capi_person), summed to the SPM unit; both members of a noncitizen couple, and the noncitizen spouse of a citizen, are eligibleExample, January 2026, aged individual living independently with cooking facilities and no income: CAPI was $994 × 12 − $10 = $11,918 a year; it is now $1,233.94 a month, or $14,807.28 a year, the CAPI grant in ACIN I-59-25.
Source conflicts
Source conflict
us-ca:capi-payment-standard-offset(WIC 18941 against MPP 49-050): ruled: statute (ruling)Three items added to
source_conflicts/candidates.yaml; no# Source conflictmarkers until the register entries are on rulespec-usmain:us-ca:capi-payment-standard-offset: WIC 18941 (2019) makes CAPI equal SSI/SSP from June 1, 2019; MPP 49-050.11–.13 (2003) still says $10/$20/$10 less. The code follows the statute, as CDSS does (ACIN I-23-19, I-59-25). Stateruled(2026-10-27, for the statute; ruling record).us-ca:capi-spousal-deeming-method: WIC 18940(b) and 18941 (federal deeming rules; equivalence with SSI/SSP, which SSA computes per POMS SI 01320.430 D) against form SOC 452 (4/99), which takes the smaller of the two totals. The code follows the statute; stateunreviewed(statute against a form).us-ca:ssp-blind-couple-food-allowance: WIC 12200(e) gives the no-cooking allowance only to an aged or disabled individual or couple (12200(c), (d)); POMS SI 01415.058 code C adds it for the aged or disabled member of a one-blind couple, and the ACIN I-59-25 table lists no such combination. CAPI follows the statute; stateunreviewed(statute against a manual).Pre-2025 years (stopgap)
The state supplement parameters hold 1991 totals until 2025, below the federal benefit rate from 2008. As a stopgap, the SSI/SSP standards CAPI uses are floored at the federal rate, so pre-2025 CAPI is at least what SSI alone would pay. That still leaves out the whole state supplement: the June 2019 aged or disabled standard was $931.72 (ACIN I-23-19) against the model's $771, and the January 2024 aged standard was $1,182.94 (POMS SI 01415.056) against $943.
ca_capi_payment_standard.yamlCases 14 and 15 and the 2024 case inca_capi.yamlpin these known-low values. #10480 backfills the 2008-2024 totals from the CDSS ACINs and POMS SI 01415.05x and then removes the floor (#7787 is the older draft backdating PR).Relation to #10240
On
main,ssi_countable_incomeis $0 for everyone who fails SSI's noncitizen test, so CAPI ignores their income. #10240 counts that income; its 2026-10-19 review found that, once income counts, CAPI's federal-rate-only standard, its uncapped couple rate under deeming and its SPM-unit pooling change outcomes. This PR fixes them and merges before #10240. Until #10240 merges, the deeming branch and income-dependent cases are reachable only with pinned inputs, which the tests use and say so.Changes
_ca_capi_ssi_ssp_standard.py(shared helper): individual and couple SSI/SSP standards by living arrangement and category, floored at the federal rate except in a Title XIX facility.ca_capi_payment_standard(new, Person, MONTH): CAPI couple, half the couple standard less the couple offset; mixed couple, the couple standard less the mixed offset; otherwise the individual standard less the individual offset. Offsets are $0 from June 2019.ca_capi_person(new, Person, MONTH): standard less own countable income; mixed couple, less the couple's countable income and the spouse's SSI and state supplement (the SPM unit's supplement shared pro rata among its SSP-eligible members); with deeming, POMS SI 01320.430 D.ca_capiaddsca_capi_person;ca_capi_income_eligibleasks whether any member'sca_capi_personis positive;ca_capi_eligible_personno longer excludesis_ssi_eligible_spouse.payment_standard_offset/{single,couple}.yaml:period: month, $0 from 2019-06-01; newmixed_couple.yaml.Tests
ca_capi_payment_standard.yaml(15 cases: categories, couples, the mixed couple, Title XIX facility $62, out-of-home care $1,626.07, aged and blind without cooking $1,362.81, an aged couple with one blind member without cooking $2,356.57, disabled and blind children, the 2024 floor and the June 2019 offset change),ca_capi_person.yaml(7 cases: couple split, four deeming cases including own income, a mixed couple with income, a Title XIX resident),ca_capi.yaml,ca_capi_income_eligible.yaml(boundary at $1,233.94) and a couple case inca_capi_eligible_person.yaml. Expected values are hand-derived from ACIN I-59-25, POMS SI 01415.058 and the federal benefit rates. The CAPI personas are aged lawful permanent residents with 39 qualifying quarters, who are CAPI-eligible under WIC 18938 and MPP 49-020; the model also admits undocumented and TPS people, which #10482 fixes.No other YAML case changes: San Bernardino general relief and the contrib cases set
ca_capias an input, and Orange County general relief and SF CAAP only test whether CAPI is positive. No partner contract test has an aged, blind or disabled noncitizen in California. Tests were not run locally; CI validates.Local review (2026-10-26)
Not changed
ssi_claim_is_joint) ignores SSI's noncitizen test. When SSA would pay the spouse nothing, that spouse is an ineligible spouse (MPP 49-005(i)(2); 20 CFR 416.1160(d)) and deeming applies. Example, January 2026: a citizen with $1,300 a month of Social Security and a CAPI spouse with no income get $818.83 a month in the model (SSI $105.50, state supplement $488.44, CAPI $224.89); the law gives CAPI of $450.94 and nothing else. 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 tracks the fix.living_arrangements_allow_for_food_preparationhas no default value, so unless it is set every aged or disabled CAPI recipient gets the no-cooking allowance.ca_in_medical_care_facility, while SSI readsssi_federal_living_arrangement; the two inputs can disagree.ca_capi_personhas no resource gate; the SPM-unit resource test applies throughca_capi_eligibleonca_capi.ca_capi; they could readca_capi_personin a follow-up.axiom: TheAxiomFoundation/rulespec-us#1939 queued
🤖 Generated with Claude Code