Health score

How the 0 to 100 health score is computed from faults, slot capture and question coverage, and how to tune it per rubric.

Every completed call gets a single health score between 0 and 100. It is designed to be comparable across agents, channels and time, and it is the number that alerts, the review queue and the threshold.breached webhook event work from.

The formula

The score is computed in two stages: a fault penalty, then a quality scaling.

penalty  = danger_faults × 15 + warning_faults × 5
base     = max(0, 100 − penalty)

quality  = (capture_weight × completion_rate + coverage_weight × coverage_rate)
           ÷ (capture_weight + coverage_weight)

score    = round(clamp(base × (0.5 + 0.5 × quality), 0, 100))
  • Danger faults cost 15 points each, warning faults 5 points each. Info faults cost nothing.
  • completion_rate is the share of required, applicable slots that were captured (see Slot capture).
  • coverage_rate is the share of required, applicable questions the agent asked.
  • capture_weight and coverage_weight come from the rubric's scoring settings and default to 0.5 each. If both are zero, quality is treated as 1 and the score is faults-only.
  • The quality term scales the base between 50% and 100%, so a call with perfect behaviour but nothing captured cannot score above 50, and a call that captured everything is judged purely on its faults.

Worked example

An agent call has one danger fault (COMPLIANCE_MISS) and two warnings (REPETITION, AGENT_LATENCY). The rubric has six required slots, of which five were captured, and four required questions, of which four were asked.

penalty  = 1 × 15 + 2 × 5      = 25
base     = 100 − 25            = 75
quality  = (0.5 × 5/6 + 0.5 × 4/4) ÷ 1 = 0.917
score    = 75 × (0.5 + 0.5 × 0.917) = 75 × 0.958 = 71.9 → 72

The call lands in the "needs work" band. Fixing the missed disclosure alone would lift it to 86.

What is excluded

  • Info-level faults never lower the score. This covers LINE_QUALITY, ASR_LOW_CONF, DIARIZATION_UNCERTAIN and a SENTIMENT_DROP that recovered before the end of the call. Line and transcription problems belong to the telephony and the recording, not to the agent.
  • Faults a reviewer marked as false positive are excluded from the danger and warning counts. Confirming or rejecting faults therefore changes the score, and the change is reflected in analytics.
  • Slots and questions in inactive case branches are NotApplicable and are excluded from both rates.

Bands

The dashboard uses three bands everywhere a score is shown:

ScoreBandTypical meaning
80 to 100HealthyNo danger faults, at most a couple of warnings, most slots captured
50 to 79Needs workA danger fault or several warnings, or noticeable capture gaps
0 to 49CriticalMultiple danger faults or very little captured

Where the score is used

  • Review queue: completed, unreviewed calls sorted worst-first, so QA time goes to the calls that need it.
  • Alerts: the AverageHealthScore metric averages the score over a window of calls or hours; see Alerts and digest.
  • Webhooks: an endpoint with a health-score threshold receives threshold.breached when a call scores strictly below it or contains at least one danger fault; see Webhooks.
  • Analytics: per-channel and per-agent averages, trends over time, and the calibration report.

Tuning the score

You tune the score through the rubric, not through a global setting:

  • Change the scoring weights to favour capture over coverage or vice versa. A collections rubric might set coverage (the mandatory disclosures) higher than capture.
  • Disable detectors that do not apply to a call type, so their warnings stop costing points. COMPLIANCE_MISS and FORBIDDEN_PHRASE cannot be disabled; remove the phrases instead.
  • Adjust thresholds for agent latency and dead air to match the medium. An outbound dialer bot and a human desk have different acceptable pauses.
  • Mark the slots that really matter as required; optional slots inform the scorecard but do not move the score.

Then verify the effect with a golden set: calibration re-scores your reference calls with the edited rubric and reports the error against the scores you expect.