The point of sale is the screen your counter lives on. This page covers the whole flow from finding a product to completing the sale; payment, receipts, barcodes, held carts and offline selling each have their own page.
What you’re looking at
The header reads Sales POS with today’s date, followed by two tiles for the day so far — {n} Sales and {amount} Today — the offline and sync bar, and a Calculator button.
Left — finding products
A search card (“Search or scan (name, generic, brand, barcode)…”) with a camera button, Scan barcode with camera, and the Available Products grid with a count badge and, when the figures are not fresh, a Stock as of HH:MM badge.
Right — building the sale
Interaction alerts, the Customer card, the Cart card, then the payment summary. Top to bottom, in the order you use them.
The grid shows 100 tiles, not your whole catalogue. The count badge says so out loud — 100 of 5,841 while you browse, first 100 matches while you search — and everything else is reachable by searching or scanning. Nothing is missing from your stock; a grid of several thousand tiles would be unusable, so search is the way in.
A brand-new pharmacy sees both day tiles at zero, an empty Available Products grid and an Add New Medication button in place of the tiles. The Cart card reads as empty and Complete Sale stays disabled until something is in it. Add a stock item first — see Add your first stock item.
Ring up the sale
Find the product
Scan its barcode, or type any of the name, generic name, brand or barcode into the search field. A keyboard-wedge scanner is picked up anywhere on the page — you do not have to click into the box first. See Scan barcodes at the till. Add it to the cart
Select the product tile. The line appears in the Cart card with the unit price (“{amount} each”), and the card’s badge counts the items.
Set the quantity
Use the − and + steppers on the cart row. Pressing − at a quantity of one takes the line off the cart.
Attach a customer, or stay on walk-in
The Customer card has two tabs. Walk-in is the default and needs nothing, though you can fill Customer name (optional) and Phone number (optional) so the sale is traceable.Select Customer and use Search customers… to attach a registered customer; Change swaps them afterwards. Do that whenever the sale involves money on account, loyalty or part payment. See Customers. Apply a discount, if you are allowed to
Two kinds:
- One line — select the dotted Discount link under the line, then pick from Discount this line: 5%, 10, 15, 20 or 50, each showing what it saves (“5% · save …”). The line then carries a badge such as −10%; select it to remove the discount (“Remove this line’s discount”).
- The whole cart — use the % and currency-symbol toggle buttons above Subtotal, then enter the value. The % button discounts by percentage; the currency button takes a flat amount.
Any discount, of either kind, requires the Discount beyond the set limit permission. Without it the controls are not yours to use. Check the loyalty banner
When a reward is due, the banner reads “{n}% loyalty reward available” — select Apply and it becomes “Loyalty reward applied to this sale”. Otherwise it shows how much further the customer has to go: “{amount} more to the next reward”. Loyalty needs a connection and a registered customer.
Take payment
Choose the tender in the payment summary — Cash, Card, Mobile Money, Bank Transfer, Insurance, Other, or Account balance for a registered customer with money on account. Cash asks for Amount Received and shows Change Due; everything else asks for a reference. Full detail in Take payment. Complete it
Select Complete Sale • {total} — it reads Processing… while it saves — or press Enter from anywhere on the till. Enter is deliberately ignored while you are in the search field (that Enter is a scan), on a button or link, in a text area, or while any menu or dialog is open, so it never fires a sale you did not mean. It does work from an ordinary box such as Amount Received.
Who can do this
Role decides whether POS opens. A Cashier reaches POS and Sales and nothing else — that is the whole of their sidebar, deliberately. A Pharmacy Technician gets the till plus the station, stock and customers, but not the money screens.
Permission decides what you may do at the till.
Three till toggles were removed in August 2026. Dispense and sell at the till, Open the cash drawer and Cash up and close the day used to appear on a person’s permissions sheet and nothing in the product ever checked them — reaching POS was, and remains, the only gate on selling. They are gone rather than left in place, because a switch that restricts nobody reads as a job done. The three that are enforced on the server are Discount beyond the set limit, Override the selling price and Refund or void a sale, and a default Cashier holds none of them. That is still the line that matters: the person taking the money is not the person who decides the price or reverses the sale.
Two behaviours surprise people:
- Enforcement is opt-in, per person. A colleague never saved in the permissions sheet is unrestricted — no checks apply to them at all. The sheet warns “Saving starts enforcing”, and the first save takes effect immediately, mid-shift.
- A denied action is recorded; an allowed one is not. A hidden control is a convenience; the real check happens when you submit.
Gated figures never show a zero — a margin you may not see reads Hidden — needs authorisation, or the column is not there at all. See Staff permissions.
Check it worked
- A Sale Complete! panel appears with the Sale Number, the Total and the Change Due, offering Print Receipt and New Sale, and a toast reads Sale completed successfully!
- The cart empties, and the receipt prints silently on the counter printer in the desktop app or through the print dialog in a browser. See Print and reprint receipts.
- The day tiles in the header increase by the sale.
- The sale appears in Sales History on the Sales page with a receipt number.
- Stock falls by what you sold, drawn from the batches that expire soonest.
Common issues
Complete Sale will not enable
The cart is empty, the cash tendered is below the total (Amount Needed is showing), or a tender that needs a reference has not been given one.
The product is not in the catalogue at all
The grid only holds what you stock. From the empty grid, Add New Medication opens the inventory Add item sheet without losing the till. See Inventory. A red interaction alert will not let me continue
Screening blocks only on contraindicated and major interactions, and clearing the block needs one acknowledgement with a reason. Moderate interactions show as an inline badge and minor ones are not shown at all. It needs Professional and above — below that the panel reads Available on Professional and above. See Interaction screening. An item refuses to be sold at the till
A product that requires a witnessed dispense cannot go through POS: ”… requires a witnessed dispense — use the inventory Fill Rx flow instead of POS.” A controlled drug needs a second person’s countersignature and the till has nowhere to capture one. See The pharmacy station. The Discount link does nothing for me
You do not hold Discount beyond the set limit. A Cashier does not have it by default. Ask an owner or manager, or have them apply the discount.
Pressing Enter did not complete the sale
Enter is ignored while you are in the search field (that Enter is a scan), on a button or link, in a text area, or while any menu or dialog is open. Close whatever is open, or select Complete Sale • {total}.
FAQ
Can I sell something that is out of stock?
Yes, when Selling without stock is on — it is on by default. The sale toasts that the item “has no recorded stock — the sale will be logged for reconciliation in Inventory”, and stock can then read as negative, such as -3 oversold, because the figure is what you have minus what you owe. Clear these on Inventory › Reconciliation.
Why does the stock figure say 'as of' a time?
Do I have to attach a customer to every sale?
No. Walk-in is the default and needs nothing. Attach a registered customer when the sale involves money on account, loyalty or part payment — a balance has to belong to somebody.
Does a discount on a line stack with a discount on the cart?
Yes, both apply. Check the Total before completing rather than assuming — it is easy to give away twice what you meant to. See Hold a cart and apply discounts. Which batch does a sale come out of?
The rest of the counter
Scan barcodes at the till
Wedge scanners, the camera scanner, and scanning a receipt back in.
Take payment
Every tender, references, change, part payment and credit.
Hold a cart and apply discounts
Park a customer mid-sale and pick them up again.
Selling when the internet is down
What works offline, what does not, and how sales catch up.