From 025cf09625285ef779872188663d3853344b2d51 Mon Sep 17 00:00:00 2001 From: Ziming Date: Mon, 2 Nov 2026 11:21:00 -0500 Subject: [PATCH 1/6] Store California SSP payment standards as state shares The parameters held combined federal and state totals, so every federal cost-of-living adjustment needed ten edits and any year without them understated the supplement. They now hold California's share, and each standard is the federal amount plus that share. Co-Authored-By: Claude Opus 5.5 --- .../ca-ssp-state-share-parameters.changed.md | 1 + .../aged_or_disabled/amount/married.yaml | 14 ++-- .../aged_or_disabled/amount/single.yaml | 14 ++-- .../allowance/medical_care_facility.yaml | 14 ++-- .../allowance/out_of_home_care.yaml | 16 +++-- .../blind/married/one_blind.yaml | 14 ++-- .../blind/married/two_blind.yaml | 14 ++-- .../payment_standard/blind/single.yaml | 14 ++-- .../payment_standard/dependent/amount.yaml | 14 ++-- .../gov/states/ca/cdss/capi/ca_capi.yaml | 20 +++--- .../cdss/capi/ca_capi_payment_standard.yaml | 66 +++++++++---------- .../states/ca/cdss/capi/ca_capi_person.yaml | 10 +-- .../state_supplement/ca_state_supplement.yaml | 26 +++++++- ...state_supplement_aged_disabled_amount.yaml | 6 +- .../ca_state_supplement_blind_amount.yaml | 2 +- .../ca_state_supplement_dependent_amount.yaml | 6 +- ...ment_out_of_home_care_facility_amount.yaml | 2 +- .../ca/cdss/state_supplement/integration.yaml | 13 ++-- .../ca/cdss/capi/_ca_capi_ssi_ssp_standard.py | 45 +++++-------- ...a_state_supplement_aged_disabled_amount.py | 3 +- .../ca_state_supplement_blind_amount.py | 8 ++- .../ca_state_supplement_dependent_amount.py | 3 +- ...supplement_medical_care_facility_amount.py | 5 +- ...lement_out_of_home_care_facility_amount.py | 8 ++- .../ca_wdp_ssi_ssp_income_eligible.py | 5 +- 25 files changed, 200 insertions(+), 143 deletions(-) create mode 100644 changelog.d/ca-ssp-state-share-parameters.changed.md diff --git a/changelog.d/ca-ssp-state-share-parameters.changed.md b/changelog.d/ca-ssp-state-share-parameters.changed.md new file mode 100644 index 00000000000..36f96045bdf --- /dev/null +++ b/changelog.d/ca-ssp-state-share-parameters.changed.md @@ -0,0 +1 @@ +Store California's state supplement payment standards as state shares on top of the federal benefit rate, so the standards follow each federal cost-of-living adjustment. diff --git a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/aged_or_disabled/amount/married.yaml b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/aged_or_disabled/amount/married.yaml index 8233aff4bf0..c0511459131 100644 --- a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/aged_or_disabled/amount/married.yaml +++ b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/aged_or_disabled/amount/married.yaml @@ -1,8 +1,8 @@ -description: California provides the following state supplement amount to two eligible aged or disabled married filers. +description: California adds this state share to the federal couple benefit rate for married couples who both qualify as aged or disabled and live independently under the State Supplementary Payment program. metadata: unit: currency-USD period: month - label: California state supplement aged or disabled allowance married amount + label: California state supplement aged or disabled married state share reference: - title: California Welfare and Institutions Code Division 9, Part 3, Chapter 3, Article 5, Section 12200 (d) href: https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12200 @@ -12,7 +12,11 @@ metadata: href: https://cdss.ca.gov/Portals/13/SHD/ParaRegIndex/SSI%20Monthly%20Payment%20Amounts%202026.pdf - title: SSA POMS SI 01415.058 - Federally Administered Optional Supplementary Payment Programs for January 2026, California couple payment levels href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415058#b2b + - title: SSA POMS SI 01415.057 - Federally Administered Optional Supplementary Payment Programs for January 2025, California couple payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415057#b2b + - title: "California Department of Social Services, Local Assistance Estimates, 2026 May Revision reference documents, SSI/SSP Payment Standards #page 26-27" + href: https://cdss.ca.gov/Portals/9/Additional-Resources/Fiscal-and-Financial-Information/LOcal-Assistance-Estimates/2026-27/Revisions/2026-may-revision-reference-documents.pdf#page=26 values: - 1991-01-01: 1_167 - 2025-01-01: 2_057.83 - 2026-01-01: 2_098.83 + 1991-01-01: 557 # $1,167 - $610 + # The share holds for January 2025 and 2026, and CDSS projects it for January 2027. + 2025-01-01: 607.83 diff --git a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/aged_or_disabled/amount/single.yaml b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/aged_or_disabled/amount/single.yaml index 2d80ac0a150..a29a24b54d5 100644 --- a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/aged_or_disabled/amount/single.yaml +++ b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/aged_or_disabled/amount/single.yaml @@ -1,8 +1,8 @@ -description: California provides the following state supplement amount to aged or disabled single filers. +description: California adds this state share to the federal benefit rate for aged or disabled individuals living independently under the State Supplementary Payment program. metadata: unit: currency-USD period: month - label: California state supplement aged or disabled allowance single amount + label: California state supplement aged or disabled single state share reference: - title: California Welfare and Institutions Code Division 9, Part 3, Chapter 3, Article 5, Section 12200 (c) href: https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12200 @@ -12,7 +12,11 @@ metadata: href: https://cdss.ca.gov/Portals/13/SHD/ParaRegIndex/SSI%20Monthly%20Payment%20Amounts%202026.pdf - title: SSA POMS SI 01415.058 - Federally Administered Optional Supplementary Payment Programs for January 2026, California recipient payment levels href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415058#b2a + - title: SSA POMS SI 01415.057 - Federally Administered Optional Supplementary Payment Programs for January 2025, California recipient payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415057#b2a + - title: "California Department of Social Services, Local Assistance Estimates, 2026 May Revision reference documents, SSI/SSP Payment Standards #page 26-27" + href: https://cdss.ca.gov/Portals/9/Additional-Resources/Fiscal-and-Financial-Information/LOcal-Assistance-Estimates/2026-27/Revisions/2026-may-revision-reference-documents.pdf#page=26 values: - 1991-01-01: 630 - 2025-01-01: 1_206.94 - 2026-01-01: 1_233.94 + 1991-01-01: 223 # $630 - $407 + # The share holds for January 2025 and 2026, and CDSS projects it for January 2027. + 2025-01-01: 239.94 diff --git a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/allowance/medical_care_facility.yaml b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/allowance/medical_care_facility.yaml index cf68c126f2c..817f4e7694a 100644 --- a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/allowance/medical_care_facility.yaml +++ b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/allowance/medical_care_facility.yaml @@ -1,8 +1,8 @@ -description: California provides the following state supplement allowance for filers receiving care in a medical facility. +description: California adds this state share to the federal payment cap for each resident of a Title XIX medical facility under the State Supplementary Payment program. metadata: unit: currency-USD period: month - label: California state supplement medical care facility allowance amount + label: California state supplement medical care facility state share reference: - title: California Welfare and Institutions Code Division 9, Part 3, Chapter 3, Article 5, Section 12200 (h) href: https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12200 @@ -12,7 +12,11 @@ metadata: href: https://cdss.ca.gov/Portals/13/SHD/ParaRegIndex/SSI%20Monthly%20Payment%20Amounts%202026.pdf - title: SSA POMS SI 01415.058 - Federally Administered Optional Supplementary Payment Programs for January 2026, California recipient payment levels href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415058#b2a + - title: SSA POMS SI 01415.057 - Federally Administered Optional Supplementary Payment Programs for January 2025, California recipient payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415057#b2a + - title: "California Department of Social Services, Local Assistance Estimates, 2026 May Revision reference documents, SSI/SSP Payment Standards #page 26-27" + href: https://cdss.ca.gov/Portals/9/Additional-Resources/Fiscal-and-Financial-Information/LOcal-Assistance-Estimates/2026-27/Revisions/2026-may-revision-reference-documents.pdf#page=26 values: - 1991-01-01: 42 # $30 + $12 - 2025-01-01: 62 - 2026-01-01: 62 + 1991-01-01: 12 # $42 - $30 + # The share holds for January 2025 and 2026, and CDSS projects it for January 2027. + 2025-01-01: 32 diff --git a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/allowance/out_of_home_care.yaml b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/allowance/out_of_home_care.yaml index fde406e33b6..e6e1f555c6f 100644 --- a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/allowance/out_of_home_care.yaml +++ b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/allowance/out_of_home_care.yaml @@ -1,8 +1,8 @@ -description: California provides the following state supplement allowance for filers in a nonmedical out-of-home care facility. +description: California adds this state share to the federal benefit rate for individuals in nonmedical out-of-home care under the State Supplementary Payment program. metadata: unit: currency-USD period: month - label: California state supplement out-of-home care allowance amount + label: California state supplement out-of-home care state share reference: - title: California Welfare and Institutions Code Division 9, Part 3, Chapter 3, Article 5, Section 12200 (g) href: https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12200 @@ -12,14 +12,16 @@ metadata: href: https://cdss.ca.gov/Portals/13/SHD/ParaRegIndex/SSI%20Monthly%20Payment%20Amounts%202026.pdf - title: SSA POMS SI 01415.058 - Federally Administered Optional Supplementary Payment Programs for January 2026, California couple payment levels href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415058#b2b - - title: California Department of Social Services, Local Assistance Estimates, 2026 May Revision reference documents, SSI/SSP Payment Standards - href: https://cdss.ca.gov/Portals/9/Additional-Resources/Fiscal-and-Financial-Information/LOcal-Assistance-Estimates/2026-27/Revisions/2026-may-revision-reference-documents.pdf#page=26 - title: California Department of Social Services, All County Information Notice I-59-25, CAPI payment standards for January 2026 href: https://cdss.ca.gov/Portals/9/Additional-Resources/Letters-and-Notices/ACINs/2025/I-59_25.pdf#page=5 + - title: SSA POMS SI 01415.057 - Federally Administered Optional Supplementary Payment Programs for January 2025, California recipient payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415057#b2a + - title: "California Department of Social Services, Local Assistance Estimates, 2026 May Revision reference documents, SSI/SSP Payment Standards #page 26-27" + href: https://cdss.ca.gov/Portals/9/Additional-Resources/Fiscal-and-Financial-Information/LOcal-Assistance-Estimates/2026-27/Revisions/2026-may-revision-reference-documents.pdf#page=26 values: - 1991-01-01: 709 - 2025-01-01: 1_140.31 # $3,198.14 - $2,057.83 + 1991-01-01: 302 # $709 - $407 # SSA POMS, the CDSS 2026 May Revision and ACIN I-59-25 list $3,252.14 for couples, # twice the $1,626.07 individual rate (WIC 12200(g) sets the amount per recipient). # The CDSS monthly payment table and SSA pamphlet EN-05-11125 list $3,239.14. - 2026-01-01: 1_153.31 # $3,252.14 - $2,098.83 + # The share holds for January 2025 and 2026, and CDSS projects it for January 2027. + 2025-01-01: 632.07 diff --git a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/blind/married/one_blind.yaml b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/blind/married/one_blind.yaml index 74e32930293..69fc3213546 100644 --- a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/blind/married/one_blind.yaml +++ b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/blind/married/one_blind.yaml @@ -1,8 +1,8 @@ -description: California provides the following state supplement amount to married filers with one blind member who are both eligible. +description: California adds this state share to the federal couple benefit rate for married couples who both qualify and have one blind member under the State Supplementary Payment program. metadata: unit: currency-USD period: month - label: California state supplement blind allowance married one blind amount + label: California state supplement blind married one blind state share reference: - title: California Welfare and Institutions Code Division 9, Part 3, Chapter 3, Article 5, Section 12200 (b) href: https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12200 @@ -12,7 +12,11 @@ metadata: href: https://cdss.ca.gov/Portals/13/SHD/ParaRegIndex/SSI%20Monthly%20Payment%20Amounts%202026.pdf - title: SSA POMS SI 01415.058 - Federally Administered Optional Supplementary Payment Programs for January 2026, California couple payment levels href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415058#b2b + - title: SSA POMS SI 01415.057 - Federally Administered Optional Supplementary Payment Programs for January 2025, California couple payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415057#b2b + - title: "California Department of Social Services, Local Assistance Estimates, 2026 May Revision reference documents, SSI/SSP Payment Standards #page 26-27" + href: https://cdss.ca.gov/Portals/9/Additional-Resources/Fiscal-and-Financial-Information/LOcal-Assistance-Estimates/2026-27/Revisions/2026-may-revision-reference-documents.pdf#page=26 values: - 1991-01-01: 1_295 - 2025-01-01: 2_197.44 - 2026-01-01: 2_238.44 + 1991-01-01: 685 # $1,295 - $610 + # The share holds for January 2025 and 2026, and CDSS projects it for January 2027. + 2025-01-01: 747.44 diff --git a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/blind/married/two_blind.yaml b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/blind/married/two_blind.yaml index 19f6d2ed2ff..1d712307fb9 100644 --- a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/blind/married/two_blind.yaml +++ b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/blind/married/two_blind.yaml @@ -1,8 +1,8 @@ -description: California provides the following state supplement amount to married filers with two blind members who are both eligible. +description: California adds this state share to the federal couple benefit rate for married couples who both qualify as blind under the State Supplementary Payment program. metadata: unit: currency-USD period: month - label: California state supplement blind allowance married two blind amount + label: California state supplement blind married two blind state share reference: - title: California Welfare and Institutions Code Division 9, Part 3, Chapter 3, Article 5, Section 12200 (a) href: https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12200 @@ -12,7 +12,11 @@ metadata: href: https://cdss.ca.gov/Portals/13/SHD/ParaRegIndex/SSI%20Monthly%20Payment%20Amounts%202026.pdf - title: SSA POMS SI 01415.058 - Federally Administered Optional Supplementary Payment Programs for January 2026, California couple payment levels href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415058#b2b + - title: SSA POMS SI 01415.057 - Federally Administered Optional Supplementary Payment Programs for January 2025, California couple payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415057#b2b + - title: "California Department of Social Services, Local Assistance Estimates, 2026 May Revision reference documents, SSI/SSP Payment Standards #page 26-27" + href: https://cdss.ca.gov/Portals/9/Additional-Resources/Fiscal-and-Financial-Information/LOcal-Assistance-Estimates/2026-27/Revisions/2026-may-revision-reference-documents.pdf#page=26 values: - 1991-01-01: 1_372 - 2025-01-01: 2_283.35 - 2026-01-01: 2_324.35 + 1991-01-01: 762 # $1,372 - $610 + # The share holds for January 2025 and 2026, and CDSS projects it for January 2027. + 2025-01-01: 833.35 diff --git a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/blind/single.yaml b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/blind/single.yaml index 96c43d79046..bea5dba376e 100644 --- a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/blind/single.yaml +++ b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/blind/single.yaml @@ -1,8 +1,8 @@ -description: California provides the following state supplement amount to single filers who are blind. +description: California adds this state share to the federal benefit rate for blind individuals under the State Supplementary Payment program. metadata: unit: currency-USD period: month - label: California state supplement blind allowance single amount + label: California state supplement blind single state share reference: - title: California Welfare and Institutions Code Division 9, Part 3, Chapter 3, Article 5, Section 12200 (a) href: https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12200 @@ -12,7 +12,11 @@ metadata: href: https://cdss.ca.gov/Portals/13/SHD/ParaRegIndex/SSI%20Monthly%20Payment%20Amounts%202026.pdf - title: SSA POMS SI 01415.058 - Federally Administered Optional Supplementary Payment Programs for January 2026, California recipient payment levels href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415058#b2a + - title: SSA POMS SI 01415.057 - Federally Administered Optional Supplementary Payment Programs for January 2025, California recipient payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415057#b2a + - title: "California Department of Social Services, Local Assistance Estimates, 2026 May Revision reference documents, SSI/SSP Payment Standards #page 26-27" + href: https://cdss.ca.gov/Portals/9/Additional-Resources/Fiscal-and-Financial-Information/LOcal-Assistance-Estimates/2026-27/Revisions/2026-may-revision-reference-documents.pdf#page=26 values: - 1991-01-01: 704 - 2025-01-01: 1_291.32 - 2026-01-01: 1_318.32 + 1991-01-01: 297 # $704 - $407 + # The share holds for January 2025 and 2026, and CDSS projects it for January 2027. + 2025-01-01: 324.32 diff --git a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/dependent/amount.yaml b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/dependent/amount.yaml index cab5930dc19..f34e974616c 100644 --- a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/dependent/amount.yaml +++ b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/dependent/amount.yaml @@ -1,8 +1,8 @@ -description: California provides the following state supplement amount for eligible dependents. +description: California adds this state share to the federal benefit rate for disabled minors living with a parent, guardian or relative under the State Supplementary Payment program. metadata: unit: currency-USD period: month - label: California state supplement dependent amount + label: California state supplement disabled minor state share reference: - title: California Welfare and Institutions Code Division 9, Part 3, Chapter 3, Article 5, Section 12200 (f) href: https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12200 @@ -12,7 +12,11 @@ metadata: href: https://cdss.ca.gov/Portals/13/SHD/ParaRegIndex/SSI%20Monthly%20Payment%20Amounts%202026.pdf - title: SSA POMS SI 01415.058 - Federally Administered Optional Supplementary Payment Programs for January 2026, California recipient payment levels href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415058#b2a + - title: SSA POMS SI 01415.057 - Federally Administered Optional Supplementary Payment Programs for January 2025, California recipient payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415057#b2a + - title: "California Department of Social Services, Local Assistance Estimates, 2026 May Revision reference documents, SSI/SSP Payment Standards #page 26-27" + href: https://cdss.ca.gov/Portals/9/Additional-Resources/Fiscal-and-Financial-Information/LOcal-Assistance-Estimates/2026-27/Revisions/2026-may-revision-reference-documents.pdf#page=26 values: - 1991-01-01: 499 - 2025-01-01: 1_064.27 - 2026-01-01: 1_091.27 + 1991-01-01: 92 # $499 - $407 + # The share holds for January 2025 and 2026, and CDSS projects it for January 2027. + 2025-01-01: 97.27 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/ca_capi.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/ca_capi.yaml index edcf59a37e7..80c8606bc02 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/ca_capi.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/ca_capi.yaml @@ -86,7 +86,8 @@ output: ssi: [11_316, 0] ca_state_supplement_dependent_amount: 0 - ca_state_supplement: 0 + # 223 * 12, using the 1991 share (issue 10480). + ca_state_supplement: 2_676 ca_capi: 0 - name: Case 5, integration test, permanent resident without 40 SSI quarters. @@ -195,7 +196,7 @@ ca_capi_person: [0, 14_807.28] ca_capi: 14_807.28 -- name: Case 8, aged person in 2024, the independent-living standard is floored at the federal benefit rate. +- name: Case 8, aged person in 2024, the independent-living standard adds the state share to the federal benefit rate. period: 2024 absolute_error_margin: 0.01 input: @@ -210,14 +211,13 @@ state_code: CA living_arrangements_allow_for_food_preparation: true output: - # The state supplement parameters hold the 1991 aged amount of 630 until - # 2025 (issue 7787). CAPI equals SSI/SSP (WIC 18941), so the standard is - # floored at the 2024 federal benefit rate: max(630, 943) = 943 per - # month with no offset and no income; 943 x 12 = 11,316. This pins a - # known-low value from the stopgap floor: the published aged standard was - # 1,182.94 (POMS SI 01415.056); issue 10480 removes the floor. - ca_capi_person: 11_316 - ca_capi: 11_316 + # The state share holds its 1991 value of 630 - 407 = 223 until 2025. CAPI + # equals SSI/SSP (WIC 18941), so the standard is 943 + 223 = 1,166 per + # month with no offset and no income; 1,166 x 12 = 13,992. This pins a + # known-low value: the published aged standard was 1,182.94 (POMS SI + # 01415.056); issue 10480 backfills the shares. + ca_capi_person: 13_992 + ca_capi: 13_992 - name: Case 9, integration test, aged permanent resident without 40 SSI quarters whose pension exceeds the CAPI standard. period: 2025 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/ca_capi_payment_standard.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/ca_capi_payment_standard.yaml index f7fc100280d..5244a905307 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/ca_capi_payment_standard.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/ca_capi_payment_standard.yaml @@ -320,7 +320,7 @@ # code C would add 128.87 to the one-blind rate instead (2,367.31). ca_capi_payment_standard: [1_178.285, 1_178.285] -- name: Case 14, 2024 independent-living standard is floored at the federal benefit rate. +- name: Case 14, 2024 independent-living standard adds the state share to the federal benefit rate. period: 2024-01 absolute_error_margin: 0.01 input: @@ -335,13 +335,12 @@ state_code: CA living_arrangements_allow_for_food_preparation: true output: - # The state supplement parameters hold the 1991 aged amount of 630 until - # 2025 (issue 7787), below the 2024 federal benefit rate of 943. CAPI - # equals SSI/SSP (WIC 18941), so the stopgap floor gives max(630, 943) = - # 943. This pins a known-low value: the published January 2024 aged - # standard is 943 + 239.94 = 1,182.94 (POMS SI 01415.056); issue 10480 - # backfills the totals and removes the floor. - ca_capi_payment_standard: 943 + # The state share holds its 1991 value of 630 - 407 = 223 until 2025. CAPI + # equals SSI/SSP (WIC 18941), so the standard is 943 + 223 = 1,166. This + # pins a known-low value: the published January 2024 aged standard is + # 943 + 239.94 = 1,182.94 (POMS SI 01415.056); issue 10480 backfills the + # shares. + ca_capi_payment_standard: 1_166 - name: Case 15, the 10 individual offset applies through May 2019 and ends in June 2019. period: 2019 @@ -358,16 +357,14 @@ state_code: CA living_arrangements_allow_for_food_preparation: true output: - # The state supplement parameters hold the 1991 aged amount of 630 until - # 2025 (issue 7787), so the model floors the standard at the 2019 federal - # benefit rate: max(630, 771) = 771. The actual 2019 SSI/SSP standard was - # 931.72 (ACIN I-23-19), so these are known-low values from the stopgap - # floor (issue 10480). This case pins only the offset boundary: - # 771 - 10 = 761 through May 2019 (MPP 49-050.11) and 771 - 0 = 771 from - # June 1, 2019 (WIC 18941). + # The state share holds its 1991 value of 223 until 2025, so the standard + # is 771 + 223 = 994. The actual 2019 SSI/SSP standard was 931.72 (ACIN + # I-23-19), so these are known-high values (issue 10480). This case pins + # only the offset boundary: 994 - 10 = 984 through May 2019 (MPP 49-050.11) + # and 994 - 0 = 994 from June 1, 2019 (WIC 18941). ca_capi_payment_standard: - 2019-05: 761 - 2019-06: 771 + 2019-05: 984 + 2019-06: 994 - name: Case 16, CAPI couple, the 20 couple offset applies through May 2019 and ends in June 2019. period: 2019 @@ -391,12 +388,12 @@ 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). + # Couple standard 1,157 + 557 = 1,714, using the 1991 share (issue 10480). + # May: (1,714 - 20) / 2 = 847 each (MPP 49-050.12). + # June: 1,714 / 2 = 857 each (WIC 18941). ca_capi_payment_standard: - 2019-05: [573.5, 573.5] - 2019-06: [583.5, 583.5] + 2019-05: [847, 847] + 2019-06: [857, 857] - name: Case 17, mixed couple, the 10 mixed-couple offset applies through May 2019 and ends in June 2019. period: 2019 @@ -420,13 +417,13 @@ living_arrangements_allow_for_food_preparation: true output: # The citizen is paid SSI, so the CAPI member takes the couple standard - # 1,167 (known-low, issue 10480). May: 1,167 - 10 = 1,157 (MPP - # 49-050.13). June: 1,167 (WIC 18941). + # 1,157 + 557 = 1,714, using the 1991 share (issue 10480). May: 1,714 - 10 + # = 1,704 (MPP 49-050.13). June: 1,714 (WIC 18941). ca_capi_payment_standard: - 2019-05: [0, 1_157] - 2019-06: [0, 1_167] + 2019-05: [0, 1_704] + 2019-06: [0, 1_714] -- name: Case 18, 2024 CAPI couple standard is floored at the couple federal benefit rate. +- name: Case 18, 2024 CAPI couple standard adds the state share to the couple federal benefit rate. period: 2024-01 absolute_error_margin: 0.01 input: @@ -448,12 +445,11 @@ state_code: CA living_arrangements_allow_for_food_preparation: true output: - # Stopgap floor: max(1,167, 2024 couple FBR 1,415) / 2 = 707.50 each. A - # known-low value: the published 2024 couple standard is higher (issue - # 10480). - ca_capi_payment_standard: [707.5, 707.5] + # (1,415 + 557) / 2 = 986 each, using the 1991 share. A known-low value: + # the published 2024 couple standard is higher (issue 10480). + ca_capi_payment_standard: [986, 986] -- name: Case 19, 2024 out-of-home care standard is floored at the federal benefit rate. +- name: Case 19, 2024 out-of-home care standard adds the state share to the federal benefit rate. period: 2024-01 absolute_error_margin: 0.01 input: @@ -469,9 +465,9 @@ state_code: CA living_arrangements_allow_for_food_preparation: true output: - # Stopgap floor: (1,167 + 709) / 2 = 938, floored at the 943 FBR. A - # known-low value: POMS SI 01415.056 gives 1,575.07 (issue 10480). - ca_capi_payment_standard: 943 + # 943 + 302 = 1,245, using the 1991 share of 709 - 407. A known-low value: + # POMS SI 01415.056 gives 1,575.07 (issue 10480). + ca_capi_payment_standard: 1_245 - name: Case 20, CAPI couple with one spouse in a Title XIX facility is computed as two individuals. period: 2026-01 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/ca_capi_person.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/ca_capi_person.yaml index 4b5d9901829..df21eae046a 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/ca_capi_person.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/ca_capi_person.yaml @@ -350,12 +350,12 @@ 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). + # Standards 771 + 223 = 994 and 1,157 + 557 = 1,714, using the 1991 shares + # (issue 10480). Federal min(771, 1,157 - 207.50) = 771; state min(223, + # 557) = 223. May: 994 - 10 = 984 (MPP 49-050.11); June: 994 (WIC 18941). ca_capi_person: - 2019-05: [761, 0] - 2019-06: [771, 0] + 2019-05: [984, 0] + 2019-06: [994, 0] - name: Case 11, mixed couple where the SSI/SSP spouse has the income subtracts the couple's income. period: 2026-01 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement.yaml index a8f5eeddeb1..ac94346a23d 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement.yaml @@ -38,7 +38,8 @@ living_arrangements_allow_for_food_preparation: true output: ca_state_supplement_eligible_person: true - ca_state_supplement: 4_101.72 + # (943 + 223) * 12 - 3,458.28; the 223 share dates from 1991 (issue 10480). + ca_state_supplement: 10_533.72 # 2026: federal SSI is $994 (individual) and $1,491 (couple); the California # payment standard is $1,233.94 (individual) and $2,098.83 (couple), per CDSS, @@ -660,3 +661,26 @@ ssi: [245.50, 0] ca_state_supplement: 488.44 ca_capi_person: [0, 0] + +- name: Case 17, 2027 aged individual keeps the state share when the federal benefit rate rises. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + is_tax_unit_head: true + immigration_status: CITIZEN + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: CA + living_arrangements_allow_for_food_preparation: true + output: + ssi: 12_348 # 1,029 * 12 + ca_state_supplement_payment_standard: 15_227.28 # (1,029 + 239.94) * 12 + # CDSS projects the 239.94 share for January 2027 (2026 May Revision, page 27). + ca_state_supplement: 2_879.28 # 239.94 * 12 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_aged_disabled_amount.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_aged_disabled_amount.yaml index df519f47675..780bb774806 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_aged_disabled_amount.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_aged_disabled_amount.yaml @@ -17,7 +17,7 @@ members: [person1, person2] state_code: CA output: - ca_state_supplement_aged_disabled_amount: 7_560 + ca_state_supplement_aged_disabled_amount: 13_992 # (943 + 223) * 12 - name: Married couple, aged and disabled period: 2024 @@ -44,7 +44,7 @@ members: [person1, person2, person3] state_code: CA output: - ca_state_supplement_aged_disabled_amount: 14_004 + ca_state_supplement_aged_disabled_amount: 23_664 # (1,415 + 557) * 12 - name: Married couple, only one aged and disabled period: 2024 @@ -68,4 +68,4 @@ members: [person1, person2, person3] state_code: CA output: - ca_state_supplement_aged_disabled_amount: 7_560 + ca_state_supplement_aged_disabled_amount: 13_992 # (943 + 223) * 12 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_blind_amount.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_blind_amount.yaml index de4a0478f2c..6ef18226143 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_blind_amount.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_blind_amount.yaml @@ -22,4 +22,4 @@ members: [person1, person2, person3] state_code: CA output: - ca_state_supplement_blind_amount: 16_464 + ca_state_supplement_blind_amount: 26_124 # (1,415 + 762) * 12 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_dependent_amount.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_dependent_amount.yaml index 579447c1979..7937d649eab 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_dependent_amount.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_dependent_amount.yaml @@ -18,7 +18,7 @@ members: [person1, person2] state_code: CA output: - ca_state_supplement_dependent_amount: 5_988 + ca_state_supplement_dependent_amount: 12_420 # (943 + 92) * 12 - name: One eligible dependent, one ineligible period: 2024 @@ -44,7 +44,7 @@ members: [person1, person2, person3] state_code: CA output: - ca_state_supplement_dependent_amount: 5_988 + ca_state_supplement_dependent_amount: 12_420 # (943 + 92) * 12 - name: Case 3, SSI disability criteria qualify a dependent. period: 2024 @@ -67,7 +67,7 @@ members: [person1, person2] state_code: CA output: - ca_state_supplement_dependent_amount: 5_988 + ca_state_supplement_dependent_amount: 12_420 # (943 + 92) * 12 - name: Case 4, disabled noncitizen child who fails SSI's noncitizen test gets CAPI, not the state supplement. period: 2026-01 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_out_of_home_care_facility_amount.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_out_of_home_care_facility_amount.yaml index e5776e8e252..5c6fdf4e4c2 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_out_of_home_care_facility_amount.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_out_of_home_care_facility_amount.yaml @@ -16,7 +16,7 @@ members: [person1, person2] state_code: CA output: - ca_state_supplement_out_of_home_care_facility_amount: 8_508 + ca_state_supplement_out_of_home_care_facility_amount: 6_216 # (2 * (943 + 302) - (1,415 + 557)) * 12 - name: Nobody in out of home care facility period: 2024 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/integration.yaml index fc6eaa221c2..d202e2a2cf2 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/integration.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/integration.yaml @@ -17,7 +17,8 @@ members: [person1, person2] state_code: CA output: - ca_state_supplement_payment_standard: 8_448 + # (943 + 297) * 12; the 297 share dates from 1991 (issue 10480). + ca_state_supplement_payment_standard: 14_880 - name: Married household with one blind and one disabled person, with a disabled dependent child, no food preparation and spouse in out of home care period: 2024-01 @@ -49,10 +50,12 @@ living_arrangements_allow_for_food_preparation: false output: # Both spouses are aged, so the couple takes the higher of the one-blind - # rate, 1,295, and the aged couple amount with the food allowance, 1,167 - # + 136 = 1,303 (WIC 12200(b), (d), (e)). With the 499 dependent amount - # and the 709 out-of-home care amount: 1,303 + 499 + 709 = 2,511. - ca_state_supplement_payment_standard: 2_511 + # rate, 1,415 + 685 = 2,100, and the aged couple amount with the food + # allowance, 1,415 + 557 + 136 = 2,108 (WIC 12200(b), (d), (e)). The + # dependent amount is 943 + 92 = 1,035 and the out-of-home care amount is + # 2 * (943 + 302) - (1,415 + 557) = 518. The shares date from 1991 (issue + # 10480): 2,108 + 1,035 + 518 = 3,661. + ca_state_supplement_payment_standard: 3_661 - name: Case A ,single disabled parent with non eligible dependent child. period: 2025-01 diff --git a/policyengine_us/variables/gov/states/ca/cdss/capi/_ca_capi_ssi_ssp_standard.py b/policyengine_us/variables/gov/states/ca/cdss/capi/_ca_capi_ssi_ssp_standard.py index 41408ff9b62..acb10c1178f 100644 --- a/policyengine_us/variables/gov/states/ca/cdss/capi/_ca_capi_ssi_ssp_standard.py +++ b/policyengine_us/variables/gov/states/ca/cdss/capi/_ca_capi_ssi_ssp_standard.py @@ -80,11 +80,11 @@ def ca_capi_ssi_ssp_standard(person, period, parameters): ) medical_facility = ca_capi_in_title_xix_facility(person, period) out_of_home_care = person("in_out_of_home_care_facility", period.this_year) - out_of_home_care_share = ( - p.aged_or_disabled.amount.married + p.allowance.out_of_home_care - ) / 2 + # The parameters hold California's share on top of the federal amount. + medical_facility_total = fbr.medical_facility + p.allowance.medical_care_facility + out_of_home_care_total = fbr.individual + p.allowance.out_of_home_care - community_individual = max_( + community_individual = fbr.individual + max_( blind * p.blind.single, aged_or_disabled * where( @@ -102,38 +102,25 @@ def ca_capi_ssi_ssp_standard(person, period, parameters): two_blind = (blind_count > 1) * p.blind.married.two_blind one_blind = (blind_count == 1) * p.blind.married.one_blind # NOTE: a couple with one aged or disabled member always has a blind - # member, whose rate is higher, so the second branch is only a guard. - aged_or_disabled_couple = select( - [aged_or_disabled_count > 1, aged_or_disabled_count == 1], - [ - p.aged_or_disabled.amount.married + no_cooking * p.allowance.food.married, - p.aged_or_disabled.amount.single + no_cooking * p.allowance.food.single, - ], - default=0, + # member, whose rate is higher, so only two count here. + aged_or_disabled_couple = (aged_or_disabled_count > 1) * ( + p.aged_or_disabled.amount.married + no_cooking * p.allowance.food.married + ) + community_couple = fbr.couple + max_( + max_(two_blind, one_blind), aged_or_disabled_couple ) - community_couple = max_(max_(two_blind, one_blind), aged_or_disabled_couple) - # Stopgap: the state supplement amounts hold 1991 totals until 2025, - # below the federal benefit rate from 2008, so the independent-living and - # out-of-home care standards are floored at that rate (SSI alone pays at - # least it, and CAPI equals SSI/SSP under WIC 18941). This still leaves - # out the whole state supplement before 2025; issue 10480 backfills the - # totals and removes the floor. + # NOTE: the state shares before 2025 are the 1991 totals in WIC 12200 less + # the 1991 federal rates (issue 10480). individual = select( [medical_facility, out_of_home_care], - [ - p.allowance.medical_care_facility, - max_(out_of_home_care_share, fbr.individual), - ], - default=max_(community_individual, fbr.individual), + [medical_facility_total, out_of_home_care_total], + default=community_individual, ) couple_share = select( [medical_facility, out_of_home_care], - [ - p.allowance.medical_care_facility, - max_(out_of_home_care_share, fbr.couple / 2), - ], - default=max_(community_couple / 2, fbr.couple / 2), + [medical_facility_total, out_of_home_care_total], + default=community_couple / 2, ) couple = where(joint, person.marital_unit.sum(couple_share), 2 * couple_share) return individual, couple diff --git a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_aged_disabled_amount.py b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_aged_disabled_amount.py index 05327b9dc4a..b5666e4efbb 100644 --- a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_aged_disabled_amount.py +++ b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_aged_disabled_amount.py @@ -14,12 +14,13 @@ def formula(spm_unit, period, parameters): p = parameters( period ).gov.states.ca.cdss.state_supplement.payment_standard.aged_or_disabled.amount + fbr = parameters(period).gov.ssa.ssi.amount # Aged or disabled amount aged_disabled_count = spm_unit( "ca_state_supplement_aged_disabled_count", period ) return select( [aged_disabled_count > 1, aged_disabled_count == 1], - [p.married, p.single], + [fbr.couple + p.married, fbr.individual + p.single], default=0, ) diff --git a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_blind_amount.py b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_blind_amount.py index 5a0980bcc7d..780f37186cc 100644 --- a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_blind_amount.py +++ b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_blind_amount.py @@ -12,6 +12,7 @@ class ca_state_supplement_blind_amount(Variable): def formula(spm_unit, period, parameters): p = parameters(period).gov.states.ca.cdss.state_supplement.payment_standard + fbr = parameters(period).gov.ssa.ssi.amount person = spm_unit.members head_or_spouse = person("is_tax_unit_head_or_spouse", period) # Blind amount @@ -21,10 +22,13 @@ def formula(spm_unit, period, parameters): is_married = spm_unit("spm_unit_is_married", period) blind_married_amount = select( [blind_count >= 2, blind_count == 1], - [p.blind.married.two_blind, p.blind.married.one_blind], + [ + fbr.couple + p.blind.married.two_blind, + fbr.couple + p.blind.married.one_blind, + ], default=0, ) total_amount_if_eligible = where( - is_married, blind_married_amount, p.blind.single + is_married, blind_married_amount, fbr.individual + p.blind.single ) return where(blind_count == 0, 0, total_amount_if_eligible) diff --git a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_dependent_amount.py b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_dependent_amount.py index aa37b9ab887..e8567b497dd 100644 --- a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_dependent_amount.py +++ b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_dependent_amount.py @@ -12,6 +12,7 @@ class ca_state_supplement_dependent_amount(Variable): def formula(spm_unit, period, parameters): p = parameters(period).gov.states.ca.cdss.state_supplement.payment_standard + fbr = parameters(period).gov.ssa.ssi.amount person = spm_unit.members # Blind amount blind = person("is_blind", period) @@ -33,4 +34,4 @@ def formula(spm_unit, period, parameters): dependent_count = spm_unit.sum( dependent & dependent_age_eligible & (is_ssi_disabled | blind) & eligible ) - return dependent_count * p.dependent.amount + return dependent_count * (fbr.individual + p.dependent.amount) diff --git a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_medical_care_facility_amount.py b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_medical_care_facility_amount.py index 7f3943e31c4..3cf38b11706 100644 --- a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_medical_care_facility_amount.py +++ b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_medical_care_facility_amount.py @@ -12,9 +12,12 @@ class ca_state_supplement_medical_care_facility_amount(Variable): def formula(spm_unit, period, parameters): p = parameters(period).gov.states.ca.cdss.state_supplement.payment_standard + fbr = parameters(period).gov.ssa.ssi.amount # Medical care facility amount person = spm_unit.members eligible = person("ca_state_supplement_eligible_person", period) in_medical_care_facility = person("ca_in_medical_care_facility", period) medical_care_facility_count = spm_unit.sum(in_medical_care_facility * eligible) - return medical_care_facility_count * p.allowance.medical_care_facility + return medical_care_facility_count * ( + fbr.medical_facility + p.allowance.medical_care_facility + ) diff --git a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_out_of_home_care_facility_amount.py b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_out_of_home_care_facility_amount.py index ede509980e9..728a40ba079 100644 --- a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_out_of_home_care_facility_amount.py +++ b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_out_of_home_care_facility_amount.py @@ -12,10 +12,16 @@ class ca_state_supplement_out_of_home_care_facility_amount(Variable): def formula(spm_unit, period, parameters): p = parameters(period).gov.states.ca.cdss.state_supplement.payment_standard + fbr = parameters(period).gov.ssa.ssi.amount person = spm_unit.members eligible = person("ca_state_supplement_eligible_person", period) in_out_of_home_care_facility = person("in_out_of_home_care_facility", period) out_of_home_care_facility_count = spm_unit.sum( in_out_of_home_care_facility * eligible ) - return out_of_home_care_facility_count * p.allowance.out_of_home_care + # The couple out-of-home care total is twice the individual total, and + # this amount is what it adds to the aged or disabled couple total. + individual_total = fbr.individual + p.allowance.out_of_home_care + aged_or_disabled_couple_total = fbr.couple + p.aged_or_disabled.amount.married + allowance = 2 * individual_total - aged_or_disabled_couple_total + return out_of_home_care_facility_count * allowance diff --git a/policyengine_us/variables/gov/states/ca/chhs/wdp/eligibility/ca_wdp_ssi_ssp_income_eligible.py b/policyengine_us/variables/gov/states/ca/chhs/wdp/eligibility/ca_wdp_ssi_ssp_income_eligible.py index d7fb59b6bf2..8b048ca054d 100644 --- a/policyengine_us/variables/gov/states/ca/chhs/wdp/eligibility/ca_wdp_ssi_ssp_income_eligible.py +++ b/policyengine_us/variables/gov/states/ca/chhs/wdp/eligibility/ca_wdp_ssi_ssp_income_eligible.py @@ -36,12 +36,13 @@ def formula(person, period, parameters): p = parameters( period.first_month ).gov.states.ca.cdss.state_supplement.payment_standard + fbr = parameters(period.first_month).gov.ssa.ssi.amount uses_couple_standard = person("ssi_claim_is_joint", period) | person( "is_ssi_spousal_deeming_applies", period ) monthly_standard = where( uses_couple_standard, - p.aged_or_disabled.amount.married, - p.aged_or_disabled.amount.single, + fbr.couple + p.aged_or_disabled.amount.married, + fbr.individual + p.aged_or_disabled.amount.single, ) return countable_unearned_income < monthly_standard * MONTHS_IN_YEAR From cc3ba1aea0b4f60a16168bd6054a913d2c33f612 Mon Sep 17 00:00:00 2001 From: Ziming Date: Mon, 2 Nov 2026 11:27:59 -0500 Subject: [PATCH 2/6] Compute the California state supplement per person WIC 12200 sets one standard for each recipient or married couple, but the model added amounts across the SPM unit. Each person now takes one state share by living arrangement through the shared SSI supplement helper, and ca_state_supplement adds up the person-level amounts. This stops facility residents getting stacked amounts and pays blind children, adult dependents, children in facilities and unrelated people in one SPM unit the right levels. Co-Authored-By: Claude Opus 5.5 --- .../ca-ssp-person-level-amounts.fixed.md | 1 + .../income/sources/unearned.yaml | 2 +- .../usda/snap/income/sources/unearned.yaml | 6 +- .../income/sources/unearned_spm_unit.yaml | 8 - policyengine_us/programs.yaml | 2 +- ...relief_receives_other_cash_assistance.yaml | 13 +- ...a_sbd_general_relief_countable_income.yaml | 17 +- .../ca/sbd/general_relief/integration.yaml | 24 +- .../gov/states/ca/cdss/capi/ca_capi.yaml | 4 - .../states/ca/cdss/capi/ca_capi_person.yaml | 10 +- .../state_supplement/ca_state_supplement.yaml | 42 +- ...supplement_aged_blind_disabled_amount.yaml | 17 - ...state_supplement_aged_disabled_amount.yaml | 71 -- ..._state_supplement_aged_disabled_count.yaml | 96 --- .../ca_state_supplement_blind_amount.yaml | 25 - .../ca_state_supplement_dependent_amount.yaml | 150 ---- .../ca_state_supplement_eligible_person.yaml | 39 + .../ca_state_supplement_food_allowance.yaml | 259 ------ ...te_supplement_food_allowance_eligible.yaml | 156 ---- ...pplement_medical_care_facility_amount.yaml | 79 -- ...ment_out_of_home_care_facility_amount.yaml | 79 -- .../ca_state_supplement_person.yaml | 750 ++++++++++++++++++ .../ca/cdss/state_supplement/integration.yaml | 316 ++------ ...unearned_income_state_ssi_supplements.yaml | 4 +- ...snap_child_support_treatment_invariants.py | 1 - ...l_relief_receives_other_cash_assistance.py | 16 +- .../ca/cdss/capi/_ca_capi_ssi_ssp_standard.py | 113 +-- .../gov/states/ca/cdss/capi/ca_capi_person.py | 6 +- .../_ca_state_supplement_rates.py | 103 +++ .../state_supplement/ca_state_supplement.py | 85 +- .../ca_state_supplement_eligible_person.py | 17 +- .../ca_state_supplement_person.py | 102 +++ ...e_supplement_aged_blind_disabled_amount.py | 18 - ...a_state_supplement_aged_disabled_amount.py | 26 - ...ca_state_supplement_aged_disabled_count.py | 21 - .../ca_state_supplement_blind_amount.py | 34 - .../ca_state_supplement_dependent_amount.py | 37 - .../ca_state_supplement_food_allowance.py | 49 -- ...tate_supplement_food_allowance_eligible.py | 21 - ...supplement_medical_care_facility_amount.py | 23 - ...lement_out_of_home_care_facility_amount.py | 27 - .../ca_state_supplement_payment_standard.py | 19 - 42 files changed, 1144 insertions(+), 1744 deletions(-) create mode 100644 changelog.d/ca-ssp-person-level-amounts.fixed.md delete mode 100644 policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_aged_blind_disabled_amount.yaml delete mode 100644 policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_aged_disabled_amount.yaml delete mode 100644 policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_aged_disabled_count.yaml delete mode 100644 policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_blind_amount.yaml delete mode 100644 policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_dependent_amount.yaml delete mode 100644 policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_food_allowance.yaml delete mode 100644 policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_food_allowance_eligible.yaml delete mode 100644 policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_medical_care_facility_amount.yaml delete mode 100644 policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_out_of_home_care_facility_amount.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_person.yaml create mode 100644 policyengine_us/variables/gov/states/ca/cdss/state_supplement/_ca_state_supplement_rates.py create mode 100644 policyengine_us/variables/gov/states/ca/cdss/state_supplement/ca_state_supplement_person.py delete mode 100644 policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_aged_blind_disabled_amount.py delete mode 100644 policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_aged_disabled_amount.py delete mode 100644 policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_aged_disabled_count.py delete mode 100644 policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_blind_amount.py delete mode 100644 policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_dependent_amount.py delete mode 100644 policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_food_allowance.py delete mode 100644 policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_food_allowance_eligible.py delete mode 100644 policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_medical_care_facility_amount.py delete mode 100644 policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_out_of_home_care_facility_amount.py delete mode 100644 policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_payment_standard.py diff --git a/changelog.d/ca-ssp-person-level-amounts.fixed.md b/changelog.d/ca-ssp-person-level-amounts.fixed.md new file mode 100644 index 00000000000..7a690155d7c --- /dev/null +++ b/changelog.d/ca-ssp-person-level-amounts.fixed.md @@ -0,0 +1 @@ +Compute the California state supplement per person with one standard for each living arrangement, which stops facility residents getting stacked amounts and pays blind children, adult dependents, children in facilities and unrelated people sharing an SPM unit the right levels. diff --git a/policyengine_us/parameters/gov/local/ca/sbd/general_relief/income/sources/unearned.yaml b/policyengine_us/parameters/gov/local/ca/sbd/general_relief/income/sources/unearned.yaml index c97d5469501..b944dc07b32 100644 --- a/policyengine_us/parameters/gov/local/ca/sbd/general_relief/income/sources/unearned.yaml +++ b/policyengine_us/parameters/gov/local/ca/sbd/general_relief/income/sources/unearned.yaml @@ -49,7 +49,7 @@ values: # other program's budget covers the recipient, so neither their SSI # nor their other income is charged to the AU. SSP # (ca_state_supplement) and CAPI (ca_capi) recipients are barred the - # same way, so those unit-level benefits never enter AU income either. + # same way, so those benefits never enter AU income either. - ssi metadata: diff --git a/policyengine_us/parameters/gov/usda/snap/income/sources/unearned.yaml b/policyengine_us/parameters/gov/usda/snap/income/sources/unearned.yaml index bd733f830c1..ba253b611bc 100644 --- a/policyengine_us/parameters/gov/usda/snap/income/sources/unearned.yaml +++ b/policyengine_us/parameters/gov/usda/snap/income/sources/unearned.yaml @@ -21,6 +21,8 @@ values: # facility on the recipient's behalf. - ak_ssp - al_ssp + # ca_state_supplement only adds up this person-level variable. + - ca_state_supplement_person # co_oap has an annual definition period; policyengine-core's # calculate_divide converts it to a monthly amount here. - co_oap @@ -74,10 +76,6 @@ values: # special need payments (or_ssp) from SNAP income as reimbursements. Its # nursing facility payment goes to institution residents, who are not SNAP # households under 7 CFR 273.1(b)(7)(vi). - # Listed elsewhere: ca_state_supplement is an SPM unit variable with no - # person-level counterpart. policyengine-core projects a group value onto - # every member, so listing it here would count it once per person in the - # SPM unit. It is listed in unearned_spm_unit.yaml instead. # (ii) - pension_income # Includes annuities. - veterans_benefits diff --git a/policyengine_us/parameters/gov/usda/snap/income/sources/unearned_spm_unit.yaml b/policyengine_us/parameters/gov/usda/snap/income/sources/unearned_spm_unit.yaml index ccee01cc293..bba0008edf8 100644 --- a/policyengine_us/parameters/gov/usda/snap/income/sources/unearned_spm_unit.yaml +++ b/policyengine_us/parameters/gov/usda/snap/income/sources/unearned_spm_unit.yaml @@ -5,16 +5,8 @@ values: # (i) Unit-level assistance payments are counted in full since they # cannot be attributed to an individual ineligible member. - tanf - # (i) California's SSI state supplement is an SPM unit variable with no - # person-level counterpart, so it is counted here rather than in - # unearned.yaml. 273.9(b)(2)(i) counts assistance payments from federally - # aided public assistance programs such as SSI, and Welfare and - # Institutions Code 12200 pays the supplement to the recipient. - - ca_state_supplement metadata: reference: - title: 7 CFR 273.9(b)(2) href: https://www.law.cornell.edu/cfr/text/7/273.9#b_2 - - title: California Welfare and Institutions Code 12200 - href: https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12200 diff --git a/policyengine_us/programs.yaml b/policyengine_us/programs.yaml index c1bc9f0b631..369a54e07c8 100644 --- a/policyengine_us/programs.yaml +++ b/policyengine_us/programs.yaml @@ -1354,7 +1354,7 @@ programs: variable: ca_state_supplement parameter_prefix: gov.states.ca.cdss.state_supplement verified_years: "2025-2026" - notes: Payment standards verified for independent living, no cooking facilities, blind and disabled minor categories. Facility and household-of-another arrangements are not verified (issue 7892). + notes: Payment standards verified for every POMS SI 01415.058 category except the household-of-another levels, which are not modeled (issue 7892). - state: CT status: complete name: Connecticut SSP diff --git a/policyengine_us/tests/policy/baseline/gov/local/ca/sbd/general_relief/eligibility/ca_sbd_general_relief_receives_other_cash_assistance.yaml b/policyengine_us/tests/policy/baseline/gov/local/ca/sbd/general_relief/eligibility/ca_sbd_general_relief_receives_other_cash_assistance.yaml index 5b4d7a1a12a..7beb2efc10e 100644 --- a/policyengine_us/tests/policy/baseline/gov/local/ca/sbd/general_relief/eligibility/ca_sbd_general_relief_receives_other_cash_assistance.yaml +++ b/policyengine_us/tests/policy/baseline/gov/local/ca/sbd/general_relief/eligibility/ca_sbd_general_relief_receives_other_cash_assistance.yaml @@ -105,11 +105,11 @@ person1: age: 68 ssi: 0 + # An SSP-only case: a positive state supplement with no federal SSI. + ca_state_supplement_person: 200 spm_units: spm_unit: members: [person1] - # An SSP-only case: a positive state supplement with no federal SSI. - ca_state_supplement: 200 tanf: 0 households: household: @@ -139,8 +139,6 @@ members: [person1] # $2,400 per year is $200 per month of CAPI. ca_capi: 2_400 - # Pin the CA state supplement off so only CAPI is in play. - ca_state_supplement: 0 tanf: 0 households: household: @@ -164,9 +162,6 @@ spm_units: spm_unit: members: [person1] - # A positive computed supplement that is never actually received, - # since the SSI/SSP payment is not taken up. - ca_state_supplement: 200 tanf: 0 households: household: @@ -174,6 +169,6 @@ in_sbd: true state_code: CA output: - # ca_state_supplement is an ungated computed entitlement; with take-up - # declined no SSP check arrives, so the bar lifts like the ssi arm. + # The supplement follows SSI take-up, so with take-up declined no SSP check + # arrives and the bar lifts like the ssi arm. ca_sbd_general_relief_receives_other_cash_assistance: false diff --git a/policyengine_us/tests/policy/baseline/gov/local/ca/sbd/general_relief/income/ca_sbd_general_relief_countable_income.yaml b/policyengine_us/tests/policy/baseline/gov/local/ca/sbd/general_relief/income/ca_sbd_general_relief_countable_income.yaml index fbf28cc4a02..5ce4e5ce0b9 100644 --- a/policyengine_us/tests/policy/baseline/gov/local/ca/sbd/general_relief/income/ca_sbd_general_relief_countable_income.yaml +++ b/policyengine_us/tests/policy/baseline/gov/local/ca/sbd/general_relief/income/ca_sbd_general_relief_countable_income.yaml @@ -72,13 +72,12 @@ age: 65 social_security: 3_600 ssi: 0 + # Pin the CA state supplement off: state_code defaults to CA, so it + # would otherwise self-compute for the aged member and bar them. + ca_state_supplement_person: 0 spm_units: spm_unit: members: [person1] - # Pin the CA state supplement off: state_code defaults to CA, so it - # would otherwise self-compute for the aged member and count as - # unit income. - ca_state_supplement: 0 households: household: members: [person1] @@ -167,11 +166,11 @@ self_employment_income: -12_000 social_security: 3_600 ssi: 0 + # Pin the CA state supplement off (see Case 4). + ca_state_supplement_person: 0 spm_units: spm_unit: members: [person1] - # Pin the CA state supplement off (see Case 4). - ca_state_supplement: 0 households: household: members: [person1] @@ -251,8 +250,6 @@ members: [person1] # $2,400 per year is $200 per month of CAPI. ca_capi: 2_400 - # Pin the CA state supplement off (see Case 4). - ca_state_supplement: 0 households: household: members: [person1] @@ -270,11 +267,11 @@ person1: age: 68 ssi: 0 + # $200 per month of state supplement (an SSP-only case). + ca_state_supplement_person: 200 spm_units: spm_unit: members: [person1] - # $200 per month of state supplement (an SSP-only case). - ca_state_supplement: 200 households: household: members: [person1] diff --git a/policyengine_us/tests/policy/baseline/gov/local/ca/sbd/general_relief/integration.yaml b/policyengine_us/tests/policy/baseline/gov/local/ca/sbd/general_relief/integration.yaml index c2fc70ad4f4..b3073989bd0 100644 --- a/policyengine_us/tests/policy/baseline/gov/local/ca/sbd/general_relief/integration.yaml +++ b/policyengine_us/tests/policy/baseline/gov/local/ca/sbd/general_relief/integration.yaml @@ -118,14 +118,14 @@ # $5,400 per year is $450 per month of Social Security. social_security: 5_400 ssi: 0 + # Pin the CA state supplement off: state_code defaults to CA, so it + # would otherwise self-compute for the aged member and bar them, + # excluding their income and leaving an empty unit. + ca_state_supplement_person: 0 spm_units: spm_unit: members: [person1] tanf: 0 - # Pin the CA state supplement off: state_code defaults to CA, so it - # would otherwise self-compute for the aged member and bar them, - # excluding their income and leaving an empty unit. - ca_state_supplement: 0 households: household: members: [person1] @@ -148,12 +148,12 @@ age: 65 social_security: 5_400 ssi: 0 + # Pin the CA state supplement off (see Case 4). + ca_state_supplement_person: 0 spm_units: spm_unit: members: [person1] tanf: 0 - # Pin the CA state supplement off (see Case 4). - ca_state_supplement: 0 households: household: members: [person1] @@ -376,6 +376,9 @@ person2: age: 68 ssi: 0 + # $200 per month of state supplement with no federal SSI (an + # SSP-only case). + ca_state_supplement_person: 200 tax_units: tax_unit1: members: [person1] @@ -384,9 +387,6 @@ spm_units: spm_unit: members: [person1, person2] - # $200 per month of state supplement with no federal SSI (an - # SSP-only case). - ca_state_supplement: 200 tanf: 0 households: household: @@ -395,8 +395,8 @@ state_code: CA output: # The aged SSP recipient is barred like an SSI recipient, and a barred - # member's income — including the unit-level supplement that serves - # them — is excluded from AU income entirely. + # member's income, including the supplement that serves them, is excluded + # from AU income entirely. ca_sbd_general_relief_receives_other_cash_assistance: [false, true] ca_sbd_general_relief_eligible_person: [true, false] ca_sbd_general_relief_assistance_unit_size: 1 @@ -466,8 +466,6 @@ members: [person1, person2] # $2,400 per year is $200 per month of CAPI. ca_capi: 2_400 - # Pin the CA state supplement off so only CAPI is in play. - ca_state_supplement: 0 tanf: 0 households: household: diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/ca_capi.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/ca_capi.yaml index 80c8606bc02..76c0967f8f0 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/ca_capi.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/ca_capi.yaml @@ -85,7 +85,6 @@ state_code: CA output: ssi: [11_316, 0] - ca_state_supplement_dependent_amount: 0 # 223 * 12, using the 1991 share (issue 10480). ca_state_supplement: 2_676 ca_capi: 0 @@ -112,9 +111,6 @@ output: ssi: [0, 0] ca_state_supplement_eligible_person: [false, false] - ca_state_supplement_aged_disabled_count: 0 - ca_state_supplement_blind_amount: 0 - ca_state_supplement_aged_blind_disabled_amount: 0 ca_state_supplement: 0 # Disabled individual standard 1,233.94 per month with no offset. Living # arrangements allow food preparation by default, so no no-cooking food diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/ca_capi_person.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/ca_capi_person.yaml index df21eae046a..9a78c81f58c 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/ca_capi_person.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/ca_capi_person.yaml @@ -194,6 +194,7 @@ # being reworked separately. ssi: 994 ssi_countable_income: 0 + ca_state_supplement_person: 239.94 person2: age: 68 immigration_status: LEGAL_PERMANENT_RESIDENT @@ -208,10 +209,6 @@ marital_units: marital_unit: members: [person1, person2] - spm_units: - spm_unit: - members: [person1, person2] - ca_state_supplement: 239.94 households: household: members: [person1, person2] @@ -371,6 +368,7 @@ pension_income: 5_040 ssi: 594 ssi_countable_income: 4_800 + ca_state_supplement_person: 239.94 person2: age: 68 immigration_status: LEGAL_PERMANENT_RESIDENT @@ -379,10 +377,6 @@ marital_units: marital_unit: members: [person1, person2] - spm_units: - spm_unit: - members: [person1, person2] - ca_state_supplement: 239.94 households: household: members: [person1, person2] diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement.yaml index ac94346a23d..623a3bd791e 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement.yaml @@ -1,21 +1,3 @@ -- name: Payment standard fully reduced - period: 2024 - input: - ssi: 1_200 - ca_state_supplement_payment_standard: 1_000 - state_code: CA - output: - ca_state_supplement: 0 - -- name: Payment standard partially reduced - period: 2024 - input: - ssi: 1_200 - ca_state_supplement_payment_standard: 2_000 - state_code: CA - output: - ca_state_supplement: 800 - - name: Case 3, disabled SSI recipient receives state supplement. period: 2024 absolute_error_margin: 0.01 @@ -38,8 +20,8 @@ living_arrangements_allow_for_food_preparation: true output: ca_state_supplement_eligible_person: true - # (943 + 223) * 12 - 3,458.28; the 223 share dates from 1991 (issue 10480). - ca_state_supplement: 10_533.72 + # 223 * 12; the share dates from 1991 (issue 10480). + ca_state_supplement: 2_676 # 2026: federal SSI is $994 (individual) and $1,491 (couple); the California # payment standard is $1,233.94 (individual) and $2,098.83 (couple), per CDSS, @@ -63,7 +45,6 @@ living_arrangements_allow_for_food_preparation: true output: ssi: 11_928 # 994 * 12 - ca_state_supplement_payment_standard: 14_807.28 # 1,233.94 * 12 ca_state_supplement: 2_879.28 # (1,233.94 - 994) * 12 - name: Case 5, 2026 aged couple living independently with no income. @@ -95,8 +76,9 @@ living_arrangements_allow_for_food_preparation: true output: ssi: [8_946, 8_946] # 1,491 * 12 / 2 - ca_state_supplement_payment_standard: 25_185.96 # 2,098.83 * 12 - ca_state_supplement: 7_293.96 # (2,098.83 - 1,491) * 12 + # (2,098.83 - 1,491) / 2 = 303.915 each, which federal administration + # rounds up to 303.92, or 3,647.04 a year each. + ca_state_supplement: 7_294.08 - name: Case 6, 2026 aged individual with Social Security below the federal benefit rate. period: 2026 @@ -253,8 +235,6 @@ # 995 and 1,362.81 a month. SSI is 994 - 993 = 1 a month for person1 and 0 # for the rest. ssi: [12, 0, 0, 0, 0, 0] - ca_state_supplement_payment_standard: - [14_807.28, 14_807.28, 14_807.28, 14_807.28, 16_353.72, 16_353.72] # The supplement is the standard less SSI and countable income: # 1,233.94 - 1 - 993 = 239.94; 1,233.94 - 994 = 239.94; 1,233.94 - 995 = # 238.94; 1,233.94 - 1,233.94 = 0; 1,362.81 - 995 = 367.81; @@ -351,11 +331,11 @@ # a month, each at or above the 1,491 couple federal benefit rate, so SSI # is 0. ssi: [0, 0, 0, 0, 0, 0, 0, 0] - ca_state_supplement_payment_standard: [25_185.96, 25_185.96, 28_278.84, 28_278.84] # The supplement is the standard less countable income: - # 2,098.83 - 1,491 = 607.83; 2,098.83 - 2,098.83 = 0; - # 2,356.57 - 2,098.83 = 257.74; 2,356.57 - 2,356.57 = 0. - ca_state_supplement: [7_293.96, 0, 3_092.88, 0] + # 2,098.83 - 1,491 = 607.83, half rounded up to 303.92 for each spouse; + # 2,098.83 - 2,098.83 = 0; 2,356.57 - 2,098.83 = 257.74; 2,356.57 - 2,356.57 + # = 0. + ca_state_supplement: [7_294.08, 0, 3_092.88, 0] # A CAPI-eligible member's income does not reduce the state supplement: CAPI # budgets its own members' income (CAPI regulations MPP 49-035), and SSI/SSP @@ -407,7 +387,6 @@ ssi: [5_844, 0] # 487 * 12 # One eligible aged member without cooking facilities, so the standard is # 1,206.94 + 128.87 = 1,335.81. - ca_state_supplement_payment_standard: 16_029.72 # 1,335.81 * 12 # The supplement is 1,335.81 - 487 - 480 = 368.81 a month; person2's 480 # is not counted. ca_state_supplement: 4_425.72 # 368.81 * 12 @@ -464,7 +443,6 @@ ssi: [2_820, 0] # 235 * 12 # One eligible aged member without cooking facilities, so the standard is # 1,206.94 + 128.87 = 1,335.81. - ca_state_supplement_payment_standard: 16_029.72 # 1,335.81 * 12 # The supplement counts the citizen's own 500 - 20 = 480: # 1,335.81 - 235 - 480 = 620.81 a month. ca_state_supplement: 7_449.72 # 620.81 * 12 @@ -508,7 +486,6 @@ # 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. @@ -681,6 +658,5 @@ living_arrangements_allow_for_food_preparation: true output: ssi: 12_348 # 1,029 * 12 - ca_state_supplement_payment_standard: 15_227.28 # (1,029 + 239.94) * 12 # CDSS projects the 239.94 share for January 2027 (2026 May Revision, page 27). ca_state_supplement: 2_879.28 # 239.94 * 12 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_aged_blind_disabled_amount.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_aged_blind_disabled_amount.yaml deleted file mode 100644 index 2f69bb37f6b..00000000000 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_aged_blind_disabled_amount.yaml +++ /dev/null @@ -1,17 +0,0 @@ -- name: Aged disabled amount greater than blind amount - period: 2024 - input: - ca_state_supplement_blind_amount: 1_000 - ca_state_supplement_aged_disabled_amount: 2_000 - state_code: CA - output: - ca_state_supplement_aged_blind_disabled_amount: 2_000 - -- name: Aged disabled amount smaller than blind amount - period: 2024 - input: - ca_state_supplement_blind_amount: 1_800 - ca_state_supplement_aged_disabled_amount: 1_000 - state_code: CA - output: - ca_state_supplement_aged_blind_disabled_amount: 1_800 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_aged_disabled_amount.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_aged_disabled_amount.yaml deleted file mode 100644 index 780bb774806..00000000000 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_aged_disabled_amount.yaml +++ /dev/null @@ -1,71 +0,0 @@ -- name: Single aged parent, blind - period: 2024 - input: - people: - person1: - age: 68 - is_tax_unit_head: true - person2: - age: 4 - is_tax_unit_dependent: true - spm_units: - spm_unit: - members: [person1, person2] - spm_unit_is_married: false - households: - household: - members: [person1, person2] - state_code: CA - output: - ca_state_supplement_aged_disabled_amount: 13_992 # (943 + 223) * 12 - -- name: Married couple, aged and disabled - period: 2024 - input: - people: - person1: - age: 68 - is_tax_unit_head: true - person2: - age: 64 - is_tax_unit_spouse: true - is_disabled: true - meets_ssi_disability_criteria: true - person3: - age: 4 - is_tax_unit_dependent: true - is_blind: true - spm_units: - spm_unit: - members: [person1, person2, person3] - spm_unit_is_married: true - households: - household: - members: [person1, person2, person3] - state_code: CA - output: - ca_state_supplement_aged_disabled_amount: 23_664 # (1,415 + 557) * 12 - -- name: Married couple, only one aged and disabled - period: 2024 - input: - people: - person1: - age: 68 - is_tax_unit_head: true - person2: - age: 64 - is_tax_unit_spouse: true - person3: - age: 4 - is_tax_unit_dependent: true - spm_units: - spm_unit: - members: [person1, person2, person3] - spm_unit_is_married: true - households: - household: - members: [person1, person2, person3] - state_code: CA - output: - ca_state_supplement_aged_disabled_amount: 13_992 # (943 + 223) * 12 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_aged_disabled_count.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_aged_disabled_count.yaml deleted file mode 100644 index 661e94c67e9..00000000000 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_aged_disabled_count.yaml +++ /dev/null @@ -1,96 +0,0 @@ -- name: Two aged and disabled people - period: 2024 - input: - people: - person1: - age: 68 - is_tax_unit_head: true - is_disabled: false - person2: - age: 64 - is_tax_unit_spouse: true - is_disabled: true - meets_ssi_disability_criteria: true - person3: - age: 4 - is_tax_unit_dependent: true - spm_units: - spm_unit: - members: [person1, person2, person3] - households: - household: - members: [person1, person2, person3] - state_code: CA - output: - ca_state_supplement_aged_disabled_count: 2 - -- name: One aged and disabled person - period: 2024 - input: - people: - person1: - age: 68 - is_tax_unit_head: true - is_disabled: false - person2: - age: 64 - is_tax_unit_spouse: false - is_disabled: false - person3: - age: 4 - is_tax_unit_dependent: true - spm_units: - spm_unit: - members: [person1, person2, person3] - households: - household: - members: [person1, person2, person3] - state_code: CA - output: - ca_state_supplement_aged_disabled_count: 1 - -- name: No aged or disabled head or spouse - period: 2024 - input: - people: - person1: - age: 60 - is_tax_unit_head: true - is_disabled: false - person2: - age: 64 - is_tax_unit_spouse: false - is_disabled: false - person3: - age: 4 - is_tax_unit_dependent: true - is_disabled: true - meets_ssi_disability_criteria: true - spm_units: - spm_unit: - members: [person1, person2, person3] - households: - household: - members: [person1, person2, person3] - state_code: CA - output: - ca_state_supplement_aged_disabled_count: 0 - -- name: Case 4, SSI disability criteria count as disabled. - period: 2024 - input: - people: - person1: - age: 45 - is_tax_unit_head: true - meets_ssi_disability_criteria: true - ssi_engaged_in_sga: false - spm_units: - spm_unit: - members: [person1] - households: - household: - members: [person1] - state_code: CA - output: - ca_state_supplement_aged_disabled_count: 1 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_blind_amount.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_blind_amount.yaml deleted file mode 100644 index 6ef18226143..00000000000 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_blind_amount.yaml +++ /dev/null @@ -1,25 +0,0 @@ -- name: Married couple, one blind - period: 2024 - input: - people: - person1: - age: 68 - is_tax_unit_head: true - is_blind: true - person2: - age: 64 - is_tax_unit_spouse: true - is_blind: true - person3: - age: 4 - is_tax_unit_dependent: true - spm_units: - spm_unit: - members: [person1, person2, person3] - spm_unit_is_married: true - households: - household: - members: [person1, person2, person3] - state_code: CA - output: - ca_state_supplement_blind_amount: 26_124 # (1,415 + 762) * 12 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_dependent_amount.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_dependent_amount.yaml deleted file mode 100644 index 7937d649eab..00000000000 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_dependent_amount.yaml +++ /dev/null @@ -1,150 +0,0 @@ -- name: One eligible dependent - period: 2024 - input: - people: - person1: - age: 68 - is_tax_unit_head: true - is_blind: true - person2: - age: 4 - is_tax_unit_dependent: true - is_blind: true - spm_units: - spm_unit: - members: [person1, person2] - households: - household: - members: [person1, person2] - state_code: CA - output: - ca_state_supplement_dependent_amount: 12_420 # (943 + 92) * 12 - -- name: One eligible dependent, one ineligible - period: 2024 - input: - people: - person1: - age: 68 - is_tax_unit_head: true - is_blind: true - person2: - age: 4 - is_tax_unit_dependent: true - is_blind: true - person3: - age: 4 - is_tax_unit_dependent: true - is_blind: false - spm_units: - spm_unit: - members: [person1, person2, person3] - households: - household: - members: [person1, person2, person3] - state_code: CA - output: - ca_state_supplement_dependent_amount: 12_420 # (943 + 92) * 12 - -- name: Case 3, SSI disability criteria qualify a dependent. - period: 2024 - absolute_error_margin: 0.01 - input: - people: - person1: - age: 68 - is_tax_unit_head: true - person2: - age: 4 - is_tax_unit_dependent: true - meets_ssi_disability_criteria: true - ssi_engaged_in_sga: false - spm_units: - spm_unit: - members: [person1, person2] - households: - household: - members: [person1, person2] - state_code: CA - output: - ca_state_supplement_dependent_amount: 12_420 # (943 + 92) * 12 - -- name: Case 4, disabled noncitizen child who fails SSI's noncitizen test gets CAPI, not the state supplement. - period: 2026-01 - absolute_error_margin: 0.01 - input: - people: - person1: - age: 40 - immigration_status: LEGAL_PERMANENT_RESIDENT - ssi_qualifying_quarters_earnings: 39 - person2: - age: 10 - is_disabled: true - meets_ssi_disability_criteria: true - immigration_status: LEGAL_PERMANENT_RESIDENT - ssi_qualifying_quarters_earnings: 39 - households: - household: - members: [person1, person2] - state_code: CA - living_arrangements_allow_for_food_preparation: true - output: - # The child fails SSI's 40-quarter test, so the state supplement leaves - # out the child's standard (WIC 18938, 18941) and CAPI pays the disabled - # minor standard 994 + 97.27 = 1,091.27. - ca_capi_person: [0, 1_091.27] - ca_state_supplement_dependent_amount: 0 - ca_state_supplement: 0 - -- name: Case 5, disabled citizen child keeps the state supplement above SSI. - period: 2026-01 - absolute_error_margin: 0.01 - input: - people: - person1: - age: 40 - immigration_status: CITIZEN - person2: - age: 10 - is_disabled: true - meets_ssi_disability_criteria: true - immigration_status: CITIZEN - households: - household: - members: [person1, person2] - state_code: CA - living_arrangements_allow_for_food_preparation: true - output: - # SSI 994; the state supplement tops the child up to the disabled minor - # standard: 1,091.27 - 994 = 97.27. - ssi: [0, 994] - ca_state_supplement: 97.27 - -- name: Case 6, disabled citizen child who fails SSI's resource test gets no state supplement. - period: 2026-01 - absolute_error_margin: 0.01 - input: - people: - person1: - age: 40 - immigration_status: CITIZEN - person2: - age: 10 - is_disabled: true - meets_ssi_disability_criteria: true - immigration_status: CITIZEN - bank_account_assets: - '2026': 3_000 - households: - household: - members: [person1, person2] - state_code: CA - living_arrangements_allow_for_food_preparation: true - output: - # The child's 3,000 of countable resources exceed SSI's 2,000 limit (20 - # CFR 416.1205), so the child gets no SSI and no dependent amount. - meets_ssi_resource_test: [true, false] - ssi: [0, 0] - ca_state_supplement_dependent_amount: 0 - ca_state_supplement: 0 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_eligible_person.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_eligible_person.yaml index 819986ce413..78053fc4cc0 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_eligible_person.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_eligible_person.yaml @@ -41,3 +41,42 @@ state_code: CA output: ca_state_supplement_eligible_person: false + +- name: Case 5, disabled dependent under 18 is eligible. + period: 2026-01 + input: + people: + person1: + age: 40 + is_tax_unit_head: true + person2: + age: 3 + is_tax_unit_dependent: true + is_disabled: true + meets_ssi_disability_criteria: true + households: + household: + members: [person1, person2] + state_code: CA + output: + ca_state_supplement_eligible_person: [false, true] + +- name: Case 6, disabled dependent aged 18 is eligible. + period: 2026-01 + input: + people: + person1: + age: 50 + is_tax_unit_head: true + person2: + age: 18 + is_tax_unit_dependent: true + is_disabled: true + meets_ssi_disability_criteria: true + households: + household: + members: [person1, person2] + state_code: CA + output: + # WIC 12150 follows SSI eligibility, which has no tax-role condition. + ca_state_supplement_eligible_person: [false, true] diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_food_allowance.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_food_allowance.yaml deleted file mode 100644 index 46571ae1c7b..00000000000 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_food_allowance.yaml +++ /dev/null @@ -1,259 +0,0 @@ -- name: Married couple, one person aged - period: 2024 - input: - people: - person1: - age: 68 - is_tax_unit_head: true - person2: - age: 40 - is_tax_unit_spouse: true - is_disabled: false - spm_units: - spm_unit: - members: [person1, person2] - households: - household: - members: [person1, person2] - state_code: CA - living_arrangements_allow_for_food_preparation: false - output: - ca_state_supplement_food_allowance: 816 - -- name: Married couple, one person aged, not eligible - period: 2024 - input: - people: - person1: - age: 68 - is_tax_unit_head: true - person2: - age: 40 - is_tax_unit_spouse: true - is_disabled: false - spm_units: - spm_unit: - members: [person1, person2] - households: - household: - members: [person1, person2] - state_code: CA - living_arrangements_allow_for_food_preparation: true - output: - ca_state_supplement_food_allowance: 0 - -- name: Married couple, nobody aged or disabled - period: 2024 - input: - people: - person1: - age: 40 - is_tax_unit_head: true - person2: - age: 40 - is_tax_unit_spouse: true - is_disabled: false - spm_units: - spm_unit: - members: [person1, person2] - households: - household: - members: [person1, person2] - state_code: CA - living_arrangements_allow_for_food_preparation: false - output: - ca_state_supplement_food_allowance: 0 - -- name: Married couple, both disabled - period: 2024 - input: - people: - person1: - age: 40 - is_tax_unit_head: true - is_disabled: true - meets_ssi_disability_criteria: true - person2: - age: 40 - is_tax_unit_spouse: true - is_disabled: true - meets_ssi_disability_criteria: true - spm_units: - spm_unit: - members: [person1, person2] - households: - household: - members: [person1, person2] - state_code: CA - living_arrangements_allow_for_food_preparation: false - output: - ca_state_supplement_food_allowance: 1_632 - -- name: Eligible married household with two aged or disabled people - period: 2024 - input: - ca_state_supplement_food_allowance_eligible: true - spm_unit_is_married: true - ca_state_supplement_aged_disabled_count: 2 - state_code: CA - output: - ca_state_supplement_food_allowance: 1_632 - -- name: 2026 couple of an aged person and a blind person under 65 without cooking facilities gets no food allowance - period: 2026-01 - absolute_error_margin: 0.01 - input: - people: - person1: - age: 70 - is_tax_unit_head: true - person2: - age: 50 - is_tax_unit_spouse: true - is_blind: true - spm_units: - spm_unit: - members: [person1, person2] - households: - household: - members: [person1, person2] - state_code: CA - living_arrangements_allow_for_food_preparation: false - output: - # The couple is paid the one-blind rate (WIC 12200(b)), and 12200(e) - # gives the allowance only under (c) or (d): no food allowance. The - # aged amount with the allowance, 1,233.94 + 128.87 = 1,362.81, is below - # the one-blind couple amount, so the standard is 2,238.44. - ca_state_supplement_food_allowance: 0 - ca_state_supplement_payment_standard: 2_238.44 - -- name: 2026 aged couple with one blind spouse without cooking facilities gets the aged couple amount with the food allowance - period: 2026-01 - absolute_error_margin: 0.01 - input: - people: - person1: - age: 70 - is_tax_unit_head: true - is_blind: true - person2: - age: 68 - is_tax_unit_spouse: true - spm_units: - spm_unit: - members: [person1, person2] - households: - household: - members: [person1, person2] - state_code: CA - living_arrangements_allow_for_food_preparation: false - output: - # Both spouses are aged, so the couple also qualifies under WIC 12200(d) - # with the (e) allowance: 2,098.83 + 257.74 = 2,356.57, above the - # one-blind rate of 2,238.44. California pays the highest category, so - # the allowance adds 2,356.57 - 2,238.44 = 118.13 to the blind amount. - ca_state_supplement_food_allowance: 118.13 - ca_state_supplement_payment_standard: 2_356.57 - -- name: 2026 single aged and blind person without cooking facilities gets the higher of the blind amount and the aged amount with the food allowance - period: 2026-01 - absolute_error_margin: 0.01 - input: - people: - person1: - age: 70 - is_tax_unit_head: true - is_blind: true - spm_units: - spm_unit: - members: [person1] - households: - household: - members: [person1] - state_code: CA - living_arrangements_allow_for_food_preparation: false - output: - # The aged amount with the (e) allowance, 1,233.94 + 128.87 = 1,362.81, - # is above the blind amount of 1,318.32 (WIC 12200(a), (c), (e)). The - # allowance adds 1,362.81 - 1,318.32 = 44.49 to the blind amount. - ca_state_supplement_food_allowance: 44.49 - ca_state_supplement_payment_standard: 1_362.81 - -- name: 2026 aged couple with both spouses blind without cooking facilities gets the aged couple amount with the food allowance - period: 2026-01 - absolute_error_margin: 0.01 - input: - people: - person1: - age: 70 - is_tax_unit_head: true - is_blind: true - person2: - age: 68 - is_tax_unit_spouse: true - is_blind: true - spm_units: - spm_unit: - members: [person1, person2] - households: - household: - members: [person1, person2] - state_code: CA - living_arrangements_allow_for_food_preparation: false - output: - # The aged couple amount with the (e) allowance, 2,098.83 + 257.74 = - # 2,356.57, is above the two-blind rate of 2,324.35 (WIC 12200(a), (d), - # (e)). The allowance adds 2,356.57 - 2,324.35 = 32.22. - ca_state_supplement_food_allowance: 32.22 - ca_state_supplement_payment_standard: 2_356.57 - -- name: 2026 couple of a disabled person and a blind person under 65 without cooking facilities gets no food allowance - period: 2026-01 - absolute_error_margin: 0.01 - input: - people: - person1: - age: 50 - is_tax_unit_head: true - is_disabled: true - meets_ssi_disability_criteria: true - person2: - age: 45 - is_tax_unit_spouse: true - is_blind: true - spm_units: - spm_unit: - members: [person1, person2] - households: - household: - members: [person1, person2] - state_code: CA - living_arrangements_allow_for_food_preparation: false - output: - # As for an aged person: the one-blind couple rate under WIC 12200(b), - # 2,238.44, is above 1,233.94 + 128.87 = 1,362.81, and (e) adds nothing. - ca_state_supplement_food_allowance: 0 - ca_state_supplement_payment_standard: 2_238.44 - -- name: 2025 single aged and blind person without cooking facilities gets the aged amount with the food allowance - period: 2025-01 - absolute_error_margin: 0.01 - input: - people: - person1: - age: 70 - is_tax_unit_head: true - is_blind: true - spm_units: - spm_unit: - members: [person1] - households: - household: - members: [person1] - state_code: CA - living_arrangements_allow_for_food_preparation: false - output: - # 1,206.94 + 128.87 = 1,335.81 is above the 2025 blind amount of 1,291.32, - # so the allowance adds 1,335.81 - 1,291.32 = 44.49. - ca_state_supplement_food_allowance: 44.49 - ca_state_supplement_payment_standard: 1_335.81 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_food_allowance_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_food_allowance_eligible.yaml deleted file mode 100644 index a19d00f2588..00000000000 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_food_allowance_eligible.yaml +++ /dev/null @@ -1,156 +0,0 @@ -- name: Living arrangements allow for food preparation - period: 2024 - input: - ca_state_supplement_aged_disabled_count: 1 - living_arrangements_allow_for_food_preparation: true - state_code: CA - output: - ca_state_supplement_food_allowance_eligible: false - -- name: Eligible - period: 2024 - input: - ca_state_supplement_aged_disabled_count: 1 - living_arrangements_allow_for_food_preparation: false - state_code: CA - output: - ca_state_supplement_food_allowance_eligible: true - -- name: No aged or disabled people - period: 2024 - input: - ca_state_supplement_aged_disabled_count: 0 - living_arrangements_allow_for_food_preparation: false - state_code: CA - output: - ca_state_supplement_food_allowance_eligible: false - -- name: Food preparation not reported, so the living arrangement allows it by default - period: 2024 - input: - ca_state_supplement_aged_disabled_count: 1 - state_code: CA - output: - living_arrangements_allow_for_food_preparation: true - ca_state_supplement_food_allowance_eligible: false - -# Restaurant meals allowance (WIC 12200(e); SSA POMS SI SF01415.140). The -# allowance is paid only when the living arrangement prevents meal preparation -# at home, so a household without living_arrangements_allow_for_food_preparation -# set gets the regular independent-living standard. January 2025 amounts, per -# SSA POMS SI 01415.057 (California codes A and C): federal SSI $967 -# (individual) and $1,450 (couple); independent living $1,206.94 and $2,057.83; -# without cooking facilities $1,335.81 and $2,315.57. -- name: 2025 aged individual, food preparation not reported, gets the independent-living standard - period: 2025-01 - absolute_error_margin: 0.01 - input: - people: - person1: - age: 70 - is_tax_unit_head: true - immigration_status: CITIZEN - spm_units: - spm_unit: - members: [person1] - households: - household: - members: [person1] - state_code: CA - output: - ssi: 967 - ca_state_supplement_food_allowance_eligible: false - ca_state_supplement_food_allowance: 0 - ca_state_supplement_payment_standard: 1_206.94 - ca_state_supplement: 239.94 # 1,206.94 - 967 - -- name: 2025 aged individual whose living arrangement prevents food preparation gets the restaurant meals allowance - period: 2025-01 - absolute_error_margin: 0.01 - input: - people: - person1: - age: 70 - is_tax_unit_head: true - immigration_status: CITIZEN - spm_units: - spm_unit: - members: [person1] - households: - household: - members: [person1] - state_code: CA - living_arrangements_allow_for_food_preparation: false - output: - ssi: 967 - ca_state_supplement_food_allowance_eligible: true - ca_state_supplement_food_allowance: 128.87 # 1,335.81 - 1,206.94 - ca_state_supplement_payment_standard: 1_335.81 # 1,206.94 + 128.87 - ca_state_supplement: 368.81 # 1,335.81 - 967 - -- name: 2025 aged couple, food preparation not reported, gets the independent-living standard - period: 2025-01 - absolute_error_margin: 0.01 - input: - people: - person1: - age: 83 - is_tax_unit_head: true - immigration_status: CITIZEN - person2: - age: 78 - is_tax_unit_spouse: true - immigration_status: CITIZEN - tax_units: - tax_unit: - members: [person1, person2] - marital_units: - marital_unit: - members: [person1, person2] - spm_units: - spm_unit: - members: [person1, person2] - households: - household: - members: [person1, person2] - state_code: CA - output: - ssi: [725, 725] # 1,450 / 2 - ca_state_supplement_food_allowance_eligible: false - ca_state_supplement_food_allowance: 0 - ca_state_supplement_payment_standard: 2_057.83 - ca_state_supplement: 607.83 # 2,057.83 - 1,450 - -- name: 2025 aged couple whose living arrangement prevents food preparation gets the restaurant meals allowance - period: 2025-01 - absolute_error_margin: 0.01 - input: - people: - person1: - age: 83 - is_tax_unit_head: true - immigration_status: CITIZEN - person2: - age: 78 - is_tax_unit_spouse: true - immigration_status: CITIZEN - tax_units: - tax_unit: - members: [person1, person2] - marital_units: - marital_unit: - members: [person1, person2] - spm_units: - spm_unit: - members: [person1, person2] - households: - household: - members: [person1, person2] - state_code: CA - living_arrangements_allow_for_food_preparation: false - output: - ssi: [725, 725] # 1,450 / 2 - ca_state_supplement_food_allowance_eligible: true - ca_state_supplement_food_allowance: 257.74 # 2,315.57 - 2,057.83 - ca_state_supplement_payment_standard: 2_315.57 # 2,057.83 + 257.74 - ca_state_supplement: 865.57 # 2,315.57 - 1,450 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_medical_care_facility_amount.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_medical_care_facility_amount.yaml deleted file mode 100644 index 54788888e2d..00000000000 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_medical_care_facility_amount.yaml +++ /dev/null @@ -1,79 +0,0 @@ -- name: One person in medical care facility - period: 2024 - input: - people: - person1: - ca_in_medical_care_facility: true - ca_state_supplement_eligible_person: true - person2: - ca_in_medical_care_facility: false - ca_state_supplement_eligible_person: true - spm_units: - spm_unit: - members: [person1, person2] - households: - household: - members: [person1, person2] - state_code: CA - output: - ca_state_supplement_medical_care_facility_amount: 504 - -- name: Nobody in medical care facility - period: 2024 - input: - people: - person1: - ca_in_medical_care_facility: false - ca_state_supplement_eligible_person: true - person2: - ca_in_medical_care_facility: false - ca_state_supplement_eligible_person: true - spm_units: - spm_unit: - members: [person1, person2] - households: - household: - members: [person1, person2] - state_code: CA - output: - ca_state_supplement_medical_care_facility_amount: 0 - -- name: Ineligible person in medical care facility - period: 2024 - input: - people: - person1: - ca_in_medical_care_facility: true - ca_state_supplement_eligible_person: false - person2: - ca_in_medical_care_facility: false - ca_state_supplement_eligible_person: true - spm_units: - spm_unit: - members: [person1, person2] - households: - household: - members: [person1, person2] - state_code: CA - output: - ca_state_supplement_medical_care_facility_amount: 0 - -- name: 2026 one person in medical care facility - period: 2026-01 - input: - people: - person1: - ca_in_medical_care_facility: true - ca_state_supplement_eligible_person: true - person2: - ca_in_medical_care_facility: false - ca_state_supplement_eligible_person: true - spm_units: - spm_unit: - members: [person1, person2] - households: - household: - members: [person1, person2] - state_code: CA - output: - ca_state_supplement_medical_care_facility_amount: 62 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_out_of_home_care_facility_amount.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_out_of_home_care_facility_amount.yaml deleted file mode 100644 index 5c6fdf4e4c2..00000000000 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_out_of_home_care_facility_amount.yaml +++ /dev/null @@ -1,79 +0,0 @@ -- name: One person in out of home care facility - period: 2024 - input: - people: - person1: - in_out_of_home_care_facility: true - ca_state_supplement_eligible_person: true - person2: - in_out_of_home_care_facility: false - ca_state_supplement_eligible_person: true - spm_units: - spm_unit: - members: [person1, person2] - households: - household: - members: [person1, person2] - state_code: CA - output: - ca_state_supplement_out_of_home_care_facility_amount: 6_216 # (2 * (943 + 302) - (1,415 + 557)) * 12 - -- name: Nobody in out of home care facility - period: 2024 - input: - people: - person1: - in_out_of_home_care_facility: false - ca_state_supplement_eligible_person: true - person2: - in_out_of_home_care_facility: false - ca_state_supplement_eligible_person: true - spm_units: - spm_unit: - members: [person1, person2] - households: - household: - members: [person1, person2] - state_code: CA - output: - ca_state_supplement_out_of_home_care_facility_amount: 0 - -- name: Ineligible person in out of home care facility - period: 2024 - input: - people: - person1: - in_out_of_home_care_facility: true - ca_state_supplement_eligible_person: false - person2: - in_out_of_home_care_facility: false - ca_state_supplement_eligible_person: true - spm_units: - spm_unit: - members: [person1, person2] - households: - household: - members: [person1, person2] - state_code: CA - output: - ca_state_supplement_out_of_home_care_facility_amount: 0 - -- name: 2026 one person in out of home care facility - period: 2026-01 - input: - people: - person1: - in_out_of_home_care_facility: true - ca_state_supplement_eligible_person: true - person2: - in_out_of_home_care_facility: false - ca_state_supplement_eligible_person: true - spm_units: - spm_unit: - members: [person1, person2] - households: - household: - members: [person1, person2] - state_code: CA - output: - ca_state_supplement_out_of_home_care_facility_amount: 1_153.31 # 3,252.14 - 2,098.83 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_person.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_person.yaml new file mode 100644 index 00000000000..4c1c2c046be --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_person.yaml @@ -0,0 +1,750 @@ +- name: Case 1, aged individual living independently takes the code A level. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + is_tax_unit_head: true + marital_units: + marital_unit: + members: [person1] + households: + household: + members: [person1] + state_code: CA + living_arrangements_allow_for_food_preparation: true + output: + # POMS SI 01415.058 B.2.a: 1,233.94 total less the 994 federal benefit rate. + ssi: 994 + ca_state_supplement_person: 239.94 + ca_state_supplement: 239.94 + +- name: Case 2, aged individual without cooking facilities takes the code C level. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + is_tax_unit_head: true + marital_units: + marital_unit: + members: [person1] + households: + household: + members: [person1] + state_code: CA + living_arrangements_allow_for_food_preparation: false + output: + # WIC 12200(e): 239.94 + 128.87, the 1,362.81 total in POMS SI 01415.058 B.2.a. + ca_state_supplement_person: 368.81 + +- name: Case 3, blind individual without cooking facilities stays at the code A blind level. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + is_blind: true + is_tax_unit_head: true + marital_units: + marital_unit: + members: [person1] + households: + household: + members: [person1] + state_code: CA + living_arrangements_allow_for_food_preparation: false + output: + # WIC 12200(e) gives the allowance only under (c) or (d), not the blind level in (a). + ca_state_supplement_person: 324.32 + +- name: Case 4, aged and blind individual without cooking facilities takes the higher code C level. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + is_blind: true + is_tax_unit_head: true + marital_units: + marital_unit: + members: [person1] + households: + household: + members: [person1] + state_code: CA + living_arrangements_allow_for_food_preparation: false + output: + # California pays the highest category (POMS SI 01415.058 B.2.a note): 368.81 is above 324.32. + ca_state_supplement_person: 368.81 + +- name: Case 5, disabled dependent aged 17 takes the disabled minor level. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + is_tax_unit_head: true + person2: + age: 17 + is_disabled: true + meets_ssi_disability_criteria: true + is_tax_unit_dependent: true + marital_units: + marital_unit1: + members: [person1] + marital_unit2: + members: [person2] + households: + household: + members: [person1, person2] + state_code: CA + living_arrangements_allow_for_food_preparation: true + output: + # WIC 12200(f) and POMS SI 01415.058 code E: 1,091.27 total less 994. + ssi: [0, 994] + ca_state_supplement_person: [0, 97.27] + ca_state_supplement: 97.27 + +- name: Case 6, disabled dependent aged 18 takes the individual level. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + is_tax_unit_head: true + person2: + age: 18 + is_disabled: true + meets_ssi_disability_criteria: true + is_tax_unit_dependent: true + marital_units: + marital_unit1: + members: [person1] + marital_unit2: + members: [person2] + households: + household: + members: [person1, person2] + state_code: CA + living_arrangements_allow_for_food_preparation: true + output: + # POMS SI 01415.058 B.1 code A covers a disabled child aged 18 or over living with a parent. + ca_state_supplement_person: [0, 239.94] + +- name: Case 7, blind dependent child takes the blind level. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + is_tax_unit_head: true + person2: + age: 10 + is_blind: true + is_tax_unit_dependent: true + marital_units: + marital_unit1: + members: [person1] + marital_unit2: + members: [person2] + households: + household: + members: [person1, person2] + state_code: CA + living_arrangements_allow_for_food_preparation: true + output: + # WIC 12200(a) and POMS SI 01415.058 B.1 code A cover a blind child living with a parent. + ca_state_supplement_person: [0, 324.32] + +- name: Case 8, disabled dependent child without cooking facilities gets no allowance. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + is_tax_unit_head: true + person2: + age: 10 + is_disabled: true + meets_ssi_disability_criteria: true + is_tax_unit_dependent: true + marital_units: + marital_unit1: + members: [person1] + marital_unit2: + members: [person2] + households: + household: + members: [person1, person2] + state_code: CA + living_arrangements_allow_for_food_preparation: false + output: + # WIC 12200(e) gives the allowance only under (c) or (d), not the disabled minor level in (f). + ca_state_supplement_person: [0, 97.27] + +- name: Case 9, individual in nonmedical out-of-home care takes the code B level alone. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + is_tax_unit_head: true + in_out_of_home_care_facility: true + marital_units: + marital_unit: + members: [person1] + households: + household: + members: [person1] + state_code: CA + living_arrangements_allow_for_food_preparation: true + output: + # WIC 12200(g) and POMS SI 01415.058 code B: 1,626.07 total less 994, not added to the + # independent-living level. + ca_state_supplement_person: 632.07 + +- name: Case 10, dependent child in nonmedical out-of-home care takes the code B level. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + is_tax_unit_head: true + person2: + age: 10 + is_disabled: true + meets_ssi_disability_criteria: true + is_tax_unit_dependent: true + in_out_of_home_care_facility: true + marital_units: + marital_unit1: + members: [person1] + marital_unit2: + members: [person2] + households: + household: + members: [person1, person2] + state_code: CA + living_arrangements_allow_for_food_preparation: true + output: + # POMS SI 01415.058 B.1 code B lists children in licensed facilities. + ca_state_supplement_person: [0, 632.07] + +- name: Case 11, Title XIX facility resident takes the code J level alone. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + is_tax_unit_head: true + ca_in_medical_care_facility: true + ssi_lives_in_medical_treatment_facility: true + ssi_medicaid_pays_majority_of_care: true + marital_units: + marital_unit: + members: [person1] + households: + household: + members: [person1] + state_code: CA + living_arrangements_allow_for_food_preparation: true + output: + # WIC 12200(h) and POMS SI 01415.058 code J: 62 total less the 30 federal payment cap. + ssi: 30 + ca_state_supplement_person: 32 + +- name: Case 12, dependent child in a Title XIX facility takes the code J level. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + is_tax_unit_head: true + person2: + age: 10 + is_disabled: true + meets_ssi_disability_criteria: true + is_tax_unit_dependent: true + ca_in_medical_care_facility: true + ssi_lives_in_medical_treatment_facility: true + ssi_medicaid_pays_majority_of_care: true + marital_units: + marital_unit1: + members: [person1] + marital_unit2: + members: [person2] + households: + household: + members: [person1, person2] + state_code: CA + living_arrangements_allow_for_food_preparation: true + output: + ssi: [0, 30] + ca_state_supplement_person: [0, 32] + +- name: Case 13, aged couple takes half of the couple level each. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + is_tax_unit_head: true + person2: + age: 68 + is_tax_unit_spouse: true + marital_units: + marital_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: CA + living_arrangements_allow_for_food_preparation: true + output: + # WIC 12200(d) and POMS SI 01415.058 B.2.b: 607.83 for the couple. Half is 303.915, which + # federal administration rounds up to the next cent (ssi_state_supplement). + ssi: [745.5, 745.5] + ca_state_supplement_person: [303.92, 303.92] + ca_state_supplement: 607.84 + +- name: Case 14, blind couple takes half of the couple level each. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 50 + is_blind: true + is_tax_unit_head: true + person2: + age: 48 + is_blind: true + is_tax_unit_spouse: true + marital_units: + marital_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: CA + living_arrangements_allow_for_food_preparation: true + output: + # WIC 12200(a): 833.35 / 2 = 416.675, rounded up. + ca_state_supplement_person: [416.68, 416.68] + +- name: Case 15, couple of a blind person and an aged person takes the one-blind level. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 60 + is_blind: true + is_tax_unit_head: true + person2: + age: 70 + is_tax_unit_spouse: true + marital_units: + marital_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: CA + living_arrangements_allow_for_food_preparation: true + output: + # WIC 12200(b): 747.44 / 2. + ca_state_supplement_person: [373.72, 373.72] + +- name: Case 16, aged couple without cooking facilities adds the couple allowance. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + is_tax_unit_head: true + person2: + age: 68 + is_tax_unit_spouse: true + marital_units: + marital_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: CA + living_arrangements_allow_for_food_preparation: false + output: + # WIC 12200(d), (e): 607.83 + 257.74 = 865.57; half is 432.785, rounded up. + ca_state_supplement_person: [432.79, 432.79] + +- name: Case 17, couple of an aged person and a blind person under 65 without cooking facilities gets no allowance. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + is_tax_unit_head: true + person2: + age: 50 + is_blind: true + is_tax_unit_spouse: true + marital_units: + marital_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: CA + living_arrangements_allow_for_food_preparation: false + output: + # The one-blind rate is under WIC 12200(b), and (e) gives the allowance only under (c) or (d). + # POMS code C adds the individual allowance for this couple; PolicyEngine follows the statute + # (ruled 2026-10-29, PR 10379 comment 6509402355). + ca_state_supplement_person: [373.72, 373.72] + +- name: Case 18, aged couple with one blind spouse without cooking facilities takes the higher aged couple level. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + is_blind: true + is_tax_unit_head: true + person2: + age: 68 + is_tax_unit_spouse: true + marital_units: + marital_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: CA + living_arrangements_allow_for_food_preparation: false + output: + # 865.57 for the aged couple with the allowance is above the 747.44 one-blind level. + ca_state_supplement_person: [432.79, 432.79] + +- name: Case 19, couple both in nonmedical out-of-home care takes twice the individual total. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + is_tax_unit_head: true + in_out_of_home_care_facility: true + person2: + age: 68 + is_tax_unit_spouse: true + in_out_of_home_care_facility: true + marital_units: + marital_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: CA + living_arrangements_allow_for_food_preparation: true + output: + # 2 * 1,626.07 - 1,491 = 1,761.14 for the couple (CDSS 2026 May Revision, page 26, note 2). + ca_state_supplement_person: [880.57, 880.57] + +- name: Case 20, couple with one spouse in nonmedical out-of-home care averages the two couple levels. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + is_tax_unit_head: true + in_out_of_home_care_facility: true + person2: + age: 68 + is_tax_unit_spouse: true + marital_units: + marital_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: CA + living_arrangements_allow_for_food_preparation: true + output: + # (1,761.14 + 607.83) / 2 = 1,184.485 for the couple, as CAPI computes it (MPP 49-050.24); + # half is 592.2425, rounded up. + ca_state_supplement_person: [592.25, 592.25] + +- name: Case 21, couple both in a Title XIX facility takes the code J couple level. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + is_tax_unit_head: true + ca_in_medical_care_facility: true + ssi_lives_in_medical_treatment_facility: true + ssi_medicaid_pays_majority_of_care: true + person2: + age: 68 + is_tax_unit_spouse: true + ca_in_medical_care_facility: true + ssi_lives_in_medical_treatment_facility: true + ssi_medicaid_pays_majority_of_care: true + marital_units: + marital_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: CA + living_arrangements_allow_for_food_preparation: true + output: + # POMS SI 01415.058 B.2.b: 64 for the couple. + ssi: [30, 30] + ca_state_supplement_person: [32, 32] + +- name: Case 22, couple with one spouse in a Title XIX facility is computed as two individuals. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + is_tax_unit_head: true + ca_in_medical_care_facility: true + ssi_lives_in_medical_treatment_facility: true + ssi_medicaid_pays_majority_of_care: true + person2: + age: 68 + is_tax_unit_spouse: true + marital_units: + marital_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: CA + living_arrangements_allow_for_food_preparation: true + output: + # 20 CFR 416.414(b)(3). + ssi: [30, 994] + ca_state_supplement_person: [32, 239.94] + +- name: Case 23, two unrelated people in one SPM unit each take their own level. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + is_tax_unit_head: true + person2: + age: 40 + is_blind: true + is_tax_unit_head: true + tax_units: + tax_unit1: + members: [person1] + tax_unit2: + members: [person2] + spm_units: + spm_unit: + members: [person1, person2] + marital_units: + marital_unit1: + members: [person1] + marital_unit2: + members: [person2] + households: + household: + members: [person1, person2] + state_code: CA + living_arrangements_allow_for_food_preparation: true + output: + # WIC 12200 pays each recipient, and an unrelated person's income and SSI do not reduce it. + ssi: [994, 994] + ca_state_supplement_person: [239.94, 324.32] + ca_state_supplement: 564.26 + +- name: Case 24, spouse's deemed income below the couple federal rate leaves the individual level. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + is_tax_unit_head: true + person2: + age: 50 + employment_income: 24_000 + is_tax_unit_spouse: true + marital_units: + marital_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: CA + living_arrangements_allow_for_food_preparation: true + output: + # (2,000 - 20 - 65) / 2 = 957.50 deemed. POMS SI 01320.430 D: federal min(994, 1,491 - 957.50) = + # 533.50; state min(239.94, 607.83) = 239.94. + ssi: [533.5, 0] + ca_state_supplement_person: [239.94, 0] + +- name: Case 25, spouse's deemed income above the couple total leaves no supplement. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + is_tax_unit_head: true + person2: + age: 50 + employment_income: 60_000 + is_tax_unit_spouse: true + marital_units: + marital_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: CA + living_arrangements_allow_for_food_preparation: true + output: + # (5,000 - 20 - 65) / 2 = 2,457.50 deemed. POMS SI 01320.430 D: state min(239.94, 607.83 - + # (2,457.50 - 1,491)) = 0. + ssi: [0, 0] + ca_state_supplement_person: [0, 0] + +- name: Case 26, person who declines SSI gets no supplement. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + is_tax_unit_head: true + takes_up_ssi_if_eligible: false + marital_units: + marital_unit: + members: [person1] + households: + household: + members: [person1] + state_code: CA + living_arrangements_allow_for_food_preparation: true + output: + # SSA pays the supplement with SSI (POMS SI 01415.058 A). + ca_state_supplement_eligible_person: true + ssi: 0 + ca_state_supplement_person: 0 + +- name: Case 27, disabled noncitizen child who fails SSI's noncitizen test gets CAPI, not the supplement. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: LEGAL_PERMANENT_RESIDENT + ssi_qualifying_quarters_earnings: 39 + is_tax_unit_head: true + person2: + age: 10 + is_disabled: true + meets_ssi_disability_criteria: true + immigration_status: LEGAL_PERMANENT_RESIDENT + ssi_qualifying_quarters_earnings: 39 + is_tax_unit_dependent: true + marital_units: + marital_unit1: + members: [person1] + marital_unit2: + members: [person2] + households: + household: + members: [person1, person2] + state_code: CA + living_arrangements_allow_for_food_preparation: true + output: + # WIC 18938, 18941: CAPI pays the disabled minor standard, 994 + 97.27. + ca_state_supplement_person: [0, 0] + ca_capi_person: [0, 1_091.27] + +- name: Case 28, disabled child who fails SSI's resource test gets no supplement. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + is_tax_unit_head: true + person2: + age: 10 + is_disabled: true + meets_ssi_disability_criteria: true + is_tax_unit_dependent: true + bank_account_assets: + '2026': 3_000 + marital_units: + marital_unit1: + members: [person1] + marital_unit2: + members: [person2] + households: + household: + members: [person1, person2] + state_code: CA + living_arrangements_allow_for_food_preparation: true + output: + # The child's 3,000 of countable resources exceed SSI's 2,000 limit (20 CFR 416.1205). + meets_ssi_resource_test: [true, false] + ssi: [0, 0] + ca_state_supplement_person: [0, 0] + +- name: Case 29, person in another person's household keeps the independent-living share. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + is_tax_unit_head: true + ssi_lives_in_another_persons_household: true + ssi_receives_shelter_from_others_in_household: true + ssi_others_pay_all_meals: true + marital_units: + marital_unit: + members: [person1] + households: + household: + members: [person1] + state_code: CA + living_arrangements_allow_for_food_preparation: true + output: + # WIC 12200(i) reduces the grant by the federal reduction, which leaves the 239.94 share. + # POMS SI 01415.058 code D lists 245.20; those shares are not modeled (issue 7892). + ssi: 662.67 + ca_state_supplement_person: 239.94 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/integration.yaml index d202e2a2cf2..46cb1953241 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/integration.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/integration.yaml @@ -1,5 +1,6 @@ -- name: Single blind parent with non eligible dependent child - period: 2024 +- name: Case 1, single blind parent with a dependent child who is not eligible. + period: 2026-01 + absolute_error_margin: 0.01 input: people: person1: @@ -9,19 +10,26 @@ person2: age: 4 is_tax_unit_dependent: true - spm_units: - spm_unit: - members: [person1, person2] + marital_units: + marital_unit1: + members: [person1] + marital_unit2: + members: [person2] households: household: members: [person1, person2] state_code: CA + living_arrangements_allow_for_food_preparation: true output: - # (943 + 297) * 12; the 297 share dates from 1991 (issue 10480). - ca_state_supplement_payment_standard: 14_880 + ca_state_supplement_eligible_person: [true, false] + ssi: [994, 0] + # 1,318.32 blind total - 994 federal benefit rate. + ca_state_supplement_person: [324.32, 0] + ca_state_supplement: 324.32 -- name: Married household with one blind and one disabled person, with a disabled dependent child, no food preparation and spouse in out of home care - period: 2024-01 +- name: Case 2, aged couple with one blind spouse, one spouse in out-of-home care, a disabled child and no food preparation. + period: 2026-01 + absolute_error_margin: 0.01 input: people: person1: @@ -39,52 +47,35 @@ is_tax_unit_dependent: true is_disabled: true meets_ssi_disability_criteria: true - spm_units: - spm_unit: - members: [person1, person2, person3] - spm_unit_is_married: true + marital_units: + marital_unit1: + members: [person1, person2] + marital_unit2: + members: [person3] households: household: members: [person1, person2, person3] state_code: CA living_arrangements_allow_for_food_preparation: false output: - # Both spouses are aged, so the couple takes the higher of the one-blind - # rate, 1,415 + 685 = 2,100, and the aged couple amount with the food - # allowance, 1,415 + 557 + 136 = 2,108 (WIC 12200(b), (d), (e)). The - # dependent amount is 943 + 92 = 1,035 and the out-of-home care amount is - # 2 * (943 + 302) - (1,415 + 557) = 518. The shares date from 1991 (issue - # 10480): 2,108 + 1,035 + 518 = 3,661. - ca_state_supplement_payment_standard: 3_661 - -- name: Case A ,single disabled parent with non eligible dependent child. - period: 2025-01 - input: - people: - person1: - age: 30 - is_disabled: true - meets_ssi_disability_criteria: true - person2: - age: 4 - is_tax_unit_dependent: true - spm_units: - spm_unit: - members: [person1, person2] - households: - household: - members: [person1, person2] - state_code: CA - living_arrangements_allow_for_food_preparation: true - output: - ca_state_supplement_payment_standard: 1_206.94 + ca_state_supplement_eligible_person: [true, true, true] + ssi: [745.5, 745.5, 994] + # person1 supplies the aged couple level with the allowance, 607.83 + 257.74 + # = 865.57, above the 747.44 one-blind level. person2 supplies the + # out-of-home care couple level, 2 * 1,626.07 - 1,491 = 1,761.14. The couple + # share is (865.57 + 1,761.14) / 2 = 1,313.355, or 656.6775 each, rounded up + # to 656.68. The child takes the disabled minor level, 97.27. + ca_state_supplement_person: [656.68, 656.68, 97.27] + ca_state_supplement: 1_410.63 -- name: Case A1, single disabled parent with a disabled child. +- name: Case 3, single disabled parent with a disabled child. period: 2025-01 + absolute_error_margin: 0.01 input: people: person1: age: 30 + is_tax_unit_head: true is_disabled: true meets_ssi_disability_criteria: true person2: @@ -92,52 +83,69 @@ is_tax_unit_dependent: true is_disabled: true meets_ssi_disability_criteria: true - spm_units: - spm_unit: - members: [person1, person2] + marital_units: + marital_unit1: + members: [person1] + marital_unit2: + members: [person2] households: household: members: [person1, person2] state_code: CA living_arrangements_allow_for_food_preparation: true output: - ca_state_supplement_payment_standard: 2_271.21 # 1206.94 + 1064.27 + ssi: [967, 967] + # 1,206.94 - 967 and 1,064.27 - 967. + ca_state_supplement_person: [239.94, 97.27] + ca_state_supplement: 337.21 -- name: Case A2, single healthy parent with a disabled child. - period: 2025-01 +- name: Case 4, earning parent with a disabled child, the supplement goes to the child. + period: 2026-01 + absolute_error_margin: 0.01 input: people: person1: - age: 30 + age: 33 is_tax_unit_head: true + employment_income: 12_222 person2: - age: 4 + age: 3 is_tax_unit_dependent: true is_disabled: true meets_ssi_disability_criteria: true - spm_units: - spm_unit: - members: [person1, person2] + marital_units: + marital_unit1: + members: [person1] + marital_unit2: + members: [person2] households: household: members: [person1, person2] state_code: CA living_arrangements_allow_for_food_preparation: true output: - ca_state_supplement_payment_standard: 1_064.27 + ca_state_supplement_eligible_person: [false, true] + ssi: [0, 994] + # The parent is not aged, blind or disabled, and the parent's income leaves + # the child's SSI at 994, so the child takes the full 97.27. + ca_state_supplement_person: [0, 97.27] + ca_state_supplement: 97.27 -- name: Case B ,joint filers, one of them is disabled. +- name: Case 5, couple with one disabled spouse and no income. period: 2025-01 + absolute_error_margin: 0.01 input: people: person1: age: 30 + is_tax_unit_head: true is_disabled: true meets_ssi_disability_criteria: true person2: age: 22 - spm_units: - spm_unit: + is_tax_unit_spouse: true + marital_units: + marital_unit: members: [person1, person2] households: household: @@ -145,197 +153,27 @@ state_code: CA living_arrangements_allow_for_food_preparation: true output: - ca_state_supplement_payment_standard: 1_206.94 + ca_state_supplement_eligible_person: [true, false] + ca_state_supplement_person: [239.94, 0] + ca_state_supplement: 239.94 -- name: Case B1 ,joint filers, both of them are disabled. +- name: Case 6, couple with both spouses disabled and no income. period: 2025-01 + absolute_error_margin: 0.01 input: people: person1: age: 30 + is_tax_unit_head: true is_disabled: true meets_ssi_disability_criteria: true person2: age: 22 - is_disabled: true - meets_ssi_disability_criteria: true - spm_units: - spm_unit: - members: [person1, person2] - households: - household: - members: [person1, person2] - state_code: CA - living_arrangements_allow_for_food_preparation: true - output: - ca_state_supplement_payment_standard: 2_057.83 - -# 2026 payment standards: CDSS, SSI Total Monthly Payment Amounts 2026, and -# SSA POMS SI 01415.058 (California, January 2026). -- name: 2026 single aged person living independently - period: 2026-01 - input: - people: - person1: - age: 70 - is_tax_unit_head: true - spm_units: - spm_unit: - members: [person1] - households: - household: - members: [person1] - state_code: CA - living_arrangements_allow_for_food_preparation: true - output: - ca_state_supplement_payment_standard: 1_233.94 - -- name: 2026 single aged person living independently without cooking facilities - period: 2026-01 - input: - people: - person1: - age: 70 - is_tax_unit_head: true - spm_units: - spm_unit: - members: [person1] - households: - household: - members: [person1] - state_code: CA - living_arrangements_allow_for_food_preparation: false - output: - ca_state_supplement_food_allowance: 128.87 - ca_state_supplement_payment_standard: 1_362.81 # 1,233.94 + 128.87 - -- name: 2026 single blind person living independently - period: 2026-01 - input: - people: - person1: - age: 40 - is_tax_unit_head: true - is_blind: true - spm_units: - spm_unit: - members: [person1] - households: - household: - members: [person1] - state_code: CA - living_arrangements_allow_for_food_preparation: true - output: - ca_state_supplement_payment_standard: 1_318.32 - -- name: 2026 aged couple living independently - period: 2026-01 - input: - people: - person1: - age: 70 - is_tax_unit_head: true - person2: - age: 68 - is_tax_unit_spouse: true - spm_units: - spm_unit: - members: [person1, person2] - spm_unit_is_married: true - households: - household: - members: [person1, person2] - state_code: CA - living_arrangements_allow_for_food_preparation: true - output: - ca_state_supplement_payment_standard: 2_098.83 - -- name: 2026 aged couple living independently without cooking facilities - period: 2026-01 - input: - people: - person1: - age: 70 - is_tax_unit_head: true - person2: - age: 68 - is_tax_unit_spouse: true - spm_units: - spm_unit: - members: [person1, person2] - spm_unit_is_married: true - households: - household: - members: [person1, person2] - state_code: CA - living_arrangements_allow_for_food_preparation: false - output: - ca_state_supplement_food_allowance: 257.74 - ca_state_supplement_payment_standard: 2_356.57 # 2,098.83 + 257.74 - -- name: 2026 couple, both blind, living independently - period: 2026-01 - input: - people: - person1: - age: 50 - is_tax_unit_head: true - is_blind: true - person2: - age: 48 - is_tax_unit_spouse: true - is_blind: true - spm_units: - spm_unit: - members: [person1, person2] - spm_unit_is_married: true - households: - household: - members: [person1, person2] - state_code: CA - living_arrangements_allow_for_food_preparation: true - output: - ca_state_supplement_payment_standard: 2_324.35 - -- name: 2026 blind person with an aged spouse, living independently - period: 2026-01 - input: - people: - person1: - age: 60 - is_tax_unit_head: true - is_blind: true - person2: - age: 70 is_tax_unit_spouse: true - spm_units: - spm_unit: - members: [person1, person2] - spm_unit_is_married: true - households: - household: - members: [person1, person2] - state_code: CA - living_arrangements_allow_for_food_preparation: true - output: - ca_state_supplement_payment_standard: 2_238.44 - -- name: 2026 single disabled parent with a disabled child - period: 2026-01 - input: - people: - person1: - age: 30 - is_tax_unit_head: true - is_disabled: true - meets_ssi_disability_criteria: true - person2: - age: 4 - is_tax_unit_dependent: true is_disabled: true meets_ssi_disability_criteria: true - spm_units: - spm_unit: + marital_units: + marital_unit: members: [person1, person2] households: household: @@ -343,5 +181,7 @@ state_code: CA living_arrangements_allow_for_food_preparation: true output: - ca_state_supplement_dependent_amount: 1_091.27 - ca_state_supplement_payment_standard: 2_325.21 # 1,233.94 + 1,091.27 + ssi: [725, 725] + # 2,057.83 - 1,450 = 607.83; half is 303.915, rounded up. + ca_state_supplement_person: [303.92, 303.92] + ca_state_supplement: 607.84 diff --git a/policyengine_us/tests/policy/baseline/gov/usda/snap/income/snap_unearned_income_state_ssi_supplements.yaml b/policyengine_us/tests/policy/baseline/gov/usda/snap/income/snap_unearned_income_state_ssi_supplements.yaml index aabb7771aee..fed14c1bbd3 100644 --- a/policyengine_us/tests/policy/baseline/gov/usda/snap/income/snap_unearned_income_state_ssi_supplements.yaml +++ b/policyengine_us/tests/policy/baseline/gov/usda/snap/income/snap_unearned_income_state_ssi_supplements.yaml @@ -50,8 +50,8 @@ snap_unearned_income: 1_122.82 snap: 160 -# The California supplement is an SPM unit variable, so it is counted once for -# the unit rather than projected onto each member. +# SNAP counts the person-level California supplement, so the unit total is +# counted once rather than projected onto each member. - name: California state supplement is counted once in a two-person SPM unit. period: 2026-01 absolute_error_margin: 0.01 diff --git a/policyengine_us/tests/policy/baseline/gov/usda/snap/income/test_snap_child_support_treatment_invariants.py b/policyengine_us/tests/policy/baseline/gov/usda/snap/income/test_snap_child_support_treatment_invariants.py index 58e6b58f926..445bf586210 100644 --- a/policyengine_us/tests/policy/baseline/gov/usda/snap/income/test_snap_child_support_treatment_invariants.py +++ b/policyengine_us/tests/policy/baseline/gov/usda/snap/income/test_snap_child_support_treatment_invariants.py @@ -386,7 +386,6 @@ def _gross_test_simulation(day: date): }, spm_unit={ "tanf": {str(year): 0 for year in years}, - "ca_state_supplement": _monthly(months, 0), }, ) for state in STATES diff --git a/policyengine_us/variables/gov/local/ca/sbd/general_relief/eligibility/ca_sbd_general_relief_receives_other_cash_assistance.py b/policyengine_us/variables/gov/local/ca/sbd/general_relief/eligibility/ca_sbd_general_relief_receives_other_cash_assistance.py index f300efb003b..191db128d88 100644 --- a/policyengine_us/variables/gov/local/ca/sbd/general_relief/eligibility/ca_sbd_general_relief_receives_other_cash_assistance.py +++ b/policyengine_us/variables/gov/local/ca/sbd/general_relief/eligibility/ca_sbd_general_relief_receives_other_cash_assistance.py @@ -19,19 +19,9 @@ def formula(person, period, parameters): # "any other cash assistance program" bar. # SSI is person-level, so only the individual recipient is barred. receives_ssi = (person("ssi", period) > 0) | person("receives_ssi", period) - # SSP is computed at the SPM-unit level, so unit receipt is projected - # down and intersected with the person-level categorical flag - # (mirroring the SF CAAP CAPI bar): only the aged, blind, or disabled - # member an SSP-only payment serves is barred, not the whole unit. - # ca_state_supplement is an ungated computed entitlement (it grows - # when SSI take-up is declined, since no federal SSI is netted out), - # so the SSI take-up flag stands in for actual SSP receipt — - # declined take-up lifts the bar, matching the ssi arm. - receives_ssp = ( - person("ca_state_supplement_eligible_person", period) - & (person.spm_unit("ca_state_supplement", period) > 0) - & person("takes_up_ssi_if_eligible", period.this_year) - ) + # SSP is person-level too, so only the member an SSP-only payment serves + # is barred. It follows SSI take-up, so declined take-up lifts the bar. + receives_ssp = person("ca_state_supplement_person", period) > 0 # CAPI pays SSI-equivalent cash to aged, blind, or disabled # immigrants barred from federal SSI by immigration status. Like # SSP it is computed at the SPM-unit level, so unit receipt is diff --git a/policyengine_us/variables/gov/states/ca/cdss/capi/_ca_capi_ssi_ssp_standard.py b/policyengine_us/variables/gov/states/ca/cdss/capi/_ca_capi_ssi_ssp_standard.py index acb10c1178f..fa93f047ed0 100644 --- a/policyengine_us/variables/gov/states/ca/cdss/capi/_ca_capi_ssi_ssp_standard.py +++ b/policyengine_us/variables/gov/states/ca/cdss/capi/_ca_capi_ssi_ssp_standard.py @@ -1,20 +1,10 @@ from policyengine_us.model_api import * -from policyengine_us.variables.gov.ssa.ssi.eligibility.status.ssi_federal_living_arrangement import ( - SSIFederalLivingArrangement, +from policyengine_us.variables.gov.states.ca.cdss.state_supplement._ca_state_supplement_rates import ( + ca_in_title_xix_facility, + ca_state_supplement_rates, ) -def ca_capi_in_title_xix_facility(person, period): - """Whether a person lives in a Title XIX medical facility (MPP 49-050.26). - - Reads both the California input and SSI's living arrangement. - """ - arrangement = person("ssi_federal_living_arrangement", period) - return person("ca_in_medical_care_facility", period.this_year) | ( - arrangement == SSIFederalLivingArrangement.MEDICAL_TREATMENT_FACILITY - ) - - def ca_capi_couple_computation(person, period): """Whether CAPI computes the person with their spouse as a couple. @@ -22,7 +12,7 @@ def ca_capi_couple_computation(person, period): a Title XIX facility is computed separately (20 CFR 416.414(b)(3)), when only the California facility input marks it. """ - in_facility = ca_capi_in_title_xix_facility(person, period) + in_facility = ca_in_title_xix_facility(person, period) one_in_facility = person.marital_unit.sum(in_facility) == 1 return person("ssi_couple_computation_applies", period) & ~one_in_facility @@ -30,97 +20,32 @@ def ca_capi_couple_computation(person, period): def ca_capi_spouse_ssi_ssp(person, period): """Return the SSI and state supplement paid to the person's spouse. - Only a spouse who is not CAPI-eligible counts. ca_state_supplement is an - SPM-unit amount, so as a simplification the spouse's share is pro rata - among the unit's members eligible for it; a citizen disabled child's - supplement in the unit is then attributed to the spouse. + Only a spouse who is not CAPI-eligible counts. """ spouse = ~person("ca_capi_eligible_person", period.this_year) - spouse_ssi = person.marital_unit.sum(person("ssi", period) * spouse) - ssp_eligible = person("ca_state_supplement_eligible_person", period) - spouse_ssp_share = person.marital_unit.sum(ssp_eligible * spouse) / max_( - person.spm_unit.sum(ssp_eligible), 1 - ) - spouse_ssp = spouse_ssp_share * person.spm_unit("ca_state_supplement", period) - return spouse_ssi + spouse_ssp + payment = add(person, period, ["ssi", "ca_state_supplement_person"]) + return person.marital_unit.sum(payment * spouse) def ca_capi_ssi_ssp_standard(person, period, parameters): """Return a person's monthly SSI/SSP individual and couple standards. - CAPI equals SSI/SSP (WIC 18941), and the living arrangement selects one - standard (MPP 49-050.2; POMS SI 01415.058 B): - - Title XIX medical facility: the facility standard alone (MPP 49-050.26). - - Non-medical out-of-home care: one standard for every category, half the - couple amount per person (WIC 12200(g); MPP 49-050.24). - - Independent living: the highest category the person or couple qualifies - for; the no-cooking allowance goes only with the aged or disabled amount - (WIC 12200(e)), not the one-blind couple rate (12200(b)). - Outside an SSI couple computation the ineligible spouse takes the person's - category (POMS SI 01320.430 C.7). - NOTE: reduced-needs standards (POMS SI 01415.058 code D) are not modeled - (issue 7892). + CAPI equals SSI/SSP (WIC 18941), so each standard is the federal amount for + the living arrangement plus California's share. Each spouse in a joint + computation supplies half of the couple total, half the couple amount per + person in non-medical out-of-home care (MPP 49-050.24). """ - p = parameters(period).gov.states.ca.cdss.state_supplement.payment_standard fbr = parameters(period).gov.ssa.ssi.amount - age = person("monthly_age", period) - child = person("is_tax_unit_dependent", period.this_year) & ( - age < p.dependent.age_limit - ) - blind = person("is_blind", period.this_year) - aged_or_disabled = (age >= p.aged_or_disabled.age_threshold) | person( - "is_ssi_disabled", period.this_year - ) - # NOTE: living_arrangements_allow_for_food_preparation defaults to true - # and the microdata do not set it, so the no-cooking allowance (+$128.87 - # a month in 2026, +$257.74 for a couple) applies only when the input is - # set to false (issue 10296). - no_cooking = ~person.household( - "living_arrangements_allow_for_food_preparation", period.this_year - ) - medical_facility = ca_capi_in_title_xix_facility(person, period) - out_of_home_care = person("in_out_of_home_care_facility", period.this_year) - # The parameters hold California's share on top of the federal amount. - medical_facility_total = fbr.medical_facility + p.allowance.medical_care_facility - out_of_home_care_total = fbr.individual + p.allowance.out_of_home_care - - community_individual = fbr.individual + max_( - blind * p.blind.single, - aged_or_disabled - * where( - child, - p.dependent.amount, - p.aged_or_disabled.amount.single + no_cooking * p.allowance.food.single, - ), - ) - joint = ca_capi_couple_computation(person, period) - blind_count = where(joint, person.marital_unit.sum(blind), 2 * blind) - aged_or_disabled_count = where( - joint, person.marital_unit.sum(aged_or_disabled), 2 * aged_or_disabled + individual_rate, couple_rate = ca_state_supplement_rates( + person, period, parameters, joint ) - two_blind = (blind_count > 1) * p.blind.married.two_blind - one_blind = (blind_count == 1) * p.blind.married.one_blind - # NOTE: a couple with one aged or disabled member always has a blind - # member, whose rate is higher, so only two count here. - aged_or_disabled_couple = (aged_or_disabled_count > 1) * ( - p.aged_or_disabled.amount.married + no_cooking * p.allowance.food.married - ) - community_couple = fbr.couple + max_( - max_(two_blind, one_blind), aged_or_disabled_couple - ) - - # NOTE: the state shares before 2025 are the 1991 totals in WIC 12200 less - # the 1991 federal rates (issue 10480). - individual = select( - [medical_facility, out_of_home_care], - [medical_facility_total, out_of_home_care_total], - default=community_individual, + medical_facility = ca_in_title_xix_facility(person, period) + individual = individual_rate + where( + medical_facility, fbr.medical_facility, fbr.individual ) - couple_share = select( - [medical_facility, out_of_home_care], - [medical_facility_total, out_of_home_care_total], - default=community_couple / 2, + couple_federal = where(medical_facility, 2 * fbr.medical_facility, fbr.couple) + couple = couple_federal + where( + joint, person.marital_unit.sum(couple_rate / 2), couple_rate ) - couple = where(joint, person.marital_unit.sum(couple_share), 2 * couple_share) return individual, couple diff --git a/policyengine_us/variables/gov/states/ca/cdss/capi/ca_capi_person.py b/policyengine_us/variables/gov/states/ca/cdss/capi/ca_capi_person.py index 41a276700b5..4d785f63d29 100644 --- a/policyengine_us/variables/gov/states/ca/cdss/capi/ca_capi_person.py +++ b/policyengine_us/variables/gov/states/ca/cdss/capi/ca_capi_person.py @@ -4,10 +4,12 @@ ) from policyengine_us.variables.gov.states.ca.cdss.capi._ca_capi_ssi_ssp_standard import ( ca_capi_couple_computation, - ca_capi_in_title_xix_facility, ca_capi_spouse_ssi_ssp, ca_capi_ssi_ssp_standard, ) +from policyengine_us.variables.gov.states.ca.cdss.state_supplement._ca_state_supplement_rates import ( + ca_in_title_xix_facility, +) class ca_capi_person(Variable): @@ -53,7 +55,7 @@ def formula(person, period, parameters): # Deeming needs an ineligible spouse living in the same household # (20 CFR 416.1160(a)(1)), so a Title XIX facility resident counts # only their own income. - medical_facility = ca_capi_in_title_xix_facility(person, period) + medical_facility = ca_in_title_xix_facility(person, period) income = where(medical_facility, own_income, countable_income) # NOTE: the reduced-needs standards for another person's household are # not modeled (issue 7892), so those recipients get the diff --git a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/_ca_state_supplement_rates.py b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/_ca_state_supplement_rates.py new file mode 100644 index 00000000000..50f8380d6f2 --- /dev/null +++ b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/_ca_state_supplement_rates.py @@ -0,0 +1,103 @@ +from policyengine_us.model_api import * +from policyengine_us.variables.gov.ssa.ssi.eligibility.status.ssi_federal_living_arrangement import ( + SSIFederalLivingArrangement, +) + + +def ca_in_title_xix_facility(person, period): + """Whether a person lives in a Title XIX medical facility (MPP 49-050.26). + + Reads both the California input and SSI's living arrangement. + """ + arrangement = person("ssi_federal_living_arrangement", period) + return person("ca_in_medical_care_facility", period.this_year) | ( + arrangement == SSIFederalLivingArrangement.MEDICAL_TREATMENT_FACILITY + ) + + +def ca_state_supplement_rates(person, period, parameters, joint): + """Return a person's monthly state shares at the individual and couple rates. + + WIC 12200 sets one standard for each recipient or married couple, and the + living arrangement selects it (MPP 49-050.2; POMS SI 01415.058 B): + - Title XIX medical facility: the facility share alone (WIC 12200(h)). + - Non-medical out-of-home care: one share for every category, including + children (WIC 12200(g)). + - Independent living: the highest category the person or couple qualifies + for (POMS SI 01415.058 B.2 note). A blind child takes the blind share + (WIC 12200(a)), and a disabled child under 18 the disabled minor share + (WIC 12200(f)). The no-cooking allowance goes only with the aged or + disabled share (WIC 12200(e)), not the blind or disabled minor shares. + The couple rate is for the whole couple, and only a head or spouse has one. + Outside a joint computation the ineligible spouse takes the person's + category (POMS SI 01320.430 C.7). + NOTE: the household-of-another shares (POMS SI 01415.058 codes D, F and G) + are not modeled (issue 7892), so those recipients keep these shares. + NOTE: a child in a non-parent relative's home takes the out-of-home care + share (POMS SI 01415.058 B.1 code B) only with in_out_of_home_care_facility. + """ + p = parameters(period).gov.states.ca.cdss.state_supplement.payment_standard + fbr = parameters(period).gov.ssa.ssi.amount + age = person("monthly_age", period) + child = person("is_tax_unit_dependent", period.this_year) & ( + age < p.dependent.age_limit + ) + blind = person("is_blind", period.this_year) + aged_or_disabled = (age >= p.aged_or_disabled.age_threshold) | person( + "is_ssi_disabled", period.this_year + ) + # NOTE: living_arrangements_allow_for_food_preparation defaults to true + # and the microdata do not set it, so the no-cooking allowance (+$128.87 + # a month in 2026, +$257.74 for a couple) applies only when the input is + # set to false (issue 10296). + no_cooking = ~person.household( + "living_arrangements_allow_for_food_preparation", period.this_year + ) + medical_facility = ca_in_title_xix_facility(person, period) + out_of_home_care = person("in_out_of_home_care_facility", period.this_year) + + community_individual = max_( + blind * p.blind.single, + aged_or_disabled + * where( + child, + p.dependent.amount, + p.aged_or_disabled.amount.single + no_cooking * p.allowance.food.single, + ), + ) + individual = select( + [medical_facility, out_of_home_care], + [p.allowance.medical_care_facility, p.allowance.out_of_home_care], + default=community_individual, + ) + + head_or_spouse = person("is_tax_unit_head_or_spouse", period.this_year) + blind_count = where( + joint, person.marital_unit.sum(blind & head_or_spouse), 2 * blind + ) + aged_or_disabled_count = where( + joint, + person.marital_unit.sum(aged_or_disabled & head_or_spouse), + 2 * aged_or_disabled, + ) + two_blind = (blind_count > 1) * p.blind.married.two_blind + one_blind = (blind_count == 1) * p.blind.married.one_blind + # NOTE: a couple with one aged or disabled member always has a blind + # member, whose rate is higher, so only two count here. That couple gets no + # allowance. POMS code C adds the individual allowance for it; PolicyEngine + # follows the statute (ruled 2026-10-29, PR 10379 comment 6509402355). + aged_or_disabled_couple = (aged_or_disabled_count > 1) * ( + p.aged_or_disabled.amount.married + no_cooking * p.allowance.food.married + ) + community_couple = max_(max_(two_blind, one_blind), aged_or_disabled_couple) + # The couple out-of-home care total is twice the individual total, so its + # share moves with the federal rates (CDSS 2026 May Revision, page 26). + out_of_home_care_couple = ( + 2 * (fbr.individual + p.allowance.out_of_home_care) - fbr.couple + ) + couple = select( + [medical_facility, out_of_home_care], + [2 * p.allowance.medical_care_facility, out_of_home_care_couple], + default=community_couple, + ) + return individual, couple * head_or_spouse diff --git a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/ca_state_supplement.py b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/ca_state_supplement.py index ef86e4890a4..39c4ab94aea 100644 --- a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/ca_state_supplement.py +++ b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/ca_state_supplement.py @@ -1,10 +1,4 @@ from policyengine_us.model_api import * -from policyengine_us.variables.gov.ssa.ssi.eligibility.income._apply_ssi_exclusions import ( - _apply_ssi_exclusions, -) -from policyengine_us.variables.gov.states.ca.cdss.capi._ca_capi_ssi_ssp_standard import ( - ca_capi_ssi_ssp_standard, -) class ca_state_supplement(Variable): @@ -14,80 +8,5 @@ class ca_state_supplement(Variable): unit = USD definition_period = MONTH defined_for = StateCode.CA - reference = ( - "https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12200", - "https://www.law.cornell.edu/cfr/text/20/416.1160", - "https://www.law.cornell.edu/cfr/text/20/416.1161", - "https://www.law.cornell.edu/cfr/text/20/416.2025", - "https://www.cdss.ca.gov/Portals/9/CAPI/CAPI_Regulations-Accessible.pdf#page=25", - ) - - def formula(spm_unit, period, parameters): - payment_standard = spm_unit("ca_state_supplement_payment_standard", period) - ssi = add(spm_unit, period, ["ssi"]) - person = spm_unit.members - # SSI/SSP counts another member's income only when it is deemed - # (20 CFR 416.1160(a)), and CAPI budgets its own members' income (CAPI - # regulations MPP 49-035), so the income of a member who fails SSI's - # citizen or qualified-noncitizen test is not counted. - 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 - # SSA treats a spouse who fails that test as an ineligible spouse (20 - # CFR 416.1160(d)). If the spouse receives CAPI, none of the income - # counted for CAPI is deemed (20 CFR 416.1161(a)(2)-(3)), so the - # recipient's own income counts, not half of the couple's. Otherwise - # the spouse's income is deemed (20 CFR 416.1163, 416.2025(b)(3)). - # Taking the lesser of the individual and couple totals gives both: - # it equals own income whenever the spouse would receive CAPI. - # NOTE: POMS SI 01320.430 D takes the lesser of each part separately; - # the totals keep CAPI at zero when the spouse's income is deemed. - # NOTE: SSI couple status ignores SSI's noncitizen test, so the - # model's SSI is still the couple computation (issue 10481). - head_or_spouse = person("is_tax_unit_head_or_spouse", period.this_year) - # 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 - ) - earned = max_( - person("ssi_earned_income", period.this_year) - - person( - "ssi_blind_or_disabled_working_student_exclusion", period.this_year - ), - 0, - ) - # NOTE: in-kind support uses the couple's presumed maximum value here, - # because SSI still treats the pair as a couple. - unearned = person("ssi_unearned_income", period.this_year) + person( - "ssi_in_kind_support_and_maintenance", period.this_year - ) - # _apply_ssi_exclusions takes and returns annual amounts. - own_countable_income = ( - _apply_ssi_exclusions(earned, unearned, parameters, period) / MONTHS_IN_YEAR - ) - ssi_countable_income = person("ssi_countable_income", period) - couple_income = person.marital_unit.sum(ssi_countable_income) - individual_standard, couple_standard = ca_capi_ssi_ssp_standard( - person, period, parameters - ) - mixed_countable_income = max_( - own_countable_income, - couple_income - (couple_standard - individual_standard), - ) - person_countable_income = where( - in_mixed_couple, mixed_countable_income, ssi_countable_income - ) - countable_income = spm_unit.sum( - where(meets_ssi_immigration_test, person_countable_income, 0) - ) - return max_(0, payment_standard - ssi - countable_income) + reference = "https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12200" + adds = ["ca_state_supplement_person"] diff --git a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/ca_state_supplement_eligible_person.py b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/ca_state_supplement_eligible_person.py index c4852874796..12168811c62 100644 --- a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/ca_state_supplement_eligible_person.py +++ b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/ca_state_supplement_eligible_person.py @@ -7,18 +7,9 @@ class ca_state_supplement_eligible_person(Variable): label = "California SSI state supplement eligible person" definition_period = MONTH defined_for = StateCode.CA - reference = "https://law.justia.com/codes/california/code-wic/division-9/part-3/chapter-3/article-4/" + reference = "https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12150" def formula(person, period, parameters): - meets_resource_test = person("meets_ssi_resource_test", period) - aged_blind_disabled = person("is_ssi_aged_blind_disabled", period) - is_qualified_noncitizen = person("is_ssi_qualified_noncitizen", period) - immigration_status = person("immigration_status", period.this_year) - is_citizen = immigration_status == immigration_status.possible_values.CITIZEN - is_head_or_spouse = person("is_tax_unit_head_or_spouse", period) - return ( - meets_resource_test - & aged_blind_disabled - & (is_qualified_noncitizen | is_citizen) - & is_head_or_spouse - ) + # WIC 12150 entitles people who receive SSI or "who but for their + # income" could, which is SSI eligibility without its income test. + return person("is_ssi_eligible", period) diff --git a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/ca_state_supplement_person.py b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/ca_state_supplement_person.py new file mode 100644 index 00000000000..5b426c85bb2 --- /dev/null +++ b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/ca_state_supplement_person.py @@ -0,0 +1,102 @@ +from policyengine_us.model_api import * +from policyengine_us.variables.gov.ssa.ssi._ssi_state_supplement import ( + ssi_state_supplement, +) +from policyengine_us.variables.gov.ssa.ssi.eligibility.income._apply_ssi_exclusions import ( + _apply_ssi_exclusions, +) +from policyengine_us.variables.gov.states.ca.cdss.capi._ca_capi_ssi_ssp_standard import ( + ca_capi_ssi_ssp_standard, +) +from policyengine_us.variables.gov.states.ca.cdss.state_supplement._ca_state_supplement_rates import ( + ca_state_supplement_rates, +) + + +class ca_state_supplement_person(Variable): + value_type = float + entity = Person + label = "California state supplement per person" + unit = USD + definition_period = MONTH + defined_for = "ca_state_supplement_eligible_person" + reference = ( + "https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12200", + "https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415058", + "https://www.law.cornell.edu/cfr/text/20/416.1160", + "https://www.law.cornell.edu/cfr/text/20/416.1161", + "https://www.law.cornell.edu/cfr/text/20/416.2025", + "https://www.cdss.ca.gov/Portals/9/CAPI/CAPI_Regulations-Accessible.pdf#page=25", + ) + + def formula(person, period, parameters): + joint = person("ssi_couple_computation_applies", period) + individual_rate, couple_rate = ca_state_supplement_rates( + person, period, parameters, joint + ) + # SSA administers the supplement, so the federal income, couple, + # deeming and rounding rules apply (POMS SI 01415.058 A). + payment = ssi_state_supplement( + person, period, parameters, individual_rate, couple_rate + ) + + # SSA treats a spouse who fails SSI's citizen or qualified-noncitizen + # test as an ineligible spouse (20 CFR 416.1160(d)), but SSI couple + # status ignores that test (issue 10481). So the model's SSI is the + # couple computation, and the supplement makes up the rest of the + # recipient's individual standard. If the spouse receives CAPI, none of + # the income counted for CAPI is deemed (20 CFR 416.1161(a)(2)-(3)), so + # the recipient's own income counts, not half of the couple's. Otherwise + # the spouse's income is deemed (20 CFR 416.1163, 416.2025(b)(3)). + # Taking the lesser of the individual and couple totals gives both: + # it equals own income whenever the spouse would receive CAPI. + # NOTE: POMS SI 01320.430 D takes the lesser of each part separately; + # the totals keep CAPI at zero when the spouse's income is deemed. + 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 + ) + head_or_spouse = person("is_tax_unit_head_or_spouse", period.this_year) + fails_test = ~(is_citizen | is_qualified_noncitizen) & head_or_spouse + # 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 = joint & ( + person.marital_unit.sum(capi_eligible & head_or_spouse) > 0 + ) + split_couple = spouse_capi_eligible | ( + joint & (person.marital_unit.sum(fails_test) > 0) + ) + earned = max_( + person("ssi_earned_income", period.this_year) + - person( + "ssi_blind_or_disabled_working_student_exclusion", period.this_year + ), + 0, + ) + # NOTE: in-kind support uses the couple's presumed maximum value here, + # because SSI still treats the pair as a couple. + unearned = person("ssi_unearned_income", period.this_year) + person( + "ssi_in_kind_support_and_maintenance", period.this_year + ) + # _apply_ssi_exclusions takes and returns annual amounts. + own_countable_income = ( + _apply_ssi_exclusions(earned, unearned, parameters, period) / MONTHS_IN_YEAR + ) + ssi_countable_income = person("ssi_countable_income", period) + couple_income = person.marital_unit.sum(ssi_countable_income) + individual_standard, couple_standard = ca_capi_ssi_ssp_standard( + person, period, parameters + ) + mixed_countable_income = max_( + own_countable_income, + couple_income - (couple_standard - individual_standard), + ) + countable_income = where( + spouse_capi_eligible, mixed_countable_income, ssi_countable_income + ) + split_payment = max_( + individual_standard - person("ssi", period) - countable_income, 0 + ) * person("takes_up_ssi_if_eligible", period.this_year) + return where(split_couple, split_payment, payment) diff --git a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_aged_blind_disabled_amount.py b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_aged_blind_disabled_amount.py deleted file mode 100644 index f7b5ec961eb..00000000000 --- a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_aged_blind_disabled_amount.py +++ /dev/null @@ -1,18 +0,0 @@ -from policyengine_us.model_api import * - - -class ca_state_supplement_aged_blind_disabled_amount(Variable): - value_type = float - entity = SPMUnit - label = "California SSI state supplement aged disabled and blind amount" - unit = USD - definition_period = MONTH - defined_for = StateCode.CA - reference = "https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12200" - - def formula(spm_unit, period, parameters): - blind_amount = spm_unit("ca_state_supplement_blind_amount", period) - aged_disabled_amount = spm_unit( - "ca_state_supplement_aged_disabled_amount", period - ) - return max_(blind_amount, aged_disabled_amount) diff --git a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_aged_disabled_amount.py b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_aged_disabled_amount.py deleted file mode 100644 index b5666e4efbb..00000000000 --- a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_aged_disabled_amount.py +++ /dev/null @@ -1,26 +0,0 @@ -from policyengine_us.model_api import * - - -class ca_state_supplement_aged_disabled_amount(Variable): - value_type = float - entity = SPMUnit - label = "California SSI state supplement aged disabled amount" - unit = USD - definition_period = MONTH - defined_for = "ca_state_supplement_aged_disabled_count" - reference = "https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12200" - - def formula(spm_unit, period, parameters): - p = parameters( - period - ).gov.states.ca.cdss.state_supplement.payment_standard.aged_or_disabled.amount - fbr = parameters(period).gov.ssa.ssi.amount - # Aged or disabled amount - aged_disabled_count = spm_unit( - "ca_state_supplement_aged_disabled_count", period - ) - return select( - [aged_disabled_count > 1, aged_disabled_count == 1], - [fbr.couple + p.married, fbr.individual + p.single], - default=0, - ) diff --git a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_aged_disabled_count.py b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_aged_disabled_count.py deleted file mode 100644 index ec310240c41..00000000000 --- a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_aged_disabled_count.py +++ /dev/null @@ -1,21 +0,0 @@ -from policyengine_us.model_api import * - - -class ca_state_supplement_aged_disabled_count(Variable): - value_type = int - entity = SPMUnit - label = "California SSI state supplement aged or disabled count" - definition_period = MONTH - defined_for = StateCode.CA - reference = "https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12200" - - def formula(spm_unit, period, parameters): - p = parameters(period).gov.states.ca.cdss.state_supplement.payment_standard - person = spm_unit.members - # Aged or disabled amount - is_ssi_disabled = person("is_ssi_disabled", period.this_year) - age = person("monthly_age", period) - is_aged = age >= p.aged_or_disabled.age_threshold - aged_or_disabled = is_aged | is_ssi_disabled - eligible = person("ca_state_supplement_eligible_person", period) - return spm_unit.sum(aged_or_disabled * eligible) diff --git a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_blind_amount.py b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_blind_amount.py deleted file mode 100644 index 780f37186cc..00000000000 --- a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_blind_amount.py +++ /dev/null @@ -1,34 +0,0 @@ -from policyengine_us.model_api import * - - -class ca_state_supplement_blind_amount(Variable): - value_type = float - entity = SPMUnit - label = "California SSI state supplement blind amount" - unit = USD - definition_period = MONTH - defined_for = StateCode.CA - reference = "https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12200" - - def formula(spm_unit, period, parameters): - p = parameters(period).gov.states.ca.cdss.state_supplement.payment_standard - fbr = parameters(period).gov.ssa.ssi.amount - person = spm_unit.members - head_or_spouse = person("is_tax_unit_head_or_spouse", period) - # Blind amount - blind = person("is_blind", period) * head_or_spouse - eligible = person("ca_state_supplement_eligible_person", period) - blind_count = spm_unit.sum(blind * eligible) - is_married = spm_unit("spm_unit_is_married", period) - blind_married_amount = select( - [blind_count >= 2, blind_count == 1], - [ - fbr.couple + p.blind.married.two_blind, - fbr.couple + p.blind.married.one_blind, - ], - default=0, - ) - total_amount_if_eligible = where( - is_married, blind_married_amount, fbr.individual + p.blind.single - ) - return where(blind_count == 0, 0, total_amount_if_eligible) diff --git a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_dependent_amount.py b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_dependent_amount.py deleted file mode 100644 index e8567b497dd..00000000000 --- a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_dependent_amount.py +++ /dev/null @@ -1,37 +0,0 @@ -from policyengine_us.model_api import * - - -class ca_state_supplement_dependent_amount(Variable): - value_type = float - entity = SPMUnit - label = "California SSI state supplement dependent amount" - unit = USD - definition_period = MONTH - defined_for = StateCode.CA - reference = "https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12200" - - def formula(spm_unit, period, parameters): - p = parameters(period).gov.states.ca.cdss.state_supplement.payment_standard - fbr = parameters(period).gov.ssa.ssi.amount - person = spm_unit.members - # Blind amount - blind = person("is_blind", period) - is_ssi_disabled = person("is_ssi_disabled", period.this_year) - age = person("monthly_age", period) - # Dependent amount - dependent = person("is_tax_unit_dependent", period) - dependent_age_eligible = age < p.dependent.age_limit - # 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 - ) - return dependent_count * (fbr.individual + p.dependent.amount) diff --git a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_food_allowance.py b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_food_allowance.py deleted file mode 100644 index b7c3e9adeea..00000000000 --- a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_food_allowance.py +++ /dev/null @@ -1,49 +0,0 @@ -from policyengine_us.model_api import * - - -class ca_state_supplement_food_allowance(Variable): - value_type = float - entity = SPMUnit - label = "California SSI state supplement food allowance above the blind amount" - documentation = ( - "The part of the no-cooking (restaurant meals) allowance that lifts the " - "aged or disabled amount above the blind amount, since California pays " - "the higher of the two. It is the full allowance unless the unit's blind " - "amount is higher than its aged or disabled amount." - ) - unit = USD - definition_period = MONTH - defined_for = "ca_state_supplement_food_allowance_eligible" - reference = ( - "https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12200", - "https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415058", - ) - - def formula(spm_unit, period, parameters): - p = parameters(period).gov.states.ca.cdss.state_supplement.payment_standard - is_married = spm_unit("spm_unit_is_married", period) - aged_disabled_count = spm_unit( - "ca_state_supplement_aged_disabled_count", period - ) - # Food allowance amount - allowance = where( - is_married & (aged_disabled_count == 2), - p.allowance.food.married, - p.allowance.food.single, - ) - # WIC 12200(e) adds the allowance only to the aged or disabled amount - # under (c) or (d), not to the blind amounts under (a) or (b), and - # California pays the highest category (POMS SI 01415.058 B.2.a note). - # So the allowance counts only as far as it lifts the aged or disabled - # amount above the blind amount; a couple of an aged person and a blind - # person who is neither aged nor disabled gets none. POMS code C adds - # the individual allowance for that couple; PolicyEngine follows the - # statute (ruled 2026-10-29, PR 10379 comment 6509402355). - aged_disabled_amount = spm_unit( - "ca_state_supplement_aged_disabled_amount", period - ) - # The higher of the blind and the aged or disabled amounts. - aged_blind_disabled_amount = spm_unit( - "ca_state_supplement_aged_blind_disabled_amount", period - ) - return max_(aged_disabled_amount + allowance - aged_blind_disabled_amount, 0) diff --git a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_food_allowance_eligible.py b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_food_allowance_eligible.py deleted file mode 100644 index d399621b1a7..00000000000 --- a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_food_allowance_eligible.py +++ /dev/null @@ -1,21 +0,0 @@ -from policyengine_us.model_api import * - - -class ca_state_supplement_food_allowance_eligible(Variable): - value_type = bool - entity = SPMUnit - label = "California SSI state supplement food allowance eligible" - definition_period = MONTH - defined_for = StateCode.CA - reference = "https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12200" - - def formula(spm_unit, period, parameters): - living_arrangements_allow_for_food_preparation = spm_unit.household( - "living_arrangements_allow_for_food_preparation", period - ) - aged_disabled_count = spm_unit( - "ca_state_supplement_aged_disabled_count", period - ) - return ( - aged_disabled_count > 0 - ) & ~living_arrangements_allow_for_food_preparation diff --git a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_medical_care_facility_amount.py b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_medical_care_facility_amount.py deleted file mode 100644 index 3cf38b11706..00000000000 --- a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_medical_care_facility_amount.py +++ /dev/null @@ -1,23 +0,0 @@ -from policyengine_us.model_api import * - - -class ca_state_supplement_medical_care_facility_amount(Variable): - value_type = float - entity = SPMUnit - label = "California SSI state supplement medical care facility amount" - unit = USD - definition_period = MONTH - defined_for = StateCode.CA - reference = "https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12200" - - def formula(spm_unit, period, parameters): - p = parameters(period).gov.states.ca.cdss.state_supplement.payment_standard - fbr = parameters(period).gov.ssa.ssi.amount - # Medical care facility amount - person = spm_unit.members - eligible = person("ca_state_supplement_eligible_person", period) - in_medical_care_facility = person("ca_in_medical_care_facility", period) - medical_care_facility_count = spm_unit.sum(in_medical_care_facility * eligible) - return medical_care_facility_count * ( - fbr.medical_facility + p.allowance.medical_care_facility - ) diff --git a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_out_of_home_care_facility_amount.py b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_out_of_home_care_facility_amount.py deleted file mode 100644 index 728a40ba079..00000000000 --- a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_out_of_home_care_facility_amount.py +++ /dev/null @@ -1,27 +0,0 @@ -from policyengine_us.model_api import * - - -class ca_state_supplement_out_of_home_care_facility_amount(Variable): - value_type = float - entity = SPMUnit - label = "California SSI state supplement out of home care facility amount" - unit = USD - definition_period = MONTH - defined_for = StateCode.CA - reference = "https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12200" - - def formula(spm_unit, period, parameters): - p = parameters(period).gov.states.ca.cdss.state_supplement.payment_standard - fbr = parameters(period).gov.ssa.ssi.amount - person = spm_unit.members - eligible = person("ca_state_supplement_eligible_person", period) - in_out_of_home_care_facility = person("in_out_of_home_care_facility", period) - out_of_home_care_facility_count = spm_unit.sum( - in_out_of_home_care_facility * eligible - ) - # The couple out-of-home care total is twice the individual total, and - # this amount is what it adds to the aged or disabled couple total. - individual_total = fbr.individual + p.allowance.out_of_home_care - aged_or_disabled_couple_total = fbr.couple + p.aged_or_disabled.amount.married - allowance = 2 * individual_total - aged_or_disabled_couple_total - return out_of_home_care_facility_count * allowance diff --git a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_payment_standard.py b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_payment_standard.py deleted file mode 100644 index c6958e27f3b..00000000000 --- a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_payment_standard.py +++ /dev/null @@ -1,19 +0,0 @@ -from policyengine_us.model_api import * - - -class ca_state_supplement_payment_standard(Variable): - value_type = float - entity = SPMUnit - label = "California SSI state supplement payment standard" - unit = USD - definition_period = MONTH - defined_for = StateCode.CA - reference = "https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12200" - - adds = [ - "ca_state_supplement_dependent_amount", - "ca_state_supplement_food_allowance", - "ca_state_supplement_medical_care_facility_amount", - "ca_state_supplement_out_of_home_care_facility_amount", - "ca_state_supplement_aged_blind_disabled_amount", - ] From f73dfbd1f42b5381dab526333a7db1921e446ea8 Mon Sep 17 00:00:00 2001 From: Ziming Date: Tue, 3 Nov 2026 16:55:16 -0500 Subject: [PATCH 3/6] Date California's state shares and food allowances from January 2013 Use the levels in SSA POMS SI 01415.045-.056 for 2013-2024 instead of carrying the 1991 shares forward, restate the 2019 and 2024 test values, add the June 2019 CAPI pension case, and fix the out-of-home care citation. Co-Authored-By: Claude Opus 5.5 --- .../ca-ssp-state-share-parameters.changed.md | 2 +- .../aged_or_disabled/amount/married.yaml | 19 ++++++- .../aged_or_disabled/amount/single.yaml | 19 ++++++- .../allowance/food/married.yaml | 16 ++++++ .../allowance/food/single.yaml | 16 ++++++ .../allowance/medical_care_facility.yaml | 19 ++++++- .../allowance/out_of_home_care.yaml | 23 +++++++-- .../blind/married/one_blind.yaml | 19 ++++++- .../blind/married/two_blind.yaml | 19 ++++++- .../payment_standard/blind/single.yaml | 19 ++++++- .../payment_standard/dependent/amount.yaml | 19 ++++++- .../gov/states/ca/cdss/capi/ca_capi.yaml | 17 +++---- .../cdss/capi/ca_capi_payment_standard.yaml | 50 ++++++++----------- .../states/ca/cdss/capi/ca_capi_person.yaml | 39 +++++++++++++-- .../state_supplement/ca_state_supplement.yaml | 4 +- ...state_supplement_aged_disabled_amount.yaml | 9 ++-- .../ca_state_supplement_blind_amount.yaml | 3 +- .../ca_state_supplement_dependent_amount.yaml | 8 +-- .../ca_state_supplement_food_allowance.yaml | 9 ++-- ...pplement_medical_care_facility_amount.yaml | 2 +- ...ment_out_of_home_care_facility_amount.yaml | 3 +- .../ca/cdss/state_supplement/integration.yaml | 18 ++++--- .../ca/cdss/capi/_ca_capi_ssi_ssp_standard.py | 2 +- 23 files changed, 270 insertions(+), 84 deletions(-) diff --git a/changelog.d/ca-ssp-state-share-parameters.changed.md b/changelog.d/ca-ssp-state-share-parameters.changed.md index 36f96045bdf..5edc51c4683 100644 --- a/changelog.d/ca-ssp-state-share-parameters.changed.md +++ b/changelog.d/ca-ssp-state-share-parameters.changed.md @@ -1 +1 @@ -Store California's state supplement payment standards as state shares on top of the federal benefit rate, so the standards follow each federal cost-of-living adjustment. +Store California's state supplement payment standards as state shares on top of the federal benefit rate, so the standards follow each federal cost-of-living adjustment, and date the shares and food allowances from January 2013 using the levels SSA POMS lists for each year. diff --git a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/aged_or_disabled/amount/married.yaml b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/aged_or_disabled/amount/married.yaml index c0511459131..0af615d7c80 100644 --- a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/aged_or_disabled/amount/married.yaml +++ b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/aged_or_disabled/amount/married.yaml @@ -14,9 +14,24 @@ metadata: href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415058#b2b - title: SSA POMS SI 01415.057 - Federally Administered Optional Supplementary Payment Programs for January 2025, California couple payment levels href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415057#b2b + - title: SSA POMS SI 01415.056 - Federally Administered Optional Supplementary Payment Programs for January 2024, California couple payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415056#b2b + - title: SSA POMS SI 01415.045 - Federally Administered Optional Supplementary Payment Programs for January 2013, California couple payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415045#b2b + - title: SSA POMS SI 01415.049 - Federally Administered Optional Supplementary Payment Programs for January 2017, California couple payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415049#b2b + - title: SSA POMS SI 01415.054 - Federally Administered Optional Supplementary Payment Programs for January 2022, California couple payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415054#b2b + - title: SSA POMS SI 01415.055 - Federally Administered Optional Supplementary Payment Programs for January 2023, California couple payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415055#b2b - title: "California Department of Social Services, Local Assistance Estimates, 2026 May Revision reference documents, SSI/SSP Payment Standards #page 26-27" href: https://cdss.ca.gov/Portals/9/Additional-Resources/Fiscal-and-Financial-Information/LOcal-Assistance-Estimates/2026-27/Revisions/2026-may-revision-reference-documents.pdf#page=26 values: 1991-01-01: 557 # $1,167 - $610 - # The share holds for January 2025 and 2026, and CDSS projects it for January 2027. - 2025-01-01: 607.83 + # Shares for 1992 through 2012 are not added yet, so the 1991 share carries forward (issue 10480). + 2013-01-01: 396.2 + 2017-01-01: 407.14 + 2022-01-01: 504.64 + 2023-01-01: 556.62 + # The share holds for January 2024 through 2026, and CDSS projects it for January 2027. + 2024-01-01: 607.83 diff --git a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/aged_or_disabled/amount/single.yaml b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/aged_or_disabled/amount/single.yaml index a29a24b54d5..8c9d863511a 100644 --- a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/aged_or_disabled/amount/single.yaml +++ b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/aged_or_disabled/amount/single.yaml @@ -14,9 +14,24 @@ metadata: href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415058#b2a - title: SSA POMS SI 01415.057 - Federally Administered Optional Supplementary Payment Programs for January 2025, California recipient payment levels href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415057#b2a + - title: SSA POMS SI 01415.056 - Federally Administered Optional Supplementary Payment Programs for January 2024, California recipient payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415056#b2a + - title: SSA POMS SI 01415.045 - Federally Administered Optional Supplementary Payment Programs for January 2013, California recipient payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415045#b2a + - title: SSA POMS SI 01415.049 - Federally Administered Optional Supplementary Payment Programs for January 2017, California recipient payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415049#b2a + - title: SSA POMS SI 01415.054 - Federally Administered Optional Supplementary Payment Programs for January 2022, California recipient payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415054#b2a + - title: SSA POMS SI 01415.055 - Federally Administered Optional Supplementary Payment Programs for January 2023, California recipient payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415055#b2a - title: "California Department of Social Services, Local Assistance Estimates, 2026 May Revision reference documents, SSI/SSP Payment Standards #page 26-27" href: https://cdss.ca.gov/Portals/9/Additional-Resources/Fiscal-and-Financial-Information/LOcal-Assistance-Estimates/2026-27/Revisions/2026-may-revision-reference-documents.pdf#page=26 values: 1991-01-01: 223 # $630 - $407 - # The share holds for January 2025 and 2026, and CDSS projects it for January 2027. - 2025-01-01: 239.94 + # Shares for 1992 through 2012 are not added yet, so the 1991 share carries forward (issue 10480). + 2013-01-01: 156.4 + 2017-01-01: 160.72 + 2022-01-01: 199.21 + 2023-01-01: 219.73 + # The share holds for January 2024 through 2026, and CDSS projects it for January 2027. + 2024-01-01: 239.94 diff --git a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/allowance/food/married.yaml b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/allowance/food/married.yaml index bcbb10ca8f8..b2eb8217807 100644 --- a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/allowance/food/married.yaml +++ b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/allowance/food/married.yaml @@ -12,7 +12,23 @@ metadata: href: https://cdss.ca.gov/Portals/13/SHD/ParaRegIndex/SSI%20Monthly%20Payment%20Amounts%202026.pdf - title: SSA POMS SI 01415.058 - Federally Administered Optional Supplementary Payment Programs for January 2026, California couple payment levels href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415058#b2b + - title: SSA POMS SI 01415.056 - Federally Administered Optional Supplementary Payment Programs for January 2024, California couple payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415056#b2b + - title: SSA POMS SI 01415.045 - Federally Administered Optional Supplementary Payment Programs for January 2013, California couple payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415045#b2b + - title: SSA POMS SI 01415.049 - Federally Administered Optional Supplementary Payment Programs for January 2017, California couple payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415049#b2b + - title: SSA POMS SI 01415.054 - Federally Administered Optional Supplementary Payment Programs for January 2022, California couple payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415054#b2b + - title: SSA POMS SI 01415.055 - Federally Administered Optional Supplementary Payment Programs for January 2023, California couple payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415055#b2b values: 1991-01-01: 136 + # Allowances for 1992 through 2012 are not added yet, so the 1991 allowance carries forward (issue 10480). + 2013-01-01: 168 # $1,630.20 - $1,462.20 + 2017-01-01: 172.63 # $1,682.77 - $1,510.14 + 2022-01-01: 213.99 # $1,979.63 - $1,765.64 + 2023-01-01: 236.03 # $2,163.65 - $1,927.62 + 2024-01-01: 257.74 # $2,280.57 - $2,022.83 2025-01-01: 257.74 # $2,315.57 - $2,057.83 2026-01-01: 257.74 # $2,356.57 - $2,098.83 diff --git a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/allowance/food/single.yaml b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/allowance/food/single.yaml index 955f20b272f..497ecfea87a 100644 --- a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/allowance/food/single.yaml +++ b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/allowance/food/single.yaml @@ -12,7 +12,23 @@ metadata: href: https://cdss.ca.gov/Portals/13/SHD/ParaRegIndex/SSI%20Monthly%20Payment%20Amounts%202026.pdf - title: SSA POMS SI 01415.058 - Federally Administered Optional Supplementary Payment Programs for January 2026, California recipient payment levels href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415058#b2a + - title: SSA POMS SI 01415.056 - Federally Administered Optional Supplementary Payment Programs for January 2024, California recipient payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415056#b2a + - title: SSA POMS SI 01415.045 - Federally Administered Optional Supplementary Payment Programs for January 2013, California recipient payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415045#b2a + - title: SSA POMS SI 01415.049 - Federally Administered Optional Supplementary Payment Programs for January 2017, California recipient payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415049#b2a + - title: SSA POMS SI 01415.054 - Federally Administered Optional Supplementary Payment Programs for January 2022, California recipient payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415054#b2a + - title: SSA POMS SI 01415.055 - Federally Administered Optional Supplementary Payment Programs for January 2023, California recipient payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415055#b2a values: 1991-01-01: 68 + # Allowances for 1992 through 2012 are not added yet, so the 1991 allowance carries forward (issue 10480). + 2013-01-01: 84 # $950.40 - $866.40 + 2017-01-01: 86.32 # $982.04 - $895.72 + 2022-01-01: 106.99 # $1,147.20 - $1,040.21 + 2023-01-01: 118.01 # $1,251.74 - $1,133.73 + 2024-01-01: 128.87 # $1,311.81 - $1,182.94 2025-01-01: 128.87 # $1,335.81 - $1,206.94 2026-01-01: 128.87 # $1,362.81 - $1,233.94 diff --git a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/allowance/medical_care_facility.yaml b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/allowance/medical_care_facility.yaml index 817f4e7694a..1c71758d2ab 100644 --- a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/allowance/medical_care_facility.yaml +++ b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/allowance/medical_care_facility.yaml @@ -14,9 +14,24 @@ metadata: href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415058#b2a - title: SSA POMS SI 01415.057 - Federally Administered Optional Supplementary Payment Programs for January 2025, California recipient payment levels href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415057#b2a + - title: SSA POMS SI 01415.056 - Federally Administered Optional Supplementary Payment Programs for January 2024, California recipient payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415056#b2a + - title: SSA POMS SI 01415.045 - Federally Administered Optional Supplementary Payment Programs for January 2013, California recipient payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415045#b2a + - title: SSA POMS SI 01415.049 - Federally Administered Optional Supplementary Payment Programs for January 2017, California recipient payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415049#b2a + - title: SSA POMS SI 01415.054 - Federally Administered Optional Supplementary Payment Programs for January 2022, California recipient payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415054#b2a + - title: SSA POMS SI 01415.055 - Federally Administered Optional Supplementary Payment Programs for January 2023, California recipient payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415055#b2a - title: "California Department of Social Services, Local Assistance Estimates, 2026 May Revision reference documents, SSI/SSP Payment Standards #page 26-27" href: https://cdss.ca.gov/Portals/9/Additional-Resources/Fiscal-and-Financial-Information/LOcal-Assistance-Estimates/2026-27/Revisions/2026-may-revision-reference-documents.pdf#page=26 values: 1991-01-01: 12 # $42 - $30 - # The share holds for January 2025 and 2026, and CDSS projects it for January 2027. - 2025-01-01: 32 + # Shares for 1992 through 2012 are not added yet, so the 1991 share carries forward (issue 10480). + 2013-01-01: 20 + 2017-01-01: 21 + 2022-01-01: 26 + 2023-01-01: 29 + # The share holds for January 2024 through 2026, and CDSS projects it for January 2027. + 2024-01-01: 32 diff --git a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/allowance/out_of_home_care.yaml b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/allowance/out_of_home_care.yaml index e6e1f555c6f..a2734c8e466 100644 --- a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/allowance/out_of_home_care.yaml +++ b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/allowance/out_of_home_care.yaml @@ -10,18 +10,33 @@ metadata: href: https://www.ssa.gov/pubs/EN-05-11125.pdf#page=2 - title: California Department of Social Services, SSI Total Monthly Payment Amounts 2026 href: https://cdss.ca.gov/Portals/13/SHD/ParaRegIndex/SSI%20Monthly%20Payment%20Amounts%202026.pdf - - title: SSA POMS SI 01415.058 - Federally Administered Optional Supplementary Payment Programs for January 2026, California couple payment levels - href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415058#b2b + - title: SSA POMS SI 01415.058 - Federally Administered Optional Supplementary Payment Programs for January 2026, California recipient payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415058#b2a - title: California Department of Social Services, All County Information Notice I-59-25, CAPI payment standards for January 2026 href: https://cdss.ca.gov/Portals/9/Additional-Resources/Letters-and-Notices/ACINs/2025/I-59_25.pdf#page=5 - title: SSA POMS SI 01415.057 - Federally Administered Optional Supplementary Payment Programs for January 2025, California recipient payment levels href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415057#b2a + - title: SSA POMS SI 01415.056 - Federally Administered Optional Supplementary Payment Programs for January 2024, California recipient payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415056#b2a + - title: SSA POMS SI 01415.045 - Federally Administered Optional Supplementary Payment Programs for January 2013, California recipient payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415045#b2a + - title: SSA POMS SI 01415.049 - Federally Administered Optional Supplementary Payment Programs for January 2017, California recipient payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415049#b2a + - title: SSA POMS SI 01415.054 - Federally Administered Optional Supplementary Payment Programs for January 2022, California recipient payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415054#b2a + - title: SSA POMS SI 01415.055 - Federally Administered Optional Supplementary Payment Programs for January 2023, California recipient payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415055#b2a - title: "California Department of Social Services, Local Assistance Estimates, 2026 May Revision reference documents, SSI/SSP Payment Standards #page 26-27" href: https://cdss.ca.gov/Portals/9/Additional-Resources/Fiscal-and-Financial-Information/LOcal-Assistance-Estimates/2026-27/Revisions/2026-may-revision-reference-documents.pdf#page=26 values: 1991-01-01: 302 # $709 - $407 + # Shares for 1992 through 2012 are not added yet, so the 1991 share carries forward (issue 10480). + 2013-01-01: 412 + 2017-01-01: 423.37 + 2022-01-01: 524.77 + 2023-01-01: 578.82 # SSA POMS, the CDSS 2026 May Revision and ACIN I-59-25 list $3,252.14 for couples, # twice the $1,626.07 individual rate (WIC 12200(g) sets the amount per recipient). # The CDSS monthly payment table and SSA pamphlet EN-05-11125 list $3,239.14. - # The share holds for January 2025 and 2026, and CDSS projects it for January 2027. - 2025-01-01: 632.07 + # The share holds for January 2024 through 2026, and CDSS projects it for January 2027. + 2024-01-01: 632.07 diff --git a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/blind/married/one_blind.yaml b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/blind/married/one_blind.yaml index 69fc3213546..e8a52566502 100644 --- a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/blind/married/one_blind.yaml +++ b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/blind/married/one_blind.yaml @@ -14,9 +14,24 @@ metadata: href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415058#b2b - title: SSA POMS SI 01415.057 - Federally Administered Optional Supplementary Payment Programs for January 2025, California couple payment levels href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415057#b2b + - title: SSA POMS SI 01415.056 - Federally Administered Optional Supplementary Payment Programs for January 2024, California couple payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415056#b2b + - title: SSA POMS SI 01415.045 - Federally Administered Optional Supplementary Payment Programs for January 2013, California couple payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415045#b2b + - title: SSA POMS SI 01415.049 - Federally Administered Optional Supplementary Payment Programs for January 2017, California couple payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415049#b2b + - title: SSA POMS SI 01415.054 - Federally Administered Optional Supplementary Payment Programs for January 2022, California couple payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415054#b2b + - title: SSA POMS SI 01415.055 - Federally Administered Optional Supplementary Payment Programs for January 2023, California couple payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415055#b2b - title: "California Department of Social Services, Local Assistance Estimates, 2026 May Revision reference documents, SSI/SSP Payment Standards #page 26-27" href: https://cdss.ca.gov/Portals/9/Additional-Resources/Fiscal-and-Financial-Information/LOcal-Assistance-Estimates/2026-27/Revisions/2026-may-revision-reference-documents.pdf#page=26 values: 1991-01-01: 685 # $1,295 - $610 - # The share holds for January 2025 and 2026, and CDSS projects it for January 2027. - 2025-01-01: 747.44 + # Shares for 1992 through 2012 are not added yet, so the 1991 share carries forward (issue 10480). + 2013-01-01: 487.2 + 2017-01-01: 500.65 + 2022-01-01: 620.55 + 2023-01-01: 684.47 + # The share holds for January 2024 through 2026, and CDSS projects it for January 2027. + 2024-01-01: 747.44 diff --git a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/blind/married/two_blind.yaml b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/blind/married/two_blind.yaml index 1d712307fb9..f42b00b494e 100644 --- a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/blind/married/two_blind.yaml +++ b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/blind/married/two_blind.yaml @@ -14,9 +14,24 @@ metadata: href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415058#b2b - title: SSA POMS SI 01415.057 - Federally Administered Optional Supplementary Payment Programs for January 2025, California couple payment levels href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415057#b2b + - title: SSA POMS SI 01415.056 - Federally Administered Optional Supplementary Payment Programs for January 2024, California couple payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415056#b2b + - title: SSA POMS SI 01415.045 - Federally Administered Optional Supplementary Payment Programs for January 2013, California couple payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415045#b2b + - title: SSA POMS SI 01415.049 - Federally Administered Optional Supplementary Payment Programs for January 2017, California couple payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415049#b2b + - title: SSA POMS SI 01415.054 - Federally Administered Optional Supplementary Payment Programs for January 2022, California couple payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415054#b2b + - title: SSA POMS SI 01415.055 - Federally Administered Optional Supplementary Payment Programs for January 2023, California couple payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415055#b2b - title: "California Department of Social Services, Local Assistance Estimates, 2026 May Revision reference documents, SSI/SSP Payment Standards #page 26-27" href: https://cdss.ca.gov/Portals/9/Additional-Resources/Fiscal-and-Financial-Information/LOcal-Assistance-Estimates/2026-27/Revisions/2026-may-revision-reference-documents.pdf#page=26 values: 1991-01-01: 762 # $1,372 - $610 - # The share holds for January 2025 and 2026, and CDSS projects it for January 2027. - 2025-01-01: 833.35 + # Shares for 1992 through 2012 are not added yet, so the 1991 share carries forward (issue 10480). + 2013-01-01: 543.2 + 2017-01-01: 558.19 + 2022-01-01: 691.88 + 2023-01-01: 763.14 + # The share holds for January 2024 through 2026, and CDSS projects it for January 2027. + 2024-01-01: 833.35 diff --git a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/blind/single.yaml b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/blind/single.yaml index bea5dba376e..a67a2b4130a 100644 --- a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/blind/single.yaml +++ b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/blind/single.yaml @@ -14,9 +14,24 @@ metadata: href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415058#b2a - title: SSA POMS SI 01415.057 - Federally Administered Optional Supplementary Payment Programs for January 2025, California recipient payment levels href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415057#b2a + - title: SSA POMS SI 01415.056 - Federally Administered Optional Supplementary Payment Programs for January 2024, California recipient payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415056#b2a + - title: SSA POMS SI 01415.045 - Federally Administered Optional Supplementary Payment Programs for January 2013, California recipient payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415045#b2a + - title: SSA POMS SI 01415.049 - Federally Administered Optional Supplementary Payment Programs for January 2017, California recipient payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415049#b2a + - title: SSA POMS SI 01415.054 - Federally Administered Optional Supplementary Payment Programs for January 2022, California recipient payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415054#b2a + - title: SSA POMS SI 01415.055 - Federally Administered Optional Supplementary Payment Programs for January 2023, California recipient payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415055#b2a - title: "California Department of Social Services, Local Assistance Estimates, 2026 May Revision reference documents, SSI/SSP Payment Standards #page 26-27" href: https://cdss.ca.gov/Portals/9/Additional-Resources/Fiscal-and-Financial-Information/LOcal-Assistance-Estimates/2026-27/Revisions/2026-may-revision-reference-documents.pdf#page=26 values: 1991-01-01: 297 # $704 - $407 - # The share holds for January 2025 and 2026, and CDSS projects it for January 2027. - 2025-01-01: 324.32 + # Shares for 1992 through 2012 are not added yet, so the 1991 share carries forward (issue 10480). + 2013-01-01: 211.4 + 2017-01-01: 217.23 + 2022-01-01: 269.26 + 2023-01-01: 297 + # The share holds for January 2024 through 2026, and CDSS projects it for January 2027. + 2024-01-01: 324.32 diff --git a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/dependent/amount.yaml b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/dependent/amount.yaml index f34e974616c..cc9c52fc730 100644 --- a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/dependent/amount.yaml +++ b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/dependent/amount.yaml @@ -14,9 +14,24 @@ metadata: href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415058#b2a - title: SSA POMS SI 01415.057 - Federally Administered Optional Supplementary Payment Programs for January 2025, California recipient payment levels href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415057#b2a + - title: SSA POMS SI 01415.056 - Federally Administered Optional Supplementary Payment Programs for January 2024, California recipient payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415056#b2a + - title: SSA POMS SI 01415.045 - Federally Administered Optional Supplementary Payment Programs for January 2013, California recipient payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415045#b2a + - title: SSA POMS SI 01415.049 - Federally Administered Optional Supplementary Payment Programs for January 2017, California recipient payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415049#b2a + - title: SSA POMS SI 01415.054 - Federally Administered Optional Supplementary Payment Programs for January 2022, California recipient payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415054#b2a + - title: SSA POMS SI 01415.055 - Federally Administered Optional Supplementary Payment Programs for January 2023, California recipient payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415055#b2a - title: "California Department of Social Services, Local Assistance Estimates, 2026 May Revision reference documents, SSI/SSP Payment Standards #page 26-27" href: https://cdss.ca.gov/Portals/9/Additional-Resources/Fiscal-and-Financial-Information/LOcal-Assistance-Estimates/2026-27/Revisions/2026-may-revision-reference-documents.pdf#page=26 values: 1991-01-01: 92 # $499 - $407 - # The share holds for January 2025 and 2026, and CDSS projects it for January 2027. - 2025-01-01: 97.27 + # Shares for 1992 through 2012 are not added yet, so the 1991 share carries forward (issue 10480). + 2013-01-01: 63.4 + 2017-01-01: 65.15 + 2022-01-01: 80.75 + 2023-01-01: 89.07 + # The share holds for January 2024 through 2026, and CDSS projects it for January 2027. + 2024-01-01: 97.27 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/ca_capi.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/ca_capi.yaml index 80c8606bc02..ef3534832d9 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/ca_capi.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/ca_capi.yaml @@ -69,6 +69,7 @@ - name: Case 4, integration test, SSI eligible. period: 2024 + absolute_error_margin: 0.01 input: people: person1: @@ -86,8 +87,8 @@ output: ssi: [11_316, 0] ca_state_supplement_dependent_amount: 0 - # 223 * 12, using the 1991 share (issue 10480). - ca_state_supplement: 2_676 + # 239.94 * 12. + ca_state_supplement: 2_879.28 ca_capi: 0 - name: Case 5, integration test, permanent resident without 40 SSI quarters. @@ -211,13 +212,11 @@ state_code: CA living_arrangements_allow_for_food_preparation: true output: - # The state share holds its 1991 value of 630 - 407 = 223 until 2025. CAPI - # equals SSI/SSP (WIC 18941), so the standard is 943 + 223 = 1,166 per - # month with no offset and no income; 1,166 x 12 = 13,992. This pins a - # known-low value: the published aged standard was 1,182.94 (POMS SI - # 01415.056); issue 10480 backfills the shares. - ca_capi_person: 13_992 - ca_capi: 13_992 + # CAPI equals SSI/SSP (WIC 18941), so the standard is 943 + 239.94 = + # 1,182.94 per month (POMS SI 01415.056) with no offset and no income; + # 1,182.94 x 12 = 14,195.28. + ca_capi_person: 14_195.28 + ca_capi: 14_195.28 - name: Case 9, integration test, aged permanent resident without 40 SSI quarters whose pension exceeds the CAPI standard. period: 2025 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/ca_capi_payment_standard.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/ca_capi_payment_standard.yaml index 5244a905307..cfdb38ae2fb 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/ca_capi_payment_standard.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/ca_capi_payment_standard.yaml @@ -335,12 +335,9 @@ state_code: CA living_arrangements_allow_for_food_preparation: true output: - # The state share holds its 1991 value of 630 - 407 = 223 until 2025. CAPI - # equals SSI/SSP (WIC 18941), so the standard is 943 + 223 = 1,166. This - # pins a known-low value: the published January 2024 aged standard is - # 943 + 239.94 = 1,182.94 (POMS SI 01415.056); issue 10480 backfills the - # shares. - ca_capi_payment_standard: 1_166 + # CAPI equals SSI/SSP (WIC 18941), so the standard is 943 + 239.94 = + # 1,182.94, the published January 2024 aged standard (POMS SI 01415.056). + ca_capi_payment_standard: 1_182.94 - name: Case 15, the 10 individual offset applies through May 2019 and ends in June 2019. period: 2019 @@ -357,14 +354,12 @@ state_code: CA living_arrangements_allow_for_food_preparation: true output: - # The state share holds its 1991 value of 223 until 2025, so the standard - # is 771 + 223 = 994. The actual 2019 SSI/SSP standard was 931.72 (ACIN - # I-23-19), so these are known-high values (issue 10480). This case pins - # only the offset boundary: 994 - 10 = 984 through May 2019 (MPP 49-050.11) - # and 994 - 0 = 994 from June 1, 2019 (WIC 18941). + # The 2019 standard is 771 + 160.72 = 931.72 (POMS SI 01415.051; ACIN + # I-23-19): 931.72 - 10 = 921.72 through May 2019 (MPP 49-050.11) and + # 931.72 from June 1, 2019 (WIC 18941). ca_capi_payment_standard: - 2019-05: 984 - 2019-06: 994 + 2019-05: 921.72 + 2019-06: 931.72 - name: Case 16, CAPI couple, the 20 couple offset applies through May 2019 and ends in June 2019. period: 2019 @@ -388,12 +383,12 @@ state_code: CA living_arrangements_allow_for_food_preparation: true output: - # Couple standard 1,157 + 557 = 1,714, using the 1991 share (issue 10480). - # May: (1,714 - 20) / 2 = 847 each (MPP 49-050.12). - # June: 1,714 / 2 = 857 each (WIC 18941). + # Couple standard 1,157 + 407.14 = 1,564.14 (POMS SI 01415.051). + # May: (1,564.14 - 20) / 2 = 772.07 each (MPP 49-050.12). + # June: 1,564.14 / 2 = 782.07 each (WIC 18941). ca_capi_payment_standard: - 2019-05: [847, 847] - 2019-06: [857, 857] + 2019-05: [772.07, 772.07] + 2019-06: [782.07, 782.07] - name: Case 17, mixed couple, the 10 mixed-couple offset applies through May 2019 and ends in June 2019. period: 2019 @@ -417,11 +412,11 @@ living_arrangements_allow_for_food_preparation: true output: # The citizen is paid SSI, so the CAPI member takes the couple standard - # 1,157 + 557 = 1,714, using the 1991 share (issue 10480). May: 1,714 - 10 - # = 1,704 (MPP 49-050.13). June: 1,714 (WIC 18941). + # 1,157 + 407.14 = 1,564.14 (POMS SI 01415.051). May: 1,564.14 - 10 = + # 1,554.14 (MPP 49-050.13). June: 1,564.14 (WIC 18941). ca_capi_payment_standard: - 2019-05: [0, 1_704] - 2019-06: [0, 1_714] + 2019-05: [0, 1_554.14] + 2019-06: [0, 1_564.14] - name: Case 18, 2024 CAPI couple standard adds the state share to the couple federal benefit rate. period: 2024-01 @@ -445,9 +440,9 @@ state_code: CA living_arrangements_allow_for_food_preparation: true output: - # (1,415 + 557) / 2 = 986 each, using the 1991 share. A known-low value: - # the published 2024 couple standard is higher (issue 10480). - ca_capi_payment_standard: [986, 986] + # (1,415 + 607.83) / 2 = 1,011.415 each; the published January 2024 couple + # standard is 2,022.83 (POMS SI 01415.056). + ca_capi_payment_standard: [1_011.415, 1_011.415] - name: Case 19, 2024 out-of-home care standard adds the state share to the federal benefit rate. period: 2024-01 @@ -465,9 +460,8 @@ state_code: CA living_arrangements_allow_for_food_preparation: true output: - # 943 + 302 = 1,245, using the 1991 share of 709 - 407. A known-low value: - # POMS SI 01415.056 gives 1,575.07 (issue 10480). - ca_capi_payment_standard: 1_245 + # 943 + 632.07 = 1,575.07 (POMS SI 01415.056). + ca_capi_payment_standard: 1_575.07 - name: Case 20, CAPI couple with one spouse in a Title XIX facility is computed as two individuals. period: 2026-01 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/ca_capi_person.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/ca_capi_person.yaml index df21eae046a..5d896e48077 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/ca_capi_person.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/ca_capi_person.yaml @@ -350,12 +350,13 @@ state_code: CA living_arrangements_allow_for_food_preparation: true output: - # Standards 771 + 223 = 994 and 1,157 + 557 = 1,714, using the 1991 shares - # (issue 10480). Federal min(771, 1,157 - 207.50) = 771; state min(223, - # 557) = 223. May: 994 - 10 = 984 (MPP 49-050.11); June: 994 (WIC 18941). + # Standards 771 + 160.72 = 931.72 and 1,157 + 407.14 = 1,564.14 (POMS SI + # 01415.051). Federal min(771, 1,157 - 207.50) = 771; state min(160.72, + # 407.14) = 160.72. May: 931.72 - 10 = 921.72 (MPP 49-050.11); June: 931.72 + # (WIC 18941). ca_capi_person: - 2019-05: [984, 0] - 2019-06: [994, 0] + 2019-05: [921.72, 0] + 2019-06: [931.72, 0] - name: Case 11, mixed couple where the SSI/SSP spouse has the income subtracts the couple's income. period: 2026-01 @@ -603,3 +604,31 @@ # state min(239.94, 607.83) = 239.94; 533.50 + 239.94 = 773.44. ca_capi_payment_standard: [1_233.94, 0] ca_capi_person: [773.44, 0] + +- name: Case 19, June 2019 pension income above the 931.72 standard leaves no CAPI. + period: 2019-06 + absolute_error_margin: 0.01 + input: + people: + person1: + age: + 2019: 70 + immigration_status: + 2019: LEGAL_PERMANENT_RESIDENT + ssi_qualifying_quarters_earnings: + 2019: 39 + taxable_private_pension_income: + 2019: 12_000 + households: + household: + members: [person1] + state_code: + 2019: CA + living_arrangements_allow_for_food_preparation: + 2019: true + output: + # Countable income is 1,000 - 20 = 980, above the 2019 standard of + # 771 + 160.72 = 931.72 (POMS SI 01415.051). + ssi_countable_income: 980 + ca_capi_payment_standard: 931.72 + ca_capi_person: 0 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement.yaml index ac94346a23d..e83be2284e8 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement.yaml @@ -38,8 +38,8 @@ living_arrangements_allow_for_food_preparation: true output: ca_state_supplement_eligible_person: true - # (943 + 223) * 12 - 3,458.28; the 223 share dates from 1991 (issue 10480). - ca_state_supplement: 10_533.72 + # (943 + 239.94) * 12 - 3,458.28. + ca_state_supplement: 10_737 # 2026: federal SSI is $994 (individual) and $1,491 (couple); the California # payment standard is $1,233.94 (individual) and $2,098.83 (couple), per CDSS, diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_aged_disabled_amount.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_aged_disabled_amount.yaml index 780bb774806..851bae1877d 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_aged_disabled_amount.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_aged_disabled_amount.yaml @@ -1,5 +1,6 @@ - name: Single aged parent, blind period: 2024 + absolute_error_margin: 0.01 input: people: person1: @@ -17,10 +18,11 @@ members: [person1, person2] state_code: CA output: - ca_state_supplement_aged_disabled_amount: 13_992 # (943 + 223) * 12 + ca_state_supplement_aged_disabled_amount: 14_195.28 # (943 + 239.94) * 12 - name: Married couple, aged and disabled period: 2024 + absolute_error_margin: 0.01 input: people: person1: @@ -44,10 +46,11 @@ members: [person1, person2, person3] state_code: CA output: - ca_state_supplement_aged_disabled_amount: 23_664 # (1,415 + 557) * 12 + ca_state_supplement_aged_disabled_amount: 24_273.96 # (1,415 + 607.83) * 12 - name: Married couple, only one aged and disabled period: 2024 + absolute_error_margin: 0.01 input: people: person1: @@ -68,4 +71,4 @@ members: [person1, person2, person3] state_code: CA output: - ca_state_supplement_aged_disabled_amount: 13_992 # (943 + 223) * 12 + ca_state_supplement_aged_disabled_amount: 14_195.28 # (943 + 239.94) * 12 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_blind_amount.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_blind_amount.yaml index 6ef18226143..b2f20a1a314 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_blind_amount.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_blind_amount.yaml @@ -1,5 +1,6 @@ - name: Married couple, one blind period: 2024 + absolute_error_margin: 0.01 input: people: person1: @@ -22,4 +23,4 @@ members: [person1, person2, person3] state_code: CA output: - ca_state_supplement_blind_amount: 26_124 # (1,415 + 762) * 12 + ca_state_supplement_blind_amount: 26_980.2 # (1,415 + 833.35) * 12 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_dependent_amount.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_dependent_amount.yaml index 7937d649eab..2768c18560c 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_dependent_amount.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_dependent_amount.yaml @@ -1,5 +1,6 @@ - name: One eligible dependent period: 2024 + absolute_error_margin: 0.01 input: people: person1: @@ -18,10 +19,11 @@ members: [person1, person2] state_code: CA output: - ca_state_supplement_dependent_amount: 12_420 # (943 + 92) * 12 + ca_state_supplement_dependent_amount: 12_483.24 # (943 + 97.27) * 12 - name: One eligible dependent, one ineligible period: 2024 + absolute_error_margin: 0.01 input: people: person1: @@ -44,7 +46,7 @@ members: [person1, person2, person3] state_code: CA output: - ca_state_supplement_dependent_amount: 12_420 # (943 + 92) * 12 + ca_state_supplement_dependent_amount: 12_483.24 # (943 + 97.27) * 12 - name: Case 3, SSI disability criteria qualify a dependent. period: 2024 @@ -67,7 +69,7 @@ members: [person1, person2] state_code: CA output: - ca_state_supplement_dependent_amount: 12_420 # (943 + 92) * 12 + ca_state_supplement_dependent_amount: 12_483.24 # (943 + 97.27) * 12 - name: Case 4, disabled noncitizen child who fails SSI's noncitizen test gets CAPI, not the state supplement. period: 2026-01 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_food_allowance.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_food_allowance.yaml index 46571ae1c7b..adc38888fa3 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_food_allowance.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_food_allowance.yaml @@ -1,5 +1,6 @@ - name: Married couple, one person aged period: 2024 + absolute_error_margin: 0.01 input: people: person1: @@ -18,7 +19,7 @@ state_code: CA living_arrangements_allow_for_food_preparation: false output: - ca_state_supplement_food_allowance: 816 + ca_state_supplement_food_allowance: 1_546.44 # 128.87 * 12 - name: Married couple, one person aged, not eligible period: 2024 @@ -66,6 +67,7 @@ - name: Married couple, both disabled period: 2024 + absolute_error_margin: 0.01 input: people: person1: @@ -87,17 +89,18 @@ state_code: CA living_arrangements_allow_for_food_preparation: false output: - ca_state_supplement_food_allowance: 1_632 + ca_state_supplement_food_allowance: 3_092.88 # 257.74 * 12 - name: Eligible married household with two aged or disabled people period: 2024 + absolute_error_margin: 0.01 input: ca_state_supplement_food_allowance_eligible: true spm_unit_is_married: true ca_state_supplement_aged_disabled_count: 2 state_code: CA output: - ca_state_supplement_food_allowance: 1_632 + ca_state_supplement_food_allowance: 3_092.88 # 257.74 * 12 - name: 2026 couple of an aged person and a blind person under 65 without cooking facilities gets no food allowance period: 2026-01 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_medical_care_facility_amount.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_medical_care_facility_amount.yaml index 54788888e2d..19ce2b87085 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_medical_care_facility_amount.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_medical_care_facility_amount.yaml @@ -16,7 +16,7 @@ members: [person1, person2] state_code: CA output: - ca_state_supplement_medical_care_facility_amount: 504 + ca_state_supplement_medical_care_facility_amount: 744 # (30 + 32) * 12 - name: Nobody in medical care facility period: 2024 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_out_of_home_care_facility_amount.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_out_of_home_care_facility_amount.yaml index 5c6fdf4e4c2..fa0f90571eb 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_out_of_home_care_facility_amount.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_out_of_home_care_facility_amount.yaml @@ -1,5 +1,6 @@ - name: One person in out of home care facility period: 2024 + absolute_error_margin: 0.01 input: people: person1: @@ -16,7 +17,7 @@ members: [person1, person2] state_code: CA output: - ca_state_supplement_out_of_home_care_facility_amount: 6_216 # (2 * (943 + 302) - (1,415 + 557)) * 12 + ca_state_supplement_out_of_home_care_facility_amount: 13_527.72 # (2 * (943 + 632.07) - (1,415 + 607.83)) * 12 - name: Nobody in out of home care facility period: 2024 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/integration.yaml index d202e2a2cf2..24e257f8b2e 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/integration.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/integration.yaml @@ -1,5 +1,6 @@ - name: Single blind parent with non eligible dependent child period: 2024 + absolute_error_margin: 0.01 input: people: person1: @@ -17,11 +18,12 @@ members: [person1, person2] state_code: CA output: - # (943 + 297) * 12; the 297 share dates from 1991 (issue 10480). - ca_state_supplement_payment_standard: 14_880 + # (943 + 324.32) * 12. + ca_state_supplement_payment_standard: 15_207.84 - name: Married household with one blind and one disabled person, with a disabled dependent child, no food preparation and spouse in out of home care period: 2024-01 + absolute_error_margin: 0.01 input: people: person1: @@ -50,12 +52,12 @@ living_arrangements_allow_for_food_preparation: false output: # Both spouses are aged, so the couple takes the higher of the one-blind - # rate, 1,415 + 685 = 2,100, and the aged couple amount with the food - # allowance, 1,415 + 557 + 136 = 2,108 (WIC 12200(b), (d), (e)). The - # dependent amount is 943 + 92 = 1,035 and the out-of-home care amount is - # 2 * (943 + 302) - (1,415 + 557) = 518. The shares date from 1991 (issue - # 10480): 2,108 + 1,035 + 518 = 3,661. - ca_state_supplement_payment_standard: 3_661 + # rate, 1,415 + 747.44 = 2,162.44, and the aged couple amount with the food + # allowance, 1,415 + 607.83 + 257.74 = 2,280.57 (WIC 12200(b), (d), (e)). The + # dependent amount is 943 + 97.27 = 1,040.27 and the out-of-home care amount + # is 2 * (943 + 632.07) - (1,415 + 607.83) = 1,127.31: + # 2,280.57 + 1,040.27 + 1,127.31 = 4,448.15. + ca_state_supplement_payment_standard: 4_448.15 - name: Case A ,single disabled parent with non eligible dependent child. period: 2025-01 diff --git a/policyengine_us/variables/gov/states/ca/cdss/capi/_ca_capi_ssi_ssp_standard.py b/policyengine_us/variables/gov/states/ca/cdss/capi/_ca_capi_ssi_ssp_standard.py index acb10c1178f..a09c2ff610f 100644 --- a/policyengine_us/variables/gov/states/ca/cdss/capi/_ca_capi_ssi_ssp_standard.py +++ b/policyengine_us/variables/gov/states/ca/cdss/capi/_ca_capi_ssi_ssp_standard.py @@ -110,7 +110,7 @@ def ca_capi_ssi_ssp_standard(person, period, parameters): max_(two_blind, one_blind), aged_or_disabled_couple ) - # NOTE: the state shares before 2025 are the 1991 totals in WIC 12200 less + # NOTE: the state shares before 2013 are the 1991 totals in WIC 12200 less # the 1991 federal rates (issue 10480). individual = select( [medical_facility, out_of_home_care], From 9c6a633649841a279ed8dcb6458f3b73d099bc6b Mon Sep 17 00:00:00 2001 From: Ziming Date: Tue, 3 Nov 2026 17:59:41 -0500 Subject: [PATCH 4/6] Make the California supplement flag real and apply review fixes The flag now shows whether a person is paid a supplement. The person amount is limited to California and gated on SSI eligibility in its formula, so the flag can read it. - Compute a couple with only the California input on one spouse separately - Add a Title XIX couple share, because 2023 is not twice the individual share - Round mixed-couple supplements and apply the minimum payment - Count a disabled child's income for General Relief when another unit member receives the supplement - Record the household-of-another conflict and fix stale register paths Co-Authored-By: Claude Opus 5.5 --- .../ca-ssp-person-level-amounts.fixed.md | 2 +- .../medical_care_facility_couple.yaml | 34 +++++ policyengine_us/programs.yaml | 2 +- ...relief_receives_other_cash_assistance.yaml | 62 ++++++++- .../state_supplement/ca_state_supplement.yaml | 27 ++++ .../ca_state_supplement_eligible_person.yaml | 115 ++++++++++++----- .../ca_state_supplement_person.yaml | 122 +++++++++++++++++- .../gov/ssa/ssi/_ssi_state_supplement.py | 31 +++-- .../ca/cdss/capi/_ca_capi_ssi_ssp_standard.py | 2 +- .../_ca_state_supplement_rates.py | 2 +- .../ca_state_supplement_eligible_person.py | 6 +- .../ca_state_supplement_person.py | 22 +++- source_conflicts/candidates.yaml | 45 ++++++- 13 files changed, 413 insertions(+), 59 deletions(-) create mode 100644 policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/allowance/medical_care_facility_couple.yaml diff --git a/changelog.d/ca-ssp-person-level-amounts.fixed.md b/changelog.d/ca-ssp-person-level-amounts.fixed.md index 7a690155d7c..2632e1f0ffc 100644 --- a/changelog.d/ca-ssp-person-level-amounts.fixed.md +++ b/changelog.d/ca-ssp-person-level-amounts.fixed.md @@ -1 +1 @@ -Compute the California state supplement per person with one standard for each living arrangement, which stops facility residents getting stacked amounts and pays blind children, adult dependents, children in facilities and unrelated people sharing an SPM unit the right levels. +Compute the California state supplement per person with one standard for each living arrangement, which stops facility residents getting stacked amounts and pays blind children, adult dependents, children in facilities and unrelated people sharing an SPM unit the right levels. `ca_state_supplement_eligible_person` now shows whether a person is paid a supplement, so it is false when income leaves none. diff --git a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/allowance/medical_care_facility_couple.yaml b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/allowance/medical_care_facility_couple.yaml new file mode 100644 index 00000000000..24c0797629a --- /dev/null +++ b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/allowance/medical_care_facility_couple.yaml @@ -0,0 +1,34 @@ +description: California adds this state share to the federal payment cap for a couple in a Title XIX medical facility under the State Supplementary Payment program. +metadata: + unit: currency-USD + period: month + label: California state supplement medical care facility couple state share + reference: + - title: California Welfare and Institutions Code Division 9, Part 3, Chapter 3, Article 5, Section 12200 (h) + href: https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12200 + - title: SSA POMS SI 01415.058 - Federally Administered Optional Supplementary Payment Programs for January 2026, California couple payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415058#b2b + - title: SSA POMS SI 01415.057 - Federally Administered Optional Supplementary Payment Programs for January 2025, California couple payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415057#b2b + - title: SSA POMS SI 01415.056 - Federally Administered Optional Supplementary Payment Programs for January 2024, California couple payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415056#b2b + - title: SSA POMS SI 01415.045 - Federally Administered Optional Supplementary Payment Programs for January 2013, California couple payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415045#b2b + - title: SSA POMS SI 01415.049 - Federally Administered Optional Supplementary Payment Programs for January 2017, California couple payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415049#b2b + - title: SSA POMS SI 01415.054 - Federally Administered Optional Supplementary Payment Programs for January 2022, California couple payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415054#b2b + - title: SSA POMS SI 01415.055 - Federally Administered Optional Supplementary Payment Programs for January 2023, California couple payment levels + href: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415055#b2b + - title: California Department of Social Services, All County Information Notice I-71-22 + href: https://www.cdss.ca.gov/Portals/9/Additional-Resources/Letters-and-Notices/ACINs/2022/I-71_22.pdf#page=5 +values: + 1991-01-01: 24 # $84 - $60 + # Shares for 1992 through 2012 are not added yet, so the 1991 share carries forward (issue 10480). + 2013-01-01: 40 + 2017-01-01: 42 + 2022-01-01: 52 + # The $117 couple total is one dollar less than twice the $59 individual total. + 2023-01-01: 57 + # The share holds for January 2024 through 2026. + 2024-01-01: 64 diff --git a/policyengine_us/programs.yaml b/policyengine_us/programs.yaml index 555d6ed6ab3..15c6105f9bd 100644 --- a/policyengine_us/programs.yaml +++ b/policyengine_us/programs.yaml @@ -1354,7 +1354,7 @@ programs: variable: ca_state_supplement parameter_prefix: gov.states.ca.cdss.state_supplement verified_years: "2025-2026" - notes: Payment standards verified for every POMS SI 01415.058 category except the household-of-another levels, which are not modeled (issue 7892). + notes: Payment standards verified against POMS SI 01415.058, except household-of-another levels, children with a non-parent relative or guardian, and private medical facilities, which are not modeled (issue 7892). - state: CT status: complete name: Connecticut SSP diff --git a/policyengine_us/tests/policy/baseline/gov/local/ca/sbd/general_relief/eligibility/ca_sbd_general_relief_receives_other_cash_assistance.yaml b/policyengine_us/tests/policy/baseline/gov/local/ca/sbd/general_relief/eligibility/ca_sbd_general_relief_receives_other_cash_assistance.yaml index 089994b24ed..5b413dbdc4b 100644 --- a/policyengine_us/tests/policy/baseline/gov/local/ca/sbd/general_relief/eligibility/ca_sbd_general_relief_receives_other_cash_assistance.yaml +++ b/policyengine_us/tests/policy/baseline/gov/local/ca/sbd/general_relief/eligibility/ca_sbd_general_relief_receives_other_cash_assistance.yaml @@ -175,6 +175,7 @@ - name: Case 9, a disabled child with an SSP-only payment is barred, but the parent is not. period: 2026-01 + absolute_error_margin: 0.01 input: people: person1: @@ -188,8 +189,6 @@ spm_units: spm_unit: members: [person1, person2] - # An SSP-only case: a positive state supplement with no federal SSI. - ca_state_supplement: 200 tanf: 0 households: household: @@ -197,6 +196,61 @@ in_sbd: true state_code: CA output: - # The child is eligible for the state supplement as a disabled dependent - # under 18; the parent is not aged, blind or disabled. + # The child takes the 97.27 disabled minor share with no federal SSI; the + # parent is not aged, blind or disabled. + ca_state_supplement_person: [0, 97.27] ca_sbd_general_relief_receives_other_cash_assistance: [false, true] + +- name: Case 10, a disabled child with too much income for SSP is not barred by a grandparent's SSP. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + person2: + age: 10 + is_disabled: true + meets_ssi_disability_criteria: true + # $1,250 per month, half of the other parent's $2,500 SSDI benefit. + social_security_dependents: 15_000 + person3: + age: 70 + marital_units: + marital_unit1: + members: [person1] + marital_unit2: + members: [person2] + marital_unit3: + members: [person3] + tax_units: + tax_unit1: + members: [person1, person2] + tax_unit2: + members: [person3] + families: + family1: + members: [person1, person2] + family2: + members: [person3] + spm_units: + spm_unit: + members: [person1, person2, person3] + households: + household: + members: [person1, person2, person3] + state_code: CA + county_str: SAN_BERNARDINO_COUNTY_CA + output: + # The child's countable income, 1,250 - 20 = 1,230, is above their + # 994 + 97.27 = 1,091.27 standard, so they get neither SSI nor SSP. + ssi: [0, 0, 994] + ca_state_supplement_eligible_person: [false, false, true] + # The child's excess income does not reduce the grandparent's supplement. + ca_state_supplement_person: [0, 0, 239.94] + ca_sbd_general_relief_receives_other_cash_assistance: [false, false, true] + # The parent and child stay in the assistance unit. The child's income is + # above the $615 grant for two, so General Relief pays nothing. + ca_sbd_general_relief_assistance_unit_size: 2 + ca_sbd_general_relief_countable_income: 1_250 + ca_sbd_general_relief: 0 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement.yaml index c92788bdca6..195bc6357fb 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement.yaml @@ -660,3 +660,30 @@ ssi: 12_348 # 1,029 * 12 # CDSS projects the 239.94 share for January 2027 (2026 May Revision, page 27). ca_state_supplement: 2_879.28 # 239.94 * 12 + +- name: Case 18, 2026 mixed couple's supplement rounds up to the next cent like other federal payments. + period: 2026-01 + absolute_error_margin: 0.001 + input: + people: + person1: + age: 72 + immigration_status: CITIZEN + social_security_retirement: 9_601 # 800.0833 a month + person2: + age: 68 + immigration_status: LEGAL_PERMANENT_RESIDENT + ssi_qualifying_quarters_earnings: 39 + pension_income: 9_600 # 800 a month + marital_units: + marital_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: CA + living_arrangements_allow_for_food_preparation: true + output: + # 1,233.94 - 0 - (800.0833 - 20) = 453.8567, which rounds up to 453.86 + # (POMS SI 02001.010 A.2). + ca_state_supplement_person: [453.86, 0] diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_eligible_person.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_eligible_person.yaml index 78053fc4cc0..25cb8d64edb 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_eligible_person.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_eligible_person.yaml @@ -1,44 +1,58 @@ -- name: Eligible citizen - period: 2024 +- name: Case 1, aged citizen with no income is eligible. + period: 2026-01 input: - meets_ssi_resource_test: true - is_ssi_aged_blind_disabled: true - is_ssi_qualified_noncitizen: false - immigration_status: CITIZEN - state_code: CA + people: + person1: + age: 70 + immigration_status: CITIZEN + households: + household: + members: [person1] + state_code: CA output: ca_state_supplement_eligible_person: true -- name: Ineligible based on immigration status - period: 2024 +- name: Case 2, aged noncitizen who fails SSI's noncitizen test is not eligible. + period: 2026-01 input: - meets_ssi_resource_test: true - is_ssi_aged_blind_disabled: true - is_ssi_qualified_noncitizen: false - immigration_status: LEGAL_PERMANENT_RESIDENT - state_code: CA + people: + person1: + age: 70 + is_ssi_qualified_noncitizen: false + immigration_status: LEGAL_PERMANENT_RESIDENT + households: + household: + members: [person1] + state_code: CA output: ca_state_supplement_eligible_person: false -- name: Not aged or disabled - period: 2024 +- name: Case 3, person who is not aged, blind or disabled is not eligible. + period: 2026-01 input: - meets_ssi_resource_test: true - is_ssi_aged_blind_disabled: false - is_ssi_qualified_noncitizen: false - immigration_status: CITIZEN - state_code: CA + people: + person1: + age: 40 + immigration_status: CITIZEN + households: + household: + members: [person1] + state_code: CA output: ca_state_supplement_eligible_person: false -- name: Does not meet resource test - period: 2024 +- name: Case 4, aged person who fails the resource test is not eligible. + period: 2026-01 input: - meets_ssi_resource_test: false - is_ssi_aged_blind_disabled: true - is_ssi_qualified_noncitizen: false - immigration_status: CITIZEN - state_code: CA + people: + person1: + age: 70 + meets_ssi_resource_test: false + immigration_status: CITIZEN + households: + household: + members: [person1] + state_code: CA output: ca_state_supplement_eligible_person: false @@ -78,5 +92,48 @@ members: [person1, person2] state_code: CA output: - # WIC 12150 follows SSI eligibility, which has no tax-role condition. + # The supplement has no tax-role condition, so an adult dependent takes the + # individual share. ca_state_supplement_eligible_person: [false, true] + +- name: Case 7, income above the federal rate but below the California standard leaves the person eligible with no SSI. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + immigration_status: CITIZEN + social_security_retirement: 13_200 # 1,100 a month + households: + household: + members: [person1] + state_code: CA + output: + # Countable income of 1,100 - 20 = 1,080 is above the 994 federal rate but + # below the 1,233.94 standard: 1,233.94 - 1,080 = 153.94. + is_ssi_eligible: true + ssi: 0 + ca_state_supplement_person: 153.94 + ca_state_supplement_eligible_person: true + +- name: Case 8, income above the California standard makes an otherwise SSI-eligible person not eligible. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + immigration_status: CITIZEN + social_security_retirement: 24_000 # 2,000 a month + households: + household: + members: [person1] + state_code: CA + output: + # is_ssi_eligible has no income test, but countable income of 2,000 - 20 = + # 1,980 is above the 1,233.94 standard, so no supplement is left to pay. + is_ssi_eligible: true + ssi: 0 + ca_state_supplement_person: 0 + ca_state_supplement_eligible_person: false diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_person.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_person.yaml index 4c1c2c046be..c8b4d02df4b 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_person.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_person.yaml @@ -657,7 +657,7 @@ living_arrangements_allow_for_food_preparation: true output: # SSA pays the supplement with SSI (POMS SI 01415.058 A). - ca_state_supplement_eligible_person: true + ca_state_supplement_eligible_person: false ssi: 0 ca_state_supplement_person: 0 @@ -744,7 +744,123 @@ state_code: CA living_arrangements_allow_for_food_preparation: true output: - # WIC 12200(i) reduces the grant by the federal reduction, which leaves the 239.94 share. - # POMS SI 01415.058 code D lists 245.20; those shares are not modeled (issue 7892). + # The household-of-another shares are not modeled, so the regular 239.94 share + # stays on the reduced federal amount. POMS SI 01415.058 code D lists 245.20 + # (issue 7892; us-ca:ssp-household-of-another-share in the source-conflict candidates). ssi: 662.67 ca_state_supplement_person: 239.94 + +- name: Case 30, aged person outside California gets no supplement. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + is_tax_unit_head: true + marital_units: + marital_unit: + members: [person1] + households: + household: + members: [person1] + state_code: TX + output: + ssi: 994 + ca_state_supplement_person: 0 + ca_state_supplement_eligible_person: false + +- name: Case 31, couple both in a Title XIX facility in 2023 takes the published couple level, not twice the individual level. + period: 2023-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + is_tax_unit_head: true + ca_in_medical_care_facility: true + ssi_lives_in_medical_treatment_facility: true + ssi_medicaid_pays_majority_of_care: true + person2: + age: 68 + is_tax_unit_spouse: true + ca_in_medical_care_facility: true + ssi_lives_in_medical_treatment_facility: true + ssi_medicaid_pays_majority_of_care: true + marital_units: + marital_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: CA + living_arrangements_allow_for_food_preparation: true + output: + # POMS SI 01415.055 B.2.b: 57 for the couple, or a 117 total with the 60 + # federal amount. The individual share is 29. + ssi: [30, 30] + ca_state_supplement_person: [28.5, 28.5] + +- name: Case 32, couple with only the California input marking one spouse in a Title XIX facility is computed as two individuals. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + is_tax_unit_head: true + ca_in_medical_care_facility: true + person2: + age: 68 + is_tax_unit_spouse: true + marital_units: + marital_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: CA + living_arrangements_allow_for_food_preparation: true + output: + # 20 CFR 416.414(b)(3): the facility share for the resident and the + # independent-living share for the other spouse, not an average of the two + # couple levels. + # NOTE: SSI stays joint without the federal facility inputs. + ssi: [745.5, 745.5] + ca_state_supplement_person: [32, 239.94] + +- name: Case 33, married parents who are their child's tax dependents take the individual share. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 45 + employment_income_before_lsr: 100_000 + person2: + age: 70 + is_tax_unit_dependent: true + person3: + age: 68 + is_tax_unit_dependent: true + marital_units: + marital_unit1: + members: [person1] + marital_unit2: + members: [person2, person3] + tax_units: + tax_unit: + members: [person1, person2, person3] + households: + household: + members: [person1, person2, person3] + state_code: CA + living_arrangements_allow_for_food_preparation: true + output: + # NOTE: a known limitation. The couple level is 607.83, or 303.92 each, but + # SSI's couple test excludes tax dependents, so SSI and the supplement both + # treat the parents as individuals. When SSI identifies couples by marriage + # (PR 10141), the head-or-spouse guard in the rates must go too, or these + # parents would get no supplement. + ssi: [0, 994, 994] + ca_state_supplement_person: [0, 239.94, 239.94] diff --git a/policyengine_us/variables/gov/ssa/ssi/_ssi_state_supplement.py b/policyengine_us/variables/gov/ssa/ssi/_ssi_state_supplement.py index 5e0c84da3f3..808c8aa3a9d 100644 --- a/policyengine_us/variables/gov/ssa/ssi/_ssi_state_supplement.py +++ b/policyengine_us/variables/gov/ssa/ssi/_ssi_state_supplement.py @@ -4,8 +4,26 @@ ) +def federal_supplement_payment(payment, parameters, period): + """Apply SSA's rounding and minimum payment to a federally paid supplement. + + Federal administration discards digits beyond the third decimal place, + rounds up to cents, and pays at least one dollar for a positive amount. + Sources: POMS SI 02001.005 and SI 02001.010. + """ + minimum = parameters(period).gov.ssa.ssi.state_supplement.minimum_payment + rounded = np.ceil(np.floor(payment * 1_000) / 10) / 100 + return where(rounded > 0, max_(rounded, minimum), 0) + + def ssi_state_supplement( - person, period, parameters, individual_rate, couple_rate, federal_payment_rules=True + person, + period, + parameters, + individual_rate, + couple_rate, + federal_payment_rules=True, + joint=None, ): """Apply SSI-based supplement income, couple and spouse-deeming rules. @@ -16,8 +34,10 @@ def ssi_state_supplement( administrators do not inherit the federal rounding or minimum payment. Sources: 20 CFR 416.2025; POMS SI 01320.430 D, SI 02005.030 G, SI 02001.005 and SI 02001.010. Callers apply state-specific eligibility. + Pass joint only where a state's couple test differs from SSI's. """ - joint = person("ssi_couple_computation_applies", period) + if joint is None: + joint = person("ssi_couple_computation_applies", period) couple_total = person.marital_unit.sum(couple_rate / 2) standard = where(joint, couple_total / 2, individual_rate) countable = person("ssi_countable_income", period) @@ -44,10 +64,5 @@ def ssi_state_supplement( eligible = person("is_ssi_eligible", period) & person( "takes_up_ssi_if_eligible", period.this_year ) - # Federal administration discards digits beyond the third decimal place, - # rounds up to cents, and pays at least one dollar for a positive amount. - rounded = np.ceil(np.floor(payment * 1_000) / 10) / 100 - federal_payment = where( - rounded > 0, max_(rounded, ssi.state_supplement.minimum_payment), 0 - ) + federal_payment = federal_supplement_payment(payment, parameters, period) return eligible * where(federal_payment_rules, federal_payment, payment) diff --git a/policyengine_us/variables/gov/states/ca/cdss/capi/_ca_capi_ssi_ssp_standard.py b/policyengine_us/variables/gov/states/ca/cdss/capi/_ca_capi_ssi_ssp_standard.py index cd572770868..8a839730be5 100644 --- a/policyengine_us/variables/gov/states/ca/cdss/capi/_ca_capi_ssi_ssp_standard.py +++ b/policyengine_us/variables/gov/states/ca/cdss/capi/_ca_capi_ssi_ssp_standard.py @@ -6,7 +6,7 @@ def ca_capi_couple_computation(person, period): - """Whether CAPI computes the person with their spouse as a couple. + """Whether CAPI and SSP compute the person with their spouse as a couple. SSI's couple computation, except that a couple with exactly one spouse in a Title XIX facility is computed separately (20 CFR 416.414(b)(3)), when diff --git a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/_ca_state_supplement_rates.py b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/_ca_state_supplement_rates.py index 50f8380d6f2..f418b808487 100644 --- a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/_ca_state_supplement_rates.py +++ b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/_ca_state_supplement_rates.py @@ -97,7 +97,7 @@ def ca_state_supplement_rates(person, period, parameters, joint): ) couple = select( [medical_facility, out_of_home_care], - [2 * p.allowance.medical_care_facility, out_of_home_care_couple], + [p.allowance.medical_care_facility_couple, out_of_home_care_couple], default=community_couple, ) return individual, couple * head_or_spouse diff --git a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/ca_state_supplement_eligible_person.py b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/ca_state_supplement_eligible_person.py index 12168811c62..c65aef296de 100644 --- a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/ca_state_supplement_eligible_person.py +++ b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/ca_state_supplement_eligible_person.py @@ -10,6 +10,6 @@ class ca_state_supplement_eligible_person(Variable): reference = "https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12150" def formula(person, period, parameters): - # WIC 12150 entitles people who receive SSI or "who but for their - # income" could, which is SSI eligibility without its income test. - return person("is_ssi_eligible", period) + # is_ssi_eligible has no income test, so a person qualifies only when + # their income leaves a supplement to pay. + return person("ca_state_supplement_person", period) > 0 diff --git a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/ca_state_supplement_person.py b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/ca_state_supplement_person.py index 5b426c85bb2..227250014a3 100644 --- a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/ca_state_supplement_person.py +++ b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/ca_state_supplement_person.py @@ -1,11 +1,13 @@ from policyengine_us.model_api import * from policyengine_us.variables.gov.ssa.ssi._ssi_state_supplement import ( + federal_supplement_payment, ssi_state_supplement, ) from policyengine_us.variables.gov.ssa.ssi.eligibility.income._apply_ssi_exclusions import ( _apply_ssi_exclusions, ) from policyengine_us.variables.gov.states.ca.cdss.capi._ca_capi_ssi_ssp_standard import ( + ca_capi_couple_computation, ca_capi_ssi_ssp_standard, ) from policyengine_us.variables.gov.states.ca.cdss.state_supplement._ca_state_supplement_rates import ( @@ -19,8 +21,9 @@ class ca_state_supplement_person(Variable): label = "California state supplement per person" unit = USD definition_period = MONTH - defined_for = "ca_state_supplement_eligible_person" + defined_for = StateCode.CA reference = ( + "https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12150", "https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12200", "https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415058", "https://www.law.cornell.edu/cfr/text/20/416.1160", @@ -30,14 +33,17 @@ class ca_state_supplement_person(Variable): ) def formula(person, period, parameters): - joint = person("ssi_couple_computation_applies", period) + # A couple with one spouse in a Title XIX facility is computed + # separately, including when only the California input marks it (20 CFR + # 416.414(b)(3)). + joint = ca_capi_couple_computation(person, period) individual_rate, couple_rate = ca_state_supplement_rates( person, period, parameters, joint ) # SSA administers the supplement, so the federal income, couple, # deeming and rounding rules apply (POMS SI 01415.058 A). payment = ssi_state_supplement( - person, period, parameters, individual_rate, couple_rate + person, period, parameters, individual_rate, couple_rate, joint=joint ) # SSA treats a spouse who fails SSI's citizen or qualified-noncitizen @@ -96,7 +102,13 @@ def formula(person, period, parameters): countable_income = where( spouse_capi_eligible, mixed_countable_income, ssi_countable_income ) - split_payment = max_( + split_amount = max_( individual_standard - person("ssi", period) - countable_income, 0 + ) + split_payment = federal_supplement_payment( + split_amount, parameters, period ) * person("takes_up_ssi_if_eligible", period.this_year) - return where(split_couple, split_payment, payment) + # WIC 12150 entitles people who receive SSI or "who but for their + # income" could, which is SSI eligibility without its income test. + eligible = person("is_ssi_eligible", period) + return eligible * where(split_couple, split_payment, payment) diff --git a/source_conflicts/candidates.yaml b/source_conflicts/candidates.yaml index 6b1dbcbedc4..79d59cc4908 100644 --- a/source_conflicts/candidates.yaml +++ b/source_conflicts/candidates.yaml @@ -1412,8 +1412,7 @@ candidates: follows: statute 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 + - policyengine_us/variables/gov/states/ca/cdss/state_supplement/_ca_state_supplement_rates.py prs: - https://github.com/PolicyEngine/policyengine-us/pull/10379 - https://github.com/PolicyEngine/policyengine-us/pull/10546 @@ -1426,9 +1425,49 @@ candidates: https://github.com/PolicyEngine/policyengine-us/pull/10379#issuecomment-6509402355. WIC 12200(e) gives the no-cooking allowance only under (c) and (d), so a couple paid the one-blind rate under (b) gets none, in CAPI and in the state supplement. CAPI (_ca_capi_ssi_ssp_standard.py) and the state supplement - (ca_state_supplement_food_allowance.py) both follow the statute: neither adds a food allowance to the one-blind + (_ca_state_supplement_rates.py) both follow the statute: neither adds a 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.' +- id: us-ca:ssp-household-of-another-share + program: ssi-ssp + years: + from: 2013 + type: calendar + question: Does a California recipient in another person's household keep the regular state share, or take the + separate share POMS lists for that arrangement? + sources: + - kind: statute + citation: Cal. WIC §12200(i) + url: https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12200 + - kind: statute + citation: Cal. WIC §12200.03 + url: https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12200.03 + - kind: manual + citation: SSA POMS SI 01415.058 B.1 and B.2, codes D, F and G + url: https://secure.ssa.gov/apps10/poms.nsf/lnx/0501415058 + readings: + statute: Subdivision 12200(i) reduces the grant level under (a) through (d) by the amount of the federal reduction, + which alone keeps the regular state share. Section 12200.03 applies notwithstanding any other law and sets the + payments at the federal minimum, which may change that result. + other: POMS lists separate state shares for recipients with the federal one-third reduction. + example: In January 2026, an aged person with no income in another person's household has a $902.61 total with the + regular share, which PE-US pays ($662.67 federal plus $239.94), and $907.87 under POMS ($662.67 plus $245.20). + pe_us: + follows: not-modelled + code: + - policyengine_us/variables/gov/states/ca/cdss/state_supplement/_ca_state_supplement_rates.py + prs: + - https://github.com/PolicyEngine/policyengine-us/pull/10601 + state: open + note: PE-US has no household-of-another shares, so these recipients keep the regular share on the reduced federal + amount (issue 7892). The January 2026 POMS shares are 245.20 for aged or disabled, 329.58 for blind, 624.40 for + out-of-home care (code F) and 102.53 for a disabled child (code G); the couple shares are 615.70, 841.22 for two + blind, 755.31 for one blind and 1,604.20 for out-of-home care. Subdivision 12200(i) names only (a) through (d), so + it does not decide codes F and G. WIC 12204 keeps a Public Law 93-66 payment and does not explain the difference. + WIC 12200.03 may, since it sets the Section 12200 payments, other than (e), (g) and (h), at the federal minimum and + no lower than the March 1983 standards adjusted under 20 CFR 416.2096(b); that arithmetic has not been checked. + The project lead leans toward POMS because SSA issues the payment from its chart; the model stays as it is until + that is decided. - id: us-ca:ssp-nmohc-couple-standard program: ssi-ssp years: From 804947093908ecf2a844fb9992bac314a2de1ab3 Mon Sep 17 00:00:00 2001 From: Ziming Date: Tue, 3 Nov 2026 18:43:16 -0500 Subject: [PATCH 5/6] Keep dependents out of the California couple computation With no marital units a dependent shares the couple's marital unit and was taking half the couple's level. Only a head or spouse is now in the couple. Also move the aged couple partner test to 7,294.08, since each spouse's share rounds up to the next cent (POMS SI 02001.010 A.2). The partner test gate is recorded on the PR. Co-Authored-By: Claude Opus 5.5 --- .../ca_state_supplement_person.yaml | 31 +++++++++++++++++-- .../edge_cases/state/ca/state_supplement.yaml | 6 ++-- .../ca_state_supplement_person.py | 7 +++-- 3 files changed, 37 insertions(+), 7 deletions(-) diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_person.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_person.yaml index c8b4d02df4b..d76c4f950b7 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_person.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_person.yaml @@ -860,7 +860,34 @@ # NOTE: a known limitation. The couple level is 607.83, or 303.92 each, but # SSI's couple test excludes tax dependents, so SSI and the supplement both # treat the parents as individuals. When SSI identifies couples by marriage - # (PR 10141), the head-or-spouse guard in the rates must go too, or these - # parents would get no supplement. + # (PR 10141), the head-or-spouse guards in the supplement and its rates must + # go too, or these parents would get no supplement. ssi: [0, 994, 994] ca_state_supplement_person: [0, 239.94, 239.94] + +- name: Case 34, dependent child of an aged couple with no marital units takes their own level. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + is_tax_unit_head: true + person2: + age: 68 + is_tax_unit_spouse: true + person3: + age: 10 + is_tax_unit_dependent: true + is_disabled: true + meets_ssi_disability_criteria: true + households: + household: + members: [person1, person2, person3] + state_code: CA + living_arrangements_allow_for_food_preparation: true + output: + # With no marital units everyone shares one unit, but the child is not part + # of the couple: half of 607.83 rounded up for each spouse, 97.27 for the child. + ca_state_supplement_person: [303.92, 303.92, 97.27] + ca_state_supplement: 705.11 diff --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 18ca49e3d57..1a8817244f2 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 @@ -93,8 +93,10 @@ spm_units: spm_unit: # Both aged: married standard 2,098.83 (no food allowance); - # 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 + # SSI couple FBR 1,491. State share 2,098.83 - 1,491 = 607.83, or 303.915 + # per spouse, rounded up to 303.92 (POMS SI 02001.010 A.2). + # SSP: 303.92 x 2 x 12 = 7,294.08. + ca_state_supplement: 7_294.08 - name: ca_state_supplement_aged_single_earnings_partial (ca) period: 2026 absolute_error_margin: 0.1 diff --git a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/ca_state_supplement_person.py b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/ca_state_supplement_person.py index 227250014a3..69b34761f9a 100644 --- a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/ca_state_supplement_person.py +++ b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/ca_state_supplement_person.py @@ -35,8 +35,10 @@ class ca_state_supplement_person(Variable): def formula(person, period, parameters): # A couple with one spouse in a Title XIX facility is computed # separately, including when only the California input marks it (20 CFR - # 416.414(b)(3)). - joint = ca_capi_couple_computation(person, period) + # 416.414(b)(3)). Only a head or spouse is in a couple, because a situation + # with no marital units puts a dependent in the couple's unit. + head_or_spouse = person("is_tax_unit_head_or_spouse", period.this_year) + joint = ca_capi_couple_computation(person, period) & head_or_spouse individual_rate, couple_rate = ca_state_supplement_rates( person, period, parameters, joint ) @@ -63,7 +65,6 @@ def formula(person, period, parameters): is_qualified_noncitizen = person( "is_ssi_qualified_noncitizen", period.this_year ) - head_or_spouse = person("is_tax_unit_head_or_spouse", period.this_year) fails_test = ~(is_citizen | is_qualified_noncitizen) & head_or_spouse # The exclusion needs a spouse who can receive CAPI, so key on CAPI # eligibility rather than on SSI's noncitizen test alone (issue 10482). From a6abcb4f5b66f162af7378f55b9bbd7abe5a6e60 Mon Sep 17 00:00:00 2001 From: Ziming Date: Wed, 4 Nov 2026 11:20:38 -0500 Subject: [PATCH 6/6] Keep dependents out of California's CAPI couple computation A situation with no marital units puts a dependent in the couple's unit, and CAPI treated that dependent as the couple's partner, so a CAPI child or spouse could get $0. Only a head or spouse now counts in the couple test, the facility count, the spouse's payment, the CAPI member count and the couple's income. Relabel ca_state_supplement_eligible_person to say it means a person is paid, and check SSI in Case 34. Co-Authored-By: Claude Opus 5.5 --- .../states/ca/cdss/capi/ca_capi_person.yaml | 85 +++++++++++++++++++ .../ca_state_supplement_person.yaml | 32 ++++++- .../ca/cdss/capi/_ca_capi_ssi_ssp_standard.py | 18 ++-- .../ca/cdss/capi/ca_capi_payment_standard.py | 3 +- .../gov/states/ca/cdss/capi/ca_capi_person.py | 11 ++- .../ca_state_supplement_eligible_person.py | 7 +- .../ca_state_supplement_person.py | 9 +- 7 files changed, 146 insertions(+), 19 deletions(-) diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/ca_capi_person.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/ca_capi_person.yaml index 45ac47b49fa..2fc79a0912a 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/ca_capi_person.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/ca_capi_person.yaml @@ -626,3 +626,88 @@ ssi_countable_income: 980 ca_capi_payment_standard: 931.72 ca_capi_person: 0 + +- name: Case 20, disabled noncitizen child of a citizen couple with no marital units is not the couple's partner. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + is_tax_unit_head: true + person2: + age: 68 + is_tax_unit_spouse: true + person3: + age: 10 + is_tax_unit_dependent: true + is_disabled: true + meets_ssi_disability_criteria: true + immigration_status: LEGAL_PERMANENT_RESIDENT + ssi_qualifying_quarters_earnings: 39 + households: + household: + members: [person1, person2, person3] + state_code: CA + living_arrangements_allow_for_food_preparation: true + output: + # With no marital units everyone shares one unit, but the parents' SSI and + # supplement are not spouse income to the child: 994 + 97.27 = 1,091.27. + ca_capi_person: [0, 0, 1_091.27] + +- name: Case 21, CAPI spouse with no marital units does not count a citizen child's SSI and supplement as the spouse's. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 72 + is_tax_unit_head: true + person2: + age: 68 + is_tax_unit_spouse: true + immigration_status: LEGAL_PERMANENT_RESIDENT + ssi_qualifying_quarters_earnings: 39 + person3: + age: 10 + is_tax_unit_dependent: true + is_disabled: true + meets_ssi_disability_criteria: true + households: + household: + members: [person1, person2, person3] + state_code: CA + living_arrangements_allow_for_food_preparation: true + output: + # Only the citizen spouse's 745.50 SSI and 488.44 supplement count: + # 2,098.83 - 745.50 - 488.44 = 864.89. + ca_capi_person: [0, 864.89, 0] + +- name: Case 22, CAPI child with no marital units is not a second CAPI member of a mixed couple. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 72 + is_tax_unit_head: true + person2: + age: 68 + is_tax_unit_spouse: true + immigration_status: LEGAL_PERMANENT_RESIDENT + ssi_qualifying_quarters_earnings: 39 + person3: + age: 10 + is_tax_unit_dependent: true + is_disabled: true + meets_ssi_disability_criteria: true + immigration_status: LEGAL_PERMANENT_RESIDENT + ssi_qualifying_quarters_earnings: 39 + households: + household: + members: [person1, person2, person3] + state_code: CA + living_arrangements_allow_for_food_preparation: true + output: + # The same amounts as Case 12, which has explicit marital units. + ca_capi_person: [0, 864.89, 1_091.27] diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_person.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_person.yaml index d76c4f950b7..d2f3667bd2c 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_person.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_person.yaml @@ -860,8 +860,8 @@ # NOTE: a known limitation. The couple level is 607.83, or 303.92 each, but # SSI's couple test excludes tax dependents, so SSI and the supplement both # treat the parents as individuals. When SSI identifies couples by marriage - # (PR 10141), the head-or-spouse guards in the supplement and its rates must - # go too, or these parents would get no supplement. + # (PR 10141), the head-or-spouse guards in CAPI, the supplement and its rates + # must go too, or these parents would get no supplement. ssi: [0, 994, 994] ca_state_supplement_person: [0, 239.94, 239.94] @@ -887,7 +887,35 @@ state_code: CA living_arrangements_allow_for_food_preparation: true output: + ssi: [745.5, 745.5, 994] # With no marital units everyone shares one unit, but the child is not part # of the couple: half of 607.83 rounded up for each spouse, 97.27 for the child. ca_state_supplement_person: [303.92, 303.92, 97.27] ca_state_supplement: 705.11 + +- name: Case 35, dependent child in a Title XIX facility with no marital units does not separate the parents. + period: 2026-01 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + is_tax_unit_head: true + person2: + age: 68 + is_tax_unit_spouse: true + person3: + age: 10 + is_tax_unit_dependent: true + is_disabled: true + meets_ssi_disability_criteria: true + ca_in_medical_care_facility: true + households: + household: + members: [person1, person2, person3] + state_code: CA + living_arrangements_allow_for_food_preparation: true + output: + # The 416.414(b)(3) split needs one spouse in the facility, so the parents + # keep half of 607.83 rounded up, and the child takes the code J level. + ca_state_supplement_person: [303.92, 303.92, 32] diff --git a/policyengine_us/variables/gov/states/ca/cdss/capi/_ca_capi_ssi_ssp_standard.py b/policyengine_us/variables/gov/states/ca/cdss/capi/_ca_capi_ssi_ssp_standard.py index 8a839730be5..4c7597d171f 100644 --- a/policyengine_us/variables/gov/states/ca/cdss/capi/_ca_capi_ssi_ssp_standard.py +++ b/policyengine_us/variables/gov/states/ca/cdss/capi/_ca_capi_ssi_ssp_standard.py @@ -10,19 +10,27 @@ def ca_capi_couple_computation(person, period): SSI's couple computation, except that a couple with exactly one spouse in a Title XIX facility is computed separately (20 CFR 416.414(b)(3)), when - only the California facility input marks it. + only the California facility input marks it. Only a head or spouse is in a + couple, because a situation with no marital units puts a dependent in the + couple's unit. """ + head_or_spouse = person("is_tax_unit_head_or_spouse", period.this_year) in_facility = ca_in_title_xix_facility(person, period) - one_in_facility = person.marital_unit.sum(in_facility) == 1 - return person("ssi_couple_computation_applies", period) & ~one_in_facility + one_in_facility = person.marital_unit.sum(in_facility & head_or_spouse) == 1 + return ( + person("ssi_couple_computation_applies", period) + & ~one_in_facility + & head_or_spouse + ) def ca_capi_spouse_ssi_ssp(person, period): """Return the SSI and state supplement paid to the person's spouse. - Only a spouse who is not CAPI-eligible counts. + Only a head or spouse who is not CAPI-eligible counts. """ - spouse = ~person("ca_capi_eligible_person", period.this_year) + head_or_spouse = person("is_tax_unit_head_or_spouse", period.this_year) + spouse = ~person("ca_capi_eligible_person", period.this_year) & head_or_spouse payment = add(person, period, ["ssi", "ca_state_supplement_person"]) return person.marital_unit.sum(payment * spouse) diff --git a/policyengine_us/variables/gov/states/ca/cdss/capi/ca_capi_payment_standard.py b/policyengine_us/variables/gov/states/ca/cdss/capi/ca_capi_payment_standard.py index a7a86fb37f2..673cbe09f2c 100644 --- a/policyengine_us/variables/gov/states/ca/cdss/capi/ca_capi_payment_standard.py +++ b/policyengine_us/variables/gov/states/ca/cdss/capi/ca_capi_payment_standard.py @@ -26,8 +26,9 @@ def formula(person, period, parameters): individual, couple = ca_capi_ssi_ssp_standard(person, period, parameters) p = parameters(period).gov.states.ca.cdss.capi.payment_standard_offset joint = ca_capi_couple_computation(person, period) + head_or_spouse = person("is_tax_unit_head_or_spouse", period.this_year) capi_members = person.marital_unit.sum( - person("ca_capi_eligible_person", period.this_year) + person("ca_capi_eligible_person", period.this_year) & head_or_spouse ) # Each member of a CAPI couple takes one-half (MPP 49-050.12, 49-055.4). both_capi = joint & (capi_members > 1) diff --git a/policyengine_us/variables/gov/states/ca/cdss/capi/ca_capi_person.py b/policyengine_us/variables/gov/states/ca/cdss/capi/ca_capi_person.py index 4d785f63d29..5286b192c8d 100644 --- a/policyengine_us/variables/gov/states/ca/cdss/capi/ca_capi_person.py +++ b/policyengine_us/variables/gov/states/ca/cdss/capi/ca_capi_person.py @@ -31,7 +31,9 @@ class ca_capi_person(Variable): def formula(person, period, parameters): # When only the California facility input separates a couple that SSI # computes jointly, ssi_countable_income holds half the couple's - # income; each spouse's own income counts (20 CFR 416.414(b)(3)). + # income; each spouse's own income counts (20 CFR 416.414(b)(3)). The + # same goes for a dependent who shares the couple's unit because the + # situation has no marital units. # NOTE: this own income leaves out in-kind support and the student # earned income exclusion, which SSI's joint computation would apply. separated = person( @@ -69,9 +71,12 @@ def formula(person, period, parameters): # can still pay such a spouse SSI that SSA would not (issue 10481). capi_eligible = person("ca_capi_eligible_person", period.this_year) joint = ca_capi_couple_computation(person, period) - couple_with_spouse = joint & ~(person.marital_unit.sum(capi_eligible) > 1) + head_or_spouse = person("is_tax_unit_head_or_spouse", period.this_year) + couple_with_spouse = joint & ~( + person.marital_unit.sum(capi_eligible & head_or_spouse) > 1 + ) spouse_ssi_ssp = ca_capi_spouse_ssi_ssp(person, period) - couple_income = person.marital_unit.sum(countable_income) + couple_income = person.marital_unit.sum(countable_income * head_or_spouse) # 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. diff --git a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/ca_state_supplement_eligible_person.py b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/ca_state_supplement_eligible_person.py index c65aef296de..a4848933c87 100644 --- a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/ca_state_supplement_eligible_person.py +++ b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/ca_state_supplement_eligible_person.py @@ -4,12 +4,13 @@ class ca_state_supplement_eligible_person(Variable): value_type = bool entity = Person - label = "California SSI state supplement eligible person" + label = "Receives the California state supplement" definition_period = MONTH defined_for = StateCode.CA reference = "https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12150" def formula(person, period, parameters): - # is_ssi_eligible has no income test, so a person qualifies only when - # their income leaves a supplement to pay. + # True only for a person paid the supplement. is_ssi_eligible has no + # income test, so income that leaves no supplement makes this false, and + # so does not taking up SSI, because the amount requires take-up. return person("ca_state_supplement_person", period) > 0 diff --git a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/ca_state_supplement_person.py b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/ca_state_supplement_person.py index 69b34761f9a..29ac3b40cc5 100644 --- a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/ca_state_supplement_person.py +++ b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/ca_state_supplement_person.py @@ -35,10 +35,8 @@ class ca_state_supplement_person(Variable): def formula(person, period, parameters): # A couple with one spouse in a Title XIX facility is computed # separately, including when only the California input marks it (20 CFR - # 416.414(b)(3)). Only a head or spouse is in a couple, because a situation - # with no marital units puts a dependent in the couple's unit. - head_or_spouse = person("is_tax_unit_head_or_spouse", period.this_year) - joint = ca_capi_couple_computation(person, period) & head_or_spouse + # 416.414(b)(3)). + joint = ca_capi_couple_computation(person, period) individual_rate, couple_rate = ca_state_supplement_rates( person, period, parameters, joint ) @@ -60,6 +58,7 @@ def formula(person, period, parameters): # it equals own income whenever the spouse would receive CAPI. # NOTE: POMS SI 01320.430 D takes the lesser of each part separately; # the totals keep CAPI at zero when the spouse's income is deemed. + head_or_spouse = person("is_tax_unit_head_or_spouse", period.this_year) immigration_status = person("immigration_status", period.this_year) is_citizen = immigration_status == immigration_status.possible_values.CITIZEN is_qualified_noncitizen = person( @@ -92,7 +91,7 @@ def formula(person, period, parameters): _apply_ssi_exclusions(earned, unearned, parameters, period) / MONTHS_IN_YEAR ) ssi_countable_income = person("ssi_countable_income", period) - couple_income = person.marital_unit.sum(ssi_countable_income) + couple_income = person.marital_unit.sum(ssi_countable_income * head_or_spouse) individual_standard, couple_standard = ca_capi_ssi_ssp_standard( person, period, parameters )