Repository navigation
Pay California's SSI/SSP restaurant meals allowance only when the living arrangement prevents cooking - #10519
Conversation
The input had no default, so it was false for every household that did not set it, and every aged or disabled California SSI/SSP recipient got the restaurant meals allowance (no-cooking standard). WIC 12200(e) pays the allowance only when the living arrangement prevents meal preparation at home, and POMS SI SF01415.140 requires no adequate cooking and food storage facilities and a signed application. Default the input to true and cite both sources. Add default and no-cooking cases for an aged individual and an aged couple in January 2025, and update the spm_unit_benefits California case to the regular standard (2,879.28 instead of 4,425.72). The partner fixture analytics_coverage/edge_cases/state/ca/state_supplement.yaml is not edited here: three of its cases change and need partner sign-off. Fixes #10296 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@hua7450 — partner contract tests (per Model change and law.
Partner-facing impact: any partner that calls the API for an aged or disabled Californian without this input gets a lower California SSP from this PR on, by $128.87 a month for an individual and $257.74 for a couple. Before the edit goes in:
If you answer yes to all three, the edit below goes into this PR (the file's 4 cases pass with it). If you prefer, the fixtures can instead set the input to false and keep their values. Proposed editdiff --git a/policyengine_us/tests/policy/baseline/partners/analytics_coverage/edge_cases/state/ca/state_supplement.yaml b/policyengine_us/tests/policy/baseline/partners/analytics_coverage/edge_cases/state/ca/state_supplement.yaml
index 4e95fb1..dea4de4 100644
--- a/policyengine_us/tests/policy/baseline/partners/analytics_coverage/edge_cases/state/ca/state_supplement.yaml
+++ b/policyengine_us/tests/policy/baseline/partners/analytics_coverage/edge_cases/state/ca/state_supplement.yaml
@@ -1,8 +1,9 @@
# CA SSI State Supplementary Payment (SSP) partner edge cases.
# 2026 payment standards (2026-01-01 params): aged/disabled single $1,233.94,
# married (both aged/disabled) $2,098.83; food allowance single $128.87,
-# married $257.74 (applies when living arrangements do not allow food
-# preparation, the model default). 2026 SSI FBR: $994 single, $1,491 couple.
+# married $257.74 (applies only when living arrangements do not allow food
+# preparation, WIC 12200(e); the model default is that they allow it, so these
+# cases get no food allowance). 2026 SSI FBR: $994 single, $1,491 couple.
# SSP = payment standard - SSI - SSI countable income.
- name: ca_state_supplement_aged_single_no_income_max (ca)
period: 2026
@@ -41,9 +42,9 @@
output:
spm_units:
spm_unit:
- # Standard: 1,233.94 + 128.87 food = 1,362.81; SSI = 994 FBR (no income).
- # SSP: (1,362.81 - 994) x 12 = 368.81 x 12 = 4,425.72.
- ca_state_supplement: 4_425.72
+ # Standard: 1,233.94 (no food allowance, WIC 12200(e)); SSI = 994 FBR
+ # (no income). SSP: (1,233.94 - 994) x 12 = 239.94 x 12 = 2,879.28.
+ ca_state_supplement: 2_879.28
- name: ca_state_supplement_aged_couple_no_income (ca)
period: 2026
absolute_error_margin: 0.1
@@ -91,9 +92,9 @@
output:
spm_units:
spm_unit:
- # Both aged: married standard 2,098.83 + married food 257.74 = 2,356.57;
- # SSI couple FBR 1,491. SSP: (2,356.57 - 1,491) x 12 = 865.57 x 12 = 10,386.84.
- ca_state_supplement: 10_386.84
+ # Both aged: married standard 2,098.83 (no food allowance, WIC 12200(e));
+ # SSI couple FBR 1,491. SSP: (2,098.83 - 1,491) x 12 = 607.83 x 12 = 7,293.96.
+ ca_state_supplement: 7_293.96
- name: ca_state_supplement_aged_single_earnings_partial (ca)
period: 2026
absolute_error_margin: 0.1
@@ -133,8 +134,9 @@
spm_unit:
# $2,200/mo earned: SSI countable = (2,200 - 20 - 65) / 2 = 1,057.50
# > 994 FBR -> federal SSI = 0, but SSP standard is higher:
- # SSP: (1,362.81 - 0 - 1,057.50) x 12 = 305.31 x 12 = 3,663.72.
- ca_state_supplement: 3_663.72
+ # SSP: (1,233.94 - 0 - 1,057.50) x 12 = 176.44 x 12 = 2,117.28
+ # (no food allowance, WIC 12200(e)).
+ ca_state_supplement: 2_117.28
- name: ca_state_supplement_resources_above_limit_ineligible (ca)
period: 2026
absolute_error_margin: 0.1🤖 Posted by Claude Code |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ance With living_arrangements_allow_for_food_preparation defaulting to true, an aged California SSI/SSP recipient who does not report a living arrangement without cooking facilities gets the independent-living standard, not the restaurant meals allowance (WIC 12200(e)). Three non-partner tests relied on the old default. - snap_unearned_income_state_ssi_supplements.yaml: the two California cases have no sign of a home without cooking facilities, so update ca_state_supplement to 239.94 (1,233.94 - 994), SNAP unearned income to 1,233.94 and SNAP to 35, with the calculation in comments. - fy2027_cola.yaml: the California case tests the published FY2027 minimum allotment. At $14,000 of Social Security the household got an SSP and, under the regular standard, SNAP of $26 and $38, above the minimum. Raise the income to $17,000, which is above both California aged standards plus the $20 disregard, so no SSI or SSP is paid and the case again gets the $24 and $25 minimums whatever the input says. - test_social_security_current_law.py: the raw_core_dataset probe route set no state, so its 2026 household was in the default state (CA) and household_net_income@2026 included the California SSP. The differential compares with pinned pre-feature main 8986e05, so the default change showed as a $1,489.44 mismatch (SSP -$1,546.44, SNAP +$57). Put the raw dataset household in Texas in 2024 and 2026, as situation() does; state_code has a formula, so a 2024 input alone does not reach 2026. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
CI follow-upThe last run had three failures outside the partner fixtures. All three came from the new
The supplement is still counted as SNAP unearned income, which is what these cases test.
The fix puts the raw dataset household (the shared Local results (Python 3.11, Core 3.33.4):
Head: 🤖 Posted by Claude Code |
|
@hua7450 — when you have a moment: this PR needs your answers to the three partner-test questions in this comment before the three 🤖 Posted by Claude Code |
hua7450
left a comment
There was a problem hiding this comment.
Approving. I checked the change against WIC 12200(e), POMS SI SF01415.140 and the January 2025 California amounts in POMS SI 01415.057. A default of true matches the common case (code A: independent living with cooking facilities, or a living arrangement that provides meals).
Partner contract tests: yes to all three questions.
- Yes, I'm sure: please add your proposed edit to
partners/analytics_coverage/edge_cases/state/ca/state_supplement.yaml, updating the three expected values rather than setting the input to false. - Yes, a team member has been notified.
- Yes, the API partner has been notified.
Per the partner AGENTS.md, I'll approve again once the head contains that edit.
Nit (optional): the two new cases that set the input to false ("2025 aged individual whose living arrangement prevents food preparation gets the restaurant meals allowance" and the couple case) pass on main and cover the same classes as the 2026 "without cooking facilities" cases already in integration.yaml, so they could be dropped.
…into fix-10296-ca-ssp-meal-allowance-default
…efault The three aged California cases do not describe a household without a kitchen, so they now get the regular SSI/SSP standard: 2,879.28, 7,293.96 and 2,117.28 for 2026. The partner gate was confirmed by hua7450 (2026-10-29) and Pavel (2026-10-30). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…-allowance-default
PR 10379 (now on main) added CAPI Case 5, which relied on the old default of no food preparation and so expected the no-cooking food allowance. With living arrangements now allowing food preparation by default, Case 5 gets the disabled individual standard alone: 1,233.94 x 12 = 14,807.28. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…-allowance-default
The note from PR 10379 said the input had no default, so every aged or disabled person got the no-cooking allowance. The input now defaults to true, so the allowance applies only when the input is set to false. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@hua7450, a heads-up on #10379, which merged first. Its New head
No other CAPI case changes; they set the input explicitly. Locally, |
Summary
living_arrangements_allow_for_food_preparationhad nodefault_value, so it was false for every household that did not set it.ca_state_supplement_food_allowance_eligiblepays the restaurant meals allowance when the input is false, so every aged or disabled California SSI/SSP recipient got the no-cooking standard by default. In January 2025 that is $1,335.81 instead of $1,206.94 for an individual, and $2,315.57 instead of $2,057.83 for a couple (SSA POMS SI 01415.057, California codes A and C).The input now defaults to true: a household can prepare meals at home unless the input says otherwise. The variable gets a
documentationstring and cites WIC 12200 and POMS SI SF01415.140. No formula or parameter changes. The allowance amounts ($128.87 individual, $257.74 couple) and the rule inca_state_supplement_food_allowance_eligibleare unchanged. The only reader of the input onmainisca_state_supplement_food_allowance_eligible.Law
PolicyEngine's other conditions for the allowance:
ca_state_supplement_aged_disabled_countcounts eligible members who are aged (65+) or SSI-disabled. A blind person who is neither does not count, which matches 12200(e) and POMS A.ca_state_supplement_eligible_personrequires the tax-unit head or spouse, so dependent children never count, which matches the POMS exclusion of children under 18.Gaps that this PR does not change:
Changed expected values
spm_unit_benefits.yaml, "Benefits include California's SSI state supplement." A single aged Californian with no income in 2026. The case does not describe the living arrangement, so it now gets the regular standard:ca_state_supplement4,425.72 → 2,879.28 ((1,233.94 − 994) × 12) andspm_unit_benefits16,353.72 → 14,807.28. The comment now cites WIC 12200(e).Partner contract tests: needs @hua7450's sign-off (
policyengine_us/tests/policy/baseline/partners/AGENTS.md). Three cases inpartners/analytics_coverage/edge_cases/state/ca/state_supplement.yamlchange. None of them describes a household without a kitchen: they are aged people in ZIP 90001, and the file header attributes the food allowance to "the model default". Setting the input to false in the fixtures would keep them green but hide the change: an API call that does not send the input now gets the regular standard. So the proposal is to update the expected values, not to pin the input.ca_state_supplement(2026, annual)ca_state_supplement_aged_single_no_income_max (ca)ca_state_supplement_aged_couple_no_income (ca)ca_state_supplement_aged_single_earnings_partial (ca)The header comment and the three arithmetic comments change to match. No other partner case changes: the Amplifi and
signatures/ca.yamlcases already set the input to true. The partner file edit is inc0b77938e1, which updates the three expected values and the comments as above. The three gate questions were answered yes in the approving review on 2026-10-29 and by Pavel on 2026-10-30. The branch also mergesmainat926ed24e69, which includes #10379. At the head,gov/states/ca/cdss(452) passes locally. Withmainata14576f1b0(also after #10379), the two SNAP files (30),spm_unit_benefits.yaml(6) andpartners(623) pass.Coordination
Refactor the California state supplement: state-share parameters and person-level amounts #7892 (issue, @hua7450) proposes a wider redesign of the CA SSP standards: one standard per living arrangement, with California's share stored. This PR changes only the input's default and does not conflict with it. The issue's model columns were computed with the default false; after this PR its facility rows no longer include the $128.87 unless the input is set.
Pay California CAPI from the SSI/SSP standard per person, with spouse-to-spouse deeming #10379 (@hua7450, CAPI, merged 2026-10-30) reads the same input in
_ca_capi_ssi_ssp_standard.py. Its tests set the input explicitly, exceptca_capi.yaml"Case 5, integration test, permanent resident without 40 SSI quarters". That case expected 16,353.72 (1,362.81 × 12, "living arrangements default to no food preparation"). This PR merges second, so it updates the case to 14,807.28 (1,233.94 × 12) inf4eeeed87a, and the NOTE comment on the default in_ca_capi_ssi_ssp_standard.pyin30b0a6a7c2.Count income of aged, blind, or disabled people who fail SSI's noncitizen test #10240 (@hua7450) merges Pay California CAPI from the SSI/SSP standard per person, with spouse-to-spouse deeming #10379 and adds cases that rely on the old default. At its head (77a9e5c) with this change, 4 of 109 CAPI and CA SSP cases fail, each by 1,546.44 a year (12 × 128.87):
ca_capi.yaml"Integration test, mixed couple with income, the noncitizen spouse receives CAPI" (ca_state_supplement7,329.72 → 5,783.28);ca_state_supplement.yaml"Case 10, ..." and "Case 11, ..." (ca_state_supplement_payment_standard16,029.72 → 14,483.28).The same rule applies. This PR puts its new cases in
ca_state_supplement_food_allowance_eligible.yaml, so it does not touchca_state_supplement.yamland does not reuse the "Case 10" and "Case 11" names.Backdate California State Supplement (SSP) parameters #7787 (draft, backdates CA SSP parameters) touches other CA SSP test files, not these.
Tests
New cases in
ca_state_supplement_food_allowance_eligible.yaml, all January 2025 (POMS SI 01415.057: federal SSI $967 / $1,450; independent living $1,206.94 / $2,057.83; no cooking $1,335.81 / $2,315.57):ca_state_supplementLocal runs (policyengine-core YAML runner, one process per directory):
gov/states/ca/cdss/state_supplement,gov/states/ca/cdss/capi,household/income/spm_unit: 143 passed.gov/ssa/ssi: 243 passed.household/income/household: 53 passed.partners/(31 directories): 620 passed, 3 failed. The 3 failures are the CA partner cases in the table above. With the proposed partner edit, that file's 4 cases pass.test_snap_child_support_treatment_invariants.py: 23 passed.main, the 3 new default cases and thespm_unit_benefitscase fail; the other new cases pass.Fixes #10296
axiom: n/a: changes only the value assumed when a household's living arrangement is not reported; the WIC 12200(e) amounts that rulespec-us encodes in
us-ca/statutes/wic/12200.yamland the eligibility rule are unchanged🤖 Generated with Claude Code