Skip to content

Add Orange County General Relief#8557

Open
hua7450 wants to merge 7 commits into
PolicyEngine:mainfrom
hua7450:ca-oc-general-relief
Open

Add Orange County General Relief#8557
hua7450 wants to merge 7 commits into
PolicyEngine:mainfrom
hua7450:ca-oc-general-relief

Conversation

@hua7450

@hua7450 hua7450 commented Jun 1, 2026

Copy link
Copy Markdown
Collaborator

Summary

Adds a partial Orange County, California General Relief (GR) screen — categorical, income, and resource eligibility plus the maximum aid payment (MAP) — from the official Orange County SSA General Relief Regulations Manual. Registered as partial because Orange County does not publish the component-value (in-kind aid) deductions needed to net the grant against in-kind aid met at no cost.

Closes #8556

Regulatory Authority

What's modeled

Area Modeled Basis
Geography Current Orange County residence county_str == ORANGE_COUNTY_CA
Categorical At least one eligible adult: qualified noncitizen, not receiving SSI/SSP, CalWORKs, or CAPI Sec 40.1, Sec 20.4
Income Net income below the MAP; 20% earned deduction; medical-insurance and court-ordered child/spousal-support deductions; income of other-cash-assistance recipients excluded Sec 70.2, 70.3, 80.2.d
Resources Cash plus vehicle value above the $4,650 exclusion, capped at $1,000 per economic unit Sec 60.2.a, Sec 60.4.c
Payment MAP by eligible-person count; flat 15% shared-housing reduction with a Housing Support Program exemption Sec 80.2.d, Sec 80.3.a

