Skip to content

Treatment Plan Acceptance Follow-up

Example prompt: "When a clinician proposes a treatment plan in our 'Plans' Google Sheet, send the patient a warm acknowledgement after 3 days, a friendly check-in after 14, and a final low-key nudge at 30 — and flag any high-value plan that hasn't been accepted to the practice manager in Slack."

The Problem

A private clinic that does any kind of plan-based work — a dentist proposing a course of crowns and hygiene visits, a physio writing up a six-week rehab plan, an aesthetics clinic proposing a three-session course, a private GP outlining a year of monitored care — lives or dies on plan acceptance. The patient leaves the consult with the printed plan, intends to think it over, and life gets in the way. A polite follow-up at three days, two weeks, and a month converts a meaningful fraction of those that would otherwise lapse, but the follow-up has to be warm and not nagging, and reception rarely has time to write three different chases for thirty outstanding plans in a given week. The plans that needed a one-line "let us know if you have any questions" end up at day sixty unread, the patient is mildly embarrassed, and the conversation has gone cold.

How GloriaMundo Solves It

We build a workflow on the 'Treatment Plans Outstanding' tab of the practice Google Sheet. Each weekday morning an integration step reads the tab and a code step picks the next rung in the follow-up ladder for any plan that is still Pending. An LLM step composes a rung-appropriate Gmail in the practice's voice — warm at day three, friendlier at day fourteen, a soft close at day thirty — and saves it as a Gmail draft. The Plan Chase Log records every draft, and the rung on the outstanding plan row advances only when reception actually sends, so an unsent draft does not push the ladder forward on the wrong basis. High-value plans that go all the way through the ladder without a reply land on the practice manager's Slack rather than a fourth template email — the manager decides between a personal call from the clinician, a small concession, or letting it lapse with dignity. Manual status changes (Accepted, Declined, Postponed) made by the clinician or reception in the sheet stop the ladder immediately and flow through to a Plan Outcomes tab so the practice can see real conversion rates over time. Glass Box preview shows the rung selection, the rendered emails, and the Slack summaries before anything is queued.

