The scores exist to help an individual decide which NICE work roles their evidence points to, which competency statements they are missing, and what to learn next. They are intended for career development and workforce planning. They are not intended or validated for employment selection, and must not be the sole basis of hiring, promotion or termination decisions.
The framework supplies the construct: each work role is a set of Knowledge (K) and Skill (S) statements (NICE v2.2.0: 42 roles, 693 K and 556 S statements; Task statements are counted but not scored). For a person and a role the engine produces:
Evidence is everything the person enters or imports: headline, résumé text, roles held with descriptions, education, projects and labs, self-listed skills and certifications, and — when they apply them — the structured fields an AI pass extracts from the résumé (§5).
Text is lower-cased, tokenised on non-alphanumerics and stripped of stop-words and words shorter than three characters. Each framework statement has a set of distinctive tokens weighted by inverse document frequency over all statements: idf(t) = ln(N ÷ (1 + df(t))) + 1, with unseen terms given 3.2. A statement's hit is the IDF-weighted share of its tokens present in the evidence:
hit(s) = Σ_t∈s idf(t)·[t ∈ evidence] + 0.35·Σ_t∈s idf(t)·[t ∈ expansions] ÷ Σ_t∈s idf(t)
Expansions come from the rule engine: when a trigger such as SIEM, IR or pentest appears in the evidence, the rule's framework vocabulary is added at 0.35 credit — enough to tip a near-miss, not to create a match. The rule set is admin-editable and versioned (r-…). A statement counts as matched when
hit(s) + 0.10 · w_AI(s) ≥ 0.30
where w_AI(s) ∈ [0, 1] is the weight of a validated AI proposal for that statement (§5), and 0 otherwise. Disputed statements never count.
coverage = matched ÷ total sizeFactor = min(1, 0.42 + 0.58·√(total ÷ 95)) // damps coverage on small roles semantic = cosine(tf(evidence), tf(role description + statements)) matchedMass = matched ÷ (matched + 25·bar) // saturating count of matches raw = 0.35·(covForScore·sizeFactor) + 0.30·semantic + 0.35·matchedMass score₀ = min(99, round(raw^0.62 · 132)) score = round(0.5·score₀ + 0.5·stagePct) // see §4
Why matched mass. A finite résumé can only evidence so many statements, so ratio coverage structurally favours small roles however hard it is corrected; counting absolute matches, saturating, is what stops a 30-statement role out-ranking the role the person actually does. The weights (0.35/0.30/0.35), the size factor and the curve were set by judgement and checked on sample profiles; they are not fitted to outcome data.
The framework has no levels. Talent2Role adds five stages from years of relevant experience and classifies every statement once as Foundational, Practitioner or Advanced by deterministic rules on its text (admin overrides possible). Each stage carries weights per tier and a bar: the weighted coverage that counts as "ready" at that stage. A role is measured at the higher of the person's stage and the stage the role typically starts at.
| Stage | Relevant years | Weights F / P / A | Bar |
|---|---|---|---|
| Entering | 0–1 | 1.0 / 0.6 / 0.2 | 0.35 |
| Early career | 1–3 | 1.0 / 0.8 / 0.35 | 0.50 |
| Established | 4–7 | 0.8 / 1.0 / 0.6 | 0.65 |
| Senior | 8–12 | 0.6 / 1.0 / 1.0 | 0.80 |
| Leader | 13+ | 0.5 / 1.0 / 1.0 | 0.90 |
stagePct = min(99, 100·weightedCoverage ÷ bar), and covForScore = min(1, weightedCoverage ÷ bar). The bars are judgement values. A modified-Angoff standard-setting session with practitioners is the planned replacement (the admin tooling exists); when it runs, the bars and the session record are published here and the engine version bumps. Raw coverage is never adjusted by stage.
0.10 × weight to the lexical hit. Consequently a confirmed proposal can only flip a statement whose own hit is ≥ 0.20, and a suggested one ≥ 0.25. Calibration on the sample profile (2026-09-05): with every candidate confirmed, roles scoring ≥ 80 rose from 15 to 28 at 0.10 versus 34 under the previous binary override, and the top role was preserved; 0.20 reproduced the old override exactly.The band expresses how much, and how verifiable, the evidence is. Its half-width in points is
half = clamp( 17 − 0.018·min(words, 600) − 1.6·verif , 3, 17 )
where words is the evidence word count and verif sums: certifications listed (+1), a LinkedIn profile linked (+1), two or more roles held (+1), projects described (+0.5), structured extraction applied (+0.5), and a passed knowledge check for the role (+3). A 100-word profile with nothing else shows ±15; a 600-word profile with certifications, LinkedIn, roles and a passed check shows ±3. The band is displayed as "72% (64–80)". It is a heuristic uncertainty statement, not a statistical confidence interval, and it is labelled as such.
Deterministic checks mark a result provisional — on the certificate face, the verify page and the registry record — when the claims do not add up:
| Type | Status |
|---|---|
| Content | Role statement sets are the framework's own; item stems cite the K statements they test and were checked against the role's statement list. Practitioner review of the tiering rules and item banks: pending. |
| Response process | Every match is explainable and disputable; quotes and rules are recorded. Think-aloud studies: not done. |
| Internal structure | Weights and curve are judgement-set, checked on one sample profile per edition. Factor or dimensionality analysis: not done. |
| Relations to other variables | Criterion study (score vs. relevant years, certifications held, knowledge-check score) — the admin analytics compute this once n ≥ 100; no result yet. |
| Consequences | Intended use is development, not selection (§1). Misuse safeguards: terms, provisional flags, no title conferred. |
The engine is language-based and currently English-only; evidence written in other languages, or in non-native English, will match fewer statements. Statement matching depends on vocabulary overlap, so profiles written in framework language score higher than equally experienced profiles written in plain language — the rule engine and the AI layer exist to reduce, not remove, that effect. No protected attributes are collected; adverse-impact analysis by region will be run on de-identified aggregates when volumes allow and reported here.
Every credential and mapping record carries: engine version, rule-set hash, ontology version, mapping prompt version, item-bank version and the model name. Changing any of them bumps the corresponding version; records issued earlier keep theirs. This note is versioned with the engine. Questions about the method: info@quantumtaskai.com.
See also: Issuing policy · Trust, AI & integrity · Framework attribution