Add an industry pack
An industry pack is a deterministic, industry-specific layer chosen per engagement. It can add:
- overlay rules: ordered title patterns with their own role and SOC crosswalk, applied after overrides and before the shared cache and AI;
- a value chain (a defined lifecycle) used as the Overview's lens;
- Copilot fit lists that put roles in the high or low tier.
Packs are reference data (ReferenceData.packs), so there are two ways to add one.
Option A: through the admin editor (no deployment)
For an existing deployment, this is the normal route.
- Admin → Reference data → Start a draft.
- If the pack needs its own value chain, open Value chains and add a lifecycle to
definedin the JSON: anid, alabel, 2–10phases(key,name,definition) andweightsmapping each role subcategory to phase shares that sum to 1. Apply changes. - If the pack's rules assign roles that don't exist yet, add them in Roles (with a UK pay code and an anchor or rubric).
- Open Industry packs, type the new id (lower-case letters, digits,
-,_) and select +. Then set:- Name and Description (consultants see these when choosing a pack, and on the Methodology page);
- Value chain: the lifecycle, or Generic value chain;
- Overlay rules: pattern, category, subcategory, US code and UK code; order matters (first match wins);
- High-fit and Low-fit subcategories (Copilot).
- Fix anything in the problems list: every overlay rule's US code must be in the US catalogue and its UK code must have pay; the lifecycle must exist.
- Publish with notes. New engagements can choose the pack straight away.
Test patterns with Title rules → Try a job title for the base taxonomy; for overlay rules, upload a small staff list to a test engagement using the pack and check the Classifications tab shows Industry pack as the source.
Option B: in the built-in data (new databases)
To ship a pack with the code, so new databases get it in version 1:
packages/core/src/reference/builtin/packs.ts: add anIndustryPackDataentry withid,label,description,overlay(an array of{ pattern, roleCategory, roleSubcategory, usSoc2018, ukSoc2020 }), optionallifecycleIdandcopilotFit: { high, low }. The banking pack (BANKING_OVERLAY) is a worked example.- For a value chain, add a
DefinedLifecycletobuiltin/lifecycles.tsand include it in the built-inlifecycles.defined. - Add a test in
packages/core/testthat the built-in data still validates, and that representative titles classify through the pack (classificationByPack/resolveTitleClassification) with the expected codes.
Existing databases won't see a built-in change until an administrator publishes a version containing it: export the new built-in pack as JSON (or build it in the editor) and publish it as in option A.
How packs are used
engagements.industry_packstores the id. Creating or updating an engagement checks it exists in the current reference version (unknown_packotherwise).getIndustryPack(ref, id)falls back togeneralwhen a dataset's pinned version doesn't have the id, so removing a pack in a later version never breaks older datasets.- Classification:
resolveDeterministicallyappliesclassificationByPackafter overrides. The shared cache is keyed by pack id (classification_cache.context), so AI answers for one industry don't leak into another's context. - The pack label (unless it's
general) is added to the classifier's industry context alongside the client's sector. buildDatasetSummaryuses the pack's lifecycle as the value-chain lens when it covers a meaningful share of the workforce.copilotFitForchecks the pack's high and low lists before anything else.
Use a pack overlay when the mapping is industry-specific (a "relationship manager" in banking isn't one in insurance) and should carry its own SOC codes. Use the base Title rules when the role means the same thing everywhere.