-
Notifications
You must be signed in to change notification settings - Fork 10
Description
Context
We currently materialize only two CPS current health coverage flags in policyengine-us-data (NOW_MRK -> has_marketplace_health_coverage and NOW_GRP -> has_esi). After reviewing the CPS ASEC health insurance structure, this is too narrow for a clean PolicyEngine model.
Census structures current coverage as multiple independent NOW_* flags rather than a single mutually exclusive status. Multiple current coverages are possible, so we should not collapse these into one enum at the data layer.
What to add
Import and expose person-level reported current-coverage inputs from CPS as independent booleans, using explicit reported_..._at_interview naming. Likely minimum set:
reported_has_employer_sponsored_health_coverage_at_interview(NOW_GRP)reported_has_direct_purchase_health_coverage_at_interview(NOW_DIR)reported_has_marketplace_health_coverage_at_interview(NOW_MRK)reported_has_subsidized_marketplace_health_coverage_at_interview(NOW_MRKS)reported_has_unsubsidized_marketplace_health_coverage_at_interview(NOW_MRKUN)reported_has_medicare_health_coverage_at_interview(NOW_MCARE)reported_has_medicaid_health_coverage_at_interview(NOW_CAID/NOW_MCAIDas appropriate in CPS naming)reported_has_chip_health_coverage_at_interview(NOW_PCHIP)reported_has_other_means_tested_health_coverage_at_interview(NOW_OTHMT)reported_has_tricare_health_coverage_at_interview(NOW_MIL)reported_has_champva_health_coverage_at_interview(NOW_CHAMPVA)reported_has_va_health_coverage_at_interview(NOW_VACARE)reported_has_indian_health_service_coverage_at_interview(NOW_IHSFLG)
Derived data-layer summaries that are also reasonable to publish:
reported_has_private_health_coverage_at_interviewreported_has_public_health_coverage_at_interviewreported_has_multiple_health_coverage_at_interviewreported_is_insured_at_interviewreported_is_uninsured_at_interview
Important modeling boundary
These should remain reported survey facts. They should not be overwritten or reconciled away in the data layer if they conflict with modeled eligibility.
Relationship to take-up
The intent is to match the existing SSI/SNAP pattern more closely, not to bypass take-up calibration.
In other words, these reported current-coverage variables should be imported as raw survey facts, but then used as an input/anchor for enrollment assignment in the same spirit as snap_reported and ssi_reported are used in add_takeup().
For ACA / Medicaid, the desired behavior is closer to:
- keep
reported_*_at_interviewas raw inputs - use them to prioritize or inform take-up / enrollment assignment
- still allow the take-up layer to shift people around to hit enrollment targets
- avoid treating reported current coverage as immutable final truth when it conflicts with modeled eligibility or aggregate enrollment targets
So this issue is about adding the reported inputs and preserving them, but not about replacing the target-matching take-up machinery.
Why this matters
- avoids collapsing multi-coverage into an enum too early
- gives
policyengine-usenough raw inputs to compute effective/canonical health coverage separately - keeps reported survey state separate from simulated take-up state
- sets us up to detect report-model conflicts instead of silently erasing them
Sources
- CPS ASEC API variables:
NOW_*current coverage fields - Census health insurance programming guidance: current coverage is not modeled as a single exclusive status