Everything in it

Built for the way a pharmacy actually works

Every capability runs on your own computer first, so the shop never waits on the internet. Here's what's inside — all of it in the one licence, none of it a module.

At the counter

The queue, kept moving

What the person standing at the till touches, and the reason a bill takes seconds rather than a minute.

Sales & GST billing

Keyboard-driven invoicing posted against specific batches, with the tax, the discount and the print all falling out of the same bill.

  • Type the first letters and the medicine box matches the start of a word in the name or the salt — zi lists Zibicom and Zinc, not every levocetirizine on the shelf — with the product named what you typed listed first. Barcode, HSN, maker and rack still match from any part.
  • Per-line batch selection with automatic CGST/SGST or inter-state IGST. A whole-bill discount as % or rupees is shared across lines in proportion to value and taken off before GST, so the tax falls with it and the printed rate-wise summary still reconciles.
  • What the bill comes to is a strip pinned across the foot of the screen, so a fifty-line bill still shows its payable without scrolling to the end.
  • Ask for 100 strips when the front lot holds 30 and the line spills onto the batches behind it in expiry order — showing you the plan first, each further lot billing at its own rate.
  • Sold below cost, charged above MRP, or discounted past line value: the whole row turns red and a badge names which, every rate normalised to one basis first. Advisory, never blocking, because a below-cost sale is often deliberate.
  • Schedule H, H1 and X flagged on the line. H1 and X ask for the prescriber’s address as well, snapshotted onto that bill for good, so a doctor later renamed can’t rewrite an old register entry. A wholesale house or a warehouse switches the prescriber question off altogether; a retail counter is asked by default.
  • At a distributor every account is tagged B2B or B2C: a bill for a retailer opens each line at that lot’s PTR, a trade buyer’s at the sale rate — the two prices set once at goods-inward and never again re-keyed from memory.
  • Split the tender — part cash, part UPI — each leg landing in its own drawer or bank account, so the day-close count reconciles.
  • A customer’s unspent credit notes are offered before you count the change, oldest first, capped by both what the notes hold and what the bill owes.
  • Prints to the 80mm thermal roll, A4, A5 or the dot matrix you already own, under your own logo — with a page length for 6-inch stationery, or Continuous for a shop that cuts the roll rather than tearing at a perforation, so there is never a blank page between two bills.

Substitute finder

When a prescribed brand is out of stock, find an in-stock medicine with the same salt in one keystroke — sorted stock-first with MRP and expiry.

  • Matched on the composition rather than the brand name, so what you offer is the same molecule and not a similar-sounding pack.
  • Sorted stock-first, each row carrying MRP and the soonest expiry, so the swap is priced and dated before it’s offered across the counter.
  • At the counter it pops up on its own when the picked brand has nothing on the shelf; ↑ ↓ + Enter puts the substitute on the bill.
  • Runs against the local catalogue, so it still answers with the line down — which is exactly when losing the sale would hurt.

Keyboard-first everywhere

Built to be driven entirely from the keyboard. The mouse is always optional, never assumed.

  • A global fuzzy command palette on Ctrl+K to jump to any screen or action.
  • Single-key actions from wherever you are: S to sell, N for a new medicine, F3 to start a bill from any screen.
  • Visible key hints on the controls themselves and a per-screen key-map overlay, so nobody has to memorise the app to be quick in it.
  • A calculator on ` that takes one typed expression rather than a form — 120−10%, 120/10 for a strip rate split across its units — shows the answer with and without GST, and drops it straight back into the field it opened from.
  • Every field where a rate is actually decided carries a calculator icon that opens it pointed at that field, which is also the way in on a phone, since a phone has no ` key.

Product photos

Pack photos from the built-in catalog appear next to the medicine wherever you pick or browse it, so staff recognise the right product by sight rather than by spelling.

  • Shown while adding a medicine, receiving stock, in the substitute finder and down the inventory list — every screen where the wrong pack could be picked.
  • A tick on the pack shot marks a medicine matched to the shared catalogue, so a photo, salt and pack size that came from there can be told from ones somebody typed.
  • Automatic for catalogued products that have one. There is nothing to switch on and nothing to upload.

Stock & buying

Held at the batch, not the box

Every lot with its own number, expiry, MRP and true landed cost — and a signed record behind every quantity that ever moved.

Inventory & catalog

Stock kept at the batch level so expiry, pricing and regulation stay accurate, scoped per shop and rolled up to the organisation.

  • A bundled catalogue of roughly 2.5 lakh medicines prefills name, composition, manufacturer, HSN, GST rate and schedule flag — you start billing rather than start typing.
  • The pack line is picked, not typed: Form comes off a list and units per strip is required, so what prints under the name is derived from both and the count and the form can never disagree.
  • The row says what to do about the shelf, not just what’s on it. A schedule chip rides the name, on-hand reads red at or under the reorder level and at plain zero, and a lot past its month stops printing a date and prints the loss — Expired lot · AMX2291 · ₹3,120.
  • Schedule is read off the composition against the H1 and X molecule lists rather than left to memory, with a one-click sweep to re-tag stock catalogued before.
  • Min and Max per medicine — Min is the trigger, Max is the level an order fills back up to. In a chain each branch sets its own, because a shop selling ten a day and one selling one a month can’t share a reorder trigger.
  • Batch-aware (FEFO) valuation, barcode lookup, and a bulk editor that sets MRP, margins, Min and Max across a whole selection at once.
  • Two catalogue rows for the same product — the one you typed and the one that came in on a receipt — merge into one: stock, bills and history move across, and the row you keep fills its blanks from the duplicate.

Stock movement ledger

An append-only, signed record behind every quantity change — purchases, sales, voids, adjustments, write-offs. On-hand is the sum of movements, so edits reconcile exactly and sync conflict-free.

  • On-hand can’t be retyped. A saved batch shows its quantity read-only and hands you Adjust stock or Write off, each posting a dated, reasoned, named-user entry — because a quantity edit that reads as a correction is how shrinkage stops being visible.
  • Stock Count is the bulk door: scope a sheet, walk the shelf, key what’s there. Counting posts nothing until Commit, so the counter keeps billing through it; blank is never zero, so a sheet abandoned two-thirds through never writes off the shelves nobody reached.
  • The correction posted is counted minus the on-hand snapshotted when that row was counted, not at commit — so a sale rung up during a three-hour count survives instead of being silently erased.
  • Blind by default: the system quantity is withheld while entering, because a visible figure turns counting the shelf into confirming the screen.
  • A committed sheet is one dated document, not thirty loose corrections — an adjustment per differing lot, each tagged back to the sheet. A mistaken count is voided, not edited: every movement gains a mirror-image reversal and the sheet returns to draft.
  • Deletion never erases history. A batch that has been sold, received or returned is written off rather than removed.
  • One item’s whole story — every receipt, sale, return, transfer, count and write-off across all its lots — is one click, or Shift+H, from the batches panel. On a phone it is a tab.

Barcode stickers, per lot

Shelf stickers that identify the batch, not just the product — because the same medicine on the same shelf is routinely two MRPs — printed straight to the label printer in its own language, so they scan first time.

  • Every sticker carries a Code 128 barcode for that lot with its batch number, expiry and MRP beside it. Scan it at the counter and the line is added from that lot, at the price on the sticker. A lot with no code is minted an 8-digit one the first time it prints and keeps it, so a reprint is the same sticker.
  • TSC, TVS, Godex, Zebra, Xprinter and Rugtek label printers are recognised by name and sent the barcode in their own language, so the printer draws it on its own dots instead of rasterising a picture that scans on the third try.
  • Save & print labels on a goods receipt offers stickers for exactly what that receipt brought in — receiving 12 into a lot already holding 8 offers 12, because the 8 are already wearing one. Free goods count as boxes, and a reprint weeks later never offers more than are still on the shelf.
  • Two layouts. Stacked prints every field under the bars; Side-set runs the distributor’s invoice number, the MRP and the expiry sideways up the margins — the layout the trade already knows — and hands the height back to the barcode: 12.4mm of bars against 7.2mm for the same six fields.
  • A thermal roll of any size (50×25, 40×15…) prints one label per page; an A4 sheet of die-cut stickers prints as a grid, and you say how many are already peeled off so the print starts on the first one still there.
  • The preview draws the paper at its true millimetres, and nothing is minted until the sticker comes out, so changing your mind leaves no dead codes behind.

Purchases & procurement

The buying side end to end — short book, reorder plan, order, goods receipt — posted against batches so cost of goods and payables stay correct.

  • Receiving stock, against a PO or directly, creates or replenishes batches with MRP, rates, GST and expiry; each line ties to its batch, and the totals flow into payables.
  • A supplier’s whole-invoice discount as % or rupees is shared across lines in proportion to value and taken before GST, with per-line landed cost reckoning each line’s share of it. A line discount % comes off the gross less the scheme, the way a distributor quotes it, so the line totals what their invoice does.
  • At a distributor the purchase rate column is PTS and a PTR column stands beside it — what the chemist will be billed is set once at goods-inward, off the supplier’s own invoice, carried over when the batch is received again, and refused if it is above the printed MRP.
  • A line that got dearer says so. Each is checked against what the shop last actually paid — read off the purchase ledger, so re-receiving an old lot at a new price still counts — and a rise is marked in red on the row.
  • The receipt row carries the distributor’s own paperwork: their invoice number beside our GRN, and the terms they gave under their name — 30 days net · returns up to 3 months before expiry.
  • Reorder planning turns low stock into a suggested order that fills each medicine back to its Max, and the cart consolidates onto as few distributors as the rates allow — one order of forty items beats four of ten.
  • The short book plans on the net position: stock promised to branches on open indents is subtracted and goods already on a placed PO are added back, so the same shortfall is never ordered twice.

Money

Both directions, and what it adds up to

Who owes you, who you owe, what the shop spent — and the reports that turn all three into a number you can act on.

Payments, receivables & payables

The money hub tying sales, purchases and expenses to cash flow — receivables, payables and the daily reconciliation between them.

  • Payments by mode — cash, UPI, card, bank, cheque — against tagged cash and bank accounts with running balances, in full, in part, or split across two.
  • Every row says what the money was for, by name: GRN 4468, credit note CN-0041, rather than counting it as “1 invoice”. Spread across several it counts them and says so when a tail is still sitting on account.
  • A credit or debit note settles against a bill instead of cash, the way a distributor actually clears one — ₹46,000 by cheque plus a ₹4,000 note closes a ₹50,000 invoice in one save, and nothing enters or leaves a drawer.
  • Money is recorded wherever the balance is shown: a customer row, a supplier row, or any party line of the receivables ageing report opens the payment form already addressed to them with their outstanding filled in.
  • Switching from another system? Carry pre-existing balances forward invoice-by-invoice, so day-one dues age correctly from the start.
  • Close the day and the cash it was counted against stops moving — editing, voiding or back-dating a payment inside it is refused until someone reopens the day.

Customers & doctors

A directory keeping sales, prescriptions and dues tied to the right person — and a prescriber register beside it.

  • A customer is identified by their number, not their name: the phone is the required field and the name optional, which is the inverse of most software and what is actually said across a counter.
  • The directory reads as a collection worklist, not a contact list — every row carries how many bills are open and how old the oldest is, amber past thirty days and red past sixty, on the same lines the ageing report buckets on.
  • Correcting a name corrects it everywhere it was already printed: every bill, credit note, order and receipt behind it, not just the record going forward.
  • A doctor and prescriber directory of its own. Prescribers are born at the counter, name only; here they gain a registration number, phone and address, and each one’s prescription history opens straight to the printed invoice.
  • A missing prescriber address is flagged on the register rather than at Save with a customer waiting — the roster says how many are short of one before it becomes a problem.
  • On Android, names and numbers import from the device address book, and a customer’s or a distributor’s ledger reads as the printed statement on the phone as well — the same document the desktop shows and the PDF prints, pinch-to-zoom, not a squeezed table.

Loyalty points

Two numbers — how many points ₹100 of goods earns, and how many points make a rupee — and every bill that names a customer earns them on its own, with the balance sitting beside their dues.

  • Points come off a bill as their own line, printed on the invoice and the thermal roll, and a customer with enough of them can settle a bill to the last rupee. Goods that come back bring their points with them.
  • What the pair costs is spelled out in rupees before it is saved — a ₹1,000 bill earns 50 points, worth ₹0.50: you are giving back 0.5% of every sale — because “5 and 100” doesn’t read as a permanent discount until somebody multiplies it out.
  • Tiers let your regulars earn at a better rate the more they buy — Silver from 500 points, then 8 per ₹100 — worked out from lifetime points earned, so spending points never demotes the customer who spent them.
  • The scheme lives on the organisation, not the shop: a regular earns at whichever counter they walk into and spends at another. Setting neither number is the off switch — no column, chip or report appears until you ask for it.
  • A customer signed into the app sees their balance and hears about it on their phone when a bill moves it — You earned 25 points. You now have 340.
  • A Loyalty points report states the liability: what the unspent balance is worth at today’s conversion, then issued, redeemed and adjusted for the period, by customer.

GST returns & e-invoice

GSTR-1, GSTR-3B and the e-invoice registration file, all built from the same rows the invoices were — and all offline, through the government’s own upload tools, with no GSP contract and no per-document fee.

  • GSTR-1: pick a monthly or quarterly period and it re-buckets sales and credit notes into B2B, B2CL, B2CS, CDNR/CDNUR, HSN summary and documents issued, flags missing GSTINs and HSNs, and writes the section files the GST Returns Offline Tool imports.
  • GSTR-3B as a worksheet keyed to the government utility’s cells, computing every box it can derive and saying which it can’t. A shop on the composition scheme gets CMP-08 in their place.
  • E-invoice (IRN) for the shops rule 48(4) applies to: the same period lists every B2B invoice and credit note in it and saves the upload file the Invoice Registration Portal takes. Documents the portal would bounce — a buyer with no PIN code, a line with no HSN, an over-long invoice number — are held back with the reason on the row, before the trip to the site.
  • Bring the portal’s result file back and it stamps each document’s IRN, acknowledgement and signed QR code, which then print at the top of the shop’s copy, the PDF and the customer’s WhatsApp link. A registered document can no longer be edited, renumbered or deleted — it has been filed with the government — and GSTR-1 warns when a period already carries IRNs so nothing is reported twice.
  • Trial Balance and Balance Sheet, derived by walking your own documents rather than posted by hand, so editing a bill restates the statement and the books can never drift from the paper. A books-lock date closes a filed period.

Expense management

The day-to-day running costs of the shop, categorised and carried into the same cash book as everything else.

  • Amount, date, payee and note, classified by category, with the payment method captured.
  • Recurring-expense flags, and the bill or receipt image attached to the entry.
  • Feeds the cash book alongside receipts and payments, and totals into the reports by category, period and shop.
  • An expense dated inside a closed day can’t be edited or deleted until that day is reopened, so a counted drawer stays counted.

Reports & documents

Two dashboards and 58 prebuilt reports, all plain queries over your own data — which is why they open with the line down.

  • An at-a-glance dashboard for sales, purchases, expenses, profit, top items, low stock and outstanding, filterable by period and by shop, with an interactive sales-trend chart.
  • It states a direction, not just a figure: the period is read against the same span one period back — today against the same weekday last week, because a Sunday counter and a Tuesday counter are different shops.
  • The receivables and payables cards say how many parties a balance is spread across and what share of it is overdue, in red, with a full teal bar for a clean book.
  • Expiry value at risk, dead stock, margin movers and the reorder plan sit behind the same offline queries.
  • GST-ready rate-wise summaries for the accountant, and every report exportable to branded PDF and CSV.
  • Print-ready invoices, notes and receipts generated entirely on the machine, with no rendering service in the loop.

Devices & people

One shop, however many screens

The counter PC, the phone in your pocket and the second branch reading the same ledger — and a copy of it you are allowed to test.

Offline-first sync

Every operation runs against a database on that machine and succeeds with no network. The cloud is an enhancement, never a dependency.

  • Billing, search, printing, dues and all 58 reports read and write locally, so nothing on the counter waits on a connection.
  • Local writes journal to an outbox and flush in order on reconnect; remote changes pull on a cadence, with a live indicator showing pending, syncing, synced or offline.
  • Crossed edits resolve last-write-wins and are flagged for review with a field-by-field diff and one-click restore — never a silent overwrite.
  • A Sync screen shows what is queued and how long each table has waited, when this device last reached the server, and the recent error log. Every figure is read from this device, so the screen is accurate with no network — which is when it gets opened.
  • Per-computer number series, because invoice numbers are minted locally: tag the second machine and it bills 130-B while the first bills 130, so two counters can never mint the same number. GST Table 13 then reports each series as its own consecutive range.
  • A protocol-version handshake turns a too-old client’s sync into a clear “you must update” rather than quiet data corruption.
  • The Android app reaches you when DravyaOS is closed — stock running low, an order coming in, a payment falling due. Signing out on a shared counter phone stops its alerts, so the next person to sign in doesn’t inherit yours.

Roles & multi-shop

An organisation holds its shops, its people and four ranks — Org Leader, Org Manager, Shop Manager, Shop Employee — with cascading authority over who may do what to whom.

  • A Shop Employee does not read what the shop paid. Purchase rate, margin, profit and landed cost come off the bill and the lists; the Profit and Books report groups, Purchases, Debit notes and the Journal leave the menu entirely — from the index, the search and the command palette alike, so no door is left round the back.
  • Suppliers stays visible for that rank, because a vendor’s number and what the shop owes them is a due, not the cost of goods.
  • Staffing stops at the organisation level: only an Org Leader or Org Manager adds, edits or removes a user. A Shop Manager runs their shop’s counter, not its payroll.
  • Each shop carries its own GSTIN, drug licence and FSSAI number, printed together on the invoice, both notes, the receipt, the statements and the 80mm roll — the numbers an inspector reads off the bill.
  • Org-level roles get a cross-shop overview and switch the active shop; shop-level roles see only their own workspace.
  • Anyone joining with the organisation code always arrives as a Shop Employee, so a code alone can never hand out a role.

Backup & restore

A copy of the shop you can actually take, actually test, and actually restore — onto a machine that has never seen it.

  • Point-in-time snapshots of the local store to a file or to the cloud, restorable onto a fresh device.
  • Optional scheduled local backups, so the newest good copy isn’t whichever one somebody remembered to take.
  • Getting data out is the export on whichever screen shows the thing you want — a document, a report, a ledger — rather than a dump of every table, which is not a question either screen was ever asked. A snapshot answers the other one: restoring a dead machine.
  • A fresh-device restore pulls the whole organisation back after a server-side password check — which is also the answer when a recovery code is lost: the account may be gone, the shop is not.

Made to fit

Your shop's name on it, in your language

The parts you set once and then forget: how a bill looks, which language the screen speaks, and how a line total is worked out.

Theming & branding

Fully themeable branding, applied across the interface and every printed document, configured per shop.

  • Primary and secondary colours, a display font and a number font, an uploaded logo, and a signature image on invoices and generated documents.
  • Per shop rather than per organisation, so a chain’s branches can differ where they need to.
  • The 80mm thermal receipt is the one deliberate exception: it pins its own high-legibility font and full-black ink, because a 1-bit thermal head renders a lighter branding font unreadable.
  • Under your branding, every printed document closes with a foot band carrying when it was last saved — so two printouts of the same invoice number can be told apart after an edit.

Localization

The operator interface in English plus seven Indian languages, switched from Settings and persisted, with English as the universal fallback.

  • Hindi, Bengali, Marathi, Telugu, Tamil, Gujarati and Kannada, switching instantly — every script rendered offline, with no font fetched at runtime.
  • Domain vocabulary stays English by rule: MRP, Batch, GST, HSN and Schedule, the billing grid’s columns and the totals strip — because that is what the shelf and the bill say.
  • Everything around that surface is keyed: page and field captions, buttons, disclosures, confirmations, row tooltips and screen-reader labels.
  • Printed documents stay English, so a bill reads the same to a customer, an accountant and an inspector.
  • The customer-facing app speaks all eight as well — sign-in, the running statement and the ordering flow — because the person reading that one is a patient, not a biller.

Settings & formula engine

A central, per-shop configuration store, synced like any other data and gated to Shop Manager and above.

  • Printed-invoice columns: their order, their labels, their visibility, plus opt-in attribute and batch columns.
  • Templatized sale formulas — line amount, discount, GST breakup, rounding, net total — run through a safe parser rather than eval.
  • Validated and previewed against a real line before they take effect, so a broken formula is caught on this screen and not on a bill.
  • Business type is recorded per shop and per organisation, deciding what a new shop starts as and which masters a branch may alter for itself.

AI · optional

The three that call home

The only screens in the app that need a server. The shop bills, counts stock and closes the day exactly the same without any of them.

Ask DravyaOS

Ctrl+J anywhere: an assistant that reads the screen in front of you and answers from this shop’s own data — why a figure is what it is, and where to go to change it.

  • It exists for the two questions no manual can answer: why is this number like this and where do I do this. The screen goes up with the question — a picture of exactly what is in front of you — and the panel names which screen it is sending, before it sends it.
  • It answers from the shop’s live database on this machine, not from a general idea of a pharmacy: why is my stock worth ₹73,236 when I bought ₹1,86,780 this month is answered with the lots that make up the figure and the expired one deliberately left out of it.
  • “Where do I…” takes you there instead of describing the menus.
  • It can delete a sale, receipt, batch or expense, void a payment or reprice a lot — each comes back as a card saying exactly what else moves, worked out by your own machine from the real record, and nothing changes until you press the button. Reading runs unattended; writing never does.
  • A Shop Employee cannot get a cost price out of it: its own queries refuse those columns outright, rather than being asked not to mention them.
  • Conversations stay on this device and on your sign-in. Nothing is kept on our side — the question, the picture and the answer reach the model and are gone.
  • Included with a live subscription, no add-on to buy. Try it in Demo mode from the sign-in screen, before you have an account.

AI data import

Reads whatever your old pharmacy app can give you — a CSV, a PDF, or a photograph of a printed stock list — into a clean table you review before anything is saved.

  • Three steps, and the third is the promise: nothing is written until you accept it. Step three states exactly what committing would do — how many medicines the catalogue gains, and what it would change.
  • A row the reader can’t use is held, with its text, not counted and discarded. “6 rows dropped” tells a shop something went missing without telling them what.
  • A match it isn’t sure of is tinted amber and tagged unsure rather than silently chosen — silently choosing is how a shop ends up with two Pantoprazoles.
  • Parties and medicines are matched to your existing records, and everything commits through the app’s own insert paths, so an imported purchase is a real purchase.
  • Reachable from an Import invoice button inside the New-purchase form, so a receiver can photograph the supplier’s bill without leaving the receipt they’re entering.
  • When you correct a match, that distributor’s wording is remembered — the next invoice from them arrives already mapped, on every device.
  • Without the AI import, products with their batches, suppliers and customers come in from our own CSV template — download it, fill it in, hand it back. Read by a parser, so nothing is guessed, no subscription is needed, and a party already on record is updated rather than duplicated.

Intelligence

An action list, not a chat box: six findings on one screen, each with the money at stake and the door to the place you’d act.

  • The six: reorder by days of cover (which catches fast movers with no reorder level set at all), dead stock, lapsed refills of a regular medicine, batches expiring faster than they’ll sell, purchase rates that rose receipt-over-receipt, and Schedule H/H1/X bills with no prescriber.
  • Each carries the rupees at stake, the rows it was derived from, and one action that lands in an existing screen rather than a recommendation you have to go and find.
  • Every figure is plain SQL over the local tables, so the page works offline and costs nothing to run.
  • The four money totals — at risk, locked up, recoverable, to spend — are shown separately and never summed, because adding them would mean nothing.
  • A finding’s caveat sits in its head beside what it qualifies, not as a footnote under the rows it produced.
  • Included with an active trial or subscription, and optional to use; the rest of the app is unaffected either way.

Want the deep technical breakdown? The full product specification lives in the app docs.

Download it. Yours to run.

Get the full pharmacy app for Windows — no account needed. Free for 3 days, then ₹2,999 a year for the whole shop. See pricing.