Taxonomy
Source: SOURCE-OF-TRUTH.md · synced 2026-06-12
Locked 2026-05-25. Three levels: sub_function → sub_vertical → tag. The first two are stable structural layers. The third (tags) is bootstrapped from data, not pre-defined — see §2 Step 3.1 note.
3a. Sub-Functions (top level — 5)
| ID | Display name | Calibre’s folder | CV count | JD count |
|---|---|---|---|---|
cargo-ops | Operations — cargo, commodities brokerage | reference/Operations - cargo, commodities brokerage/ | 21 | 19 |
ship-ops | Operations — ship, shipping brokerage | reference/Operations - ship, shipping brokerage/ | 23 | 8 |
risk-analytics | Risk — Analytics | reference/Risk - Analytics/ | 25 | 5 |
finance-fo | Finance — RM, wealth management, FA, channel/institutional/fund sales | reference/Finance - RM, wealth management.../ | 17 | 5 |
ops-back-office | Operations — banks, finance brokerage, funds, asset management | reference/Operations - bank, finance brokerage.../ | 21 | 4 |
| Totals | 107 | 41 |
(Reference set has ~113 files total; ~107 are CVs after stripping images, screenshots, scanned-image PDFs. Final count after parser batch run.)
3b. Sub-Verticals (mid level — derived from Calibre’s JD folder structure)
| Sub-function | Sub-vertical IDs | Derived from |
|---|---|---|
cargo-ops | agri, energy, metals | Calibre’s JD/Operations- cargo, commodities brokerage/{Agri,Energy,Metals}/ |
ship-ops | tanker, drybulk, container, offshore-support, broker | JD/Operations- ship, ship brokerage/Tanker/ + the flat JDs at the parent level (Drybulk, Container, Offshore Support, Broker Drybulk+Tanker) |
risk-analytics | credit, market, operational, product-controller, trading-analytics | Risk JDs are flat — each JD itself is the sub-vertical |
finance-fo | rm, wealth-mgmt, institutional-sales, portfolio-mgmt, trading | Five Finance JDs are flat — each is one sub-vertical |
ops-back-office | aml, compliance, assistant-rm, finance-ops | Four ops-back-office JDs are flat — each is one sub-vertical |
The sub-vertical layer matters because rubrics fire at sub-vertical granularity. An LNG energy operator and a fertilizer agri operator both live under cargo-ops but score against very different criteria. Rubric configs key on (sub_function, sub_vertical).
3c. Tags (leaf level — bootstrapped from CV↔JD pilot match)
Approach: emergent, not designed. See §2 Step 3.1 note. The tag vocab will be the output of a lean pilot match — not a deliverable that has to land before the pilot runs.
Tentative draft tags below seed the bootstrap pilot (Claude can refine, drop, rename, add):
{
"cargo-ops.agri": ["biofuels", "coffee-cocoa", "edible-nuts", "fertilizers",
"grains-oilseeds", "oleochemicals", "rice", "sugar", "veg-oil"],
"cargo-ops.energy": ["crude-oil", "fuel-oil", "lng", "lpg", "light-ends",
"middle-distillates", "petrochemicals", "thermal-coal"],
"cargo-ops.metals": ["base-metals", "ferrous", "precious-metals"],
"ship-ops.tanker": ["chemical-tanker", "lng-carrier", "lpg-carrier", "crude-tanker"],
"ship-ops.drybulk": ["panamax", "capesize", "handysize", "supramax"],
"ship-ops.container": ["liner-ops", "feeder"],
"ship-ops.offshore-support": ["psv", "ahts", "rig-support"],
"ship-ops.broker": ["voyage-charter", "time-charter", "sale-purchase"],
"risk-analytics.credit": ["counterparty", "settlement", "exposure"],
"risk-analytics.market": ["var", "p&l-attribution", "pricing-models"],
"risk-analytics.operational": ["controls", "incident-mgmt", "regulatory"],
"risk-analytics.product-controller": ["valuation", "p&l-explain", "reserves"],
"risk-analytics.trading-analytics": ["quant", "model-validation", "backtesting"],
"finance-fo.rm": ["onshore-hnw", "offshore-hnw", "uhnw"],
"finance-fo.wealth-mgmt": ["product-spec", "advisory", "discretionary"],
"finance-fo.institutional-sales": ["funds", "asset-mgrs", "pension-funds"],
"finance-fo.portfolio-mgmt": ["equity", "fixed-income", "multi-asset"],
"finance-fo.trading": ["sales-trading", "execution"],
"ops-back-office.aml": ["transaction-monitoring", "kyc", "sanctions"],
"ops-back-office.compliance": ["mas-compliance", "advisory-compliance"],
"ops-back-office.assistant-rm": ["client-servicing", "documentation"],
"ops-back-office.finance-ops": ["reconciliation", "fund-accounting", "trade-support"]
}These are seed candidates, not the locked vocab. Locked vocab is whatever the pilot match returns.
Relationship to the 4 grant verticals
CLAUDE.md and grant docs reference 4 verticals: Commodities & Renewables, Shipping & Maritime, Offshore Services & Start-ups, Technology & Gaming. These were the proposal-level marketing framing. The 5 sub-functions are the operational classification driven by Calibre’s actual data.
Mapping:
| Grant vertical | Operational sub-function(s) | Notes |
|---|---|---|
| Commodities & Renewables | cargo-ops | Plus risk slice |
| Shipping & Maritime | ship-ops | Plus risk slice |
| Offshore Services & Start-ups | (none yet) | No CVs / JDs from Calibre. Aspirational vertical. |
| Technology & Gaming | (none yet) | No CVs / JDs from Calibre. Aspirational vertical. |
| (cross-cutting) | risk-analytics | Touches commodities + maritime + finance |
| (new — not in grant) | finance-fo | Calibre added 2026-05-23. Marketing as “Banking / Finance” vertical for audit. |
| (new — not in grant) | ops-back-office | Same. Marketing as “Banking Operations” vertical. |
Action: when the Step 10 productisation surface ships, list 5 vertical “packs” on the marketing page: Commodities, Maritime, Risk & Analytics, Finance / Wealth, Banking Operations. The two original aspirational verticals (Offshore, Tech & Gaming) become “coming soon” placeholders. This keeps the grant’s “4+ verticals” claim defensible while reflecting real built coverage.
Superseded — original flat tag vocab proposal
The original taxonomy in plans/step-5-phase-2-cv-normaliser-design.md (formerly 2026-05-19-title-normaliser-design.md) was a flat 2-level vocab (cargo-ops:[energy:oil, metals:base, ...]). That doc is superseded by §3a/3b/3c here. The 3-level hierarchy + bootstrap approach is canonical. The original 2026-05-19 plan stays in the repo for audit traceability but its taxonomy section is no longer authoritative.