Skip to content

Close the NOEMP/FIRMSIZE coding-default collision before the C1/C2 freeze #208

Description

@MaxGhenis

The #195 and #204 reviews both flagged the same latent seam, neither blocking its own PR; filing it so the C1/C2 freeze checklist owns it.

banding.py's coding argument defaults to "ipums_firmsize" (banding.py:256). The per-vintage guards make NOEMP-only codes raise loudly, but three codes are valid in both code spaces and silently mis-band if a NOEMP caller omits coding:

  • 2011–2018 code 4 → banded B10_49, true band B100_499
  • 2011–2018 code 6 → banded B50_99, true band B500_PLUS
  • 2019+ code 5 → banded B10_49/B50_99 straddle, true band B500_PLUS

Latent today because #204's reader does not call banding yet; it becomes active the moment the ASEC NOEMP output meets the target pipeline.

Two closes on the table (either satisfies both reviews):

  1. Add label-verified CPS ASEC firm-size (NOEMP) reader with band-regime maps #204's reader emits CanonicalBand directly via noemp_to_canonical (the option daphnehanse11 offered on the Employer-firm Workstream B: canonical banding (C2), ADR 0003, target pipeline (#192) #195 thread), so no downstream caller ever passes raw NOEMP codes to banding — preferred.
  2. Drop the coding default in banding.py so callers must state the code space.

Refs: the #195 review (approval notes, residual item) and the #204 review (approval notes). Should be closed before the joint C1/C2 freeze sign-off.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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