PolicyEngine / PolicyEngine/policyengine-us

CA CARE/FERA and LA EZ-SAVE ignore whether the household pays its own utilities (customer of record)

Open
#8,962 1 comment 0 reactions 1 assignee Claimed by @hua7450 View on GitHub
Dominant language
Python
Stars
162
Forks
212
Avg merge
3d 3h
Merged PRs (30d)
97

Description

## Summary

California's electricity-bill discount programs — **CARE**, **FERA**, and LADWP's **EZ-SAVE** — are all modeled as discounts on a household's electricity expense with **no check on whether the household actually pays its own utility bill**. In reality, all three are on-bill discounts available only to the **customer of record** (the person financially responsible for the electric account). A household whose electricity is included in rent (master-metered) is not the utility's customer of record and cannot enroll directly. We currently model such households as receiving the discount directly, which overstates coverage and (plausibly) dollars.

This mirrors a gate that `hud_utility_allowance` already applies (`defined_for = "tenant_pays_utilities"`) but that the CA utility programs do not.

## How these programs work in real life

All three are **utility-bill discounts tied to the customer of record**:

| Program | Administrator | Real-world eligibility (relevant part) | Discount |
|---|---|---|---|
| **CARE** | CPUC (IOUs: PG&E, SCE, SDG&E, SoCalGas) | ≤200% FPG **or** categorical; must be the utility **customer of record**. Master-metered / sub-metered tenants receive the discount via the **master-meter customer (landlord)**, who must pass it through per **PU Code §739.5(b)** — they are explicitly "not a utility customer." | 30–35% electric, 20% gas |
| **FERA** | CPUC (SCE, PG&E, SDG&E only) | Household **3+**, income >200% and ≤250% FPG; must be an electric **customer** of an eligible IOU | 18% electric |
| **EZ-SAVE** | LADWP (municipal utility) | Income-qualified; applicant **must be the customer of record** on the LADWP account, and it must be their permanent primary residence | Flat ~$8.17/mo electric (+ water/sewer) |

The common thread: **if the tenant does not pay the utility directly (utilities included in rent), they are not the customer of record and do not receive the discount on their own account.** For CARE specifically, they may still benefit through a landlord pass-through (a more complex path than a simple on/off gate).

Sources:
- [CPUC — CARE/FERA program](https://www.cpuc.ca.gov/industries-and-topics/electrical-energy/electric-costs/care-fera-program)
- [CPUC — FERA (consumer support)](https://www.cpuc.ca.gov/consumer-support/financial-assistance-savings-and-discounts/family-electric-rate-assistance-program)
- [PG&E — Sub-metered tenant & landlord responsibilities](https://www.pge.com/en/account/billing-and-assistance/understand-your-bill/sub-metered-tenant-and-landlord.html) ("As a sub-metered tenant, you are not a PG&E customer"; PU Code §739.5(b) pass-through)
- [LADWP — EZ-SAVE program](https://www.ladwp.com/residential-services/assistance-programs/ez-save-program) (customer of record on the LADWP account; permanent primary residence)

## What we currently model

None of the three formulas check `tenant_pays_utilities`:

- `ca_care_amount_if_eligible` / `ca_care` → `discount (0.325) * pre_subsidy_electricity_expense`, gated only on income OR categorical.
- `ca_fera` → `discount (0.18) * pre_subsidy_electricity_expense`, gated on income (≤250% FPG), household size ≥3, and not-CARE-eligible.
- `ca_la_ez_save` → `min(pre_subsidy_electricity_expense, $8.17)`, gated only on income (≤200% FPG).

Files:
- `policyengine_us/variables/gov/states/ca/cpuc/care/` (`ca_care.py`, `ca_care_amount_if_eligible.py`, `eligibility/*`)
- `policyengine_us/variables/gov/states/ca/cpuc/fera/` (`ca_fera.py`, `ca_fera_amount_if_eligible.py`, `ca_fera_eligible.py`)
- `policyengine_us/variables/gov/local/ca/la/dwp/ez_save/` (`ca_la_ez_save.py`, `ca_la_ez_save_eligible.py`)

Compare: `policyengine_us/variables/gov/hud/hud_utility_allowance.py` already uses `defined_for = "tenant_pays_utilities"`.

## The gap

A modeled household with **utilities included in rent** (should be `tenant_pays_utilities = false`) is treated as directly receiving CARE/FERA/EZ-SAVE. At minimum the **eligibility flags** are wrong; a **dollar overstatement** is also plausible because `pre_subsidy_electricity_expense` is a bare imputed input (Household/SPMUnit) that is **not conditioned on whether utilities are paid separately** — so it can be positive even when utilities are bundled into rent.

## Caveats / why this isn't a one-line fix

1. **`tenant_pays_utilities` defaults to `False` and is not imputed anywhere in the model.** It's only ever set as an explicit input (partner fixtures, HUD tests). Naively adding `defined_for = "tenant_pays_utilities"` to the CA programs would **zero them out for the entire microsimulation** unless `policyengine-us-data` populates the flag. This needs to be resolved (impute the flag, or flip the default) before or alongside gating — see next point.

2. **Underlying variable inconsistency.** The repo has two near-inverse booleans for the same real-world fact, at different entity levels with contradictory defaults:
- `tenant_pays_utilities` — **Household**, default `False`, used by `hud_utility_allowance`.
- `utilities_included_in_rent` — **TaxUnit**, default `False`, used by MI home-heating and ME property-tax-fairness credits.

By default both are `False` (tenant doesn't pay utilities *and* utilities aren't in rent — internally contradictory). Worth deciding whether these should be linked/derived from one canonical input and given consistent defaults.

3. **CARE master-meter pass-through.** A fully correct CARE model would not simply drop utilities-in-rent households — it would model the landlord pass-through (PU Code §739.5(b)). A simple `tenant_pays_utilities` gate under-counts that pass-through population. Simpler gating is a reasonable first-order improvement but should be documented as a limitation, not treated as exact.

## Possible direction (for discussion, not prescriptive)

- Gate CARE / FERA / EZ-SAVE consistently with `hud_utility_allowance`, so utility-bill discounts only accrue to households responsible for the utility bill.
- Resolve the `tenant_pays_utilities` default/imputation question so the gate behaves correctly in microsimulation (and reconcile it with `utilities_included_in_rent`).
- Decide whether the CARE master-meter pass-through is in scope or an accepted limitation.

_No code change requested here — filing for tracking and discussion._

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.