Count reported SSI and TANF receipt in categorical eligibility lists - #9252
Draft
hua7450 wants to merge 4 commits into
Draft
Count reported SSI and TANF receipt in categorical eligibility lists#9252hua7450 wants to merge 4 commits into
hua7450 wants to merge 4 commits into
Conversation
Categorical-eligibility parameter lists referenced only the modeled benefit amounts (snap, wic), omitting the reported-receipt bare inputs (receives_snap, receives_wic). Households reporting receipt whose modeled amount is $0 were dropped from categorical eligibility, unlike the hardcoded formulas (Head Start, WIC, Medicaid community engagement) which OR both arms. Fixes #9247 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Isolate the DART WIC case by zeroing every other qualifying program, and add multi-person SPM unit cases to both cross-entity consumers (DART and MBTA) so the SPMUnit-to-Person projection of receives_snap is locked in for units with more than one member. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…into receives-flags-categorical-eligibility
5 tasks
Companion to the SNAP/WIC fix: categorical-eligibility parameter lists referenced only the modeled amounts (ssi, tanf), omitting the reported-receipt bare inputs (receives_ssi, receives_tanf). Households reporting receipt whose modeled amount is $0 were dropped from categorical eligibility, unlike the many formulas that OR both arms. DC POWER runs the opposite direction: disqualifying_benefits is a disqualifying list, so the missing flag made the model too generous. Fixes #9251 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
hua7450
force-pushed
the
receives-ssi-tanf-categorical
branch
from
August 7, 2026 15:45
69b3861 to
14596ed
Compare
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
Companion to #9248, for the other two reported-receipt flags. Categorical-eligibility parameter lists referenced only the modeled amounts (
ssi,tanf) and omitted the reported-receipt bare inputs (receives_ssi,receives_tanf), so a household reporting receipt whose modeled amount is $0 was dropped from categorical eligibility.Fixes #9251
Important
Stacked on #9248 — this branch is cut from
receives-flags-categorical-eligibility, notmain, because four of the parameter files and four of the test files overlap on adjacent lines. Merge #9248 first; this then rebases ontomainas a no-op. The diff shown againstmainwill include #9248's commit.Mechanism
receives_ssi(variables/gov/ssa/ssi/receives_ssi.py) — bare input:bool,Person, MONTH, no formula.receives_tanf(variables/gov/hhs/tanf/cash/receives_tanf.py) — bare input:bool,SPMUnit, MONTH, no formula.Entities are flipped relative to the SNAP/WIC pair (
receives_snapis SPMUnit,receives_wicis Person).The Python side was already well covered — roughly 50 formulas OR both arms, including
meets_snap_categorical_eligibility(with the all-members SSI rulespm_unit.all(receives_ssi)),is_head_start_categorically_eligible, and the Medicaid category variables. The gap was confined to parameter-driven lists.Changes
gov/usda/school_meals/categorical_eligibility.yamlreceives_tanfmeets_school_meal_categorical_eligibilitygov/fcc/lifeline/categorical_eligibility.yamlreceives_ssiis_lifeline_eligible,is_acp_eligiblegov/fcc/lifeline/tribal_categorical_eligibility.yamlreceives_tanfgov/ed/pell_grant/efc/simplified/benefits.yamlpell_grant_simplified_formula_appliesgov/states/tx/dart/qualifying_programs.yamlreceives_tanftx_dart_reduced_fare_program_eligiblegov/states/il/dceo/ihwap/eligibility/categorical_eligibility.yamlreceives_ssiil_ihwap_categorically_eligiblegov/states/dc/dhs/power/disqualifying_benefits.yamlreceives_ssidc_power_has_disqualifying_benefitsDC POWER runs the opposite direction
disqualifying_benefitsis a disqualifying list, so its missing flag made the model too generous — a household reporting SSI was not disqualified from POWER. Same one-line fix, opposite sign. Please don't read that row as a widening like the others.Checks performed
is_tanf_enrolledredundancy: it is defined asreturn spm_unit("receives_tanf", period), so any list already carrying it would not needreceives_tanf. None of the seven lists carry it, so all additions are live.il_tanf,dc_tanf), nottanf, so only the SSI arm applied there.ma_eaedc/ma_tafdcrather thantanf. Whether those need their own receipt flags is a separate question.receives_ssiis Person-entity and every consumer aggregates person → SPMUnit / Household / TaxUnit;receives_tanfis SPMUnit-entity and the Person-entity consumer (DART) projects SPMUnit → Person.Test plan
dc_power_has_disqualifying_benefits(which had none) covering both the disqualification and the negative case