A Par Level Is a Decision, Not a Setting
You decide never to be caught below two boxes of adrenaline. You type it in. At one o'clock the following morning a scheduled job recalculates that number from thirty days of recorded usage and writes its answer over yours — and whether that helps or quietly disarms you depends entirely on whether the way you issue stock is the way the job counts it.
A par level looks like a settings field. It is a box on a form, it takes an integer, and it sits next to a dozen other boxes that genuinely are settings. But the number that goes in it is not a preference. It is a decision about what you are willing to run out of, made by somebody who knows what happens at that counter on a Friday night, and the difference between those two things is the subject of this post.
This is the third post in a pharmacy series, and it is the one where we describe a piece of our own product that behaves in a way most people who use it have never been told about. Not because it is hidden — the job is in the repository, it is scheduled, it appears in our own service-health listing — but because nothing in the interface says the number you just typed has a shelf life of about fourteen hours.
What actually happens to the number you type
Every night at one in the morning, a scheduled job walks every item and recalculates its reorder point from the textbook formula. It is not an estimate offered for your approval. It is written straight over the stored value.
The calculation, exactly as it runs
There is nothing wrong with this formula. It is the one every inventory textbook teaches and the one our own academy course teaches. The question worth asking is not whether the arithmetic is right — it is what goes into the first row, because everything below it is multiplication.
The first row is where it gets interesting
Usage, in that calculation, means recorded stock issues: check-outs from the stores, issues against a customer invoice, procurement issues, adjustments. If your stock leaves the building through one of those doors, the calculation sees it and the arithmetic works exactly as advertised.
A retail sale rung up at the till does not go through one of those doors. It reduces stock — correctly, immediately, with a proper movement record — but it does not create the kind of issue record the nightly calculation reads. So for an item that only ever leaves over the counter, thirty days of brisk trade looks like thirty days of no usage at all.
Follow that through. Average daily usage of zero, multiplied by any lead time you like, is zero. Add a safety stock that defaults to zero and you get a reorder point of zero. And low stock, everywhere it is tested in the product, means on-hand at or below the reorder point. A reorder point of zero with stock on the shelf is a condition that never becomes true.
The failure mode worth naming out loud
The alert does not break, does not error and does not appear in any failure log. It goes quiet. A quiet alert reads exactly like a healthy shelf, which is why this is worth a post rather than a footnote: every other kind of failure announces itself, and this one looks like good news for as long as it takes to run out of something.
Which case are you in? A two-minute check
You do not need us to answer this and you should not take our word for it. The check is short enough to do while reading.
Four things to look at, in this order
- Open your item list and sort by reorder point. If a large block of your fast-moving lines sits at zero, you have your answer — those are items whose issues are not reaching the calculation.
- Pick one of them and ask how it physically leaves: rung up at a till, or issued against a document? The first is the blind spot, the second is fine.
- Check when you last received a low-stock notification for an item you know ran low. If the honest answer is that you cannot remember one, that is data.
- Look at whether anybody has ever set a safety stock. It defaults to zero, and a non-zero safety stock is the one thing that keeps a reorder point off the floor when usage reads as nothing.
A wholesale distributor, a hospital pharmacy issuing to wards against requisitions, or anybody invoicing their customers will generally come through this check clean — their issues are documented issues and the calculation has been quietly doing its job correctly all along. A retail counter will not.
Every other kind of failure announces itself. An alert that goes quiet looks exactly like a shelf that is fine.
One number, everywhere the item is held
The second thing worth knowing is smaller but it catches people out in a specific way. The reorder point is one integer on the item. Not one per branch, not one per store room, not one per dispensary.
That distinction matters more in a pharmacy than almost anywhere else, because the same drug plays different roles in different rooms. Two boxes in the main store is a comfortable position. Two boxes in the emergency tray is a different sentence entirely, and no single number can express both.
What a par level per consumption point would mean
- The emergency tray holds its own minimum, independent of what is sitting in the main store two doors away.
- A branch with different demand carries a different trigger for the same product, rather than sharing one number that suits neither.
- Replenishment becomes an internal transfer with its own trigger, not a purchase decision made at group level.
- A room that is empty raises an alarm even when the item, in total, looks well stocked.
What exists today
- One reorder point per item, applied to the total on-hand across every location it is held in.
- A report called Low Stock by Location — which is worth understanding precisely: it triggers on the item-level total against the item-level reorder point, then breaks the result out to show you where that stock sits.
- That is a location view of an item-level decision. Genuinely useful for working out where to go looking, and not the same thing as a location-level trigger.
- So a nearly empty emergency tray sitting behind a well-stocked main store does not raise anything, because in total the item is fine.
We are precise about that report because its name invites the other reading, and we would rather explain the distinction than let somebody discover it during a stockout.
What is built here, and what is not
Running in the product today
- A nightly reorder-point calculation — average daily usage over thirty days, multiplied by the item's lead time, plus its safety stock. Scheduled, monitored, and correct arithmetic.
- Lead time and safety stock per item, with defaults, so the calculation can be tuned per product rather than globally.
- Low-stock detection and alerting through a report, a scheduled email, a push template and an in-app alert, all reading the same trigger.
- A Low Stock by Location report, which takes items below their item-level trigger and shows you which warehouses and locations hold the remaining stock.
- A workflow event for low stock, so replenishment can be automated rather than watched.
Absences — on the roadmap, and commissionable now
- Over-the-counter sales are not in the usage figure. Issues, invoices, procurement and adjustments are. This is the one that matters and it is why a retail pharmacy can end up with reorder points of zero.
- No par level per consumption point. One number per item, applied to the total across every location.
- No way to pin a number against the recalculation. A reorder point you set deliberately for a critical drug is replaced by the calculated value at one in the morning, and nothing marks it as having been overridden.
- A fixed thirty-day window, with no seasonality and no variability maths. No trend, no service-level target, no standard deviation — the buffer is the safety stock you typed, not a computed one.
What we would decline, and would rather say now
- We will not decide your minimum for a critical medicine. The formula answers "what does usage suggest". A pharmacist answering "what am I prepared to be caught without" is answering a different question, with a licence behind it, and the right design lets that answer win rather than computing over it.
- We will not present a calculated reorder point as a clinical stock policy. It is arithmetic on thirty days of movement. Anything that has to satisfy a regulator about the continuous availability of a particular product is a policy you hold, and a report from us is evidence towards it rather than the thing itself.
The four absences are absences rather than positions, and each is commissionable now on a written specification, a timeline and a price agreed before any money moves. The evidence that this is a real offer rather than a sales line is Kenya, where the eTIMS transmission and the maintained statutory payroll engine both exist because clients needed them and paid for them. We will not print a date on a blog post.
The honest summary is that the mechanism is sound and one of its inputs has a coverage gap. Everything downstream of the usage figure — the formula, the schedule, the alerting, the workflow hook — does what it says. The work is in what feeds it, and in letting a human decision outrank a calculated one.
What to do this week, whatever software you run
-
Find your zeros
Sort your catalogue by reorder point and look at what sits at the bottom. In any system, an item with meaningful turnover and a trigger of zero is an alert that cannot fire, and it takes a minute to spot once you know to look.
-
Set a safety stock on your critical lines
Not all of them — the twenty or thirty products where being out is a serious event. A non-zero safety buffer is the floor that survives a usage figure of zero, which makes it the most useful field on the form and the one most often left alone.
-
Write down the ones that are decisions, not calculations
Keep a short list of the products where a human has deliberately chosen a minimum and the maths is not entitled to a vote. Ten items on a printed sheet is a perfectly respectable control, and it is the list you hand to whoever builds you something better.
-
Ask your vendor the awkward version of the question
Not "do you support reorder points" — everybody does. Ask which transactions count as usage, whether the number is recalculated, when, and what happens to a figure a person typed. In our experience the fourth part of that question is the one nobody has a ready answer to.
The title of this post is the whole of the argument. A par level presents itself as a setting because it lives in a settings form and holds an integer. It is actually a decision — about risk, about what a stockout costs, about which shelf you are never willing to find empty — and a system that treats a decision as a value it may recompute has quietly changed who is making it.
Bring your item list, sorted by reorder point
We will do the four-point check with you and tell you plainly which case you are in. If your issues are documented issues, the calculation has been working correctly the whole time and we will say so and leave it alone.
Talk to us about pharmacy operations