WW-80 (WING-77) — MOS ↔ occupational-series crosswalk join feasibility¶
Spike research. Produced by fleet worker (grok kind, DESKTOP-D249KD4), 2026-07-24. Reviewed and committed by WT-2f62.
Question¶
Can we chain MOS → O*NET-SOC → OPM occupational series to build "your 25B maps to federal series 2210" queries, using published crosswalk data (O*NET/DMDC military crosswalk + USAJOBS occupational-series codelist)?
Answer¶
Not as a reliable, complete three-table chain. The left hop (MOS → O*NET-SOC) is solved
data via the DMDC/O*NET military crosswalk. The right hop (O*NET-SOC → OPM series) has no
published standard crosswalk file — DMDC's embedded OPM rows almost never carry O*NET codes
(the G.ONET reverse-join table is ~0.8% filled). A usable "25B → 2210" style query is still
buildable, but only via a hybrid design: structural priors (DODOCC → series) + lexical
title matching + family priors, emitting ranked search seeds, never equivalence claims.
Gap detail¶
| Gap | Detail |
|---|---|
| No published SOC↔OPM file | Cannot implement O*NET-SOC → series as a standard O*NET crosswalk hop. |
| G.ONET almost empty | 0.8% fill → reverse O*NET join unusable. |
| DODOCC taxonomy mismatch | Military IT (153100) ≠ federal IT series DODO (270500 for 2210). Cyber DODOs (117000/127000) map to zero series. |
| ~45% military active rows | No DODOCC→G hit at all. |
| Obsolete / aliased codes | AFSC X placeholders, skill digits, redesigns (3D0→1D7). Army ASI/SQI (J/Q) not the primary MOS. |
| Fan-out / noise | DODOCC med 2 / max 24 series; keyword hits 10–28 with false friends (IT in "Credit Union", material in nuclear materials, student-trainee series). |
| OnLine breadth vs DMDC primary | UI returns many occupations per MOC; good for discovery, bad if treated as official multi-series equivalence. |
| Licensure / agency constraints | Series presence ≠ hiring path, grade, or credential (68W; DHS-only cyber series). |
Fan-out summary (design input)¶
| Layer | Typical fan-out | Notes |
|---|---|---|
| DMDC primary O*NET per MOC | 1 (sometimes 2–4) | Tight but often coarse (15-1299.00 for 25B). |
| OnLine Military Transition Search | Many (often 10–20+ for popular MOS) | Multi-source; exploration-oriented (report). |
| DODOCC → series | median 2, max 24 | Partial coverage; uneven quality. |
| Naive title keywords → series | ~10–28 | Needs denylist + ranking. |
Recommended join design + open questions¶
Recommended query-builder (hybrid, v1)¶
Goal: Produce ordered search seeds for USAJOBS (JobCategoryCode + Keyword), not equivalences.
input: service, moc_raw, optional rank/shredout
1. Normalize MOC
- Army: strip skill level if present; prefer primary MOS over ASI/SQI
- AF/SF: expand X-skill (3D0X2 → try 3D051/52/71/72…); if obsolete, follow successor table (3D0* cyber → 1D7*)
- Match DMDC on (SVC, MPC, MOC) with STATUS=A preferred; else last obsolete with ONET/DODOCC
2. Structural candidates (score high when present)
- S_dodo = active G series sharing DODOCC
- Filter: drop student-trainee (*99), maritime 99xx unless Navy transition mode, DHS-only unless user opts in
3. Lexical candidates (score medium)
- Tokenize MOC_TITLE + ONET titles
- Match against USAJOBS/G series titles (and optional family 2200/2000/0600…)
- Denylist brittle substrings; require word-boundary matches
4. Optional occupation-breadth keywords (score medium-low)
- Use DMDC ONET titles always
- Optionally expand via OnLine/Web Services military search (cap N occupations)
- Convert titles → USAJOBS Keyword strings (not automatic series claims)
5. Rank & cap
- score = w1*dodo_hit + w2*title_jaccard + w3*family_prior(IT→2200, supply→2000, …) + w4*popularity_prior(2210,2001,…)
- emit top_N series (N=3..5 default) + top_K keywords
- always attach disclaimer string (Kerr rule)
6. Fallback
- if zero series after filters: Keyword-only search from MOC title + ONET title; no JobCategoryCode
- never invent series codes not in USAJOBS codelist
Example outputs under this rule (illustrative seeds):
| MOS | Top series seeds (illustrative) | Keyword fallback seeds |
|---|---|---|
| 25B | 2210, 0335, 1550/0854 (lexical) — not DODOCC-only 0332/0356 alone | "information technology", "systems administrator", "network" |
| 88M | 5703, 2151 (+ optional 2101 lexical) | "truck driver", "motor vehicle", "dispatcher" |
| 92Y | 2001, 2010, 2005 (+ optional 0346) | "supply", "inventory", "logistics" |
| 68W | 0640, 0621 (+ optional 0620 if licensed UX) | "paramedic", "EMT", "health technician" |
| 3D0X2 / 1D7X1 | 2210 (+ 1550/0854 lexical; avoid auto-adding DHS-only) | "cyber", "information security", "network administrator" |
What not to build¶
- A hard-coded claim graph "MOS equals series."
- UI copy that sounds like OPM classification decisions.
- Sole reliance on DODOCC or sole reliance on a non-existent SOC↔OPM file.
Open questions¶
- Will O*NET/DMDC ever publish a real SOC↔OPM or fill G.ONET? Worth a short contact to O*NET Center / DMDC; until then assume hybrid forever.
- Curated high-volume MOS table? For top ~50 transition MOSs, a maintained seed list (with review) may beat pure joins — especially IT/cyber.
- AFSC successor maintenance: Who owns 3D0→1D7 (and future) alias tables — product data job vs vendor file only?
- DHS-only 2212–2230 series: Show always / never / advanced toggle?
- WG vs GS: Should motor transport default to WG
5703seeds, GS2101, or both with labels? - Licensure gates in UX: For 68W/medical, how explicit before showing
0620/0602? - Refresh cadence: DMDC zip naming (
milx0724) suggests periodic drops; USAJOBS codelist is live API — version both. - Web Services vs zip: Prefer offline zip for batch joins; optional OnLine breadth for interactive UX only.
- Legal copy: CC BY attribution for O*NET materials; USAJOBS API ToS for job search; never imply OPM endorsement.
Direct answers to the ticket questions¶
| Question | Answer |
|---|---|
Can we chain MOS → O*NET-SOC → OPM series using published files? |
Not as a reliable complete chain. Left hop yes; right hop has no published SOC↔OPM crosswalk, and DMDC's embedded OPM rows almost never carry O*NET codes. |
| Can we still seed "25B → 2210" style queries? | Yes, via hybrid design (lexical + priors + optional DODOCC), with Kerr wording. |
| Coverage gaps? | No SOC↔OPM file; G.ONET empty; ~45% mil rows miss DODOCC→series; AF cyber DODO→0 series; obsolete AFSCs; fan-out noise. |
| Fan-out? | DMDC O*NET ~1; DODOCC series median 2 (max 24); keywords 10–28 before ranking. |
| Query-builder rule? | Top-N series by (DODOCC directness + title match + family prior), plus keyword fallback; never fit claims. |
Sources cited¶
- USAJOBS Developer — Occupational series codelist; live API
https://data.usajobs.gov/api/codelist/occupationalseries(unauthenticated). - USAJOBS Developer — Search API /
JobCategoryCode. - USAJOBS Developer — Terms of Use.
- O*NET Resource Center — Crosswalk Files; military zip
https://www.onetcenter.org/dl_files/2019/military_crosswalk.zip(milx0724CSV/XLSX/ACCDB + Read Me). - O*NET Resource Center — Military Transition Search report.
- O*NET OnLine — MOC crosswalk UI; crosswalk index.
- O*NET licenses — Resource Center CC BY 4.0; Database CC BY 4.0.
- OPM — GS classification / Occupational Handbook PDF.
- DMDC — cited as source inside O*NET military crosswalk Read Me (Defense Manpower Data Center).
Bottom line for WING-77: Treat MOS→O*NET as solved data, MOS→series as a product ranking problem over partial structural joins + lexical seeds — not a single clean three-table chain. Ship search seeds; never ship fit claims.