Blog / Billing software with audit trail: void, don't delete

Product · POS · Back-office

Billing software with audit trail: void, don't delete

5 min readBy Arsalan Ahmed

Close-up of a paper till roll printed with rows of figures, wound inside an old cash register
Photo: Steve Snodgrass, CC BY 2.0

Every counter makes wrong bills. A customer changes their mind. A cashier taps the wrong item. Someone bills the same order twice.

The question is what happens to that wrong bill. In a lot of small-shop software, it is deleted and it is gone. I think that is the wrong answer. When I built DukaanKit POS, I wanted billing software with audit trail built in from the first day: a wrong bill is voided, with a reason and a name, and it stays on the record.

This post explains how that works, what I got wrong at first, and where the limits are.

Why deleting a bill is a problem

A deleted bill leaves no trace. That sounds tidy, but think about what it allows.

A cashier takes cash, hands over the food, and deletes the bill. The sale never happened as far as the software knows. The cash drawer is short, or it is not short because the cash never went in. The owner looks at the day's report and sees nothing odd.

An owner who is not at the counter all day needs to be able to trust the numbers without standing behind the cashier. And honest staff are protected too. If every cancelled bill has a reason and a name on it, nobody can be blamed for a gap they did not cause.

What a void does in DukaanKit

When a bill is wrong, the cashier opens it on the till and voids it. The till asks for a reason. Then four things happen:

  • The bill stays in the list, marked as voided. It is not removed.
  • It is left out of sales and profit, so the day's numbers stay correct.
  • The record keeps who voided it, why, when, and on which till.
  • The ingredients for that bill go back to stock, because the recipe had already taken them off.

Voided bills are also left out when the till works out the best sellers, so a mistake does not push an item up the menu.

The phone till can void too. If the phone has no internet at that moment, the void waits in line behind its own bill and is sent when the connection is back.

Who is allowed to void

Not everyone. Each staff member has a permission for it, set by the owner in the back-office. The owner and the manager can always void.

Here I made a mistake worth admitting. For a while, that permission was only checked inside the app. The server accepted the void without checking it again. A rule that only the screen enforces is not a rule. I moved the check to the server, and now a staff login without the permission is refused there, whatever the app says.

What the owner sees: billing software with audit trail on a phone

This is the part I got wrong first.

The early back-office had no list of orders for the owner at all. Voids showed up as a single line under the profit figure, saying that some voided orders were left out. You could see that voids had happened. You could not see which ones, who did them, or why. That is an audit trail nobody can read, which is the same as not having one.

So I built an Orders page. It sits in the bottom bar of the back-office on the phone, because that is where owners look. It shows:

  • Three tiles at the top: bills made, bills voided, and the void rate.
  • Filters for all bills, active bills or voided bills, and by channel.
  • Search by token number, item or staff name.
  • Tap any bill to see its lines and, for a void, who did it, why and when.

The profit page also has a Voided tile now. Tap it and you land on the Orders page with only the voids showing. Today's voids also appear in the alerts at the top of the profit page, next to low stock and wastage.

Can a bill ever be deleted?

Yes, in one narrow case, and I would rather say so than pretend otherwise.

The owner, and only the owner, can delete a bill from the back-office. But only a bill that has already been voided, and only after a confirm step. A live bill can never be deleted outright. The till cannot delete a single bill at all.

Why allow it? Because shops make test bills on the first day, while learning the till. The owner of the first shop using it wanted those gone before real trading began. That is a fair request. The rule we settled on was: void first, then the owner may remove it.

There is also an owner-only reset for a shop that wants a clean slate after its trial days. It clears the bills but keeps the audit log, so the reset itself is on the record.

What it does not do

  • It does not stop a cashier from never making the bill in the first place. No software can see a sale that was not entered.
  • It is not a legal or tax record certified by anyone. It is a clear history for the owner. For what the law needs from your books, ask your accountant.
  • A high void rate does not prove anything by itself. A new cashier makes more mistakes. The number tells you where to look, not what happened.

A habit for owners

Whatever software you use, try this once a week. Open the list of cancelled bills. Read the reasons. If the same reason keeps coming up, something on the counter needs fixing: a confusing menu item, a price that is wrong, a button in the wrong place. Voids are not only about trust. They are free feedback on where your counter is slow.

If you want to see the Orders page on your own menu, start from the POS page. There is a free plan. Questions go to WhatsApp +91 99165 16507 or [email protected].

About the author. Arsalan Ahmed is building DukaanKit in Bengaluru and writes here about how it is going, including the parts that go wrong. Questions: WhatsApp +91 99165 16507 or [email protected].