Reading time: about 9 minutes
Dead stock is not "what does not sell": it is your money tied up, and every euro sitting there is a euro that is not in the till or in something that does move. This case turns it into a concrete figure and a twenty-line list you can actually decide on.
Step by step
-
Export both files and check they share a key
The "key" is the column that lets you join them: the product code. If one file shows
650123and the other650123.4or with leading zeros, the join will fail on half the rows and the result will be a silent mess.Open both and look at ten codes. If they do not look exactly alike, say so in the prompt: it is one of the few things a model fixes well and instantly.
-
You define "dead", with a number
Here is the decision in this case, and the AI cannot make it because it depends on your pharmacy. "Dead" can mean:
Zero sales in 12 months — the hard criterion, the one nobody argues with.
Fewer than 2 units a year while holding 5 — two and a half years of cover, which for most things is too much.
More than 12 months of cover (stock ÷ monthly sales) — the finest, and the one that works best.Pick one. Pick all three and you will have three lists and act on none. And give the model the criterion in numbers, not adjectives: "things that sell slowly" is not a criterion, it is a feeling.
Attached are two files from a pharmacy: 1) STOCK: product code, description, units on hand, retail price and cost price. 2) SALES 12 MONTHS: product code, total units sold. <<The codes in file 1 carry a check digit at the end and those in file 2 do not. Normalise them before joining.>> JOIN both by product code and tell me FIRST, BEFORE ANYTHING ELSE: - how many items are in each file - how many you managed to join - how many stock items do NOT appear in sales (those are 0 sales, not a join error: report them separately) THEN, using the criterion <<stock covering more than 12 months at the current sales rate>>, give me the list sorted by MONEY TIED UP (units × cost, or × retail if no cost), highest first. Only the top 20. For each: code, description, units, months of cover, money tied up. And at the end, the TOTAL money tied up across the whole list, not just the top 20. -
Look at the join counts first, not the list
That is why the prompt asks for the counts before the list: they are the only thing that tells you whether the join worked. If you have 4,000 stock items and only 1,200 joined, the list below is well-formatted rubbish.
The distinction between "did not join" and "joined with zero sales" is the most commonly confused, and they are opposites: the first is a technical failure, the second is exactly what you are looking for.
-
Split the list into three buckets, because not everything goes back
A list of twenty dead items is not handled the same way throughout. Ask it to split them, and give it the criteria yourself — they are pharmacy criteria, not data ones:
From those 20, split them into three groups and explain in one line why each goes where it goes: A) RETURN OR RENEGOTIATE with the supplier (no rotation and not expiring soon). B) CLEAR HERE (expires within 6 months, or is last season). C) KEEP even though it does not rotate. These are items I must hold by obligation or for service, whether they sell or not. For group C do not argue: if I say it stays, it stays. Just tell me how much money that group adds up to, so I know what it costs me.Group C is the one no management tool understands and you do: a pharmacy holds some things because it is a pharmacy. What this step adds is not removing them, it is knowing what they cost — a different and better-informed decision.
-
Repeat in three months with the same prompt
The value of this case is not the first time: it is the second. The first list is years of accumulation and it will impress you. The one three months from now tells you whether what you did worked, and that figure — total money tied up — is the only honest indicator.
Save the prompt and the total somewhere you will find it. Two numbers three months apart are worth more than twenty different analyses done once.
A full example, and what is wrong with it
Stock and twelve months of sales from a pharmacy with 3,900 items. The first thing it returned is what you read, and it is not the list.
"Before the list:
Items in STOCK: 3,912. Items in SALES: 2,744.
Correctly joined: 2,701.
In stock and NOT in sales: 1,211 (zero sales in 12 months).
In sales and not in stock: 43 (probably out of stock or discontinued).
Total money tied up (criterion: cover > 12 months): €18,430 across 1,847 items."
And now, what is wrong with that reply:
- The counts add up, and that is the good news. 2,701 joined + 1,211 with no sales = 3,912, which is exactly the stock total. If that sum did not match the total, the list below would be rubbish and you would not know by looking at it. It is the ten-second check that makes the rest of the report worth anything.
- But 1,211 items with zero sales is too many. A third of the stockroom with not one unit sold in twelve months is not credible in a working pharmacy. What it nearly always means is that the sales export did not cover the full year — many systems default to a quarter — and the join is technically correct over the wrong period.
- And the €18,430 total is both correct and misleading. Correct because it comes from the units and the cost you supplied. Misleading because it includes the 1,211 above, so if the export was wrong, this figure is inflated and looks exact. Decimal places say nothing about whether the input was right.
- The 43 "in sales and not in stock" are a gift. You did not ask for them and they are the most actionable finding in the report: things that sell and of which you have none left. It could be a stock-out, a withdrawal, or something rotating that you stopped replenishing. That list gets looked at today; the dead stock can wait until tomorrow.
The rule of this case in one sentence: if a count surprises you, suspect the export before you suspect the stockroom. A third of items dead is nearly always a badly exported period, not a badly run pharmacy.
Go back to the software, check the sales report covers the full twelve months, and repeat. The total usually halves — and that is the figure you actually decide on.