From d6380a2fb23441539053b1019178cd2d07e04f83 Mon Sep 17 00:00:00 2001 From: Ziming Date: Tue, 14 Jul 2026 11:10:53 -0400 Subject: [PATCH 1/2] Count CalWORKs excess vehicle equity toward the resource limit Per CDSS ACLs 25-37 and 26-38 (MPP 42-215.4), vehicle value above the CalWORKs vehicle limit counts toward the maximum resource limit rather than disqualifying the family outright. Replace the hard eligibility cliff (ca_tanf_vehicle_value_eligible) with a countable excess variable (ca_tanf_countable_vehicle_value) that flows into ca_tanf_resources. Closes #9032 Co-Authored-By: Claude Fable 5 --- ...-calworks-vehicle-excess-equity.changed.md | 1 + .../tanf/cash/resources/limit/vehicle.yaml | 2 +- .../ca/cdss/tanf/cash/resources/sources.yaml | 3 + .../ca/marin/general_relief/integration.yaml | 5 +- .../cash/eligibility/ca_tanf_eligible.yaml | 15 +-- .../ca_tanf_resources_eligible.yaml | 41 +++++++++ .../ca_tanf_vehicle_value_eligible.yaml | 91 ------------------- .../ca_tanf_countable_vehicle_value.yaml | 80 ++++++++++++++++ .../tanf/cash/eligibility/ca_tanf_eligible.py | 8 +- .../ca_tanf_vehicle_value_eligible.py | 15 --- .../ca_tanf_countable_vehicle_value.py | 20 ++++ 11 files changed, 151 insertions(+), 130 deletions(-) create mode 100644 changelog.d/ca-calworks-vehicle-excess-equity.changed.md delete mode 100644 policyengine_us/tests/policy/baseline/gov/states/ca/cdss/tanf/cash/eligibility/ca_tanf_vehicle_value_eligible.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/ca/cdss/tanf/cash/resources/ca_tanf_countable_vehicle_value.yaml delete mode 100644 policyengine_us/variables/gov/states/ca/cdss/tanf/cash/eligibility/ca_tanf_vehicle_value_eligible.py create mode 100644 policyengine_us/variables/gov/states/ca/cdss/tanf/cash/resources/ca_tanf_countable_vehicle_value.py diff --git a/changelog.d/ca-calworks-vehicle-excess-equity.changed.md b/changelog.d/ca-calworks-vehicle-excess-equity.changed.md new file mode 100644 index 00000000000..67fd98a5d9d --- /dev/null +++ b/changelog.d/ca-calworks-vehicle-excess-equity.changed.md @@ -0,0 +1 @@ +Count CalWORKs vehicle value above the vehicle limit toward the resource limit instead of denying eligibility outright, per CDSS ACLs 25-37 and 26-38. diff --git a/policyengine_us/parameters/gov/states/ca/cdss/tanf/cash/resources/limit/vehicle.yaml b/policyengine_us/parameters/gov/states/ca/cdss/tanf/cash/resources/limit/vehicle.yaml index 97a344b20e1..8b462ec506e 100644 --- a/policyengine_us/parameters/gov/states/ca/cdss/tanf/cash/resources/limit/vehicle.yaml +++ b/policyengine_us/parameters/gov/states/ca/cdss/tanf/cash/resources/limit/vehicle.yaml @@ -1,4 +1,4 @@ -description: California limits CalWORKs to households with vehicle value below this amount. +description: California excludes vehicle value up to this amount from countable resources under the California Work Opportunity and Responsibility to Kids program. values: 2023-01-01: 32_045 diff --git a/policyengine_us/parameters/gov/states/ca/cdss/tanf/cash/resources/sources.yaml b/policyengine_us/parameters/gov/states/ca/cdss/tanf/cash/resources/sources.yaml index 17aaef4620c..64cf11b4a56 100644 --- a/policyengine_us/parameters/gov/states/ca/cdss/tanf/cash/resources/sources.yaml +++ b/policyengine_us/parameters/gov/states/ca/cdss/tanf/cash/resources/sources.yaml @@ -7,7 +7,10 @@ metadata: reference: - title: Los Angeles Department of Public Social Services E-Policy | Property Definitions href: https://epolicy.dpss.lacounty.gov/epolicy/epolicy/server/general/projects_responsive/ePolicyMaster/index.htm?&area=general&type=responsivehelp&ctxid=&project=ePolicyMaster#t=mergedProjects%2FCalWORKs%2FCalWORKs%2F42-200_Property%2F42-200_Property.htm%23Definitionsbc-4&rhtocid=_3_1_2_0_3 + - title: California Department of Social Services, All County Letter No. 26-38, Changes to Vehicle Value Limits + href: https://www.cdss.ca.gov/Portals/9/Additional-Resources/Letters-and-Notices/ACLs/2026/26-38.pdf#page=2 values: 2022-07-01: - assessed_property_value # real_property - spm_unit_cash_assets # personal_property + - ca_tanf_countable_vehicle_value # vehicle equity above the vehicle limit diff --git a/policyengine_us/tests/policy/baseline/gov/local/ca/marin/general_relief/integration.yaml b/policyengine_us/tests/policy/baseline/gov/local/ca/marin/general_relief/integration.yaml index e7b44af2824..55b7da002eb 100644 --- a/policyengine_us/tests/policy/baseline/gov/local/ca/marin/general_relief/integration.yaml +++ b/policyengine_us/tests/policy/baseline/gov/local/ca/marin/general_relief/integration.yaml @@ -675,7 +675,7 @@ members: [person1, person2] county_str: MARIN_COUNTY_CA state_code_str: CA - household_vehicles_value: 34_000 # over the CalWORKs vehicle limit ($33,499 as of July 2025) + household_vehicles_value: 50_000 # excess equity over the CalWORKs vehicle limit exceeds the resource limit tax_units: tax_unit: members: [person1, person2] @@ -687,7 +687,8 @@ members: [person1, person2] output: # Marin GR excludes adults with dependent children. CalWORKs does NOT catch - # this family -- the $34,000 vehicle exceeds the CalWORKs vehicle limit, so + # this family -- the $50,000 vehicle's equity above the vehicle limit + # ($50,000 - $33,499 = $16,501) exceeds the CalWORKs resource limit, so # ca_tanf = 0 -- but the explicit dependent-child gate makes the unit # ineligible regardless of CalWORKs receipt. ca_tanf: 0 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/tanf/cash/eligibility/ca_tanf_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/tanf/cash/eligibility/ca_tanf_eligible.yaml index 90f64602d6f..922b3301d5b 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/tanf/cash/eligibility/ca_tanf_eligible.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/tanf/cash/eligibility/ca_tanf_eligible.yaml @@ -48,7 +48,7 @@ output: ca_tanf_eligible: false -- name: Case 1, all eligible but vehicle value ineligible. +- name: Case 1, all three conditions met. period: 2025 absolute_error_margin: 0.1 input: @@ -56,18 +56,5 @@ is_demographic_tanf_eligible: true ca_tanf_financial_eligible: true ca_tanf_resources_eligible: true - ca_tanf_vehicle_value_eligible: false - output: - ca_tanf_eligible: false - -- name: Case 2, all four conditions met. - period: 2025 - absolute_error_margin: 0.1 - input: - state_code: CA - is_demographic_tanf_eligible: true - ca_tanf_financial_eligible: true - ca_tanf_resources_eligible: true - ca_tanf_vehicle_value_eligible: true output: ca_tanf_eligible: true diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/tanf/cash/eligibility/ca_tanf_resources_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/tanf/cash/eligibility/ca_tanf_resources_eligible.yaml index ed106c62d7a..2ed72001541 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/tanf/cash/eligibility/ca_tanf_resources_eligible.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/tanf/cash/eligibility/ca_tanf_resources_eligible.yaml @@ -65,3 +65,44 @@ ca_tanf_resources_limit: 12_137 output: ca_tanf_resources_eligible: true + +- name: Case 6, vehicle moderately over the vehicle limit stays eligible because only the excess counts. + period: 2026 + input: + people: + person1: + age: 30 + is_disabled: false + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: CA + household_vehicles_value: 34_000 + output: + # Vehicle excess: 34,000 - 33,499 (Jul 2025 limit) = 501 + # Resources: 501 is below the lower resource limit + ca_tanf_resources_eligible: true + +- name: Case 7, vehicle excess plus cash assets over the resource limit is ineligible. + period: 2026 + input: + people: + person1: + age: 30 + is_disabled: false + spm_units: + spm_unit: + members: [person1] + spm_unit_cash_assets: 13_000 + households: + household: + members: [person1] + state_code: CA + household_vehicles_value: 34_000 + output: + # Vehicle excess: 34,000 - 33,499 (Jul 2025 limit) = 501 + # Resources: 13,000 + 501 = 13,501 exceeds the lower resource limit + ca_tanf_resources_eligible: false diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/tanf/cash/eligibility/ca_tanf_vehicle_value_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/tanf/cash/eligibility/ca_tanf_vehicle_value_eligible.yaml deleted file mode 100644 index 1623e82d5fd..00000000000 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/tanf/cash/eligibility/ca_tanf_vehicle_value_eligible.yaml +++ /dev/null @@ -1,91 +0,0 @@ -- name: 2023 Vehicle value eligible - period: 2023 - input: - state_code: CA - household_vehicles_value: 32_045 - output: - ca_tanf_vehicle_value_eligible: true - -- name: 2023 Vehicle value ineligible - period: 2023 - input: - state_code: CA - household_vehicles_value: 32_046 - output: - ca_tanf_vehicle_value_eligible: false - -- name: 2024 Vehicle value eligible - period: 2025 - input: - state_code: CA - household_vehicles_value: 32_968 - output: - ca_tanf_vehicle_value_eligible: true - -- name: 2024 Vehicle value ineligible - period: 2025 - input: - state_code: CA - household_vehicles_value: 32_969 - output: - ca_tanf_vehicle_value_eligible: false - -- name: Case 1, zero vehicle value always eligible. - period: 2025 - absolute_error_margin: 0.1 - input: - state_code: CA - household_vehicles_value: 0 - output: - ca_tanf_vehicle_value_eligible: true - -- name: Case 2, historical 2023 vehicle limit at exact boundary $32,045. - period: 2024 - absolute_error_margin: 0.1 - input: - state_code: CA - household_vehicles_value: 32_045 - output: - ca_tanf_vehicle_value_eligible: true - -- name: Case 3, historical 2023 vehicle limit one dollar over $32,045. - period: 2024 - absolute_error_margin: 0.1 - input: - state_code: CA - household_vehicles_value: 32_046 - output: - ca_tanf_vehicle_value_eligible: false - -- name: Case 4, 2026 uses Jul 2025 vehicle limit at exact boundary $33,499. - period: 2026 - input: - state_code: CA - household_vehicles_value: 33_499 - output: - ca_tanf_vehicle_value_eligible: true - -- name: Case 5, 2026 uses Jul 2025 vehicle limit one dollar over $33,499. - period: 2026 - input: - state_code: CA - household_vehicles_value: 33_500 - output: - ca_tanf_vehicle_value_eligible: false - -- name: Case 6, 2027 uses Jul 2026 vehicle limit at exact boundary $33,626. - period: 2027 - input: - state_code: CA - household_vehicles_value: 33_626 - output: - ca_tanf_vehicle_value_eligible: true - -- name: Case 7, 2027 uses Jul 2026 vehicle limit one dollar over $33,626. - period: 2027 - input: - state_code: CA - household_vehicles_value: 33_627 - output: - ca_tanf_vehicle_value_eligible: false - diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/tanf/cash/resources/ca_tanf_countable_vehicle_value.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/tanf/cash/resources/ca_tanf_countable_vehicle_value.yaml new file mode 100644 index 00000000000..ce66315d391 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/tanf/cash/resources/ca_tanf_countable_vehicle_value.yaml @@ -0,0 +1,80 @@ +- name: Case 1, zero vehicle value has no countable vehicle value. + period: 2025 + absolute_error_margin: 0.1 + input: + state_code: CA + household_vehicles_value: 0 + output: + ca_tanf_countable_vehicle_value: 0 + +- name: Case 2, 2023 vehicle value at the $32,045 limit is fully exempt. + period: 2023 + absolute_error_margin: 0.1 + input: + state_code: CA + household_vehicles_value: 32_045 + output: + ca_tanf_countable_vehicle_value: 0 + +- name: Case 3, 2023 vehicle value one dollar over the $32,045 limit counts $1. + period: 2023 + absolute_error_margin: 0.1 + input: + state_code: CA + household_vehicles_value: 32_046 + output: + ca_tanf_countable_vehicle_value: 1 + +- name: Case 4, 2025 uses Jul 2024 limit and vehicle value at $32,968 is fully exempt. + period: 2025 + absolute_error_margin: 0.1 + input: + state_code: CA + household_vehicles_value: 32_968 + output: + ca_tanf_countable_vehicle_value: 0 + +- name: Case 5, 2025 uses Jul 2024 limit and vehicle value one dollar over $32,968 counts $1. + period: 2025 + absolute_error_margin: 0.1 + input: + state_code: CA + household_vehicles_value: 32_969 + output: + ca_tanf_countable_vehicle_value: 1 + +- name: Case 6, 2026 uses Jul 2025 limit and vehicle value at $33,499 is fully exempt. + period: 2026 + absolute_error_margin: 0.1 + input: + state_code: CA + household_vehicles_value: 33_499 + output: + ca_tanf_countable_vehicle_value: 0 + +- name: Case 7, 2026 uses Jul 2025 limit and vehicle value one dollar over $33,499 counts $1. + period: 2026 + absolute_error_margin: 0.1 + input: + state_code: CA + household_vehicles_value: 33_500 + output: + ca_tanf_countable_vehicle_value: 1 + +- name: Case 8, 2027 uses Jul 2026 limit and vehicle value at $33,626 is fully exempt. + period: 2027 + absolute_error_margin: 0.1 + input: + state_code: CA + household_vehicles_value: 33_626 + output: + ca_tanf_countable_vehicle_value: 0 + +- name: Case 9, 2027 uses Jul 2026 limit and vehicle value one dollar over $33,626 counts $1. + period: 2027 + absolute_error_margin: 0.1 + input: + state_code: CA + household_vehicles_value: 33_627 + output: + ca_tanf_countable_vehicle_value: 1 diff --git a/policyengine_us/variables/gov/states/ca/cdss/tanf/cash/eligibility/ca_tanf_eligible.py b/policyengine_us/variables/gov/states/ca/cdss/tanf/cash/eligibility/ca_tanf_eligible.py index ed02ac6b07c..f6f4d9e7e2b 100644 --- a/policyengine_us/variables/gov/states/ca/cdss/tanf/cash/eligibility/ca_tanf_eligible.py +++ b/policyengine_us/variables/gov/states/ca/cdss/tanf/cash/eligibility/ca_tanf_eligible.py @@ -12,11 +12,5 @@ def formula(spm_unit, period, parameters): demographic_eligible = spm_unit("is_demographic_tanf_eligible", period) financial_eligible = spm_unit("ca_tanf_financial_eligible", period) resources_eligible = spm_unit("ca_tanf_resources_eligible", period) - vehicle_value_eligible = spm_unit("ca_tanf_vehicle_value_eligible", period) - return ( - demographic_eligible - & financial_eligible - & resources_eligible - & vehicle_value_eligible - ) + return demographic_eligible & financial_eligible & resources_eligible diff --git a/policyengine_us/variables/gov/states/ca/cdss/tanf/cash/eligibility/ca_tanf_vehicle_value_eligible.py b/policyengine_us/variables/gov/states/ca/cdss/tanf/cash/eligibility/ca_tanf_vehicle_value_eligible.py deleted file mode 100644 index 173084e6321..00000000000 --- a/policyengine_us/variables/gov/states/ca/cdss/tanf/cash/eligibility/ca_tanf_vehicle_value_eligible.py +++ /dev/null @@ -1,15 +0,0 @@ -from policyengine_us.model_api import * - - -class ca_tanf_vehicle_value_eligible(Variable): - value_type = bool - entity = SPMUnit - label = "Eligible child for the California CalWORKs based on the vehicle value" - definition_period = YEAR - defined_for = StateCode.CA - reference = "http://epolicy.dpss.lacounty.gov/epolicy/epolicy/server/general/projects_responsive/ePolicyMaster/index.htm?&area=general&type=responsivehelp&ctxid=&project=ePolicyMaster#t=mergedProjects/CalWORKs/CalWORKs/42-215_Determining_Value_of_Property_Vehicles/42-215_Determining_Value_of_Property_Vehicles.htm" - - def formula(spm_unit, period, parameters): - vehicle_value = add(spm_unit, period, ["household_vehicles_value"]) - p = parameters(period).gov.states.ca.cdss.tanf.cash.resources.limit - return vehicle_value <= p.vehicle diff --git a/policyengine_us/variables/gov/states/ca/cdss/tanf/cash/resources/ca_tanf_countable_vehicle_value.py b/policyengine_us/variables/gov/states/ca/cdss/tanf/cash/resources/ca_tanf_countable_vehicle_value.py new file mode 100644 index 00000000000..ea53a6a021c --- /dev/null +++ b/policyengine_us/variables/gov/states/ca/cdss/tanf/cash/resources/ca_tanf_countable_vehicle_value.py @@ -0,0 +1,20 @@ +from policyengine_us.model_api import * + + +class ca_tanf_countable_vehicle_value(Variable): + value_type = float + entity = SPMUnit + label = "California CalWORKs countable vehicle value" + unit = USD + definition_period = YEAR + quantity_type = STOCK + defined_for = StateCode.CA + reference = ( + "https://www.cdss.ca.gov/Portals/9/Additional-Resources/Letters-and-Notices/ACLs/2026/26-38.pdf#page=2", + "https://www.cdss.ca.gov/Portals/9/Additional-Resources/Letters-and-Notices/ACLs/2025/25-37.pdf#page=3", + ) + + def formula(spm_unit, period, parameters): + vehicle_value = spm_unit.household("household_vehicles_value", period) + p = parameters(period).gov.states.ca.cdss.tanf.cash.resources.limit + return max_(vehicle_value - p.vehicle, 0) From 32240c7e38508e6d059577be058cc15a72b77c8e Mon Sep 17 00:00:00 2001 From: Ziming Date: Tue, 14 Jul 2026 16:46:56 -0400 Subject: [PATCH 2/2] Address review feedback on vehicle excess equity - Fix ACL 26-38 page anchors to point at the vehicle limit language - Add ACL 23-47 reference corroborating the 2023 $32,045 limit - Document the per-vehicle equity vs household FMV simplification inline - Add end-to-end integration case: over-limit vehicle family gets a grant - Add resource tests for excess-alone denial and the elderly higher limit - Add 2024 transition-year vehicle limit case; tighten error margins - Fix misnamed pre-existing ca_tanf_eligible test cases Co-Authored-By: Claude Fable 5 --- .../tanf/cash/resources/limit/vehicle.yaml | 2 + .../ca/cdss/tanf/cash/resources/sources.yaml | 2 +- .../cash/eligibility/ca_tanf_eligible.yaml | 5 +- .../ca_tanf_resources_eligible.yaml | 47 +++++++++++++++++-- .../states/ca/cdss/tanf/cash/integration.yaml | 39 +++++++++++++++ .../ca_tanf_countable_vehicle_value.yaml | 28 +++++++---- .../ca_tanf_countable_vehicle_value.py | 5 +- 7 files changed, 109 insertions(+), 19 deletions(-) diff --git a/policyengine_us/parameters/gov/states/ca/cdss/tanf/cash/resources/limit/vehicle.yaml b/policyengine_us/parameters/gov/states/ca/cdss/tanf/cash/resources/limit/vehicle.yaml index 8b462ec506e..f97d633a980 100644 --- a/policyengine_us/parameters/gov/states/ca/cdss/tanf/cash/resources/limit/vehicle.yaml +++ b/policyengine_us/parameters/gov/states/ca/cdss/tanf/cash/resources/limit/vehicle.yaml @@ -15,6 +15,8 @@ metadata: href: https://dpss.lacounty.gov/en/cash/calworks.html - title: Los Angeles Department of Public Social Services E-Policy | Determining Value of Property – Vehicles href: https://epolicy.dpss.lacounty.gov/epolicy/epolicy/server/general/projects_responsive/ePolicyMaster/index.htm?&area=general&type=responsivehelp&ctxid=&project=ePolicyMaster#t=mergedProjects/CalWORKs/CalWORKs/42-215_Determining_Value_of_Property_Vehicles/42-215_Determining_Value_of_Property_Vehicles.htm + - title: California Department of Social Services, Vehicle Value Limit Increase All County Letter 23-47 + href: https://www.cdss.ca.gov/Portals/9/Additional-Resources/Letters-and-Notices/ACLs/2023/23-47.pdf#page=3 - title: California Department of Social Services, Vehicle Value Limit Increase All County Letter 24-36 href: https://cdss.ca.gov/Portals/9/Additional-Resources/Letters-and-Notices/ACLs/2024/24-36.pdf?ver=2024-05-31-153125-453#page=3 - title: California Department of Social Services, Vehicle Value Limit Increase All County Letter 25-37 diff --git a/policyengine_us/parameters/gov/states/ca/cdss/tanf/cash/resources/sources.yaml b/policyengine_us/parameters/gov/states/ca/cdss/tanf/cash/resources/sources.yaml index 64cf11b4a56..c1c97a7dc4a 100644 --- a/policyengine_us/parameters/gov/states/ca/cdss/tanf/cash/resources/sources.yaml +++ b/policyengine_us/parameters/gov/states/ca/cdss/tanf/cash/resources/sources.yaml @@ -8,7 +8,7 @@ metadata: - title: Los Angeles Department of Public Social Services E-Policy | Property Definitions href: https://epolicy.dpss.lacounty.gov/epolicy/epolicy/server/general/projects_responsive/ePolicyMaster/index.htm?&area=general&type=responsivehelp&ctxid=&project=ePolicyMaster#t=mergedProjects%2FCalWORKs%2FCalWORKs%2F42-200_Property%2F42-200_Property.htm%23Definitionsbc-4&rhtocid=_3_1_2_0_3 - title: California Department of Social Services, All County Letter No. 26-38, Changes to Vehicle Value Limits - href: https://www.cdss.ca.gov/Portals/9/Additional-Resources/Letters-and-Notices/ACLs/2026/26-38.pdf#page=2 + href: https://www.cdss.ca.gov/Portals/9/Additional-Resources/Letters-and-Notices/ACLs/2026/26-38.pdf#page=3 values: 2022-07-01: - assessed_property_value # real_property diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/tanf/cash/eligibility/ca_tanf_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/tanf/cash/eligibility/ca_tanf_eligible.yaml index 922b3301d5b..6f6faee2b0e 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/tanf/cash/eligibility/ca_tanf_eligible.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/tanf/cash/eligibility/ca_tanf_eligible.yaml @@ -18,7 +18,7 @@ output: ca_tanf_eligible: false -- name: Is demographic ineligible, income ineligible and resource eligible. +- name: Is demographic eligible, income ineligible and resource eligible. period: 2023 input: state_code: CA @@ -28,7 +28,7 @@ output: ca_tanf_eligible: false -- name: Is demographic ineligible, income ineligible and resource ineligible. +- name: Is demographic eligible, income eligible and resource ineligible. period: 2023 input: state_code: CA @@ -50,7 +50,6 @@ - name: Case 1, all three conditions met. period: 2025 - absolute_error_margin: 0.1 input: state_code: CA is_demographic_tanf_eligible: true diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/tanf/cash/eligibility/ca_tanf_resources_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/tanf/cash/eligibility/ca_tanf_resources_eligible.yaml index 2ed72001541..56a3befc19b 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/tanf/cash/eligibility/ca_tanf_resources_eligible.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/tanf/cash/eligibility/ca_tanf_resources_eligible.yaml @@ -18,7 +18,6 @@ - name: Case 1, resources at exactly $12,137 lower limit boundary. period: 2025 - absolute_error_margin: 0.1 input: state_code: CA ca_tanf_resources: 12_137 @@ -28,7 +27,6 @@ - name: Case 2, resources one dollar above $12,137 lower limit boundary. period: 2025 - absolute_error_margin: 0.1 input: state_code: CA ca_tanf_resources: 12_138 @@ -38,7 +36,6 @@ - name: Case 3, resources at exactly $18,206 higher limit boundary. period: 2025 - absolute_error_margin: 0.1 input: state_code: CA ca_tanf_resources: 18_206 @@ -48,7 +45,6 @@ - name: Case 4, resources one dollar above $18,206 higher limit boundary. period: 2025 - absolute_error_margin: 0.1 input: state_code: CA ca_tanf_resources: 18_207 @@ -58,7 +54,6 @@ - name: Case 5, zero resources always eligible. period: 2025 - absolute_error_margin: 0.1 input: state_code: CA ca_tanf_resources: 0 @@ -106,3 +101,45 @@ # Vehicle excess: 34,000 - 33,499 (Jul 2025 limit) = 501 # Resources: 13,000 + 501 = 13,501 exceeds the lower resource limit ca_tanf_resources_eligible: false + +- name: Case 8, vehicle excess alone above the resource limit is ineligible. + period: 2026 + input: + people: + person1: + age: 30 + is_disabled: false + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: CA + household_vehicles_value: 50_000 + output: + # Vehicle excess: 50,000 - 33,499 (Jul 2025 limit) = 16,501 + # Resources: 16,501 alone exceeds the lower resource limit + ca_tanf_resources_eligible: false + +- name: Case 9, elderly member raises the resource limit above the vehicle excess plus cash. + period: 2026 + input: + people: + person1: + age: 65 + is_disabled: false + spm_units: + spm_unit: + members: [person1] + spm_unit_cash_assets: 14_000 + households: + household: + members: [person1] + state_code: CA + household_vehicles_value: 34_000 + output: + # Vehicle excess: 34,000 - 33,499 (Jul 2025 limit) = 501 + # Resources: 14,000 + 501 = 14,501 exceeds the lower resource limit + # but stays within the higher limit for households with an elderly member + ca_tanf_resources_eligible: true diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/tanf/cash/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/tanf/cash/integration.yaml index cc08402ae40..1a4d52a008c 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/tanf/cash/integration.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/tanf/cash/integration.yaml @@ -262,3 +262,42 @@ ca_tanf_maximum_payment: 16_992 # Benefit: max(16992 - 11400, 0) = 5592, all citizens so proration = 1.0 ca_tanf: 5_592 + +- name: Case 7, 2025 R1 family of 4 with vehicle over the limit still receives a grant. + period: 2025 + absolute_error_margin: 0.1 + input: + people: + person1: + age: 35 + employment_income: 18_000 + immigration_status: CITIZEN + person2: + age: 33 + employment_income: 12_000 + immigration_status: CITIZEN + person3: + age: 10 + immigration_status: CITIZEN + person4: + age: 6 + immigration_status: CITIZEN + spm_units: + spm_unit: + members: [person1, person2, person3, person4] + is_tanf_enrolled: false + households: + household: + members: [person1, person2, person3, person4] + state_code: CA + ca_tanf_region1: true + household_vehicles_value: 34_000 + output: + # Vehicle excess: 34,000 - 32,968 (limit read at Jan 1, 2025) = 1,032 + ca_tanf_countable_vehicle_value: 1_032 + # Resources: 1,032 is below the resource limit + ca_tanf_resources_eligible: true + ca_tanf_eligible: true + # Same income as Case 6: recipient countable income 11400/yr + # Benefit: max(16992 - 11400, 0) = 5592 + ca_tanf: 5_592 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/tanf/cash/resources/ca_tanf_countable_vehicle_value.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/tanf/cash/resources/ca_tanf_countable_vehicle_value.yaml index ce66315d391..330da3eee3c 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/tanf/cash/resources/ca_tanf_countable_vehicle_value.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/tanf/cash/resources/ca_tanf_countable_vehicle_value.yaml @@ -1,6 +1,6 @@ - name: Case 1, zero vehicle value has no countable vehicle value. period: 2025 - absolute_error_margin: 0.1 + absolute_error_margin: 0.01 input: state_code: CA household_vehicles_value: 0 @@ -9,7 +9,7 @@ - name: Case 2, 2023 vehicle value at the $32,045 limit is fully exempt. period: 2023 - absolute_error_margin: 0.1 + absolute_error_margin: 0.01 input: state_code: CA household_vehicles_value: 32_045 @@ -18,7 +18,7 @@ - name: Case 3, 2023 vehicle value one dollar over the $32,045 limit counts $1. period: 2023 - absolute_error_margin: 0.1 + absolute_error_margin: 0.01 input: state_code: CA household_vehicles_value: 32_046 @@ -27,7 +27,7 @@ - name: Case 4, 2025 uses Jul 2024 limit and vehicle value at $32,968 is fully exempt. period: 2025 - absolute_error_margin: 0.1 + absolute_error_margin: 0.01 input: state_code: CA household_vehicles_value: 32_968 @@ -36,7 +36,7 @@ - name: Case 5, 2025 uses Jul 2024 limit and vehicle value one dollar over $32,968 counts $1. period: 2025 - absolute_error_margin: 0.1 + absolute_error_margin: 0.01 input: state_code: CA household_vehicles_value: 32_969 @@ -45,7 +45,7 @@ - name: Case 6, 2026 uses Jul 2025 limit and vehicle value at $33,499 is fully exempt. period: 2026 - absolute_error_margin: 0.1 + absolute_error_margin: 0.01 input: state_code: CA household_vehicles_value: 33_499 @@ -54,7 +54,7 @@ - name: Case 7, 2026 uses Jul 2025 limit and vehicle value one dollar over $33,499 counts $1. period: 2026 - absolute_error_margin: 0.1 + absolute_error_margin: 0.01 input: state_code: CA household_vehicles_value: 33_500 @@ -63,7 +63,7 @@ - name: Case 8, 2027 uses Jul 2026 limit and vehicle value at $33,626 is fully exempt. period: 2027 - absolute_error_margin: 0.1 + absolute_error_margin: 0.01 input: state_code: CA household_vehicles_value: 33_626 @@ -72,9 +72,19 @@ - name: Case 9, 2027 uses Jul 2026 limit and vehicle value one dollar over $33,626 counts $1. period: 2027 - absolute_error_margin: 0.1 + absolute_error_margin: 0.01 input: state_code: CA household_vehicles_value: 33_627 output: ca_tanf_countable_vehicle_value: 1 + +- name: Case 10, 2024 uses the $32,045 limit since the July 2024 increase is read the following year. + period: 2024 + absolute_error_margin: 0.01 + input: + state_code: CA + household_vehicles_value: 32_968 + output: + # 32,968 - 32,045 (limit read at Jan 1, 2024) = 923 + ca_tanf_countable_vehicle_value: 923 diff --git a/policyengine_us/variables/gov/states/ca/cdss/tanf/cash/resources/ca_tanf_countable_vehicle_value.py b/policyengine_us/variables/gov/states/ca/cdss/tanf/cash/resources/ca_tanf_countable_vehicle_value.py index ea53a6a021c..b4f9e31400d 100644 --- a/policyengine_us/variables/gov/states/ca/cdss/tanf/cash/resources/ca_tanf_countable_vehicle_value.py +++ b/policyengine_us/variables/gov/states/ca/cdss/tanf/cash/resources/ca_tanf_countable_vehicle_value.py @@ -10,11 +10,14 @@ class ca_tanf_countable_vehicle_value(Variable): quantity_type = STOCK defined_for = StateCode.CA reference = ( - "https://www.cdss.ca.gov/Portals/9/Additional-Resources/Letters-and-Notices/ACLs/2026/26-38.pdf#page=2", + "https://www.cdss.ca.gov/Portals/9/Additional-Resources/Letters-and-Notices/ACLs/2026/26-38.pdf#page=3", "https://www.cdss.ca.gov/Portals/9/Additional-Resources/Letters-and-Notices/ACLs/2025/25-37.pdf#page=3", ) def formula(spm_unit, period, parameters): + # NOTE: The ACL applies the limit to each vehicle's equity value + # (market value less encumbrances) and fully exempts certain vehicles; + # we apply it once to the household-level total vehicle market value. vehicle_value = spm_unit.household("household_vehicles_value", period) p = parameters(period).gov.states.ca.cdss.tanf.cash.resources.limit return max_(vehicle_value - p.vehicle, 0)