What to demand in a clinic software demo

By Abhishek Dogra, Founder, ElaiorLast verified

Every clinic software demo is run by the vendor, on the vendor's data, along a path the vendor has walked a thousand times. Nothing goes wrong in it, because nothing in a demo is allowed to go wrong. The way to learn something is to ask what the software does on a bad day: when the bill was wrong, when two people tapped at once, when somebody opened a file they had no business opening, when you decide to leave. The list below is useful even if you buy from somebody else.

Money, and why it comes first

A clinic's records can be rebuilt from paper and memory. Its money cannot. So the billing questions carry more weight than the feature list, and they are the ones a public product page tends not to answer: the one vendor product page we checked leads with encryption strength and a certification, and neither of those says anything about whether a receptionist can quietly change a bill she has already handed over.

Ask thisWhat it is testingA bad answer sounds like
Can a bill be edited after it is issued? Show me.An issued bill has left the building. If it can be edited in place, the copy in the patient's hand and the copy in your register can differ and nothing knows. The right shape is a freeze at issue: to change it you cancel the bill with a written reason and raise a fresh one, and both survive.Sure, the owner can just correct it. Or a silent edit with no reason field and no second document.
Two people tap paid on the same bill in the same second. What happens?The desk and the pharmacy counter share a busy morning. If both taps succeed you have one bill and two payments in the day book, and you find out at closing time. The right answer is that one tap wins and the other is told the bill is already settled.That would not really happen. Or, the second one just overwrites the first.
Where does a bill number come from, and can two bills get the same one?Reading the highest number and adding one is a race: two bills issued at the same instant read the same maximum. A real answer names a lock or a database sequence, and the vendor knows which one they used.It is automatic. A vendor who cannot describe the mechanism has not thought about the race.
Are amounts stored as whole paise, or as decimals?Rupee amounts held as floating point drift by a paisa here and there, and the drift lands in a day end total where you cannot find it. Whole integers of the smallest unit is the boring, correct answer.Rounding differences are not material.

This is how our own billing is built, and the code is the citation rather than the claim. An issued invoice refuses edits and tells you to void and reissue. Voiding is the admin's alone and needs a written reason, and where money had already been collected it writes a compensating entry into the same ledger the day end reads, so the cancelled bill stays where it was and the day end lands where it should. Settling is a guarded flip from issued to paid, so a double tap loses cleanly instead of collecting twice. Bill numbers come from a transaction level advisory lock keyed on the clinic and the year, so only the bills that could actually collide wait on each other, and the lock releases when the transaction commits.

Who can see which patient records

Ask this as a matrix, not as a yes. We have roles is true of everything sold. The question is which role can open which record, and whether anybody has written it down where you can read it.

Ask thisWhat it is testingA bad answer sounds like
Show me the permission list, one row per action.Roles that are three named bundles with invisible contents mean the vendor decides, permanently, what your receptionist may read. A written matrix is something you can argue with before you sign.Admin, doctor, staff. Followed by no list.
Can the front desk open a patient's clinical file?Either answer can be right. What matters is that somebody chose. Ours moved: the desk could add and list reports until that was taken away, on the argument that reports are clinical history while the desk's job is schedules, logs and visits.Everybody sees everything, it is a small clinic.
Is opening a record recorded, or only changing one?Who changed this and who looked at this are different questions with the same weight. A file downloaded the week a patient became newsworthy changes no row at all.We log all edits. Edits are the easy half.
Can anybody inside the clinic delete a line from the audit trail?A trail the top account can clear is a trail that protects the one person most worth auditing. The right answer is that the database refuses, not that the screen has no button.Only the owner can clear the log.

The strong version of that last answer is not a policy, it is a refusal the application cannot talk its way past. On a managed database the application usually connects as the owner of the table, so revoking rights achieves nothing and a trigger is the only thing that holds. Ours reads:

CREATE OR REPLACE FUNCTION forbid_audit_log_mutation() RETURNS trigger AS $$
BEGIN
  IF current_setting('elaior.audit_wipe', true) = 'on' THEN
    IF TG_OP = 'DELETE' THEN
      RETURN OLD;
    END IF;
    RETURN NEW;
  END IF;
  RAISE EXCEPTION 'AuditLog is append-only';
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER audit_log_append_only
  BEFORE UPDATE OR DELETE ON "AuditLog"
  FOR EACH ROW EXECUTE FUNCTION forbid_audit_log_mutation();

That shape is what to ask for. The one exemption is a transaction scoped setting with a single call site, so the routine that wipes a demo clinic can still run while every other statement the service could issue is refused. Ours also files a row when somebody opens or downloads one named record, throttled so a reload does not count as a second look, and deliberately not for list views and searches, which would bury the feed in rows nobody reads. Who may read the trail is a separate question: ours is kept off the clinic's own permission matrix, because the trail names every actor including the admin reading it.

Leaving

Ask thisWhat it is testingA bad answer sounds like
Can I download my patient list, my visits and my billing register today, myself, without asking you?Data you can only obtain by raising a ticket is data whose price the vendor controls. Ask for the button, then press it during the demo.Send us a request and we will arrange an export for you.
What format, and will the file actually open?A file that mangles Indian names in a spreadsheet, or that a spreadsheet reads as a formula because a note begins with a plus sign, is an export in name only. Ask them to open the downloaded file in front of you.It is CSV. Then nobody opens it.

Ours is four self serve downloads, patients, visits, billing and expenses, restricted to the owner account because the dumps carry every patient's phone number, plus a monthly workbook for the accountant. The writer emits a byte order mark so a Windows spreadsheet renders Indian names correctly, and puts an apostrophe in front of any cell a spreadsheet would otherwise execute as a formula.

Three more, if they are still in the room

None of these are trick questions. A vendor who has built the boring parts answers each one in a sentence and enjoys being asked. A vendor who has not will steer back to the feature list, and that is your answer.

Sources

  1. PostgreSQL documentation: explicit locking, transaction level advisory locksPostgreSQL Global Development Group. Checked 2026-09-11.
  2. Practo for providers, the public product pagePracto. Checked 2026-09-11.