Most billing software models stock as a quantity against a product. For a hardware shop that is correct. For a pharmacy it is wrong in four expensive ways at once.
The same medicine is not the same stock
A strip of the same brand and strength can be sitting on your shelf in three batches, purchased at different times, with different expiry dates and — after a price revision — different printed MRPs. Software that stores "quantity: 47" has thrown away the information you actually need.
What breaks without batch tracking
FEFO dispensing becomes manual. First-expiry-first-out is how you avoid write-offs. If the system cannot tell the counter which batch to reach for, the newest strips at the front get sold and the old ones age quietly into a loss.
Expiry returns get missed. Suppliers accept expiry returns within a window. Without per-batch dates grouped by supplier, you find out a batch expired when you are counting stock, which is after the window closed.
Recall traceability is gone. When a batch is recalled, you need to know which customers received it. That requires the batch number on the invoice, which requires the batch on the line item.
DPCO ceiling compliance is unenforceable. Billing above a notified ceiling price is a violation. With multiple MRPs per SKU and no batch context, the system cannot check.
Expiry management is a purchasing problem, not an alerts problem
Most systems bolt on an expiry alert and consider the feature done. The alert tells you about a loss you have already taken.
Three things make it actually useful:
- 1Tiered alerts at 90, 60 and 30 days. Ninety days is when a supplier return is still comfortable; thirty days is when you should be discounting to move it.
- 2Grouped by supplier. You raise one expiry return per supplier, not twelve individual chases.
- 3A rupee value at risk, on the dashboard. "Eleven items expiring" changes nothing. "₹18,400 expiring this quarter" changes next month's purchase order.
Reorder points from velocity, not a fixed minimum
A fixed minimum quantity per SKU is a guess that ages badly. Reorder points should be computed from actual sales velocity against that supplier's lead time — which means the system stops you over-ordering antibiotics in April and running dry on antihistamines during pollen weeks.
The compliance gate has to be server-side
Schedule H and H1 medicines cannot be dispensed without recording the prescribing doctor, the patient and a prescription reference. Two implementation details matter:
- The block must be enforced on the server, not by hiding a button. A restriction implemented in the interface is a restriction that gets clicked past on a busy evening.
- The register must be maintained in the format an inspection actually asks for, generated automatically. A compliance feature that produces a spreadsheet somebody has to reformat is not a compliance feature.
The one feature with the highest return
Not any of the above. It is a WhatsApp refill reminder to chronic-medication customers a few days before they run out, with the previous bill attached as a PDF on the same thread.
Batch tracking stops you losing money. Refill reminders make you money. A pharmacy system should do both, and most do neither.
Aman Boora
Frappe/ERPNext developer and founder of Google IT Solution. Builds production ERP, pharmacy and logistics systems, and runs the Maps and SEO side that gets those clients found in the first place. Certified Ethical Hacker.