Cases / Medical clinics · Patient operations platform
Client under NDA Integrations and AI

A five-branch clinic network cut no-shows from 20% to 8% and handed half its call centre to AI.

20% → 8%
no-shows
50–60%
of contacts closed by AI
~3 mo
to the full loop

Client under NDA: industry and size are given as a range. The figures are the client’s own, comparing the periods before and after launch; comparable projects landed on both sides of these numbers. Run the numbers on your own volumes →

Context

The schedule lived in one system, the phone in another, and the patient remembered the rest.

Five branches, more than a thousand staff between them. Appointments arrived by phone, through the website and through third-party booking aggregators, and each route landed somewhere different: the schedule in the clinical system, the calls in the phone system, and aggregator bookings re-keyed by reception. Confirmations and reminders were made by call whenever someone had time, so around a fifth of patients did not turn up, and a slot freed by a cancellation simply stayed empty. Repeat visits and routine tests depended on the patient remembering, or on a doctor noticing at the next appointment. Test results went out through reception, which meant a queue at the desk and a phone line busy with the same question. Complaints were read by whoever reached them first, sorted by nothing in particular, and consultation quality was checked by listening to a handful of recordings a week.

Solution

A layer around the clinical system, not a replacement for it.

Medical records stay where they are: the clinical system remains the source of truth for the chart and the schedule, and the platform sits alongside it holding the patient, the visit and everything that patient is owed next. That operational layer lives in PostgreSQL; the clinical system, the phone system, the website and the booking aggregators are wired into it, so a slot taken in one channel is taken everywhere. The model that reads calls sits behind an interface and is replaceable on purpose — something better ships every few months, and we move the client onto it without touching the rest.

Architecture
Calls and requestscall centreWebsite and portalonline bookingAggregatorsexternal bookingsLabresultsPlatform corepatient · visit · reminderClinical systemchart and scheduleTelephonycalls and scoringPatient portalresultsRemindersSMS · messengersReportsquality and complaints
What we built

Six loops, branch by branch.

Each loop went live in one branch first and only reached the other four once it had held there.

01
One schedule, four channels
The clinical system, the website, the phone and the booking aggregators see the same availability. A slot taken in one channel disappears from all of them, and reception stops re-keying bookings by hand.
02
Confirmations, reminders and freed slots
Confirmation and reminder go out on their own, and a slot freed by a cancellation is offered to the waiting list instead of standing empty. Schedule utilisation rose by 10–15%.
03
Call centre with AI
Between 50% and 60% of contacts — booking, moving an appointment, questions about preparing for a test — are closed by AI. The rest pass to an operator seamlessly, with the conversation context.
04
Follow-up the patient does not have to track
The platform knows what a patient is due next: a repeat appointment, a control test, a routine screening. The reminder goes out on time instead of waiting for the next visit.
05
Results without the front desk
Test results reach the patient directly once released, and the queue at reception and the calls asking the same question go with them.
06
Complaints and consultation quality
Incoming complaints are sorted by type and the urgent categories skip the queue. Every call is scored automatically for consultation quality, so a supervisor reviews what actually needs it rather than a random sample.
Before and after

Before and after.

Before
No-shows~20%
Contacts to people100%
Request to bookinghours
A cancelled slotstayed empty
Test resultsvia reception
Call scoringa sample
Schedule utilisationbaseline
After
No-shows~8%
Contacts to people~45%
Request to bookingminutes
A cancelled slotre-offered
Test resultsto the patient
Call scoringevery call
Schedule utilisation+10–15%
Limits
What stayed with people, deliberately.
Every clinical decision. The platform reminds a patient that a follow-up is due; what that follow-up is remains the doctor’s call.
Complaints about treatment rather than service. Those reach the branch lead immediately, with no automatic category in between.
The 40–50% of contacts the AI hands to an operator instead of guessing.
The verdict on an operator. Automatic scoring is input for a supervisor, not a rating that decides anything on its own.
Stack
Python Django PostgreSQL Clinical system integrations Telephony and call recording Booking aggregators LLM (replaceable) Queues and webhooks Monitoring and alerts
Straight about timelines

Why three months across five branches.

Because nothing here replaced the clinical system. Rewriting it would have meant migrating medical records, retraining every branch at once and taking ownership of a regulated system we have no business owning — a year of work with a bad ending. Instead each loop went live in one branch, was corrected there, and only then rolled out to the other four. Schedule sync and reminders were already paying for themselves while the call centre and the quality scoring were still being built. Three months is the honest number for that approach; a rewrite would not have finished in twelve.

Related

What this case is made of.

The service pages explain the method behind this project; the solution pages take the same building blocks on their own, each with its own scope and price.

Want the same for your process?

A free mini-audit projects the ROI for your highest-impact process — then the build is a fixed price.

Get a free mini-audit →