The cash journal
Updated on 2026-08-22
Every closed till receipt goes into the journal. That journal is built to be able to prove that nothing has been tampered with — you do not have to do anything for that yourself, but it does explain why some things are deliberately impossible.
The receipt number
Every closed receipt gets a number from the series of your salon, for this financial year: 2026-0148 — the year, a dash, and the sequence number in four digits.
- No gaps. The number is handed out while the series is locked. If two tills close in the same second, they wait politely for each other.
- No duplicates. It is never worked out as "the highest number plus one".
- On 1 January the numbering starts again at 1.
The hash chain
Under every receipt there is a line such as hash 3f9a2c…, with the explanation Elke bon ketent aan de vorige; zo is manipulatie zichtbaar. (Every receipt chains to the previous one; that way tampering is visible.)
The hash is calculated over the previous hash plus the contents of this receipt: the salon, the financial year, the number, the moment of closing, the totals and the VAT, and per line the type, the staff member, the description, the quantity, the unit price, the VAT percentage and the line total.
If even one cent changes afterwards, the hash no longer matches — and from that point the whole chain no longer matches. The chain also runs on across the turn of the year.
What is never possible
- Deleting a till receipt. The attempt is refused: Kassabonnen worden nooit verwijderd. Gebruik void() met een reden. (Till receipts are never deleted. Use void() with a reason.)
- Changing a closed receipt. Only the data of a reversal may still be added. Everything else is refused with: Een afgesloten kassabon mag niet meer wijzigen. Maak een tegenboeking. (A closed till receipt may no longer be changed. Make a reversal.)
So you always correct with a reversal.
The VAT
The VAT is calculated per receipt line and rounded at that moment, while you are checking out. Reports only add those cents up; they never recalculate the VAT from the daily total.
That is not nit-picking: with three lines of € 3,33 a recalculation from the total differs by a cent from the receipt the client was handed — and then your return no longer matches your till.
Gift cards, credit and separate discount lines carry no VAT. With a gift card the VAT only follows on redemption, on whatever is bought then.
Where to find the journal
| Screen | What for |
|---|---|
| Rapporten → Dagontvangsten (Reports → Daily takings) | the report that goes to the accountant: per day, per VAT rate, per payment method |
| Rapporten → Transacties (Reports → Transactions) | every receipt separately, searchable; cancelled receipts are included by default but do not count towards the totals |
| Rapporten → Kassaboek (Reports → Cash book) | the cash side: change float, deposits, withdrawals, counts |
| Instellingen → Logboek (Settings → Audit log) | who closed which receipt and who reversed which receipt |
The audit log keeps who did something, not what was on the receipt. That last part is in the journal itself.
Checking
There is a check that recalculates the numbering and the hash chain per salon and per financial year. It changes nothing and repairs nothing — it says whether the journal adds up:
php artisan register:verify-journal --tenant=<slug> --year=2026
The answer is Journaal sluit. Geen gaten, geen gebroken hashes. (The journal adds up. No gaps, no broken hashes.) or a list of the problems.
Frequently asked questions
What if the till is offline? Entering is allowed, checking out is not. The receipt number and the hash come from the server: without a connection a receipt therefore cannot become a fiscal document. The draft receipt stays on your device and goes along as soon as the connection is back.
I see a reversal in my daily revenue. Does it count twice? No. In the revenue reports both the original and the reversal drop out. If only the original dropped out, the negative reversal would make the daily revenue too low.