Key design decisions

  • Eligibility = categorical & income & resources. ca_oc_general_relief_eligible checks (1) at least one eligible person, (2) net countable income below the MAP (Sec 80.2.d financial eligibility), and (3) resources within the limits.
  • The MAP is sized on the eligible-person count, not the economic-unit size. Sec 80.3.a(2) bases the MAP on "the number of eligible persons in the GR-EU" — adults, excluding any child and any member excluded for cause (SSI/SSP, CalWORKs/CAPI, noncitizen status). ca_oc_general_relief_eligible_person_count computes exactly that. The full GR Economic Unit (Sec 20.4) is the income/resource pooling group (the SPM unit), a superset of the eligible persons.
  • Resources use only cash and vehicles. The resource check is cash + (vehicle value − $4,650 exclusion) ≤ $1,000 per economic unit (Sec 60.2.a, 60.4.c). Cash (spm_unit_cash_assets) is treated as a resource, not income; the $4,650 vehicle exclusion is a deduction (excess counts). We use the common partner-collectable inputs (spm_unit_cash_assets, household_vehicles_value) and drop the $5,000 home-equity cap, non-vehicle personal property, and secondary real estate — inputs partners do not collect and that default to 0.
  • No separate "no minor children" rule. Units with a child are excluded organically: a parent receiving CalWORKs is an excluded GR-EU member (Sec 20.4.b), and a working family with a child whose income clears CalWORKs also clears the GR income limit — so the income test and other-cash-assistance exclusion already remove them, with no extra demographic gate.
  • CAPI exclusion. CAPI (California's SSI-equivalent cash aid for immigrants) recipients are excluded under Sec 20.4.b's non-exhaustive "another type of public assistance." This is the case ssi > 0 misses: a recently-arrived aged/disabled permanent resident who receives CAPI rather than SSI but is otherwise GR-eligible.
  • Shared housing via a generic is_shared_living input. Adds an is_shared_living Household input and applies a flat 15% MAP reduction (Sec 80.3.a(3)) when it is set, waived for housing-assistance recipients to honor the "individuals placed in Housing Support Programs … may be receiving a shelter subsidy" carve-out (proxied by receives_housing_assistance). The manual's graduated 20%/25% tiers are simplified to a single rate for the boolean input.

Who is eligible

The modeled eligible population is narrow: able-bodied, non-aged, childless adults who are citizens / permanent residents / deportation-withheld, with cash and vehicle value below the limits and net income below the MAP. Aged or disabled applicants are swept into SSI or CAPI; applicants with children are routed to CalWORKs.

Not modeled (deferred)

  • Component-value (in-kind aid) deductions for housing/utility, food, transportation, clothing met at no cost (Sec 80.3.b) — Orange County does not publish the component dollar values (the reason this is a partial screen).
  • Graduated shared-housing reduction tiers (20% / 25%) — simplified to a flat 15% for the boolean is_shared_living input.
  • The $5,000 home-equity (primary residence) cap (Sec 50.2), non-vehicle personal property, and secondary real estate — partners do not collect these inputs (they default to 0).
  • Liquid-resource handling beyond the flat $1,000 resource cap: the initial-month grant reduction (Sec 60.2.a) and the multi-month period of ineligibility (Sec 70.2.r) are not modeled.
  • Mandatory federal/state income tax on unearned income (Sec 70.2.p(3)) — negligible for this very-low-income population.
  • Work requirements (Section 30) — GRWP/CFET registration and participation (§30.7), the employability classifications (Employable / Conditionally Employable / Incapacitated, §30.5–30.7), the 90-day-per-12-months time limit for Employable individuals (§30.7.c — a cumulative benefit cap, the same class as the federal 60-month TANF clock that the monthly-snapshot model doesn't represent), and sanctions (§30.8). None of these have a corresponding PolicyEngine input (orientation completion, work-program cooperation, compliance history). The earnings-based denial in §30.9 (aid denied when an adult is fully employed, earning ≥ the grant) is captured indirectly — such a unit has net income ≥ the MAP and so fails the income test.
  • 15-day prior residence; sponsor deeming (Sec 70.3.b / 50.3 / 60.3); 2-year property-transfer lookback (Sec 50.8 / 60.5); Refugee Cash Assistance (no California RCA variable); the T/U-visa / VAWA crime-victim immigration pathway (no enum value).

Assumptions

  • The MAP schedule's size-1 October 2016 increase ($350 → $355) is documented; the 2016-10-01 values for sizes 2–10 assume the same flat $5 increase.

Tests

Tests describe families with real inputs (age, disability, immigration, work history, income, assets) and let the model determine SSI / CalWORKs / CAPI receipt and its effect on GR eligibility — including an eligibility-map integration set that demonstrates the narrow eligible population.

  • policyengine-core test policyengine_us/tests/policy/baseline/gov/local/ca/oc/general_relief -c policyengine_us — 56 passed
  • make format

Files

  • policyengine_us/parameters/gov/local/ca/oc/general_relief/
  • policyengine_us/variables/gov/local/ca/oc/general_relief/
  • policyengine_us/variables/household/demographic/household/is_shared_living.py (new generic Household input)
  • policyengine_us/tests/policy/baseline/gov/local/ca/oc/general_relief/

@codecov

codecov Bot commented Jun 1, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (fbb907a) to head (5b73ca4).
⚠️ Report is 17 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##              main     #8557    +/-   ##
==========================================
  Coverage   100.00%   100.00%            
==========================================
  Files            3        18    +15     
  Lines           68       210   +142     
==========================================
+ Hits            68       210   +142     
Flag Coverage Δ
unittests 100.00% <100.00%> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@hua7450 hua7450 force-pushed the ca-oc-general-relief branch from 4e73f02 to 97736b7 Compare June 1, 2026 16:01
hua7450 and others added 2 commits June 1, 2026 15:24
- Restore the no-minor-child eligibility restriction with its regulatory basis
  (Sec 20 must-apply-for-available-aid -> ineligibility, Sec 80.2.d CalWORKs
  time-limit MAP exclusion, Sec 20.4.b excluded members); families with minor
  children are routed to CalWORKs, so the parent cannot also receive GR.
- Exclude CAPI recipients from General Relief (Sec 20.4.b 'another type of
  public assistance'); catches recently-arrived aged/disabled permanent
  residents who receive CAPI instead of SSI.
- Trim qualified immigration statuses to those enumerated in Sec 40.1 (citizen,
  permanent resident, deportation-withheld).
- Fix three resource-parameter subsection citations (60.4.b->60.4.c, 50.2.a and
  50.2.b -> 50.2).
- Document RCA and unearned-income tax deductions as not tracked; replace
  deprecated documentation fields with inline comments.
- Drive program receipt (SSI/CalWORKs/CAPI) from real family inputs in tests
  instead of program values; add eligibility-map integration cases.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Implement the OC General Relief monthly maximum aid payment (MAP) and the
grant calculation, replacing the prior partial (eligibility-only) screen.

- MAP by economic unit size (1-10) from the County of Orange MAP table
  effective April 1, 2015, with the size-1 increase to $355 effective
  October 1, 2016.
- Shared-housing reductions of 15% / 20% / 25% for sharing with 1 / 2 / 3+
  other people (GR manual Sec 80.3.a(3)).
- Grant = max_(MAP - countable income, 0) (Sec 80.2.d, Sec 80.3.c-e).
- Point programs.yaml at ca_oc_general_relief and mark status complete.

Component-value deductions for in-kind aid (Sec 80.3.b) are not modeled
because Orange County does not publish the component-value amounts; MAP
values are the 2015/2016 schedule pending a current published table.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@hua7450 hua7450 changed the title Add Orange County General Relief partial screen Add Orange County General Relief Jun 2, 2026
hua7450 and others added 4 commits June 5, 2026 13:45
- Add net-income financial eligibility (countable income < MAP, Sec 80.2.d)
  via ca_oc_general_relief_income_eligible; ca_oc_general_relief_eligible now
  checks categorical, income, and resources.
- Rename ca_oc_general_relief_aided_person_count to
  ca_oc_general_relief_eligible_person_count (the manual's "number of eligible
  persons in the GR-EU", Sec 80.3.a(2)); the MAP sizes on it.
- Remove the redundant no-minor-children demographic gate; units with a child
  are already excluded via CalWORKs receipt (Sec 20.4.b) or the income test.
- Replace the household-size shared-housing derivation with a generic
  is_shared_living Household input; apply a flat 15% reduction with a Housing
  Support Program exemption proxied by receives_housing_assistance
  (Sec 80.3.a(3)).
- Count liquid resources over the $50 disregard as income (Sec 70.2.g).
- Deduct court-ordered spousal support via alimony_expense
  (Sec 70.2.o(5)/70.2.p(2)).
- Add is_shared_living generic Household input variable.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ncome

- Resources: treat liquid resources (cash) as a resource, not income. Remove
  the cash-as-income treatment (excess_liquid_resources and the $50 disregard).
  The resource check is now countable property = cash + (vehicle value less the
  $4,650 exclusion), capped at $1,000 (Sec 60.2.a, Sec 60.4.c).
- Drop the $5,000 home-equity cap and the personal_property / other real estate
  inputs, which partners do not collect; use only spm_unit_cash_assets and
  household_vehicles_value.
- Vehicle: apply the $4,650 exclusion as a deduction (excess counts) rather than
  all-or-nothing.
- Payment: add an assumed $5 across-the-board MAP increase effective 2016-10-01
  for sizes 2-10 (only the size-1 increase is documented).
- Fix the income-eligibility citation: drop the stray Sec 70.4.c and cite
  Sec 80.2.d (financial eligibility), with net income per Sec 70.2 and 70.3.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Test coverage (from the program review):
- ca_oc_general_relief_eligible.yaml: 4-case truth table isolating each gate
  (categorical / income / resources) so an &-to-| flip is caught.
- ca_oc_general_relief_eligible_person_count.yaml: child, SSI recipient, and
  non-qualified immigrant each excluded from the MAP size count.
- max_aid_payment.yaml: mid-table size, >10 clip, empty/size-0 unit, and a
  two-person 2015-schedule case (all at verified 2015 values).
- integration.yaml: a fully eligible adult outside Orange County is denied.
- ca_oc_general_relief.yaml: negative income does not inflate the grant.

Citation/date fixes (from the PDF and reference audits):
- income_eligible references Sec 80.2.d (Benefits page 4); drop the stray
  Sec 70.4.c (Section 70 is Verification, not financial eligibility).
- adult_age_threshold description no longer references the removed
  no-minor-children rule.
- property_limit dated 2012-11-01 and cited to Sec 60.2.a (personal property),
  matching the rule the resource check implements.
- qualified_immigration_status effective date 2022-02-01 (the rule's effective
  date; January 2026 was only the manual republication).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@hua7450 hua7450 marked this pull request as ready for review June 6, 2026 22:26
@hua7450 hua7450 requested a review from PavelMakarchuk June 7, 2026 21:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add Orange County, CA General Relief program

1 participant