Conversation
…9159) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Implements San Bernardino County's General Relief (GR) program — a 100% county-funded monthly cash assistance program that the county Transitional Assistance Department (TAD) administers as a repayable loan under W&I Code §17000 et seq. and the Board-approved GR Policy Handbook (GRPHB) Chapter A. The implementation models the flat-grant design in effect since June 1, 2021: a maximum basic grant by assistance unit (AU) size, reduced dollar for dollar by countable income, behind county-residence, immigration, linkage, other-cash-assistance, treatment-facility, income, and resource gates. The benefit attaches to the SPM unit with a monthly definition period, matching the six existing CA county GR/GA implementations.
Fixes #9159
Regulatory authority
The handbook letters are Legistar
.docx/.docattachments, which do not honor PDF page anchors; citations therefore state GRPHB Chapter A page numbers in the citation text.Income eligibility tests
<; Chapter A states no explicit boundary, and a zero payment implies no need — the Orange County GR precedent, noted in a code comment).Income deductions and exemptions
0.8 × max(gross earned − $10, 0)(GRPHB HL Update Delaware income tax references for 2025 #7358, Chapter A p. A-3). For example, $210 of monthly gross earnings yields $160 countable: (210 − 10) × 0.8.ca_state_supplement) enters countable income at the SPM-unit level in the countable-income formula, since it is a unit-level variable and cannot sit in the person-level source list; CAPI is intentionally excluded (see the other-cash decision below).educational_assistancecounts in full as an intentional approved approximation, documented in the parameter file.Resource tests
All three tests must pass, and every limit is inclusive (
<=):The first $3,000 of each vehicle's net market value is exempt, applied through an average-value proxy (aggregate household vehicle value divided by vehicle count) because PolicyEngine stores vehicle values in aggregate (GRPHB HL #7356, Chapter A p. A-5). When the household lives in a vehicle, one average-value vehicle moves from the personal-property path to the $32,000 real-property test (GRPHB HL #7358, Chapter A pp. A-1/A-4 — a Banda settlement change).
Income standards
The maximum basic grant doubles as the income limit (income-eligible when countable income falls below it). Maximum Basic Grant Levels by AU size across the six eras (GRPHB HL #7364, Chapter A p. A-7; identical schedule in the executed December 7, 2021 Board item):
Eras turn over each July 1 after the initial June 1, 2021 start. The July 1, 2026 schedule is ongoing with no cost-of-living adjustment provision; the endpoint aligns with 2020-21 CalWORKs maximum aid payment levels.
Benefit calculation
GR = max(maximum basic grant − max(countable income, 0), 0)— the countable-income floor keeps net self-employment or rental losses from inflating the grant, and the outer floor keeps the benefit at zero when income reaches the grant. For example, a two-person AU with $500 of monthly countable income in January 2026 receives $615 − $500 = $115.AU size is the count of GR-eligible persons, clipped to the 1–5 grant rows. Person-level eligibility requires:
ca_state_supplement), or CalWORKs (receipt bars the person from the AU, not the whole unit),is_incapable_of_self_care), or employable (unemployed or working under 100 hours per month, not self-employed, not a student — full-time or part-time college), or child linkage (under 16, or 16–18 attending high school full time).Unit-level eligibility requires San Bernardino County residence, the post-June-2021
in_effectgate, at least one eligible adult (18 or older; children participate only through a parent applicant), the income test, and all three resource tests.Requirements coverage
Research catalogued 38 requirements. The user-approved scope, as amended after review round 1, implements 23 of them with executable logic and dedicated tests, plus 2 in-scope requirements that are documented no-ops in the flat-grant era: REQ-024 (the current rule requires ignoring in-kind/vendor payments, and no such input exists) and REQ-034 (homeless AUs receive the full grant — which every eligible unit already receives under the flat design). The remaining 13 requirements are excluded by design (table below); the post-review amendment moved REQ-020's education-expense carve-out into that group. The requirements tracker verified all in-scope requirements against the files on disk with zero gaps, and the 141 test cases across 17 files all use 0.01 error margins. Every grant era has a boundary test (January 2022 through January 2027), January 2021 verifies that pre-program periods pay $0, and round-1 additions pin the month-level boundaries at the June 1, 2021 start (May vs June 2021) and the July 1, 2025 era flip (June vs July 2025), plus whole-year summation cases for 2021 (7 × $332 = $2,324) and 2026 (6 × $486 + 6 × $504 = $5,940).
Not modeled
rental_incomeinput; the net-unearned treatment (REQ-021) subsumes both approximatelyeducational_assistancecounts gross because no expense-breakdown input exists — an intentional approved approximation documented in the unearned-sources parameterpersonal_propertyinput carries reported non-cash personaltyKey modeling decisions
The following choices were made by the user during scope review and, where noted, amended after review round 1:
in_effectparameter that switches to true on 2021-06-01.ca_state_supplement), and CalWORKs (TANF) receipt bar a person. An SSP-only recipient is treated exactly like an SSI recipient: barred from the AU, with the SSP counted toward the unit's income. CAPI receipt intentionally does not bar eligibility, and CAPI cash is intentionally not counted in unearned income — a user decision that diverges from the literal "all income in the AU" reading; both margins are documented in the parameter file and pinned by tests.is_part_time_college_student, the model's only part-time enrollment input). The handbook bars an employable who is "attending school" without qualifying full- or part-time attendance. The incapacity carve-out is retained: an incapacitated student stays linked through the incapacity arm. The child high-school path keeps its full-time requirement, which HL Implement Vermont H-0619 Millionaire Tax #7356 states explicitly.is_incapable_of_self_careinput.ssi_lives_in_medical_treatment_facilityinput; GR's facility definition is broader than SSI's medical-facility concept (documented in the variable).Historical notes
in_effectreturns false before June 2021, so the model pays no San Bernardino GR in earlier periods.Review
The implementation went through two full
/review-programrounds. Round 1 (REQUEST CHANGES: 2 critical, 10 should-address, 10 suggestions) drove the scope amendments noted above plus: a newmax_unit_sizeparameter replacing the hard-coded grant-table cap, anage < 19comparison fix so float ages keep 18-year-olds in the child-student band (the parameter stays 18, matching the source text), quoted reference titles across all 16 parameter files (unquoted#had truncated the loaded titles), corrected Chapter A page citations, relocation of thein_sbdtest to mirror the variable's path, and 22 new test cases. Round 2 confirmed all 22 round-1 findings resolved, with zero open critical findings and zero PDF mismatches across 75 verified values; final severity COMMENT.Verification TODO
eligibility/age_threshold.yamlis an inference — GRPHB Chapter A limits GR to "needy adults" without stating a numeric age; the parameter file discloses the inference. Verify against county practice if documentation surfaces.Files added
52 files changed (+3,652 lines): 16 parameter files, 17 variable files, 17 test files (141 cases), 1 changelog fragment, and a
programs.yamlentry.🤖 Generated with Claude Code