LIVE · COHORT 110,527 PATIENTS | BASELINE NO-SHOW 20.2% | TARGET 13.5%
SA Track Project Healthcare · Patient Intake SQL + BPMN combined

One in five patients miss their appointment. The data shows why — and the redesign fixes the root cause.

An end-to-end study of a Brazilian municipal clinic network: ten SQL queries on 110,527 appointments isolate the drivers of no-shows, a BPMN redesign of the front-desk process attacks each driver, and a traceability matrix wires every process change back to a number in the data.

⚠ No-show rate
20.2%
▲ 4.2 pp above national average
⏱ End-to-end intake
76min
▲ 54 min above benchmark
💸 Annual waste
R$ 1.4M
▲ Wasted clinician time
🎯 Target after redesign
13.5%
▼ -6.7 pp · ≈ R$ 1.1M recovered
Executive Summary

The story in one breath

A What the data said

Ten SQL queries against 110 K appointment records isolated five drivers of no-shows. The single strongest signal is booking lead time — same-day visits miss 4.6 %, 31+-day visits miss 31.4 %.

Under 1 % of patients account for 16 % of all misses — invisible to the current process.

B What the redesign does

A digital-front-door BPMN replaces the paper form, batches the phone-call insurance check with a SUS-Conecte API call, and adds a three-touch reminder cadence with tap-to-confirm/reschedule.

A booking-time risk score routes the high-risk 1 % to a care-coordinator queue. Every BPMN element is wired to a numbered requirement.

The patient's journey, redesigned

1 Booking + risk score 2 Pre-reg link sent SMS + email 3 Online intake phone, ~4 min 4 3-touch reminders T-7 · T-2 · T-day 5 Kiosk QR check-in EHR auto-loaded 6 Encounter no retyping
Part A · Data analysis

Ten queries. Five findings. One smoking gun.

Charts below are computed from the full 110,527-row dataset. Each chart corresponds to a numbered query in sql/queries/.

Q4 Lead time vs no-show rate — the single strongest predictor

Booking more than two weeks out makes a no-show ~7× more likely than a same-day booking.

4.6%
Same
day
17.3%
1-3
days
23.4%
4-7
days
27.6%
8-14
days
29.8%
15-30
days
31.4%
31+
days

Q1 No-show rate by age band

75+ elderly
13.0%
13.0%
55-74 senior
15.8%
15.8%
35-54 adult
19.7%
19.7%
18-34 young adult
23.1%
23.1%
00-17 child
16.4%
16.4%

Q3 No-show by day of week

Saturday spikes; mid-week is the sweet spot.

SUN
22.8
MON
19.9
TUE
20.3
WED
19.7
THU
19.6
FRI
20.4
SAT
23.1

Q6 The 0.9 % club — frequent missers

Under 1 % of repeat patients generate 16 % of every empty exam-room slot.

0 missed (perfect)
0%
50.4%
1 miss
28%
27.1%
2 misses
24%
13.0%
3-5 (chronic)
32%
8.6%
6+ high-risk
16%
0.9%

Right column = share of patients · bar = share of total misses

Q5 SMS reminder — does it actually work?

Naive view (bias-loaded):

No SMS
16.7%
16.7%
SMS received
27.6%
27.6%

Like-for-like (≥3 day lead time only):

No SMS
29.1%
29.1%
SMS received
27.6%
27.6%

⚠ Insight: the SMS as currently sent only buys ~1.5 pp — within noise. Single late ping ≠ engagement.

Q9 Age × gender heatmap

Female
Male
75+ elderly
12.7
13.6
55-74 senior
15.2
16.7
35-54 adult
19.4
20.6
18-34 young adult
22.3
24.8
00-17 child
16.1
16.7

Darker red = higher no-show rate. Young adult men are the worst-attending cohort.

Q2 Worst-served neighbourhoods

Itararé
26.3%
26.3%
Santos Dumont
28.9%
28.9%
Santa Cecília
29.0%
29.0%
Comdusa
25.7%
25.7%
Ilha de Santa Maria
23.2%
23.2%

All peripheral, transport-limited areas. Voucher pathway target.

SQL Example query — Q4 lead time

WITH bucketed AS (
    SELECT
        CASE
            WHEN lead_time_days < 1  THEN '0 — same day'
            WHEN lead_time_days < 4  THEN '1-3 days'
            WHEN lead_time_days < 8  THEN '4-7 days'
            WHEN lead_time_days < 15 THEN '8-14 days'
            WHEN lead_time_days < 31 THEN '15-30 days'
            ELSE                          '31+ days'
        END AS lead_bucket, no_show
    FROM v_appointment_facts
    WHERE lead_time_days >= 0
)
SELECT lead_bucket,
       COUNT(*)                                              AS appointments,
       ROUND(100.0 * AVG(CASE WHEN no_show THEN 1 ELSE 0 END), 2)  AS rate_pct
FROM bucketed
GROUP BY lead_bucket
ORDER BY MIN(lead_bucket);
-- result: monotone climb from 4.6% (same day) to 31.4% (31+ days)
Part B · As-Is BPMN

