Inventory and stock
Items, batches, expiry alerts, suppliers, purchase orders, stock movements, and bulk import.
Inventory is your clinic's stock book. It holds three kinds of things — medications, supplies and equipment — tracks how much of each is on the shelf, warns you before you run out or before a batch expires, and writes down every single change with a reason and a name against it. Both the admin and the pharmacist work from the same module.
/c/your-clinic/admin/inventory/c/your-clinic/pharmacist/inventorySet it up in the right order
Items point at a category and a supplier, so those two have to exist first. Do it in this order and you will never have to go back and fix things.
- 1
Create your categories
Groups like Homeopathic Remedies, Wound Care, Diagnostic Equipment. Each category is tied to one item type.
- 2
Create your suppliers
The firms you buy from, with their phone number, drug licence and GSTIN.
- 3
Add your items — one by one, or all at once with Import Excel
This is where you set the opening stock, the minimum stock and the prices.
- 4
Set a sensible Minimum Stock on every item
That number is what makes low-stock alerts fire. An item with a minimum of 0 will never warn you.
- 5
Get into the habit of clicking Check Expiry every week
Expiry alerts are not raised on a schedule — somebody has to press the button. See Alerts below.
The inventory dashboard
- Total Items
- Every item on your books.
- Low Stock
- Items sitting at or below the Minimum Stock you set for them.
- Out of Stock
- Items at zero.
- Expiring Soon
- Batches whose expiry date falls within the next 30 days.
- Expired Stock
- Batches already past their expiry date.
- Active Alerts
- Alerts nobody has resolved yet. Same number you see on the floating alerts button.
The Quick Actions row takes you to Add New Item, View All Items, Purchase Orders, View Reports and Transaction Logs. Below the stats, Analytics Overview draws six charts: Stock Health Status, Stock Movement (Last 14 Days), Items by Category, Expiry Status, Items by Type and Inventory Value by Category. The charts are held for a minute at a time — click Refresh at the top right if you have just changed something and want the numbers redrawn.
Recent Alerts on the left shows the latest five (No active alerts when you are clear), and Low Stock Items on the right shows the five worst offenders, with View all dropping you into the item list already filtered to low stock.
Categories and suppliers
Both live under Inventory. Categories are at Categories, suppliers at Suppliers (with a Search suppliers... box, since that list grows).
- Category Name
- Required. For example
Homeopathic RemediesorWound Care. - Description
- Optional note for your staff.
- Category Type
- Required — Medication, Supply or Equipment. This is the one that catches people out: on the item form, only categories whose type matches the item's type are offered. A category typed as Supply will never show up on a medication.
- Supplier Name
- Required. The only mandatory supplier field.
- Contact Person, Email, Phone, Address
- Who you ring when a delivery is late. The phone number is pulled into the Low Stock report so you can reorder without hunting for it.
- Drug License Number
- For example
DL-12345-2024. - GST Number (GSTIN)
- The 15-character GSTIN, for example
22AAAAA0000A1Z5. - Notes
- Anything else — payment terms, delivery days.
- Active Supplier
- On by default. Switch it off to retire a supplier: they keep their history, but only Active suppliers can be picked on a new purchase order.
Items
Search with Search items by name, SKU, or barcode.... Click Filters to narrow by Category, by Type (All Types, Medication, Supply, Equipment), or to tick Low Stock Only; Clear Filters resets them. The list loads 20 rows at a time as you scroll. Clicking anywhere on a row opens the item; the pencil edits it and the bin deletes it.
- Add Item — the full form, covered below.
- Import Excel — the bulk import wizard, covered below.
- Refresh — re-reads the list.
- Delete Selected (n) — appears once you tick row checkboxes; you confirm with Delete All.
On a phone or a narrow window each item becomes a card, and under the stock badge you get an estimate of how many doses are left in the tin — something like ~24× 1 Dram Globules · ~48× ½ Dram Globules. That is your current stock divided by how much stock each dispensing size takes out.
Adding an item
Basic Information
- Item Name
- Required. The full product name as it will read on prescriptions and invoices —
Arnica Montana 30C. - Generic Name
- The scientific name of the substance, e.g.
Arnica montana. - SKU
- Your own short code, e.g.
HOM-ARNA-30. It must be unique — a repeat gives you An item with this SKU already exists. - Barcode
- The number on the pack. Scan it or type it.
- Item Type
- Required — Medication, Supply or Equipment. It decides which categories you are offered and whether the medication sections appear at all.
- Category
- Searchable list, filtered to categories of the same type. Empty? Create the category first.
- Supplier
- Searchable list of your suppliers.
- Manufacturer
- Who makes it (SBL, Dr. Reckeweg…), as opposed to who you buy it from.
- Manufacturing Date
- As printed on the pack.
- Description
- Internal note. Patients never see it.
Medication Details
This section only appears when Item Type is Medication.
- Dosage Form
- Tablet, Syrup, Ointment, Drops, Powder, Globules, Mother Tincture (Q), Dilution or Other.
- Strength
- e.g.
30C,200C,1M,Q. - Storage Conditions
- Room Temperature, Refrigerated (2-8°C), Frozen (-20°C), Cool & Dry Place or Protect from Light.
- Requires Prescription
- Tick for anything that must not go over the counter without a doctor's line.
- Controlled Substance
- Tick for regulated substances that need special handling and records.
Homeopathy Details
A green-bordered panel that appears only after you pick Globules, Mother Tincture (Q) or Dilution as the dosage form. It is what makes this a homeopathic stock book rather than a generic one, and it is easy to miss.
- Potency
- e.g.
6,30,200,1M,10M. - Potency Scale
- X (Decimal - 1:10), C (Centesimal - 1:100), LM (50 Millesimal) or Q (Mother Tincture).
- Source Type
- Plant Kingdom, Animal Kingdom, Mineral Kingdom, Nosode, Sarcode or Imponderabilia.
- Latin Name
- e.g.
Arnica montana. - Pharmacopoeia
- HPI (India — the usual choice here), HPUS, GHP or BHP.
- Vehicle/Medium
- Alcohol 90%, Alcohol 60%, Alcohol 40%, Sucrose Globules, Lactose Globules, Cane Sugar Pills or Distilled Water.
- Globule/Pill Size
- Size 10 (Smallest) through Size 40 (Largest).
Stock Management and Pricing
- Opening Stock
- What is physically on the shelf right now.
- Minimum Stock
- The line in the sand. At or below it, the item turns orange and raises a low-stock alert.
- Reorder Level
- Set it above the minimum: it is the point at which you should be placing the order, not the point at which you are in trouble.
- Maximum Stock
- Optional ceiling, to stop over-buying.
- Unit of Measure
- Units, Tablets, Capsules, Bottles, Boxes, Strips, Vials, Ampoules, Tubes, Packets, ml, Grams or Pieces. Every stock number for this item is counted in this unit.
- Purchase cost (₹)
- What you pay per unit. Never shown to patients.
- Selling Cost (₹)
- What goes on the invoice per unit. As soon as both prices are in, a green Profit Margin line shows the percentage and the rupees per unit.
- Notes and Item is Active
- Internal notes, and the tick (on by default) that keeps the item available to prescribing and billing.
Click Create Item.
One item, in detail
Click any row to open the item. The top of the page carries Current Stock (with an orange Below minimum note when it has dropped), Stock Value (stock × purchase cost), Selling Cost with its margin, and the number of Active Batches. The Stock Levels panel puts Minimum, Reorder, Current and Maximum side by side with a bar that runs red, orange or green.
Recent Stock Movements lists the last changes with the quantity and the level before and after each one. Active Batches on the right shows each batch number, what is left of it and Expires: dd/mm/yyyy — orange within 30 days, red once past. For medications, Additional Info repeats whether the item requires a prescription, whether it is controlled, and how it must be stored. Adjust Stock and Edit Item sit at the top.
Stock levels and what the colours mean
| State | When | Where you see it |
|---|---|---|
| Out of Stock | Current stock is 0 | Red badge on the item list; Out of Stock stat card; a critical alert |
| Low Stock | Current stock is at or below Minimum Stock | Orange badge; Low Stock stat card; a high alert; the Adjust Stock button appears on the row |
| Reorder Needed | At or below Reorder Level but still above the minimum | Counted separately in the Stock Health Status chart and in the Low Stock report |
| Healthy | Above both | Green badge |
Low-stock and out-of-stock alerts are raised for you automatically the moment stock crosses the line — and cleared automatically when it climbs back above the minimum.
Correcting stock by hand
Adjust Stock is how you fix a number without pretending a sale happened. You will find it on any low-stock row of the item list, and always at the top of an item's own page.
- 1
Type the change into Quantity (positive to add, negative to subtract)
10adds ten;-5takes five away. - 2
Pick a Reason
Received stock, Stock count correction, Damaged goods, Expired items, Return from customer, Return to supplier or Other.
- 3
Add Notes (optional) if the reason needs explaining.
- 4
Check the New Stock Level: preview, then click Adjust Stock
The change is written to the transaction log with your name, the reason, and the level before and after.
Batches and expiry
A batch is one delivery of one item: a batch number, a quantity, an expiry date and the price you paid. When an item has batches, its stock is the sum of the batches still active, and dispensing always eats the batch that expires first, so old stock leaves before new stock. A batch flips to expired once it is past its date and to depleted once it hits zero.
Purchase orders
New Order builds one: pick the Supplier (only active suppliers are offered), optionally set an Expected Delivery Date and Notes, then click Add Item, search by name or SKU, and click each match to add it as a line. The unit price comes across from the item's purchase cost; change the Qty and Unit Price and the line total and the Order Summary follow. Adding the same item twice is blocked with Item already added. Finish with Save as Draft or Submit Order.
| Status | What it means | The button that moves it on |
|---|---|---|
draft | Still being written | Submit for Approval |
pending | Waiting for someone to approve it | Approve — or Reject, which cancels it |
approved | Approved but not yet placed with the supplier | Mark as Ordered |
ordered | Placed; you are waiting for the delivery | Receive Stock |
partial | Some lines arrived, some did not | — (set automatically) |
received | Everything arrived | — (the end of the line) |
cancelled | Rejected or called off | — |
The Status Timeline on the order page draws the same journey with ticks against each stage reached.
Receive Stock is designed to be the moment a delivery becomes stock: for every line you enter the Received Qty that actually turned up, the Batch Number printed on the pack and the Expiry Date, then click Confirm Receipt — which should create a batch, raise the item's stock and log a purchase movement.
Alerts
Filter with the tabs, each carrying its own count: All, Unresolved, Out of Stock, Low Stock, Expiring Soon, Expired. Every alert card names the item (click it to jump to the item and fix the stock), the kind of alert, the message, the time it was raised, the item's Current Stock, and a Resolve button. The same alerts sit behind the floating alerts button in the corner of every inventory page.
| Alert | How it is raised | Severity |
|---|---|---|
| Out of Stock | Automatically, the moment stock hits zero | critical |
| Low Stock | Automatically, when stock falls to or below the minimum | high |
| Expired | Only when you click Check Expiry — the batch is also marked expired | critical |
| Expiring Soon | Check Expiry, for batches with 7 days or less left | high |
| Expiring Soon | Check Expiry, for batches with 8 to 30 days left | medium |
Bulk import from Excel
Import Excel (on the items list and on the Add Item page) opens Import Inventory from Excel — a three-step wizard for loading an existing stock list. It accepts .xlsx, .xls and .csv, up to 1000 rows at a time.
- 1
Upload — drag your file in, or click Download template first
The template already has every column with the right headers. Your own column names do not have to match anything: you map them in the next step.
- 2
Map Columns — check what the wizard guessed
It reads your headers and maps what it recognises. Set the Header row if your headings are not on row 1, use Import rows: From row / to row to import only part of the sheet, and give any field a Default value to fall back on when a cell is empty. Item Name and Item Type are the only required fields — leave either unmapped and its box stays red.
- 3
Preview & Import — read the first rows, then click the import button
You get a count of rows, mapped columns, defaults and skipped columns. If anything is wrong you see it per row, as Row 7: ….
The template covers name, item type, SKU, barcode, generic name, category name, supplier name, dosage form, strength, manufacturer, manufacturing date, current stock, minimum stock, maximum stock, reorder level, unit of measure, cost price, selling price, requires prescription, controlled substance, storage conditions, description and notes. It does not carry batch numbers or expiry dates. Every imported item comes in active.
Transaction logs — who changed what
Transaction Logs is the full audit trail: every movement of every item, never edited, never deleted. The table shows Date & Time, Item, Batch, Type, Qty Change, Before, After, Reason and Performed By — so 'who dropped the Arnica by 40?' is a two-minute question, not an argument.
It opens on the last month. Widen it with Start Date and End Date, narrow it with Movement Type and Item, or type into Item name, SKU, batch, reason… — then click Apply. Clear puts it back. Movement types are Purchase, Sale, Dispensed, Adjustment (+), Adjustment (-), Return to Supplier, Customer Return, Transfer In, Transfer Out, Expired, Damaged, Opening Stock and Other; the first group adds stock, the rest take it away.
Reports
| Tab | What it gives you |
|---|---|
| Stock Valuation | Total Items, Total Units, Cost Value, Selling Value and Potential Profit, then every active item line by line. |
| Low Stock | Your reorder list — low stock, out of stock and reorder-needed, each with the current, minimum and reorder numbers and the supplier's name and phone. |
| Expiry Tracking | Batches bucketed as Expired, then 7, 30 and 90 days, with the batch number, quantity and days remaining. |
| Stock Movements | Everything that moved between the Start Date and End Date you pick, totalled by movement type. |
Export CSV on any tab downloads that report as a spreadsheet. Reports and dashboard charts are cached for a few seconds at a time, so give them a moment after a big change.
Admin and pharmacist: who can do what
In practice, almost everything. The pharmacist portal carries its own complete copy of the module — same items, same categories, same suppliers, same purchase orders, same alerts, same reports — just reached from the pharmacist's own sidebar under Inventory.
| Task | Admin | Pharmacist |
|---|---|---|
| Inventory dashboard and analytics | Yes | Yes (their own Inventory Management landing screen) |
| Add, edit, delete items; bulk delete | Yes | Yes |
| Import from Excel | Yes | Yes |
| Categories and suppliers | Yes | Yes |
| Adjust stock | Yes | Yes |
| Purchase orders — create, approve, receive | Yes | Yes |
| Alerts, Check Expiry, Resolve | Yes | Yes |
| Reports and transaction logs | Yes | Yes |
| Dispense a prescription (the thing that actually deducts stock) | No | Yes |
Doctors, front-desk staff and lab technicians have no access to Inventory at all. See Roles and permissions.
How stock actually leaves the shelf
Not from this module. Stock comes off when a pharmacist dispenses a prescription — and that is gated by billing, not by stock: the prescription must have an invoice, and the invoice must have at least some payment against it, or dispensing refuses with Invoice required or Payment required. Bill the patient first. Cancelling an invoice or raising a credit note puts the same quantity back.
Dispensing
The pharmacist's day: prescriptions, stock warnings, and what happens when a line is short.
Read nextInvoices
Bill the medicines before you hand them over — dispensing depends on it.
Read morePrescribing
How a doctor picks a remedy, a format and a size — which is what decides how much stock comes off.
Read moreWhy can't I see Inventory in the sidebar?+
Your plan does not include the Pharmacy & Inventory feature, or you are not signed in as an admin or a pharmacist. Check Plans and billing.
I set a Minimum Stock but I never get a low-stock alert.+
Alerts fire when stock falls to or below the minimum, and they resolve themselves when it climbs back above it. If the minimum is 0, nothing will ever fire — a stock of 0 will still raise an out-of-stock alert, but you get no warning before it.
The item list says my stock is fine, but the pharmacist says there is nothing left.+
Open the item and read Recent Stock Movements and then the transaction log. Every change carries who made it, when, why, and the level before and after — that is where the difference will be.
What is the difference between Minimum Stock and Reorder Level?+
Minimum Stock is the danger line: cross it and the item turns orange and alerts you. Reorder Level should sit higher — it is the point at which you place the order so that you never reach the minimum.
Dispensing failed with a message about a conversion mapping. What now?+
The doctor prescribed in a unit (a dram, say) that has no conversion to the unit the item is stocked in. The system will not guess and deduct the wrong amount. The practical fix is to edit the item and stock it in ml (for liquids and dilutions) or Grams (for triturations); the conversion table itself is managed centrally by the platform, not by your clinic.
Can I delete a purchase order?+
The bin on a draft order does not work yet. Reject a pending order instead — that marks it cancelled and keeps it out of your way.