Run your pharmacy on a server you control
Pharma Care Prois KinetiRx’s self-hosted system of record for independent pharmacies: POS billing with GST invoices, medicine inventory with batch and expiry tracking, a due-khata credit ledger, patient records and OPD visits, and AI-powered purchase-invoice scanning — on a PostgreSQL database that never leaves your infrastructure.
Installs Docker Desktop and git via Homebrew if either is missing.
14
Operational modules
1
Docker Compose command
0
Monthly SaaS fees
Due-khata
Ramesh Traders
₹2,140 due
Last payment 6 days ago
- Self-hostedRuns on hardware you control
- PostgreSQLYour data, your database
- No SaaS subscriptionNo recurring per-shop fee
- Go + Gin backendJWT auth, bcrypt passwords
- Docker ComposeOne command deploy
- Optional AI OCRWorks without it, too
Stop retyping purchase bills into inventory
A distributor’s purchase bill arrives as a photo or a PDF, not clean data. Inward OCR reads it — medicine name, batch number, expiry date, quantity, rate — and stages the rows directly into your inventory for a quick review instead of a manual line-by-line entry.
It runs on Google Gemini, using an API key you provide — that’s the one part of KinetiRx that talks to an external service, and only when you’ve configured a key. Without one, Inward OCR falls back to the standard manual entry form; every other module keeps working exactly the same either way.
- Extracts line items, not just a total — batch and expiry included
- Staged for review before anything commits to stock
- Optional — bring your own Gemini key, or skip it entirely
Scanned bill
Amoxicillin 500mg
AMX-2291 · exp 11/2027 · qty 120
Insulin Glargine
INS-0087 · exp 03/2026 · qty 18
Metformin 500mg
MET-5510 · exp 09/2027 · qty 300
Extracted rows
Every counter workflow, one system of record
AI invoice OCR and the due-khata ledger get their own sections below — here’s the rest of what runs day to day.
POS billing with GST invoicing
Point-of-sale checkout that produces a proper GST invoice — not a handwritten slip. Built for the counter, not adapted from a generic retail register.
Patient records & OPD visits
Patient profiles with visit history, purchase history, and blood-test tracking, plus outpatient visit scheduling and follow-up reminders for pharmacies that run a counter clinic.
Medicine inventory & stock ERP
Batch and expiry tracking, distributor records, and lab-test stock alongside medicines — the parts of running a pharmacy that a spreadsheet quietly gets wrong over time.
Daily sales & cash reconciliation
A real closing register: opening cash, denomination counts, the cash/UPI/card split, and the closing difference — the end-of-day step spreadsheets skip.
Medicine orders & distributors
Track what needs reordering and what's already on order from which distributor, instead of catching a stock-out at the counter.
Expense tracking
Log day-to-day shop expenses by category, so the P&L picture doesn't live only in a notebook by the till.
Employee roles & permissions
Role-based staff accounts with per-tab permissions, enforced server-side on every request — not a client-side toggle a browser console can bypass.
Invoice settings
Store letterhead, GST and drug-license numbers, invoice numbering and retention policy, and printer configuration — set once, applied to every bill.
What “due-khata” means, for readers outside India
Khata is Hindi for a running account book; udhaaris credit extended on trust. Together, “due-khata” is the informal tab a huge share of Indian pharmacies still keep on paper for regular customers. KinetiRx digitizes exactly that relationship — nothing more exotic than a ledger the counter can actually search.
- 1
A regular customer buys on credit
Common at Indian pharmacy counters — a trusted customer takes their medicine now and settles the bill later, sometimes across several visits.
- 2
The due is logged against their name
No more a page in a notebook that only one staff member can read — the amount, date, and items are attached to the customer's record.
- 3
Partial payments update the balance
Every rupee paid back is recorded with a timestamp, so the running balance and the full payment history are always current and auditable.
A system, not a spreadsheet
Real screens from a running KinetiRx instance — dashboard, counter billing, inventory, patients, and the due-khata ledger.

Today's sales, drawer cash, stock valuation, and 7-day financial flow at a glance

Counter checkout with strip/loose dispensing and live GST invoice totals

Batch and expiry tracking, rack location, and distributor tracking

Patient profiles with visit history, dues, and doctor assignment

Patient credit ledger with outstanding dues and WhatsApp reminders
The pharmacy's data belongs at the pharmacy
Your data stays on your server
Sales, patient records, and dues live in a PostgreSQL database you run — not a vendor's multi-tenant cloud. No account rep can see it, export it, or lose it in a breach that isn't yours.
No recurring SaaS fee
There's no monthly per-shop charge and no feature paywall on top of your own deployment. The cost is whatever it costs to run the server — a spare PC, a NAS, or a small VPS.
Works without a cloud dependency
The core system — billing, inventory, patients, due-khata — runs entirely on your local network with no external service in the loop. AI invoice OCR is the one optional exception, and it's opt-in.
You control the upgrade path
Pull a new image and redeploy on your schedule, not a vendor's. Nothing changes under you between one login and the next.
Three steps, one Docker Compose command
The stack is PostgreSQL, the Go backend, and an nginx-served frontend — three containers, one compose file. A CasaOS App Store manifest (x-casaos v2) is included in the repository for NAS owners; it isn’t published to the CasaOS store yet, but the manifest is ready to submit, and plain Docker Compose works on a CasaOS box today.
Clone the repository
Get the source onto the machine that will run it — a spare PC, a home server, or a VPS.
$git clone https://github.com/Raktim94/KinetiRx.git$cd KinetiRx
Configure secrets
Copy the example env file and set a Postgres password, a JWT signing secret, and the first admin password. A Gemini API key is optional — add it later to enable AI invoice OCR.
$cp deploy/.env.example deploy/.env# edit deploy/.env: POSTGRES_PASSWORD, JWT_SECRET, KINETIRX_ADMIN_PASSWORD
Start the stack
One command brings up PostgreSQL, the Go backend, and the nginx-served frontend together. Migrations run automatically on first boot.
$docker compose -f deploy/docker-compose.yml --env-file deploy/.env up -d --build
Full environment variable reference and the REST API contract live in the repository’s README and API docs.
KinetiRx vs. a SaaS subscription vs. a spreadsheet
| Feature | KinetiRx | Hosted SaaS | Spreadsheet |
|---|---|---|---|
| Ongoing cost | Your server only | Monthly subscription | Free |
| Data stays on your server | |||
| GST-compliant POS billing | |||
| Batch/expiry inventory | Paid add-on | Manual | |
| Due-khata credit ledger | Rare | Manual | |
| Patient records & OPD | Paid tier | ||
| AI invoice OCR | Optional (Gemini) | Rare | |
| Role-based staff accounts | |||
| No vendor lock-in |
Comparisons reflect typical hosted-SaaS pharmacy software; specific vendors vary.
Common questions
KinetiRx (Pharma Care Pro) is built and maintained by NODEDR INFOTECH PRIVATE LIMITED. It is self-hosted software with no current open-source license — the source is visible on GitHub, but reuse or redistribution should go through the maintainer.
Official website: www.nodedr.com
Run your pharmacy on infrastructure you own
Clone the repository, run one Docker Compose command, and your data never leaves your server.