CALL-QA
Quality control for sales calls where every score has to point at a line.
CALL C-108
1:41
ROLES BY CHANNEL · STEREO · EN
7 CRITERIA
1 RED FLAG
SCORE 42 · FAIL
SYNTHETIC CALL
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.
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



$ 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