Practice Management

Running an In-Clinic Pharmacy in India: GRN, Batch and Expiry Control

Anexshe Revedha·Cofounder & COO, CuraVerto·11 September 2026·7 min read

A pharmacy inside a clinic looks simple from the front desk: a prescription arrives, medicines go out, a bill is printed. The losses happen behind that, in three places that most clinics run on memory and paper: what came in (the goods receipt), which batch it came in as, and when that batch expires. This post walks through those three, plus GST on the way out, and describes what CuraVerto's Pharmacy module does at each step so you can judge any system, ours included, against the same checklist.

Step 1: The GRN is where stock accuracy is won or lost

A GRN, or goods received note, is the record you create when a supplier delivers against an invoice. Every downstream number depends on it: the quantity you think you hold, the batch you will dispense from, the cost your margin is calculated on, and the input tax credit you claim. A GRN typed with a wrong batch number or a wrong pack size does not fail loudly. It just makes the shelf and the screen disagree for months.

CuraVerto's Pharmacy module supports receiving stock against a supplier invoice line by line, capturing the drug, batch number, expiry date, quantity, rate, MRP, HSN code and GST percentage for each row. Instead of typing an invoice with dozens of lines, a clinic can photograph it and let CuraVerto's invoice scan read the lines, after which staff review and confirm before the GRN is posted. The scan is a drafting aid: a person still checks the batch and expiry on each line, because those two fields are exactly where a misread costs money.

The free-quantity trap: packs are not tablets

Suppliers often bill ten strips and send two free under a scheme. If your catalogue stores stock in tablets but your GRN row records packs, the free quantity is easy to mis-book. In CuraVerto, the stock quantity for a received line is the pack quantity multiplied by the drug's pieces per package, and the free quantity is converted the same way before it reaches stock. So a scheme of two free strips of fifteen tablets adds thirty dispensable tablets to the batch, not two. Whatever system you use, test this on a real scheme invoice before you trust it: receive a line with free quantity and check that the on-hand count moved by pieces, not packs.

Step 2: Batch-level stock, not just drug-level stock

Stock that is tracked only as "Amoxicillin 500mg: 240" hides the one fact a pharmacist needs at the counter: which of those 240 expire first. Batch-level tracking keeps a separate balance for each batch number with its own expiry date, which is what makes recalls and near-expiry sales manageable.

  • Each received line creates or tops up a batch balance carrying its own batch number and expiry.
  • Dispensing draws from batches, so a recalled or damaged batch can be isolated without touching the rest of that drug's stock.
  • Reports read from batch balances, which is why a wrong batch on the GRN corrupts every report built on it.

Step 3: Expiry control that works before the counter, not after

The expensive way to find expiring stock is to open a box and see it. The cheap way is a system that shows the risk early and refuses to hand out stock that should not be sold. In CuraVerto's Pharmacy module, dispensing selects batches first-expiry-first-out, and the batch query excludes batches that are already expired or quarantined, so those never reach the pharmacist's cart. A quarantine flag lets you pull a batch out of circulation without deleting its history.

For planning, there is an expiry report you can pull for a window of your choosing, defaulting to the next 90 days, which lists batches approaching expiry and leaves out quarantined and zero-quantity batches so the list is only things you can still act on. It can be downloaded as CSV. The practical use is a weekly routine: pull the 90-day list, decide what to return to the supplier, what to discount, and what to reorder less of.

Question at the counterPaper registerBatch-aware system
Which batch do I hand out first?Whatever is at the front of the shelfEarliest unexpired batch, selected at dispensing
Is anything expiring soon?Found when someone checks the shelfExpiry report for a chosen window, exportable as CSV
Can I pull one bad batch?Search the shelf and hopeQuarantine that batch, keep its history
Did the free scheme land correctly?Depends on who typed itFree quantity converted to pieces at receipt

Step 4: GST on the way out

Each medicine has its own HSN code and GST rate, and a pharmacy bill has to carry them per line. CuraVerto stores the HSN and GST rate on the catalogue entry, applies them when a sale is dispensed, and generates a GST invoice for the sale. The Pharmacy module also includes GST summary, HSN-wise, input tax credit and GSTR-1 style reports so the numbers your accountant needs come from the same transactions that moved stock, instead of a separate spreadsheet. For the fiscal-year and document-numbering side of billing, see the related post below.

Step 5: Day-end and the reports you will actually open

A pharmacy that reconciles daily catches errors while someone still remembers the sale. CuraVerto includes a day-end view and a set of registers and reports, among them stock ledger, stock valuation, inventory ageing, supplier ageing, and a Schedule H1 register report. Which of these you rely on depends on your clinic, but the principle is the same everywhere: every closing number should trace back to a receipt, a dispense, or a return, not to a guess.

What plan you need

On CuraVerto, the in-house Pharmacy module with FEFO dispensing, expiry alerts, purchase orders and vendor management is included from the Pro plan at ₹24,999 per year, not on Essential at ₹9,999. Supplier invoice scanning is metered per scan from your wallet, so it is a usage cost, not part of the plan fee. Prices exclude GST.

Frequently asked questions

What is a GRN in a clinic pharmacy?
A GRN, or goods received note, is the record made when a supplier delivers stock against an invoice. In CuraVerto's Pharmacy module it captures drug, batch, expiry, quantity, rate, MRP, HSN and GST for each line, and it is what creates the batch stock you later dispense from.
How does CuraVerto stop expired medicines being dispensed?
CuraVerto's dispensing step selects batches first-expiry-first-out and excludes batches that are expired or quarantined, so they do not appear in the pharmacist's cart. Staff can also quarantine a batch to pull it from circulation while keeping its history.
How are free scheme quantities handled in the GRN?
CuraVerto converts the free quantity on a received line into dispensable pieces using the drug's pieces per package, the same way it converts the paid quantity, so a free strip adds the full number of tablets to stock rather than a single unit.
Which CuraVerto plan includes the pharmacy module?
The in-house Pharmacy module is included from the Pro plan at ₹24,999 per year, excluding GST. It is not part of the Essential plan at ₹9,999 per year. Supplier invoice scanning is charged per scan from the wallet.
Can I download expiry and GST reports?
Yes. CuraVerto's Pharmacy module offers an expiry report for a chosen window with CSV download, and GST reports including a GST summary and HSN-wise view, built from the same transactions as stock movement.
Related reading

Frequently asked questions

Run your clinic pharmacy on batch-level stock

CuraVerto's Pharmacy module covers GRN receiving, first-expiry-first-out dispensing, expiry reports and GST invoices, included from the Pro plan at ₹24,999 per year excluding GST.

See CuraVerto pricing →Explore the Pharmacy moduleChat on WhatsApp

Prefer not to use WhatsApp? Leave your number and we will call.

We use your name, clinic and number only to contact you about CuraVerto. See our privacy policy.

More from the blog

Practice Management
Running Teleconsultation From an Indian Clinic: What the 2020 Guidelines Ask For, and How WhatsApp Video Fits
Practice Management
From Instagram Ad to Booked Appointment: Clinic Lead Management in India
Practice Management
How to Reduce Clinic No-Shows in India With WhatsApp Reminders