Skip to main content

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.

  1. Admin → Reference data → Start a draft.
  2. If the pack needs its own value chain, open Value chains and add a lifecycle to defined in the JSON: an id, a label, 2–10 phases (key, name, definition) and weights mapping each role subcategory to phase shares that sum to 1. Apply changes.
  3. 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).
  4. 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).
  5. 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.
  6. 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:

  1. packages/core/src/reference/builtin/packs.ts: add an IndustryPackData entry with id, label, description, overlay (an array of { pattern, roleCategory, roleSubcategory, usSoc2018, ukSoc2020 }), optional lifecycleId and copilotFit: { high, low }. The banking pack (BANKING_OVERLAY) is a worked example.
  2. For a value chain, add a DefinedLifecycle to builtin/lifecycles.ts and include it in the built-in lifecycles.defined.
  3. Add a test in packages/core/test that 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_pack stores the id. Creating or updating an engagement checks it exists in the current reference version (unknown_pack otherwise).
  • getIndustryPack(ref, id) falls back to general when a dataset's pinned version doesn't have the id, so removing a pack in a later version never breaks older datasets.
  • Classification: resolveDeterministically applies classificationByPack after 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.
  • buildDatasetSummary uses the pack's lifecycle as the value-chain lens when it covers a meaningful share of the workforce.
  • copilotFitFor checks the pack's high and low lists before anything else.
Overlay rules or base taxonomy rules?

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.