Inspiration

Northwind's regulator score fell every single month for two years, from 4.30 to 2.58. When we dug into the 25,416 complaints, the pattern was clear: a complaint passed from one system to another took 38.2 days to close instead of 23.0, missed its SLA 89% of the time (vs 70%), reopened 27% of the time (vs 8%) and cost $121 to handle instead of $68.

What it does

  • One case per complaint. Every contact, from any channel, opens or joins a single case with its full history. Reassigning keeps the same case ID, so the customer never repeats themselves.
  • Rules-based bill check. Compares what was billed with the meter reads and explains the result in plain words: estimated bills while a smart meter was sending real reads, repeated estimates, a normal seasonal rise, or an active outage.
  • Agent desk. Account, bills, reads and past complaints on one screen, plus a before/after toggle that replays how the same complaint travels today.
  • Check my bill. Customer self-service running the same rules, landing on the same case an agent sees.
  • Impact and what-if. A scenario engine shows what each fix is worth and whether a 4.0 score is reachable.
  • Diagnosis report. Nine pages in HTML and Power BI, from the data pack.

How we built it

Python, pandas and SQLite for the data model; FastAPI for the app; vanilla JavaScript with three.js for the 3D views; inline SVG for the offline report; a Power BI project generated from the same data. Everything runs on localhost and works offline. 85 automated tests reproduce every number we quote.

What we found

  • The score tracks days to close almost perfectly (r = −0.98). Reaching 4.0 needs about 19 days; today it's 38.2.
  • Transfers depend on the intake system: 0% from CaseTrack, 46–47% from the other three. Every other split (category, channel, priority, quarter) is flat at 33–37%. CaseTrack's own note: "Cases transferred in from other channels lose their history."
  • Smart meters went from 30% to 81% of homes, yet estimated bills stayed at 21–23%, because billing never uses the smart reads.
  • 23% of complaints only needed an answer, but still took 28 days.
  • The 2025 AI pilot got worse every month: containment 16% → 10%, repeat contact 31% → 45%.
  • Calderfield lost half its agents, but its days to close match every other region, so staffing isn't the cause.

Challenges

Being honest about 4.0. Per-case fixes alone reach 3.23. Days to close has tracked the open backlog for 24 months, so if the freed capacity clears the backlog, 4.0 arrives around month 5. We show both views instead of picking the flattering one.

Accomplishments we're proud of

A 90-second live demo: one click fixes an over-billed smart-meter customer at first contact, and an outage call is routed once, billing reminders held, and reassigned without losing the case.

What we learned

Fix the plumbing before adding AI. An assistant that can't see the bill or the case history makes things worse.

What's next

Start with the three high-transfer intake points, leave the 1998 billing system of record untouched in phase 1, then add AI on top of one case with full history.

Complaint history and statistics come from the Northwind data pack. Account meter reads and bills in the demo are synthetic and labelled on every screen.

Share this project:

Updates

Submission history