MediPOS keeps stock by batch: every strip on your shelf belongs to a batch with its own number, expiry date and cost. At the counter it always sells the batch that expires first. This is FEFO, first expiry, first out, and it stops older stock from expiring at the back of the shelf while fresher stock is sold. Batch tracking and FEFO work on every plan.
What a batch is
A batch is one product with one batch number and one expiry date. If the same batch number arrives with a different expiry date, MediPOS treats it as a separate batch.
Each batch carries its batch number (stored in capitals), expiry date, cost and MRP per base unit, and the supplier it first came from. Stock is held per batch and per location (Main Store or Quarantine). Items that do not track batches, such as general goods, keep all their stock in one batch called DEFAULT.
How batches are created
| Where | What happens |
|---|---|
| Posting a purchase | Each line's Batch no. and Expiry create the batch, or add to it if the product already has that batch number and expiry. |
| Opening stock | The same, from each opening stock line. |
| Adding stock with an adjustment (for example Found stock) | The same. |
| Sale returns and transfers | No new batch. A return goes back into the batch it was sold from, and a transfer arrives in the same batch. |
When more stock of an existing batch arrives at a different cost, MediPOS blends the two. Say you have 20 tablets of Augmentin 625 batch AG2207 at Rs. 60 each and receive 40 more of the same batch at a landed cost of Rs. 63. The new cost is (20 × 60 + 40 × 63) ÷ 60 = Rs. 62 per tablet. Bonus units from a 10+1 scheme are included in the landed cost.
Open any product to see its Stock by batch panel, nearest expiry first, with Batch, Expiry, Location, Quantity, cost and MRP per base unit. People without See purchase cost do not see the cost column.
How FEFO works at the POS
- The cashier adds the medicine in any unit, and completes the bill.
- MediPOS looks at the batches with stock in Main Store and leaves out any that are blocked (see below).
- It sorts them by expiry, earliest first. Batches with no expiry come last. If two batches expire on the same day, the older one goes first.
- It takes the quantity from the first batch. If that batch does not have enough, it takes the rest from the next one.
Say Augmentin 625 has 4 tablets left in batch AG2207, expiring 30/11/2026, and 60 tablets in batch AG2391, expiring 31/08/2027. A customer buys 6 tablets. MediPOS takes 4 from AG2207 and 2 from AG2391. The invoice records both batches and the cost of each, so the profit on that bill is exact.
The line is priced from the MRP of the first batch. The POS always chooses the batch itself; cashiers do not pick batches on the POS screen.
If there is not enough sellable stock in total, the bill is not saved and the cashier sees a message such as Not enough stock of Augmentin 625mg Tablet: 4 units available, 6 units needed. Quantities in that message are in base units.
How expired and near-expiry stock is blocked
- Expired batches are never sold. A batch can be sold up to and including its expiry day. From the next day it is blocked.
- Near-expiry blocking is set in Settings → POS & receipts → Stop selling batches expiring within (days). The default is 0, which blocks only expired batches. Set it to 30 and any batch expiring within the next 30 days is skipped. The POS sells from the next batch instead, or refuses the sale if no other batch has stock.
- Dates use your pharmacy's own day, so a bill at 11:50 pm uses the right date.
- The stock figure in the POS search counts every in-date batch, so a batch inside the blocking window can still show there. It is refused when the bill is completed.
Blocked stock stays on your books until you deal with it on the Expiry dashboard.
Batch and expiry on receipts
With Print batch & expiry on receipts ticked (it is on by default), each line of the receipt prints its batch, for example Batch AG2207 exp 11/26. If a line came from two batches, both are listed. This helps when a customer checks the expiry, or when a company recalls a batch.
Rules and tips
- A batch-tracked product cannot be purchased or taken in as opening stock without a batch number, and an expiry-tracked one needs an expiry date.
- Batch tracking cannot be switched on or off once a product has stock history.
- A batch can never go below zero.
- Stock adjustments that remove stock also take the earliest expiry first, but include expired batches, because writing them off is the point.
- Type expiry dates carefully. A batch entered as 2062 instead of 2026 would be sold last and never flagged.
- Changing the blocking days needs the Manage settings permission.
Common questions
Can a cashier give a customer a fresher batch?
Not from the POS screen. It always sells the earliest expiry first. If the older batch is too close to expiry to sell, raise the blocking days or move it to Quarantine.
Why was a bill refused when there is stock on the shelf?
The stock is blocked by expiry, is sitting in Quarantine, or was never entered with a purchase or opening stock. The product page shows each batch, its expiry and its location.
Does FEFO need the Expiry dashboard in my plan?
No. FEFO selling and expiry blocking work on every plan. The Expiry dashboard is a separate module for reviewing and clearing expiring stock.
Related guides
Last updated 25 September 2026. Still stuck? Contact us.