Inventory
Inventory, batches & FEFO
Batch-level stock tracking with first-expiry-first-out enforcement.
Every unit of stock in PharmaPOS is tied to a batch — a batch number, an expiry date, and an on-hand quantity. Products don't hold quantities; batches do. This is the single most important idea in the system.
Why batches, not products
Pharmacies are regulated. If a drug is recalled by the manufacturer, the recall is against a specific batch — not the product. Your system must be able to answer, in seconds, "how many strips of Batch BN102284 did we sell, and to whom." PharmaPOS can. Product-level stock software cannot.
Adding batches
- Automatically — every purchase line creates or updates a batch. This is the normal path.
- Manually — from a product page, click Add batch. Use this for opening stock, free samples, or physician samples.
- By import — the bulk import supports batch columns (
batch_no,expiry,opening_qty) and creates them in one shot.
FEFO auto-pick
When you bill a product, PharmaPOS picks the batch with the earliest expiry that still has stock. You can override at the counter with two keystrokes — every override is logged with the cashier's name and time. See the FEFO blog post for the full argument on why this beats manual picking.
Expiring & low-stock reports
Under Inventory → Reports you get:
- Expiring soon — 30 / 60 / 90 day windows. Filter by category, supplier, or margin band.
- Below reorder — everything under the reorder level you set on the product.
- Dead stock — no sale in 90 days. Return-to-supplier candidates.
- Movement history — every stock event for a batch, with the sale/purchase/return document it came from.
Adjustments (breakage, theft, sample-out)
From a batch, click Adjust, pick a reason (breakage, expired, given as sample, physical count correction), enter the quantity change, add a note. The adjustment shows on the movement log; a manager can review or reverse it.
Bulk import — what to know
- Column names like
brand,salt,qty,exp,hsn,mrp,gstauto-map. - The preview shows per-row validation — duplicate SKU, invalid GST rate, expired batch date, missing name/MRP all flag in red before commit.
- Toggle Upsert mode to refresh MRP/stock on existing SKUs instead of failing on duplicates.
- Re-uploading an archived SKU offers Restore — no duplicate rows, no data loss.
Still stuck?
Email us at support@pharmapos.org — we usually reply within a business day.