Example Workflow Steps

  1. Trigger (integration): Each weekday at 8am local time.
  2. Step 1 — sent_at reconciliation (integration): Runs BEFORE any rung evaluation or drafting. For every Plan Chase Log row where sent_at is null, search Gmail Sent for a message that BOTH was addressed to the row's patient_email AND contains the row's send_token (in:sent to:<patient_email> <send_token>). If a match is found, populate sent_at on the row with the Sent message's internalDate. The dual condition is what makes reconciliation safe: send_token alone could appear in a colleague-cc'd forward or a reply that quotes the body, but a message sent to the actual patient AND carrying that token is unambiguously the rung's send. Do not use the Gmail draft's message-id, because drafts.send (or reception clicking Send in the Gmail UI) creates a NEW message with a new id and consumes the draft — the draft-time id never appears in Sent. Reconcile each row only on its own (patient_email, send_token) pair, so the ladder is never advanced by a sibling rung's send.
  3. Step 2 (integration): Read EVERY row of the 'Treatment Plans Outstanding' tab (no pre-filter — manual status transitions need detecting on this pass too).
  4. Step 3 (conditional): For each row whose plan_status is 'Accepted', 'Declined', or 'Postponed', check the 'Plan Outcomes' tab for an existing row with this plan_id; if none, append (plan_id, outcome = plan_status, plan_value, date) to 'Plan Outcomes'. Either way, stop the ladder for that plan. The existence check makes the recording idempotent across the daily runs.
  5. Step 4 (code): For each remaining row where plan_status is 'Pending', calculate days_since_proposed from proposed_date. Look up 'Plan Chase Log' rows for this plan_id; the 'highest sent rung' is the maximum rung value where sent_at is populated (now reliable after Step 1's reconciliation). The candidate next rung is the next rung after that (or +3 if no rung has been sent); stop the ladder once +30 has been sent. The next rung is only ACTIONABLE when days_since_proposed >= the rung's threshold (3 for +3, 14 for +14, 30 for +30). If days_since_proposed is below the threshold, leave the plan alone on this run — the daily scan will revisit it tomorrow.
  6. Step 5 (conditional): Only when Step 4 returned an actionable rung. Before composing, check 'Plan Chase Log' for a row matching this plan_id AND the next rung where sent_at is null. If one exists, do NOT compose a new draft or append a new Plan Chase Log row — instead carry the existing draft_link into the 'Pending drafts awaiting send' section of the daily Slack summary. This is the duplicate-draft guard.
  7. Step 6 (llm + integration): If no unsent draft exists for this plan_id + rung, generate a unique send_token (UUID), look up patient_email from the Patients tab via patient_code, compose a rung-appropriate Gmail to patient_email (warm at day three, friendlier at fourteen, a soft close at thirty) with a one-line 'Our reference: PLAN-[plan_id]-R[rung]-[send_token]' footer embedded in the body, save as a Gmail draft, and append one row to 'Plan Chase Log' with plan_id, rung, draft_created_at, draft_link, send_token, patient_email, sent_at = null. Step 1's reconciliation uses the (patient_email, send_token) pair as a dual discriminator to find the actual outbound message in Sent.
  8. Step 7 (conditional): If plan_value is greater than £1,500 and a Plan Chase Log row exists with this plan_id + rung +30 + sent_at populated for more than five working days, AND the plan_status on 'Treatment Plans Outstanding' is still 'Pending' (i.e. no manual transition to Accepted, Declined, or Postponed has been recorded), append exactly one row to 'High-Value Plan Review' with these five fields: plan_id, patient_code (non-identifying code only — no first name, no surname, no PII), clinician, plan_value, days_since_proposed. Post once in #practice-manager. Escalation fires once per plan (existence check on 'High-Value Plan Review' by plan_id). The workflow does NOT inspect the Gmail thread for an incoming patient reply — plan_status is the source of truth for whether the patient has engaged: a reply received by Gmail is expected to prompt a clinician or reception to set plan_status to the appropriate outcome (Accepted, Declined, Postponed) and that update both stops the ladder and records the outcome. Keeping the escalation gated on plan_status rather than thread-scraping avoids the workflow making judgements about whether an out-of-office auto-reply, a logistics question, or a price negotiation counts as engagement.
  9. Step 8 (integration): At 9am, post the daily summary in #front-desk with today's drafts grouped by rung, the 'Pending drafts awaiting send' section, and the new 'Plan Outcomes' rows recorded since the last summary broken down by outcome. The 'Pending drafts awaiting send' section lists every Plan Chase Log row with sent_at null and draft_created_at before today, joined against 'Treatment Plans Outstanding' by plan_id and filtered to rows whose CURRENT plan_status is 'Pending' — a draft on a plan that has since been Accepted, Declined, or Postponed should not appear in the daily prompt-to-send list, because the patient has resolved one way or the other and a "still needs sending" nudge would lead reception to send a now-stale chase.

Timing implication of Step 1's daily-batch reconciliation: a draft reception sends at 10am on Tuesday is not reflected as sent_at on the Plan Chase Log until the Wednesday 8am scan reconciles it. The five-working-day high-value escalation countdown therefore starts from 'first 8am scan after the actual send' rather than the wall-clock send time — a day's coarseness on a five-day clock, acceptable for a low-frequency follow-up workflow.

Integrations Used

  • Google Sheets — the 'Treatment Plans Outstanding' tab, the 'Plan Chase Log' tab, the 'Plan Outcomes' tab, and the 'High-Value Plan Review' tab
  • Gmail — draft every follow-up; nothing auto-sends
  • Slack — the daily #front-desk summary for reception, and the smaller #practice-manager list for high-value lapses

Who This Is For

Private dental, aesthetics, physio, mental health, and private GP practices that propose plan-based work after a consultation — typically £200-£5,000 per plan, twenty to fifty outstanding plans at any time, and a conversion rate that quietly drifts down to 40-50% when nobody is doing the follow-up. Works best where the clinician already records the proposed plan and value in a shared sheet at the end of the consult, which most practices already do for tax and reporting reasons.

Time & Cost Saved

Reception writing three different follow-up emails for twenty to fifty outstanding plans a week — and remembering whose plan is at what stage — is two to three hours a week of admin that gets pushed when the day fills up. This workflow drafts the lot before the practice opens and reception sends through them in around twenty minutes. The bigger gain is the conversion lift: a consistent three-step cadence with warm copy and a one-tap reply typically lifts plan acceptance by 10-20 percentage points, which on a practice with £30,000 of outstanding plan value at any time is a meaningful change to the annual revenue line.

Notes on Auto-Send vs Drafts

A treatment plan is a financial decision and the patient might be mid-conversation with a partner, waiting on a payday, weighing it against another quote, or quietly deciding it is not for them. Reception opens each draft to do a sense-check on context the workflow cannot see — a phone call the patient made yesterday, a relative who just rang to ask about a sibling's plan, a known sensitivity. The day-three note is templated enough to auto-send safely in theory, but the cost of a tone-deaf send to a patient considering a £3,000 commitment is much higher than the thirty seconds of reception's time. Auto-send in this category remains limited to the two operational workflows whose messages carry no clinical content and no financial decision — the Appointment Reminder Cadence's three templated reminders and the Telehealth Video Link Dispatch's up-to-four templated link-bearing emails (confirmation, 24-hour reminder, rescheduled, cancellation). A plan-acceptance follow-up touches a commitment the patient is weighing, so it stays as a draft regardless of rung.