Skip to content

Import CPS current health coverage flags as reported variables #629

@daphnehanse11

Description

@daphnehanse11

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_MCAID as 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_interview
  • reported_has_public_health_coverage_at_interview
  • reported_has_multiple_health_coverage_at_interview
  • reported_is_insured_at_interview
  • reported_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_interview as 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-us enough 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions