Offline pharmacy management software
PTB Pharma
Your pharmacy keeps running, even when everything else stops.
PTB Pharma handles counter sales, stock by batch and expiry date, supplier orders and the till — on a tablet or a PC, and offline first. Power cut, internet cut: the till keeps going. When the network comes back, the terminals reconcile on their own, with nothing to re-enter.
What you get
- Counter sales: till receipt, or a full A4 invoice for reimbursement
- Stock by batch and expiry date — nearest expiry goes out first
- Shortage and expiry alerts before the goods are lost
- Supplier orders, line-by-line goods receipt, invoice reconciled before validation
- Expenses, income and the day's, month's or year's balance, in CFA
- Several terminals converging: Bluetooth, USB stick or cloud
- Every user their own password, every action its author
Problems solved
- No more ledger nobody else can read.
- No more expired stock found on the shelf.
- No more till stopped because the internet went down.
Application domains
Pharmacy (independent)
Example : Sell, cash up and track stock without ever depending on the network
Pharmacy on night duty
Example : Run the whole night on a tablet, power cut, and find every sale in the morning
Pharmaceutical depot
Example : Book goods in by batch, with expiry date and purchase price
Pharmacy group
Example : Several terminals, one journal — each works alone and all converge
The notebook, the spreadsheet, and what escapes them
Many pharmacies keep stock in a notebook and the till in their head. That works as long as the same person is there every day. The day they are away, or the handwriting becomes unreadable, or you simply need to know what is left of a product without walking down to the store room, the system stops.
A spreadsheet solves only part of it. It holds quantities but not batches, so not expiry dates; it doesn't know about a sale at the moment it happens; and it lives on one computer, which rules out two people working at once.
PTB Pharma takes these motions as they actually happen at the counter — serve, take payment, book goods in, pay a supplier — and writes them down as they go. No end-of-day data entry: what is done is recorded when it is done.
The batch and the date, not just the box
A medicine isn't a quantity, it's a batch with a date. Two boxes of the same product received six months apart are not worth the same: one must go out before the other. Stock is therefore held by batch, each with its expiry date and its purchase price.
At the point of sale, the software offers the batch with the nearest date first. That is first-expired, first-out, and it applies without the seller having to think about it — it is precisely because nobody thinks about it that expired stock turns up at the back of the shelf.
Expiry alerts arrive while the goods are still worth something, not on the day they are lost. Shortage alerts fire at the threshold you set per product. Barcodes are scanned at the counter so the item is found rather than searched for.
Why the till keeps running when the power goes
PTB Pharma doesn't query a server to make a sale. The database sits on the device — the tablet or the PC — and the app reads and writes to it directly. There is no network wait in the act of selling, because there is no network in the act of selling.
A power cut, load shedding, or an ISP failure therefore changes nothing at the counter. On a tablet, the pharmacy runs the whole night on battery; in the morning every sale is there, with its date, its time and its author.
This is also what makes the product usable in an on-duty pharmacy or a depot with no reliable connection — where software that demands internet on every screen becomes unusable the first time it is missing.
Two terminals, one journal
A pharmacy with two terminals — one at the counter, one in the office — raises a question that connected software answers with a server: who is right when both have been working? With no server, the answer has to come from somewhere else.
Each terminal keeps a journal of what happened on it: this sale, this goods receipt, this expense, each with its timestamp. Synchronising means exchanging what the other hasn't seen yet, then replaying the whole. Neither overwrites the other — the two histories merge into one.
Three routes reach the same result, depending on what you have. Two paired tablets talk directly over Bluetooth, with no internet and no router. A USB stick carries a file from one terminal to the other when there is neither. And if the pharmacy has a connection, syncing goes through the cloud with nobody having to think about it. Importing the same exchange twice does nothing: the second time is a no-op.
From supplier order to invoice
An order is prepared as a draft, then sent. On delivery, the receipt is entered line by line: for each product, the quantity actually received, the batch, the expiry date and the purchase price. What is missing shows up immediately, instead of surfacing three weeks later as an unexplained stock discrepancy.
When the supplier's invoice arrives, it is captured and compared against what was received. Lines that don't match are highlighted, and stock cannot be validated until the discrepancy has been justified — the justification is kept along with its author. This is where money leaks most quietly in a pharmacy, and it is the one place in the software that refuses to move on without an explanation.
Expenses as they actually occur here
A balance sheet is useless if expenses never reach it. The categories on offer are those of a Cameroonian pharmacy: rent, ENEO, Camwater, generator fuel, CNPS, the trading licence, the Pharmacists' Association, Mobile Money fees, HYSACAM. A missing category is typed freely and joins the list.
Against them, the balance gives the day's, month's or year's totals, the breakdown of spending by category and the ten best-selling products. Everything is in CFA francs, and everything is legible without going through an accountant to find out whether the month was good.
Who did what
Everyone working on the terminal has their own password. Opening a session means naming yourself: the sale, the goods receipt, the discount, the stock adjustment all carry the name of whoever made them. The password is verified on the device, so offline like everything else.
Permissions are set person by person, starting from five roles — administrator, seller, cashier, stock keeper, treasury — then adjusted case by case. A seller can serve customers without seeing turnover; a stock keeper can book goods in without touching the catalogue.
Frequently asked questions
Do you need internet to sell?
No. The database is on the device and the app writes to it directly: the sale, the payment and the receipt printing query no server. Internet is only used for syncing between terminals — and only if you choose that route.
What hardware does it run on?
An Android tablet and a Windows computer. Both run the same application and hold the same pharmacy; the choice depends on counter space and habit, not on which features are available.
What happens if two terminals have each been working on their own?
Each wrote its own journal. On syncing, the two exchange what the other hasn't seen and the whole is replayed: nothing is overwritten, the two days merge into one. Running the exchange a second time changes nothing.
Does my data go out to the internet?
Only if you enable cloud sync, which is optional. A pharmacy can run entirely offline, and two terminals can sync over Bluetooth or by USB stick without any data leaving the premises.
How are expiry dates handled?
Stock is held by batch, each batch with its own date. At the point of sale the software offers the nearest expiry first, and it warns ahead of the deadline — while the goods are still worth something.
What happens if a tablet breaks?
What it held already reached the other terminal at the last sync, and a new device catches up the same way. That is the point of the journal: the pharmacy doesn't live in a device, it lives in a sequence of events that any terminal can replay.


