Skip to main content
Inventory is the ledger everything else draws from: the till, the dispensing form, purchase orders and branch transfers all move stock through this one screen. Its header reads Inventory — “Stock, lots, and expiry across your rooms and devices.” The same screen opens from Pharmacy Station › Inventory. One place, two doors.

What you’re looking at

The toolbar carries Receive, Dispense, Transfer, Reports, Import, Opening stock, Export and Add item. Validation is conditional, and so is a Vaccines tab where you hold vaccine stock. Most pharmacies see neither, and their absence is not a fault. Alerts carries its count only when something is actually open — a bare Alerts means nothing is. When alerts are open, a line above the tabs says so: “{n} open inventory alerts — see the Alerts tab.” A brand-new pharmacy lands on Catalog with a single line — “No items yet. Add your first product (e.g. Botox 100U vial).” — and everything else empty behind it. Stock reads “No stock on hand. Receive a lot to get started.” until your first delivery, which is the honest order of work: catalogue first, stock second.
Two labels on this screen still say “clinic” where they mean your pharmacy — the count scope Whole clinic is the one you meet most. They are bolded in these pages exactly as the product renders them.

Add an item

A catalog entry is the product, not the stock. As the sheet puts it: “A catalog entry — e.g. ‘Botox 100U vial’. Stock is tracked per lot.”
1

Open the sheet

Select Add item.
2

Look the product up, or name it yourself

Look up drug (NDC or name) fills the details for you. Barcode / UPC (optional) takes a scan through Scan pack, or Generate… if the pack carries no barcode you can use. Otherwise enter the Name by hand. Product image (optional) is what the till shows on the tile.
3

Set what kind of thing it is

Type, Unit and Category decide how it is counted and grouped. NDC and DEA schedule — None (not controlled) through CII to CV — decide whether it is treated as controlled.
4

Fill the drug details

Generic name, Brand name, Strength, Dosage form, Manufacturer and NAFDAC/FDA No are what a customer or an inspector asks for. Storage instructions is marked “Shown at the till”, so write it for the person selling, not for a file.
5

Price it

Unit cost is what you paid; Sale price is what you charge, and Markup % derives one from the other. Low-stock threshold — “Alerts at/below this on-hand.” — and Reorder qty are what make the reorder suggestions work.
6

Add opening stock, if you have some in the room now

Opening stock (optional) with Into location, Expiry date and Lot / batch number (optional) saves you a separate receive for a product already on the shelf. The expiry date is required when Track by lot / expiry is on.
7

Set the switches

Refrigerated, Track by lot / expiry and Witness required (controlled). Leave Track by lot / expiry on for anything with an expiry date — it is what makes oldest-first picking possible.

Receive a delivery

1

Open Receive

Select Receive in the toolbar.
2

Scan the pack, if it carries a GS1 code

Scan package (GS1) — “Scan or paste GS1 DataMatrix…” — fills in the item, the lot number and the expiry from the pack itself. This is faster and it does not mistype an expiry date.
3

Or enter the delivery by hand

Item, Location, Quantity, Funding source, Lot number and Expiry. Every delivery of the same product with a different expiry is a different lot — do not merge them.
Receiving against a purchase order is done per line from the Purchasing tab instead; see Purchase orders and suppliers.

Adjust or waste stock

Dispense in the toolbar is how stock leaves for any reason that is not a sale or a script: breakage, spillage, expiry. It asks for a Reason — “Broken vial, spill, expired…” — and, on a controlled item, a Witness (controlled item). Both land in the Ledger tab against your name.
The toolbar’s Transfer moves stock between rooms inside this branch. Moving stock to another pharmacy branch is a different screen with the same word on it — see Transfer stock between branches.

Locations

The Locations tab is your physical geography: Add location creates a room, shelf or fridge; Par levels sets what should be held there; Log temp and Sensors cover cold-chain records. Locations carry badges for controlled, hazardous-rated and temperature zone. A row action, Print barcode label, prints shelf labels — set Copies before printing.

Check it worked

Each empty state tells you exactly what is still missing:
  • “No items yet. Add your first product (e.g. Botox 100U vial).” — the catalogue is empty.
  • “No stock on hand. Receive a lot to get started.” — you have products but nothing physically held.
  • “No counts yet. Start a cycle count to reconcile physical stock against the system.”
  • “No open alerts. You’re all stocked up.”
After adding an item it appears on Catalog; after receiving, it appears on Stock with its lot and expiry, and the movement appears on Ledger.

Movements made through the API

If your pharmacy connects an integration through Settings → API access, a receive, adjust or transfer that integration makes shows a Via API marker naming the integration in the Ledger’s Source column, alongside the movements your own team made at the counter. Tick API changes only above the table to see just those. The name shown is the connected key’s or organization’s own name — never the key itself.

Who can do this

Role decides whether Inventory opens at all. A Cashier / Till Operator reaches only POS and Sales and never sees this screen. Permission decides what you may do once it is open, and the switches live in groups named Till, Stock, Controlled drugs, Money and Oversight on each person’s permissions sheet. Three stock toggles were removed in August 2026. Receive deliveries into stock, Adjust stock counts and Transfer stock between branches used to appear on a person’s permissions sheet and nothing in the product ever checked them, so switching one off restricted nobody. They are gone rather than left in place — a switch that governs nothing tells you a job is done when it is not. Reaching Inventory is the gate on all three. The stock permissions that are enforced on the server are Manage suppliers and purchase orders and, whenever a countersignature is actually recorded, Witness a controlled-drug dispense. On top of the role bundle, each person carries an access tier — Own till, Whole branch or All branches — which is what decides how much of the business their figures cover. Three gates change what the screen shows, not just what it does:
  • Without View cost prices and margin, you can still edit an item, and its Unit cost stays exactly as it was recorded — saving never blanks a cost you were not shown.
  • View cost prices and margin turns the valuation column into “Hidden — needs authorisation from your clinic owner.” It is never rendered as a zero, because a zero reads as an empty shelf rather than as a permission boundary.
  • Manage suppliers and purchase orders also redacts negotiated unit costs and supplier account numbers, so somebody who can count your stock does not automatically learn what you pay for it.
  • The Danger Zone under Settings › Inventory is hidden from the page entirely for managers and accountants. It is not greyed out; there is nothing there to select.
Two behaviours surprise people:
  • Enforcement is opt-in, per person. A colleague never saved in the permissions sheet is unrestricted, and the sheet warns “Saving starts enforcing” before that changes.
  • A denied action is recorded; an allowed one is not. Hiding Inventory from somebody’s sidebar is a convenience, not a security boundary.
See Staff permissions. The caps belong to the free plan, not to Starter: every paid pharmacy plan — Starter included — is uncapped while the subscription is active or trialing. A pharmacy with no active subscription (typically after the 7-day trial lapses) gets a Free plan strip showing usage against the limit for each countable kind — 20 items, 5 locations, 2 vendors and 5 purchase orders — with Upgrade for unlimited. At the limit, creation is refused rather than silently dropped. If your plan cannot be checked, no strip is shown at all, rather than a Free plan strip that might be wrong. See Change your plan.

Inventory settings

Settings › Inventory holds the defaults for new items, Selling without stock (whether the till may sell past recorded stock), Receiving quality (including Require expiry date on new lots), and a Danger Zone.
The Danger Zone reset deletes your entire inventory — catalogue, lots, stock and history. It asks you to type RESET because there is no undo and no export that puts it back. Take an export first if you are resetting a workspace you might want to look at again.

Everything else in stock control

Batches, expiry and FEFO

How oldest-first picking works, expiry alerts, expiry risk and recalls.

Purchase orders and suppliers

Raise a PO, email the vendor, receive it line by line.

Run a stock count

Cycle counts, physical counts and controlled-drug counts.

Count with a CipherLab scanner

Walk the shelves with a terminal and upload the scans.

Import and export your catalogue

Bulk-load products from a spreadsheet, and get your catalogue back out.

Transfer stock between branches

Move stock to another branch, and receive what arrives.

Common issues

The shelf holds the quantity you asked for, but part of it has passed its expiry date, and Transfer only moves stock that can still be used. Transfer a smaller quantity, or remove the expired stock first with Waste or Return to vendor. Your count is not wrong — expired stock is also written off automatically overnight.
This is a warning, not a refusal — Transfer never blocks stock that is merely close to its date, only stock already past it (see above). Once you enter a quantity, the form lists which lot it would come from, how much, and how many days remain, soonest first, right under Quantity. If the whole quantity would come from short-dated stock it says so plainly. The Transfer button stays enabled and nothing extra needs confirming — moving short-dated stock to a busier branch is often the right call. “Close to expiry” is your clinic’s own expiry-alert horizon under Settings › Inventory › Expiry alert horizons.
A catalogue entry with no stock is not sellable unless Selling without stock is on. Receive a lot, or add Opening stock on the item.
Require expiry date on new lots is on under Settings › Inventory › Receiving quality. That is deliberate — see Batches, expiry and FEFO.
Your pharmacy has no active paid subscription, so it is on the free tier’s 20-item cap and Add item was refused rather than silently dropped. The Free plan strip shows your usage per kind — items, locations, vendors and purchase orders — and Upgrade for unlimited removes the caps. Any paid pharmacy plan, Starter upward, is uncapped.
You do not hold View cost prices and margin, so the valuation is withheld rather than shown as zero. An owner or manager grants it on your permissions sheet.
New PO and Draft PO from these are disabled without Manage suppliers and purchase orders. The tooltip names the switch to ask for. Vendors stays open to everyone and simply opens read-only.
Check whether you used the toolbar’s Transfer (room to room, this branch) or the Transfers screen (branch to branch). They are different moves with the same name.
Clinical administration records — a vaccination, a ward administration, an adverse-event report, or a dispense against a patient — reference these lots, so the reset is blocked to protect that traceability. Adjust quantities with a stock count instead.Ordinary till sales do not block it, including sales to customers you have registered by name.

FAQ

A catalogue item is the product — “Botox 100U vial”. Stock is how many you physically hold, tracked per lot with its own expiry and location. Adding an item creates no stock at all; the quantity arrives through Receive or Opening stock.
A handful of strings are shared with the other editions and have not been relabelled — the count scope Whole clinic is the one you meet most. It means your whole pharmacy. We quote them exactly as the product renders them so you can find them on your screen.
Both are conditional. Validation appears only where you hold reagent stock and Vaccines only where you hold vaccine stock. A pharmacy that stocks neither is not missing anything.
Yes, from the Catalog tab — but a product with movements behind it is better left in place and simply not reordered, because deleting it takes the name off every historic line that referred to it. Freeing a slot against a plan limit is the one good reason to delete.
Two different reasons look identical. Either you do not hold View cost prices and margin — in which case the column reads “Hidden — needs authorisation from your clinic owner.” — or the stock was received with no Unit cost, in which case there is genuinely no margin to compute. Record costs at receiving so the second reason stops happening.
No. The Danger Zone removes the catalogue, lots, stock levels, ledger, purchase orders, vendors and locations. Your medication list, store history and clinical records are kept.