KPI Matrix Reference Public

Scoring & Rating Bands

Reference & Standards Scoring & Rating Bands How a raw number — a 96% attendance rate, a 3.2-hour resolution time — becomes a fair 1.00–5.00 score, and how those scores roll up…

Guide version: r1 Module version: 1.4.0 Updated: 2026-07-22 Estimated time: 4 min 3 views
Reference & Standards

Scoring & Rating Bands

How a raw number — a 96% attendance rate, a 3.2-hour resolution time — becomes a fair 1.00–5.00 score, and how those scores roll up into one composite and a rating. This is the maths that makes every metric comparable.

The 1.00–5.00 scale & rating bands

Everything the module scores — each metric, each category, the composite — lives on the same continuous 1.00–5.00 scale (stored to two decimals). Five named bands divide it up:

4.50 – 5.00
Outstandingconsistently exceeds expectations
3.50 – 4.49
Exceeds Expectationsfrequently surpasses requirements
2.50 – 3.49
Meets Expectationssatisfactorily fulfils the role
1.50 – 2.49
Needs Improvementbelow acceptable standard
1.00 – 1.49
Unsatisfactorysignificantly below minimum

Normalization — raw value → 1–5 score

Each metric defines five threshold bands in its own natural unit (see the catalogue). To score a raw value the engine finds which band it falls in, then interpolates within that band — so scoring is smooth, not a blunt five-step ladder.

  1. Match the band

    The raw value is matched against the metric's five threshold ranges, each of which owns a slice of the 1–5 scale (Outstanding → 4.50–5.00, Exceeds → 3.50–4.49, and so on).

  2. Interpolate inside the band

    Where the value sits within its band's range determines the exact score. A value at the very top of the Meets range scores near 3.49; near the bottom, near 2.50.

  3. Clamp out-of-range values

    A value beyond the metric's authored range lands in the extreme band that owns that end — it can't “overflow” to a perfect 5.00 or an automatic 1.00.

  4. Null → excluded

    If the raw value is null (no data, or a divide-by-zero), the metric returns null and is left out of the roll-up — its weight is handed to the metrics that did compute.

// within-band linear interpolation
position = (raw − band_min) / (band_max − band_min)     // ↑ higher-is-better
position = (band_max − raw) / (band_max − band_min)      // ↓ lower-is-better
score    = band_base + position × (band_ceiling − band_base)
score    = clamp(score, 1.00, 5.00)

Direction — which way is “good”

A metric's direction is the only thing that flips the interpolation:

↑ highera bigger raw value earns a bigger score (attendance, completion).
↓ lowera smaller raw value earns a bigger score (absence, resolution time).
◑ target-banda middle raw value earns the biggest score (see below).

Bell-curve (target-band) metrics

Three metrics — Overtime Utilization, Leave Utilization, Leave Balance — are healthiest at a moderate value, so their bands are arranged with the top score in the middle of the range. Both extremes score low.

Overtime ÷ regular hoursReads asScore band
0 – 5%under-utilizedMeets
5 – 15%healthyOutstanding
15 – 25%elevatedExceeds
25 – 35%overworkNeeds Improvement
> 35%burnout riskUnsatisfactory
????
This is on purpose: a KPI system that always rewarded “more overtime” or “less leave taken” would encourage burnout. Rewarding the healthy middle is the responsible design.

Rolling up to the composite

The composite is a two-level weighted average, skipping nulls at both levels.

  1. Category score

    Within a category, metric scores are blended by their metric weights — over the non-null metrics only:

    category_score = Σ(metric_score × metric_weight) / Σ(metric_weight)   // non-null metrics
  2. Composite score

    Category scores are blended by their category weights — over the categories that produced a score:

    composite_score = Σ(category_score × category_weight) / Σ(category_weight)
    rating_band     = band(composite_score)

Worked example (General Staff)

category_scores:  ATT 4.08 (20%)   TSK 3.75 (20%)   PRJ 3.50 (10%)   TKT 4.20 (10%)
                  BHV 5.00 (10%)   LVE 3.60 (5%)    PRF 3.00 (10%)   TMS 3.80 (15%)

composite = (4.08·20 + 3.75·20 + 3.50·10 + 4.20·10
           + 5.00·10 + 3.60·5  + 3.00·10 + 3.80·15) / 100
          = 388.6 / 100
          = 3.89   →   Exceeds Expectations

Exceeds Expectations — which, for a General-Staff role, would generate a +1 salary step recommendation. See Salary Progression.

Data sufficiency & confidence

A score is only as trustworthy as the data behind it. The engine tracks data sufficiency:

coverage = (metrics_total − metrics_null) / metrics_total × 100
≥ 60% — sufficient

The composite is treated as reliable and shown normally. The detail modal's data-sufficiency bar is green.

< 60% — low confidence

The composite is still produced but flagged. Surface it, but exclude it from rankings and pay decisions. The bar is amber.

Fair-handling edge cases

Someone with only a few weeks in the period will legitimately have low coverage. They're flagged Insufficient Data and should be excluded from forced ranking; first-cycle reviews can apply relaxed thresholds via a template override.
An employee on leave for most of the period will show null or low operational metrics. Flag “Extended Leave”, keep the available metrics for a partial read, and let the reviewer add a note or an override on the assignment rather than reading the composite at face value.
Every metric returns null when its denominator is zero — no scheduled days, no tasks, no tickets, no leave credits. Null is excluded and its weight redistributed; it never silently becomes a 1.00.
Every metric score persists its raw value, its normalized score, and a JSON computation log (inputs + formula + timestamp). Any composite can be traced all the way back to its inputs — essential when a score drives a pay decision.
????
Where next? Browse the thresholds per metric on The 29 Metrics, or follow the composite into pay on Salary Progression.
Was this guide helpful?

Report a content problem