The current process — where the 76 minutes go

Coral cells are friction points. Bright red are the four anchors the redesign targets.

Cycle-time breakdown

Wait to be seen
9 min
9
Paper form
11 min
11
Insurance verify
23 min
23
Triage
19 min
19
Hand-off bench
14 min
14
Total median
76 min
76

! Four structural anchors

  • 1. Insurance verification is a batched, synchronous phone call
  • 2. Paper form is the source of truth for ~6 hours
  • 3. No risk signal travels with a booking
  • 4. Reminder is open-loop — no confirm path
Part B · To-Be BPMN

The redesign — every coral cell becomes teal

Teal = digital · purple = human (with system support) · blue = system. Same actors, very different choreography.

Five things that changed

  • 1. Risk score lives at booking, not in retrospect
  • 2. Insurance check is an API call (<1 s) not a phone call (23 min)
  • 3. Online pre-reg replaces the paper form
  • 4. Reminders are a 3-touch cadence with tap-confirm
  • 5. No retyping. End-of-shift typist role sunset

📉 Cycle-time after redesign

Kiosk check-in
2
2
Paper form
0
0
Insurance verify
<1
<1
Triage
12
12
Hand-off
7
7
Total median
22 min
22
Gap analysis

Eight gaps. Each one passed two tests.

To be on this list a gap had to (1) explain a row of the SQL findings, and (2) point to a specific BPMN element as the fix.

G1
Identity & demographics capture
Paper 4-page form at the desk
→ Online pre-registration sent at booking, QR resume at kiosk
High
G2
Insurance verification
Manual phone batch, 23 min median, 6% rework
→ SUS-Conecte API at booking + async exception queue
High
G3
No-show risk signal
None — every booking treated identically
→ Risk score at booking; high-risk routed to coordinator queue
High
G4
Appointment reminders
Single SMS, T-3, one-way
→ 3-touch cadence (T-7, T-2, T-day) with tap confirm/reschedule
Med
G5
Triage decision support
Nurse judgement only
→ Symptom-triage engine suggests priority + red-flags
Med
G6
EHR data entry
Paper → end-of-shift typist, 6-h latency
→ Pre-reg payload auto-populates EHR draft
High
G7
Transport for periphery
No structural support
→ Voucher offer in confirmation for top-5 underserved areas
Low
G8
Outcome feedback loop
No cohort analysis
→ Weekly dashboard on v_appointment_facts + monthly A/B
Low
Requirements traceability

Every BPMN element wired to a numbered requirement

This is the document an auditor or PMO reads first.

GapRequirementTypeBPMN elementAcceptance test
G1R1.1FunctionalD1 → D295% of bookings have a completed pre-reg payload at T-1 day
R1.2Non-functionalD2Lighthouse a11y ≥ 95; PT + EN
G2R2.1FunctionalD3p95 latency ≤ 2 s in load test
R2.2FunctionalG2 → D4100% of API failures routed to async queue
G3R3.1FunctionalS1, G1Model ROC-AUC ≥ 0.72 on held-out month
R3.2FunctionalG1 → S2100% outreach attempts logged within 24 h
R3.3Non-functionalbackground jobQuarterly retrain in audit log
G4R4.1FunctionalR1 → R2 → R3All three sent for 100% of eligible bookings
R4.2FunctionalR1-R3Tap → slot reappears in pool within 30 s
G5R5.1FunctionalN2Engine output present for 100% of triage events
R5.2FunctionalN3Override is 1 click; reason captured ≥ 95%
G6R6.1FunctionalA2Manual retype rate ≤ 5% of fields
R6.2Operational(role retired)EOS step absent in To-Be SOP
G7R7.1Functionalextends R1Voucher tap-through ≥ 25% in pilot
G8R8.1Operational(out-of-flow)Weekly dashboard live; reviewed in ops huddle
R8.2Operational(out-of-flow)A/B record book current
Projected impact

Conservative bounds. Auditable origin for every number.

Each metric below ties to a row of the SQL findings and a BPMN element in the To-Be.

Network no-show rate
20.2%13.5%

-33% from cadence (R1-R3) + risk routing (S1, S2). Mid-range of published meta-analyses (25-50%).

Insurance verification
23 min<1 min

API call (D3) replaces synchronous phone batch. Exception queue (D4) handles failures async.

End-to-end intake
76 min22 min

-71%. The dominant cuts: zero-out paper form, API verification, in-room triage confirm.

End-of-shift typist FTE
1.00

Role retired by A2. Existing clerk redeployed to the exception queue.

Recoverable annual value
R$ 1.1M / year

(no-show delta × visit value) + (verification + typist savings). Net of platform run-cost. Tested in 8-week pilot before network-wide rollout.

Pilot plan (8 weeks)

WEEK 1-2
Setup
Connect SUS-Conecte; deploy pre-reg form; baseline metrics
WEEK 3-4
2 clinics live
Itararé + Santos Dumont (worst no-show areas)
WEEK 5-6
Tune cadence
A/B reminder windows; calibrate risk score
WEEK 7-8
Go/no-go
If no-show down ≥4pp, network-wide rollout