Enter your work email to open the interactive guide. It walks through how the four common RTSM resupply algorithms work, and what each one costs you in shipments, stock and risk.
How clinical trial sites decide when to reorder drug, and why the four common algorithms behave so differently. Move any control and every chart updates.
Every resupply decision starts with the same question: how much drug will this site need, and when? Answering it means looking patient by patient. Solid bars are dispensings that already happened, so they are known. Shaded cells are what could happen next, and the further out you look, the more ways it can go. Closing that gap is what a resupply algorithm is for.
Not all of that uncertainty is the same, and the difference matters more than anything else in this guide. Some patients are entirely predictable. Some could change dose at their next visit. Some have not enrolled yet, so there is nothing to predict from. Each card below covers one of the three.
A stable patient on a fixed dose: 2 kits, every week, no changes expected. The quantity is known. The only open question is the exact day, because visits slip by a day here and there and those small slips accumulate the further out you look. This is the easiest demand to plan for, and the only kind a prediction can get exactly right.
A patient who could titrate at any visit, taking 1, 2, or 4 kits depending on how they respond to treatment. You know they are coming. You do not know what they will need. Notice the shaded cells spread vertically as well as sideways. That vertical spread is dose uncertainty, and better scheduling data will not remove it. This is the component a safety buffer has to absorb.
Patients who have not enrolled yet. At the default setting this site sees about one a month, but a new patient could walk in tomorrow. There is no visit schedule to work from and no dose history to extrapolate, so prediction has nothing to act on. Unscheduled visits, damaged kits and replacements all land in the same bucket. Only a buffer covers this.
A site does not deal with patients one at a time. It deals with their combined demand against a single shared pool of kits. The charts below build up in order: total demand, then what happens with no resupply at all, then a shipment sent by hand, then the four algorithms that make that decision automatically. Each one introduces a single idea, so they are best read in sequence.
Total kits dispensed at the site since Day 1. The past is a staircase, where each step is a real visit. The future opens into a cone, because each patient's uncertainty stacks on top of the others. That cone is the core problem: plan for its lower edge and the site stocks out, plan for its upper edge and you send drug that may expire before anyone uses it. Every algorithm below is a different answer to the same question, which is where in the cone to aim.
Turn that cone upside down and you have inventory. Start from the kits on hand, the Site Available Inventory (SAI), which counts what is usable at the site plus anything already in transit to it, then let demand run against it with no replenishment. The strip along the bottom is stockout risk: the darker it gets, the more likely the site has run dry by that day. Lower the starting SAI and watch how much sooner that band appears.
Now send a single shipment by hand and watch inventory recover when it lands. Two things are worth noting. Shipments do not arrive the day you send them: transit runs about a week here, and that week is itself variable, which is why the recovery is spread out rather than a clean vertical step. And the risk that matters sits in the window before arrival, because ordering too late leaves the site dry while the box is still moving. Every algorithm that follows is just a rule for deciding when to press this button.
The simplest rule available: set a minimum and a maximum. When inventory drops to the minimum, order enough to bring the site back up to the maximum. With the defaults below, a site sitting at 6 kits has crossed the minimum of 8, so it receives 24 kits to reach its maximum of 30. Those same two numbers apply on Day 1 and on Day 60, whether the site has one patient or ten. That is what makes it static, and it is both the appeal and the limitation.
What to look for: the min drives risk, so raising it pushes the stockout strip down. The gap between min and max drives shipping frequency, so widening it gives you fewer but larger shipments. Set min to 4 and watch risk climb. Set max to 60 and watch the shipment count drop while kits sit unused at the site.
The opposite approach: stop working from fixed numbers and look at the actual patients instead. The system reads who is enrolled, what dose each one is on and when they are due back, then orders exactly that and nothing more. With the defaults it orders as soon as stock stops covering the next 8 days of predicted need, and tops up to cover 21 days. The thresholds now move as the site's patient list changes.
What to look for: the site carries very little between shipments, because the algorithm never orders more than the forecast asks for. That also means there is nothing held back, so whatever the forecast did not see, a titration or a new enrollment, lands straight on the site. Widen the short window and it orders earlier and carries more cover. Narrow it and watch the missed kits row react. Any of these algorithms can be made to look good or bad this way, which is exactly what the table is for.
The other exposure is data quality. The prediction rests entirely on each patient's last known dose, so a patient who up-titrates from 2 kits to 4 consumes double what was ordered for them, and there is no buffer to absorb the difference. That is manageable when visit and dose data are current and accurate. It becomes a real risk when they are not.
Take the prediction from the previous chart and add a fixed buffer on top. The prediction covers the demand you can see coming, and the buffer absorbs what you cannot: dose changes, new enrollments, the occasional damaged kit. This is the algorithm most RTSM systems run today. The buffer is the dial that trades stock on the shelf against missed doses, and the windows decide how far ahead the prediction reaches.
To put numbers on it: a site dispensing 2 kits per patient per week, with 3 active patients, a minimum buffer of 4 kits and a 21 day short window (three weeks), has a reorder point of 4 + (3 × 2 × 3) = 22 kits. Enroll a fourth patient and that threshold moves itself to 4 + (4 × 2 × 3) = 28 kits, with nobody logging in to reconfigure anything. That self adjustment is the whole point, and it is exactly what a static min-max cannot do.
What to look for: the threshold lines slope instead of running flat. They step up as patients enroll and drift back down as patients complete. Then try the two extremes. Set the buffers to 0 and you have rebuilt pure predictive. Set the windows to 0 and you have rebuilt min-max. The other two algorithms are really this one with a dial turned all the way in one direction.
Everything so far has assumed inventory only leaves the shelf when a patient receives it. Expiry breaks that assumption. This site holds 25 kits, but 15 of them come from an older batch that expires sooner. That situation is common, because the initial shipment sent at site activation usually shares a single expiry date.
Two dates matter here, and confusing them is a common mistake. At the Do-Not-Count (DNC) date, the aging kits stop counting toward available stock, but they remain perfectly dispensable. At the later Do-Not-Dispense (DND) date they expire for real and are destroyed. In the meantime the site always dispenses the oldest kits first, so the aging batch drains before the fresh one is touched.
What to look for: the vertical drop at the DNC line. No patient received anything and the kits are still physically at the site, yet the algorithm sees inventory fall and responds by ordering. That is a real shipment with real freight cost, triggered by an accounting event rather than by demand. Move the expiry window and the trade-off becomes clear: pull DNC earlier and you provoke an extra shipment, push it later and more of the aging batch is likely to expire unused and be written off.
| Algorithm | Approach | Threshold Type | When to Order | Strengths | Weaknesses |
|---|---|---|---|---|---|
| Min-Max | Two fixed numbers, set once | Static, never moves | Stock hits the floor | Easy to explain, configure and audit; nothing to get wrong at runtime | Blind to the patient list, applying the same thresholds whether the site has 1 patient or 10. Tends to over-stock quiet sites and under-stock busy ones |
| Pure Predictive | Order exactly what the patient schedule implies | Moves with predicted need; no buffer | Stock falls below the predicted need, with no buffer term | Carries little stock and little waste when doses are stable and visits are punctual | No cushion, so an unexpected titration or new enrollment causes a shortfall. Depends on clean, current data |
| Standard Combined (most common) | Prediction plus a fixed safety buffer | Moves with predicted need, floored by the buffer | Stock falls below buffer + predicted need | Adapts as patients enroll and titrate while still covering the unpredictable; sensible default for most trials | Prediction still assumes the last known dose, so it lags a jump; five parameters to get right |
| Combined + Expiry | As above, but expiry also drains stock | Same, plus expiry-driven drops | Either demand or an expiry event pushes stock below threshold | Reflects what actually happens at sites; surfaces the cost of expiry before it bites | Depends on accurate batch and expiry data; can trigger shipments that exist only to replace written-off stock |
The same site and the same patients, judged four ways. Green is better, red is worse, and each row should be read across. The point is not to crown a winner but to see that no column wins every row. Fewer shipments generally means more stock sitting at the site. Leaner stock generally means more trips to the depot. These numbers describe one site, one set of patients and the settings currently sitting above them, nothing more. Change a buffer, a window or a threshold and the ranking changes with it, which is the trade-off you are actually configuring when you set up resupply on a study.
| KPI | Min-Max | Pure Predictive | Standard Combined | Combined + Expiry |
|---|---|---|---|---|
| Shipments sent (each one carries freight cost) | — | — | — | — |
| Kits shipped (total drug committed to this site) | — | — | — | — |
| Stock held (how much sits on the shelf, and for how long) | — | — | — | — |
| Days with no stock (best case / typical / worst case) | — | — | — | — |
| Kits a patient couldn't get (the metric that matters most) | — | — | — | — |
| Kits expired unused (written off, only applies with expiry) | n/a | n/a | n/a | — |