diff --git a/changelog.d/ca-liheap-wave2c.added.md b/changelog.d/ca-liheap-wave2c.added.md new file mode 100644 index 00000000000..a30ba7d5ae5 --- /dev/null +++ b/changelog.d/ca-liheap-wave2c.added.md @@ -0,0 +1 @@ +Add California LIHEAP regular utility heating schedules, a covered Madera propane/fuel-oil calculation, and approved-cost wood assistance, including the federal income floor, military pensions, receipt-based benefits and allowable medical-premium deductions. diff --git a/policyengine_us/parameters/gov/states/ca/csd/liheap/eligibility/applicant_min_age.yaml b/policyengine_us/parameters/gov/states/ca/csd/liheap/eligibility/applicant_min_age.yaml new file mode 100644 index 00000000000..c4d4e837e48 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ca/csd/liheap/eligibility/applicant_min_age.yaml @@ -0,0 +1,12 @@ +description: California limits applicants to this minimum age under the Low Income Home Energy Assistance Program. +# The guide also accepts legally emancipated applicants, which existing inputs cannot identify. +values: + 2025-10-01: 18 + +metadata: + unit: year + period: year + label: California LIHEAP minimum applicant age + reference: + - title: California FY2026 LIHEAP State Plan + href: https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=219 diff --git a/policyengine_us/parameters/gov/states/ca/csd/liheap/eligibility/utility_heating_fuels.yaml b/policyengine_us/parameters/gov/states/ca/csd/liheap/eligibility/utility_heating_fuels.yaml new file mode 100644 index 00000000000..ca74984ba36 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ca/csd/liheap/eligibility/utility_heating_fuels.yaml @@ -0,0 +1,16 @@ +description: California treats heat included in rent as a utility cost for households heating with these fuels under the Low Income Home Energy Assistance Program. +# The guide computes a solar customer's energy cost from the electric and gas +# charges and requires an out-of-pocket cost such as a minimum delivery charge. +values: + 2025-10-01: + - ELECTRICITY + - NATURAL_GAS + - SOLAR + +metadata: + unit: list + period: year + label: California LIHEAP utility heating fuels + reference: + - title: "California FY2026 LIHEAP State Plan #page 182-184,264-265,279" + href: https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=182 diff --git a/policyengine_us/parameters/gov/states/ca/csd/liheap/energy_burden/expense_sources.yaml b/policyengine_us/parameters/gov/states/ca/csd/liheap/energy_burden/expense_sources.yaml new file mode 100644 index 00000000000..56e52e3caae --- /dev/null +++ b/policyengine_us/parameters/gov/states/ca/csd/liheap/energy_burden/expense_sources.yaml @@ -0,0 +1,18 @@ +description: California includes these energy costs in the energy burden numerator under the Low Income Home Energy Assistance Program. +# Annual flows approximate current monthly costs. Excludes the deprecated gas +# duplicate and non-energy bills; climate credits and seasonal timing are unobserved. +values: + 2025-10-01: + - pre_subsidy_electricity_expense + - gas_expense + - wood_expense + - bottled_gas_expense + - fuel_oil_expense + +metadata: + unit: list + period: year + label: California LIHEAP energy burden expense sources + reference: + - title: "California FY2026 LIHEAP State Plan #page 257,282" + href: https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=257 diff --git a/policyengine_us/parameters/gov/states/ca/csd/liheap/energy_burden/rounding_increment.yaml b/policyengine_us/parameters/gov/states/ca/csd/liheap/energy_burden/rounding_increment.yaml new file mode 100644 index 00000000000..b8c54a104fc --- /dev/null +++ b/policyengine_us/parameters/gov/states/ca/csd/liheap/energy_burden/rounding_increment.yaml @@ -0,0 +1,12 @@ +description: California truncates the energy burden ratio to this increment under the Low Income Home Energy Assistance Program. +# A ratio increment of 0.0001 is 0.01 percentage point (one basis point). +values: + 2025-10-01: 0.0001 + +metadata: + unit: /1 + period: year + label: California LIHEAP energy burden ratio truncation increment + reference: + - title: California FY2026 LIHEAP State Plan + href: https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=283 diff --git a/policyengine_us/parameters/gov/states/ca/csd/liheap/income/earned_income_min_age.yaml b/policyengine_us/parameters/gov/states/ca/csd/liheap/income/earned_income_min_age.yaml new file mode 100644 index 00000000000..e18cedc6626 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ca/csd/liheap/income/earned_income_min_age.yaml @@ -0,0 +1,11 @@ +description: California counts earnings of household members beginning at this age under the Low Income Home Energy Assistance Program. +values: + 2025-10-01: 18 + +metadata: + unit: year + period: year + label: California LIHEAP minimum age for countable earnings + reference: + - title: California FY2026 LIHEAP State Plan + href: https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=247 diff --git a/policyengine_us/parameters/gov/states/ca/csd/liheap/income/earned_sources.yaml b/policyengine_us/parameters/gov/states/ca/csd/liheap/income/earned_sources.yaml new file mode 100644 index 00000000000..b309b3d9b2c --- /dev/null +++ b/policyengine_us/parameters/gov/states/ca/csd/liheap/income/earned_sources.yaml @@ -0,0 +1,19 @@ +description: California counts these earned income sources under the Low Income Home Energy Assistance Program. +# Existing net business inputs include current partnership profit or loss; no extra business-expense deduction is applied. Minor earnings are excluded. +values: + 2025-10-01: + - employment_income + # Enter basic pay here or in employment_income, not both. Combat pay is excluded. + - military_basic_pay + - self_employment_income + - sstb_self_employment_income + - farm_operations_income + - partnership_s_corp_income + +metadata: + unit: list + period: year + label: California LIHEAP countable earned income sources + reference: + - title: "California FY2026 LIHEAP State Plan #page 7,231,240,247,250" + href: https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=7 diff --git a/policyengine_us/parameters/gov/states/ca/csd/liheap/income/fpg_year_lag.yaml b/policyengine_us/parameters/gov/states/ca/csd/liheap/income/fpg_year_lag.yaml new file mode 100644 index 00000000000..286de34bb14 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ca/csd/liheap/income/fpg_year_lag.yaml @@ -0,0 +1,16 @@ +description: California uses federal poverty guidelines from this many years before the modeled heating season for poverty groups and the federal income floor under the Low Income Home Energy Assistance Program. +# The FY2026 matrix uses the 2025 guidelines, which HHS made mandatory from +# October 1, 2025. The same lag applies to the income floor. Other years are +# unverified and use their corresponding lagged guidelines. +values: + 2025-10-01: 1 + +metadata: + unit: year + period: year + label: California LIHEAP federal poverty guideline year lag + reference: + - title: California FY2026 LIHEAP State Plan + href: https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=184 + - title: LIHEAP IM 2025-02, Attachment 2, poverty guidelines for mandatory use in FY26 + href: https://acf.gov/sites/default/files/documents/ocs/COMM_LIHEAP_IM2025-02_FPGSte-Table_Att2.pdf#page=1 diff --git a/policyengine_us/parameters/gov/states/ca/csd/liheap/income/monthly_rounding_increment.yaml b/policyengine_us/parameters/gov/states/ca/csd/liheap/income/monthly_rounding_increment.yaml new file mode 100644 index 00000000000..9586c3b7f2e --- /dev/null +++ b/policyengine_us/parameters/gov/states/ca/csd/liheap/income/monthly_rounding_increment.yaml @@ -0,0 +1,12 @@ +description: California publishes monthly income thresholds in increments of this amount under the Low Income Home Energy Assistance Program. +# Nearest-cent FPG thresholds and truncated SMI thresholds are inferred from the published rows, not express rounding directions. +values: + 2025-10-01: 0.01 + +metadata: + unit: currency-USD + period: year + label: California LIHEAP monthly income rounding increment + reference: + - title: California FY2026 LIHEAP State Plan + href: https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=184 diff --git a/policyengine_us/parameters/gov/states/ca/csd/liheap/income/poverty_group_rates.yaml b/policyengine_us/parameters/gov/states/ca/csd/liheap/income/poverty_group_rates.yaml new file mode 100644 index 00000000000..98160d4c724 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ca/csd/liheap/income/poverty_group_rates.yaml @@ -0,0 +1,15 @@ +description: California uses these federal poverty guideline rates as ordinary poverty-group upper boundaries under the Low Income Home Energy Assistance Program. +# Upper bounds are inclusive after monthly-cent rounding. Above-SMI categorically eligible households use the fourth group even when their ordinary fourth-group interval is empty. +values: + 2025-10-01: + - 1 + - 1.25 + - 1.5 + +metadata: + unit: list + period: year + label: California LIHEAP poverty group upper rates + reference: + - title: California FY2026 LIHEAP State Plan + href: https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=184 diff --git a/policyengine_us/parameters/gov/states/ca/csd/liheap/income/smi_rate.yaml b/policyengine_us/parameters/gov/states/ca/csd/liheap/income/smi_rate.yaml new file mode 100644 index 00000000000..2cf1ed5006b --- /dev/null +++ b/policyengine_us/parameters/gov/states/ca/csd/liheap/income/smi_rate.yaml @@ -0,0 +1,12 @@ +description: California limits ordinary income eligibility to this share of state median income under the Low Income Home Energy Assistance Program. +# CalFresh or CalWORKs recipients bypass this income test. +values: + 2025-10-01: 0.6 + +metadata: + unit: /1 + period: year + label: California LIHEAP state median income limit rate + reference: + - title: "California FY2026 LIHEAP State Plan #page 9,184" + href: https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=9 diff --git a/policyengine_us/parameters/gov/states/ca/csd/liheap/income/smi_rounding_size_limit.yaml b/policyengine_us/parameters/gov/states/ca/csd/liheap/income/smi_rounding_size_limit.yaml new file mode 100644 index 00000000000..936a1c705b7 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ca/csd/liheap/income/smi_rounding_size_limit.yaml @@ -0,0 +1,12 @@ +description: California truncates state median income limits to whole dollars through this household size under the Low Income Home Energy Assistance Program. +# Inferred numerical method, not an express rule: through size 12, truncate the four-person 60% SMI base and the size-adjusted annual amount to dollars; above size 12, add the shared federal additional-person factor times the truncated four-person base. Then truncate to monthly cents. This reproduces all 25 published FY2026 rows; sizes above 25 and other years are unverified. +values: + 2025-10-01: 12 + +metadata: + unit: person + period: year + label: California LIHEAP SMI rounding household size limit + reference: + - title: California FY2026 LIHEAP State Plan + href: https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=184 diff --git a/policyengine_us/parameters/gov/states/ca/csd/liheap/income/support_deductions.yaml b/policyengine_us/parameters/gov/states/ca/csd/liheap/income/support_deductions.yaml new file mode 100644 index 00000000000..945b87fedc9 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ca/csd/liheap/income/support_deductions.yaml @@ -0,0 +1,14 @@ +description: California deducts these legally mandated support payments from household income under the Low Income Home Energy Assistance Program. +# Child-support input specifies legally mandated payments; alimony mandate verification is not separately modeled. +values: + 2025-10-01: + - child_support_expense + - alimony_expense + +metadata: + unit: list + period: year + label: California LIHEAP support payment deductions + reference: + - title: California FY2026 LIHEAP State Plan + href: https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=247 diff --git a/policyengine_us/parameters/gov/states/ca/csd/liheap/income/unearned_sources.yaml b/policyengine_us/parameters/gov/states/ca/csd/liheap/income/unearned_sources.yaml new file mode 100644 index 00000000000..a69981ce8de --- /dev/null +++ b/policyengine_us/parameters/gov/states/ca/csd/liheap/income/unearned_sources.yaml @@ -0,0 +1,33 @@ +description: California counts these unearned income sources under the Low Income Home Energy Assistance Program. +# SSI and state SSP are monthly and are annualized once by aggregation. TANF counts actual take-up once per household; unemployment uses reported or modeled payments. Pension and retirement-distribution aggregates include their own subcomponents; military retirement includes Survivor Benefit Plan annuities. Interest use, housing-directed cash aid, royalties, jury pay and unusual insurance receipts need more detail than existing inputs provide. SNAP and friends/relative cash gifts are excluded. +values: + 2025-10-01: + - total_unemployment_compensation + - strike_benefits + - social_security + - ssi + - ca_state_supplement + - pension_income + - military_retirement_income + - railroad_benefits + - retirement_distributions + - general_assistance + - tanf + - rental_income + - farm_rent_income + - alimony_income + - child_support_received + - interest_income + - ordinary_dividend_income + - workers_compensation + - disability_benefits + - veterans_benefits + - survivor_benefits + +metadata: + unit: list + period: year + label: California LIHEAP countable unearned income sources + reference: + - title: "California FY2026 LIHEAP State Plan #page 7,229-230,232,234,236-240,243-245,247" + href: https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=7 diff --git a/policyengine_us/parameters/gov/states/ca/csd/liheap/local/madera/burden_points.yaml b/policyengine_us/parameters/gov/states/ca/csd/liheap/local/madera/burden_points.yaml new file mode 100644 index 00000000000..67b2fd665ac --- /dev/null +++ b/policyengine_us/parameters/gov/states/ca/csd/liheap/local/madera/burden_points.yaml @@ -0,0 +1,18 @@ +description: California assigns these Madera priority points by energy burden group under the Low Income Home Energy Assistance Program. +1: + 2025-10-01: 4 +2: + 2025-10-01: 6 +3: + 2025-10-01: 8 +4: + 2025-10-01: 10 + +metadata: + unit: /1 + period: year + label: California LIHEAP Madera energy burden priority points + breakdown: range(1, 5) + reference: + - title: CAP Madera FY2026 LIHEAP Local Plan + href: https://maderacap.org/wp-content/uploads/2025/10/Agenda-and-Packet-for-October-9-2025-Updated.pdf#page=191 diff --git a/policyengine_us/parameters/gov/states/ca/csd/liheap/local/madera/child_points.yaml b/policyengine_us/parameters/gov/states/ca/csd/liheap/local/madera/child_points.yaml new file mode 100644 index 00000000000..9529a55330d --- /dev/null +++ b/policyengine_us/parameters/gov/states/ca/csd/liheap/local/madera/child_points.yaml @@ -0,0 +1,26 @@ +description: California assigns these Madera priority points based on the youngest household member under the Low Income Home Energy Assistance Program. +# Each category applies once: 10 points for any child under 6 plus 5 for +# any child under 3. The scale combines the two overlapping categories. +brackets: + - threshold: + 2025-10-01: 0 + amount: + 2025-10-01: 15 + - threshold: + 2025-10-01: 3 + amount: + 2025-10-01: 10 + - threshold: + 2025-10-01: 6 + amount: + 2025-10-01: 0 + +metadata: + unit: /1 + period: year + label: California LIHEAP Madera child priority points + type: single_amount + threshold_unit: year + reference: + - title: CAP Madera FY2026 LIHEAP Local Plan + href: https://maderacap.org/wp-content/uploads/2025/10/Agenda-and-Packet-for-October-9-2025-Updated.pdf#page=191 diff --git a/policyengine_us/parameters/gov/states/ca/csd/liheap/local/madera/counties.yaml b/policyengine_us/parameters/gov/states/ca/csd/liheap/local/madera/counties.yaml new file mode 100644 index 00000000000..0e4bb7bf2fc --- /dev/null +++ b/policyengine_us/parameters/gov/states/ca/csd/liheap/local/madera/counties.yaml @@ -0,0 +1,14 @@ +description: California applies the Madera local priority plan in these counties under the Low Income Home Energy Assistance Program. +# This records researched model coverage, not a statewide eligibility restriction. +# FY2026 is verified; earlier parameter backfills are unverified historical estimates. +values: + 2025-10-01: + - MADERA_COUNTY_CA + +metadata: + unit: list + period: year + label: California LIHEAP Madera researched county coverage + reference: + - title: "CAP Madera FY2026 LIHEAP Local Plan #page 191,194" + href: https://maderacap.org/wp-content/uploads/2025/10/Agenda-and-Packet-for-October-9-2025-Updated.pdf#page=191 diff --git a/policyengine_us/parameters/gov/states/ca/csd/liheap/local/madera/disability_points.yaml b/policyengine_us/parameters/gov/states/ca/csd/liheap/local/madera/disability_points.yaml new file mode 100644 index 00000000000..5964e3c54d7 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ca/csd/liheap/local/madera/disability_points.yaml @@ -0,0 +1,11 @@ +description: California assigns this many Madera priority points for any disabled household member under the Low Income Home Energy Assistance Program. +values: + 2025-10-01: 10 + +metadata: + unit: /1 + period: year + label: California LIHEAP Madera disability priority points + reference: + - title: CAP Madera FY2026 LIHEAP Local Plan + href: https://maderacap.org/wp-content/uploads/2025/10/Agenda-and-Packet-for-October-9-2025-Updated.pdf#page=191 diff --git a/policyengine_us/parameters/gov/states/ca/csd/liheap/local/madera/elderly_points.yaml b/policyengine_us/parameters/gov/states/ca/csd/liheap/local/madera/elderly_points.yaml new file mode 100644 index 00000000000..f47654152c4 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ca/csd/liheap/local/madera/elderly_points.yaml @@ -0,0 +1,26 @@ +description: California assigns these Madera priority points based on the oldest household member under the Low Income Home Energy Assistance Program. +# Each category applies once: 10 points for any member age 60 or older plus +# 5 for any member age 70 or older. The scale combines both categories. +brackets: + - threshold: + 2025-10-01: 0 + amount: + 2025-10-01: 0 + - threshold: + 2025-10-01: 60 + amount: + 2025-10-01: 10 + - threshold: + 2025-10-01: 70 + amount: + 2025-10-01: 15 + +metadata: + unit: /1 + period: year + label: California LIHEAP Madera elderly priority points + type: single_amount + threshold_unit: year + reference: + - title: CAP Madera FY2026 LIHEAP Local Plan + href: https://maderacap.org/wp-content/uploads/2025/10/Agenda-and-Packet-for-October-9-2025-Updated.pdf#page=191 diff --git a/policyengine_us/parameters/gov/states/ca/csd/liheap/local/madera/energy_burden_group.yaml b/policyengine_us/parameters/gov/states/ca/csd/liheap/local/madera/energy_burden_group.yaml new file mode 100644 index 00000000000..84257ac834d --- /dev/null +++ b/policyengine_us/parameters/gov/states/ca/csd/liheap/local/madera/energy_burden_group.yaml @@ -0,0 +1,31 @@ +description: California assigns these Madera energy burden groups using the truncated ratio in basis points under the Low Income Home Energy Assistance Program. +# Published percentage ranges: 0–10.92, 10.93–13.46, 13.47–16.00, 16.01–100. +# Integer basis points preserve the two-decimal-percent boundaries. Values above +# the published 100% maximum are unsupported and masked by the variable. +brackets: + - threshold: + 2025-10-01: 0 + amount: + 2025-10-01: 1 + - threshold: + 2025-10-01: 1093 + amount: + 2025-10-01: 2 + - threshold: + 2025-10-01: 1347 + amount: + 2025-10-01: 3 + - threshold: + 2025-10-01: 1601 + amount: + 2025-10-01: 4 + +metadata: + unit: /1 + period: year + label: California LIHEAP Madera energy burden group + type: single_amount + threshold_unit: /1 + reference: + - title: CAP Madera FY2026 LIHEAP Local Plan + href: https://maderacap.org/wp-content/uploads/2025/10/Agenda-and-Packet-for-October-9-2025-Updated.pdf#page=191 diff --git a/policyengine_us/parameters/gov/states/ca/csd/liheap/local/madera/income_points.yaml b/policyengine_us/parameters/gov/states/ca/csd/liheap/local/madera/income_points.yaml new file mode 100644 index 00000000000..a364c8f5e40 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ca/csd/liheap/local/madera/income_points.yaml @@ -0,0 +1,18 @@ +description: California assigns these Madera priority points by poverty group under the Low Income Home Energy Assistance Program. +1: + 2025-10-01: 10 +2: + 2025-10-01: 8 +3: + 2025-10-01: 6 +4: + 2025-10-01: 4 + +metadata: + unit: /1 + period: year + label: California LIHEAP Madera income priority points + breakdown: range(1, 5) + reference: + - title: CAP Madera FY2026 LIHEAP Local Plan + href: https://maderacap.org/wp-content/uploads/2025/10/Agenda-and-Packet-for-October-9-2025-Updated.pdf#page=191 diff --git a/policyengine_us/parameters/gov/states/ca/csd/liheap/local/madera/maximum_energy_burden.yaml b/policyengine_us/parameters/gov/states/ca/csd/liheap/local/madera/maximum_energy_burden.yaml new file mode 100644 index 00000000000..439e3acfcd3 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ca/csd/liheap/local/madera/maximum_energy_burden.yaml @@ -0,0 +1,11 @@ +description: California specifies this maximum energy burden ratio in the Madera local priority table under the Low Income Home Energy Assistance Program. +values: + 2025-10-01: 1 + +metadata: + unit: /1 + period: year + label: California LIHEAP Madera maximum supported energy burden + reference: + - title: CAP Madera FY2026 LIHEAP Local Plan + href: https://maderacap.org/wp-content/uploads/2025/10/Agenda-and-Packet-for-October-9-2025-Updated.pdf#page=191 diff --git a/policyengine_us/parameters/gov/states/ca/csd/liheap/local/madera/minimum_points.yaml b/policyengine_us/parameters/gov/states/ca/csd/liheap/local/madera/minimum_points.yaml new file mode 100644 index 00000000000..0f4da6d1240 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ca/csd/liheap/local/madera/minimum_points.yaml @@ -0,0 +1,13 @@ +description: California requires at least this many Madera priority points for regular heating assistance under the Low Income Home Energy Assistance Program. +# The minimum-energy-burden answer repeats 20 points; it does not state a 20% +# burden floor. With overlapping age categories, demographics total at most 40. +values: + 2025-10-01: 20 + +metadata: + unit: /1 + period: year + label: California LIHEAP Madera minimum priority points + reference: + - title: "CAP Madera FY2026 LIHEAP Local Plan #page 189,191,233-234" + href: https://maderacap.org/wp-content/uploads/2025/10/Agenda-and-Packet-for-October-9-2025-Updated.pdf#page=189 diff --git a/policyengine_us/parameters/gov/states/ca/csd/liheap/payment/additional_person_amount.yaml b/policyengine_us/parameters/gov/states/ca/csd/liheap/payment/additional_person_amount.yaml new file mode 100644 index 00000000000..2613261341f --- /dev/null +++ b/policyengine_us/parameters/gov/states/ca/csd/liheap/payment/additional_person_amount.yaml @@ -0,0 +1,11 @@ +description: California adds this amount for each additional qualified household member to the regular utility and liquid heating schedules under the Low Income Home Energy Assistance Program. +values: + 2025-10-01: 19 + +metadata: + unit: currency-USD + period: year + label: California LIHEAP additional person amount + reference: + - title: "California FY2026 LIHEAP State Plan #page 184,188" + href: https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=184 diff --git a/policyengine_us/parameters/gov/states/ca/csd/liheap/payment/liquid_base_amount.yaml b/policyengine_us/parameters/gov/states/ca/csd/liheap/payment/liquid_base_amount.yaml new file mode 100644 index 00000000000..47635c86429 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ca/csd/liheap/payment/liquid_base_amount.yaml @@ -0,0 +1,534 @@ +description: California provides these county base benefits by poverty group for a one-person household on the ordinary liquid heating schedule under the Low Income Home Energy Assistance Program. +# All 58 published county schedules are retained. Local burden/priority coverage +# is separate; a base amount alone does not establish a modeled county award. +ALAMEDA_COUNTY_CA: + 1: + 2025-10-01: 381 + 2: + 2025-10-01: 346 + 3: + 2025-10-01: 311 + 4: + 2025-10-01: 263 +ALPINE_COUNTY_CA: + 1: + 2025-10-01: 875 + 2: + 2025-10-01: 796 + 3: + 2025-10-01: 716 + 4: + 2025-10-01: 605 +AMADOR_COUNTY_CA: + 1: + 2025-10-01: 517 + 2: + 2025-10-01: 470 + 3: + 2025-10-01: 423 + 4: + 2025-10-01: 357 +BUTTE_COUNTY_CA: + 1: + 2025-10-01: 492 + 2: + 2025-10-01: 447 + 3: + 2025-10-01: 402 + 4: + 2025-10-01: 340 +CALAVERAS_COUNTY_CA: + 1: + 2025-10-01: 548 + 2: + 2025-10-01: 498 + 3: + 2025-10-01: 448 + 4: + 2025-10-01: 379 +COLUSA_COUNTY_CA: + 1: + 2025-10-01: 427 + 2: + 2025-10-01: 388 + 3: + 2025-10-01: 349 + 4: + 2025-10-01: 295 +CONTRA_COSTA_COUNTY_CA: + 1: + 2025-10-01: 396 + 2: + 2025-10-01: 360 + 3: + 2025-10-01: 324 + 4: + 2025-10-01: 273 +DEL_NORTE_COUNTY_CA: + 1: + 2025-10-01: 691 + 2: + 2025-10-01: 628 + 3: + 2025-10-01: 566 + 4: + 2025-10-01: 478 +EL_DORADO_COUNTY_CA: + 1: + 2025-10-01: 819 + 2: + 2025-10-01: 745 + 3: + 2025-10-01: 670 + 4: + 2025-10-01: 566 +FRESNO_COUNTY_CA: + 1: + 2025-10-01: 384 + 2: + 2025-10-01: 349 + 3: + 2025-10-01: 314 + 4: + 2025-10-01: 265 +GLENN_COUNTY_CA: + 1: + 2025-10-01: 406 + 2: + 2025-10-01: 369 + 3: + 2025-10-01: 332 + 4: + 2025-10-01: 280 +HUMBOLDT_COUNTY_CA: + 1: + 2025-10-01: 561 + 2: + 2025-10-01: 510 + 3: + 2025-10-01: 459 + 4: + 2025-10-01: 387 +IMPERIAL_COUNTY_CA: + 1: + 2025-10-01: 136 + 2: + 2025-10-01: 124 + 3: + 2025-10-01: 111 + 4: + 2025-10-01: 94 +INYO_COUNTY_CA: + 1: + 2025-10-01: 587 + 2: + 2025-10-01: 534 + 3: + 2025-10-01: 481 + 4: + 2025-10-01: 406 +KERN_COUNTY_CA: + 1: + 2025-10-01: 385 + 2: + 2025-10-01: 350 + 3: + 2025-10-01: 315 + 4: + 2025-10-01: 266 +KINGS_COUNTY_CA: + 1: + 2025-10-01: 391 + 2: + 2025-10-01: 355 + 3: + 2025-10-01: 320 + 4: + 2025-10-01: 270 +LAKE_COUNTY_CA: + 1: + 2025-10-01: 511 + 2: + 2025-10-01: 465 + 3: + 2025-10-01: 418 + 4: + 2025-10-01: 353 +LASSEN_COUNTY_CA: + 1: + 2025-10-01: 915 + 2: + 2025-10-01: 832 + 3: + 2025-10-01: 749 + 4: + 2025-10-01: 633 +LOS_ANGELES_COUNTY_CA: + 1: + 2025-10-01: 211 + 2: + 2025-10-01: 192 + 3: + 2025-10-01: 172 + 4: + 2025-10-01: 146 +MADERA_COUNTY_CA: + 1: + 2025-10-01: 411 + 2: + 2025-10-01: 374 + 3: + 2025-10-01: 336 + 4: + 2025-10-01: 284 +MARIN_COUNTY_CA: + 1: + 2025-10-01: 418 + 2: + 2025-10-01: 380 + 3: + 2025-10-01: 342 + 4: + 2025-10-01: 289 +MARIPOSA_COUNTY_CA: + 1: + 2025-10-01: 769 + 2: + 2025-10-01: 699 + 3: + 2025-10-01: 629 + 4: + 2025-10-01: 531 +MENDOCINO_COUNTY_CA: + 1: + 2025-10-01: 566 + 2: + 2025-10-01: 515 + 3: + 2025-10-01: 463 + 4: + 2025-10-01: 391 +MERCED_COUNTY_CA: + 1: + 2025-10-01: 388 + 2: + 2025-10-01: 353 + 3: + 2025-10-01: 318 + 4: + 2025-10-01: 268 +MODOC_COUNTY_CA: + 1: + 2025-10-01: 996 + 2: + 2025-10-01: 905 + 3: + 2025-10-01: 815 + 4: + 2025-10-01: 688 +MONO_COUNTY_CA: + 1: + 2025-10-01: 1_000 + 2: + 2025-10-01: 1_000 + 3: + 2025-10-01: 928 + 4: + 2025-10-01: 783 +MONTEREY_COUNTY_CA: + 1: + 2025-10-01: 451 + 2: + 2025-10-01: 410 + 3: + 2025-10-01: 369 + 4: + 2025-10-01: 312 +NAPA_COUNTY_CA: + 1: + 2025-10-01: 384 + 2: + 2025-10-01: 349 + 3: + 2025-10-01: 314 + 4: + 2025-10-01: 266 +NEVADA_COUNTY_CA: + 1: + 2025-10-01: 753 + 2: + 2025-10-01: 685 + 3: + 2025-10-01: 616 + 4: + 2025-10-01: 520 +ORANGE_COUNTY_CA: + 1: + 2025-10-01: 182 + 2: + 2025-10-01: 166 + 3: + 2025-10-01: 149 + 4: + 2025-10-01: 126 +PLACER_COUNTY_CA: + 1: + 2025-10-01: 481 + 2: + 2025-10-01: 437 + 3: + 2025-10-01: 394 + 4: + 2025-10-01: 332 +PLUMAS_COUNTY_CA: + 1: + 2025-10-01: 935 + 2: + 2025-10-01: 850 + 3: + 2025-10-01: 765 + 4: + 2025-10-01: 646 +RIVERSIDE_COUNTY_CA: + 1: + 2025-10-01: 225 + 2: + 2025-10-01: 204 + 3: + 2025-10-01: 184 + 4: + 2025-10-01: 155 +SACRAMENTO_COUNTY_CA: + 1: + 2025-10-01: 384 + 2: + 2025-10-01: 349 + 3: + 2025-10-01: 314 + 4: + 2025-10-01: 265 +SAN_BENITO_COUNTY_CA: + 1: + 2025-10-01: 465 + 2: + 2025-10-01: 423 + 3: + 2025-10-01: 380 + 4: + 2025-10-01: 321 +SAN_BERNARDINO_COUNTY_CA: + 1: + 2025-10-01: 249 + 2: + 2025-10-01: 227 + 3: + 2025-10-01: 204 + 4: + 2025-10-01: 172 +SAN_DIEGO_COUNTY_CA: + 1: + 2025-10-01: 234 + 2: + 2025-10-01: 213 + 3: + 2025-10-01: 191 + 4: + 2025-10-01: 162 +SAN_FRANCISCO_COUNTY_CA: + 1: + 2025-10-01: 422 + 2: + 2025-10-01: 383 + 3: + 2025-10-01: 345 + 4: + 2025-10-01: 291 +SAN_JOAQUIN_COUNTY_CA: + 1: + 2025-10-01: 379 + 2: + 2025-10-01: 345 + 3: + 2025-10-01: 310 + 4: + 2025-10-01: 262 +SAN_LUIS_OBISPO_COUNTY_CA: + 1: + 2025-10-01: 409 + 2: + 2025-10-01: 372 + 3: + 2025-10-01: 335 + 4: + 2025-10-01: 283 +SAN_MATEO_COUNTY_CA: + 1: + 2025-10-01: 397 + 2: + 2025-10-01: 360 + 3: + 2025-10-01: 324 + 4: + 2025-10-01: 274 +SANTA_BARBARA_COUNTY_CA: + 1: + 2025-10-01: 365 + 2: + 2025-10-01: 332 + 3: + 2025-10-01: 299 + 4: + 2025-10-01: 252 +SANTA_CLARA_COUNTY_CA: + 1: + 2025-10-01: 356 + 2: + 2025-10-01: 323 + 3: + 2025-10-01: 291 + 4: + 2025-10-01: 246 +SANTA_CRUZ_COUNTY_CA: + 1: + 2025-10-01: 406 + 2: + 2025-10-01: 369 + 3: + 2025-10-01: 332 + 4: + 2025-10-01: 281 +SHASTA_COUNTY_CA: + 1: + 2025-10-01: 496 + 2: + 2025-10-01: 451 + 3: + 2025-10-01: 406 + 4: + 2025-10-01: 342 +SIERRA_COUNTY_CA: + 1: + 2025-10-01: 927 + 2: + 2025-10-01: 842 + 3: + 2025-10-01: 758 + 4: + 2025-10-01: 640 +SISKIYOU_COUNTY_CA: + 1: + 2025-10-01: 805 + 2: + 2025-10-01: 732 + 3: + 2025-10-01: 658 + 4: + 2025-10-01: 556 +SOLANO_COUNTY_CA: + 1: + 2025-10-01: 385 + 2: + 2025-10-01: 350 + 3: + 2025-10-01: 315 + 4: + 2025-10-01: 266 +SONOMA_COUNTY_CA: + 1: + 2025-10-01: 427 + 2: + 2025-10-01: 388 + 3: + 2025-10-01: 349 + 4: + 2025-10-01: 295 +STANISLAUS_COUNTY_CA: + 1: + 2025-10-01: 351 + 2: + 2025-10-01: 319 + 3: + 2025-10-01: 287 + 4: + 2025-10-01: 242 +SUTTER_COUNTY_CA: + 1: + 2025-10-01: 370 + 2: + 2025-10-01: 337 + 3: + 2025-10-01: 303 + 4: + 2025-10-01: 256 +TEHAMA_COUNTY_CA: + 1: + 2025-10-01: 519 + 2: + 2025-10-01: 472 + 3: + 2025-10-01: 424 + 4: + 2025-10-01: 358 +TRINITY_COUNTY_CA: + 1: + 2025-10-01: 615 + 2: + 2025-10-01: 559 + 3: + 2025-10-01: 503 + 4: + 2025-10-01: 425 +TULARE_COUNTY_CA: + 1: + 2025-10-01: 389 + 2: + 2025-10-01: 353 + 3: + 2025-10-01: 318 + 4: + 2025-10-01: 269 +TUOLUMNE_COUNTY_CA: + 1: + 2025-10-01: 595 + 2: + 2025-10-01: 541 + 3: + 2025-10-01: 487 + 4: + 2025-10-01: 411 +VENTURA_COUNTY_CA: + 1: + 2025-10-01: 285 + 2: + 2025-10-01: 259 + 3: + 2025-10-01: 233 + 4: + 2025-10-01: 197 +YOLO_COUNTY_CA: + 1: + 2025-10-01: 383 + 2: + 2025-10-01: 348 + 3: + 2025-10-01: 313 + 4: + 2025-10-01: 264 +YUBA_COUNTY_CA: + 1: + 2025-10-01: 448 + 2: + 2025-10-01: 407 + 3: + 2025-10-01: 366 + 4: + 2025-10-01: 309 + +metadata: + unit: currency-USD + period: year + label: California LIHEAP liquid base benefit + propagate_metadata_to_children: true + reference: + - title: "California FY2026 LIHEAP State Plan #page 185-186" + href: https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=185 diff --git a/policyengine_us/parameters/gov/states/ca/csd/liheap/payment/liquid_burden_addition.yaml b/policyengine_us/parameters/gov/states/ca/csd/liheap/payment/liquid_burden_addition.yaml new file mode 100644 index 00000000000..4bb7bae5863 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ca/csd/liheap/payment/liquid_burden_addition.yaml @@ -0,0 +1,18 @@ +description: California adds these amounts by energy burden group to the ordinary liquid heating schedule under the Low Income Home Energy Assistance Program. +1: + 2025-10-01: 0 +2: + 2025-10-01: 35 +3: + 2025-10-01: 70 +4: + 2025-10-01: 105 + +metadata: + unit: currency-USD + period: year + label: California LIHEAP liquid energy burden addition + breakdown: range(1, 5) + reference: + - title: "California FY2026 LIHEAP State Plan #page 187-188" + href: https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=187 diff --git a/policyengine_us/parameters/gov/states/ca/csd/liheap/payment/liquid_vulnerable_amount.yaml b/policyengine_us/parameters/gov/states/ca/csd/liheap/payment/liquid_vulnerable_amount.yaml new file mode 100644 index 00000000000..e0ea419433e --- /dev/null +++ b/policyengine_us/parameters/gov/states/ca/csd/liheap/payment/liquid_vulnerable_amount.yaml @@ -0,0 +1,11 @@ +description: California adds this amount once when a household has any vulnerable member in the ordinary liquid heating schedule under the Low Income Home Energy Assistance Program. +values: + 2025-10-01: 105 + +metadata: + unit: currency-USD + period: year + label: California LIHEAP liquid vulnerable household addition + reference: + - title: "California FY2026 LIHEAP State Plan #page 187-188" + href: https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=187 diff --git a/policyengine_us/parameters/gov/states/ca/csd/liheap/payment/maximum_payment_household_size.yaml b/policyengine_us/parameters/gov/states/ca/csd/liheap/payment/maximum_payment_household_size.yaml new file mode 100644 index 00000000000..6d676edf36d --- /dev/null +++ b/policyengine_us/parameters/gov/states/ca/csd/liheap/payment/maximum_payment_household_size.yaml @@ -0,0 +1,11 @@ +description: California caps regular utility and liquid payment household-size increments at this many qualified members under the Low Income Home Energy Assistance Program. +values: + 2025-10-01: 6 + +metadata: + unit: person + period: year + label: California LIHEAP maximum payment household size + reference: + - title: "California FY2026 LIHEAP State Plan #page 184,188" + href: https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=184 diff --git a/policyengine_us/parameters/gov/states/ca/csd/liheap/payment/utility_base_amount.yaml b/policyengine_us/parameters/gov/states/ca/csd/liheap/payment/utility_base_amount.yaml new file mode 100644 index 00000000000..a9ddb29cd4d --- /dev/null +++ b/policyengine_us/parameters/gov/states/ca/csd/liheap/payment/utility_base_amount.yaml @@ -0,0 +1,534 @@ +description: California provides these county base benefits by poverty group for a one-person household under the regular utility heating component of the Low Income Home Energy Assistance Program. +metadata: + propagate_metadata_to_children: true + unit: currency-USD + period: year + label: California LIHEAP utility base benefit + reference: + - title: "California FY2026 LIHEAP State Plan, county utility payment matrix #page 182-184" + href: https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=182 +# Only the 58 California counties are represented. The formula safely masks +# counties outside this table before lookup instead of creating zero policies +# for every other county. Provider rows repeat the same county amounts. +ALAMEDA_COUNTY_CA: + 1: + 2025-10-01: 484 + 2: + 2025-10-01: 404 + 3: + 2025-10-01: 356 + 4: + 2025-10-01: 308 +ALPINE_COUNTY_CA: + 1: + 2025-10-01: 688 + 2: + 2025-10-01: 566 + 3: + 2025-10-01: 492 + 4: + 2025-10-01: 419 +AMADOR_COUNTY_CA: + 1: + 2025-10-01: 738 + 2: + 2025-10-01: 605 + 3: + 2025-10-01: 526 + 4: + 2025-10-01: 446 +BUTTE_COUNTY_CA: + 1: + 2025-10-01: 692 + 2: + 2025-10-01: 569 + 3: + 2025-10-01: 495 + 4: + 2025-10-01: 421 +CALAVERAS_COUNTY_CA: + 1: + 2025-10-01: 715 + 2: + 2025-10-01: 587 + 3: + 2025-10-01: 510 + 4: + 2025-10-01: 433 +COLUSA_COUNTY_CA: + 1: + 2025-10-01: 718 + 2: + 2025-10-01: 589 + 3: + 2025-10-01: 512 + 4: + 2025-10-01: 435 +CONTRA_COSTA_COUNTY_CA: + 1: + 2025-10-01: 618 + 2: + 2025-10-01: 510 + 3: + 2025-10-01: 445 + 4: + 2025-10-01: 381 +DEL_NORTE_COUNTY_CA: + 1: + 2025-10-01: 674 + 2: + 2025-10-01: 554 + 3: + 2025-10-01: 482 + 4: + 2025-10-01: 411 +EL_DORADO_COUNTY_CA: + 1: + 2025-10-01: 714 + 2: + 2025-10-01: 586 + 3: + 2025-10-01: 509 + 4: + 2025-10-01: 433 +FRESNO_COUNTY_CA: + 1: + 2025-10-01: 716 + 2: + 2025-10-01: 588 + 3: + 2025-10-01: 511 + 4: + 2025-10-01: 434 +GLENN_COUNTY_CA: + 1: + 2025-10-01: 698 + 2: + 2025-10-01: 574 + 3: + 2025-10-01: 499 + 4: + 2025-10-01: 424 +HUMBOLDT_COUNTY_CA: + 1: + 2025-10-01: 525 + 2: + 2025-10-01: 436 + 3: + 2025-10-01: 383 + 4: + 2025-10-01: 330 +IMPERIAL_COUNTY_CA: + 1: + 2025-10-01: 621 + 2: + 2025-10-01: 512 + 3: + 2025-10-01: 447 + 4: + 2025-10-01: 382 +INYO_COUNTY_CA: + 1: + 2025-10-01: 530 + 2: + 2025-10-01: 440 + 3: + 2025-10-01: 386 + 4: + 2025-10-01: 333 +KERN_COUNTY_CA: + 1: + 2025-10-01: 648 + 2: + 2025-10-01: 534 + 3: + 2025-10-01: 466 + 4: + 2025-10-01: 397 +KINGS_COUNTY_CA: + 1: + 2025-10-01: 635 + 2: + 2025-10-01: 523 + 3: + 2025-10-01: 457 + 4: + 2025-10-01: 390 +LAKE_COUNTY_CA: + 1: + 2025-10-01: 802 + 2: + 2025-10-01: 656 + 3: + 2025-10-01: 568 + 4: + 2025-10-01: 480 +LASSEN_COUNTY_CA: + 1: + 2025-10-01: 660 + 2: + 2025-10-01: 543 + 3: + 2025-10-01: 473 + 4: + 2025-10-01: 403 +LOS_ANGELES_COUNTY_CA: + 1: + 2025-10-01: 487 + 2: + 2025-10-01: 407 + 3: + 2025-10-01: 358 + 4: + 2025-10-01: 310 +MADERA_COUNTY_CA: + 1: + 2025-10-01: 702 + 2: + 2025-10-01: 576 + 3: + 2025-10-01: 501 + 4: + 2025-10-01: 426 +MARIN_COUNTY_CA: + 1: + 2025-10-01: 652 + 2: + 2025-10-01: 537 + 3: + 2025-10-01: 468 + 4: + 2025-10-01: 399 +MARIPOSA_COUNTY_CA: + 1: + 2025-10-01: 719 + 2: + 2025-10-01: 590 + 3: + 2025-10-01: 513 + 4: + 2025-10-01: 435 +MENDOCINO_COUNTY_CA: + 1: + 2025-10-01: 610 + 2: + 2025-10-01: 504 + 3: + 2025-10-01: 440 + 4: + 2025-10-01: 376 +MERCED_COUNTY_CA: + 1: + 2025-10-01: 674 + 2: + 2025-10-01: 554 + 3: + 2025-10-01: 482 + 4: + 2025-10-01: 411 +MODOC_COUNTY_CA: + 1: + 2025-10-01: 614 + 2: + 2025-10-01: 507 + 3: + 2025-10-01: 442 + 4: + 2025-10-01: 378 +MONO_COUNTY_CA: + 1: + 2025-10-01: 622 + 2: + 2025-10-01: 514 + 3: + 2025-10-01: 448 + 4: + 2025-10-01: 383 +MONTEREY_COUNTY_CA: + 1: + 2025-10-01: 502 + 2: + 2025-10-01: 418 + 3: + 2025-10-01: 368 + 4: + 2025-10-01: 318 +NAPA_COUNTY_CA: + 1: + 2025-10-01: 628 + 2: + 2025-10-01: 518 + 3: + 2025-10-01: 452 + 4: + 2025-10-01: 386 +NEVADA_COUNTY_CA: + 1: + 2025-10-01: 837 + 2: + 2025-10-01: 684 + 3: + 2025-10-01: 591 + 4: + 2025-10-01: 499 +ORANGE_COUNTY_CA: + 1: + 2025-10-01: 542 + 2: + 2025-10-01: 450 + 3: + 2025-10-01: 394 + 4: + 2025-10-01: 339 +PLACER_COUNTY_CA: + 1: + 2025-10-01: 663 + 2: + 2025-10-01: 546 + 3: + 2025-10-01: 476 + 4: + 2025-10-01: 405 +PLUMAS_COUNTY_CA: + 1: + 2025-10-01: 620 + 2: + 2025-10-01: 512 + 3: + 2025-10-01: 447 + 4: + 2025-10-01: 382 +RIVERSIDE_COUNTY_CA: + 1: + 2025-10-01: 633 + 2: + 2025-10-01: 522 + 3: + 2025-10-01: 456 + 4: + 2025-10-01: 389 +SACRAMENTO_COUNTY_CA: + 1: + 2025-10-01: 580 + 2: + 2025-10-01: 480 + 3: + 2025-10-01: 420 + 4: + 2025-10-01: 360 +SAN_BENITO_COUNTY_CA: + 1: + 2025-10-01: 544 + 2: + 2025-10-01: 451 + 3: + 2025-10-01: 396 + 4: + 2025-10-01: 340 +SAN_BERNARDINO_COUNTY_CA: + 1: + 2025-10-01: 590 + 2: + 2025-10-01: 488 + 3: + 2025-10-01: 426 + 4: + 2025-10-01: 365 +SAN_DIEGO_COUNTY_CA: + 1: + 2025-10-01: 492 + 2: + 2025-10-01: 411 + 3: + 2025-10-01: 362 + 4: + 2025-10-01: 313 +SAN_FRANCISCO_COUNTY_CA: + 1: + 2025-10-01: 469 + 2: + 2025-10-01: 392 + 3: + 2025-10-01: 346 + 4: + 2025-10-01: 300 +SAN_JOAQUIN_COUNTY_CA: + 1: + 2025-10-01: 697 + 2: + 2025-10-01: 572 + 3: + 2025-10-01: 498 + 4: + 2025-10-01: 423 +SAN_LUIS_OBISPO_COUNTY_CA: + 1: + 2025-10-01: 522 + 2: + 2025-10-01: 434 + 3: + 2025-10-01: 381 + 4: + 2025-10-01: 328 +SAN_MATEO_COUNTY_CA: + 1: + 2025-10-01: 576 + 2: + 2025-10-01: 477 + 3: + 2025-10-01: 417 + 4: + 2025-10-01: 358 +SANTA_BARBARA_COUNTY_CA: + 1: + 2025-10-01: 437 + 2: + 2025-10-01: 367 + 3: + 2025-10-01: 325 + 4: + 2025-10-01: 283 +SANTA_CLARA_COUNTY_CA: + 1: + 2025-10-01: 546 + 2: + 2025-10-01: 453 + 3: + 2025-10-01: 397 + 4: + 2025-10-01: 341 +SANTA_CRUZ_COUNTY_CA: + 1: + 2025-10-01: 541 + 2: + 2025-10-01: 449 + 3: + 2025-10-01: 394 + 4: + 2025-10-01: 339 +SHASTA_COUNTY_CA: + 1: + 2025-10-01: 758 + 2: + 2025-10-01: 621 + 3: + 2025-10-01: 538 + 4: + 2025-10-01: 456 +SIERRA_COUNTY_CA: + 1: + 2025-10-01: 648 + 2: + 2025-10-01: 534 + 3: + 2025-10-01: 465 + 4: + 2025-10-01: 397 +SISKIYOU_COUNTY_CA: + 1: + 2025-10-01: 673 + 2: + 2025-10-01: 553 + 3: + 2025-10-01: 482 + 4: + 2025-10-01: 410 +SOLANO_COUNTY_CA: + 1: + 2025-10-01: 579 + 2: + 2025-10-01: 479 + 3: + 2025-10-01: 419 + 4: + 2025-10-01: 359 +SONOMA_COUNTY_CA: + 1: + 2025-10-01: 563 + 2: + 2025-10-01: 467 + 3: + 2025-10-01: 409 + 4: + 2025-10-01: 351 +STANISLAUS_COUNTY_CA: + 1: + 2025-10-01: 659 + 2: + 2025-10-01: 542 + 3: + 2025-10-01: 472 + 4: + 2025-10-01: 403 +SUTTER_COUNTY_CA: + 1: + 2025-10-01: 721 + 2: + 2025-10-01: 592 + 3: + 2025-10-01: 514 + 4: + 2025-10-01: 437 +TEHAMA_COUNTY_CA: + 1: + 2025-10-01: 753 + 2: + 2025-10-01: 617 + 3: + 2025-10-01: 535 + 4: + 2025-10-01: 454 +TRINITY_COUNTY_CA: + 1: + 2025-10-01: 503 + 2: + 2025-10-01: 419 + 3: + 2025-10-01: 368 + 4: + 2025-10-01: 318 +TULARE_COUNTY_CA: + 1: + 2025-10-01: 618 + 2: + 2025-10-01: 510 + 3: + 2025-10-01: 445 + 4: + 2025-10-01: 381 +TUOLUMNE_COUNTY_CA: + 1: + 2025-10-01: 723 + 2: + 2025-10-01: 593 + 3: + 2025-10-01: 515 + 4: + 2025-10-01: 437 +VENTURA_COUNTY_CA: + 1: + 2025-10-01: 459 + 2: + 2025-10-01: 384 + 3: + 2025-10-01: 340 + 4: + 2025-10-01: 295 +YOLO_COUNTY_CA: + 1: + 2025-10-01: 565 + 2: + 2025-10-01: 468 + 3: + 2025-10-01: 410 + 4: + 2025-10-01: 352 +YUBA_COUNTY_CA: + 1: + 2025-10-01: 713 + 2: + 2025-10-01: 585 + 3: + 2025-10-01: 508 + 4: + 2025-10-01: 432 diff --git a/policyengine_us/parameters/gov/states/ca/csd/liheap/payment/wpo_maximum.yaml b/policyengine_us/parameters/gov/states/ca/csd/liheap/payment/wpo_maximum.yaml new file mode 100644 index 00000000000..bf356247023 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ca/csd/liheap/payment/wpo_maximum.yaml @@ -0,0 +1,11 @@ +description: California caps ordinary wood, propane, and oil heating assistance at this amount before any discretionary vendor-service supplement under the Low Income Home Energy Assistance Program. +values: + 2025-10-01: 1_000 + +metadata: + unit: currency-USD + period: year + label: California LIHEAP ordinary wood, propane, and oil heating maximum + reference: + - title: "California FY2026 LIHEAP State Plan #page 10,187-188" + href: https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=10 diff --git a/policyengine_us/programs.yaml b/policyengine_us/programs.yaml index 1cf850d0e10..c181505c73b 100644 --- a/policyengine_us/programs.yaml +++ b/policyengine_us/programs.yaml @@ -987,7 +987,7 @@ programs: category: Benefits agency: HHS status: partial - coverage: AK, AR, AL, AZ, CO, DC, DE, GA, HI, Riverside County, MA, FL, IL, IA, IN, KS, KY, LA, MD, ME, MN, MO, MS, MT, NC, ND, NE, NH, NJ, NM, NV, NY, OH, OK, OR, PA, SC, SD, RI, TN, TX, UT, VA, VT, WA, WI, WY + coverage: AK, AR, AL, AZ, CA, CO, DC, DE, GA, HI, Riverside County, MA, FL, IL, IA, IN, KS, KY, LA, MD, ME, MN, MO, MS, MT, NC, ND, NE, NH, NJ, NM, NV, NY, OH, OK, OR, PA, SC, SD, RI, TN, TX, UT, VA, VT, WA, WI, WY state_implementations: - state: AL status: partial @@ -1020,6 +1020,14 @@ programs: parameter_prefix: gov.states.az.des.liheap verified_years: "2026" notes: FY2026 Standard benefit covering heating and cooling bills from the point-based benefit matrix. Crisis assistance, water for evaporative cooling and weatherization are out of scope. + - state: CA + status: partial + name: California utility HEAP + full_name: California Home Energy Assistance Program utility heating component + variable: ca_liheap_utility_heating + parameter_prefix: gov.states.ca.csd.liheap + verified_years: "2026" + notes: FY2026 regular utility heating on gas and electric accounts, Madera propane and fuel-oil heating, and statewide wood heating from an approved delivery cost; other liquid-fuel service areas and vendor-service supplements are not modeled. Crisis, cooling, weatherization and equipment assistance are out of scope. - state: CO status: partial name: Colorado LEAP diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/csd/liheap/ca_liheap_covered_liquid_heating.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/csd/liheap/ca_liheap_covered_liquid_heating.yaml new file mode 100644 index 00000000000..8f82023accf --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/csd/liheap/ca_liheap_covered_liquid_heating.yaml @@ -0,0 +1,4123 @@ +# PDF pages 184-188,193,205,229,234,257,279,282-283 +# https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=184 +# PDF pages 191,233-234 +# https://maderacap.org/wp-content/uploads/2025/10/Agenda-and-Packet-for-October-9-2025-Updated.pdf#page=191 +# FY2026 ordinary liquid component; no discretionary vendor supplement. +# Annual recurring income/costs represent the same application month. +# Conditional statewide schedule cases explicitly force only coverage, burden +# and priority; all other cases derive CA LIHEAP intermediates from raw facts. + + +# Madera BBA411/374/336/284. Row1:411+105=516 at exactly20points. +# Row2:411+70=481 scheduled but18points<20 gives no approval. +# Row3:284+70+105=459; row4:284+19+35+105=443. These are ordinary +# no-supplement awards; income and expenses are annualized raw facts. +- name: "Case 1, Madera published rules yield the four independently calculated outcomes." + period: 2026 + input: + people: + p1_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p2_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p3_1: {"age": 60, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p4_1: {"age": 60, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 36000} + p4_2: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0} + spm_units: + s1: + members: ["p1_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 2040 + s2: + members: ["p2_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1800 + s3: + members: ["p3_1"] + heating_type: "FUEL_OIL" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + fuel_oil_expense: 4200 + s4: + members: ["p4_1", "p4_2"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 3960 + households: + h1: + members: ["p1_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h2: + members: ["p2_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h3: + members: ["p3_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h4: + members: ["p4_1", "p4_2"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + output: + ca_liheap_liquid_heating_covered: [true, true, true, true] + ca_liheap_countable_income: [12000, 12000, 30000, 36000] + ca_liheap_income_group: [1, 1, 4, 4] + ca_liheap_energy_burden_group: [4, 3, 3, 2] + ca_liheap_madera_priority_points: [20, 18, 22, 20] + ca_liheap_covered_liquid_heating: [516, 0, 459, 443] + +# Income group1, burden group4 and noVP:411+105+19*(4,5,5). +# Seven real members are supplied in the last household; no size override. +- name: "Case 2, family increment stops at six qualified members." + period: 2026 + input: + people: + p1_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p1_2: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0} + p1_3: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0} + p1_4: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0} + p1_5: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0} + p2_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p2_2: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0} + p2_3: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0} + p2_4: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0} + p2_5: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0} + p2_6: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0} + p3_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p3_2: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0} + p3_3: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0} + p3_4: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0} + p3_5: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0} + p3_6: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0} + p3_7: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0} + spm_units: + s1: + members: ["p1_1", "p1_2", "p1_3", "p1_4", "p1_5"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 2040 + s2: + members: ["p2_1", "p2_2", "p2_3", "p2_4", "p2_5", "p2_6"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 2040 + s3: + members: ["p3_1", "p3_2", "p3_3", "p3_4", "p3_5", "p3_6", "p3_7"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 2040 + households: + h1: + members: ["p1_1", "p1_2", "p1_3", "p1_4", "p1_5"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h2: + members: ["p2_1", "p2_2", "p2_3", "p2_4", "p2_5", "p2_6"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h3: + members: ["p3_1", "p3_2", "p3_3", "p3_4", "p3_5", "p3_6", "p3_7"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + output: + ca_liheap_household_size: [5, 6, 7] + ca_liheap_liquid_heating_covered: [true, true, true] + ca_liheap_covered_liquid_heating: [592, 611, 611] + +# Row1 counts both adults income but only one in size; elderly household +# member still triggers once-onlyVP:411+105+105=621. Row2 excludes age17 +# earnings but counts pension:411+19+105=535. Remaining rows lack a +# qualified adult applicant, despite having covered burden/fuel facts. +- name: "Case 3, nonqualified income minor unearned income and all-member vulnerability interact." + period: 2026 + input: + people: + p1_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 6000} + p1_2: {"age": 70, "is_citizen_or_legal_immigrant": false, "ssi": 0, "employment_income": 6000} + p2_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 6000} + p2_2: {"age": 17, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 10000, "pension_income": 6000} + p3_1: {"age": 17, "is_citizen_or_legal_immigrant": true, "ssi": 0, "pension_income": 12000} + p4_1: {"age": 40, "is_citizen_or_legal_immigrant": false, "ssi": 0, "employment_income": 12000} + p4_2: {"age": 5, "is_citizen_or_legal_immigrant": true, "ssi": 0} + spm_units: + s1: + members: ["p1_1", "p1_2"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 2040 + s2: + members: ["p2_1", "p2_2"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 2040 + s3: + members: ["p3_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 2040 + s4: + members: ["p4_1", "p4_2"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 2040 + households: + h1: + members: ["p1_1", "p1_2"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h2: + members: ["p2_1", "p2_2"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h3: + members: ["p3_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h4: + members: ["p4_1", "p4_2"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + output: + ca_liheap_household_size: [1, 2, 1, 1] + ca_liheap_countable_income: [12000, 12000, 12000, 12000] + ca_liheap_liquid_heating_covered: [true, true, true, true] + ca_liheap_basic_eligible: [true, true, false, false] + ca_liheap_covered_liquid_heating: [621, 535, 0, 0] + +# Every zero here is an uncovered component output, not a legal denial: +# Fresno local bands, zero-income handling, above100 percent handling, wood +# prices and Oregon lie outside this staged component. Coverage must always +# be read with the monetary result. +- name: "Case 4, unsupported rows expose their coverage flag beside component zero." + period: 2026 + input: + people: + p1_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p2_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 0} + p3_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p4_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p5_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + spm_units: + s1: + members: ["p1_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 2040 + s2: + members: ["p2_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 2040 + s3: + members: ["p3_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 12000.12 + s4: + members: ["p4_1"] + heating_type: "WOOD" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + wood_expense: 2040 + s5: + members: ["p5_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 2040 + households: + h1: + members: ["p1_1"] + state_code: "CA" + county: "FRESNO_COUNTY_CA" + h2: + members: ["p2_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h3: + members: ["p3_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h4: + members: ["p4_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h5: + members: ["p5_1"] + state_code: "OR" + county: "MULTNOMAH_COUNTY_OR" + output: + ca_liheap_liquid_heating_covered: [false, false, false, false, false] + ca_liheap_covered_liquid_heating: [0, 0, 0, 0, 0] + +# All energy costs12+2028=2040 establish17 percent burden. The source +# liquid schedule411+105=516 is not capped at the12 propane expenditure. +- name: "Case 5, a low primary-fuel bill does not cap the ordinary scheduled payment." + period: 2026 + input: + people: + p1_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + spm_units: + s1: + members: ["p1_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 12 + pre_subsidy_electricity_expense: 2028 + households: + h1: + members: ["p1_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + output: + ca_liheap_liquid_heating_covered: [true] + ca_liheap_energy_burden_group: [4] + ca_liheap_covered_liquid_heating: [516] + +# Four qualified members give411+3*19=468; group1 burden adds0; +# anyVP adds105 exactly once, yielding573 despite five priority categories. +- name: "Case 6, every vulnerable category adds the dollar supplement only once." + period: 2026 + input: + people: + p1_1: {"age": 70, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000, "is_disabled": true} + p1_2: {"age": 75, "is_citizen_or_legal_immigrant": true, "ssi": 0, "is_disabled": true} + p1_3: {"age": 2.5, "is_citizen_or_legal_immigrant": true, "ssi": 0} + p1_4: {"age": 1, "is_citizen_or_legal_immigrant": true, "ssi": 0} + spm_units: + s1: + members: ["p1_1", "p1_2", "p1_3", "p1_4"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + households: + h1: + members: ["p1_1", "p1_2", "p1_3", "p1_4"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + output: + ca_liheap_madera_priority_points: [54] + ca_liheap_covered_liquid_heating: [573] + +# ISOLATED CONDITIONAL SCHEDULE ONLY, not a determination of local approval. +# All58 county rows were read from original state-plan pp185–186 and checked +# against the research CSV. Coverage/group1/priority20 are supplied ONLY in +# this isolated table check; one raw qualified adult and source income band +# remain real. Group1 burden adds0 and noVP is present, so the schedule +# equals the published county BBA. Unrecovered local rules are not inferred. +- name: "Case 7, conditional statewide schedule reproduces every county base in income group 1." + period: 2026 + input: + people: + p1_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p2_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p3_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p4_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p5_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p6_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p7_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p8_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p9_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p10_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p11_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p12_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p13_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p14_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p15_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p16_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p17_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p18_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p19_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p20_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p21_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p22_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p23_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p24_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p25_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p26_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p27_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p28_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p29_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p30_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p31_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p32_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p33_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p34_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p35_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p36_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p37_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p38_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p39_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p40_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p41_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p42_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p43_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p44_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p45_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p46_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p47_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p48_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p49_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p50_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p51_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p52_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p53_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p54_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p55_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p56_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p57_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p58_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + spm_units: + s1: + members: ["p1_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s2: + members: ["p2_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s3: + members: ["p3_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s4: + members: ["p4_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s5: + members: ["p5_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s6: + members: ["p6_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s7: + members: ["p7_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s8: + members: ["p8_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s9: + members: ["p9_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s10: + members: ["p10_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s11: + members: ["p11_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s12: + members: ["p12_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s13: + members: ["p13_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s14: + members: ["p14_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s15: + members: ["p15_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s16: + members: ["p16_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s17: + members: ["p17_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s18: + members: ["p18_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s19: + members: ["p19_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s20: + members: ["p20_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s21: + members: ["p21_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s22: + members: ["p22_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s23: + members: ["p23_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s24: + members: ["p24_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s25: + members: ["p25_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s26: + members: ["p26_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s27: + members: ["p27_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s28: + members: ["p28_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s29: + members: ["p29_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s30: + members: ["p30_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s31: + members: ["p31_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s32: + members: ["p32_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s33: + members: ["p33_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s34: + members: ["p34_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s35: + members: ["p35_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s36: + members: ["p36_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s37: + members: ["p37_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s38: + members: ["p38_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s39: + members: ["p39_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s40: + members: ["p40_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s41: + members: ["p41_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s42: + members: ["p42_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s43: + members: ["p43_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s44: + members: ["p44_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s45: + members: ["p45_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s46: + members: ["p46_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s47: + members: ["p47_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s48: + members: ["p48_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s49: + members: ["p49_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s50: + members: ["p50_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s51: + members: ["p51_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s52: + members: ["p52_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s53: + members: ["p53_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s54: + members: ["p54_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s55: + members: ["p55_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s56: + members: ["p56_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s57: + members: ["p57_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s58: + members: ["p58_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + households: + h1: + members: ["p1_1"] + state_code: "CA" + county: "ALAMEDA_COUNTY_CA" + h2: + members: ["p2_1"] + state_code: "CA" + county: "ALPINE_COUNTY_CA" + h3: + members: ["p3_1"] + state_code: "CA" + county: "EL_DORADO_COUNTY_CA" + h4: + members: ["p4_1"] + state_code: "CA" + county: "AMADOR_COUNTY_CA" + h5: + members: ["p5_1"] + state_code: "CA" + county: "CALAVERAS_COUNTY_CA" + h6: + members: ["p6_1"] + state_code: "CA" + county: "TUOLUMNE_COUNTY_CA" + h7: + members: ["p7_1"] + state_code: "CA" + county: "BUTTE_COUNTY_CA" + h8: + members: ["p8_1"] + state_code: "CA" + county: "COLUSA_COUNTY_CA" + h9: + members: ["p9_1"] + state_code: "CA" + county: "GLENN_COUNTY_CA" + h10: + members: ["p10_1"] + state_code: "CA" + county: "TRINITY_COUNTY_CA" + h11: + members: ["p11_1"] + state_code: "CA" + county: "CONTRA_COSTA_COUNTY_CA" + h12: + members: ["p12_1"] + state_code: "CA" + county: "DEL_NORTE_COUNTY_CA" + h13: + members: ["p13_1"] + state_code: "CA" + county: "FRESNO_COUNTY_CA" + h14: + members: ["p14_1"] + state_code: "CA" + county: "HUMBOLDT_COUNTY_CA" + h15: + members: ["p15_1"] + state_code: "CA" + county: "IMPERIAL_COUNTY_CA" + h16: + members: ["p16_1"] + state_code: "CA" + county: "SAN_DIEGO_COUNTY_CA" + h17: + members: ["p17_1"] + state_code: "CA" + county: "INYO_COUNTY_CA" + h18: + members: ["p18_1"] + state_code: "CA" + county: "MONO_COUNTY_CA" + h19: + members: ["p19_1"] + state_code: "CA" + county: "KERN_COUNTY_CA" + h20: + members: ["p20_1"] + state_code: "CA" + county: "KINGS_COUNTY_CA" + h21: + members: ["p21_1"] + state_code: "CA" + county: "LAKE_COUNTY_CA" + h22: + members: ["p22_1"] + state_code: "CA" + county: "MENDOCINO_COUNTY_CA" + h23: + members: ["p23_1"] + state_code: "CA" + county: "NAPA_COUNTY_CA" + h24: + members: ["p24_1"] + state_code: "CA" + county: "SOLANO_COUNTY_CA" + h25: + members: ["p25_1"] + state_code: "CA" + county: "SONOMA_COUNTY_CA" + h26: + members: ["p26_1"] + state_code: "CA" + county: "YOLO_COUNTY_CA" + h27: + members: ["p27_1"] + state_code: "CA" + county: "LASSEN_COUNTY_CA" + h28: + members: ["p28_1"] + state_code: "CA" + county: "LOS_ANGELES_COUNTY_CA" + h29: + members: ["p29_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h30: + members: ["p30_1"] + state_code: "CA" + county: "MARIN_COUNTY_CA" + h31: + members: ["p31_1"] + state_code: "CA" + county: "MARIPOSA_COUNTY_CA" + h32: + members: ["p32_1"] + state_code: "CA" + county: "MERCED_COUNTY_CA" + h33: + members: ["p33_1"] + state_code: "CA" + county: "MODOC_COUNTY_CA" + h34: + members: ["p34_1"] + state_code: "CA" + county: "MONTEREY_COUNTY_CA" + h35: + members: ["p35_1"] + state_code: "CA" + county: "SAN_FRANCISCO_COUNTY_CA" + h36: + members: ["p36_1"] + state_code: "CA" + county: "SAN_MATEO_COUNTY_CA" + h37: + members: ["p37_1"] + state_code: "CA" + county: "SANTA_CRUZ_COUNTY_CA" + h38: + members: ["p38_1"] + state_code: "CA" + county: "NEVADA_COUNTY_CA" + h39: + members: ["p39_1"] + state_code: "CA" + county: "PLACER_COUNTY_CA" + h40: + members: ["p40_1"] + state_code: "CA" + county: "ORANGE_COUNTY_CA" + h41: + members: ["p41_1"] + state_code: "CA" + county: "PLUMAS_COUNTY_CA" + h42: + members: ["p42_1"] + state_code: "CA" + county: "SIERRA_COUNTY_CA" + h43: + members: ["p43_1"] + state_code: "CA" + county: "RIVERSIDE_COUNTY_CA" + h44: + members: ["p44_1"] + state_code: "CA" + county: "SACRAMENTO_COUNTY_CA" + h45: + members: ["p45_1"] + state_code: "CA" + county: "SUTTER_COUNTY_CA" + h46: + members: ["p46_1"] + state_code: "CA" + county: "YUBA_COUNTY_CA" + h47: + members: ["p47_1"] + state_code: "CA" + county: "SAN_BENITO_COUNTY_CA" + h48: + members: ["p48_1"] + state_code: "CA" + county: "SAN_BERNARDINO_COUNTY_CA" + h49: + members: ["p49_1"] + state_code: "CA" + county: "SAN_JOAQUIN_COUNTY_CA" + h50: + members: ["p50_1"] + state_code: "CA" + county: "SAN_LUIS_OBISPO_COUNTY_CA" + h51: + members: ["p51_1"] + state_code: "CA" + county: "SANTA_BARBARA_COUNTY_CA" + h52: + members: ["p52_1"] + state_code: "CA" + county: "SANTA_CLARA_COUNTY_CA" + h53: + members: ["p53_1"] + state_code: "CA" + county: "SHASTA_COUNTY_CA" + h54: + members: ["p54_1"] + state_code: "CA" + county: "TEHAMA_COUNTY_CA" + h55: + members: ["p55_1"] + state_code: "CA" + county: "SISKIYOU_COUNTY_CA" + h56: + members: ["p56_1"] + state_code: "CA" + county: "STANISLAUS_COUNTY_CA" + h57: + members: ["p57_1"] + state_code: "CA" + county: "TULARE_COUNTY_CA" + h58: + members: ["p58_1"] + state_code: "CA" + county: "VENTURA_COUNTY_CA" + output: + ca_liheap_covered_liquid_heating: [381, 875, 819, 517, 548, 595, 492, 427, 406, 615, 396, 691, 384, 561, 136, 234, 587, 1000, 385, 391, 511, 566, 384, 385, 427, 383, 915, 211, 411, 418, 769, 388, 996, 451, 422, 397, 406, 753, 481, 182, 935, 927, 225, 384, 370, 448, 465, 249, 379, 409, 365, 356, 496, 519, 805, 351, 389, 285] + +# ISOLATED CONDITIONAL SCHEDULE ONLY, not a determination of local approval. +# All58 county rows were read from original state-plan pp185–186 and checked +# against the research CSV. Coverage/group1/priority20 are supplied ONLY in +# this isolated table check; one raw qualified adult and source income band +# remain real. Group1 burden adds0 and noVP is present, so the schedule +# equals the published county BBA. Unrecovered local rules are not inferred. +- name: "Case 8, conditional statewide schedule reproduces every county base in income group 2." + period: 2026 + input: + people: + p1_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p2_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p3_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p4_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p5_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p6_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p7_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p8_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p9_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p10_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p11_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p12_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p13_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p14_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p15_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p16_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p17_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p18_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p19_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p20_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p21_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p22_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p23_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p24_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p25_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p26_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p27_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p28_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p29_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p30_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p31_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p32_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p33_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p34_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p35_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p36_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p37_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p38_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p39_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p40_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p41_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p42_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p43_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p44_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p45_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p46_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p47_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p48_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p49_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p50_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p51_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p52_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p53_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p54_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p55_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p56_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p57_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p58_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + spm_units: + s1: + members: ["p1_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s2: + members: ["p2_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s3: + members: ["p3_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s4: + members: ["p4_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s5: + members: ["p5_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s6: + members: ["p6_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s7: + members: ["p7_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s8: + members: ["p8_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s9: + members: ["p9_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s10: + members: ["p10_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s11: + members: ["p11_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s12: + members: ["p12_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s13: + members: ["p13_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s14: + members: ["p14_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s15: + members: ["p15_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s16: + members: ["p16_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s17: + members: ["p17_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s18: + members: ["p18_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s19: + members: ["p19_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s20: + members: ["p20_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s21: + members: ["p21_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s22: + members: ["p22_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s23: + members: ["p23_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s24: + members: ["p24_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s25: + members: ["p25_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s26: + members: ["p26_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s27: + members: ["p27_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s28: + members: ["p28_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s29: + members: ["p29_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s30: + members: ["p30_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s31: + members: ["p31_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s32: + members: ["p32_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s33: + members: ["p33_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s34: + members: ["p34_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s35: + members: ["p35_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s36: + members: ["p36_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s37: + members: ["p37_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s38: + members: ["p38_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s39: + members: ["p39_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s40: + members: ["p40_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s41: + members: ["p41_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s42: + members: ["p42_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s43: + members: ["p43_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s44: + members: ["p44_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s45: + members: ["p45_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s46: + members: ["p46_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s47: + members: ["p47_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s48: + members: ["p48_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s49: + members: ["p49_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s50: + members: ["p50_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s51: + members: ["p51_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s52: + members: ["p52_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s53: + members: ["p53_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s54: + members: ["p54_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s55: + members: ["p55_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s56: + members: ["p56_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s57: + members: ["p57_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s58: + members: ["p58_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + households: + h1: + members: ["p1_1"] + state_code: "CA" + county: "ALAMEDA_COUNTY_CA" + h2: + members: ["p2_1"] + state_code: "CA" + county: "ALPINE_COUNTY_CA" + h3: + members: ["p3_1"] + state_code: "CA" + county: "EL_DORADO_COUNTY_CA" + h4: + members: ["p4_1"] + state_code: "CA" + county: "AMADOR_COUNTY_CA" + h5: + members: ["p5_1"] + state_code: "CA" + county: "CALAVERAS_COUNTY_CA" + h6: + members: ["p6_1"] + state_code: "CA" + county: "TUOLUMNE_COUNTY_CA" + h7: + members: ["p7_1"] + state_code: "CA" + county: "BUTTE_COUNTY_CA" + h8: + members: ["p8_1"] + state_code: "CA" + county: "COLUSA_COUNTY_CA" + h9: + members: ["p9_1"] + state_code: "CA" + county: "GLENN_COUNTY_CA" + h10: + members: ["p10_1"] + state_code: "CA" + county: "TRINITY_COUNTY_CA" + h11: + members: ["p11_1"] + state_code: "CA" + county: "CONTRA_COSTA_COUNTY_CA" + h12: + members: ["p12_1"] + state_code: "CA" + county: "DEL_NORTE_COUNTY_CA" + h13: + members: ["p13_1"] + state_code: "CA" + county: "FRESNO_COUNTY_CA" + h14: + members: ["p14_1"] + state_code: "CA" + county: "HUMBOLDT_COUNTY_CA" + h15: + members: ["p15_1"] + state_code: "CA" + county: "IMPERIAL_COUNTY_CA" + h16: + members: ["p16_1"] + state_code: "CA" + county: "SAN_DIEGO_COUNTY_CA" + h17: + members: ["p17_1"] + state_code: "CA" + county: "INYO_COUNTY_CA" + h18: + members: ["p18_1"] + state_code: "CA" + county: "MONO_COUNTY_CA" + h19: + members: ["p19_1"] + state_code: "CA" + county: "KERN_COUNTY_CA" + h20: + members: ["p20_1"] + state_code: "CA" + county: "KINGS_COUNTY_CA" + h21: + members: ["p21_1"] + state_code: "CA" + county: "LAKE_COUNTY_CA" + h22: + members: ["p22_1"] + state_code: "CA" + county: "MENDOCINO_COUNTY_CA" + h23: + members: ["p23_1"] + state_code: "CA" + county: "NAPA_COUNTY_CA" + h24: + members: ["p24_1"] + state_code: "CA" + county: "SOLANO_COUNTY_CA" + h25: + members: ["p25_1"] + state_code: "CA" + county: "SONOMA_COUNTY_CA" + h26: + members: ["p26_1"] + state_code: "CA" + county: "YOLO_COUNTY_CA" + h27: + members: ["p27_1"] + state_code: "CA" + county: "LASSEN_COUNTY_CA" + h28: + members: ["p28_1"] + state_code: "CA" + county: "LOS_ANGELES_COUNTY_CA" + h29: + members: ["p29_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h30: + members: ["p30_1"] + state_code: "CA" + county: "MARIN_COUNTY_CA" + h31: + members: ["p31_1"] + state_code: "CA" + county: "MARIPOSA_COUNTY_CA" + h32: + members: ["p32_1"] + state_code: "CA" + county: "MERCED_COUNTY_CA" + h33: + members: ["p33_1"] + state_code: "CA" + county: "MODOC_COUNTY_CA" + h34: + members: ["p34_1"] + state_code: "CA" + county: "MONTEREY_COUNTY_CA" + h35: + members: ["p35_1"] + state_code: "CA" + county: "SAN_FRANCISCO_COUNTY_CA" + h36: + members: ["p36_1"] + state_code: "CA" + county: "SAN_MATEO_COUNTY_CA" + h37: + members: ["p37_1"] + state_code: "CA" + county: "SANTA_CRUZ_COUNTY_CA" + h38: + members: ["p38_1"] + state_code: "CA" + county: "NEVADA_COUNTY_CA" + h39: + members: ["p39_1"] + state_code: "CA" + county: "PLACER_COUNTY_CA" + h40: + members: ["p40_1"] + state_code: "CA" + county: "ORANGE_COUNTY_CA" + h41: + members: ["p41_1"] + state_code: "CA" + county: "PLUMAS_COUNTY_CA" + h42: + members: ["p42_1"] + state_code: "CA" + county: "SIERRA_COUNTY_CA" + h43: + members: ["p43_1"] + state_code: "CA" + county: "RIVERSIDE_COUNTY_CA" + h44: + members: ["p44_1"] + state_code: "CA" + county: "SACRAMENTO_COUNTY_CA" + h45: + members: ["p45_1"] + state_code: "CA" + county: "SUTTER_COUNTY_CA" + h46: + members: ["p46_1"] + state_code: "CA" + county: "YUBA_COUNTY_CA" + h47: + members: ["p47_1"] + state_code: "CA" + county: "SAN_BENITO_COUNTY_CA" + h48: + members: ["p48_1"] + state_code: "CA" + county: "SAN_BERNARDINO_COUNTY_CA" + h49: + members: ["p49_1"] + state_code: "CA" + county: "SAN_JOAQUIN_COUNTY_CA" + h50: + members: ["p50_1"] + state_code: "CA" + county: "SAN_LUIS_OBISPO_COUNTY_CA" + h51: + members: ["p51_1"] + state_code: "CA" + county: "SANTA_BARBARA_COUNTY_CA" + h52: + members: ["p52_1"] + state_code: "CA" + county: "SANTA_CLARA_COUNTY_CA" + h53: + members: ["p53_1"] + state_code: "CA" + county: "SHASTA_COUNTY_CA" + h54: + members: ["p54_1"] + state_code: "CA" + county: "TEHAMA_COUNTY_CA" + h55: + members: ["p55_1"] + state_code: "CA" + county: "SISKIYOU_COUNTY_CA" + h56: + members: ["p56_1"] + state_code: "CA" + county: "STANISLAUS_COUNTY_CA" + h57: + members: ["p57_1"] + state_code: "CA" + county: "TULARE_COUNTY_CA" + h58: + members: ["p58_1"] + state_code: "CA" + county: "VENTURA_COUNTY_CA" + output: + ca_liheap_covered_liquid_heating: [346, 796, 745, 470, 498, 541, 447, 388, 369, 559, 360, 628, 349, 510, 124, 213, 534, 1000, 350, 355, 465, 515, 349, 350, 388, 348, 832, 192, 374, 380, 699, 353, 905, 410, 383, 360, 369, 685, 437, 166, 850, 842, 204, 349, 337, 407, 423, 227, 345, 372, 332, 323, 451, 472, 732, 319, 353, 259] + +# ISOLATED CONDITIONAL SCHEDULE ONLY, not a determination of local approval. +# All58 county rows were read from original state-plan pp185–186 and checked +# against the research CSV. Coverage/group1/priority20 are supplied ONLY in +# this isolated table check; one raw qualified adult and source income band +# remain real. Group1 burden adds0 and noVP is present, so the schedule +# equals the published county BBA. Unrecovered local rules are not inferred. +- name: "Case 9, conditional statewide schedule reproduces every county base in income group 3." + period: 2026 + input: + people: + p1_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p2_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p3_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p4_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p5_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p6_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p7_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p8_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p9_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p10_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p11_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p12_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p13_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p14_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p15_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p16_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p17_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p18_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p19_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p20_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p21_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p22_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p23_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p24_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p25_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p26_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p27_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p28_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p29_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p30_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p31_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p32_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p33_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p34_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p35_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p36_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p37_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p38_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p39_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p40_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p41_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p42_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p43_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p44_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p45_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p46_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p47_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p48_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p49_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p50_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p51_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p52_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p53_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p54_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p55_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p56_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p57_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p58_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + spm_units: + s1: + members: ["p1_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s2: + members: ["p2_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s3: + members: ["p3_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s4: + members: ["p4_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s5: + members: ["p5_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s6: + members: ["p6_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s7: + members: ["p7_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s8: + members: ["p8_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s9: + members: ["p9_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s10: + members: ["p10_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s11: + members: ["p11_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s12: + members: ["p12_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s13: + members: ["p13_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s14: + members: ["p14_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s15: + members: ["p15_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s16: + members: ["p16_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s17: + members: ["p17_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s18: + members: ["p18_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s19: + members: ["p19_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s20: + members: ["p20_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s21: + members: ["p21_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s22: + members: ["p22_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s23: + members: ["p23_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s24: + members: ["p24_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s25: + members: ["p25_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s26: + members: ["p26_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s27: + members: ["p27_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s28: + members: ["p28_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s29: + members: ["p29_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s30: + members: ["p30_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s31: + members: ["p31_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s32: + members: ["p32_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s33: + members: ["p33_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s34: + members: ["p34_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s35: + members: ["p35_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s36: + members: ["p36_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s37: + members: ["p37_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s38: + members: ["p38_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s39: + members: ["p39_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s40: + members: ["p40_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s41: + members: ["p41_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s42: + members: ["p42_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s43: + members: ["p43_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s44: + members: ["p44_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s45: + members: ["p45_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s46: + members: ["p46_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s47: + members: ["p47_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s48: + members: ["p48_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s49: + members: ["p49_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s50: + members: ["p50_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s51: + members: ["p51_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s52: + members: ["p52_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s53: + members: ["p53_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s54: + members: ["p54_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s55: + members: ["p55_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s56: + members: ["p56_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s57: + members: ["p57_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s58: + members: ["p58_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + households: + h1: + members: ["p1_1"] + state_code: "CA" + county: "ALAMEDA_COUNTY_CA" + h2: + members: ["p2_1"] + state_code: "CA" + county: "ALPINE_COUNTY_CA" + h3: + members: ["p3_1"] + state_code: "CA" + county: "EL_DORADO_COUNTY_CA" + h4: + members: ["p4_1"] + state_code: "CA" + county: "AMADOR_COUNTY_CA" + h5: + members: ["p5_1"] + state_code: "CA" + county: "CALAVERAS_COUNTY_CA" + h6: + members: ["p6_1"] + state_code: "CA" + county: "TUOLUMNE_COUNTY_CA" + h7: + members: ["p7_1"] + state_code: "CA" + county: "BUTTE_COUNTY_CA" + h8: + members: ["p8_1"] + state_code: "CA" + county: "COLUSA_COUNTY_CA" + h9: + members: ["p9_1"] + state_code: "CA" + county: "GLENN_COUNTY_CA" + h10: + members: ["p10_1"] + state_code: "CA" + county: "TRINITY_COUNTY_CA" + h11: + members: ["p11_1"] + state_code: "CA" + county: "CONTRA_COSTA_COUNTY_CA" + h12: + members: ["p12_1"] + state_code: "CA" + county: "DEL_NORTE_COUNTY_CA" + h13: + members: ["p13_1"] + state_code: "CA" + county: "FRESNO_COUNTY_CA" + h14: + members: ["p14_1"] + state_code: "CA" + county: "HUMBOLDT_COUNTY_CA" + h15: + members: ["p15_1"] + state_code: "CA" + county: "IMPERIAL_COUNTY_CA" + h16: + members: ["p16_1"] + state_code: "CA" + county: "SAN_DIEGO_COUNTY_CA" + h17: + members: ["p17_1"] + state_code: "CA" + county: "INYO_COUNTY_CA" + h18: + members: ["p18_1"] + state_code: "CA" + county: "MONO_COUNTY_CA" + h19: + members: ["p19_1"] + state_code: "CA" + county: "KERN_COUNTY_CA" + h20: + members: ["p20_1"] + state_code: "CA" + county: "KINGS_COUNTY_CA" + h21: + members: ["p21_1"] + state_code: "CA" + county: "LAKE_COUNTY_CA" + h22: + members: ["p22_1"] + state_code: "CA" + county: "MENDOCINO_COUNTY_CA" + h23: + members: ["p23_1"] + state_code: "CA" + county: "NAPA_COUNTY_CA" + h24: + members: ["p24_1"] + state_code: "CA" + county: "SOLANO_COUNTY_CA" + h25: + members: ["p25_1"] + state_code: "CA" + county: "SONOMA_COUNTY_CA" + h26: + members: ["p26_1"] + state_code: "CA" + county: "YOLO_COUNTY_CA" + h27: + members: ["p27_1"] + state_code: "CA" + county: "LASSEN_COUNTY_CA" + h28: + members: ["p28_1"] + state_code: "CA" + county: "LOS_ANGELES_COUNTY_CA" + h29: + members: ["p29_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h30: + members: ["p30_1"] + state_code: "CA" + county: "MARIN_COUNTY_CA" + h31: + members: ["p31_1"] + state_code: "CA" + county: "MARIPOSA_COUNTY_CA" + h32: + members: ["p32_1"] + state_code: "CA" + county: "MERCED_COUNTY_CA" + h33: + members: ["p33_1"] + state_code: "CA" + county: "MODOC_COUNTY_CA" + h34: + members: ["p34_1"] + state_code: "CA" + county: "MONTEREY_COUNTY_CA" + h35: + members: ["p35_1"] + state_code: "CA" + county: "SAN_FRANCISCO_COUNTY_CA" + h36: + members: ["p36_1"] + state_code: "CA" + county: "SAN_MATEO_COUNTY_CA" + h37: + members: ["p37_1"] + state_code: "CA" + county: "SANTA_CRUZ_COUNTY_CA" + h38: + members: ["p38_1"] + state_code: "CA" + county: "NEVADA_COUNTY_CA" + h39: + members: ["p39_1"] + state_code: "CA" + county: "PLACER_COUNTY_CA" + h40: + members: ["p40_1"] + state_code: "CA" + county: "ORANGE_COUNTY_CA" + h41: + members: ["p41_1"] + state_code: "CA" + county: "PLUMAS_COUNTY_CA" + h42: + members: ["p42_1"] + state_code: "CA" + county: "SIERRA_COUNTY_CA" + h43: + members: ["p43_1"] + state_code: "CA" + county: "RIVERSIDE_COUNTY_CA" + h44: + members: ["p44_1"] + state_code: "CA" + county: "SACRAMENTO_COUNTY_CA" + h45: + members: ["p45_1"] + state_code: "CA" + county: "SUTTER_COUNTY_CA" + h46: + members: ["p46_1"] + state_code: "CA" + county: "YUBA_COUNTY_CA" + h47: + members: ["p47_1"] + state_code: "CA" + county: "SAN_BENITO_COUNTY_CA" + h48: + members: ["p48_1"] + state_code: "CA" + county: "SAN_BERNARDINO_COUNTY_CA" + h49: + members: ["p49_1"] + state_code: "CA" + county: "SAN_JOAQUIN_COUNTY_CA" + h50: + members: ["p50_1"] + state_code: "CA" + county: "SAN_LUIS_OBISPO_COUNTY_CA" + h51: + members: ["p51_1"] + state_code: "CA" + county: "SANTA_BARBARA_COUNTY_CA" + h52: + members: ["p52_1"] + state_code: "CA" + county: "SANTA_CLARA_COUNTY_CA" + h53: + members: ["p53_1"] + state_code: "CA" + county: "SHASTA_COUNTY_CA" + h54: + members: ["p54_1"] + state_code: "CA" + county: "TEHAMA_COUNTY_CA" + h55: + members: ["p55_1"] + state_code: "CA" + county: "SISKIYOU_COUNTY_CA" + h56: + members: ["p56_1"] + state_code: "CA" + county: "STANISLAUS_COUNTY_CA" + h57: + members: ["p57_1"] + state_code: "CA" + county: "TULARE_COUNTY_CA" + h58: + members: ["p58_1"] + state_code: "CA" + county: "VENTURA_COUNTY_CA" + output: + ca_liheap_covered_liquid_heating: [311, 716, 670, 423, 448, 487, 402, 349, 332, 503, 324, 566, 314, 459, 111, 191, 481, 928, 315, 320, 418, 463, 314, 315, 349, 313, 749, 172, 336, 342, 629, 318, 815, 369, 345, 324, 332, 616, 394, 149, 765, 758, 184, 314, 303, 366, 380, 204, 310, 335, 299, 291, 406, 424, 658, 287, 318, 233] + +# ISOLATED CONDITIONAL SCHEDULE ONLY, not a determination of local approval. +# All58 county rows were read from original state-plan pp185–186 and checked +# against the research CSV. Coverage/group1/priority20 are supplied ONLY in +# this isolated table check; one raw qualified adult and source income band +# remain real. Group1 burden adds0 and noVP is present, so the schedule +# equals the published county BBA. Unrecovered local rules are not inferred. +- name: "Case 10, conditional statewide schedule reproduces every county base in income group 4." + period: 2026 + input: + people: + p1_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p2_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p3_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p4_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p5_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p6_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p7_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p8_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p9_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p10_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p11_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p12_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p13_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p14_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p15_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p16_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p17_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p18_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p19_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p20_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p21_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p22_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p23_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p24_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p25_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p26_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p27_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p28_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p29_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p30_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p31_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p32_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p33_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p34_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p35_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p36_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p37_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p38_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p39_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p40_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p41_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p42_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p43_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p44_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p45_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p46_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p47_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p48_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p49_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p50_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p51_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p52_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p53_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p54_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p55_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p56_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p57_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + p58_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + spm_units: + s1: + members: ["p1_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s2: + members: ["p2_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s3: + members: ["p3_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s4: + members: ["p4_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s5: + members: ["p5_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s6: + members: ["p6_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s7: + members: ["p7_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s8: + members: ["p8_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s9: + members: ["p9_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s10: + members: ["p10_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s11: + members: ["p11_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s12: + members: ["p12_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s13: + members: ["p13_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s14: + members: ["p14_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s15: + members: ["p15_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s16: + members: ["p16_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s17: + members: ["p17_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s18: + members: ["p18_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s19: + members: ["p19_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s20: + members: ["p20_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s21: + members: ["p21_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s22: + members: ["p22_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s23: + members: ["p23_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s24: + members: ["p24_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s25: + members: ["p25_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s26: + members: ["p26_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s27: + members: ["p27_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s28: + members: ["p28_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s29: + members: ["p29_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s30: + members: ["p30_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s31: + members: ["p31_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s32: + members: ["p32_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s33: + members: ["p33_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s34: + members: ["p34_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s35: + members: ["p35_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s36: + members: ["p36_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s37: + members: ["p37_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s38: + members: ["p38_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s39: + members: ["p39_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s40: + members: ["p40_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s41: + members: ["p41_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s42: + members: ["p42_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s43: + members: ["p43_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s44: + members: ["p44_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s45: + members: ["p45_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s46: + members: ["p46_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s47: + members: ["p47_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s48: + members: ["p48_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s49: + members: ["p49_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s50: + members: ["p50_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s51: + members: ["p51_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s52: + members: ["p52_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s53: + members: ["p53_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s54: + members: ["p54_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s55: + members: ["p55_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s56: + members: ["p56_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s57: + members: ["p57_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s58: + members: ["p58_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + households: + h1: + members: ["p1_1"] + state_code: "CA" + county: "ALAMEDA_COUNTY_CA" + h2: + members: ["p2_1"] + state_code: "CA" + county: "ALPINE_COUNTY_CA" + h3: + members: ["p3_1"] + state_code: "CA" + county: "EL_DORADO_COUNTY_CA" + h4: + members: ["p4_1"] + state_code: "CA" + county: "AMADOR_COUNTY_CA" + h5: + members: ["p5_1"] + state_code: "CA" + county: "CALAVERAS_COUNTY_CA" + h6: + members: ["p6_1"] + state_code: "CA" + county: "TUOLUMNE_COUNTY_CA" + h7: + members: ["p7_1"] + state_code: "CA" + county: "BUTTE_COUNTY_CA" + h8: + members: ["p8_1"] + state_code: "CA" + county: "COLUSA_COUNTY_CA" + h9: + members: ["p9_1"] + state_code: "CA" + county: "GLENN_COUNTY_CA" + h10: + members: ["p10_1"] + state_code: "CA" + county: "TRINITY_COUNTY_CA" + h11: + members: ["p11_1"] + state_code: "CA" + county: "CONTRA_COSTA_COUNTY_CA" + h12: + members: ["p12_1"] + state_code: "CA" + county: "DEL_NORTE_COUNTY_CA" + h13: + members: ["p13_1"] + state_code: "CA" + county: "FRESNO_COUNTY_CA" + h14: + members: ["p14_1"] + state_code: "CA" + county: "HUMBOLDT_COUNTY_CA" + h15: + members: ["p15_1"] + state_code: "CA" + county: "IMPERIAL_COUNTY_CA" + h16: + members: ["p16_1"] + state_code: "CA" + county: "SAN_DIEGO_COUNTY_CA" + h17: + members: ["p17_1"] + state_code: "CA" + county: "INYO_COUNTY_CA" + h18: + members: ["p18_1"] + state_code: "CA" + county: "MONO_COUNTY_CA" + h19: + members: ["p19_1"] + state_code: "CA" + county: "KERN_COUNTY_CA" + h20: + members: ["p20_1"] + state_code: "CA" + county: "KINGS_COUNTY_CA" + h21: + members: ["p21_1"] + state_code: "CA" + county: "LAKE_COUNTY_CA" + h22: + members: ["p22_1"] + state_code: "CA" + county: "MENDOCINO_COUNTY_CA" + h23: + members: ["p23_1"] + state_code: "CA" + county: "NAPA_COUNTY_CA" + h24: + members: ["p24_1"] + state_code: "CA" + county: "SOLANO_COUNTY_CA" + h25: + members: ["p25_1"] + state_code: "CA" + county: "SONOMA_COUNTY_CA" + h26: + members: ["p26_1"] + state_code: "CA" + county: "YOLO_COUNTY_CA" + h27: + members: ["p27_1"] + state_code: "CA" + county: "LASSEN_COUNTY_CA" + h28: + members: ["p28_1"] + state_code: "CA" + county: "LOS_ANGELES_COUNTY_CA" + h29: + members: ["p29_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h30: + members: ["p30_1"] + state_code: "CA" + county: "MARIN_COUNTY_CA" + h31: + members: ["p31_1"] + state_code: "CA" + county: "MARIPOSA_COUNTY_CA" + h32: + members: ["p32_1"] + state_code: "CA" + county: "MERCED_COUNTY_CA" + h33: + members: ["p33_1"] + state_code: "CA" + county: "MODOC_COUNTY_CA" + h34: + members: ["p34_1"] + state_code: "CA" + county: "MONTEREY_COUNTY_CA" + h35: + members: ["p35_1"] + state_code: "CA" + county: "SAN_FRANCISCO_COUNTY_CA" + h36: + members: ["p36_1"] + state_code: "CA" + county: "SAN_MATEO_COUNTY_CA" + h37: + members: ["p37_1"] + state_code: "CA" + county: "SANTA_CRUZ_COUNTY_CA" + h38: + members: ["p38_1"] + state_code: "CA" + county: "NEVADA_COUNTY_CA" + h39: + members: ["p39_1"] + state_code: "CA" + county: "PLACER_COUNTY_CA" + h40: + members: ["p40_1"] + state_code: "CA" + county: "ORANGE_COUNTY_CA" + h41: + members: ["p41_1"] + state_code: "CA" + county: "PLUMAS_COUNTY_CA" + h42: + members: ["p42_1"] + state_code: "CA" + county: "SIERRA_COUNTY_CA" + h43: + members: ["p43_1"] + state_code: "CA" + county: "RIVERSIDE_COUNTY_CA" + h44: + members: ["p44_1"] + state_code: "CA" + county: "SACRAMENTO_COUNTY_CA" + h45: + members: ["p45_1"] + state_code: "CA" + county: "SUTTER_COUNTY_CA" + h46: + members: ["p46_1"] + state_code: "CA" + county: "YUBA_COUNTY_CA" + h47: + members: ["p47_1"] + state_code: "CA" + county: "SAN_BENITO_COUNTY_CA" + h48: + members: ["p48_1"] + state_code: "CA" + county: "SAN_BERNARDINO_COUNTY_CA" + h49: + members: ["p49_1"] + state_code: "CA" + county: "SAN_JOAQUIN_COUNTY_CA" + h50: + members: ["p50_1"] + state_code: "CA" + county: "SAN_LUIS_OBISPO_COUNTY_CA" + h51: + members: ["p51_1"] + state_code: "CA" + county: "SANTA_BARBARA_COUNTY_CA" + h52: + members: ["p52_1"] + state_code: "CA" + county: "SANTA_CLARA_COUNTY_CA" + h53: + members: ["p53_1"] + state_code: "CA" + county: "SHASTA_COUNTY_CA" + h54: + members: ["p54_1"] + state_code: "CA" + county: "TEHAMA_COUNTY_CA" + h55: + members: ["p55_1"] + state_code: "CA" + county: "SISKIYOU_COUNTY_CA" + h56: + members: ["p56_1"] + state_code: "CA" + county: "STANISLAUS_COUNTY_CA" + h57: + members: ["p57_1"] + state_code: "CA" + county: "TULARE_COUNTY_CA" + h58: + members: ["p58_1"] + state_code: "CA" + county: "VENTURA_COUNTY_CA" + output: + ca_liheap_covered_liquid_heating: [263, 605, 566, 357, 379, 411, 340, 295, 280, 425, 273, 478, 265, 387, 94, 162, 406, 783, 266, 270, 353, 391, 266, 266, 295, 264, 633, 146, 284, 289, 531, 268, 688, 312, 291, 274, 281, 520, 332, 126, 646, 640, 155, 265, 256, 309, 321, 172, 262, 283, 252, 246, 342, 358, 556, 242, 269, 197] + +# ISOLATED CONDITIONAL SCHEDULE ONLY. Original p187 directly prints +# Mono groupIII size1 noVP:928/963/998/1000. The final uncapped amount +# 928+105=1033 is limited to1000. Local Mono approval is not represented. +- name: "Case 11, conditional printed Mono examples verify burden additions and the cap." + period: 2026 + input: + people: + p1_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p2_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p3_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p4_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + spm_units: + s1: + members: ["p1_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 1 + ca_liheap_madera_priority_points: 20 + s2: + members: ["p2_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 2 + ca_liheap_madera_priority_points: 20 + s3: + members: ["p3_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 3 + ca_liheap_madera_priority_points: 20 + s4: + members: ["p4_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 4 + ca_liheap_madera_priority_points: 20 + households: + h1: + members: ["p1_1"] + state_code: "CA" + county: "MONO_COUNTY_CA" + h2: + members: ["p2_1"] + state_code: "CA" + county: "MONO_COUNTY_CA" + h3: + members: ["p3_1"] + state_code: "CA" + county: "MONO_COUNTY_CA" + h4: + members: ["p4_1"] + state_code: "CA" + county: "MONO_COUNTY_CA" + output: + ca_liheap_covered_liquid_heating: [928, 963, 998, 1000] + +# ISOLATED CONDITIONAL SCHEDULE ONLY. Source p184 puts80000 annual +# in groupIV for each real size5/6/7 and below each SMI limit. P187 prints +# size5 VP group2:783+76+35+105=999; size6 caps783+95+35+105=1018 +# at1000, and size7 retains the size6 increment. Mono approval is not inferred. +- name: "Case 12, conditional printed Mono group four distinguishes 999 from the cap." + period: 2026 + input: + people: + p1_1: {"age": 60, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 80000} + p1_2: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0} + p1_3: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0} + p1_4: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0} + p1_5: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0} + p2_1: {"age": 60, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 80000} + p2_2: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0} + p2_3: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0} + p2_4: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0} + p2_5: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0} + p2_6: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0} + p3_1: {"age": 60, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 80000} + p3_2: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0} + p3_3: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0} + p3_4: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0} + p3_5: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0} + p3_6: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0} + p3_7: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0} + spm_units: + s1: + members: ["p1_1", "p1_2", "p1_3", "p1_4", "p1_5"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 8000 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 2 + ca_liheap_madera_priority_points: 20 + s2: + members: ["p2_1", "p2_2", "p2_3", "p2_4", "p2_5", "p2_6"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 8000 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 2 + ca_liheap_madera_priority_points: 20 + s3: + members: ["p3_1", "p3_2", "p3_3", "p3_4", "p3_5", "p3_6", "p3_7"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 8000 + ca_liheap_liquid_heating_covered: true + ca_liheap_energy_burden_group: 2 + ca_liheap_madera_priority_points: 20 + households: + h1: + members: ["p1_1", "p1_2", "p1_3", "p1_4", "p1_5"] + state_code: "CA" + county: "MONO_COUNTY_CA" + h2: + members: ["p2_1", "p2_2", "p2_3", "p2_4", "p2_5", "p2_6"] + state_code: "CA" + county: "MONO_COUNTY_CA" + h3: + members: ["p3_1", "p3_2", "p3_3", "p3_4", "p3_5", "p3_6", "p3_7"] + state_code: "CA" + county: "MONO_COUNTY_CA" + output: + ca_liheap_covered_liquid_heating: [999, 1000, 1000] + +- name: "Case 13, monthly SSI and SSP and annual CalWORKs count once in the burden denominator." + period: 2026 + # State-plan pp229/234 count CalWORKs and SSI/SSP. All benefit months + # are explicit for every member and SPM unit, avoiding annual-zero conflicts. + # Row1:500*12+100*12+4800=12000. Row2:500*12+6000=12000. + # Row3:6000 annual CalWORKs+6000 wages=12000. Row4:minor SSI + # 500*12+6000 parent wages=12000. Energy2040 gives17 percent in all. + # Elder rows:411+105+105=621; family row:411+19+105=535; + # disabled child row adds the one VP supplement to give640. + input: + people: + elder1: {"age": 65, "is_citizen_or_legal_immigrant": true, "ssi": {"2026-01": 500, "2026-02": 500, "2026-03": 500, "2026-04": 500, "2026-05": 500, "2026-06": 500, "2026-07": 500, "2026-08": 500, "2026-09": 500, "2026-10": 500, "2026-11": 500, "2026-12": 500}, "pension_income": 4800} + elder2: {"age": 65, "is_citizen_or_legal_immigrant": true, "ssi": {"2026-01": 500, "2026-02": 500, "2026-03": 500, "2026-04": 500, "2026-05": 500, "2026-06": 500, "2026-07": 500, "2026-08": 500, "2026-09": 500, "2026-10": 500, "2026-11": 500, "2026-12": 500}, "pension_income": 6000} + parent: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": {"2026-01": 0, "2026-02": 0, "2026-03": 0, "2026-04": 0, "2026-05": 0, "2026-06": 0, "2026-07": 0, "2026-08": 0, "2026-09": 0, "2026-10": 0, "2026-11": 0, "2026-12": 0}, "employment_income": 6000} + child: {"age": 6, "is_citizen_or_legal_immigrant": true, "ssi": {"2026-01": 0, "2026-02": 0, "2026-03": 0, "2026-04": 0, "2026-05": 0, "2026-06": 0, "2026-07": 0, "2026-08": 0, "2026-09": 0, "2026-10": 0, "2026-11": 0, "2026-12": 0}} + worker: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": {"2026-01": 0, "2026-02": 0, "2026-03": 0, "2026-04": 0, "2026-05": 0, "2026-06": 0, "2026-07": 0, "2026-08": 0, "2026-09": 0, "2026-10": 0, "2026-11": 0, "2026-12": 0}, "employment_income": 6000} + disabled_child: {"age": 7, "is_citizen_or_legal_immigrant": true, "ssi": {"2026-01": 500, "2026-02": 500, "2026-03": 500, "2026-04": 500, "2026-05": 500, "2026-06": 500, "2026-07": 500, "2026-08": 500, "2026-09": 500, "2026-10": 500, "2026-11": 500, "2026-12": 500}, "is_disabled": true} + spm_units: + s1: {"members": ["elder1"], "heating_type": "PROPANE", "bottled_gas_expense": 2040, "snap": 0, "tanf": 0, "ca_state_supplement": {"2026-01": 100, "2026-02": 100, "2026-03": 100, "2026-04": 100, "2026-05": 100, "2026-06": 100, "2026-07": 100, "2026-08": 100, "2026-09": 100, "2026-10": 100, "2026-11": 100, "2026-12": 100}} + s2: {"members": ["elder2"], "heating_type": "PROPANE", "bottled_gas_expense": 2040, "snap": 0, "tanf": 0, "ca_state_supplement": {"2026-01": 0, "2026-02": 0, "2026-03": 0, "2026-04": 0, "2026-05": 0, "2026-06": 0, "2026-07": 0, "2026-08": 0, "2026-09": 0, "2026-10": 0, "2026-11": 0, "2026-12": 0}} + s3: {"members": ["parent", "child"], "heating_type": "PROPANE", "bottled_gas_expense": 2040, "snap": 0, "tanf": 6000, "ca_state_supplement": {"2026-01": 0, "2026-02": 0, "2026-03": 0, "2026-04": 0, "2026-05": 0, "2026-06": 0, "2026-07": 0, "2026-08": 0, "2026-09": 0, "2026-10": 0, "2026-11": 0, "2026-12": 0}} + s4: {"members": ["worker", "disabled_child"], "heating_type": "PROPANE", "bottled_gas_expense": 2040, "snap": 0, "tanf": 0, "ca_state_supplement": {"2026-01": 0, "2026-02": 0, "2026-03": 0, "2026-04": 0, "2026-05": 0, "2026-06": 0, "2026-07": 0, "2026-08": 0, "2026-09": 0, "2026-10": 0, "2026-11": 0, "2026-12": 0}} + households: + h1: {"members": ["elder1"], "state_code": "CA", "county": "MADERA_COUNTY_CA"} + h2: {"members": ["elder2"], "state_code": "CA", "county": "MADERA_COUNTY_CA"} + h3: {"members": ["parent", "child"], "state_code": "CA", "county": "MADERA_COUNTY_CA"} + h4: {"members": ["worker", "disabled_child"], "state_code": "CA", "county": "MADERA_COUNTY_CA"} + output: + ca_liheap_countable_income: [12000, 12000, 12000, 12000] + ca_liheap_household_size: [1, 1, 2, 2] + ca_liheap_energy_burden_group: [4, 4, 4, 4] + ca_liheap_madera_priority_points: [30, 30, 20, 30] + ca_liheap_covered_liquid_heating: [621, 621, 535, 640] + +# Size 2 at $1,000 a month is group 1 (10 points); burden 2,040 / 12,000 = 17.00% +# is group 4 (10 points); a child aged 2 adds 10 + 5, for 35 points. +# Award: 411 + 19 + 105 + 105 = 640. The second 105 needs the under-6 trigger. +- name: "Case 14, a child under six alone triggers the vulnerable-member addition." + period: 2026 + input: + people: + person1: {"age": 30, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12_000} + person2: {"age": 2, "is_citizen_or_legal_immigrant": true, "ssi": 0} + spm_units: + spm_unit: + members: ["person1", "person2"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 2_040 + households: + household: + members: ["person1", "person2"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + output: + ca_liheap_income_group: 1 + ca_liheap_energy_burden_group: 4 + ca_liheap_madera_priority_points: 35 + ca_liheap_covered_liquid_heating: 640 + +# Heat in rent is the second half of WPO's own-fuel test. With no bills the burden +# is 0.00%, group 1 (4 points). $1,000 a month is group 1 (10 points) and age 60 +# adds 10, for 24 points: 411 + 0 + 105 = 516. A propane home has no utility +# account, so HEAP is 0. With electricity of $2,040 the burden is 17.00%, group 4: +# 10 + 10 = 20 points and 411 + 105 = 516, so WPO pays and HEAP stays at 0. +- name: "Case 15, heat in rent establishes the own-fuel cost for liquid heating." + period: 2026 + input: + people: + person1: {"age": 60, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12_000} + person2: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12_000} + spm_units: + spm_unit1: + members: ["person1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + heat_expense_included_in_rent: true + spm_unit2: + members: ["person2"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + heat_expense_included_in_rent: true + pre_subsidy_electricity_expense: 2_040 + households: + household1: + members: ["person1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + household2: + members: ["person2"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + output: + ca_liheap_madera_priority_points: [24, 20] + ca_liheap_covered_liquid_heating: [516, 516] + ca_liheap_utility_heating: [0, 0] diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/csd/liheap/ca_liheap_household_size.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/csd/liheap/ca_liheap_household_size.yaml new file mode 100644 index 00000000000..b9a6bff019f --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/csd/liheap/ca_liheap_household_size.yaml @@ -0,0 +1,66 @@ +# PDF pages 196,202-203 +# https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=196 +# Nonqualified residents remain income sources but are excluded from size. + +- name: Case 1, actual qualified household members determine size. + period: 2026 + # Qualified size is one in each mixed-status household, zero when all members + # are nonqualified, and zero for the Oregon component. No size inputs forced. + input: + people: + person1: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person2: {age: 30, is_citizen_or_legal_immigrant: false, ssi: 0} + person3: {age: 35, is_citizen_or_legal_immigrant: false, ssi: 0} + person4: {age: 30, is_citizen_or_legal_immigrant: false, ssi: 0} + person5: {age: 5, is_citizen_or_legal_immigrant: true, ssi: 0} + person6: {age: 35, is_citizen_or_legal_immigrant: false, ssi: 0} + person7: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person8: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + spm_units: + spm_unit1: + members: [person1, person2] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit2: + members: [person3, person4, person5] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit3: + members: [person6] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit4: + members: [person7, person8] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + households: + household1: + members: [person1, person2] + state_code: CA + county: ALAMEDA_COUNTY_CA + household2: + members: [person3, person4, person5] + state_code: CA + county: ALAMEDA_COUNTY_CA + household3: + members: [person6] + state_code: CA + county: ALAMEDA_COUNTY_CA + household4: + members: [person7, person8] + state_code: OR + county: MULTNOMAH_COUNTY_OR + output: + ca_liheap_household_size: [1, 1, 0, 0] diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/csd/liheap/ca_liheap_utility_heating.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/csd/liheap/ca_liheap_utility_heating.yaml new file mode 100644 index 00000000000..8d54dbb9977 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/csd/liheap/ca_liheap_utility_heating.yaml @@ -0,0 +1,5432 @@ +# PDF pages 182-184,202-203,217-219,246-247,279 +# https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=182 +# Utility component only; unresolved regular WPO awards are not tested or denied. +# Integrated awards are calculated from raw facts. The county-table cases supply +# Madera's priority points; Case 16 calculates them. + +- name: Case 1, every county utility table amount in poverty group 1. + period: 2026 + # All 58 county rows are independently parsed from original plan pages 182–183. + # County names are alphabetic. One qualified adult and monthly income 1000 + # place every row in group 1. Actual gas bill 100 is not a benefit cap. + input: + people: + person1: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person2: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person3: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person4: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person5: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person6: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person7: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person8: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person9: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person10: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person11: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person12: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person13: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person14: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person15: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person16: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person17: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person18: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person19: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person20: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person21: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person22: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person23: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person24: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person25: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person26: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person27: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person28: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person29: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person30: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person31: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person32: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person33: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person34: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person35: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person36: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person37: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person38: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person39: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person40: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person41: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person42: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person43: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person44: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person45: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person46: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person47: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person48: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person49: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person50: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person51: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person52: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person53: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person54: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person55: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person56: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person57: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + person58: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + spm_units: + spm_unit1: + members: [person1] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit2: + members: [person2] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit3: + members: [person3] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit4: + members: [person4] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit5: + members: [person5] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit6: + members: [person6] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit7: + members: [person7] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit8: + members: [person8] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit9: + members: [person9] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit10: + members: [person10] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit11: + members: [person11] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit12: + members: [person12] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit13: + members: [person13] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit14: + members: [person14] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit15: + members: [person15] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit16: + members: [person16] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit17: + members: [person17] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit18: + members: [person18] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit19: + members: [person19] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit20: + members: [person20] + heating_type: NATURAL_GAS + ca_liheap_madera_priority_points: 20 + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit21: + members: [person21] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit22: + members: [person22] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit23: + members: [person23] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit24: + members: [person24] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit25: + members: [person25] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit26: + members: [person26] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit27: + members: [person27] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit28: + members: [person28] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit29: + members: [person29] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit30: + members: [person30] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit31: + members: [person31] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit32: + members: [person32] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit33: + members: [person33] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit34: + members: [person34] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit35: + members: [person35] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit36: + members: [person36] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit37: + members: [person37] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit38: + members: [person38] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit39: + members: [person39] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit40: + members: [person40] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit41: + members: [person41] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit42: + members: [person42] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit43: + members: [person43] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit44: + members: [person44] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit45: + members: [person45] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit46: + members: [person46] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit47: + members: [person47] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit48: + members: [person48] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit49: + members: [person49] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit50: + members: [person50] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit51: + members: [person51] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit52: + members: [person52] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit53: + members: [person53] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit54: + members: [person54] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit55: + members: [person55] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit56: + members: [person56] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit57: + members: [person57] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit58: + members: [person58] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + households: + household1: + members: [person1] + state_code: CA + county: ALAMEDA_COUNTY_CA + household2: + members: [person2] + state_code: CA + county: ALPINE_COUNTY_CA + household3: + members: [person3] + state_code: CA + county: AMADOR_COUNTY_CA + household4: + members: [person4] + state_code: CA + county: BUTTE_COUNTY_CA + household5: + members: [person5] + state_code: CA + county: CALAVERAS_COUNTY_CA + household6: + members: [person6] + state_code: CA + county: COLUSA_COUNTY_CA + household7: + members: [person7] + state_code: CA + county: CONTRA_COSTA_COUNTY_CA + household8: + members: [person8] + state_code: CA + county: DEL_NORTE_COUNTY_CA + household9: + members: [person9] + state_code: CA + county: EL_DORADO_COUNTY_CA + household10: + members: [person10] + state_code: CA + county: FRESNO_COUNTY_CA + household11: + members: [person11] + state_code: CA + county: GLENN_COUNTY_CA + household12: + members: [person12] + state_code: CA + county: HUMBOLDT_COUNTY_CA + household13: + members: [person13] + state_code: CA + county: IMPERIAL_COUNTY_CA + household14: + members: [person14] + state_code: CA + county: INYO_COUNTY_CA + household15: + members: [person15] + state_code: CA + county: KERN_COUNTY_CA + household16: + members: [person16] + state_code: CA + county: KINGS_COUNTY_CA + household17: + members: [person17] + state_code: CA + county: LAKE_COUNTY_CA + household18: + members: [person18] + state_code: CA + county: LASSEN_COUNTY_CA + household19: + members: [person19] + state_code: CA + county: LOS_ANGELES_COUNTY_CA + household20: + members: [person20] + state_code: CA + county: MADERA_COUNTY_CA + household21: + members: [person21] + state_code: CA + county: MARIN_COUNTY_CA + household22: + members: [person22] + state_code: CA + county: MARIPOSA_COUNTY_CA + household23: + members: [person23] + state_code: CA + county: MENDOCINO_COUNTY_CA + household24: + members: [person24] + state_code: CA + county: MERCED_COUNTY_CA + household25: + members: [person25] + state_code: CA + county: MODOC_COUNTY_CA + household26: + members: [person26] + state_code: CA + county: MONO_COUNTY_CA + household27: + members: [person27] + state_code: CA + county: MONTEREY_COUNTY_CA + household28: + members: [person28] + state_code: CA + county: NAPA_COUNTY_CA + household29: + members: [person29] + state_code: CA + county: NEVADA_COUNTY_CA + household30: + members: [person30] + state_code: CA + county: ORANGE_COUNTY_CA + household31: + members: [person31] + state_code: CA + county: PLACER_COUNTY_CA + household32: + members: [person32] + state_code: CA + county: PLUMAS_COUNTY_CA + household33: + members: [person33] + state_code: CA + county: RIVERSIDE_COUNTY_CA + household34: + members: [person34] + state_code: CA + county: SACRAMENTO_COUNTY_CA + household35: + members: [person35] + state_code: CA + county: SAN_BENITO_COUNTY_CA + household36: + members: [person36] + state_code: CA + county: SAN_BERNARDINO_COUNTY_CA + household37: + members: [person37] + state_code: CA + county: SAN_DIEGO_COUNTY_CA + household38: + members: [person38] + state_code: CA + county: SAN_FRANCISCO_COUNTY_CA + household39: + members: [person39] + state_code: CA + county: SAN_JOAQUIN_COUNTY_CA + household40: + members: [person40] + state_code: CA + county: SAN_LUIS_OBISPO_COUNTY_CA + household41: + members: [person41] + state_code: CA + county: SAN_MATEO_COUNTY_CA + household42: + members: [person42] + state_code: CA + county: SANTA_BARBARA_COUNTY_CA + household43: + members: [person43] + state_code: CA + county: SANTA_CLARA_COUNTY_CA + household44: + members: [person44] + state_code: CA + county: SANTA_CRUZ_COUNTY_CA + household45: + members: [person45] + state_code: CA + county: SHASTA_COUNTY_CA + household46: + members: [person46] + state_code: CA + county: SIERRA_COUNTY_CA + household47: + members: [person47] + state_code: CA + county: SISKIYOU_COUNTY_CA + household48: + members: [person48] + state_code: CA + county: SOLANO_COUNTY_CA + household49: + members: [person49] + state_code: CA + county: SONOMA_COUNTY_CA + household50: + members: [person50] + state_code: CA + county: STANISLAUS_COUNTY_CA + household51: + members: [person51] + state_code: CA + county: SUTTER_COUNTY_CA + household52: + members: [person52] + state_code: CA + county: TEHAMA_COUNTY_CA + household53: + members: [person53] + state_code: CA + county: TRINITY_COUNTY_CA + household54: + members: [person54] + state_code: CA + county: TULARE_COUNTY_CA + household55: + members: [person55] + state_code: CA + county: TUOLUMNE_COUNTY_CA + household56: + members: [person56] + state_code: CA + county: VENTURA_COUNTY_CA + household57: + members: [person57] + state_code: CA + county: YOLO_COUNTY_CA + household58: + members: [person58] + state_code: CA + county: YUBA_COUNTY_CA + output: + ca_liheap_income_group: + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + ca_liheap_utility_heating: + - 484 + - 688 + - 738 + - 692 + - 715 + - 718 + - 618 + - 674 + - 714 + - 716 + - 698 + - 525 + - 621 + - 530 + - 648 + - 635 + - 802 + - 660 + - 487 + - 702 + - 652 + - 719 + - 610 + - 674 + - 614 + - 622 + - 502 + - 628 + - 837 + - 542 + - 663 + - 620 + - 633 + - 580 + - 544 + - 590 + - 492 + - 469 + - 697 + - 522 + - 576 + - 437 + - 546 + - 541 + - 758 + - 648 + - 673 + - 579 + - 563 + - 659 + - 721 + - 753 + - 503 + - 618 + - 723 + - 459 + - 565 + - 713 + +- name: Case 2, every county utility table amount in poverty group 2. + period: 2026 + # All 58 county rows are independently parsed from original plan pages 182–183. + # County names are alphabetic. One qualified adult and monthly income 1500 + # place every row in group 2. Actual gas bill 100 is not a benefit cap. + input: + people: + person1: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person2: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person3: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person4: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person5: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person6: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person7: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person8: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person9: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person10: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person11: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person12: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person13: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person14: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person15: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person16: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person17: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person18: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person19: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person20: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person21: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person22: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person23: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person24: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person25: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person26: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person27: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person28: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person29: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person30: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person31: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person32: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person33: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person34: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person35: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person36: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person37: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person38: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person39: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person40: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person41: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person42: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person43: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person44: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person45: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person46: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person47: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person48: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person49: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person50: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person51: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person52: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person53: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person54: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person55: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person56: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person57: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + person58: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 18_000 + spm_units: + spm_unit1: + members: [person1] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit2: + members: [person2] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit3: + members: [person3] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit4: + members: [person4] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit5: + members: [person5] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit6: + members: [person6] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit7: + members: [person7] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit8: + members: [person8] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit9: + members: [person9] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit10: + members: [person10] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit11: + members: [person11] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit12: + members: [person12] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit13: + members: [person13] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit14: + members: [person14] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit15: + members: [person15] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit16: + members: [person16] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit17: + members: [person17] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit18: + members: [person18] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit19: + members: [person19] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit20: + members: [person20] + heating_type: NATURAL_GAS + ca_liheap_madera_priority_points: 20 + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit21: + members: [person21] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit22: + members: [person22] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit23: + members: [person23] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit24: + members: [person24] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit25: + members: [person25] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit26: + members: [person26] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit27: + members: [person27] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit28: + members: [person28] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit29: + members: [person29] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit30: + members: [person30] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit31: + members: [person31] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit32: + members: [person32] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit33: + members: [person33] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit34: + members: [person34] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit35: + members: [person35] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit36: + members: [person36] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit37: + members: [person37] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit38: + members: [person38] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit39: + members: [person39] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit40: + members: [person40] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit41: + members: [person41] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit42: + members: [person42] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit43: + members: [person43] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit44: + members: [person44] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit45: + members: [person45] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit46: + members: [person46] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit47: + members: [person47] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit48: + members: [person48] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit49: + members: [person49] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit50: + members: [person50] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit51: + members: [person51] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit52: + members: [person52] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit53: + members: [person53] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit54: + members: [person54] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit55: + members: [person55] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit56: + members: [person56] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit57: + members: [person57] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit58: + members: [person58] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + households: + household1: + members: [person1] + state_code: CA + county: ALAMEDA_COUNTY_CA + household2: + members: [person2] + state_code: CA + county: ALPINE_COUNTY_CA + household3: + members: [person3] + state_code: CA + county: AMADOR_COUNTY_CA + household4: + members: [person4] + state_code: CA + county: BUTTE_COUNTY_CA + household5: + members: [person5] + state_code: CA + county: CALAVERAS_COUNTY_CA + household6: + members: [person6] + state_code: CA + county: COLUSA_COUNTY_CA + household7: + members: [person7] + state_code: CA + county: CONTRA_COSTA_COUNTY_CA + household8: + members: [person8] + state_code: CA + county: DEL_NORTE_COUNTY_CA + household9: + members: [person9] + state_code: CA + county: EL_DORADO_COUNTY_CA + household10: + members: [person10] + state_code: CA + county: FRESNO_COUNTY_CA + household11: + members: [person11] + state_code: CA + county: GLENN_COUNTY_CA + household12: + members: [person12] + state_code: CA + county: HUMBOLDT_COUNTY_CA + household13: + members: [person13] + state_code: CA + county: IMPERIAL_COUNTY_CA + household14: + members: [person14] + state_code: CA + county: INYO_COUNTY_CA + household15: + members: [person15] + state_code: CA + county: KERN_COUNTY_CA + household16: + members: [person16] + state_code: CA + county: KINGS_COUNTY_CA + household17: + members: [person17] + state_code: CA + county: LAKE_COUNTY_CA + household18: + members: [person18] + state_code: CA + county: LASSEN_COUNTY_CA + household19: + members: [person19] + state_code: CA + county: LOS_ANGELES_COUNTY_CA + household20: + members: [person20] + state_code: CA + county: MADERA_COUNTY_CA + household21: + members: [person21] + state_code: CA + county: MARIN_COUNTY_CA + household22: + members: [person22] + state_code: CA + county: MARIPOSA_COUNTY_CA + household23: + members: [person23] + state_code: CA + county: MENDOCINO_COUNTY_CA + household24: + members: [person24] + state_code: CA + county: MERCED_COUNTY_CA + household25: + members: [person25] + state_code: CA + county: MODOC_COUNTY_CA + household26: + members: [person26] + state_code: CA + county: MONO_COUNTY_CA + household27: + members: [person27] + state_code: CA + county: MONTEREY_COUNTY_CA + household28: + members: [person28] + state_code: CA + county: NAPA_COUNTY_CA + household29: + members: [person29] + state_code: CA + county: NEVADA_COUNTY_CA + household30: + members: [person30] + state_code: CA + county: ORANGE_COUNTY_CA + household31: + members: [person31] + state_code: CA + county: PLACER_COUNTY_CA + household32: + members: [person32] + state_code: CA + county: PLUMAS_COUNTY_CA + household33: + members: [person33] + state_code: CA + county: RIVERSIDE_COUNTY_CA + household34: + members: [person34] + state_code: CA + county: SACRAMENTO_COUNTY_CA + household35: + members: [person35] + state_code: CA + county: SAN_BENITO_COUNTY_CA + household36: + members: [person36] + state_code: CA + county: SAN_BERNARDINO_COUNTY_CA + household37: + members: [person37] + state_code: CA + county: SAN_DIEGO_COUNTY_CA + household38: + members: [person38] + state_code: CA + county: SAN_FRANCISCO_COUNTY_CA + household39: + members: [person39] + state_code: CA + county: SAN_JOAQUIN_COUNTY_CA + household40: + members: [person40] + state_code: CA + county: SAN_LUIS_OBISPO_COUNTY_CA + household41: + members: [person41] + state_code: CA + county: SAN_MATEO_COUNTY_CA + household42: + members: [person42] + state_code: CA + county: SANTA_BARBARA_COUNTY_CA + household43: + members: [person43] + state_code: CA + county: SANTA_CLARA_COUNTY_CA + household44: + members: [person44] + state_code: CA + county: SANTA_CRUZ_COUNTY_CA + household45: + members: [person45] + state_code: CA + county: SHASTA_COUNTY_CA + household46: + members: [person46] + state_code: CA + county: SIERRA_COUNTY_CA + household47: + members: [person47] + state_code: CA + county: SISKIYOU_COUNTY_CA + household48: + members: [person48] + state_code: CA + county: SOLANO_COUNTY_CA + household49: + members: [person49] + state_code: CA + county: SONOMA_COUNTY_CA + household50: + members: [person50] + state_code: CA + county: STANISLAUS_COUNTY_CA + household51: + members: [person51] + state_code: CA + county: SUTTER_COUNTY_CA + household52: + members: [person52] + state_code: CA + county: TEHAMA_COUNTY_CA + household53: + members: [person53] + state_code: CA + county: TRINITY_COUNTY_CA + household54: + members: [person54] + state_code: CA + county: TULARE_COUNTY_CA + household55: + members: [person55] + state_code: CA + county: TUOLUMNE_COUNTY_CA + household56: + members: [person56] + state_code: CA + county: VENTURA_COUNTY_CA + household57: + members: [person57] + state_code: CA + county: YOLO_COUNTY_CA + household58: + members: [person58] + state_code: CA + county: YUBA_COUNTY_CA + output: + ca_liheap_income_group: + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + ca_liheap_utility_heating: + - 404 + - 566 + - 605 + - 569 + - 587 + - 589 + - 510 + - 554 + - 586 + - 588 + - 574 + - 436 + - 512 + - 440 + - 534 + - 523 + - 656 + - 543 + - 407 + - 576 + - 537 + - 590 + - 504 + - 554 + - 507 + - 514 + - 418 + - 518 + - 684 + - 450 + - 546 + - 512 + - 522 + - 480 + - 451 + - 488 + - 411 + - 392 + - 572 + - 434 + - 477 + - 367 + - 453 + - 449 + - 621 + - 534 + - 553 + - 479 + - 467 + - 542 + - 592 + - 617 + - 419 + - 510 + - 593 + - 384 + - 468 + - 585 + +- name: Case 3, every county utility table amount in poverty group 3. + period: 2026 + # All 58 county rows are independently parsed from original plan pages 182–183. + # County names are alphabetic. One qualified adult and monthly income 1800 + # place every row in group 3. Actual gas bill 100 is not a benefit cap. + input: + people: + person1: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person2: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person3: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person4: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person5: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person6: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person7: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person8: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person9: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person10: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person11: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person12: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person13: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person14: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person15: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person16: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person17: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person18: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person19: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person20: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person21: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person22: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person23: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person24: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person25: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person26: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person27: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person28: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person29: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person30: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person31: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person32: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person33: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person34: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person35: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person36: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person37: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person38: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person39: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person40: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person41: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person42: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person43: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person44: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person45: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person46: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person47: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person48: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person49: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person50: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person51: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person52: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person53: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person54: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person55: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person56: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person57: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + person58: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 21_600 + spm_units: + spm_unit1: + members: [person1] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit2: + members: [person2] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit3: + members: [person3] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit4: + members: [person4] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit5: + members: [person5] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit6: + members: [person6] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit7: + members: [person7] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit8: + members: [person8] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit9: + members: [person9] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit10: + members: [person10] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit11: + members: [person11] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit12: + members: [person12] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit13: + members: [person13] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit14: + members: [person14] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit15: + members: [person15] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit16: + members: [person16] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit17: + members: [person17] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit18: + members: [person18] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit19: + members: [person19] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit20: + members: [person20] + heating_type: NATURAL_GAS + ca_liheap_madera_priority_points: 20 + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit21: + members: [person21] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit22: + members: [person22] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit23: + members: [person23] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit24: + members: [person24] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit25: + members: [person25] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit26: + members: [person26] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit27: + members: [person27] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit28: + members: [person28] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit29: + members: [person29] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit30: + members: [person30] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit31: + members: [person31] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit32: + members: [person32] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit33: + members: [person33] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit34: + members: [person34] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit35: + members: [person35] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit36: + members: [person36] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit37: + members: [person37] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit38: + members: [person38] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit39: + members: [person39] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit40: + members: [person40] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit41: + members: [person41] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit42: + members: [person42] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit43: + members: [person43] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit44: + members: [person44] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit45: + members: [person45] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit46: + members: [person46] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit47: + members: [person47] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit48: + members: [person48] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit49: + members: [person49] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit50: + members: [person50] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit51: + members: [person51] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit52: + members: [person52] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit53: + members: [person53] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit54: + members: [person54] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit55: + members: [person55] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit56: + members: [person56] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit57: + members: [person57] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit58: + members: [person58] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + households: + household1: + members: [person1] + state_code: CA + county: ALAMEDA_COUNTY_CA + household2: + members: [person2] + state_code: CA + county: ALPINE_COUNTY_CA + household3: + members: [person3] + state_code: CA + county: AMADOR_COUNTY_CA + household4: + members: [person4] + state_code: CA + county: BUTTE_COUNTY_CA + household5: + members: [person5] + state_code: CA + county: CALAVERAS_COUNTY_CA + household6: + members: [person6] + state_code: CA + county: COLUSA_COUNTY_CA + household7: + members: [person7] + state_code: CA + county: CONTRA_COSTA_COUNTY_CA + household8: + members: [person8] + state_code: CA + county: DEL_NORTE_COUNTY_CA + household9: + members: [person9] + state_code: CA + county: EL_DORADO_COUNTY_CA + household10: + members: [person10] + state_code: CA + county: FRESNO_COUNTY_CA + household11: + members: [person11] + state_code: CA + county: GLENN_COUNTY_CA + household12: + members: [person12] + state_code: CA + county: HUMBOLDT_COUNTY_CA + household13: + members: [person13] + state_code: CA + county: IMPERIAL_COUNTY_CA + household14: + members: [person14] + state_code: CA + county: INYO_COUNTY_CA + household15: + members: [person15] + state_code: CA + county: KERN_COUNTY_CA + household16: + members: [person16] + state_code: CA + county: KINGS_COUNTY_CA + household17: + members: [person17] + state_code: CA + county: LAKE_COUNTY_CA + household18: + members: [person18] + state_code: CA + county: LASSEN_COUNTY_CA + household19: + members: [person19] + state_code: CA + county: LOS_ANGELES_COUNTY_CA + household20: + members: [person20] + state_code: CA + county: MADERA_COUNTY_CA + household21: + members: [person21] + state_code: CA + county: MARIN_COUNTY_CA + household22: + members: [person22] + state_code: CA + county: MARIPOSA_COUNTY_CA + household23: + members: [person23] + state_code: CA + county: MENDOCINO_COUNTY_CA + household24: + members: [person24] + state_code: CA + county: MERCED_COUNTY_CA + household25: + members: [person25] + state_code: CA + county: MODOC_COUNTY_CA + household26: + members: [person26] + state_code: CA + county: MONO_COUNTY_CA + household27: + members: [person27] + state_code: CA + county: MONTEREY_COUNTY_CA + household28: + members: [person28] + state_code: CA + county: NAPA_COUNTY_CA + household29: + members: [person29] + state_code: CA + county: NEVADA_COUNTY_CA + household30: + members: [person30] + state_code: CA + county: ORANGE_COUNTY_CA + household31: + members: [person31] + state_code: CA + county: PLACER_COUNTY_CA + household32: + members: [person32] + state_code: CA + county: PLUMAS_COUNTY_CA + household33: + members: [person33] + state_code: CA + county: RIVERSIDE_COUNTY_CA + household34: + members: [person34] + state_code: CA + county: SACRAMENTO_COUNTY_CA + household35: + members: [person35] + state_code: CA + county: SAN_BENITO_COUNTY_CA + household36: + members: [person36] + state_code: CA + county: SAN_BERNARDINO_COUNTY_CA + household37: + members: [person37] + state_code: CA + county: SAN_DIEGO_COUNTY_CA + household38: + members: [person38] + state_code: CA + county: SAN_FRANCISCO_COUNTY_CA + household39: + members: [person39] + state_code: CA + county: SAN_JOAQUIN_COUNTY_CA + household40: + members: [person40] + state_code: CA + county: SAN_LUIS_OBISPO_COUNTY_CA + household41: + members: [person41] + state_code: CA + county: SAN_MATEO_COUNTY_CA + household42: + members: [person42] + state_code: CA + county: SANTA_BARBARA_COUNTY_CA + household43: + members: [person43] + state_code: CA + county: SANTA_CLARA_COUNTY_CA + household44: + members: [person44] + state_code: CA + county: SANTA_CRUZ_COUNTY_CA + household45: + members: [person45] + state_code: CA + county: SHASTA_COUNTY_CA + household46: + members: [person46] + state_code: CA + county: SIERRA_COUNTY_CA + household47: + members: [person47] + state_code: CA + county: SISKIYOU_COUNTY_CA + household48: + members: [person48] + state_code: CA + county: SOLANO_COUNTY_CA + household49: + members: [person49] + state_code: CA + county: SONOMA_COUNTY_CA + household50: + members: [person50] + state_code: CA + county: STANISLAUS_COUNTY_CA + household51: + members: [person51] + state_code: CA + county: SUTTER_COUNTY_CA + household52: + members: [person52] + state_code: CA + county: TEHAMA_COUNTY_CA + household53: + members: [person53] + state_code: CA + county: TRINITY_COUNTY_CA + household54: + members: [person54] + state_code: CA + county: TULARE_COUNTY_CA + household55: + members: [person55] + state_code: CA + county: TUOLUMNE_COUNTY_CA + household56: + members: [person56] + state_code: CA + county: VENTURA_COUNTY_CA + household57: + members: [person57] + state_code: CA + county: YOLO_COUNTY_CA + household58: + members: [person58] + state_code: CA + county: YUBA_COUNTY_CA + output: + ca_liheap_income_group: + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + ca_liheap_utility_heating: + - 356 + - 492 + - 526 + - 495 + - 510 + - 512 + - 445 + - 482 + - 509 + - 511 + - 499 + - 383 + - 447 + - 386 + - 466 + - 457 + - 568 + - 473 + - 358 + - 501 + - 468 + - 513 + - 440 + - 482 + - 442 + - 448 + - 368 + - 452 + - 591 + - 394 + - 476 + - 447 + - 456 + - 420 + - 396 + - 426 + - 362 + - 346 + - 498 + - 381 + - 417 + - 325 + - 397 + - 394 + - 538 + - 465 + - 482 + - 419 + - 409 + - 472 + - 514 + - 535 + - 368 + - 445 + - 515 + - 340 + - 410 + - 508 + +- name: Case 4, every county utility table amount in poverty group 4. + period: 2026 + # All 58 county rows are independently parsed from original plan pages 182–183. + # County names are alphabetic. One qualified adult and monthly income 2500 + # place every row in group 4. Actual gas bill 100 is not a benefit cap. + input: + people: + person1: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person2: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person3: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person4: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person5: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person6: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person7: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person8: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person9: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person10: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person11: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person12: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person13: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person14: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person15: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person16: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person17: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person18: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person19: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person20: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person21: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person22: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person23: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person24: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person25: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person26: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person27: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person28: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person29: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person30: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person31: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person32: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person33: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person34: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person35: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person36: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person37: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person38: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person39: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person40: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person41: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person42: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person43: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person44: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person45: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person46: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person47: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person48: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person49: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person50: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person51: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person52: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person53: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person54: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person55: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person56: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person57: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + person58: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 30_000 + spm_units: + spm_unit1: + members: [person1] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit2: + members: [person2] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit3: + members: [person3] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit4: + members: [person4] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit5: + members: [person5] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit6: + members: [person6] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit7: + members: [person7] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit8: + members: [person8] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit9: + members: [person9] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit10: + members: [person10] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit11: + members: [person11] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit12: + members: [person12] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit13: + members: [person13] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit14: + members: [person14] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit15: + members: [person15] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit16: + members: [person16] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit17: + members: [person17] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit18: + members: [person18] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit19: + members: [person19] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit20: + members: [person20] + heating_type: NATURAL_GAS + ca_liheap_madera_priority_points: 20 + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit21: + members: [person21] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit22: + members: [person22] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit23: + members: [person23] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit24: + members: [person24] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit25: + members: [person25] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit26: + members: [person26] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit27: + members: [person27] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit28: + members: [person28] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit29: + members: [person29] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit30: + members: [person30] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit31: + members: [person31] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit32: + members: [person32] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit33: + members: [person33] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit34: + members: [person34] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit35: + members: [person35] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit36: + members: [person36] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit37: + members: [person37] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit38: + members: [person38] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit39: + members: [person39] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit40: + members: [person40] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit41: + members: [person41] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit42: + members: [person42] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit43: + members: [person43] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit44: + members: [person44] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit45: + members: [person45] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit46: + members: [person46] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit47: + members: [person47] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit48: + members: [person48] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit49: + members: [person49] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit50: + members: [person50] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit51: + members: [person51] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit52: + members: [person52] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit53: + members: [person53] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit54: + members: [person54] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit55: + members: [person55] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit56: + members: [person56] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit57: + members: [person57] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit58: + members: [person58] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + households: + household1: + members: [person1] + state_code: CA + county: ALAMEDA_COUNTY_CA + household2: + members: [person2] + state_code: CA + county: ALPINE_COUNTY_CA + household3: + members: [person3] + state_code: CA + county: AMADOR_COUNTY_CA + household4: + members: [person4] + state_code: CA + county: BUTTE_COUNTY_CA + household5: + members: [person5] + state_code: CA + county: CALAVERAS_COUNTY_CA + household6: + members: [person6] + state_code: CA + county: COLUSA_COUNTY_CA + household7: + members: [person7] + state_code: CA + county: CONTRA_COSTA_COUNTY_CA + household8: + members: [person8] + state_code: CA + county: DEL_NORTE_COUNTY_CA + household9: + members: [person9] + state_code: CA + county: EL_DORADO_COUNTY_CA + household10: + members: [person10] + state_code: CA + county: FRESNO_COUNTY_CA + household11: + members: [person11] + state_code: CA + county: GLENN_COUNTY_CA + household12: + members: [person12] + state_code: CA + county: HUMBOLDT_COUNTY_CA + household13: + members: [person13] + state_code: CA + county: IMPERIAL_COUNTY_CA + household14: + members: [person14] + state_code: CA + county: INYO_COUNTY_CA + household15: + members: [person15] + state_code: CA + county: KERN_COUNTY_CA + household16: + members: [person16] + state_code: CA + county: KINGS_COUNTY_CA + household17: + members: [person17] + state_code: CA + county: LAKE_COUNTY_CA + household18: + members: [person18] + state_code: CA + county: LASSEN_COUNTY_CA + household19: + members: [person19] + state_code: CA + county: LOS_ANGELES_COUNTY_CA + household20: + members: [person20] + state_code: CA + county: MADERA_COUNTY_CA + household21: + members: [person21] + state_code: CA + county: MARIN_COUNTY_CA + household22: + members: [person22] + state_code: CA + county: MARIPOSA_COUNTY_CA + household23: + members: [person23] + state_code: CA + county: MENDOCINO_COUNTY_CA + household24: + members: [person24] + state_code: CA + county: MERCED_COUNTY_CA + household25: + members: [person25] + state_code: CA + county: MODOC_COUNTY_CA + household26: + members: [person26] + state_code: CA + county: MONO_COUNTY_CA + household27: + members: [person27] + state_code: CA + county: MONTEREY_COUNTY_CA + household28: + members: [person28] + state_code: CA + county: NAPA_COUNTY_CA + household29: + members: [person29] + state_code: CA + county: NEVADA_COUNTY_CA + household30: + members: [person30] + state_code: CA + county: ORANGE_COUNTY_CA + household31: + members: [person31] + state_code: CA + county: PLACER_COUNTY_CA + household32: + members: [person32] + state_code: CA + county: PLUMAS_COUNTY_CA + household33: + members: [person33] + state_code: CA + county: RIVERSIDE_COUNTY_CA + household34: + members: [person34] + state_code: CA + county: SACRAMENTO_COUNTY_CA + household35: + members: [person35] + state_code: CA + county: SAN_BENITO_COUNTY_CA + household36: + members: [person36] + state_code: CA + county: SAN_BERNARDINO_COUNTY_CA + household37: + members: [person37] + state_code: CA + county: SAN_DIEGO_COUNTY_CA + household38: + members: [person38] + state_code: CA + county: SAN_FRANCISCO_COUNTY_CA + household39: + members: [person39] + state_code: CA + county: SAN_JOAQUIN_COUNTY_CA + household40: + members: [person40] + state_code: CA + county: SAN_LUIS_OBISPO_COUNTY_CA + household41: + members: [person41] + state_code: CA + county: SAN_MATEO_COUNTY_CA + household42: + members: [person42] + state_code: CA + county: SANTA_BARBARA_COUNTY_CA + household43: + members: [person43] + state_code: CA + county: SANTA_CLARA_COUNTY_CA + household44: + members: [person44] + state_code: CA + county: SANTA_CRUZ_COUNTY_CA + household45: + members: [person45] + state_code: CA + county: SHASTA_COUNTY_CA + household46: + members: [person46] + state_code: CA + county: SIERRA_COUNTY_CA + household47: + members: [person47] + state_code: CA + county: SISKIYOU_COUNTY_CA + household48: + members: [person48] + state_code: CA + county: SOLANO_COUNTY_CA + household49: + members: [person49] + state_code: CA + county: SONOMA_COUNTY_CA + household50: + members: [person50] + state_code: CA + county: STANISLAUS_COUNTY_CA + household51: + members: [person51] + state_code: CA + county: SUTTER_COUNTY_CA + household52: + members: [person52] + state_code: CA + county: TEHAMA_COUNTY_CA + household53: + members: [person53] + state_code: CA + county: TRINITY_COUNTY_CA + household54: + members: [person54] + state_code: CA + county: TULARE_COUNTY_CA + household55: + members: [person55] + state_code: CA + county: TUOLUMNE_COUNTY_CA + household56: + members: [person56] + state_code: CA + county: VENTURA_COUNTY_CA + household57: + members: [person57] + state_code: CA + county: YOLO_COUNTY_CA + household58: + members: [person58] + state_code: CA + county: YUBA_COUNTY_CA + output: + ca_liheap_income_group: + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + - 4 + ca_liheap_utility_heating: + - 308 + - 419 + - 446 + - 421 + - 433 + - 435 + - 381 + - 411 + - 433 + - 434 + - 424 + - 330 + - 382 + - 333 + - 397 + - 390 + - 480 + - 403 + - 310 + - 426 + - 399 + - 435 + - 376 + - 411 + - 378 + - 383 + - 318 + - 386 + - 499 + - 339 + - 405 + - 382 + - 389 + - 360 + - 340 + - 365 + - 313 + - 300 + - 423 + - 328 + - 358 + - 283 + - 341 + - 339 + - 456 + - 397 + - 410 + - 359 + - 351 + - 403 + - 437 + - 454 + - 318 + - 381 + - 437 + - 295 + - 352 + - 432 + +- name: Case 5, Alameda exact monthly boundaries determine final utility awards. + period: 2026 + # Apply Alameda groups 484/404/356/308 to the source monthly cent bands. + # Noncategorical 3331.67 exceeds SMI and receives zero utility benefit. + input: + people: + person1: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 0 + person2: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 15_650.04 + person3: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 15_650.16 + person4: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 19_562.52 + person5: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 19_562.64 + person6: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 23_475 + person7: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 23_475.12 + person8: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 39_979.92 + person9: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 39_980.04 + spm_units: + spm_unit1: + members: [person1] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit2: + members: [person2] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit3: + members: [person3] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit4: + members: [person4] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit5: + members: [person5] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit6: + members: [person6] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit7: + members: [person7] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit8: + members: [person8] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit9: + members: [person9] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + households: + household1: + members: [person1] + state_code: CA + county: ALAMEDA_COUNTY_CA + household2: + members: [person2] + state_code: CA + county: ALAMEDA_COUNTY_CA + household3: + members: [person3] + state_code: CA + county: ALAMEDA_COUNTY_CA + household4: + members: [person4] + state_code: CA + county: ALAMEDA_COUNTY_CA + household5: + members: [person5] + state_code: CA + county: ALAMEDA_COUNTY_CA + household6: + members: [person6] + state_code: CA + county: ALAMEDA_COUNTY_CA + household7: + members: [person7] + state_code: CA + county: ALAMEDA_COUNTY_CA + household8: + members: [person8] + state_code: CA + county: ALAMEDA_COUNTY_CA + household9: + members: [person9] + state_code: CA + county: ALAMEDA_COUNTY_CA + output: + ca_liheap_utility_heating: [484, 484, 404, 404, 356, 356, 308, 308, 0] + +- name: Case 6, qualified member increments stop at six. + period: 2026 + # Nevada group 1 base 837 plus 19 for each additional qualified person through + # six:837,856,913,932,932. No extra payment for the seventh member. + input: + people: + person1: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 0 + person2: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 0 + person3: {age: 33, is_citizen_or_legal_immigrant: true, ssi: 0} + person4: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 0 + person5: {age: 33, is_citizen_or_legal_immigrant: true, ssi: 0} + person6: {age: 10, is_citizen_or_legal_immigrant: true, ssi: 0} + person7: {age: 12, is_citizen_or_legal_immigrant: true, ssi: 0} + person8: {age: 14, is_citizen_or_legal_immigrant: true, ssi: 0} + person9: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 0 + person10: {age: 33, is_citizen_or_legal_immigrant: true, ssi: 0} + person11: {age: 10, is_citizen_or_legal_immigrant: true, ssi: 0} + person12: {age: 12, is_citizen_or_legal_immigrant: true, ssi: 0} + person13: {age: 14, is_citizen_or_legal_immigrant: true, ssi: 0} + person14: {age: 16, is_citizen_or_legal_immigrant: true, ssi: 0} + person15: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 0 + person16: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person17: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person18: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person19: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person20: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person21: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + spm_units: + spm_unit1: + members: [person1] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit2: + members: [person2, person3] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit3: + members: [person4, person5, person6, person7, person8] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit4: + members: [person9, person10, person11, person12, person13, person14] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit5: + members: [person15, person16, person17, person18, person19, person20, person21] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + households: + household1: + members: [person1] + state_code: CA + county: NEVADA_COUNTY_CA + household2: + members: [person2, person3] + state_code: CA + county: NEVADA_COUNTY_CA + household3: + members: [person4, person5, person6, person7, person8] + state_code: CA + county: NEVADA_COUNTY_CA + household4: + members: [person9, person10, person11, person12, person13, person14] + state_code: CA + county: NEVADA_COUNTY_CA + household5: + members: [person15, person16, person17, person18, person19, person20, person21] + state_code: CA + county: NEVADA_COUNTY_CA + output: + ca_liheap_utility_heating: [837, 856, 913, 932, 932] + +- name: Case 7, categorical and federal-floor large households receive the source group-four award. + period: 2026 + # Categorical above-SMI awards use Nevada group 4 base 499+5*19=594. + # Without categorical receipt, the 13-person row exceeds both SMI and its + # 89_815 federal floor. The 25-person row at 145_314.60 exceeds SMI by + # 0.12 but remains below its 162_415 floor, so it also receives 594. + input: + people: + person1: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 117_635.64 + person2: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person3: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person4: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person5: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person6: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person7: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person8: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person9: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person10: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person11: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person12: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person13: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person14: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 145_314.6 + person15: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person16: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person17: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person18: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person19: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person20: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person21: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person22: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person23: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person24: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person25: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person26: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person27: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person28: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person29: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person30: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person31: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person32: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person33: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person34: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person35: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person36: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person37: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person38: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person39: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 117_635.64 + person40: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person41: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person42: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person43: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person44: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person45: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person46: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person47: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person48: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person49: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person50: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person51: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person52: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 145_314.6 + person53: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person54: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person55: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person56: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person57: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person58: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person59: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person60: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person61: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person62: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person63: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person64: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person65: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person66: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person67: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person68: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person69: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person70: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person71: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person72: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person73: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person74: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person75: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person76: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + spm_units: + spm_unit1: + members: + - person1 + - person2 + - person3 + - person4 + - person5 + - person6 + - person7 + - person8 + - person9 + - person10 + - person11 + - person12 + - person13 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 1_200 + tanf: 0 + ca_state_supplement: 0 + spm_unit2: + members: + - person14 + - person15 + - person16 + - person17 + - person18 + - person19 + - person20 + - person21 + - person22 + - person23 + - person24 + - person25 + - person26 + - person27 + - person28 + - person29 + - person30 + - person31 + - person32 + - person33 + - person34 + - person35 + - person36 + - person37 + - person38 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 1_200 + tanf: 0 + ca_state_supplement: 0 + spm_unit3: + members: + - person39 + - person40 + - person41 + - person42 + - person43 + - person44 + - person45 + - person46 + - person47 + - person48 + - person49 + - person50 + - person51 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit4: + members: + - person52 + - person53 + - person54 + - person55 + - person56 + - person57 + - person58 + - person59 + - person60 + - person61 + - person62 + - person63 + - person64 + - person65 + - person66 + - person67 + - person68 + - person69 + - person70 + - person71 + - person72 + - person73 + - person74 + - person75 + - person76 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + households: + household1: + members: + - person1 + - person2 + - person3 + - person4 + - person5 + - person6 + - person7 + - person8 + - person9 + - person10 + - person11 + - person12 + - person13 + state_code: CA + county: NEVADA_COUNTY_CA + household2: + members: + - person14 + - person15 + - person16 + - person17 + - person18 + - person19 + - person20 + - person21 + - person22 + - person23 + - person24 + - person25 + - person26 + - person27 + - person28 + - person29 + - person30 + - person31 + - person32 + - person33 + - person34 + - person35 + - person36 + - person37 + - person38 + state_code: CA + county: NEVADA_COUNTY_CA + household3: + members: + - person39 + - person40 + - person41 + - person42 + - person43 + - person44 + - person45 + - person46 + - person47 + - person48 + - person49 + - person50 + - person51 + state_code: CA + county: NEVADA_COUNTY_CA + household4: + members: + - person52 + - person53 + - person54 + - person55 + - person56 + - person57 + - person58 + - person59 + - person60 + - person61 + - person62 + - person63 + - person64 + - person65 + - person66 + - person67 + - person68 + - person69 + - person70 + - person71 + - person72 + - person73 + - person74 + - person75 + - person76 + state_code: CA + county: NEVADA_COUNTY_CA + output: + ca_liheap_categorically_eligible: [true, true, false, false] + ca_liheap_income_eligible: [true, true, false, true] + ca_liheap_utility_heating: [594, 594, 0, 594] + +- name: Case 8, mixed immigration and child income affect the final amount. + period: 2026 + # Nonqualified wages 24_000 remain countable with size 1: group 4 gives 308. + # Minor earnings are excluded: size 2 group 1 gives 484+19=503. Age 18 wages + # and minor unearned income 36_000 each yield size 2 group 4:308+19=327. + input: + people: + person1: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person2: + age: 30 + is_citizen_or_legal_immigrant: false + ssi: 0 + employment_income: 24_000 + person3: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person4: + age: 17 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 36_000 + person5: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person6: + age: 18 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 36_000 + person7: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person8: + age: 17 + is_citizen_or_legal_immigrant: true + ssi: 0 + social_security_survivors: 36_000 + spm_units: + spm_unit1: + members: [person1, person2] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit2: + members: [person3, person4] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit3: + members: [person5, person6] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit4: + members: [person7, person8] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + households: + household1: + members: [person1, person2] + state_code: CA + county: ALAMEDA_COUNTY_CA + household2: + members: [person3, person4] + state_code: CA + county: ALAMEDA_COUNTY_CA + household3: + members: [person5, person6] + state_code: CA + county: ALAMEDA_COUNTY_CA + household4: + members: [person7, person8] + state_code: CA + county: ALAMEDA_COUNTY_CA + output: + ca_liheap_household_size: [1, 2, 2, 2] + ca_liheap_countable_income: [24_000, 0, 36_000, 36_000] + ca_liheap_utility_heating: [308, 503, 327, 327] + +- name: Case 9, support deductions alter the amount without double counting. + period: 2026 + # Legally mandated support 100 monthly reduces 2000 to 1900: Alameda group 3 + # gives 356. Without that deduction group 4 gives 308. Counts are annualized. + input: + people: + person1: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 24_000 + child_support_expense: 1_200 + person2: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 24_000 + spm_units: + spm_unit1: + members: [person1] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit2: + members: [person2] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + households: + household1: + members: [person1] + state_code: CA + county: ALAMEDA_COUNTY_CA + household2: + members: [person2] + state_code: CA + county: ALAMEDA_COUNTY_CA + output: + ca_liheap_countable_income: [22_800, 24_000] + ca_liheap_income_group: [3, 4] + ca_liheap_utility_heating: [356, 308] + +- name: Case 10, county amount is isolated across states and invalid applicants. + period: 2026 + # Los Angeles size 2=487+19=506; Alameda=484+19=503. Oregon county + # lookup must not fail or leak a CA award. All-nonqualified and minor-only + # qualified applicants receive zero under the represented applicant rule. + input: + people: + person1: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 0 + person2: {age: 33, is_citizen_or_legal_immigrant: true, ssi: 0} + person3: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 0 + person4: {age: 33, is_citizen_or_legal_immigrant: true, ssi: 0} + person5: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 0 + person6: {age: 35, is_citizen_or_legal_immigrant: false, ssi: 0} + person7: {age: 35, is_citizen_or_legal_immigrant: false, ssi: 0} + person8: {age: 17, is_citizen_or_legal_immigrant: true, ssi: 0} + spm_units: + spm_unit1: + members: [person1, person2] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit2: + members: [person3, person4] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit3: + members: [person5] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit4: + members: [person6] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit5: + members: [person7, person8] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + households: + household1: + members: [person1, person2] + state_code: CA + county: LOS_ANGELES_COUNTY_CA + household2: + members: [person3, person4] + state_code: CA + county: ALAMEDA_COUNTY_CA + household3: + members: [person5] + state_code: OR + county: MULTNOMAH_COUNTY_OR + household4: + members: [person6] + state_code: CA + county: ALAMEDA_COUNTY_CA + household5: + members: [person7, person8] + state_code: CA + county: ALAMEDA_COUNTY_CA + output: + ca_liheap_utility_heating: [506, 503, 0, 0, 0] + +- name: Case 11, housing small bills and vulnerability do not add unsupported limits. + period: 2026 + # Alameda base 484 can exceed a 100 bill. Utility matrix has no separate + # vulnerability addition. Heat-in-rent is supported by proxy, subsidized or + # not (plan 2.3, guide 3.3). NONE has no heat. + input: + people: + person1: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person2: + age: 65 + is_citizen_or_legal_immigrant: true + ssi: 0 + is_disabled: true + is_veteran: true + person3: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person4: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person5: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person6: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + spm_units: + spm_unit1: + members: [person1] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit2: + members: [person2] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit3: + members: [person3] + heating_type: NATURAL_GAS + gas_expense: 0 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + heat_expense_included_in_rent: true + spm_unit4: + members: [person4] + heating_type: NATURAL_GAS + gas_expense: 0 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + heat_expense_included_in_rent: true + receives_housing_assistance: true + spm_unit5: + members: [person5] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + heat_expense_included_in_rent: true + receives_housing_assistance: true + spm_unit6: + members: [person6] + heating_type: NONE + snap: 0 + tanf: 0 + ca_state_supplement: 0 + households: + household1: + members: [person1] + state_code: CA + county: ALAMEDA_COUNTY_CA + household2: + members: [person2] + state_code: CA + county: ALAMEDA_COUNTY_CA + household3: + members: [person3] + state_code: CA + county: ALAMEDA_COUNTY_CA + household4: + members: [person4] + state_code: CA + county: ALAMEDA_COUNTY_CA + household5: + members: [person5] + state_code: CA + county: ALAMEDA_COUNTY_CA + household6: + members: [person6] + state_code: CA + county: ALAMEDA_COUNTY_CA + output: + ca_liheap_utility_heating: [484, 484, 484, 484, 484, 0] + +# Guide pp. 264-265: a solar customer's energy cost is the electric and gas +# charges, and an out-of-pocket cost is required. $1,000 a month is group 1 in +# Alameda: $484. With no bill the home has no energy cost. +- name: Case 12, a solar home qualifies on a positive utility bill. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + person1: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0, employment_income: 12_000} + person2: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0, employment_income: 12_000} + spm_units: + spm_unit1: + members: [person1] + heating_type: SOLAR + pre_subsidy_electricity_expense: 600 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit2: + members: [person2] + heating_type: SOLAR + snap: 0 + tanf: 0 + ca_state_supplement: 0 + households: + household1: + members: [person1] + state_code: CA + county: ALAMEDA_COUNTY_CA + household2: + members: [person2] + state_code: CA + county: ALAMEDA_COUNTY_CA + output: + ca_liheap_utility_eligible: [true, false] + ca_liheap_utility_heating: [484, 0] + +# Guide pp. 66, 193, 205, 221: energy costs and electric or gas bills, with no +# primary-fuel condition. A subsidized tenant with gas heat in rent and an +# electric bill, and an electric-heated home with only a gas bill, both get the +# group 1 Alameda $484. A propane home with only an electric bill gets the +# group 1 Fresno $716 on that account. +- name: Case 13, every known fuel qualifies on either utility bill. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + person1: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0, employment_income: 12_000} + person2: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0, employment_income: 12_000} + person3: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0, employment_income: 12_000} + spm_units: + spm_unit1: + members: [person1] + heating_type: NATURAL_GAS + gas_expense: 0 + pre_subsidy_electricity_expense: 1_200 + heat_expense_included_in_rent: true + receives_housing_assistance: true + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit2: + members: [person2] + heating_type: ELECTRICITY + pre_subsidy_electricity_expense: 0 + gas_expense: 600 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit3: + members: [person3] + heating_type: PROPANE + bottled_gas_expense: 0 + pre_subsidy_electricity_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + households: + household1: + members: [person1] + state_code: CA + county: ALAMEDA_COUNTY_CA + household2: + members: [person2] + state_code: CA + county: ALAMEDA_COUNTY_CA + household3: + members: [person3] + state_code: CA + county: FRESNO_COUNTY_CA + output: + ca_liheap_basic_eligible: [true, true, true] + ca_liheap_utility_heating: [484, 484, 716] + +# Guide p. 249. Wages 40,500 exceed the 39,979.92 one-person limit (p. 184); +# after 1,000 of job expenses, 39,500 is 3,291.67 a month, group 4: Alameda $308. +- name: Case 14, job-related expenses can bring a wage earner under the income limit. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 40_500 + unreimbursed_business_employee_expenses: 1_000 + person2: + age: 40 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 40_500 + spm_units: + spm_unit1: + members: [person1] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit2: + members: [person2] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + households: + household1: + members: [person1] + state_code: CA + county: ALAMEDA_COUNTY_CA + household2: + members: [person2] + state_code: CA + county: ALAMEDA_COUNTY_CA + output: + ca_liheap_utility_heating: [308, 0] + +# Contract 8.1.2 (p. 363) allows one HEAP or WPO payment, so HEAP pays only where +# the liquid and wood components are $0. Wages of $12,000 are group 1 throughout. +# Fresno has no liquid coverage, so the propane home takes HEAP on its electric +# bill. A wood home with an approved delivery takes that instead. Madera burden is +# 2,040 / 12,000 = 17%, for 10 + 10 = 20 points: with a $12 propane bill WPO pays +# 411 + 105 = 516; with no propane bill WPO pays nothing (contract 8.1.5.2, p. 364) +# and HEAP pays 702. NONE and UNSPECIFIED get $0 even with a utility bill. +- name: Case 15, another fuel takes the utility benefit only where no other component pays. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + person1: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0, employment_income: 12_000} + person2: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0, employment_income: 12_000} + person3: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0, employment_income: 12_000} + person4: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0, employment_income: 12_000} + person5: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0, employment_income: 12_000} + person6: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0, employment_income: 12_000} + person7: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0, employment_income: 12_000} + spm_units: + spm_unit1: + members: [person1] + heating_type: PROPANE + bottled_gas_expense: 600 + pre_subsidy_electricity_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit2: + members: [person2] + heating_type: WOOD + pre_subsidy_electricity_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit3: + members: [person3] + heating_type: WOOD + pre_subsidy_electricity_expense: 1_200 + ca_liheap_approved_wood_delivery_cost: 600 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit4: + members: [person4] + heating_type: PROPANE + bottled_gas_expense: 12 + pre_subsidy_electricity_expense: 2_028 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit5: + members: [person5] + heating_type: PROPANE + pre_subsidy_electricity_expense: 2_040 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit6: + members: [person6] + heating_type: NONE + pre_subsidy_electricity_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit7: + members: [person7] + heating_type: UNSPECIFIED + pre_subsidy_electricity_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + households: + household1: + members: [person1] + state_code: CA + county: FRESNO_COUNTY_CA + household2: + members: [person2] + state_code: CA + county: FRESNO_COUNTY_CA + household3: + members: [person3] + state_code: CA + county: FRESNO_COUNTY_CA + household4: + members: [person4] + state_code: CA + county: MADERA_COUNTY_CA + household5: + members: [person5] + state_code: CA + county: MADERA_COUNTY_CA + household6: + members: [person6] + state_code: CA + county: ALAMEDA_COUNTY_CA + household7: + members: [person7] + state_code: CA + county: ALAMEDA_COUNTY_CA + output: + ca_liheap_utility_heating: [716, 716, 0, 0, 702, 0, 0] + ca_liheap_wood_heating: [0, 0, 600, 0, 0, 0, 0] + ca_liheap_covered_liquid_heating: [0, 0, 0, 516, 0, 0, 0] + +# Madera packet pp. 189, 233-234 apply the 20-point minimum to HEAP. $2,500 a month +# is group 4 (4 points) and a 2% burden adds 4, so 8 points pay $0. At $1,000 a +# month, group 1 (10 points): a 17% burden adds 10, so 20 points pay 702; a 15% +# burden adds 8, so 18 points pay $0. A zero-income home has no burden group or +# points and stays at 702. Fresno has no recovered minimum: group 4, 434. +- name: Case 16, Madera's priority minimum applies to the utility benefit. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + person1: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0, employment_income: 30_000} + person2: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0, employment_income: 12_000} + person3: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0, employment_income: 12_000} + person4: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0, employment_income: 0} + person5: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0, employment_income: 30_000} + spm_units: + spm_unit1: + members: [person1] + heating_type: NATURAL_GAS + gas_expense: 600 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit2: + members: [person2] + heating_type: NATURAL_GAS + gas_expense: 2_040 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit3: + members: [person3] + heating_type: NATURAL_GAS + gas_expense: 1_800 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit4: + members: [person4] + heating_type: NATURAL_GAS + gas_expense: 600 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit5: + members: [person5] + heating_type: NATURAL_GAS + gas_expense: 600 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + households: + household1: + members: [person1] + state_code: CA + county: MADERA_COUNTY_CA + household2: + members: [person2] + state_code: CA + county: MADERA_COUNTY_CA + household3: + members: [person3] + state_code: CA + county: MADERA_COUNTY_CA + household4: + members: [person4] + state_code: CA + county: MADERA_COUNTY_CA + household5: + members: [person5] + state_code: CA + county: FRESNO_COUNTY_CA + output: + ca_liheap_energy_burden_group: [1, 4, 3, 0, 0] + ca_liheap_madera_priority_points: [8, 20, 18, 0, 0] + ca_liheap_utility_heating: [0, 702, 0, 702, 434] diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/csd/liheap/ca_liheap_wood_heating.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/csd/liheap/ca_liheap_wood_heating.yaml new file mode 100644 index 00000000000..94dcad20638 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/csd/liheap/ca_liheap_wood_heating.yaml @@ -0,0 +1,578 @@ +# PDF pages 6-7,9-10,184,188,193,202-203,205,217-218,229,233,235-237,246-247,363-364 +# https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=6 +# https://www.law.cornell.edu/uscode/text/42/8624#b_2_B +# The approved quote already reflects eligible quantity, form, climate, storage +# and prioritization. These tests supply no provider, agency or cords selector. +# One ordinary annual award is capped at $1,000; no discretionary supplement. + +# Fresno demonstrates that wood is not limited to Madera. +# Existing wood spending establishes responsibility for all seven households. +# Omitted and zero quotes both yield zero modeled benefit, not legal denial. +- name: Case 1, approved wood delivery is bounded by zero and the ordinary WPO maximum. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + person1: {age: 40, is_citizen_or_legal_immigrant: true, employment_income: 12_000, ssi: 0} + person2: {age: 40, is_citizen_or_legal_immigrant: true, employment_income: 12_000, ssi: 0} + person3: {age: 40, is_citizen_or_legal_immigrant: true, employment_income: 12_000, ssi: 0} + person4: {age: 40, is_citizen_or_legal_immigrant: true, employment_income: 12_000, ssi: 0} + person5: {age: 40, is_citizen_or_legal_immigrant: true, employment_income: 12_000, ssi: 0} + person6: {age: 40, is_citizen_or_legal_immigrant: true, employment_income: 12_000, ssi: 0} + person7: {age: 40, is_citizen_or_legal_immigrant: true, employment_income: 12_000, ssi: 0} + spm_units: + spm_unit1: + members: [person1] + heating_type: WOOD + wood_expense: 120 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit2: + members: [person2] + heating_type: WOOD + wood_expense: 120 + ca_liheap_approved_wood_delivery_cost: 0 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit3: + members: [person3] + heating_type: WOOD + wood_expense: 120 + ca_liheap_approved_wood_delivery_cost: -25 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit4: + members: [person4] + heating_type: WOOD + wood_expense: 120 + ca_liheap_approved_wood_delivery_cost: 750.25 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit5: + members: [person5] + heating_type: WOOD + wood_expense: 120 + ca_liheap_approved_wood_delivery_cost: 999.99 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit6: + members: [person6] + heating_type: WOOD + wood_expense: 120 + ca_liheap_approved_wood_delivery_cost: 1_000 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit7: + members: [person7] + heating_type: WOOD + wood_expense: 120 + ca_liheap_approved_wood_delivery_cost: 1_400 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + households: + household1: {members: [person1], state_code: CA, county: FRESNO_COUNTY_CA} + household2: {members: [person2], state_code: CA, county: FRESNO_COUNTY_CA} + household3: {members: [person3], state_code: CA, county: FRESNO_COUNTY_CA} + household4: {members: [person4], state_code: CA, county: FRESNO_COUNTY_CA} + household5: {members: [person5], state_code: CA, county: FRESNO_COUNTY_CA} + household6: {members: [person6], state_code: CA, county: FRESNO_COUNTY_CA} + household7: {members: [person7], state_code: CA, county: FRESNO_COUNTY_CA} + output: + ca_liheap_approved_wood_delivery_cost: [0, 0, -25, 750.25, 999.99, 1_000, 1_400] + ca_liheap_wood_heating: [0, 0, 0, 750.25, 999.99, 1_000, 1_000] + heating_expense: [120, 120, 120, 120, 120, 120, 120] + +# An approved delivery establishes responsibility before any +# prior wood purchase, including at zero income. Historic spending remains a +# separate input. At $12,000 income, $1,200 is burden group 1 and $2,400 group 4; +# adding the $600 quote to the second household's expense would change its band. +- name: Case 2, approved wood cost is independent of historical spending and liquid coverage. + period: 2026 + input: + people: + person1: {age: 40, is_citizen_or_legal_immigrant: true, employment_income: 0, ssi: 0} + person2: {age: 40, is_citizen_or_legal_immigrant: true, employment_income: 12_000, ssi: 0} + person3: {age: 40, is_citizen_or_legal_immigrant: true, employment_income: 12_000, ssi: 0} + spm_units: + spm_unit1: + members: [person1] + heating_type: WOOD + ca_liheap_approved_wood_delivery_cost: 600 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit2: + members: [person2] + heating_type: WOOD + wood_expense: 1_200 + ca_liheap_approved_wood_delivery_cost: 600 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit3: + members: [person3] + heating_type: WOOD + wood_expense: 2_400 + ca_liheap_approved_wood_delivery_cost: 600 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + households: + household1: {members: [person1], state_code: CA, county: MADERA_COUNTY_CA} + household2: {members: [person2], state_code: CA, county: MADERA_COUNTY_CA} + household3: {members: [person3], state_code: CA, county: MADERA_COUNTY_CA} + output: + ca_liheap_basic_eligible: [true, true, true] + ca_liheap_countable_income: [0, 12_000, 12_000] + wood_expense: [0, 1_200, 2_400] + heating_expense: [0, 1_200, 2_400] + ca_liheap_energy_burden_group: [0, 1, 4] + ca_liheap_liquid_heating_covered: [false, false, false] + ca_liheap_wood_heating: [600, 600, 600] + +# A quote cannot cause cross-state or cross-fuel payments. +# The propane household retains the sourced Madera ordinary amount $411+$105 +# and its original $2,040 bill even when an unrelated wood quote is supplied. +- name: Case 3, mixed states and primary fuels receive only their applicable component. + period: 2026 + input: + people: + person1: {age: 40, is_citizen_or_legal_immigrant: true, employment_income: 12_000, ssi: 0} + person2: {age: 40, is_citizen_or_legal_immigrant: true, employment_income: 12_000, ssi: 0} + person3: {age: 40, is_citizen_or_legal_immigrant: true, employment_income: 12_000, ssi: 0} + person4: {age: 40, is_citizen_or_legal_immigrant: true, employment_income: 12_000, ssi: 0} + spm_units: + spm_unit1: + members: [person1] + heating_type: WOOD + ca_liheap_approved_wood_delivery_cost: 600 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit2: + members: [person2] + heating_type: WOOD + ca_liheap_approved_wood_delivery_cost: 600 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit3: + members: [person3] + heating_type: PROPANE + bottled_gas_expense: 2_040 + ca_liheap_approved_wood_delivery_cost: 600 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit4: + members: [person4] + heating_type: ELECTRICITY + pre_subsidy_electricity_expense: 2_040 + ca_liheap_approved_wood_delivery_cost: 600 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + households: + household1: {members: [person1], state_code: CA, county: FRESNO_COUNTY_CA} + household2: {members: [person2], state_code: OR, county: MULTNOMAH_COUNTY_OR} + household3: {members: [person3], state_code: CA, county: MADERA_COUNTY_CA} + household4: {members: [person4], state_code: CA, county: MADERA_COUNTY_CA} + output: + ca_liheap_basic_eligible: [true, false, true, true] + ca_liheap_utility_eligible: [false, false, false, true] + heating_expense: [0, 0, 2_040, 2_040] + ca_liheap_wood_heating: [600, 0, 0, 0] + ca_liheap_covered_liquid_heating: [0, 0, 516, 0] + +# Approval does not override the modeled income or qualified-adult +# gates. A nonqualified adult with a qualified child still lacks an applicant; +# age 17 is not assumed emancipated, whereas age 18 meets the applicant gate. +# The final household is income eligible through actual SNAP receipt, not its +# approved quote: categorical eligibility remains the existing separate rule. +- name: Case 4, approved wood delivery preserves income adult and categorical eligibility rules. + period: 2026 + input: + people: + person1: {age: 40, is_citizen_or_legal_immigrant: true, employment_income: 60_000, ssi: 0} + person2: {age: 40, is_citizen_or_legal_immigrant: false, employment_income: 12_000, ssi: 0} + person3: {age: 5, is_citizen_or_legal_immigrant: true, ssi: 0} + person4: {age: 17, is_citizen_or_legal_immigrant: true, pension_income: 12_000, ssi: 0} + person5: {age: 18, is_citizen_or_legal_immigrant: true, employment_income: 12_000, ssi: 0} + person6: {age: 40, is_citizen_or_legal_immigrant: true, employment_income: 60_000, ssi: 0} + spm_units: + spm_unit1: + members: [person1] + heating_type: WOOD + ca_liheap_approved_wood_delivery_cost: 600 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit2: + members: [person2, person3] + heating_type: WOOD + ca_liheap_approved_wood_delivery_cost: 600 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit3: + members: [person4] + heating_type: WOOD + ca_liheap_approved_wood_delivery_cost: 600 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit4: + members: [person5] + heating_type: WOOD + ca_liheap_approved_wood_delivery_cost: 600 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit5: + members: [person6] + heating_type: WOOD + ca_liheap_approved_wood_delivery_cost: 600 + snap: 120 + tanf: 0 + ca_state_supplement: 0 + households: + household1: {members: [person1], state_code: CA, county: FRESNO_COUNTY_CA} + household2: {members: [person2, person3], state_code: CA, county: FRESNO_COUNTY_CA} + household3: {members: [person4], state_code: CA, county: FRESNO_COUNTY_CA} + household4: {members: [person5], state_code: CA, county: FRESNO_COUNTY_CA} + household5: {members: [person6], state_code: CA, county: FRESNO_COUNTY_CA} + output: + ca_liheap_income_eligible: [false, true, true, true, true] + ca_liheap_basic_eligible: [false, false, false, true, true] + ca_liheap_wood_heating: [0, 0, 0, 600, 600] + +- name: Case 5, actual large households use the federal floor with its strict cent boundary. + period: 2026 + absolute_error_margin: 0.01 + # Threshold edges: 2025 FPG for 25 = 15_650 + 24 x 5_500 = 147_650. + # The floor is round(147_650 x 1.1, 2) = 162_415, above the unchanged + # 145_314.48 SMI limit. Actual qualified members determine size; no size, + # income, eligibility or payment result is supplied as an input. + # Approved wood 900 pays below the floor, including above SMI, but not at it. + input: + people: + person1: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0, employment_income: 150_000} + person2: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person3: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person4: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person5: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person6: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person7: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person8: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person9: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person10: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person11: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person12: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person13: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person14: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person15: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person16: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person17: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person18: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person19: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person20: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person21: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person22: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person23: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person24: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person25: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person26: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0, employment_income: 162_414.99} + person27: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person28: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person29: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person30: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person31: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person32: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person33: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person34: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person35: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person36: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person37: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person38: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person39: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person40: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person41: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person42: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person43: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person44: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person45: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person46: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person47: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person48: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person49: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person50: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person51: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0, employment_income: 162_415} + person52: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person53: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person54: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person55: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person56: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person57: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person58: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person59: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person60: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person61: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person62: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person63: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person64: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person65: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person66: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person67: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person68: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person69: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person70: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person71: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person72: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person73: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person74: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person75: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + spm_units: + spm_unit1: + members: [person1, person2, person3, person4, person5, person6, person7, person8, person9, person10, person11, person12, person13, person14, person15, person16, person17, person18, person19, person20, person21, person22, person23, person24, person25] + heating_type: WOOD + ca_liheap_approved_wood_delivery_cost: 900 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit2: + members: [person26, person27, person28, person29, person30, person31, person32, person33, person34, person35, person36, person37, person38, person39, person40, person41, person42, person43, person44, person45, person46, person47, person48, person49, person50] + heating_type: WOOD + ca_liheap_approved_wood_delivery_cost: 900 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit3: + members: [person51, person52, person53, person54, person55, person56, person57, person58, person59, person60, person61, person62, person63, person64, person65, person66, person67, person68, person69, person70, person71, person72, person73, person74, person75] + heating_type: WOOD + ca_liheap_approved_wood_delivery_cost: 900 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + households: + household1: + members: [person1, person2, person3, person4, person5, person6, person7, person8, person9, person10, person11, person12, person13, person14, person15, person16, person17, person18, person19, person20, person21, person22, person23, person24, person25] + state_code: CA + county: FRESNO_COUNTY_CA + household2: + members: [person26, person27, person28, person29, person30, person31, person32, person33, person34, person35, person36, person37, person38, person39, person40, person41, person42, person43, person44, person45, person46, person47, person48, person49, person50] + state_code: CA + county: FRESNO_COUNTY_CA + household3: + members: [person51, person52, person53, person54, person55, person56, person57, person58, person59, person60, person61, person62, person63, person64, person65, person66, person67, person68, person69, person70, person71, person72, person73, person74, person75] + state_code: CA + county: FRESNO_COUNTY_CA + output: + ca_liheap_household_size: [25, 25, 25] + ca_liheap_countable_income: [150_000, 162_414.99, 162_415] + ca_liheap_income_limit: [145_314.48, 145_314.48, 145_314.48] + ca_liheap_income_eligible: [true, true, false] + ca_liheap_basic_eligible: [true, true, false] + ca_liheap_wood_heating: [900, 900, 0] + +- name: Case 6, military retirement is separate from ordinary pension income. + period: 2026 + absolute_error_margin: 0.01 + # Military pensions count under the final plan at page 236. Each household + # has 50_000 total income, above the one-person 39_979.92 ceiling. The + # second has 20_000 ordinary pension + 30_000 military pay, counted once. + input: + people: + person1: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0, military_retirement_pay: 50_000} + person2: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0, pension_income: 20_000, military_retirement_pay: 30_000} + spm_units: + spm_unit1: + members: [person1] + heating_type: WOOD + ca_liheap_approved_wood_delivery_cost: 900 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit2: + members: [person2] + heating_type: WOOD + ca_liheap_approved_wood_delivery_cost: 900 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + households: + household1: + members: [person1] + state_code: CA + county: FRESNO_COUNTY_CA + household2: + members: [person2] + state_code: CA + county: FRESNO_COUNTY_CA + output: + ca_liheap_countable_income: [50_000, 50_000] + ca_liheap_income_eligible: [false, false] + ca_liheap_wood_heating: [0, 0] + +- name: Case 7, Medicare and payroll medical premiums change awards without double deduction. + period: 2026 + absolute_error_margin: 0.01 + # Final plan pages 233,235,246-247 deduct allowable medical premiums from + # total gross income. Reported components contain medical coverage only. + # 41_000 - 2_400 Part B = 38_600; 41_000 - 2_400 payroll = 38_600. + # The third direct non-payroll total 2_400 already includes the decomposed + # 1_200 + 1_200; add only the disjoint 600 payroll: 41_000 - 3_000 = 38_000. + # All are below 39_979.92; the 41_000 no-premium comparison is ineligible. + input: + people: + person1: {age: 68, is_citizen_or_legal_immigrant: true, ssi: 0, social_security_retirement: 41_000, medicare_enrolled: true, medicare_part_b_premium: 2_400} + person2: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0, employment_income: 41_000, pre_tax_health_insurance_premiums: 2_400} + person3: {age: 68, is_citizen_or_legal_immigrant: true, ssi: 0, social_security_retirement: 41_000, health_insurance_premiums: 2_400, health_insurance_premiums_without_medicare_part_b: 1_200, medicare_enrolled: true, medicare_part_b_premium: 1_200, pre_tax_health_insurance_premiums: 600} + person4: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0, employment_income: 41_000} + spm_units: + spm_unit1: + members: [person1] + heating_type: WOOD + ca_liheap_approved_wood_delivery_cost: 900 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit2: + members: [person2] + heating_type: WOOD + ca_liheap_approved_wood_delivery_cost: 900 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit3: + members: [person3] + heating_type: WOOD + ca_liheap_approved_wood_delivery_cost: 900 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit4: + members: [person4] + heating_type: WOOD + ca_liheap_approved_wood_delivery_cost: 900 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + households: + household1: + members: [person1] + state_code: CA + county: FRESNO_COUNTY_CA + household2: + members: [person2] + state_code: CA + county: FRESNO_COUNTY_CA + household3: + members: [person3] + state_code: CA + county: FRESNO_COUNTY_CA + household4: + members: [person4] + state_code: CA + county: FRESNO_COUNTY_CA + output: + medical_expense_health_insurance_premiums: [2_400, 0, 2_400, 0] + ca_liheap_countable_income: [38_600, 38_600, 38_000, 41_000] + ca_liheap_income_eligible: [true, true, true, false] + ca_liheap_wood_heating: [900, 900, 900, 0] + +- name: Case 8, CalWORKs nonparticipation prevents both income counting and categorical bypass. + period: 2026 + absolute_error_margin: 0.01 + # State entitlement is supplied to isolate take-up, not to test CalWORKs + # entitlement rules. With takes_up_tanf_if_eligible false, the 6_000 state + # entitlement is not received: count 60_000 and no categorical bypass. + # The participant receives 6_000 once: count 66_000, bypass the ceiling, + # and pay the approved 900 wood cost. All other LIHEAP inputs are actual + # people, primary fuel and approved eligible-delivery costs. + input: + people: + person1: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0, employment_income: 60_000} + person2: {age: 8, is_citizen_or_legal_immigrant: true, ssi: 0} + person3: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0, employment_income: 60_000} + person4: {age: 8, is_citizen_or_legal_immigrant: true, ssi: 0} + spm_units: + spm_unit1: + members: [person1, person2] + heating_type: WOOD + ca_liheap_approved_wood_delivery_cost: 900 + snap: 0 + ca_state_supplement: 0 + ca_tanf: 6_000 + takes_up_tanf_if_eligible: false + spm_unit2: + members: [person3, person4] + heating_type: WOOD + ca_liheap_approved_wood_delivery_cost: 900 + snap: 0 + ca_state_supplement: 0 + ca_tanf: 6_000 + takes_up_tanf_if_eligible: true + households: + household1: + members: [person1, person2] + state_code: CA + county: FRESNO_COUNTY_CA + household2: + members: [person3, person4] + state_code: CA + county: FRESNO_COUNTY_CA + output: + tanf: [0, 6_000] + ca_liheap_countable_income: [60_000, 66_000] + ca_liheap_categorically_eligible: [false, true] + ca_liheap_income_eligible: [false, true] + ca_liheap_wood_heating: [0, 900] + +- name: Case 9, shared unemployment uses modeled fallback and a reported override. + period: 2026 + absolute_error_margin: 0.01 + # The existing modeled-UI input isolates the shared fallback contract; + # California has no state UI formula in this model. Zero reported UI uses + # 6_000 modeled compensation: 35_000 + 6_000 = 41_000, over 39_979.92. + # Reported 1_200 overrides modeled 6_000: 35_000 + 1_200 = 36_200. + # The approved wood cost pays 900 only to the second household. + input: + people: + person1: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0, employment_income: 35_000, unemployment_compensation: 0, modeled_state_unemployment_compensation: 6_000} + person2: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0, employment_income: 35_000, unemployment_compensation: 1_200, modeled_state_unemployment_compensation: 6_000} + spm_units: + spm_unit1: + members: [person1] + heating_type: WOOD + ca_liheap_approved_wood_delivery_cost: 900 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit2: + members: [person2] + heating_type: WOOD + ca_liheap_approved_wood_delivery_cost: 900 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + households: + household1: + members: [person1] + state_code: CA + county: FRESNO_COUNTY_CA + household2: + members: [person2] + state_code: CA + county: FRESNO_COUNTY_CA + output: + total_unemployment_compensation: [6_000, 1_200] + ca_liheap_countable_income: [41_000, 36_200] + ca_liheap_income_eligible: [false, true] + ca_liheap_wood_heating: [0, 900] diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/csd/liheap/eligibility/ca_liheap_basic_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/csd/liheap/eligibility/ca_liheap_basic_eligible.yaml new file mode 100644 index 00000000000..169b572a91c --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/csd/liheap/eligibility/ca_liheap_basic_eligible.yaml @@ -0,0 +1,295 @@ +# PDF pages 184-188,193,205,257,279,282-283 +# https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=184 +# PDF pages 191,233-234 +# https://maderacap.org/wp-content/uploads/2025/10/Agenda-and-Packet-for-October-9-2025-Updated.pdf#page=191 +# FY2026 ordinary liquid component; no discretionary vendor supplement. +# Annual recurring income/costs represent the same application month. + + +# State-plan pp193/205/279: qualified adult, countable-income limit and +# energy responsibility. Heat-in-rent without a separately supplied bill +# qualifies, for subsidized tenants too (plan 2.3, guide 3.3). The 17-year-old +# is assumed not emancipated. +# No fixture supplies a calculated CA LIHEAP intermediate. +- name: "Case 1, shared income adult and energy responsibility requirements preserve utility behavior." + period: 2026 + input: + people: + p1_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p2_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p3_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p4_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p5_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p6_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p7_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p8_1: {"age": 17, "is_citizen_or_legal_immigrant": true, "ssi": 0, "pension_income": 12000} + p9_1: {"age": 18, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p10_1: {"age": 40, "is_citizen_or_legal_immigrant": false, "ssi": 0, "employment_income": 12000} + p10_2: {"age": 5, "is_citizen_or_legal_immigrant": true, "ssi": 0} + p11_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 60000} + p12_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + spm_units: + s1: + members: ["p1_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 2040 + s2: + members: ["p2_1"] + heating_type: "FUEL_OIL" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + fuel_oil_expense: 2040 + s3: + members: ["p3_1"] + heating_type: "NATURAL_GAS" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + gas_expense: 2040 + s4: + members: ["p4_1"] + heating_type: "ELECTRICITY" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + pre_subsidy_electricity_expense: 2040 + s5: + members: ["p5_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 0 + heat_expense_included_in_rent: true + s6: + members: ["p6_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 0 + heat_expense_included_in_rent: true + receives_housing_assistance: true + s7: + members: ["p7_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 120 + heat_expense_included_in_rent: true + receives_housing_assistance: true + s8: + members: ["p8_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 2040 + s9: + members: ["p9_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 2040 + s10: + members: ["p10_1", "p10_2"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 2040 + s11: + members: ["p11_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 2040 + s12: + members: ["p12_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 2040 + households: + h1: + members: ["p1_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h2: + members: ["p2_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h3: + members: ["p3_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h4: + members: ["p4_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h5: + members: ["p5_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h6: + members: ["p6_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h7: + members: ["p7_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h8: + members: ["p8_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h9: + members: ["p9_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h10: + members: ["p10_1", "p10_2"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h11: + members: ["p11_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h12: + members: ["p12_1"] + state_code: "OR" + county: "MULTNOMAH_COUNTY_OR" + output: + ca_liheap_basic_eligible: [true, true, true, true, true, true, true, false, true, false, false, false] + ca_liheap_utility_eligible: [false, false, true, true, false, false, false, false, false, false, false, false] + +# Only a positive approved WOOD delivery creates responsibility +# in the absence of existing bills or qualifying heat-in-rent. The first home +# is subsidized but has its own approved wood cost. Quotes cannot create +# responsibility for another primary fuel, including unknown or absent heat. +- name: Case 2, approved wood delivery establishes energy responsibility only for wood. + period: 2026 + input: + people: + person1: {age: 40, is_citizen_or_legal_immigrant: true, employment_income: 12_000, ssi: 0} + person2: {age: 40, is_citizen_or_legal_immigrant: true, employment_income: 12_000, ssi: 0} + person3: {age: 40, is_citizen_or_legal_immigrant: true, employment_income: 12_000, ssi: 0} + person4: {age: 40, is_citizen_or_legal_immigrant: true, employment_income: 12_000, ssi: 0} + person5: {age: 40, is_citizen_or_legal_immigrant: true, employment_income: 12_000, ssi: 0} + person6: {age: 40, is_citizen_or_legal_immigrant: true, employment_income: 12_000, ssi: 0} + person7: {age: 40, is_citizen_or_legal_immigrant: true, employment_income: 12_000, ssi: 0} + spm_units: + spm_unit1: + members: [person1] + heating_type: WOOD + receives_housing_assistance: true + ca_liheap_approved_wood_delivery_cost: 600 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit2: + members: [person2] + heating_type: WOOD + ca_liheap_approved_wood_delivery_cost: 0 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit3: + members: [person3] + heating_type: WOOD + ca_liheap_approved_wood_delivery_cost: -25 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit4: + members: [person4] + heating_type: ELECTRICITY + ca_liheap_approved_wood_delivery_cost: 600 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit5: + members: [person5] + heating_type: PROPANE + ca_liheap_approved_wood_delivery_cost: 600 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit6: + members: [person6] + heating_type: UNSPECIFIED + ca_liheap_approved_wood_delivery_cost: 600 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit7: + members: [person7] + heating_type: NONE + ca_liheap_approved_wood_delivery_cost: 600 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + households: + household1: {members: [person1], state_code: CA, county: FRESNO_COUNTY_CA} + household2: {members: [person2], state_code: CA, county: FRESNO_COUNTY_CA} + household3: {members: [person3], state_code: CA, county: FRESNO_COUNTY_CA} + household4: {members: [person4], state_code: CA, county: FRESNO_COUNTY_CA} + household5: {members: [person5], state_code: CA, county: FRESNO_COUNTY_CA} + household6: {members: [person6], state_code: CA, county: FRESNO_COUNTY_CA} + household7: {members: [person7], state_code: CA, county: FRESNO_COUNTY_CA} + output: + ca_liheap_basic_eligible: [true, false, false, false, false, false, false] + ca_liheap_utility_eligible: [false, false, false, false, false, false, false] + heating_expense: [0, 0, 0, 0, 0, 0, 0] + ca_liheap_wood_heating: [600, 0, 0, 0, 0, 0, 0] + +# Public housing is subsidized housing: heat in rent without a separate charge +# establishes energy responsibility, and so does a positive reported propane +# charge, as for voucher holders in Case 1 (s6 and s7). +- name: Case 3, public housing follows the subsidized heat-in-rent rule. + period: 2026 + input: + people: + person1: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0, employment_income: 12_000} + person2: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0, employment_income: 12_000} + spm_units: + spm_unit1: + members: [person1] + heating_type: PROPANE + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 0 + heat_expense_included_in_rent: true + receives_housing_assistance: false + spm_unit2: + members: [person2] + heating_type: PROPANE + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 120 + heat_expense_included_in_rent: true + receives_housing_assistance: false + households: + household1: + members: [person1] + state_code: CA + county: MADERA_COUNTY_CA + is_in_public_housing: true + household2: + members: [person2] + state_code: CA + county: MADERA_COUNTY_CA + is_in_public_housing: true + output: + ca_liheap_basic_eligible: [true, true] + diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/csd/liheap/eligibility/ca_liheap_categorically_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/csd/liheap/eligibility/ca_liheap_categorically_eligible.yaml new file mode 100644 index 00000000000..5753f45d4a3 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/csd/liheap/eligibility/ca_liheap_categorically_eligible.yaml @@ -0,0 +1,91 @@ +# PDF pages 6,217-218 +# https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=6 +# SNAP and CalWORKs qualify; SSI and VA alone do not. + +- name: Case 1, categorical status uses the two selected programs and is state guarded. + period: 2026 + # Positive annual receipt is the existing-input proxy for current receipt. + # SSI/VA alone and no receipt do not qualify; Oregon remains outside CA. + input: + people: + person1: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person2: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person3: {age: 8, is_citizen_or_legal_immigrant: true, ssi: 0} + person4: {age: 65, is_citizen_or_legal_immigrant: true, ssi: 6_000} + person5: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + veterans_benefits: 6_000 + person6: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person7: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + spm_units: + spm_unit1: + members: [person1] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 1_200 + tanf: 0 + ca_state_supplement: 0 + spm_unit2: + members: [person2, person3] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 1_200 + ca_state_supplement: 0 + spm_unit3: + members: [person4] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit4: + members: [person5] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit5: + members: [person6] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit6: + members: [person7] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 1_200 + tanf: 0 + ca_state_supplement: 0 + households: + household1: + members: [person1] + state_code: CA + county: ALAMEDA_COUNTY_CA + household2: + members: [person2, person3] + state_code: CA + county: ALAMEDA_COUNTY_CA + household3: + members: [person4] + state_code: CA + county: ALAMEDA_COUNTY_CA + household4: + members: [person5] + state_code: CA + county: ALAMEDA_COUNTY_CA + household5: + members: [person6] + state_code: CA + county: ALAMEDA_COUNTY_CA + household6: + members: [person7] + state_code: OR + county: MULTNOMAH_COUNTY_OR + output: + ca_liheap_categorically_eligible: [true, true, false, false, false, false] diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/csd/liheap/eligibility/ca_liheap_income_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/csd/liheap/eligibility/ca_liheap_income_eligible.yaml new file mode 100644 index 00000000000..5a4187f59fd --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/csd/liheap/eligibility/ca_liheap_income_eligible.yaml @@ -0,0 +1,2724 @@ +# PDF pages 6,184,217-218 +# https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=6 +# Boolean boundaries are exact; one monthly cent equals 0.12 annual dollars. + +- name: Case 1, every published monthly SMI ceiling is inclusive. + period: 2026 + # For each actual size 1 through 25, gross annual wages equal 12 times the + # source monthly ceiling. Every noncategorical household is income eligible. + input: + people: + person1: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 39_979.92 + person2: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 52_281.96 + person3: {age: 33, is_citizen_or_legal_immigrant: true, ssi: 0} + person4: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 64_584 + person5: {age: 33, is_citizen_or_legal_immigrant: true, ssi: 0} + person6: {age: 10, is_citizen_or_legal_immigrant: true, ssi: 0} + person7: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 76_885.92 + person8: {age: 33, is_citizen_or_legal_immigrant: true, ssi: 0} + person9: {age: 10, is_citizen_or_legal_immigrant: true, ssi: 0} + person10: {age: 12, is_citizen_or_legal_immigrant: true, ssi: 0} + person11: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 89_187 + person12: {age: 33, is_citizen_or_legal_immigrant: true, ssi: 0} + person13: {age: 10, is_citizen_or_legal_immigrant: true, ssi: 0} + person14: {age: 12, is_citizen_or_legal_immigrant: true, ssi: 0} + person15: {age: 14, is_citizen_or_legal_immigrant: true, ssi: 0} + person16: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 101_488.92 + person17: {age: 33, is_citizen_or_legal_immigrant: true, ssi: 0} + person18: {age: 10, is_citizen_or_legal_immigrant: true, ssi: 0} + person19: {age: 12, is_citizen_or_legal_immigrant: true, ssi: 0} + person20: {age: 14, is_citizen_or_legal_immigrant: true, ssi: 0} + person21: {age: 16, is_citizen_or_legal_immigrant: true, ssi: 0} + person22: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 103_795.92 + person23: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person24: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person25: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person26: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person27: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person28: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person29: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 106_101.96 + person30: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person31: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person32: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person33: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person34: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person35: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person36: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person37: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 108_408.96 + person38: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person39: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person40: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person41: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person42: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person43: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person44: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person45: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person46: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 110_715 + person47: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person48: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person49: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person50: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person51: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person52: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person53: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person54: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person55: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person56: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 113_022 + person57: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person58: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person59: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person60: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person61: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person62: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person63: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person64: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person65: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person66: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person67: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 115_329 + person68: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person69: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person70: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person71: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person72: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person73: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person74: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person75: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person76: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person77: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person78: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person79: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 117_635.52 + person80: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person81: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person82: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person83: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person84: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person85: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person86: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person87: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person88: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person89: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person90: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person91: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person92: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 119_942.16 + person93: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person94: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person95: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person96: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person97: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person98: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person99: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person100: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person101: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person102: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person103: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person104: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person105: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person106: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 122_248.68 + person107: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person108: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person109: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person110: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person111: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person112: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person113: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person114: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person115: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person116: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person117: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person118: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person119: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person120: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person121: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 124_555.32 + person122: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person123: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person124: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person125: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person126: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person127: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person128: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person129: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person130: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person131: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person132: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person133: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person134: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person135: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person136: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person137: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 126_861.84 + person138: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person139: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person140: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person141: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person142: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person143: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person144: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person145: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person146: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person147: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person148: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person149: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person150: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person151: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person152: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person153: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person154: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 129_168.48 + person155: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person156: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person157: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person158: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person159: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person160: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person161: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person162: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person163: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person164: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person165: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person166: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person167: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person168: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person169: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person170: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person171: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person172: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 131_475 + person173: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person174: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person175: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person176: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person177: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person178: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person179: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person180: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person181: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person182: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person183: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person184: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person185: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person186: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person187: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person188: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person189: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person190: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person191: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 133_781.64 + person192: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person193: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person194: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person195: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person196: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person197: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person198: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person199: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person200: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person201: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person202: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person203: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person204: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person205: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person206: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person207: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person208: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person209: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person210: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person211: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 136_088.16 + person212: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person213: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person214: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person215: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person216: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person217: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person218: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person219: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person220: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person221: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person222: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person223: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person224: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person225: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person226: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person227: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person228: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person229: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person230: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person231: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person232: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 138_394.8 + person233: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person234: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person235: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person236: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person237: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person238: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person239: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person240: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person241: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person242: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person243: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person244: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person245: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person246: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person247: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person248: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person249: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person250: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person251: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person252: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person253: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person254: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 140_701.32 + person255: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person256: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person257: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person258: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person259: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person260: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person261: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person262: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person263: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person264: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person265: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person266: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person267: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person268: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person269: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person270: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person271: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person272: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person273: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person274: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person275: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person276: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person277: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 143_007.96 + person278: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person279: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person280: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person281: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person282: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person283: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person284: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person285: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person286: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person287: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person288: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person289: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person290: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person291: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person292: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person293: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person294: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person295: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person296: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person297: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person298: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person299: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person300: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person301: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 145_314.48 + person302: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person303: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person304: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person305: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person306: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person307: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person308: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person309: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person310: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person311: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person312: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person313: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person314: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person315: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person316: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person317: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person318: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person319: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person320: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person321: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person322: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person323: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person324: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person325: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + spm_units: + spm_unit1: + members: [person1] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit2: + members: [person2, person3] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit3: + members: [person4, person5, person6] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit4: + members: [person7, person8, person9, person10] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit5: + members: [person11, person12, person13, person14, person15] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit6: + members: [person16, person17, person18, person19, person20, person21] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit7: + members: [person22, person23, person24, person25, person26, person27, person28] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit8: + members: + - person29 + - person30 + - person31 + - person32 + - person33 + - person34 + - person35 + - person36 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit9: + members: + - person37 + - person38 + - person39 + - person40 + - person41 + - person42 + - person43 + - person44 + - person45 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit10: + members: + - person46 + - person47 + - person48 + - person49 + - person50 + - person51 + - person52 + - person53 + - person54 + - person55 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit11: + members: + - person56 + - person57 + - person58 + - person59 + - person60 + - person61 + - person62 + - person63 + - person64 + - person65 + - person66 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit12: + members: + - person67 + - person68 + - person69 + - person70 + - person71 + - person72 + - person73 + - person74 + - person75 + - person76 + - person77 + - person78 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit13: + members: + - person79 + - person80 + - person81 + - person82 + - person83 + - person84 + - person85 + - person86 + - person87 + - person88 + - person89 + - person90 + - person91 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit14: + members: + - person92 + - person93 + - person94 + - person95 + - person96 + - person97 + - person98 + - person99 + - person100 + - person101 + - person102 + - person103 + - person104 + - person105 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit15: + members: + - person106 + - person107 + - person108 + - person109 + - person110 + - person111 + - person112 + - person113 + - person114 + - person115 + - person116 + - person117 + - person118 + - person119 + - person120 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit16: + members: + - person121 + - person122 + - person123 + - person124 + - person125 + - person126 + - person127 + - person128 + - person129 + - person130 + - person131 + - person132 + - person133 + - person134 + - person135 + - person136 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit17: + members: + - person137 + - person138 + - person139 + - person140 + - person141 + - person142 + - person143 + - person144 + - person145 + - person146 + - person147 + - person148 + - person149 + - person150 + - person151 + - person152 + - person153 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit18: + members: + - person154 + - person155 + - person156 + - person157 + - person158 + - person159 + - person160 + - person161 + - person162 + - person163 + - person164 + - person165 + - person166 + - person167 + - person168 + - person169 + - person170 + - person171 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit19: + members: + - person172 + - person173 + - person174 + - person175 + - person176 + - person177 + - person178 + - person179 + - person180 + - person181 + - person182 + - person183 + - person184 + - person185 + - person186 + - person187 + - person188 + - person189 + - person190 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit20: + members: + - person191 + - person192 + - person193 + - person194 + - person195 + - person196 + - person197 + - person198 + - person199 + - person200 + - person201 + - person202 + - person203 + - person204 + - person205 + - person206 + - person207 + - person208 + - person209 + - person210 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit21: + members: + - person211 + - person212 + - person213 + - person214 + - person215 + - person216 + - person217 + - person218 + - person219 + - person220 + - person221 + - person222 + - person223 + - person224 + - person225 + - person226 + - person227 + - person228 + - person229 + - person230 + - person231 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit22: + members: + - person232 + - person233 + - person234 + - person235 + - person236 + - person237 + - person238 + - person239 + - person240 + - person241 + - person242 + - person243 + - person244 + - person245 + - person246 + - person247 + - person248 + - person249 + - person250 + - person251 + - person252 + - person253 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit23: + members: + - person254 + - person255 + - person256 + - person257 + - person258 + - person259 + - person260 + - person261 + - person262 + - person263 + - person264 + - person265 + - person266 + - person267 + - person268 + - person269 + - person270 + - person271 + - person272 + - person273 + - person274 + - person275 + - person276 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit24: + members: + - person277 + - person278 + - person279 + - person280 + - person281 + - person282 + - person283 + - person284 + - person285 + - person286 + - person287 + - person288 + - person289 + - person290 + - person291 + - person292 + - person293 + - person294 + - person295 + - person296 + - person297 + - person298 + - person299 + - person300 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit25: + members: + - person301 + - person302 + - person303 + - person304 + - person305 + - person306 + - person307 + - person308 + - person309 + - person310 + - person311 + - person312 + - person313 + - person314 + - person315 + - person316 + - person317 + - person318 + - person319 + - person320 + - person321 + - person322 + - person323 + - person324 + - person325 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + households: + household1: + members: [person1] + state_code: CA + county: ALAMEDA_COUNTY_CA + household2: + members: [person2, person3] + state_code: CA + county: ALAMEDA_COUNTY_CA + household3: + members: [person4, person5, person6] + state_code: CA + county: ALAMEDA_COUNTY_CA + household4: + members: [person7, person8, person9, person10] + state_code: CA + county: ALAMEDA_COUNTY_CA + household5: + members: [person11, person12, person13, person14, person15] + state_code: CA + county: ALAMEDA_COUNTY_CA + household6: + members: [person16, person17, person18, person19, person20, person21] + state_code: CA + county: ALAMEDA_COUNTY_CA + household7: + members: [person22, person23, person24, person25, person26, person27, person28] + state_code: CA + county: ALAMEDA_COUNTY_CA + household8: + members: + - person29 + - person30 + - person31 + - person32 + - person33 + - person34 + - person35 + - person36 + state_code: CA + county: ALAMEDA_COUNTY_CA + household9: + members: + - person37 + - person38 + - person39 + - person40 + - person41 + - person42 + - person43 + - person44 + - person45 + state_code: CA + county: ALAMEDA_COUNTY_CA + household10: + members: + - person46 + - person47 + - person48 + - person49 + - person50 + - person51 + - person52 + - person53 + - person54 + - person55 + state_code: CA + county: ALAMEDA_COUNTY_CA + household11: + members: + - person56 + - person57 + - person58 + - person59 + - person60 + - person61 + - person62 + - person63 + - person64 + - person65 + - person66 + state_code: CA + county: ALAMEDA_COUNTY_CA + household12: + members: + - person67 + - person68 + - person69 + - person70 + - person71 + - person72 + - person73 + - person74 + - person75 + - person76 + - person77 + - person78 + state_code: CA + county: ALAMEDA_COUNTY_CA + household13: + members: + - person79 + - person80 + - person81 + - person82 + - person83 + - person84 + - person85 + - person86 + - person87 + - person88 + - person89 + - person90 + - person91 + state_code: CA + county: ALAMEDA_COUNTY_CA + household14: + members: + - person92 + - person93 + - person94 + - person95 + - person96 + - person97 + - person98 + - person99 + - person100 + - person101 + - person102 + - person103 + - person104 + - person105 + state_code: CA + county: ALAMEDA_COUNTY_CA + household15: + members: + - person106 + - person107 + - person108 + - person109 + - person110 + - person111 + - person112 + - person113 + - person114 + - person115 + - person116 + - person117 + - person118 + - person119 + - person120 + state_code: CA + county: ALAMEDA_COUNTY_CA + household16: + members: + - person121 + - person122 + - person123 + - person124 + - person125 + - person126 + - person127 + - person128 + - person129 + - person130 + - person131 + - person132 + - person133 + - person134 + - person135 + - person136 + state_code: CA + county: ALAMEDA_COUNTY_CA + household17: + members: + - person137 + - person138 + - person139 + - person140 + - person141 + - person142 + - person143 + - person144 + - person145 + - person146 + - person147 + - person148 + - person149 + - person150 + - person151 + - person152 + - person153 + state_code: CA + county: ALAMEDA_COUNTY_CA + household18: + members: + - person154 + - person155 + - person156 + - person157 + - person158 + - person159 + - person160 + - person161 + - person162 + - person163 + - person164 + - person165 + - person166 + - person167 + - person168 + - person169 + - person170 + - person171 + state_code: CA + county: ALAMEDA_COUNTY_CA + household19: + members: + - person172 + - person173 + - person174 + - person175 + - person176 + - person177 + - person178 + - person179 + - person180 + - person181 + - person182 + - person183 + - person184 + - person185 + - person186 + - person187 + - person188 + - person189 + - person190 + state_code: CA + county: ALAMEDA_COUNTY_CA + household20: + members: + - person191 + - person192 + - person193 + - person194 + - person195 + - person196 + - person197 + - person198 + - person199 + - person200 + - person201 + - person202 + - person203 + - person204 + - person205 + - person206 + - person207 + - person208 + - person209 + - person210 + state_code: CA + county: ALAMEDA_COUNTY_CA + household21: + members: + - person211 + - person212 + - person213 + - person214 + - person215 + - person216 + - person217 + - person218 + - person219 + - person220 + - person221 + - person222 + - person223 + - person224 + - person225 + - person226 + - person227 + - person228 + - person229 + - person230 + - person231 + state_code: CA + county: ALAMEDA_COUNTY_CA + household22: + members: + - person232 + - person233 + - person234 + - person235 + - person236 + - person237 + - person238 + - person239 + - person240 + - person241 + - person242 + - person243 + - person244 + - person245 + - person246 + - person247 + - person248 + - person249 + - person250 + - person251 + - person252 + - person253 + state_code: CA + county: ALAMEDA_COUNTY_CA + household23: + members: + - person254 + - person255 + - person256 + - person257 + - person258 + - person259 + - person260 + - person261 + - person262 + - person263 + - person264 + - person265 + - person266 + - person267 + - person268 + - person269 + - person270 + - person271 + - person272 + - person273 + - person274 + - person275 + - person276 + state_code: CA + county: ALAMEDA_COUNTY_CA + household24: + members: + - person277 + - person278 + - person279 + - person280 + - person281 + - person282 + - person283 + - person284 + - person285 + - person286 + - person287 + - person288 + - person289 + - person290 + - person291 + - person292 + - person293 + - person294 + - person295 + - person296 + - person297 + - person298 + - person299 + - person300 + state_code: CA + county: ALAMEDA_COUNTY_CA + household25: + members: + - person301 + - person302 + - person303 + - person304 + - person305 + - person306 + - person307 + - person308 + - person309 + - person310 + - person311 + - person312 + - person313 + - person314 + - person315 + - person316 + - person317 + - person318 + - person319 + - person320 + - person321 + - person322 + - person323 + - person324 + - person325 + state_code: CA + county: ALAMEDA_COUNTY_CA + output: + ca_liheap_income_eligible: + - true + - true + - true + - true + - true + - true + - true + - true + - true + - true + - true + - true + - true + - true + - true + - true + - true + - true + - true + - true + - true + - true + - true + - true + - true + +- name: Case 2, one monthly cent above SMI requires the federal floor at large sizes. + period: 2026 + # Increase each published monthly ceiling by 0.01, then annualize by 12. + # No household receives SNAP/CalWORKs; all 25 are above the source limit. + # Sizes 21-25 remain below the strict federal floor and are protected. + input: + people: + person1: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 39_980.04 + person2: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 52_282.08 + person3: {age: 33, is_citizen_or_legal_immigrant: true, ssi: 0} + person4: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 64_584.12 + person5: {age: 33, is_citizen_or_legal_immigrant: true, ssi: 0} + person6: {age: 10, is_citizen_or_legal_immigrant: true, ssi: 0} + person7: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 76_886.04 + person8: {age: 33, is_citizen_or_legal_immigrant: true, ssi: 0} + person9: {age: 10, is_citizen_or_legal_immigrant: true, ssi: 0} + person10: {age: 12, is_citizen_or_legal_immigrant: true, ssi: 0} + person11: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 89_187.12 + person12: {age: 33, is_citizen_or_legal_immigrant: true, ssi: 0} + person13: {age: 10, is_citizen_or_legal_immigrant: true, ssi: 0} + person14: {age: 12, is_citizen_or_legal_immigrant: true, ssi: 0} + person15: {age: 14, is_citizen_or_legal_immigrant: true, ssi: 0} + person16: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 101_489.04 + person17: {age: 33, is_citizen_or_legal_immigrant: true, ssi: 0} + person18: {age: 10, is_citizen_or_legal_immigrant: true, ssi: 0} + person19: {age: 12, is_citizen_or_legal_immigrant: true, ssi: 0} + person20: {age: 14, is_citizen_or_legal_immigrant: true, ssi: 0} + person21: {age: 16, is_citizen_or_legal_immigrant: true, ssi: 0} + person22: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 103_796.04 + person23: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person24: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person25: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person26: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person27: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person28: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person29: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 106_102.08 + person30: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person31: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person32: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person33: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person34: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person35: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person36: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person37: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 108_409.08 + person38: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person39: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person40: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person41: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person42: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person43: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person44: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person45: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person46: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 110_715.12 + person47: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person48: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person49: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person50: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person51: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person52: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person53: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person54: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person55: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person56: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 113_022.12 + person57: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person58: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person59: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person60: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person61: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person62: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person63: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person64: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person65: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person66: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person67: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 115_329.12 + person68: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person69: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person70: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person71: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person72: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person73: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person74: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person75: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person76: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person77: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person78: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person79: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 117_635.64 + person80: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person81: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person82: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person83: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person84: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person85: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person86: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person87: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person88: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person89: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person90: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person91: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person92: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 119_942.28 + person93: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person94: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person95: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person96: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person97: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person98: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person99: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person100: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person101: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person102: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person103: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person104: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person105: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person106: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 122_248.8 + person107: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person108: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person109: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person110: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person111: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person112: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person113: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person114: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person115: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person116: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person117: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person118: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person119: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person120: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person121: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 124_555.44 + person122: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person123: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person124: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person125: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person126: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person127: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person128: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person129: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person130: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person131: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person132: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person133: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person134: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person135: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person136: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person137: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 126_861.96 + person138: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person139: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person140: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person141: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person142: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person143: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person144: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person145: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person146: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person147: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person148: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person149: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person150: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person151: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person152: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person153: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person154: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 129_168.6 + person155: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person156: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person157: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person158: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person159: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person160: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person161: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person162: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person163: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person164: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person165: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person166: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person167: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person168: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person169: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person170: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person171: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person172: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 131_475.12 + person173: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person174: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person175: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person176: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person177: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person178: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person179: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person180: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person181: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person182: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person183: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person184: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person185: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person186: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person187: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person188: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person189: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person190: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person191: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 133_781.76 + person192: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person193: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person194: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person195: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person196: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person197: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person198: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person199: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person200: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person201: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person202: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person203: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person204: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person205: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person206: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person207: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person208: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person209: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person210: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person211: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 136_088.28 + person212: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person213: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person214: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person215: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person216: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person217: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person218: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person219: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person220: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person221: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person222: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person223: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person224: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person225: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person226: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person227: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person228: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person229: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person230: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person231: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person232: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 138_394.92 + person233: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person234: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person235: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person236: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person237: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person238: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person239: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person240: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person241: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person242: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person243: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person244: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person245: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person246: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person247: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person248: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person249: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person250: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person251: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person252: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person253: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person254: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 140_701.44 + person255: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person256: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person257: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person258: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person259: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person260: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person261: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person262: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person263: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person264: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person265: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person266: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person267: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person268: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person269: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person270: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person271: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person272: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person273: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person274: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person275: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person276: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person277: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 143_008.08 + person278: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person279: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person280: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person281: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person282: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person283: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person284: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person285: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person286: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person287: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person288: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person289: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person290: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person291: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person292: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person293: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person294: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person295: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person296: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person297: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person298: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person299: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person300: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person301: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 145_314.6 + person302: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person303: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person304: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person305: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person306: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person307: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person308: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person309: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person310: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person311: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person312: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person313: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person314: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person315: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person316: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person317: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person318: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person319: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person320: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person321: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person322: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person323: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person324: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person325: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + spm_units: + spm_unit1: + members: [person1] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit2: + members: [person2, person3] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit3: + members: [person4, person5, person6] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit4: + members: [person7, person8, person9, person10] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit5: + members: [person11, person12, person13, person14, person15] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit6: + members: [person16, person17, person18, person19, person20, person21] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit7: + members: [person22, person23, person24, person25, person26, person27, person28] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit8: + members: + - person29 + - person30 + - person31 + - person32 + - person33 + - person34 + - person35 + - person36 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit9: + members: + - person37 + - person38 + - person39 + - person40 + - person41 + - person42 + - person43 + - person44 + - person45 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit10: + members: + - person46 + - person47 + - person48 + - person49 + - person50 + - person51 + - person52 + - person53 + - person54 + - person55 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit11: + members: + - person56 + - person57 + - person58 + - person59 + - person60 + - person61 + - person62 + - person63 + - person64 + - person65 + - person66 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit12: + members: + - person67 + - person68 + - person69 + - person70 + - person71 + - person72 + - person73 + - person74 + - person75 + - person76 + - person77 + - person78 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit13: + members: + - person79 + - person80 + - person81 + - person82 + - person83 + - person84 + - person85 + - person86 + - person87 + - person88 + - person89 + - person90 + - person91 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit14: + members: + - person92 + - person93 + - person94 + - person95 + - person96 + - person97 + - person98 + - person99 + - person100 + - person101 + - person102 + - person103 + - person104 + - person105 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit15: + members: + - person106 + - person107 + - person108 + - person109 + - person110 + - person111 + - person112 + - person113 + - person114 + - person115 + - person116 + - person117 + - person118 + - person119 + - person120 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit16: + members: + - person121 + - person122 + - person123 + - person124 + - person125 + - person126 + - person127 + - person128 + - person129 + - person130 + - person131 + - person132 + - person133 + - person134 + - person135 + - person136 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit17: + members: + - person137 + - person138 + - person139 + - person140 + - person141 + - person142 + - person143 + - person144 + - person145 + - person146 + - person147 + - person148 + - person149 + - person150 + - person151 + - person152 + - person153 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit18: + members: + - person154 + - person155 + - person156 + - person157 + - person158 + - person159 + - person160 + - person161 + - person162 + - person163 + - person164 + - person165 + - person166 + - person167 + - person168 + - person169 + - person170 + - person171 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit19: + members: + - person172 + - person173 + - person174 + - person175 + - person176 + - person177 + - person178 + - person179 + - person180 + - person181 + - person182 + - person183 + - person184 + - person185 + - person186 + - person187 + - person188 + - person189 + - person190 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit20: + members: + - person191 + - person192 + - person193 + - person194 + - person195 + - person196 + - person197 + - person198 + - person199 + - person200 + - person201 + - person202 + - person203 + - person204 + - person205 + - person206 + - person207 + - person208 + - person209 + - person210 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit21: + members: + - person211 + - person212 + - person213 + - person214 + - person215 + - person216 + - person217 + - person218 + - person219 + - person220 + - person221 + - person222 + - person223 + - person224 + - person225 + - person226 + - person227 + - person228 + - person229 + - person230 + - person231 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit22: + members: + - person232 + - person233 + - person234 + - person235 + - person236 + - person237 + - person238 + - person239 + - person240 + - person241 + - person242 + - person243 + - person244 + - person245 + - person246 + - person247 + - person248 + - person249 + - person250 + - person251 + - person252 + - person253 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit23: + members: + - person254 + - person255 + - person256 + - person257 + - person258 + - person259 + - person260 + - person261 + - person262 + - person263 + - person264 + - person265 + - person266 + - person267 + - person268 + - person269 + - person270 + - person271 + - person272 + - person273 + - person274 + - person275 + - person276 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit24: + members: + - person277 + - person278 + - person279 + - person280 + - person281 + - person282 + - person283 + - person284 + - person285 + - person286 + - person287 + - person288 + - person289 + - person290 + - person291 + - person292 + - person293 + - person294 + - person295 + - person296 + - person297 + - person298 + - person299 + - person300 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit25: + members: + - person301 + - person302 + - person303 + - person304 + - person305 + - person306 + - person307 + - person308 + - person309 + - person310 + - person311 + - person312 + - person313 + - person314 + - person315 + - person316 + - person317 + - person318 + - person319 + - person320 + - person321 + - person322 + - person323 + - person324 + - person325 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + households: + household1: + members: [person1] + state_code: CA + county: ALAMEDA_COUNTY_CA + household2: + members: [person2, person3] + state_code: CA + county: ALAMEDA_COUNTY_CA + household3: + members: [person4, person5, person6] + state_code: CA + county: ALAMEDA_COUNTY_CA + household4: + members: [person7, person8, person9, person10] + state_code: CA + county: ALAMEDA_COUNTY_CA + household5: + members: [person11, person12, person13, person14, person15] + state_code: CA + county: ALAMEDA_COUNTY_CA + household6: + members: [person16, person17, person18, person19, person20, person21] + state_code: CA + county: ALAMEDA_COUNTY_CA + household7: + members: [person22, person23, person24, person25, person26, person27, person28] + state_code: CA + county: ALAMEDA_COUNTY_CA + household8: + members: + - person29 + - person30 + - person31 + - person32 + - person33 + - person34 + - person35 + - person36 + state_code: CA + county: ALAMEDA_COUNTY_CA + household9: + members: + - person37 + - person38 + - person39 + - person40 + - person41 + - person42 + - person43 + - person44 + - person45 + state_code: CA + county: ALAMEDA_COUNTY_CA + household10: + members: + - person46 + - person47 + - person48 + - person49 + - person50 + - person51 + - person52 + - person53 + - person54 + - person55 + state_code: CA + county: ALAMEDA_COUNTY_CA + household11: + members: + - person56 + - person57 + - person58 + - person59 + - person60 + - person61 + - person62 + - person63 + - person64 + - person65 + - person66 + state_code: CA + county: ALAMEDA_COUNTY_CA + household12: + members: + - person67 + - person68 + - person69 + - person70 + - person71 + - person72 + - person73 + - person74 + - person75 + - person76 + - person77 + - person78 + state_code: CA + county: ALAMEDA_COUNTY_CA + household13: + members: + - person79 + - person80 + - person81 + - person82 + - person83 + - person84 + - person85 + - person86 + - person87 + - person88 + - person89 + - person90 + - person91 + state_code: CA + county: ALAMEDA_COUNTY_CA + household14: + members: + - person92 + - person93 + - person94 + - person95 + - person96 + - person97 + - person98 + - person99 + - person100 + - person101 + - person102 + - person103 + - person104 + - person105 + state_code: CA + county: ALAMEDA_COUNTY_CA + household15: + members: + - person106 + - person107 + - person108 + - person109 + - person110 + - person111 + - person112 + - person113 + - person114 + - person115 + - person116 + - person117 + - person118 + - person119 + - person120 + state_code: CA + county: ALAMEDA_COUNTY_CA + household16: + members: + - person121 + - person122 + - person123 + - person124 + - person125 + - person126 + - person127 + - person128 + - person129 + - person130 + - person131 + - person132 + - person133 + - person134 + - person135 + - person136 + state_code: CA + county: ALAMEDA_COUNTY_CA + household17: + members: + - person137 + - person138 + - person139 + - person140 + - person141 + - person142 + - person143 + - person144 + - person145 + - person146 + - person147 + - person148 + - person149 + - person150 + - person151 + - person152 + - person153 + state_code: CA + county: ALAMEDA_COUNTY_CA + household18: + members: + - person154 + - person155 + - person156 + - person157 + - person158 + - person159 + - person160 + - person161 + - person162 + - person163 + - person164 + - person165 + - person166 + - person167 + - person168 + - person169 + - person170 + - person171 + state_code: CA + county: ALAMEDA_COUNTY_CA + household19: + members: + - person172 + - person173 + - person174 + - person175 + - person176 + - person177 + - person178 + - person179 + - person180 + - person181 + - person182 + - person183 + - person184 + - person185 + - person186 + - person187 + - person188 + - person189 + - person190 + state_code: CA + county: ALAMEDA_COUNTY_CA + household20: + members: + - person191 + - person192 + - person193 + - person194 + - person195 + - person196 + - person197 + - person198 + - person199 + - person200 + - person201 + - person202 + - person203 + - person204 + - person205 + - person206 + - person207 + - person208 + - person209 + - person210 + state_code: CA + county: ALAMEDA_COUNTY_CA + household21: + members: + - person211 + - person212 + - person213 + - person214 + - person215 + - person216 + - person217 + - person218 + - person219 + - person220 + - person221 + - person222 + - person223 + - person224 + - person225 + - person226 + - person227 + - person228 + - person229 + - person230 + - person231 + state_code: CA + county: ALAMEDA_COUNTY_CA + household22: + members: + - person232 + - person233 + - person234 + - person235 + - person236 + - person237 + - person238 + - person239 + - person240 + - person241 + - person242 + - person243 + - person244 + - person245 + - person246 + - person247 + - person248 + - person249 + - person250 + - person251 + - person252 + - person253 + state_code: CA + county: ALAMEDA_COUNTY_CA + household23: + members: + - person254 + - person255 + - person256 + - person257 + - person258 + - person259 + - person260 + - person261 + - person262 + - person263 + - person264 + - person265 + - person266 + - person267 + - person268 + - person269 + - person270 + - person271 + - person272 + - person273 + - person274 + - person275 + - person276 + state_code: CA + county: ALAMEDA_COUNTY_CA + household24: + members: + - person277 + - person278 + - person279 + - person280 + - person281 + - person282 + - person283 + - person284 + - person285 + - person286 + - person287 + - person288 + - person289 + - person290 + - person291 + - person292 + - person293 + - person294 + - person295 + - person296 + - person297 + - person298 + - person299 + - person300 + state_code: CA + county: ALAMEDA_COUNTY_CA + household25: + members: + - person301 + - person302 + - person303 + - person304 + - person305 + - person306 + - person307 + - person308 + - person309 + - person310 + - person311 + - person312 + - person313 + - person314 + - person315 + - person316 + - person317 + - person318 + - person319 + - person320 + - person321 + - person322 + - person323 + - person324 + - person325 + state_code: CA + county: ALAMEDA_COUNTY_CA + output: + ca_liheap_income_eligible: + - false + - false + - false + - false + - false + - false + - false + - false + - false + - false + - false + - false + - false + - false + - false + - false + - false + - false + - false + - false + - true + - true + - true + - true + - true + +- name: Case 3, SNAP and CalWORKs bypass the income ceiling but SSI does not. + period: 2026 + # The first two exceed SMI but qualify categorically. SSI alone does not + # create the bypass, even when the household reports actual SSI receipt. + input: + people: + person1: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 100_000 + person2: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 100_000 + person3: {age: 8, is_citizen_or_legal_immigrant: true, ssi: 0} + person4: + age: 65 + is_citizen_or_legal_immigrant: true + ssi: 1_200 + employment_income: 100_000 + spm_units: + spm_unit1: + members: [person1] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 1_200 + tanf: 0 + ca_state_supplement: 0 + spm_unit2: + members: [person2, person3] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 2_400 + ca_state_supplement: 0 + spm_unit3: + members: [person4] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + households: + household1: + members: [person1] + state_code: CA + county: ALAMEDA_COUNTY_CA + household2: + members: [person2, person3] + state_code: CA + county: ALAMEDA_COUNTY_CA + household3: + members: [person4] + state_code: CA + county: ALAMEDA_COUNTY_CA + output: + ca_liheap_income_eligible: [true, true, false] diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/csd/liheap/eligibility/ca_liheap_income_limit.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/csd/liheap/eligibility/ca_liheap_income_limit.yaml new file mode 100644 index 00000000000..b7c1db26a61 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/csd/liheap/eligibility/ca_liheap_income_limit.yaml @@ -0,0 +1,1335 @@ +# https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=184 +# All 25 published monthly ceilings were read directly from the final table. +# Expected annual amounts are exactly 12 times those monthly table entries. + +- name: Case 1, all twenty-five published income limits are reproduced. + period: 2026 + absolute_error_margin: 0.01 + # Household sizes 1 through 25 follow table order. Annualize each published + # monthly ceiling by 12; do not replace large-household rows with the conflicting + # webpage 192.21 increment or assume the inferred rounding sequence is law. + input: + people: + person1: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 0 + person2: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 0 + person3: {age: 33, is_citizen_or_legal_immigrant: true, ssi: 0} + person4: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 0 + person5: {age: 33, is_citizen_or_legal_immigrant: true, ssi: 0} + person6: {age: 10, is_citizen_or_legal_immigrant: true, ssi: 0} + person7: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 0 + person8: {age: 33, is_citizen_or_legal_immigrant: true, ssi: 0} + person9: {age: 10, is_citizen_or_legal_immigrant: true, ssi: 0} + person10: {age: 12, is_citizen_or_legal_immigrant: true, ssi: 0} + person11: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 0 + person12: {age: 33, is_citizen_or_legal_immigrant: true, ssi: 0} + person13: {age: 10, is_citizen_or_legal_immigrant: true, ssi: 0} + person14: {age: 12, is_citizen_or_legal_immigrant: true, ssi: 0} + person15: {age: 14, is_citizen_or_legal_immigrant: true, ssi: 0} + person16: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 0 + person17: {age: 33, is_citizen_or_legal_immigrant: true, ssi: 0} + person18: {age: 10, is_citizen_or_legal_immigrant: true, ssi: 0} + person19: {age: 12, is_citizen_or_legal_immigrant: true, ssi: 0} + person20: {age: 14, is_citizen_or_legal_immigrant: true, ssi: 0} + person21: {age: 16, is_citizen_or_legal_immigrant: true, ssi: 0} + person22: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 0 + person23: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person24: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person25: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person26: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person27: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person28: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person29: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 0 + person30: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person31: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person32: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person33: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person34: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person35: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person36: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person37: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 0 + person38: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person39: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person40: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person41: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person42: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person43: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person44: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person45: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person46: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 0 + person47: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person48: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person49: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person50: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person51: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person52: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person53: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person54: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person55: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person56: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 0 + person57: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person58: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person59: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person60: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person61: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person62: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person63: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person64: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person65: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person66: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person67: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 0 + person68: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person69: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person70: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person71: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person72: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person73: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person74: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person75: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person76: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person77: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person78: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person79: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 0 + person80: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person81: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person82: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person83: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person84: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person85: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person86: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person87: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person88: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person89: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person90: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person91: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person92: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 0 + person93: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person94: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person95: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person96: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person97: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person98: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person99: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person100: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person101: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person102: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person103: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person104: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person105: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person106: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 0 + person107: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person108: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person109: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person110: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person111: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person112: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person113: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person114: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person115: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person116: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person117: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person118: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person119: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person120: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person121: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 0 + person122: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person123: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person124: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person125: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person126: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person127: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person128: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person129: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person130: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person131: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person132: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person133: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person134: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person135: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person136: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person137: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 0 + person138: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person139: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person140: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person141: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person142: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person143: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person144: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person145: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person146: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person147: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person148: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person149: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person150: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person151: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person152: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person153: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person154: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 0 + person155: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person156: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person157: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person158: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person159: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person160: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person161: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person162: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person163: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person164: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person165: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person166: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person167: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person168: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person169: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person170: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person171: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person172: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 0 + person173: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person174: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person175: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person176: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person177: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person178: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person179: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person180: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person181: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person182: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person183: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person184: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person185: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person186: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person187: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person188: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person189: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person190: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person191: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 0 + person192: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person193: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person194: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person195: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person196: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person197: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person198: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person199: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person200: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person201: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person202: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person203: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person204: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person205: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person206: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person207: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person208: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person209: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person210: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person211: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 0 + person212: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person213: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person214: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person215: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person216: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person217: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person218: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person219: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person220: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person221: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person222: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person223: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person224: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person225: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person226: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person227: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person228: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person229: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person230: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person231: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person232: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 0 + person233: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person234: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person235: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person236: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person237: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person238: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person239: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person240: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person241: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person242: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person243: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person244: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person245: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person246: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person247: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person248: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person249: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person250: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person251: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person252: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person253: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person254: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 0 + person255: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person256: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person257: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person258: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person259: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person260: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person261: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person262: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person263: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person264: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person265: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person266: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person267: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person268: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person269: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person270: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person271: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person272: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person273: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person274: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person275: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person276: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person277: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 0 + person278: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person279: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person280: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person281: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person282: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person283: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person284: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person285: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person286: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person287: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person288: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person289: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person290: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person291: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person292: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person293: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person294: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person295: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person296: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person297: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person298: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person299: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person300: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person301: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 0 + person302: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person303: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person304: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person305: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person306: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person307: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person308: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person309: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person310: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person311: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person312: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person313: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person314: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person315: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person316: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person317: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person318: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person319: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person320: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person321: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person322: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person323: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person324: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person325: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + spm_units: + spm_unit1: + members: [person1] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit2: + members: [person2, person3] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit3: + members: [person4, person5, person6] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit4: + members: [person7, person8, person9, person10] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit5: + members: [person11, person12, person13, person14, person15] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit6: + members: [person16, person17, person18, person19, person20, person21] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit7: + members: [person22, person23, person24, person25, person26, person27, person28] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit8: + members: + - person29 + - person30 + - person31 + - person32 + - person33 + - person34 + - person35 + - person36 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit9: + members: + - person37 + - person38 + - person39 + - person40 + - person41 + - person42 + - person43 + - person44 + - person45 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit10: + members: + - person46 + - person47 + - person48 + - person49 + - person50 + - person51 + - person52 + - person53 + - person54 + - person55 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit11: + members: + - person56 + - person57 + - person58 + - person59 + - person60 + - person61 + - person62 + - person63 + - person64 + - person65 + - person66 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit12: + members: + - person67 + - person68 + - person69 + - person70 + - person71 + - person72 + - person73 + - person74 + - person75 + - person76 + - person77 + - person78 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit13: + members: + - person79 + - person80 + - person81 + - person82 + - person83 + - person84 + - person85 + - person86 + - person87 + - person88 + - person89 + - person90 + - person91 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit14: + members: + - person92 + - person93 + - person94 + - person95 + - person96 + - person97 + - person98 + - person99 + - person100 + - person101 + - person102 + - person103 + - person104 + - person105 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit15: + members: + - person106 + - person107 + - person108 + - person109 + - person110 + - person111 + - person112 + - person113 + - person114 + - person115 + - person116 + - person117 + - person118 + - person119 + - person120 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit16: + members: + - person121 + - person122 + - person123 + - person124 + - person125 + - person126 + - person127 + - person128 + - person129 + - person130 + - person131 + - person132 + - person133 + - person134 + - person135 + - person136 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit17: + members: + - person137 + - person138 + - person139 + - person140 + - person141 + - person142 + - person143 + - person144 + - person145 + - person146 + - person147 + - person148 + - person149 + - person150 + - person151 + - person152 + - person153 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit18: + members: + - person154 + - person155 + - person156 + - person157 + - person158 + - person159 + - person160 + - person161 + - person162 + - person163 + - person164 + - person165 + - person166 + - person167 + - person168 + - person169 + - person170 + - person171 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit19: + members: + - person172 + - person173 + - person174 + - person175 + - person176 + - person177 + - person178 + - person179 + - person180 + - person181 + - person182 + - person183 + - person184 + - person185 + - person186 + - person187 + - person188 + - person189 + - person190 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit20: + members: + - person191 + - person192 + - person193 + - person194 + - person195 + - person196 + - person197 + - person198 + - person199 + - person200 + - person201 + - person202 + - person203 + - person204 + - person205 + - person206 + - person207 + - person208 + - person209 + - person210 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit21: + members: + - person211 + - person212 + - person213 + - person214 + - person215 + - person216 + - person217 + - person218 + - person219 + - person220 + - person221 + - person222 + - person223 + - person224 + - person225 + - person226 + - person227 + - person228 + - person229 + - person230 + - person231 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit22: + members: + - person232 + - person233 + - person234 + - person235 + - person236 + - person237 + - person238 + - person239 + - person240 + - person241 + - person242 + - person243 + - person244 + - person245 + - person246 + - person247 + - person248 + - person249 + - person250 + - person251 + - person252 + - person253 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit23: + members: + - person254 + - person255 + - person256 + - person257 + - person258 + - person259 + - person260 + - person261 + - person262 + - person263 + - person264 + - person265 + - person266 + - person267 + - person268 + - person269 + - person270 + - person271 + - person272 + - person273 + - person274 + - person275 + - person276 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit24: + members: + - person277 + - person278 + - person279 + - person280 + - person281 + - person282 + - person283 + - person284 + - person285 + - person286 + - person287 + - person288 + - person289 + - person290 + - person291 + - person292 + - person293 + - person294 + - person295 + - person296 + - person297 + - person298 + - person299 + - person300 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit25: + members: + - person301 + - person302 + - person303 + - person304 + - person305 + - person306 + - person307 + - person308 + - person309 + - person310 + - person311 + - person312 + - person313 + - person314 + - person315 + - person316 + - person317 + - person318 + - person319 + - person320 + - person321 + - person322 + - person323 + - person324 + - person325 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + households: + household1: + members: [person1] + state_code: CA + county: ALAMEDA_COUNTY_CA + household2: + members: [person2, person3] + state_code: CA + county: ALAMEDA_COUNTY_CA + household3: + members: [person4, person5, person6] + state_code: CA + county: ALAMEDA_COUNTY_CA + household4: + members: [person7, person8, person9, person10] + state_code: CA + county: ALAMEDA_COUNTY_CA + household5: + members: [person11, person12, person13, person14, person15] + state_code: CA + county: ALAMEDA_COUNTY_CA + household6: + members: [person16, person17, person18, person19, person20, person21] + state_code: CA + county: ALAMEDA_COUNTY_CA + household7: + members: [person22, person23, person24, person25, person26, person27, person28] + state_code: CA + county: ALAMEDA_COUNTY_CA + household8: + members: + - person29 + - person30 + - person31 + - person32 + - person33 + - person34 + - person35 + - person36 + state_code: CA + county: ALAMEDA_COUNTY_CA + household9: + members: + - person37 + - person38 + - person39 + - person40 + - person41 + - person42 + - person43 + - person44 + - person45 + state_code: CA + county: ALAMEDA_COUNTY_CA + household10: + members: + - person46 + - person47 + - person48 + - person49 + - person50 + - person51 + - person52 + - person53 + - person54 + - person55 + state_code: CA + county: ALAMEDA_COUNTY_CA + household11: + members: + - person56 + - person57 + - person58 + - person59 + - person60 + - person61 + - person62 + - person63 + - person64 + - person65 + - person66 + state_code: CA + county: ALAMEDA_COUNTY_CA + household12: + members: + - person67 + - person68 + - person69 + - person70 + - person71 + - person72 + - person73 + - person74 + - person75 + - person76 + - person77 + - person78 + state_code: CA + county: ALAMEDA_COUNTY_CA + household13: + members: + - person79 + - person80 + - person81 + - person82 + - person83 + - person84 + - person85 + - person86 + - person87 + - person88 + - person89 + - person90 + - person91 + state_code: CA + county: ALAMEDA_COUNTY_CA + household14: + members: + - person92 + - person93 + - person94 + - person95 + - person96 + - person97 + - person98 + - person99 + - person100 + - person101 + - person102 + - person103 + - person104 + - person105 + state_code: CA + county: ALAMEDA_COUNTY_CA + household15: + members: + - person106 + - person107 + - person108 + - person109 + - person110 + - person111 + - person112 + - person113 + - person114 + - person115 + - person116 + - person117 + - person118 + - person119 + - person120 + state_code: CA + county: ALAMEDA_COUNTY_CA + household16: + members: + - person121 + - person122 + - person123 + - person124 + - person125 + - person126 + - person127 + - person128 + - person129 + - person130 + - person131 + - person132 + - person133 + - person134 + - person135 + - person136 + state_code: CA + county: ALAMEDA_COUNTY_CA + household17: + members: + - person137 + - person138 + - person139 + - person140 + - person141 + - person142 + - person143 + - person144 + - person145 + - person146 + - person147 + - person148 + - person149 + - person150 + - person151 + - person152 + - person153 + state_code: CA + county: ALAMEDA_COUNTY_CA + household18: + members: + - person154 + - person155 + - person156 + - person157 + - person158 + - person159 + - person160 + - person161 + - person162 + - person163 + - person164 + - person165 + - person166 + - person167 + - person168 + - person169 + - person170 + - person171 + state_code: CA + county: ALAMEDA_COUNTY_CA + household19: + members: + - person172 + - person173 + - person174 + - person175 + - person176 + - person177 + - person178 + - person179 + - person180 + - person181 + - person182 + - person183 + - person184 + - person185 + - person186 + - person187 + - person188 + - person189 + - person190 + state_code: CA + county: ALAMEDA_COUNTY_CA + household20: + members: + - person191 + - person192 + - person193 + - person194 + - person195 + - person196 + - person197 + - person198 + - person199 + - person200 + - person201 + - person202 + - person203 + - person204 + - person205 + - person206 + - person207 + - person208 + - person209 + - person210 + state_code: CA + county: ALAMEDA_COUNTY_CA + household21: + members: + - person211 + - person212 + - person213 + - person214 + - person215 + - person216 + - person217 + - person218 + - person219 + - person220 + - person221 + - person222 + - person223 + - person224 + - person225 + - person226 + - person227 + - person228 + - person229 + - person230 + - person231 + state_code: CA + county: ALAMEDA_COUNTY_CA + household22: + members: + - person232 + - person233 + - person234 + - person235 + - person236 + - person237 + - person238 + - person239 + - person240 + - person241 + - person242 + - person243 + - person244 + - person245 + - person246 + - person247 + - person248 + - person249 + - person250 + - person251 + - person252 + - person253 + state_code: CA + county: ALAMEDA_COUNTY_CA + household23: + members: + - person254 + - person255 + - person256 + - person257 + - person258 + - person259 + - person260 + - person261 + - person262 + - person263 + - person264 + - person265 + - person266 + - person267 + - person268 + - person269 + - person270 + - person271 + - person272 + - person273 + - person274 + - person275 + - person276 + state_code: CA + county: ALAMEDA_COUNTY_CA + household24: + members: + - person277 + - person278 + - person279 + - person280 + - person281 + - person282 + - person283 + - person284 + - person285 + - person286 + - person287 + - person288 + - person289 + - person290 + - person291 + - person292 + - person293 + - person294 + - person295 + - person296 + - person297 + - person298 + - person299 + - person300 + state_code: CA + county: ALAMEDA_COUNTY_CA + household25: + members: + - person301 + - person302 + - person303 + - person304 + - person305 + - person306 + - person307 + - person308 + - person309 + - person310 + - person311 + - person312 + - person313 + - person314 + - person315 + - person316 + - person317 + - person318 + - person319 + - person320 + - person321 + - person322 + - person323 + - person324 + - person325 + state_code: CA + county: ALAMEDA_COUNTY_CA + output: + ca_liheap_income_limit: + - 39_979.92 + - 52_281.96 + - 64_584 + - 76_885.92 + - 89_187 + - 101_488.92 + - 103_795.92 + - 106_101.96 + - 108_408.96 + - 110_715 + - 113_022 + - 115_329 + - 117_635.52 + - 119_942.16 + - 122_248.68 + - 124_555.32 + - 126_861.84 + - 129_168.48 + - 131_475 + - 133_781.64 + - 136_088.16 + - 138_394.8 + - 140_701.32 + - 143_007.96 + - 145_314.48 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/csd/liheap/eligibility/ca_liheap_liquid_heating_covered.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/csd/liheap/eligibility/ca_liheap_liquid_heating_covered.yaml new file mode 100644 index 00000000000..987a4050d4a --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/csd/liheap/eligibility/ca_liheap_liquid_heating_covered.yaml @@ -0,0 +1,189 @@ +# PDF pages 184-188,193,205,257,279,282-283 +# https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=184 +# PDF pages 191,233-234 +# https://maderacap.org/wp-content/uploads/2025/10/Agenda-and-Packet-for-October-9-2025-Updated.pdf#page=191 +# FY2026 ordinary liquid component; no discretionary vendor supplement. +# Annual recurring income/costs represent the same application month. + + +# Coverage includes Madera propane/oil at zero through100 percent burden. +# Zero income, raw burden above100, negative energy total, other counties, +# other states and other fuels are not supported by this liquid component. +# High income, applicant age17 and zero qualified size can still be covered +# scenarios; later eligibility determines their result. No unsupported row +# is asserted to be legally ineligible. +- name: "Case 1, coverage distinguishes policy gaps from income applicant and priority denials." + period: 2026 + input: + people: + p1_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p2_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p3_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 0} + p4_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p5_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p6_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p7_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p8_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p9_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p10_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p11_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p12_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 60000} + p13_1: {"age": 17, "is_citizen_or_legal_immigrant": true, "ssi": 0, "pension_income": 12000} + p14_1: {"age": 40, "is_citizen_or_legal_immigrant": false, "ssi": 0, "employment_income": 12000} + spm_units: + s1: + members: ["p1_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 0 + s2: + members: ["p2_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 12000 + s3: + members: ["p3_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 2040 + s4: + members: ["p4_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 12000.12 + s5: + members: ["p5_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 2040 + s6: + members: ["p6_1"] + heating_type: "WOOD" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + wood_expense: 2040 + s7: + members: ["p7_1"] + heating_type: "NATURAL_GAS" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + gas_expense: 2040 + s8: + members: ["p8_1"] + heating_type: "NONE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + s9: + members: ["p9_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 2040 + s10: + members: ["p10_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: -12 + s11: + members: ["p11_1"] + heating_type: "FUEL_OIL" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + fuel_oil_expense: 2040 + s12: + members: ["p12_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 10200 + s13: + members: ["p13_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 2040 + s14: + members: ["p14_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 2040 + households: + h1: + members: ["p1_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h2: + members: ["p2_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h3: + members: ["p3_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h4: + members: ["p4_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h5: + members: ["p5_1"] + state_code: "CA" + county: "FRESNO_COUNTY_CA" + h6: + members: ["p6_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h7: + members: ["p7_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h8: + members: ["p8_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h9: + members: ["p9_1"] + state_code: "OR" + county: "MULTNOMAH_COUNTY_OR" + h10: + members: ["p10_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h11: + members: ["p11_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h12: + members: ["p12_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h13: + members: ["p13_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h14: + members: ["p14_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + output: + ca_liheap_liquid_heating_covered: [true, true, false, false, false, false, false, false, false, false, true, true, true, true] diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/csd/liheap/eligibility/ca_liheap_utility_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/csd/liheap/eligibility/ca_liheap_utility_eligible.yaml new file mode 100644 index 00000000000..782cce03ab4 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/csd/liheap/eligibility/ca_liheap_utility_eligible.yaml @@ -0,0 +1,347 @@ +# PDF pages 9,193,202-203,205,219,221,279 +# https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=9 +# This gate covers the gas and electric accounts that take the utility benefit. + +- name: Case 1, a qualified adult applicant is required by the represented inputs. + period: 2026 + # Applicant age 18 qualifies; age 17 does not absent an emancipation input. + # A qualified adult in the unit may apply despite another nonqualified adult. + input: + people: + person1: {age: 17, is_citizen_or_legal_immigrant: true, ssi: 0} + person2: {age: 18, is_citizen_or_legal_immigrant: true, ssi: 0} + person3: {age: 35, is_citizen_or_legal_immigrant: false, ssi: 0} + person4: {age: 17, is_citizen_or_legal_immigrant: true, ssi: 0} + person5: {age: 35, is_citizen_or_legal_immigrant: false, ssi: 0} + person6: {age: 18, is_citizen_or_legal_immigrant: true, ssi: 0} + person7: {age: 35, is_citizen_or_legal_immigrant: false, ssi: 0} + spm_units: + spm_unit1: + members: [person1] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit2: + members: [person2] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit3: + members: [person3, person4] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit4: + members: [person5, person6] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit5: + members: [person7] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + households: + household1: + members: [person1] + state_code: CA + county: ALAMEDA_COUNTY_CA + household2: + members: [person2] + state_code: CA + county: ALAMEDA_COUNTY_CA + household3: + members: [person3, person4] + state_code: CA + county: ALAMEDA_COUNTY_CA + household4: + members: [person5, person6] + state_code: CA + county: ALAMEDA_COUNTY_CA + household5: + members: [person7] + state_code: CA + county: ALAMEDA_COUNTY_CA + output: + ca_liheap_utility_eligible: [false, true, false, true, false] + +- name: Case 2, utility fuel housing and energy charges determine coverage. + period: 2026 + # Gas or electric heat needs a positive gas or electric bill, or the + # rent-inclusive proxy, subsidized or not (plan 2.3, guide 3.3). A gas-heated + # home with only an electric bill qualifies (guide pp. 66, 193, 205). A propane + # home with only its propane bill has no utility account to credit; its false + # utility gate is not a denial of the liquid component. Unspecified fuel has no + # utility crosswalk. + input: + people: + person1: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person2: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person3: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person4: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person5: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person6: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person7: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person8: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person9: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + spm_units: + spm_unit1: + members: [person1] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit2: + members: [person2] + heating_type: ELECTRICITY + pre_subsidy_electricity_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit3: + members: [person3] + heating_type: NATURAL_GAS + gas_expense: 0 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + pre_subsidy_electricity_expense: 1_200 + spm_unit4: + members: [person4] + heating_type: NATURAL_GAS + gas_expense: 0 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + heat_expense_included_in_rent: true + spm_unit5: + members: [person5] + heating_type: NATURAL_GAS + gas_expense: 0 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + heat_expense_included_in_rent: true + receives_housing_assistance: true + spm_unit6: + members: [person6] + heating_type: NATURAL_GAS + gas_expense: 100 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + heat_expense_included_in_rent: true + receives_housing_assistance: true + spm_unit7: + members: [person7] + heating_type: PROPANE + bottled_gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit8: + members: [person8] + heating_type: NONE + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit9: + members: [person9] + heating_type: UNSPECIFIED + snap: 0 + tanf: 0 + ca_state_supplement: 0 + heat_expense_included_in_rent: true + households: + household1: + members: [person1] + state_code: CA + county: ALAMEDA_COUNTY_CA + household2: + members: [person2] + state_code: CA + county: ALAMEDA_COUNTY_CA + household3: + members: [person3] + state_code: CA + county: ALAMEDA_COUNTY_CA + household4: + members: [person4] + state_code: CA + county: ALAMEDA_COUNTY_CA + household5: + members: [person5] + state_code: CA + county: ALAMEDA_COUNTY_CA + household6: + members: [person6] + state_code: CA + county: ALAMEDA_COUNTY_CA + household7: + members: [person7] + state_code: CA + county: ALAMEDA_COUNTY_CA + household8: + members: [person8] + state_code: CA + county: ALAMEDA_COUNTY_CA + household9: + members: [person9] + state_code: CA + county: ALAMEDA_COUNTY_CA + output: + ca_liheap_utility_eligible: + - true + - true + - true + - true + - true + - true + - false + - false + - false + +# Guide p. 221: the applicant names the utility account that takes the benefit, so +# any known fuel qualifies on a gas or electric bill. NONE and UNSPECIFIED do not. +# A wood home with an approved delivery takes that payment instead (contract +# 8.1.2, p. 363). Heat in rent gives a propane home no utility account. +- name: Case 3, a gas or electric bill opens the utility benefit to every known fuel. + period: 2026 + input: + people: + person1: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person2: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person3: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person4: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person5: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person6: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person7: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person8: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person9: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person10: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + spm_units: + spm_unit1: + members: [person1] + heating_type: PROPANE + pre_subsidy_electricity_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit2: + members: [person2] + heating_type: FUEL_OIL + gas_expense: 600 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit3: + members: [person3] + heating_type: KEROSENE + pre_subsidy_electricity_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit4: + members: [person4] + heating_type: COAL + gas_expense: 600 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit5: + members: [person5] + heating_type: WOOD + pre_subsidy_electricity_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit6: + members: [person6] + heating_type: OTHER + gas_expense: 600 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit7: + members: [person7] + heating_type: NONE + pre_subsidy_electricity_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit8: + members: [person8] + heating_type: UNSPECIFIED + pre_subsidy_electricity_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit9: + members: [person9] + heating_type: WOOD + pre_subsidy_electricity_expense: 1_200 + ca_liheap_approved_wood_delivery_cost: 600 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit10: + members: [person10] + heating_type: PROPANE + heat_expense_included_in_rent: true + snap: 0 + tanf: 0 + ca_state_supplement: 0 + households: + household1: + members: [person1] + state_code: CA + county: ALAMEDA_COUNTY_CA + household2: + members: [person2] + state_code: CA + county: ALAMEDA_COUNTY_CA + household3: + members: [person3] + state_code: CA + county: ALAMEDA_COUNTY_CA + household4: + members: [person4] + state_code: CA + county: ALAMEDA_COUNTY_CA + household5: + members: [person5] + state_code: CA + county: ALAMEDA_COUNTY_CA + household6: + members: [person6] + state_code: CA + county: ALAMEDA_COUNTY_CA + household7: + members: [person7] + state_code: CA + county: ALAMEDA_COUNTY_CA + household8: + members: [person8] + state_code: CA + county: ALAMEDA_COUNTY_CA + household9: + members: [person9] + state_code: CA + county: ALAMEDA_COUNTY_CA + household10: + members: [person10] + state_code: CA + county: ALAMEDA_COUNTY_CA + output: + ca_liheap_utility_eligible: [true, true, true, true, true, true, false, false, false, false] diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/csd/liheap/income/ca_liheap_countable_earned_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/csd/liheap/income/ca_liheap_countable_earned_income.yaml new file mode 100644 index 00000000000..309ca38eee7 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/csd/liheap/income/ca_liheap_countable_earned_income.yaml @@ -0,0 +1,165 @@ +# PDF pages 231,240,247 +# https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=231 +# Person-level YEAR output; partnership losses remain net business receipts. + +- name: Case 1, adult earnings include net business losses and minor earnings are excluded. + period: 2026 + absolute_error_margin: 0.01 + # Adult total=12_000+2_000+300+700-1_000=14_000. At age 17 earnings + # are excluded; at 18 wages plus net business count. Net loss stays negative + # at Person level; household countable income separately floors at zero. + input: + people: + person1: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + self_employment_income: 2_000 + sstb_self_employment_income: 300 + farm_operations_income: 700 + partnership_s_corp_income: -1_000 + person2: + age: 17 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + self_employment_income: 2_000 + person3: + age: 18 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + self_employment_income: 2_000 + person4: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + self_employment_income: -1_000 + person5: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + spm_units: + spm_unit1: + members: [person1, person2, person3] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit2: + members: [person4] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit3: + members: [person5] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + households: + household1: + members: [person1, person2, person3] + state_code: CA + county: ALAMEDA_COUNTY_CA + household2: + members: [person4] + state_code: CA + county: ALAMEDA_COUNTY_CA + household3: + members: [person5] + state_code: OR + county: MULTNOMAH_COUNTY_OR + output: + ca_liheap_countable_earned_income: [14_000, 0, 14_000, -1_000, 0] + +# Guide p. 249 deducts a paid employee's business expenses: 40,500 - 1,000 = 39,500. +# A minor's earnings are excluded (p. 247), so the minor's 500 offsets nothing. +- name: Case 2, unreimbursed employee expenses reduce adult earnings only. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 40_500 + unreimbursed_business_employee_expenses: 1_000 + person2: + age: 17 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 5_000 + unreimbursed_business_employee_expenses: 500 + spm_units: + spm_unit: + members: [person1, person2] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + households: + household: + members: [person1, person2] + state_code: CA + county: ALAMEDA_COUNTY_CA + output: + ca_liheap_countable_earned_income: [39_500, 0] + +# Guide p. 231 counts all gross wages and p. 250 excludes only combat pay. $45,000 +# is above the $39,979.92 one-person limit, so San Diego pays $0. For two people, +# $30,000 is $2,500 a month, group 3: 362 + 19 = 381. +- name: Case 3, military basic pay counts as earned income. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 25 + is_citizen_or_legal_immigrant: true + ssi: 0 + military_basic_pay: 45_000 + person2: + age: 22 + is_citizen_or_legal_immigrant: true + ssi: 0 + military_basic_pay: 30_000 + person3: + age: 22 + is_citizen_or_legal_immigrant: true + ssi: 0 + spm_units: + spm_unit1: + members: [person1] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit2: + members: [person2, person3] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + households: + household1: + members: [person1] + state_code: CA + county: SAN_DIEGO_COUNTY_CA + household2: + members: [person2, person3] + state_code: CA + county: SAN_DIEGO_COUNTY_CA + output: + ca_liheap_countable_earned_income: [45_000, 30_000, 0] + ca_liheap_utility_heating: [0, 381] diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/csd/liheap/income/ca_liheap_countable_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/csd/liheap/income/ca_liheap_countable_income.yaml new file mode 100644 index 00000000000..4560789147f --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/csd/liheap/income/ca_liheap_countable_income.yaml @@ -0,0 +1,556 @@ +# PDF pages 229-231,234-235,240,243-250 +# https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=229 +# Annual inputs approximate current-month receipts; SSI and SSP are monthly. +# Raw premium inputs below are assumed to contain allowable medical premiums. + +- name: Case 1, nonqualified wages and minor unearned income remain countable. + period: 2026 + absolute_error_margin: 0.01 + # Nonqualified wages 24_000 count despite size exclusion. The minor wage 12_000 + # is excluded, while minor survivor Social Security 2_400 still counts. + input: + people: + person1: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person2: + age: 30 + is_citizen_or_legal_immigrant: false + ssi: 0 + employment_income: 24_000 + person3: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person4: + age: 17 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 12_000 + social_security_survivors: 2_400 + spm_units: + spm_unit1: + members: [person1, person2] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit2: + members: [person3, person4] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + households: + household1: + members: [person1, person2] + state_code: CA + county: ALAMEDA_COUNTY_CA + household2: + members: [person3, person4] + state_code: CA + county: ALAMEDA_COUNTY_CA + output: + ca_liheap_household_size: [1, 2] + ca_liheap_countable_income: [24_000, 2_400] + +- name: Case 2, pension retirement Social Security survivor and rental aggregates enter once. + period: 2026 + absolute_error_margin: 0.01 + # Pension 3_000 + retirement withdrawals 1_000 + Social Security 2_000 + # + separate survivor 700 + ordinary/farm rent 3_000 =9_700. Each aggregate + # contains its own subcomponents, so none are counted a second time. + input: + people: + person1: + age: 65 + is_citizen_or_legal_immigrant: true + ssi: 0 + taxable_pension_income: 2_000 + tax_exempt_pension_income: 1_000 + taxable_retirement_distributions: 600 + tax_exempt_retirement_distributions: 400 + social_security_survivors: 1_000 + social_security_dependents: 200 + social_security_disability: 300 + social_security_retirement: 500 + survivor_benefits: 700 + rental_income: 1_800 + farm_rent_income: 1_200 + spm_units: + spm_unit1: + members: [person1] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + households: + household1: + members: [person1] + state_code: CA + county: ALAMEDA_COUNTY_CA + output: + ca_liheap_countable_income: 9_700 + +- name: Case 3, represented unearned receipts and annual CalWORKs enter once. + period: 2026 + absolute_error_margin: 0.01 + # Person receipts total 6_400; annual household CalWORKs 2_400 counts once + # despite two members, giving 8_800. Interest is assumed used for support. + input: + people: + person1: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + unemployment_compensation: 1_000 + strike_benefits: 200 + general_assistance: 300 + alimony_income: 400 + child_support_received: 500 + interest_income: 600 + ordinary_dividend_income: 700 + workers_compensation: 800 + disability_benefits: 900 + veterans_benefits: 1_000 + person2: {age: 8, is_citizen_or_legal_immigrant: true, ssi: 0} + spm_units: + spm_unit1: + members: [person1, person2] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 2_400 + ca_state_supplement: 0 + households: + household1: + members: [person1, person2] + state_code: CA + county: ALAMEDA_COUNTY_CA + output: + ca_liheap_countable_income: 8_800 + +- name: Case 4, monthly federal SSI alone is annualized once with zero state supplement. + period: 2026 + absolute_error_margin: 0.01 + # Federal SSI 1_000 each month gives 12_000 annually. SSP is explicitly zero; + # all members use matching monthly SSI keys. Neither divide nor multiply twice. + input: + people: + person1: + age: 65 + is_citizen_or_legal_immigrant: true + ssi: + 2026-01: 1_000 + 2026-02: 1_000 + 2026-03: 1_000 + 2026-04: 1_000 + 2026-05: 1_000 + 2026-06: 1_000 + 2026-07: 1_000 + 2026-08: 1_000 + 2026-09: 1_000 + 2026-10: 1_000 + 2026-11: 1_000 + 2026-12: 1_000 + person2: + age: 8 + is_citizen_or_legal_immigrant: true + ssi: + 2026-01: 0 + 2026-02: 0 + 2026-03: 0 + 2026-04: 0 + 2026-05: 0 + 2026-06: 0 + 2026-07: 0 + 2026-08: 0 + 2026-09: 0 + 2026-10: 0 + 2026-11: 0 + 2026-12: 0 + spm_units: + spm_unit1: + members: [person1, person2] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + households: + household1: + members: [person1, person2] + state_code: CA + county: ALAMEDA_COUNTY_CA + output: + ca_liheap_countable_income: 12_000 + +- name: Case 5, nonuniform monthly SSI and SSP add to annual CalWORKs without duplication. + period: 2026 + absolute_error_margin: 0.01 + # SSI=6*500+6*700=7_200. SSP=3*100+9*200=2_100. Annual CalWORKs + # adds 2_400 once: total 11_700. SSP is a household amount, not per person. + input: + people: + person1: + age: 65 + is_citizen_or_legal_immigrant: true + ssi: + 2026-01: 500 + 2026-02: 500 + 2026-03: 500 + 2026-04: 500 + 2026-05: 500 + 2026-06: 500 + 2026-07: 700 + 2026-08: 700 + 2026-09: 700 + 2026-10: 700 + 2026-11: 700 + 2026-12: 700 + person2: + age: 8 + is_citizen_or_legal_immigrant: true + ssi: + 2026-01: 0 + 2026-02: 0 + 2026-03: 0 + 2026-04: 0 + 2026-05: 0 + 2026-06: 0 + 2026-07: 0 + 2026-08: 0 + 2026-09: 0 + 2026-10: 0 + 2026-11: 0 + 2026-12: 0 + spm_units: + spm_unit1: + members: [person1, person2] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 2_400 + ca_state_supplement: + 2026-01: 100 + 2026-02: 100 + 2026-03: 100 + 2026-04: 200 + 2026-05: 200 + 2026-06: 200 + 2026-07: 200 + 2026-08: 200 + 2026-09: 200 + 2026-10: 200 + 2026-11: 200 + 2026-12: 200 + households: + household1: + members: [person1, person2] + state_code: CA + county: ALAMEDA_COUNTY_CA + output: + ca_liheap_countable_income: 11_700 + +- name: Case 6, direct premiums take precedence with fallback and no Medicare duplication. + period: 2026 + absolute_error_margin: 0.01 + # Positive direct premium 1_200 wins over fallback 2_400; otherwise fallback + # applies, plus the enrolled member's $600 Part B premium where no direct + # total was supplied: 24_000 - 600 = 23_400. Raw fields are alternatives. + # The direct total includes Medicare; LTC is excluded. Two members deduct + # 1_200+600 from 36_000, giving 34_200. + input: + people: + person1: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 24_000 + health_insurance_premiums: 1_200 + health_insurance_premiums_without_medicare_part_b: 2_400 + person2: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 24_000 + health_insurance_premiums: 0 + health_insurance_premiums_without_medicare_part_b: 2_400 + person3: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 24_000 + health_insurance_premiums: 1_200 + health_insurance_premiums_without_medicare_part_b: 2_400 + medicare_enrolled: true + medicare_part_b_premium: 600 + long_term_health_insurance_premiums: 3_000 + person4: + age: 65 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 24_000 + medicare_enrolled: true + medicare_part_b_premium: 600 + person5: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 24_000 + health_insurance_premiums: 1_200 + person6: + age: 40 + is_citizen_or_legal_immigrant: true + ssi: 0 + pension_income: 12_000 + health_insurance_premiums_without_medicare_part_b: 600 + spm_units: + spm_unit1: + members: [person1] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit2: + members: [person2] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit3: + members: [person3] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit4: + members: [person4] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit5: + members: [person5, person6] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + households: + household1: + members: [person1] + state_code: CA + county: ALAMEDA_COUNTY_CA + household2: + members: [person2] + state_code: CA + county: ALAMEDA_COUNTY_CA + household3: + members: [person3] + state_code: CA + county: ALAMEDA_COUNTY_CA + household4: + members: [person4] + state_code: CA + county: ALAMEDA_COUNTY_CA + household5: + members: [person5, person6] + state_code: CA + county: ALAMEDA_COUNTY_CA + output: + ca_liheap_countable_income: [22_800, 21_600, 22_800, 23_400, 34_200] + +- name: Case 7, legally mandated support and allowable premiums are deducted once. + period: 2026 + absolute_error_margin: 0.01 + # 24_000-1_200 child support-600 spousal support-1_200 premiums=21_000. + # Deductions or net business losses cannot make household income negative. + input: + people: + person1: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 24_000 + child_support_expense: 1_200 + alimony_expense: 600 + health_insurance_premiums: 1_200 + person2: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 1_000 + child_support_expense: 2_000 + health_insurance_premiums: 1_000 + person3: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + self_employment_income: -2_000 + spm_units: + spm_unit1: + members: [person1] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit2: + members: [person2] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit3: + members: [person3] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + households: + household1: + members: [person1] + state_code: CA + county: ALAMEDA_COUNTY_CA + household2: + members: [person2] + state_code: CA + county: ALAMEDA_COUNTY_CA + household3: + members: [person3] + state_code: CA + county: ALAMEDA_COUNTY_CA + output: + ca_liheap_countable_income: [21_000, 0, 0] + +- name: Case 8, cash gifts capital gains prizes SNAP and assets are excluded. + period: 2026 + absolute_error_margin: 0.01 + # Only wages 2_000 count; gifts, gains, lottery winnings, one-time insurance, + # SNAP and asset balances are excluded. The Oregon CA component is zero. + input: + people: + person1: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 2_000 + financial_assistance: 5_000 + capital_gains: 10_000 + gambling_winnings: 2_000 + life_insurance_benefits: 2_000 + person2: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 2_000 + spm_units: + spm_unit1: + members: [person1] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 1_200 + tanf: 0 + ca_state_supplement: 0 + spm_unit_assets: 500_000 + spm_unit2: + members: [person2] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + households: + household1: + members: [person1] + state_code: CA + county: ALAMEDA_COUNTY_CA + household2: + members: [person2] + state_code: OR + county: MULTNOMAH_COUNTY_OR + output: + ca_liheap_countable_income: [2_000, 0] + +# Plan pages 229-247 list railroad retirement among pensions: 6,000 counts. +- name: Case 9, railroad retirement counts as a pension. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 60 + is_citizen_or_legal_immigrant: true + ssi: 0 + railroad_benefits: 6_000 + spm_units: + spm_unit: + members: [person1] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + households: + household: + members: [person1] + state_code: CA + county: ALAMEDA_COUNTY_CA + output: + ca_liheap_countable_income: 6_000 + +# Guide pp. 233, 235 deduct Medicare premiums generally. With 20 quarters the 2026 +# Part A premium is 565 x 12 = 6,780 and Part B is 202.90 x 12 = 2,434.80, so +# 44,000 - 2,434.80 - 6,780 = 34,785.20, group 4, Fresno $434. Without the Part A +# deduction, 41,565.20 is above the $39,979.92 limit. A supplied direct total +# already includes Medicare: 44,000 - 1,200 = 42,800. +- name: Case 10, Part A premiums are deducted unless a direct total includes them. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + is_citizen_or_legal_immigrant: true + ssi: 0 + social_security_retirement: 44_000 + medicare_quarters_of_coverage: 20 + person2: + age: 70 + is_citizen_or_legal_immigrant: true + ssi: 0 + social_security_retirement: 44_000 + medicare_quarters_of_coverage: 20 + health_insurance_premiums: 1_200 + spm_units: + spm_unit1: + members: [person1] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit2: + members: [person2] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + households: + household1: + members: [person1] + state_code: CA + county: FRESNO_COUNTY_CA + household2: + members: [person2] + state_code: CA + county: FRESNO_COUNTY_CA + output: + ca_liheap_countable_income: [34_785.20, 42_800] + ca_liheap_utility_heating: [434, 0] diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/csd/liheap/payment/ca_liheap_energy_burden_group.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/csd/liheap/payment/ca_liheap_energy_burden_group.yaml new file mode 100644 index 00000000000..daf02793cce --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/csd/liheap/payment/ca_liheap_energy_burden_group.yaml @@ -0,0 +1,185 @@ +# PDF pages 184-188,193,205,257,279,282-283 +# https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=184 +# PDF pages 191,233-234 +# https://maderacap.org/wp-content/uploads/2025/10/Agenda-and-Packet-for-October-9-2025-Updated.pdf#page=191 +# FY2026 ordinary liquid component; no discretionary vendor supplement. +# Annual recurring income/costs represent the same application month. + + +# Annual income12000 means monthly1000. Costs/120 give percent burdens +# 0,10.929,10.930,13.469,13.470,16.009,16.010,100,100.001. +# Truncate after two percent decimals. Raw burden above100 is unsupported, +# not a legal denial. Annual1311.60 specifically guards float32 boundary storage. +- name: "Case 1, Madera truncation boundaries and the closed one hundred percent endpoint." + period: 2026 + input: + people: + p1_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p2_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p3_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p4_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p5_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p6_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p7_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p8_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p9_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + spm_units: + s1: + members: ["p1_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 0 + s2: + members: ["p2_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1311.48 + s3: + members: ["p3_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1311.6 + s4: + members: ["p4_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1616.28 + s5: + members: ["p5_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1616.4 + s6: + members: ["p6_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1921.08 + s7: + members: ["p7_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1921.2 + s8: + members: ["p8_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 12000 + s9: + members: ["p9_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 12000.12 + households: + h1: + members: ["p1_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h2: + members: ["p2_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h3: + members: ["p3_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h4: + members: ["p4_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h5: + members: ["p5_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h6: + members: ["p6_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h7: + members: ["p7_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h8: + members: ["p8_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h9: + members: ["p9_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + output: + ca_liheap_energy_burden_group: [1, 1, 2, 2, 3, 3, 4, 4, 0] + +# 120+240+360+480+720=1920;1920/12000=16.00 percent, group3. +# The deprecated metered gas value duplicates gas and is excluded. Water/sewer +# are not one of the five energy categories on state-plan p257. +- name: "Case 2, all five energy costs enter once and unrelated expenses do not." + period: 2026 + input: + people: + p1_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + spm_units: + s1: + members: ["p1_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 480 + pre_subsidy_electricity_expense: 120 + gas_expense: 240 + wood_expense: 360 + fuel_oil_expense: 720 + metered_gas_expense: 9000 + water_expense: 9000 + sewage_expense: 9000 + households: + h1: + members: ["p1_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + output: + ca_liheap_energy_burden_group: [3] + +# State-plan pp282–283:45.12+56.36=101.48 monthly, not printed101.51. +# Income1100+250=1350 monthly;101.48/1350=7.517037... percent, +# truncated7.51 in group1. All source monthly amounts are annualized once. +- name: "Case 3, published component bills use the correct sum before truncation." + period: 2026 + input: + people: + p1_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "social_security": 13200, "pension_income": 3000} + spm_units: + s1: + members: ["p1_1"] + heating_type: "NATURAL_GAS" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + gas_expense: 676.32 + pre_subsidy_electricity_expense: 541.44 + households: + h1: + members: ["p1_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + output: + ca_liheap_countable_income: [16200] + ca_liheap_energy_burden_group: [1] diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/csd/liheap/payment/ca_liheap_income_group.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/csd/liheap/payment/ca_liheap_income_group.yaml new file mode 100644 index 00000000000..8d7a57dfbdc --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/csd/liheap/payment/ca_liheap_income_group.yaml @@ -0,0 +1,342 @@ +# PDF pages 184,217-218 +# https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=184 +# Monthly table cent boundaries, prior-year FPG and categorical group 4 control. + +- name: Case 1, one-person poverty groups include every published cent boundary. + period: 2026 + # One-person source upper bounds are 1304.17,1630.21 and 1956.25 per month; + # the lower band includes equality and the next starts one cent later. + input: + people: + person1: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 0 + person2: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 15_650.04 + person3: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 15_650.16 + person4: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 19_562.52 + person5: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 19_562.64 + person6: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 23_475 + person7: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 23_475.12 + person8: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 39_979.92 + spm_units: + spm_unit1: + members: [person1] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit2: + members: [person2] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit3: + members: [person3] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit4: + members: [person4] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit5: + members: [person5] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit6: + members: [person6] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit7: + members: [person7] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit8: + members: [person8] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + households: + household1: + members: [person1] + state_code: CA + county: ALAMEDA_COUNTY_CA + household2: + members: [person2] + state_code: CA + county: ALAMEDA_COUNTY_CA + household3: + members: [person3] + state_code: CA + county: ALAMEDA_COUNTY_CA + household4: + members: [person4] + state_code: CA + county: ALAMEDA_COUNTY_CA + household5: + members: [person5] + state_code: CA + county: ALAMEDA_COUNTY_CA + household6: + members: [person6] + state_code: CA + county: ALAMEDA_COUNTY_CA + household7: + members: [person7] + state_code: CA + county: ALAMEDA_COUNTY_CA + household8: + members: [person8] + state_code: CA + county: ALAMEDA_COUNTY_CA + output: + ca_liheap_income_group: [1, 1, 2, 2, 3, 3, 4, 4] + +- name: Case 2, two-person half-cent rounding follows the printed upper bound. + period: 2026 + # 125% of two-person FPG 21_150 /12=2203.125; the table rounds to 2203.13. + # That printed value is group 2;2203.14 is group 3. + input: + people: + person1: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 26_437.56 + person2: {age: 33, is_citizen_or_legal_immigrant: true, ssi: 0} + person3: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 26_437.68 + person4: {age: 33, is_citizen_or_legal_immigrant: true, ssi: 0} + spm_units: + spm_unit1: + members: [person1, person2] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + spm_unit2: + members: [person3, person4] + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 0 + tanf: 0 + ca_state_supplement: 0 + households: + household1: + members: [person1, person2] + state_code: CA + county: ALAMEDA_COUNTY_CA + household2: + members: [person3, person4] + state_code: CA + county: ALAMEDA_COUNTY_CA + output: + ca_liheap_income_group: [2, 3] + +- name: Case 3, categorical over-SMI large households use group four. + period: 2026 + # At size 13 the ordinary group 4 interval disappears; at 25 only group 1 remains. + # The source still explicitly requires group 4 for categorical income above SMI. + input: + people: + person1: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 117_635.64 + person2: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person3: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person4: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person5: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person6: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person7: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person8: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person9: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person10: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person11: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person12: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person13: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person14: + age: 35 + is_citizen_or_legal_immigrant: true + ssi: 0 + employment_income: 145_314.6 + person15: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person16: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person17: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person18: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person19: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person20: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person21: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person22: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person23: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person24: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person25: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person26: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person27: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person28: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person29: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person30: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + person31: {age: 25, is_citizen_or_legal_immigrant: true, ssi: 0} + person32: {age: 30, is_citizen_or_legal_immigrant: true, ssi: 0} + person33: {age: 35, is_citizen_or_legal_immigrant: true, ssi: 0} + person34: {age: 40, is_citizen_or_legal_immigrant: true, ssi: 0} + person35: {age: 45, is_citizen_or_legal_immigrant: true, ssi: 0} + person36: {age: 50, is_citizen_or_legal_immigrant: true, ssi: 0} + person37: {age: 55, is_citizen_or_legal_immigrant: true, ssi: 0} + person38: {age: 20, is_citizen_or_legal_immigrant: true, ssi: 0} + spm_units: + spm_unit1: + members: + - person1 + - person2 + - person3 + - person4 + - person5 + - person6 + - person7 + - person8 + - person9 + - person10 + - person11 + - person12 + - person13 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 1_200 + tanf: 0 + ca_state_supplement: 0 + spm_unit2: + members: + - person14 + - person15 + - person16 + - person17 + - person18 + - person19 + - person20 + - person21 + - person22 + - person23 + - person24 + - person25 + - person26 + - person27 + - person28 + - person29 + - person30 + - person31 + - person32 + - person33 + - person34 + - person35 + - person36 + - person37 + - person38 + heating_type: NATURAL_GAS + gas_expense: 1_200 + snap: 1_200 + tanf: 0 + ca_state_supplement: 0 + households: + household1: + members: + - person1 + - person2 + - person3 + - person4 + - person5 + - person6 + - person7 + - person8 + - person9 + - person10 + - person11 + - person12 + - person13 + state_code: CA + county: ALAMEDA_COUNTY_CA + household2: + members: + - person14 + - person15 + - person16 + - person17 + - person18 + - person19 + - person20 + - person21 + - person22 + - person23 + - person24 + - person25 + - person26 + - person27 + - person28 + - person29 + - person30 + - person31 + - person32 + - person33 + - person34 + - person35 + - person36 + - person37 + - person38 + state_code: CA + county: ALAMEDA_COUNTY_CA + output: + ca_liheap_income_group: [4, 4] diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/csd/liheap/payment/ca_liheap_madera_priority_points.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/csd/liheap/payment/ca_liheap_madera_priority_points.yaml new file mode 100644 index 00000000000..927f5f95b3e --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/csd/liheap/payment/ca_liheap_madera_priority_points.yaml @@ -0,0 +1,257 @@ +# PDF pages 184-188,193,205,257,279,282-283 +# https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=184 +# PDF pages 191,233-234 +# https://maderacap.org/wp-content/uploads/2025/10/Agenda-and-Packet-for-October-9-2025-Updated.pdf#page=191 +# 2026 standard Part B premium, also in gov.hhs.medicare.part_b.base_premium: +# https://www.cms.gov/newsroom/fact-sheets/2026-medicare-parts-b-premiums-deductibles +# FY2026 ordinary liquid component; no discretionary vendor supplement. +# Annual recurring income/costs represent the same application month. + + +# One-person monthly incomes1000/1500/1800/2500 fall in original p184 +# groups1/2/3/4. Burden12 percent contributes6; income adds10/8/6/4. +- name: "Case 1, all income groups contribute their own priority points." + period: 2026 + input: + people: + p1_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p2_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 18000} + p3_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 21600} + p4_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 30000} + spm_units: + s1: + members: ["p1_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1440.0 + s2: + members: ["p2_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 2160.0 + s3: + members: ["p3_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 2592.0 + s4: + members: ["p4_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 3600.0 + households: + h1: + members: ["p1_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h2: + members: ["p2_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h3: + members: ["p3_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h4: + members: ["p4_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + output: + ca_liheap_income_group: [1, 2, 3, 4] + ca_liheap_energy_burden_group: [2, 2, 2, 2] + ca_liheap_madera_priority_points: [16, 14, 12, 10] + +# Income group 1 gives 10 points. The first six households have 10% burden +# (1_200 / 12_000), group 1, adding 4. Under 3 adds 15, under 6 adds 10; +# age 60 adds 10 and age 70 adds 15. Fractional ages retain their actual band. +# The last two pay the sourced 2026 standard Part B premium: 202.90 x 12 +# = 2_434.80. This is an explicit actual-paid-cost assumption, independent +# of unobserved MSP participation. Net income = 12_000 - 2_434.80 = 9_565.20. +# Their burden truncates to 12.54%, group 2 (6 points); totals are +# 10 + 6 + 10 = 26 and 10 + 6 + 15 = 31. Younger rows report zero premiums. +- name: "Case 2, child and older adult fractional ages preserve completed-year bands." + period: 2026 + absolute_error_margin: 0.01 + input: + people: + p1_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12_000, "medicare_part_b_premium": 0} + p1_2: {"age": 2.5, "is_citizen_or_legal_immigrant": true, "ssi": 0, "medicare_part_b_premium": 0} + p2_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12_000, "medicare_part_b_premium": 0} + p2_2: {"age": 3, "is_citizen_or_legal_immigrant": true, "ssi": 0, "medicare_part_b_premium": 0} + p3_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12_000, "medicare_part_b_premium": 0} + p3_2: {"age": 5.5, "is_citizen_or_legal_immigrant": true, "ssi": 0, "medicare_part_b_premium": 0} + p4_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12_000, "medicare_part_b_premium": 0} + p4_2: {"age": 6, "is_citizen_or_legal_immigrant": true, "ssi": 0, "medicare_part_b_premium": 0} + p5_1: {"age": 59.9, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12_000, "medicare_part_b_premium": 0} + p6_1: {"age": 60, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12_000, "medicare_part_b_premium": 0} + p7_1: {"age": 69.9, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12_000, "medicare_enrolled": true, "medicare_part_b_premium": 2_434.80} + p8_1: {"age": 70, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12_000, "medicare_enrolled": true, "medicare_part_b_premium": 2_434.80} + spm_units: + s1: + members: ["p1_1", "p1_2"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + s2: + members: ["p2_1", "p2_2"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + s3: + members: ["p3_1", "p3_2"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + s4: + members: ["p4_1", "p4_2"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + s5: + members: ["p5_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + s6: + members: ["p6_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + s7: + members: ["p7_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + s8: + members: ["p8_1"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + households: + h1: + members: ["p1_1", "p1_2"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h2: + members: ["p2_1", "p2_2"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h3: + members: ["p3_1", "p3_2"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h4: + members: ["p4_1", "p4_2"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h5: + members: ["p5_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h6: + members: ["p6_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h7: + members: ["p7_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h8: + members: ["p8_1"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + output: + ca_liheap_countable_income: [12_000, 12_000, 12_000, 12_000, 12_000, 12_000, 9_565.20, 9_565.20] + ca_liheap_income_group: [1, 1, 1, 1, 1, 1, 1, 1] + ca_liheap_energy_burden_group: [1, 1, 1, 1, 1, 1, 2, 2] + ca_liheap_madera_priority_points: [29, 24, 24, 14, 14, 24, 26, 31] + +# Income10+burden4+young-child10+under3child5+elderly10+age70plus5 +# +disability10=54. Two elders, two young children and two disabled people +# do not duplicate category points; demographic addition is the maximum40. +- name: "Case 3, overlapping vulnerability categories count once each." + period: 2026 + input: + people: + p1_1: {"age": 70, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000, "is_disabled": true} + p1_2: {"age": 75, "is_citizen_or_legal_immigrant": true, "ssi": 0, "is_disabled": true} + p1_3: {"age": 2.5, "is_citizen_or_legal_immigrant": true, "ssi": 0} + p1_4: {"age": 1, "is_citizen_or_legal_immigrant": true, "ssi": 0} + spm_units: + s1: + members: ["p1_1", "p1_2", "p1_3", "p1_4"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + households: + h1: + members: ["p1_1", "p1_2", "p1_3", "p1_4"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + output: + ca_liheap_madera_priority_points: [54] + +# Madera p191 awards disability points for a household member without an +# adult or citizenship restriction; the size rule separately excludes the +# nonqualified member. Income10+burden4+disability10=24 in each household. +- name: "Case 4, child and nonqualified household disability still identify vulnerability." + period: 2026 + input: + people: + p1_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p1_2: {"age": 10, "is_citizen_or_legal_immigrant": true, "ssi": 0, "is_disabled": true} + p2_1: {"age": 40, "is_citizen_or_legal_immigrant": true, "ssi": 0, "employment_income": 12000} + p2_2: {"age": 40, "is_citizen_or_legal_immigrant": false, "ssi": 0, "is_disabled": true} + spm_units: + s1: + members: ["p1_1", "p1_2"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + s2: + members: ["p2_1", "p2_2"] + heating_type: "PROPANE" + snap: 0 + tanf: 0 + ca_state_supplement: 0 + bottled_gas_expense: 1200 + households: + h1: + members: ["p1_1", "p1_2"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + h2: + members: ["p2_1", "p2_2"] + state_code: "CA" + county: "MADERA_COUNTY_CA" + output: + ca_liheap_household_size: [2, 1] + ca_liheap_madera_priority_points: [24, 24] diff --git a/policyengine_us/variables/gov/states/ca/csd/liheap/ca_liheap_covered_liquid_heating.py b/policyengine_us/variables/gov/states/ca/csd/liheap/ca_liheap_covered_liquid_heating.py new file mode 100644 index 00000000000..97c0784ddfe --- /dev/null +++ b/policyengine_us/variables/gov/states/ca/csd/liheap/ca_liheap_covered_liquid_heating.py @@ -0,0 +1,60 @@ +from policyengine_us.model_api import * + + +class ca_liheap_covered_liquid_heating(Variable): + value_type = float + entity = SPMUnit + definition_period = YEAR + unit = USD + label = ( + "California LIHEAP covered ordinary liquid heating component (check coverage)" + ) + defined_for = "ca_liheap_liquid_heating_covered" + reference = ( + # PDF pages 10,185-188,364 + "https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=10", + # PDF pages 191,233-234 + "https://maderacap.org/wp-content/uploads/2025/10/Agenda-and-Packet-for-October-9-2025-Updated.pdf#page=191", + ) + + def formula(spm_unit, period, parameters): + p = parameters(period).gov.states.ca.csd.liheap + county = spm_unit.household("county_str", period) + supported_county = np.isin(county, list(p.payment.liquid_base_amount)) + # defined_for masks after calculation; unrelated county keys must + # still be safe to look up in mixed-state populations. + safe_county = where( + supported_county, county, next(iter(p.payment.liquid_base_amount)) + ) + income_group = max_(spm_unit("ca_liheap_income_group", period), 1) + burden_group = max_(spm_unit("ca_liheap_energy_burden_group", period), 1) + base = p.payment.liquid_base_amount[safe_county][income_group] + size = spm_unit("ca_liheap_household_size", period) + extra_people = clip(size - 1, 0, p.payment.maximum_payment_household_size - 1) + age = spm_unit.members("age", period) + vulnerable = ( + (p.local.madera.child_points.calc(spm_unit.min(age)) > 0) + | (p.local.madera.elderly_points.calc(spm_unit.max(age)) > 0) + | (add(spm_unit, period, ["is_disabled"]) > 0) + ) + amount = ( + base + + p.payment.additional_person_amount * extra_people + + p.payment.liquid_burden_addition[burden_group] + + p.payment.liquid_vulnerable_amount * vulnerable + ) + # WPO pays the fuel vendor, so a utility bill alone does not qualify. + own_fuel_cost = (spm_unit("heating_expense", period) > 0) | spm_unit( + "heat_expense_included_in_rent", period + ) + eligible = ( + spm_unit("ca_liheap_basic_eligible", period) + & own_fuel_cost + & ( + spm_unit("ca_liheap_madera_priority_points", period) + >= p.local.madera.minimum_points + ) + ) + # Ordinary schedule only: no discretionary vendor-service supplement. + # A zero with coverage=False is unsupported, not an entitlement denial. + return where(eligible, min_(amount, p.payment.wpo_maximum), 0) diff --git a/policyengine_us/variables/gov/states/ca/csd/liheap/ca_liheap_household_size.py b/policyengine_us/variables/gov/states/ca/csd/liheap/ca_liheap_household_size.py new file mode 100644 index 00000000000..7e2d018719f --- /dev/null +++ b/policyengine_us/variables/gov/states/ca/csd/liheap/ca_liheap_household_size.py @@ -0,0 +1,15 @@ +from policyengine_us.model_api import * + + +class ca_liheap_household_size(Variable): + value_type = int + entity = SPMUnit + definition_period = YEAR + label = "California LIHEAP qualified household size" + defined_for = StateCode.CA + # PDF pages 196,202-203 + reference = "https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=196" + + # The SPM unit approximates the household sharing energy costs. Income of + # excluded nonqualified members remains countable. + adds = ["is_citizen_or_legal_immigrant"] diff --git a/policyengine_us/variables/gov/states/ca/csd/liheap/ca_liheap_utility_heating.py b/policyengine_us/variables/gov/states/ca/csd/liheap/ca_liheap_utility_heating.py new file mode 100644 index 00000000000..b996436f671 --- /dev/null +++ b/policyengine_us/variables/gov/states/ca/csd/liheap/ca_liheap_utility_heating.py @@ -0,0 +1,25 @@ +from policyengine_us.model_api import * + + +class ca_liheap_utility_heating(Variable): + value_type = float + entity = SPMUnit + definition_period = YEAR + unit = USD + label = "California LIHEAP regular gas or electric utility heating benefit" + defined_for = "ca_liheap_utility_eligible" + # PDF pages 182-184 + reference = "https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=182" + + def formula(spm_unit, period, parameters): + p = parameters(period).gov.states.ca.csd.liheap.payment + county = spm_unit.household("county_str", period) + supported_county = np.isin(county, list(p.utility_base_amount)) + # defined_for masks results after calculation, so replace irrelevant + # county keys before vectorized lookup in mixed-state populations. + safe_county = where(supported_county, county, next(iter(p.utility_base_amount))) + group = max_(spm_unit("ca_liheap_income_group", period), 1) + base = p.utility_base_amount[safe_county][group] + size = spm_unit("ca_liheap_household_size", period) + extra_people = clip(size - 1, 0, p.maximum_payment_household_size - 1) + return base + p.additional_person_amount * extra_people diff --git a/policyengine_us/variables/gov/states/ca/csd/liheap/ca_liheap_wood_heating.py b/policyengine_us/variables/gov/states/ca/csd/liheap/ca_liheap_wood_heating.py new file mode 100644 index 00000000000..8a248248289 --- /dev/null +++ b/policyengine_us/variables/gov/states/ca/csd/liheap/ca_liheap_wood_heating.py @@ -0,0 +1,24 @@ +from policyengine_us.model_api import * + + +class ca_liheap_wood_heating(Variable): + value_type = float + entity = SPMUnit + definition_period = YEAR + unit = USD + label = ( + "California LIHEAP ordinary wood heating component with approved delivery cost" + ) + defined_for = "ca_liheap_basic_eligible" + # PDF pages 10,188 + reference = "https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=10" + + def formula(spm_unit, period, parameters): + p = parameters(period).gov.states.ca.csd.liheap.payment + heating_type = spm_unit("heating_type", period) + approved_cost = spm_unit("ca_liheap_approved_wood_delivery_cost", period) + return where( + heating_type == heating_type.possible_values.WOOD, + clip(approved_cost, 0, p.wpo_maximum), + 0, + ) diff --git a/policyengine_us/variables/gov/states/ca/csd/liheap/eligibility/ca_liheap_basic_eligible.py b/policyengine_us/variables/gov/states/ca/csd/liheap/eligibility/ca_liheap_basic_eligible.py new file mode 100644 index 00000000000..adc83087201 --- /dev/null +++ b/policyengine_us/variables/gov/states/ca/csd/liheap/eligibility/ca_liheap_basic_eligible.py @@ -0,0 +1,40 @@ +from policyengine_us.model_api import * + + +class ca_liheap_basic_eligible(Variable): + value_type = bool + entity = SPMUnit + definition_period = YEAR + label = "California LIHEAP common household eligibility" + defined_for = StateCode.CA + # PDF pages 9,66,193,202-203,205,219,221,264-265,279 + reference = "https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=9" + + def formula(spm_unit, period, parameters): + p = parameters(period).gov.states.ca.csd.liheap.eligibility + person = spm_unit.members + qualified_adult = person("is_citizen_or_legal_immigrant", period) & ( + person("age", period) >= p.applicant_min_age + ) + expense = spm_unit("heating_expense", period) + heat_in_rent = spm_unit("heat_expense_included_in_rent", period) + heating_type = spm_unit("heating_type", period) + # The guide asks for energy costs and pays electric or gas accounts, so + # a bill on either account is an energy cost whatever the heating fuel. + utility_bills = add( + spm_unit, period, ["pre_subsidy_electricity_expense", "gas_expense"] + ) + approved_wood_cost = (heating_type == heating_type.possible_values.WOOD) & ( + spm_unit("ca_liheap_approved_wood_delivery_cost", period) > 0 + ) + # Heat in rent stands in for the documented charge of guide 3.3, for + # subsidized tenants too. A subsidized household with neither a bill nor + # heat in rent has no energy cost (guide 1.6). + energy_cost = ( + (expense > 0) | (utility_bills > 0) | heat_in_rent | approved_wood_cost + ) + return ( + energy_cost + & (spm_unit.sum(qualified_adult) > 0) + & spm_unit("ca_liheap_income_eligible", period) + ) diff --git a/policyengine_us/variables/gov/states/ca/csd/liheap/eligibility/ca_liheap_categorically_eligible.py b/policyengine_us/variables/gov/states/ca/csd/liheap/eligibility/ca_liheap_categorically_eligible.py new file mode 100644 index 00000000000..3e2799050f5 --- /dev/null +++ b/policyengine_us/variables/gov/states/ca/csd/liheap/eligibility/ca_liheap_categorically_eligible.py @@ -0,0 +1,14 @@ +from policyengine_us.model_api import * + + +class ca_liheap_categorically_eligible(Variable): + value_type = bool + entity = SPMUnit + definition_period = YEAR + label = "California LIHEAP categorically income eligible" + defined_for = StateCode.CA + # PDF pages 6,217-218 + reference = "https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=6" + + def formula(spm_unit, period, parameters): + return (spm_unit("snap", period) > 0) | (spm_unit("tanf", period) > 0) diff --git a/policyengine_us/variables/gov/states/ca/csd/liheap/eligibility/ca_liheap_income_eligible.py b/policyengine_us/variables/gov/states/ca/csd/liheap/eligibility/ca_liheap_income_eligible.py new file mode 100644 index 00000000000..4afb09915d8 --- /dev/null +++ b/policyengine_us/variables/gov/states/ca/csd/liheap/eligibility/ca_liheap_income_eligible.py @@ -0,0 +1,32 @@ +from policyengine_us.model_api import * +from policyengine_us.variables.gov.hhs.tax_unit_fpg import fpg + + +class ca_liheap_income_eligible(Variable): + value_type = bool + entity = SPMUnit + definition_period = YEAR + label = "California LIHEAP income eligible" + defined_for = StateCode.CA + reference = ( + # PDF pages 6,9,184 + "https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=6", + "https://www.law.cornell.edu/uscode/text/42/8624#b_2_B", + ) + + def formula(spm_unit, period, parameters): + p = parameters(period).gov.states.ca.csd.liheap.income + p_hhs = parameters(period).gov.hhs.liheap + size = spm_unit("ca_liheap_household_size", period) + state_group = spm_unit.household("state_group_str", period) + guideline = fpg(size, state_group, period, parameters, year_lag=p.fpg_year_lag) + # The published SMI ceiling is below the federal protection for large + # households. Preserve that ceiling and the statute's strict boundary. + floor = np.round(guideline * p_hhs.fpg_floor, 2) + income = spm_unit("ca_liheap_countable_income", period) + limit = spm_unit("ca_liheap_income_limit", period) + return ( + spm_unit("ca_liheap_categorically_eligible", period) + | (income <= limit) + | (income < floor) + ) diff --git a/policyengine_us/variables/gov/states/ca/csd/liheap/eligibility/ca_liheap_income_limit.py b/policyengine_us/variables/gov/states/ca/csd/liheap/eligibility/ca_liheap_income_limit.py new file mode 100644 index 00000000000..6b42fdcd74c --- /dev/null +++ b/policyengine_us/variables/gov/states/ca/csd/liheap/eligibility/ca_liheap_income_limit.py @@ -0,0 +1,39 @@ +from policyengine_us.model_api import * +from policyengine_us.variables.gov.hhs.hhs_smi import liheap_smi_limit + + +class ca_liheap_income_limit(Variable): + value_type = float + entity = SPMUnit + definition_period = YEAR + unit = USD + label = "California LIHEAP annualized income limit" + defined_for = StateCode.CA + # PDF pages 9,184 + reference = "https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=9" + + def formula(spm_unit, period, parameters): + p = parameters(period).gov.states.ca.csd.liheap.income + p_smi = parameters(period).gov.hhs.smi + size = spm_unit("ca_liheap_household_size", period) + state = spm_unit.household("state_code_str", period) + capped_size = clip(size, 1, p.smi_rounding_size_limit) + rounded_annual = liheap_smi_limit( + capped_size, state, p.smi_rate, period, parameters + ) + extra_people = max_(size - p.smi_rounding_size_limit, 0) + annual_increment = ( + np.floor(p_smi.amount[state] * p.smi_rate) + * p_smi.household_size_adjustment.additional_person + ) + monthly = ( + rounded_annual / MONTHS_IN_YEAR + + extra_people * annual_increment / MONTHS_IN_YEAR + ) + # This inferred two-stage rounding reproduces all 25 FY2026 rows; + # the source does not prescribe the size-12 switch or an extension. + rounded_monthly = ( + np.floor(monthly / p.monthly_rounding_increment) + * p.monthly_rounding_increment + ) + return rounded_monthly * MONTHS_IN_YEAR diff --git a/policyengine_us/variables/gov/states/ca/csd/liheap/eligibility/ca_liheap_liquid_heating_covered.py b/policyengine_us/variables/gov/states/ca/csd/liheap/eligibility/ca_liheap_liquid_heating_covered.py new file mode 100644 index 00000000000..d6bf0b1c8de --- /dev/null +++ b/policyengine_us/variables/gov/states/ca/csd/liheap/eligibility/ca_liheap_liquid_heating_covered.py @@ -0,0 +1,23 @@ +from policyengine_us.model_api import * + + +class ca_liheap_liquid_heating_covered(Variable): + value_type = bool + entity = SPMUnit + definition_period = YEAR + label = "California LIHEAP ordinary liquid heating policy coverage, not eligibility" + defined_for = StateCode.CA + reference = ( + # PDF pages 185-188 + "https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=185", + # PDF pages 191,233-234 + "https://maderacap.org/wp-content/uploads/2025/10/Agenda-and-Packet-for-October-9-2025-Updated.pdf#page=191", + ) + + def formula(spm_unit, period, parameters): + heating_type = spm_unit("heating_type", period) + types = heating_type.possible_values + liquid_heat = (heating_type == types.PROPANE) | (heating_type == types.FUEL_OIL) + # Currently Madera only. A false result means the ordinary liquid + # component is unsupported, including zero-income and over-100% burden. + return liquid_heat & (spm_unit("ca_liheap_energy_burden_group", period) > 0) diff --git a/policyengine_us/variables/gov/states/ca/csd/liheap/eligibility/ca_liheap_utility_eligible.py b/policyengine_us/variables/gov/states/ca/csd/liheap/eligibility/ca_liheap_utility_eligible.py new file mode 100644 index 00000000000..7b044a7b560 --- /dev/null +++ b/policyengine_us/variables/gov/states/ca/csd/liheap/eligibility/ca_liheap_utility_eligible.py @@ -0,0 +1,50 @@ +from policyengine_us.model_api import * + + +class ca_liheap_utility_eligible(Variable): + value_type = bool + entity = SPMUnit + definition_period = YEAR + label = "California LIHEAP utility heating eligibility" + defined_for = StateCode.CA + reference = ( + # PDF pages 9,182-184,193,202-203,205,219,221,264-265,279,363 + "https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=9", + # PDF pages 189,233-234 + "https://maderacap.org/wp-content/uploads/2025/10/Agenda-and-Packet-for-October-9-2025-Updated.pdf#page=189", + ) + + def formula(spm_unit, period, parameters): + p = parameters(period).gov.states.ca.csd.liheap + heating_type = spm_unit("heating_type", period) + types = heating_type.possible_values + utility_heat = np.isin( + heating_type.decode_to_str(), p.eligibility.utility_heating_fuels + ) + known_fuel = (heating_type != types.NONE) & (heating_type != types.UNSPECIFIED) + utility_bills = add( + spm_unit, period, ["pre_subsidy_electricity_expense", "gas_expense"] + ) + # The applicant names the utility account that takes the benefit, so a + # home heated with another fuel qualifies on a gas or electric bill. + utility_account = utility_heat | (known_fuel & (utility_bills > 0)) + # A household receives one HEAP or WPO payment per program year. + other_component = ( + add( + spm_unit, + period, + ["ca_liheap_covered_liquid_heating", "ca_liheap_wood_heating"], + ) + > 0 + ) + # Madera denies applicants below its minimum. Only its priority plan was + # recovered, and a home with no burden group has no points to test. + burden_group = spm_unit("ca_liheap_energy_burden_group", period) + points = spm_unit("ca_liheap_madera_priority_points", period) + meets_priority = (burden_group == 0) | (points >= p.local.madera.minimum_points) + return ( + spm_unit("ca_liheap_basic_eligible", period) + & utility_account + & ~other_component + & meets_priority + ) diff --git a/policyengine_us/variables/gov/states/ca/csd/liheap/income/ca_liheap_countable_earned_income.py b/policyengine_us/variables/gov/states/ca/csd/liheap/income/ca_liheap_countable_earned_income.py new file mode 100644 index 00000000000..cc8e5429004 --- /dev/null +++ b/policyengine_us/variables/gov/states/ca/csd/liheap/income/ca_liheap_countable_earned_income.py @@ -0,0 +1,21 @@ +from policyengine_us.model_api import * + + +class ca_liheap_countable_earned_income(Variable): + value_type = float + entity = Person + definition_period = YEAR + unit = USD + label = "California LIHEAP countable earned income" + defined_for = StateCode.CA + # PDF pages 231,240,247,249 + reference = "https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=231" + + def formula(person, period, parameters): + p = parameters(period).gov.states.ca.csd.liheap.income + earnings = add(person, period, p.earned_sources) + # The guide deducts the business expenses of paid employees. A minor's + # earnings are excluded, so a minor's expenses offset nothing. + job_expenses = person("unreimbursed_business_employee_expenses", period) + adult = person("age", period) >= p.earned_income_min_age + return where(adult, earnings - job_expenses, 0) diff --git a/policyengine_us/variables/gov/states/ca/csd/liheap/income/ca_liheap_countable_income.py b/policyengine_us/variables/gov/states/ca/csd/liheap/income/ca_liheap_countable_income.py new file mode 100644 index 00000000000..0786305c04e --- /dev/null +++ b/policyengine_us/variables/gov/states/ca/csd/liheap/income/ca_liheap_countable_income.py @@ -0,0 +1,42 @@ +from policyengine_us.model_api import * + + +class ca_liheap_countable_income(Variable): + value_type = float + entity = SPMUnit + definition_period = YEAR + unit = USD + label = "California LIHEAP annualized countable income" + defined_for = StateCode.CA + # PDF pages 7,229-240,243-247 + reference = "https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=7" + + def formula(spm_unit, period, parameters): + p = parameters(period).gov.states.ca.csd.liheap.income + gross = add( + spm_unit, + period, + ["ca_liheap_countable_earned_income"] + p.unearned_sources, + ) + support_paid = add(spm_unit, period, p.support_deductions) + # The shared non-payroll aggregate includes Part B once. Payroll + # premiums are disjoint; supplied totals must exclude vision, + # dental, long-term care and other nonmedical charges. + medical_premiums = add( + spm_unit, + period, + [ + "medical_expense_health_insurance_premiums", + "pre_tax_health_insurance_premiums", + ], + ) + # The guide deducts Medicare premiums generally. That aggregate omits + # Part A, and a supplied direct total already includes Medicare. + person = spm_unit.members + part_a_premium = where( + person("health_insurance_premiums", period) != 0, + 0, + person("medicare_part_a_premium", period), + ) + deductions = support_paid + medical_premiums + spm_unit.sum(part_a_premium) + return max_(gross - deductions, 0) diff --git a/policyengine_us/variables/gov/states/ca/csd/liheap/payment/ca_liheap_approved_wood_delivery_cost.py b/policyengine_us/variables/gov/states/ca/csd/liheap/payment/ca_liheap_approved_wood_delivery_cost.py new file mode 100644 index 00000000000..7c4d12515af --- /dev/null +++ b/policyengine_us/variables/gov/states/ca/csd/liheap/payment/ca_liheap_approved_wood_delivery_cost.py @@ -0,0 +1,22 @@ +from policyengine_us.model_api import * + + +class ca_liheap_approved_wood_delivery_cost(Variable): + """Approved ordinary delivery cost for the modeled program year. + + Approval incorporates eligible quantity, wood form, climate, storage, and + administrative prioritization. The amount precedes the ordinary benefit cap, + excludes discretionary supplements, and does not replace income or qualified + adult eligibility. It is not historical annual wood spending. A zero default + does not establish legal ineligibility or resolve an unknown delivery cost. + """ + + value_type = float + entity = SPMUnit + definition_period = YEAR + unit = USD + default_value = 0 + label = "California LIHEAP approved eligible wood delivery cost" + defined_for = StateCode.CA + # PDF pages 188,363-364 + reference = "https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=188" diff --git a/policyengine_us/variables/gov/states/ca/csd/liheap/payment/ca_liheap_energy_burden_group.py b/policyengine_us/variables/gov/states/ca/csd/liheap/payment/ca_liheap_energy_burden_group.py new file mode 100644 index 00000000000..5c210aadfe1 --- /dev/null +++ b/policyengine_us/variables/gov/states/ca/csd/liheap/payment/ca_liheap_energy_burden_group.py @@ -0,0 +1,40 @@ +from policyengine_us.model_api import * + + +class ca_liheap_energy_burden_group(Variable): + value_type = int + entity = SPMUnit + definition_period = YEAR + label = ( + "California LIHEAP supported local energy burden group (zero is unsupported)" + ) + defined_for = StateCode.CA + reference = ( + # PDF pages 257,282-283 + "https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=257", + "https://maderacap.org/wp-content/uploads/2025/10/Agenda-and-Packet-for-October-9-2025-Updated.pdf#page=191", + ) + + def formula(spm_unit, period, parameters): + p = parameters(period).gov.states.ca.csd.liheap + local = p.local.madera + cent = p.income.monthly_rounding_increment + # Annual flows approximate a representative month. Restore each + # monetary input's cents before truncating the percentage to basis points. + cost_cents = 0 + for source in p.energy_burden.expense_sources: + amount = spm_unit(source, period).astype(float) + cost_cents = cost_cents + np.rint(amount / cent).astype(np.int64) + income = spm_unit("ca_liheap_countable_income", period) + income_cents = np.rint(income.astype(float) / cent).astype(np.int64) + scale = int(np.rint(1 / p.energy_burden.rounding_increment)) + burden = np.floor_divide(cost_cents * scale, max_(income_cents, 1)) + county = spm_unit.household("county_str", period) + supported = ( + np.isin(county, local.counties) + & (income_cents > 0) + & (cost_cents >= 0) + & (cost_cents <= income_cents * local.maximum_energy_burden) + ) + # Zero denotes missing policy coverage, not a first group or denial. + return where(supported, local.energy_burden_group.calc(burden), 0) diff --git a/policyengine_us/variables/gov/states/ca/csd/liheap/payment/ca_liheap_income_group.py b/policyengine_us/variables/gov/states/ca/csd/liheap/payment/ca_liheap_income_group.py new file mode 100644 index 00000000000..5f30c45cd8c --- /dev/null +++ b/policyengine_us/variables/gov/states/ca/csd/liheap/payment/ca_liheap_income_group.py @@ -0,0 +1,33 @@ +from policyengine_us.model_api import * +from policyengine_us.variables.gov.hhs.tax_unit_fpg import fpg + + +class ca_liheap_income_group(Variable): + value_type = int + entity = SPMUnit + definition_period = YEAR + label = "California LIHEAP poverty group" + defined_for = StateCode.CA + reference = "https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=184" + + def formula(spm_unit, period, parameters): + p = parameters(period).gov.states.ca.csd.liheap.income + size = spm_unit("ca_liheap_household_size", period) + state_group = spm_unit.household("state_group_str", period) + guideline = fpg( + max_(size, 1), state_group, period, parameters, year_lag=p.fpg_year_lag + ) + income = spm_unit("ca_liheap_countable_income", period) + # Compare integer cents to preserve published inclusive boundaries + # after annual monetary inputs have been stored as float32. + monthly_income_cents = np.rint( + income.astype(float) / MONTHS_IN_YEAR / p.monthly_rounding_increment + ) + group = 1 + for rate in p.poverty_group_rates: + threshold_cents = np.floor( + guideline * rate / MONTHS_IN_YEAR / p.monthly_rounding_increment + 0.5 + ) + group = group + (monthly_income_cents > threshold_cents) + above_smi = income > spm_unit("ca_liheap_income_limit", period) + return where(above_smi, len(p.poverty_group_rates) + 1, group) diff --git a/policyengine_us/variables/gov/states/ca/csd/liheap/payment/ca_liheap_madera_priority_points.py b/policyengine_us/variables/gov/states/ca/csd/liheap/payment/ca_liheap_madera_priority_points.py new file mode 100644 index 00000000000..ed327acb53f --- /dev/null +++ b/policyengine_us/variables/gov/states/ca/csd/liheap/payment/ca_liheap_madera_priority_points.py @@ -0,0 +1,31 @@ +from policyengine_us.model_api import * + + +class ca_liheap_madera_priority_points(Variable): + value_type = int + entity = SPMUnit + definition_period = YEAR + label = "California LIHEAP Madera priority points (zero without a burden group)" + defined_for = StateCode.CA + # PDF pages 189,191,233-234 + reference = "https://maderacap.org/wp-content/uploads/2025/10/Agenda-and-Packet-for-October-9-2025-Updated.pdf#page=189" + + def formula(spm_unit, period, parameters): + p = parameters(period).gov.states.ca.csd.liheap.local.madera + income_group = max_(spm_unit("ca_liheap_income_group", period), 1) + supported_burden_group = spm_unit("ca_liheap_energy_burden_group", period) + burden_group = max_(supported_burden_group, 1) + age = spm_unit.members("age", period) + # Categories apply once each to all members, including nonqualified + # members. The two age scales include the overlapping age bonuses. + child_points = p.child_points.calc(spm_unit.min(age)) + elderly_points = p.elderly_points.calc(spm_unit.max(age)) + disabled = add(spm_unit, period, ["is_disabled"]) > 0 + points = ( + p.income_points[income_group] + + p.burden_points[burden_group] + + child_points + + elderly_points + + disabled * p.disability_points + ) + return where(supported_burden_group > 0, points, 0) diff --git a/source_conflicts/candidates.yaml b/source_conflicts/candidates.yaml index 60fc010a078..3ea506b75a5 100644 --- a/source_conflicts/candidates.yaml +++ b/source_conflicts/candidates.yaml @@ -1139,6 +1139,69 @@ candidates: state: ruled note: 'The October 2026 statute-first ruling retains the bar; obtain the statutory URL and verify the instruction flow''s joint-return effect. Code not yet on main: ca_eitc_eligible.' +- id: us-ca:liheap-income-floor-vs-smi-limit + program: liheap + years: + from: 2026 + to: 2026 + type: federal-fiscal + question: Can California's 60% SMI heating limit exclude a household of 21 or more whose income is below the federal + 110% poverty-guideline floor? + sources: + - kind: statute + citation: 42 U.S.C. 8624(b)(2)(B) + url: https://www.law.cornell.edu/uscode/text/42/8624#b_2_B + - kind: plan + citation: California FY2026 LIHEAP State Plan, income eligibility table, pp.9, 184 + url: https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=9 + readings: + statute: Income below 110% of the poverty guideline cannot by itself exclude the household. + other: The plan's 60% SMI limits fall below that floor for households of 21 to 25 members. + example: Twenty-one people with $136,088.28 a year exceed the $136,088.16 limit ($11,340.68 a month) but are below the + $138,215 floor (2025 guideline, one-year lag), so they stay income eligible. + pe_us: + follows: statute + code: + - policyengine_us/variables/gov/states/ca/csd/liheap/eligibility/ca_liheap_income_eligible.py + - policyengine_us/parameters/gov/hhs/liheap/fpg_floor.yaml + - policyengine_us/parameters/gov/states/ca/csd/liheap/income/fpg_year_lag.yaml + prs: + - https://github.com/PolicyEngine/policyengine-us/pull/10607 + state: unreviewed + note: PE-US applies the floor, rounded to cents with the statute's strict "less than" (ca_liheap_income_eligible.py). + No source prices a household the floor admits above the limit. It gets the group 4 amount, as guide p.218 pays a + categorical household above the limit, even where its income is below the poverty guideline. +- id: us-ca:liheap-subsidized-heat-in-rent + program: liheap + years: + from: 2026 + to: 2026 + type: federal-fiscal + question: Can a subsidized California tenant whose heat is included in rent, with no separate bill, receive LIHEAP? + sources: + - kind: plan + citation: California FY2026 LIHEAP State Plan, item 2.3, p.9 + url: https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=9 + - kind: manual + citation: LIHEAP Eligibility and Verification Guide 1.6 and 3.3, plan pp.205, 279 + url: https://www.csd.ca.gov/Shared%20Documents/2026-Final-LIHEAP-State-Plan.pdf#page=205 + readings: + statute: No statute is supplied; guide 1.6 makes ineligible "Subsidized households that do not pay any out of pocket + energy costs". + other: Plan item 2.3 answers No to differing policies for renters in subsidized housing and renters with utilities in + rent. Guide 3.3 says "Applicants that pay their utility costs as a portion of their rent are eligible" and accepts + a "HUD or USDA statement showing zero utility allowance". + example: One Alameda adult with a Section 8 voucher, gas heat included in rent, no separate bill and wages of $12,000 + receives $484 under plan 2.3 and guide 3.3 and $0 if guide 1.6 reaches heat in rent. + pe_us: + follows: gap-fill + code: + - policyengine_us/variables/gov/states/ca/csd/liheap/eligibility/ca_liheap_basic_eligible.py + prs: + - https://github.com/PolicyEngine/policyengine-us/pull/10607 + state: ruled + note: 'Ruled 2026-11-03: follow plan 2.3 and guide 3.3. PE-US applies guide 1.6 only to a subsidized household with + neither a bill nor heat in rent.' - id: us-ca:premium-subsidy-150-fpl-boundary program: california-premium-subsidy years: