Billing software that doesn't rent you your own data.
PharmaDesk is a Windows application for Indian medical shops. GST invoicing, batch and expiry tracking, UPI payment QR, Schedule H registers, supplier purchases and the reports a pharmacy actually has to file. It runs on one PC, works with the internet unplugged, and keeps its data in a single file you can copy.
Why it exists
A friend runs a medical shop. He paid a yearly subscription for software he could
not get support for, and when he wanted to see his own data he was told to open a
.BAK file — which he tried, in Notepad. The data was never actually
locked; nobody had told him that. This is the replacement.
What he had
- A yearly licence fee with no support attached to it
- Backups in a format he had no way to read
- No way to say "this one thing wastes thirty seconds, forty times a day"
- Features he paid for, buried in a menu tree of roughly 250 items
What he has now
- No licence, no renewal, no vendor who can switch it off
- One SQLite file, backed up on a schedule, restorable from the app
- A feedback screen that takes ten seconds and works offline
- The screens a counter actually uses, reachable by keyboard
What it does
Everything below is built around the way a pharmacy counter actually works: fast keyboard billing, correct tax, and the registers a drug inspector can ask for.
GST billing that adds up
MRP-inclusive tax worked backwards to the taxable value, CGST and SGST split per line, and every amount held as whole paise. No floating point touches money at any point, so a bill total is the same number every time.
Batches and expiry, first-expiry-first-out
Stock is tracked per batch with its own MRP and expiry. Billing picks the batch that expires soonest, and every movement is written to an append-only ledger rather than a quantity that gets overwritten.
UPI payment QR on the bill
The shop's own UPI ID, the exact bill amount and the bill number encoded into a
standard upi://pay link. The customer scans and pays; no gateway,
no merchant account, no percentage taken.
Schedule H and H1 registers
Prescription-only sales recorded with the doctor, the patient and the quantity, in the form Rule 65 asks for — produced from the bills themselves rather than kept as a second book that drifts out of step.
It works with the internet unplugged
Nothing in the billing path touches the network. Feedback you send is written to a local queue first and drains when a connection appears, so a dead line costs you nothing at the counter.
Your data stays a file
One SQLite database, backed up on a schedule to wherever you choose, restorable from inside the app. Exports are CSV. Nothing about it requires this software to still exist in five years.
What it looks like
Demonstration data from a fictional shop. Nothing below is a real pharmacy, customer or prescription.
The medicine catalogue
A pharmacy till knows what is on the shelf. It does not know what is in the box. Two questions come over the counter constantly — "do you have something else with the same salt?" and "can they take this?" — and both are answered from composition and the regulator's own label text.
378,497 products
India and the United States, from openFDA's drug directory, the NPPA essential medicines list, and a brand-to-composition dataset for the Indian market.
Safety on the molecule
Paracetamol's liver warning is stored once, not copied onto 3,755 brands of it. Label text is the manufacturer's own wording, never summarised.
Ceiling prices
What NPPA says a scheduled formulation may legally be sold for, as whole paise. Charging above it is an offence under the DPCO, not a pricing preference.
Ask it what else has the same composition:
# the brand a prescription actually names
GET /v1/search?q=dolo+650&market=IN
→ Dolo 650 Tablet · paracetamol@650mg · Micro Labs Ltd
# 555 other brands a pharmacist could hand over instead
GET /v1/medicines/182762/alternatives?market=IN
# or straight from typed text, however the label writes it
GET /v1/alternatives?composition=PARACETAMOL%20IP%20650%20MG
→ parsed as paracetamol@650mg
127.0.0.1:8910/docs with the calls live.