BIZA · Point of sale
Pharmacy & medical storeThe counter where expiry is the job
For pharmacies, medical stores and clinic dispensaries · September 2026
Two boxes of the same medicine sit on the shelf. One expires in three weeks, the other next year. The right one to sell is the near one — and at four in the afternoon, with a queue at the counter, nobody is reading the small print.
So the counter reads it. It picks the batch, refuses the expired one, prints both on the slip, and takes the same batch back on a return.

What this counter needs
The batch is chosen at the counter, not guessed
A product marked as batch-tracked opens a picker the moment it is added: the batch closest to expiry is offered first, with the days remaining beside it. Scan a serial-tracked item and the counter rings that exact unit. The server checks the choice again when the sale posts, so a device that has been away from the network cannot sell stock that is gone.
- Soonest-expiry-first (FEFO) ordering
- Warning highlight a configurable number of days before expiry
- Expired batches refused unless the setting allows them
- Quantity on hand per batch, per branch
- Serial numbers for anything registered one unit at a time
- The server re-validates every lot on sync
The batch follows the sale, the refund and the recall
The batch and its expiry print on the receipt and stay on the invoice line. A return brings that exact batch back into stock rather than a generic unit, so the shelf, the ledger and the lot history agree. When a manufacturer recalls a batch, the lot ledger already knows which sales carried it.
- Batch and expiry on the receipt line
- Returns restock the exact batch or serial
- Lot ledger with every movement, per location
- Write-off of expired stock recorded against the batch
- Supplier returns handled in Purchasing, on the same stock
- Credit note issued against the original invoice
One chain, one stock, one set of books
Each counter sells from its branch location, so stock figures are the branch's own. Transfers between branches move stock properly rather than by phone call, and the POS dashboard shows every branch side by side with the cash each drawer should hold.
- A stock location per counter
- Branch-to-branch transfers from the counter menu
- Live dashboard across branches, refreshed every 15 seconds
- Attention flags on variance, refunds, voids and manual discounts
- Purchase orders and supplier invoices on the same catalogue
- Stock valuation and margin by product
Discipline on price, discount and the drawer
Changing a price at the counter, giving a discount, processing a refund or opening the drawer without a sale are separate permissions, each enforced by the server rather than hidden on the screen. Every one of them leaves a named person and a reason behind it.
- Price override kept beside the list price for the audit
- Discounts posted to their own account, not buried in a lower price
- Drawer opened without a sale needs a reason
- Cashiers switch by PIN and are signed in as themselves
- Voided lines recorded with their value
- Manager view of who did what, per shift
The sale is the accounting
There is no end-of-day export. Ringing a sale writes the tax invoice, the journal entry, the stock and batch movements and one payment record per tender in a single transaction — the same books the accountant already works in.
- Gapless invoice numbering
- VAT or GST per line from the product's tax category
- Cash and card banked to the accounts you name
- Shift totals reconcile to the ledger by construction
- Purchases, expenses and payroll in the same system
- Statements computed in SQL, not in a spreadsheet

A day at a pharmacy counter
- 09:00Open the counter with a counted float. Yesterday's Z report is already in the ledger.
- 09:20A strip is scanned. The counter offers the batch expiring in June before the one expiring in December.
- 11:40A batch inside the warning window is highlighted as it is picked, so the pharmacist can move it or discount it.
- 13:05An expired batch is scanned by mistake. The counter refuses it and says why.
- 16:30A customer returns an unopened strip. The refund restocks that exact batch and issues a credit note.
- 18:10The second pharmacist takes over: PIN, signed in as themself, same open drawer.
- 21:00Close the counter. Blind count, variance, Z report — and the stock on the shelf matches the stock in the books.
What the books get
A 34.50 sale with 5% VAT, paid in cash, from a batch with three weeks left:
Specification
| Tracking | Per product: none, serial number, or batch with expiry. FEFO picking, configurable expiry warning window, expired-batch policy, lot ledger per location |
| Returns | Per line, refunded as cash, credit to the customer's account or store credit; restocks the exact batch or serial; works offline against the counter's own copy of the sale |
| Devices | Windows, macOS and Linux desktop app; iPad and Android tablet; phone; any browser, installable as a web app |
| Printing | ESC/POS thermal printers over the network, or USB / serial / Bluetooth through the computer's print queue; 58 mm and 80 mm; cash drawer opens on cash sales |
| Tenders | Cash, card, bank transfer, gift card, store credit, loyalty points and on account (the balance stays on the customer's receivable); mada in Saudi Arabia, UPI with a scan-to-pay QR in India; split across any number, each banked to the account you choose |
| Cash control | Shifts per counter with a counted float, cash in / out with reasons, blind count at close, X and Z reports, variance, cashier PIN switch, audited drawer opens |
| Offline | Every sale, return and cash movement queues on the device and posts exactly once when the connection returns |
| Compliance | ZATCA Phase 1 QR and Phase 2 clearance (Saudi Arabia), GSTIN with HSN/SAC and a UPI QR (India), TRN (UAE), plain receipts elsewhere |
| New | Prescriptions recorded per line; controlled-drug register with batch and prescriber (CSV); batch recall trace; ID checks; account payments at the counter |
New at this counter
What the dispensing counter now does for you:
- Prescriptions recorded at the counter. A prescription-only line asks for the prescription number, prescriber and patient before it goes on the bill, and the server refuses it without them — an offline till is held to the same rule.
- A controlled-drug register that keeps itself. Every scheduled item sold, with the batch it came from, the prescription and who dispensed it, for any date range, exported to CSV for the inspector.
- Batch recall in one search. Type the batch number and see every sale of it, with the customer and how to reach them.
- Account customers settle at the counter. A clinic or a regular pays their balance where they buy; it clears the oldest invoices first and counts in the drawer.
- ID checks for age-restricted lines, confirmed by the cashier and logged against the sale.
Integrations on request: insurance and medical-scheme claims, and card terminals from your country’s acquirer (Geidea and mada in Saudi Arabia, Pine Labs and Razorpay in India, Stripe elsewhere).
The whole counter
Everything above sits on one product. This is all of it, the same in every edition, whether or not your counter needs each part on day one.
Selling
- Search by name, SKU or barcode; category chips; sort by best-selling or recently sold
- Variants on one card, with a picker; a variant barcode adds that variant directly
- USB and Bluetooth scanners with no setup; camera scanning in the mobile app
- Keyboard shortcuts: F2 search, F4 pay, F6 park, F8 returns, F9 exact cash
- Line and cart discounts, and price overrides, each behind its own permission
- Sold by the piece, kg, metre or litre; weight and price labels from scales
- Options with minimum and maximum choices, priced on the line
- Park a cart with a note and resume it on any counter
- A second screen for the customer; a self-checkout kiosk
- Full-screen register mode; phone and tablet layouts built for touch
Payments
- Cash with quick-amount chips, a keypad and exact cash; change worked out
- Card and bank transfer with a reference, banked to the account you choose
- Gift cards, store credit and loyalty points as tenders
- On account, within the customer’s credit limit
- mada in Saudi Arabia; UPI with a scan-to-pay QR in India
- Split one bill across any number of tenders
- Tips to a liability, never revenue; a service charge by percentage
- Account payments at the counter, oldest invoice first
- Trade-ins and charge-to-room, where the counter uses them
Receipts
- 58 mm and 80 mm thermal slips, printed as an image so every script prints as shown
- Auto-print, and the drawer opens on cash sales
- Email with the invoice PDF attached; WhatsApp with a link to it
- Reprint any sale from Transactions
- The receipt title, tax number and fiscal QR your country requires
- Serial, batch, expiry and HSN on the lines that need them
Customers and loyalty
- Walk-in by default; any customer from the address book in one search
- Customer groups, with their own promotions and price lists
- Price lists with quantity breaks, by group or by counter
- Promotions: percent off, amount off, fixed price, buy X get Y, N for X
- Schedules, days, hours, limits and coupon codes that say why they did not apply
- Points, tiers with multipliers, and punch cards that pay out as store credit
- Gift cards sold, reloaded and voided, booked as a liability
Stock
- Each counter sells from its own location, with live on-hand on every card
- Low stock, out of stock, not stocked here and backorder, per product
- Serial numbers and batches with expiry, soonest-expiry first
- Returns put back the exact unit or batch that came back
- Recipes that take ingredients off the shelf, costed first-in-first-out
- Transfer stock between locations from the counter
- Price and product changes reach open counters without a reload
Cash and trust
- Shifts per counter with a counted float
- Cash in and out with reasons; a mistake is voided with a reversing entry
- Blind count at close, X and Z reports, and the variance
- Every cashier is a real user; switch by PIN, lock the counter to step away
- Permissions checked by the database, not just the screen
- Voids, no-sale drawer opens and sign-ins recorded with a name
Returns
- Return any line or all of them, against the original sale
- Refund in cash, as a credit on the account, or as store credit
- A credit note every time, with its own number
- Returns work offline against the counter’s own copy of the sale
Tables and kitchen
- Floors and tables with seats; table states: free, seated, not sent, bill printed
- Move or merge tables, or move some items onto another table’s bill; the kitchen gets a slip
- Kitchen tickets per station, printed and on a kitchen screen, in rounds
- A kitchen log with time to plate, reprints and cancelled tickets
- Courses and seats; split by item or seat; print the bill before paying
- Comps with a reason, a daily limit per person, a manager PIN past it, and a report
- Guests order from the table by QR, from the categories you choose
- Pickup and delivery orders, with a delivery charge added for you
- Reservations and a waitlist; tips paid out to each server
Offline
- Sales, returns, cash movements and shift open and close all work offline
- Everything queues on the device and posts exactly once when the line returns
- Anything the server refuses stays visible, with the reason, until someone acts
Oversight
- A live dashboard of every counter and outlet, refreshed every 15 seconds
- Sales by hour, tender mix and top items
- Attention flags at thresholds you set: variance, voids, refunds, discounts, no-sales
- Reconciliation: what the counters took against the ledger and the journal
- Reports for tips, comps and ingredient shortfalls
Compliance
- ZATCA Phase 1 QR and Phase 2 clearance in Saudi Arabia
- GSTIN with HSN/SAC in India; TRN in the UAE; VAT numbers elsewhere
- Age checks and prescriptions before the line goes on the bill
- A controlled-drug register, batch recalls and warranty checks by serial
Devices and hardware
- Desktop app for Windows, macOS and Linux
- iPad and Android tablets, and phones; or any browser, installable
- ESC/POS printers on the network, or USB, serial and Bluetooth through the computer
- Cash drawers on the printer’s port; ticket printers per kitchen station
Screens from a demo workspace, “Cardamom Cafe & Store” in Kochi.
See it on your own counter
Start a free trial at my.biza.app, or ask for a walkthrough with your own product list, your own batches and your own printer. The POS guides are at biza.app/docs.