CALL-QA

Quality control for sales calls where every score has to point at a line.

SPEECH-TO-TEXTSPEAKER ROLESMASKINGEVIDENCE CHECKSHARD RULESRETRIES · ALERTSNODE.JS · TYPESCRIPT
CALL C-108 1:41 ROLES BY CHANNEL · STEREO · EN 7 CRITERIA 1 RED FLAG SCORE 42 · FAIL SYNTHETIC CALL
TRANSCRIPT · SCORED IN THE MARGINMASKED BEFORE THE MODEL
U2MGRGood afternoon, Marina! It’s Nina, Northwind Air. I’m calling about your order for the bakery extract fan…GREETING 2/2LISTENING 2/2
U4MGRSure, go ahead, read me the card number.COMPLIANCE 0/2 · RULE
U5CLT[card number]. [card details]Read out as words; masked before anything is storedCOMPLIANCE 0/2 · RULEMASKED
U8MGRThe NW-RF-400E fan is in stock. If the payment goes through today before two, we ship tomorrow…RECOMMENDATION 0/2
U14MGRPerfect. Then I’ll send the shipping confirmation and the installers’ contacts by tonight.CLOSING 2/2

CARD DETAILS ON THE PHONE IS A HARD RULE: A RULE HIT FORCES COMPLIANCE TO 0, WHATEVER THE MODEL SAYS.

HEAT MAPMANAGER × CRITERION · DEMO DATA
GRDSRCOBCLLSCP ANNA10075100100100100100 LEO6703317505067 PRIYA10050100100100100100 NINA10025501007510050 TEAM89336769788378
90+75+50+UNDER 50% OF MAX · 9 SCORED CALLS

GR GREETING · DS DISCOVERY · RC RECOMMENDATION · OB OBJECTIONS · CL NEXT STEP · LS LISTENING · CP COMPLIANCE

THE PROBLEM

A head of sales can’t listen to every call, and a model that “scores” calls without evidence is just one more opinion. On top of that, customers read card numbers out loud — and those must never end up in an AI provider’s logs.

WHAT I BUILT

  • A pipeline from speech-to-text output to a scored call: roles, masking, scoring, checks — with three attempts per stage and an alert when the provider keeps failing.
  • Speaker roles by channel on stereo recordings and by phrases on mono.
  • A seven-criterion scorecard with weights. The model scores each criterion; the server computes the total, and the model never sees the weights.
  • A team view: the manager × criterion heat map, red flags and a coaching focus per manager.

HOW IT’S CHECKED

  • Card numbers, phones and emails are masked before anything is stored or sent to the model — including digits read out as words, in English and Russian.
  • Every score cites utterance ids. Ids that aren’t in the call are dropped, and a score that credits the manager has to quote the manager’s own words — otherwise it doesn’t count.
  • Hard rules are code: a discount over 5% without approval, a guaranteed delivery date, card details on the phone. A rule hit forces compliance to 0, whatever the model says.
  • The evidence is on the page: each line of the transcript carries the scores that cite it, and a mark jumps to its scorecard row.

WHAT THE DEMO SHOWS

Eleven scripted calls for the same fictional Northwind Air and four managers. Speech-to-text is simulated. Nine calls are scored; two are skipped without a model call, a voicemail and a seven-second call.

11 CALLSGood, rushed, discount, complaint, voicemail, card read aloud
7 CRITERIAWeighted; compliance is critical
3,524Tokens per scored call, on average
17 TESTSMasking, roles, evidence, rules, totals
The demo’s call view: each transcript line with the scores that cite it, and the masked card number
REAL SCREENSHOT · CALL C-108, THE BAKERY THAT TRIED TO PAY BY PHONE
RUN ITNODE 22 · NO API KEY NEEDED
$ git clone https://github.com/nrmnprm/call-qa
$ cd call-qa && npm install
$ npm start # http://127.0.0.1:4330
→ without a key: replays the recorded scoring
→ with a key in .env: scores new calls live