Field Stories9 min read

The Cancelled Physio Appointment Nobody Filled

By Ergini, Software & AI Developer

A composite story. The company and the people in it are invented. The problem, the rules and the system are real, and the full blueprint is in the use case library.

TL;DR

A composite story: at an invented six-therapist physiotherapy practice in Münster, a cancelled slot stays empty while a patient whose prescription is about to lapse sits fourth on a clipboard. The fix is a waitlist agent that ranks patients by rules the practice writes down, such as prescription start dates and therapist qualifications, offers the slot by WhatsApp or SMS with only a day and time, books the first plain yes, and sends medical questions to the front desk.

A prescription dated 19 August

The prescription on the clipboard is dated 19 August: six sessions of manual therapy for a shoulder that has not lifted properly since the spring. Next to it, in the front desk's handwriting, a note: "Werner. MT. Mornings. Must start by 16.9."

The date matters. Under the Heilmittel-Richtlinie, treatment on a statutory prescription has to begin within 28 calendar days of it being issued, or the prescription loses its validity and Werner goes back to his doctor for a new one. In this practice only three of the six therapists are qualified to give manual therapy, and their schedules are full for three weeks. So Werner, who is 68 and retired, is on the waitlist with about fifty other people, and his name is fourth on the second page.

The practice is invented: a physiotherapy practice in Münster with six therapists, two people on the front desk and a day that runs from 7:30 to 19:30. So are Werner and everyone else here. The clipboard, and the 28 days, are not.

The half hour Ines spent on notes

On a Tuesday in early September, a patient cancels his 10:30 with Ines, one of the three manual therapists, by voicemail at ten to eight. Gül, on the front desk, hears it at half past eight, between a patient who wants a receipt, a patient who is early and a phone that has not stopped. She reaches the clipboard at twenty past nine.

Filling the slot means reading down two pages of handwriting for someone who needs manual therapy, can come at 10:30 and has not been called already this week. She tries two numbers. One goes to voicemail. The other patient is at work across town and cannot get there in time. Then three people are at the desk again, and the slot is an hour away.

Ines spends the half hour on notes she could have written on Friday. The practice loses the fee. And Werner, who lives ten minutes away and would have come, is never called, because nobody reading two pages in a hurry spots that his prescription runs out next week. Nothing on the clipboard says who should be asked first. It only says who asked.

Longest wait, or greatest need?

Carsten, who owns the practice and still treats three days a week, calls me after a week in which nine cancelled slots went empty, by Gül's count on a sticky note.

My first question is about their practice system. Some can already offer a freed-up slot to a waiting list, and a built-in feature knows the appointment book natively, which removes the hardest part of this build. If theirs could do it under rules they can live with, I would tell Carsten to switch it on. Theirs has a documented API for appointments and no waitlist at all.

My second question takes the rest of the call: when a slot comes free, who should get it? Carsten says whoever has waited longest. Gül says whoever needs it most, and names Werner. Neither rule is written anywhere, and the clipboard follows neither. So we write the order down, and most of it comes from the prescriptions themselves. Treatment must start within 28 days of issue, or 14 when the prescription is marked urgent. A series broken for more than 14 days without good reason makes the prescription invalid. And the Heilmittel-Richtlinie marks manual therapy and manual lymph drainage as needing completed further training, so only some therapists can take some patients.

No model ranks anyone. The order decides who gets care and when, so it is code that Carsten can read, and every refilled slot records who was asked, in what order and why. That record is what he will want the day a patient asks why someone else got the appointment.

One thing the agent will never do, however harmless the question looks, is answer anything medical. That goes to the front desk with the conversation attached, and a person replies.

The 10:30, ranked

Had the order existed that Tuesday, this is what would have happened to the 10:30 with Ines. Gül marks the voicemail cancellation in the appointment book at half past eight, which is still the one thing a person has to do. Within a minute the agent sees it, checks that the slot is more than 90 minutes away and inside messaging hours, and puts a placeholder marked "held for waitlist" in the book so nobody at the desk gives it away by phone. Then code ranks the list:

PatientResultReason
WernerOffered, first batchPrescription issued 19 August must start by 16 September; mornings; any therapist
DanaOffered, first batchPartway through a series; her next booked session would fall 16 days after her last
HolgerOffered, first batchAsked for Ines; mornings; on the list since 14 August
PaulSecond batch, if neededAny therapist; on the list since 21 August
AyşeNot askedNeeds a 60-minute lymph drainage; Ines is qualified, but the gap is 30 minutes
JürgenNot askedCan only come after 17:00

Werner's row is the one that matters, and nothing in it needs judgment: a date on a prescription compared with today's date. The clipboard had that date too. It just could not sort by it. The full ranking, the flow and the six ways a refilled slot turns into a complaint are in the blueprint for a clinic waitlist agent.

Day and time, nothing else

The offer goes to the first three at once, each on the channel they agreed to when they joined the list: a pre-approved WhatsApp template for Werner and Holger, and an SMS for Dana, who would rather not use WhatsApp for anything to do with her health. It says the practice's automated assistant is writing, as Article 50 of the EU AI Act requires, that an appointment has come free today at 10:30, and that it goes to the first person who replies yes. It does not say manual therapy. It names Ines only in Holger's message, because he asked for her.

