A US-first plan for attaching job spells with employer attributes to the Populace dynamic person panel, following the ECPS recipe (impute from panel data → calibrate to administrative aggregates) and the populace-dynamics evaluation discipline (pre-registered gates, noise floors, one-shot candidate runs).
ESI/ACA employer mandates, state paid-leave and retirement-mandate thresholds, small-business exemptions — all keyed to employer size, which the CPS person record alone can't drive dynamically.
Separations, job-to-job moves, and tenure become modeled transitions, so earnings trajectories inherit realistic employer-attachment persistence instead of purely statistical noise.
A firm side (industry × size × geography) is the hook for minimum-wage incidence, payroll-tax pass-through, and eventually coworker/firm spillovers.
Same shape as the earnings pipeline: SIPP plays the role PSID plays for earnings (the label panel that trains and scores transitions), QWI/BDS play the role SSA aggregates play (calibration targets). No new evaluation machinery — job-spell views slot into the existing harness/ PanelView + moment battery, and every scored model goes through candidate registration and a one-shot run, like the US earnings candidates.
| Source | What it gives us | Role | Caveats |
|---|---|---|---|
| SIPP (2014+ panels) | Monthly job-level records: within-panel job IDs (EJB(n)_JOBID, dependent-interview-edited), start/end dates, industry, location/establishment size (EJB1_EMPSIZE — the redesign dropped the all-locations question), earnings per job, up to 7 jobs | Primary label panel — trains job-spell transitions and provides the holdout for gate scoring | IDs don't link across panels; seam effects; heterogeneous 1–4-year windows post-2018 (2018 panel is wave-1 only); measures establishment size, not firm size |
| CPS (ASEC + tenure supplement) | Industry, class of worker, firm size at all locations (NOEMP/IPUMS FIRMSIZE — the only worker-reported firm-size label available), job tenure (biennial supplement) | Cross-sectional base the spells are imputed onto (the ECPS host); primary firm-size training label | Worker-reported; no employer ID; tenure only biennial; size bands changed 2011–2018 vs 2019+ — pooled years must harmonize |
| LEHD QWI & J2J | Hires, separations, job-to-job flow rates by industry × firm size/age × geography × sex × age | Calibration targets for the match layer (microcalibrate) | Aggregates only — microdata is restricted; dimensions are pairwise-restricted (firm size XOR firm age; one demographic pair at a time; sub-sector industry × size at state level only; private ownership only); publishes mean earnings, never medians; extra release lag on size/age tabs; state coverage gaps |
| SUSB / BDS | Firm and establishment counts, employment by firm-size class × industry × state; firm entry/exit (BDS) | Margins for the synthetic firm register; firm birth/death rates for phase 2 | Firm ≠ establishment distinction needs care; size classes are banded |
| QCEW | Quarterly employment and wages by county × industry | Geographic/industry employment margins | No firm-size dimension at fine geography |
| PSID | Employer tenure, job-change indicators over 50+ years | Long-horizon validation (does simulated tenure accumulate realistically over decades?) | Person-level only; biennial after 1997; tenure series has wording/bracket breaks — needs a harmonized series |
| JOLTS · BED · NLSY · CBP · SynLBD (added in review round 1) | JOLTS: monthly hires/quits/layoffs by industry & establishment size. BED: quarterly job gains/losses by firm size. NLSY79/97: decades-long panels with true within-panel employer IDs. CBP: establishment size × county. SynLBD: public synthetic establishment panel with realistic firm dynamics | External cross-checks on flow rates (JOLTS/BED), long-horizon employer-attachment labels (NLSY), fine-geography register margins (CBP), phase-2 firm-dynamics shapes (SynLBD) | JOLTS/BED are establishment-based; NLSY cohorts aren't population-representative; SynLBD is itself synthetic — shapes, not truth |
The key constraint: the true matched employer–employee microdata (LEHD) is restricted. So we never observe a real firm's roster — we construct one that is consistent with every published margin. That's the same epistemic position ECPS is in with tax records, and the same answer applies: calibrate hard, validate against every aggregate that exists.
Mirrors gates.yaml discipline: person-disjoint 20% holdout, paired splits across candidates, half-vs-half noise floors on SIPP, thresholds locked before the first run, amendments public. Proposed battery:
| # | Moment / view | Reference | Pass criterion (to lock) |
|---|---|---|---|
| E1 | Employment share by firm-size class × major industry (cross-section) | SUSB | within ±5% relative on every cell ≥1% of employment |
| E2 | Separation, hire, and J2J rates by age band × sex | LEHD J2J | within noise floor × margin on each rate |
| E3 | Tenure distribution by age band (P25/P50/P75) | CPS tenure supplement | quantile error vs floor |
| E4 | 2-window employer-retention persistence (PanelView pairs, window 2) — does a person keep the same employer attributes next period? | SIPP holdout | geometry blocks vs half-vs-half floor |
| E5 | Multi-window attachment runs (window ≥3) — catches chained-model persistence understatement, the exact failure the earnings runs view exists for | SIPP holdout | runs-view geometry vs floor |
| E6 | Industry mobility matrix (origin × destination major industry) | SIPP holdout + J2J | row-wise distance vs floor |
| E7 | Earnings-by-firm-size gradient (mean monthly earnings across full firm-size × industry cells — QWI publishes means, not medians) | QWI earnings (EarnS) | cell-wise error vs floor (skew-sensitive; floor first) |
| E8 | Nonemployment spell durations (zero-spell battery, reused from moments.zero_spells) | SIPP holdout | existing zero-spell criterion |
| E9 | Earnings-change distribution conditional on transition type (stay / job-to-job / exit / entry) — the layering-coherence gate: does a simulated J2J move produce a realistic earnings change? | SIPP holdout | distributional distance vs floor, per transition type |
| E10 | Regression gate: the existing PSID earnings gates must still pass after the spell layer is attached — the employer extension may not silently degrade the ratified earnings model | existing gates.yaml views | unchanged pass on locked thresholds |
| E11 | Job-to-job flows by origin × destination firm-size class (the size ladder — first-order for minimum-wage incidence) | LEHD J2JOD | row-wise distance vs floor |
| E12 (phase 2 only) | Within-firm vs between-firm earnings variance decomposition + coworker-earnings correlation — the moments that would be wrong under random worker-to-firm assignment; plus firm growth-rate distribution and job creation/destruction vs BDS | published bias-corrected AKM/segregation estimates (Song et al.; KSS); BDS | variance shares within published CIs; BDS reallocation rates vs floor |
noise floors firstthresholds locked pre-runcandidates registered on issue #42 patternone-shot runs, committed artifacts in runs/
Transitions bunch at interview seams. Mitigation: estimate at wave frequency, treat within-wave months as interpolation; document in the floor-building run.
Firm rosters are synthetic by construction. We can validate every margin but never a real roster; phase-2 claims must be framed accordingly in the paper.
SIPP measures establishment size; CPS ASEC measures firm size, worker-reported; SUSB is administrative enterprise size. Band reconciliation isn't enough: pre-register whether the imputed variable means administrative firm size (SUSB-coherent, but survey labels are error-laden training targets) or reported size (then SUSB is the wrong E1 reference). Multi-job holders (~5% of workers) also break one-person-one-firm accounting — decide primary-job-only in phase 0 and adjust job-count vs person-count targets.
Job spells and earnings trajectories must stay coherent (a J2J move should move earnings). Proposal: earnings conditional on spell events (the MINT/PENSIM layering precedent) — but coherence is gated by E9 (earnings-change by transition type) and E10 (existing PSID gates must not regress), not by a cross-sectional gradient. The conditioning DAG across phases must be specified: phase 0 imputes tenure from covariates including earnings, so the ordering is circular as drafted.
SIPP identifies hazards over ≤4 years and IDs don't cross panels; no E-item as originally drafted covered decadal tenure accumulation. Add a PSID/NLSY-referenced long-window tenure view (the runs-view machinery generalizes). PENSIM's "no job changes after 50" shortcut is the cautionary tale.
Designed so two people can work in parallel with no blocking dependencies: everything meets at three frozen interface contracts, agreed in week 1 and versioned as code.
data/ (label-verified, family.py pattern); CPS ASEC NOEMP + tenure-supplement loaders; harmonized PSID/NLSY tenure seriesdata/external/ in the UK work), each with a provenance noteperson_id, spell_id, start_period, end_period, industry (major), firm_size_band, earnings_share, primary_job. A writes it, B reads it. Firm-size bands use the canonical banding B defines (C2). Multi-job resolved primary-job-only in phase 0.Sync points: week 1 (freeze C1/C2), week 4 (lock C3), week 10 (joint phase-2 go/no-go with Max). Everything else is asynchronous — A can build readers/imputation against fixture spells; B can build the target pipeline and register against a synthetic spell file conforming to C1.
| Model | Employer representation | Lesson for this plan |
|---|---|---|
| PENSIM (DOL/PSG) | Full job histories (start/stop, industry, firm size per job) from SIPP-estimated tenure models; no firm register — employers are attribute bundles on spells | Phases 0–1 are essentially PENSIM with a modern imputation stack plus pre-registration — proven territory. Its "no job changes after 50" shortcut shows what a too-short label panel forces |
| MINT (SSA) | Imports PENSIM job-change sequences, attaches to administrative earnings histories | The conditional-layering precedent — but MINT's earnings are administrative, so coherence is anchored; here earnings are modeled too, making E9/E10 load-bearing |
| DYNASIM4 (Urban) & CBOLT (CBO) | Job-change probabilities and industry/pension coverage as person-level states; no firms | 40 years of US dynamic microsimulation never needed a firm register for benefit-rules work — firm-size-as-covariate suffices for threshold policies |
| Census SIPP Synthetic Beta | Synthetic person records from linked SIPP–IRS–SSA; never released person-firm links | Its validation study found margin-matching did not deliver joint-distribution validity — the direct empirical warning behind E12 |
| Census SynLBD | Fully synthetic establishment panel with realistic growth/entry/exit; no workers in it | A synthetic firm register with credible dynamics is feasible; borrow its distributional shapes for phase 2. No one has published the matched worker-firm version |
| AKM / BLM literature | Measurement theory: firm effects, worker-firm sorting, firm-class discretization | Model firm types (BLM), not identities; target bias-corrected (KSS) variance shares — raw AKM estimates carry limited-mobility bias |
| MOSART (Norway) · Destinie (France) | MOSART: real register links. Destinie: sector-as-covariate, no employers | Employer realism exists where the data has links, not because anyone solved synthesis. Note: the UK follow-on is easier for phase 2 (ASHE is employer-sampled; IDBR margins are rich) |
| Workstream A — Daphne (person side) | Workstream B — Vahid (firm side) |
|---|---|
SIPP job-level reader (label-verified, family.py pattern); CPS NOEMP/tenure loaders; ADR drafted jointly · freeze C1/C2 | Target pipeline: SUSB/BDS/QWI/J2J/JOLTS extracts committed with provenance notes; canonical banding proposal (C2) |
| SIPP noise-floor runs; seam-vs-J2J reconciliation run; draft E3–E5/E8–E10 thresholds | Aggregate-side floor studies; target/gate partition; draft E1/E2/E6/E7/E11 thresholds · joint: referee round, lock C3 |
| Phase-0 QRF imputation of spells + attributes onto CPS | Calibration of the imputed file to partitioned QWI/SUSB cells; E1/E7 evidence artifacts |
| Phase-1 transition candidates registered; one-shot runs against locked gates | BLM firm-type register prototype; E12 feasibility study (are published AKM/coworker moments sufficient targets?) |
| Joint: phase-2 go/no-go review with Max, based on committed gate evidence + the E12 identification story | |