That restraint is deliberate. Anyone who picks up a phone can read a lock screen, and a treatment name reveals something about a person's health, which I treat as health data under GDPR Article 9. The agent's data stays on EU servers under a data processing agreement, and because section 203 of the Criminal Code extends professional secrecy to the people a practice involves, the service contract carries a confidentiality clause as well.

Replies are where the model earns its place. A small model sorts each one into accept, decline, conditional, question or medical, under a strict schema and in whatever language the patient writes. Only a plain accept counts. Dana answers first: "Yes, but my back has been worse since the last session, is that normal?" That is a medical question with a yes attached, so it goes to the front desk inbox with the thread, and Dana is told someone from the practice will reply. A minute later Werner writes: "Yes. Can be there."

His yes claims the slot through a unique constraint in the agent's database, with a key per offer and patient, so two yeses in the same second, or a retried webhook, cannot book twice. The agent re-reads the slot in the practice system, finds it still held, and writes the booking. Holger is told the slot has gone and keeps his place. Whether Dana should have had it is a fair question, and a person's: Gül shows her message to Ines, who phones Dana between patients, and Gül books her in for the next morning.

What "mornings" meant

None of this books anything at first. For the first weeks the agent only suggests: each cancellation appears on the front desk screen with the ranked list and a draft offer, and Gül phones or messages patients as before, using the list if it helps. The test is simple. Does the agent pick the patient Gül would have picked?

Mostly it does. Where it does not, the reason is the same every time, and it is in the table above: Holger should not be in the first batch. His clipboard note says "mornings", the import turned that into 7:30 to 12:00, and Gül knows he means before nine, when his shift starts. The clipboard held the word. Gül held what it meant.

The rule that comes out of it: availability is stored as time ranges the patient has confirmed, never as a word someone else interprets. Everyone on the list gets one message asking them to pick their times, and until they answer, they are offered only slots inside hours the front desk has checked with them. No model reads "mornings" and guesses.

Only then does the agent send offers, and at first only after Gül approves each slot with one click. It books on its own after a few weeks without a double booking, a wrong patient or a complaint about a message, and even then one treatment type at a time, starting with standard 30-minute sessions. Lymph drainage is switched on separately. First appointments for new patients stay with the front desk longest, because the prescription and the patient's details are checked in person before the first session.

The next voicemail at ten to eight

The front desk does not get quieter. There is still a patient who wants a receipt, a patient who is early and a phone that keeps ringing. What changes is that one click in the appointment book replaces the clipboard. The agent holds the slot, asks the patients the rules put first, and books the first plain yes, while Gül looks after the people standing in front of her.

What reaches her is the part that needs a person: pain since the last session, a patient who will only come if it is with Ines, a booking the practice system refused. She answers those in her own words. On Fridays Carsten reads the week's log: every refilled slot, who was asked and why, and every handover. And a patient like Werner starts his series before the date on his prescription runs out, because that date is now something the list can be sorted by.

Beside a practice system with a usable API, this is usually a single-purpose agent, the smaller of the two tiers of AI agent development. The price moves with that interface, the number of ranking rules, the channels and languages, and whether several sites share one list. Running costs are small: a fraction of a cent of model use per reply, per-message fees for WhatsApp templates and SMS, and a small EU server. The part I test hardest is the calendar layer, because in Caldra, the scheduling agent I built, that was the hard part, not the model. The waitlist blueprint has the complete flow and rollout, and the guide to building a custom AI scheduling assistant covers the calendar mechanics.

Frequently asked questions

Can AI fill cancelled physiotherapy appointments automatically?

Yes, within rules the practice sets. The agent notices the cancellation in the practice system, ranks waitlisted patients who fit the treatment, therapist, session length and their stated times, offers the slot by WhatsApp or SMS, and books the first plain yes. A model only reads replies and words the messages; who gets asked and who gets the slot are decided by code, so every booking can be explained.

Who should get a cancelled slot first when patients have statutory prescriptions?

That is the practice's policy, but the Heilmittel-Richtlinie gives it a shape. Treatment on a statutory prescription must start within 28 calendar days of issue, or 14 when it is marked urgent, and an unjustified break of more than 14 days in a series makes the prescription invalid. So patients closest to either deadline usually come first, then those who asked for this therapist, then the date they joined the list.

Can a physiotherapy practice send appointment offers by WhatsApp under GDPR?

It can, with care, and the practice makes that call with its data protection officer. Patients opt in to the channel, offers carry only a day and time, with no treatment or therapist, and data stays on EU servers under a data processing agreement. In Germany, service contracts also carry a confidentiality clause because of section 203 of the Criminal Code. Patients who prefer SMS get the same flow there.

What happens if a patient replies to a waitlist agent with a medical question?

The agent does not answer it. It tells the patient that someone from the practice will reply and puts the message in the front desk inbox with the conversation attached. A reply that mixes a yes with a symptom counts as unclear, so a person decides whether to book. The agent also introduces itself as automated in its first message, as Article 50 of the EU AI Act requires.