Skip to main content

What compliance means for your restaurant

ZRA fiscal compliance is not a one-time setup — it is an ongoing obligation. Every sale must be fiscalised, every receipt must carry a verified ZRA signature, and all records must be retained for a minimum of six years. DishInk handles the technical side of this automatically. This page explains exactly what DishInk does, what you are responsible for, and how to handle a ZRA audit.

What DishInk does automatically

Real-time fiscalisation

Every completed sale is submitted to ZRA within seconds. No manual uploads, no end-of-day batches, no action required from staff.

Verified QR code

Every tax invoice includes a ZRA-verified QR code that inspectors can scan to confirm the receipt is genuine.

Digital signature

Each receipt carries a unique fiscal signature from ZRA’s VSDC. The signature cannot be reproduced without ZRA’s involvement — it proves the receipt was not fabricated.

Consecutive invoice numbers

CIS Invoice Numbers are generated server-side in strict sequence with no gaps. Cashiers cannot influence, skip, or duplicate them — this is a ZRA requirement.

Immutable receipt ledger

Fiscal receipt records in DishInk cannot be deleted — not by staff, not by managers, not by DishInk administrators. This is enforced at the database level.

Six-year retention

All transaction records, fiscal signatures, and ZRA responses are retained for a minimum of six years in line with ZRA’s record-keeping requirement.

Full audit trail

Every action on a transaction is logged — who processed it, when, what changed. Voids and refunds require manager PIN and capture the authorising manager’s identity.

Offline resilience

If ZRA is temporarily unreachable, sales are queued and submitted automatically when connectivity returns. No fiscal data is lost.

The audit trail

DishInk maintains a complete, tamper-evident record of every transaction event.

What is logged on every sale

What is logged on voids

Voids require a manager PIN. The void record captures:
  • The manager who authorised it (name, role, staff ID)
  • The reason provided (free text, mandatory)
  • The timestamp
  • The original transaction details
A void cannot be processed without a valid manager PIN. The system verifies the PIN against a hashed value — plain PINs are never stored.

What is logged on refunds

Refunds create a new transaction record linked to the original. The record captures:
  • The original transaction ID and ZRA invoice number
  • The refund amount
  • The credit note reason code (ZRA-defined codes e.g. goods returned, price correction)
  • The staff member who processed it
  • A ZRA credit note submission with the original receipt number referenced

What is logged on split bills

Each portion of a split bill generates its own transaction record. The shared ZRA submission (made on the first portion) is referenced across all portion receipts so the entire table total can be reconstructed from the records.

Record retention

ZRA requires fiscal records to be retained for a minimum of 6 years from the date of the transaction. DishInk enforces this at the database level.

How DishInk enforces retention

At the database level: A database rule blocks all DELETE operations on the smart_invoice_receipts table. This rule cannot be bypassed by any user, including DishInk administrators. The only way to remove a fiscal receipt record would be to drop the rule at the database infrastructure level — something DishInk monitors and would not permit. What is retained:
  • The full transaction record (amounts, items, payment method, staff, terminal)
  • The ZRA submission payload (what was sent to ZRA)
  • The ZRA response (what ZRA returned including receipt number and signature)
  • The fiscal signature
  • All void and refund records linked to the original transaction
What this means for you: You can ask DishInk support for an export of any transaction going back 6 years. You do not need to maintain your own backups of fiscal data — DishInk holds it.

Compliance by transaction type

Standard VAT sale

Refund / credit note

Split bill


Preparing for a ZRA inspection

ZRA inspectors may visit your restaurant and ask to verify receipts. Here is what to expect and how DishInk helps you respond.

If an inspector scans a QR code

The inspector uses ZRA’s mobile verification app to scan the QR code on a receipt. The app contacts ZRA’s servers and confirms:
  • The receipt number exists in ZRA’s records
  • The business TPIN matches
  • The amounts were not altered after submission
If the scan passes: The receipt is verified. No further action needed. If the scan fails:
  1. Find the transaction in DishInk’s history
  2. Check the Fiscalisation Queue for the job status
  3. If the job is SUCCESS, the receipt is genuine — the inspector’s app may have a connectivity issue, ask them to retry
  4. If the job is Failed or Dead, the receipt was not fiscalised — see Fiscalisation Queue for how to resolve

If an inspector asks for transaction records

DishInk can export transaction records in formats suitable for ZRA review. Contact DishInk support to request an export for a specific date range or transaction reference.

If an inspector asks about a voided transaction

Every void is logged with:
  • The manager who authorised it
  • The reason
  • The timestamp
  • The original transaction
Voids are visible in DishInk’s transaction history with a VOID status. The original receipt data is preserved — the void does not delete it.

If an inspector questions a gap in invoice numbers

CIS Invoice Numbers are consecutive and server-generated. There should be no gaps. If an inspector identifies a gap:
  1. The gap may have been caused by a failed transaction where the CIS number was reserved but the transaction did not complete
  2. Contact DishInk support with the CIS number range in question — full logs are retained

VAT categories and correct classification

Using the correct VAT category on each menu item is your responsibility as the taxpayer. DishInk enforces that a category is selected — it cannot validate whether you chose the correct one. Standard categories for restaurants:
Applying the wrong VAT category (e.g. marking a standard meal as Exempt) constitutes incorrect tax reporting. Consult your accountant or ZRA if you are unsure which category applies to a specific item.

What you are responsible for

DishInk handles the technical fiscalisation. You as the business owner remain responsible for:
1

Correct VAT category assignment

Ensure each menu item is mapped to the correct VAT category. DishInk cannot make this legal determination for you.
2

Keeping device credentials current

If ZRA suspends or updates your device registration, update it in DishInk promptly. Sales cannot fiscalise with invalid credentials.
3

Acknowledging supplier purchases

ZRA-registered supplier invoices must be acknowledged (approved or rejected) through the Purchases tab. Unacknowledged purchases may affect your input VAT claims.
4

Registering your branch with ZRA

After initializing a device, register your branch details with ZRA using the Register Branch button on the Devices tab. ZRA requires branch registration before accepting sales.
5

Acting on Dead jobs

Jobs that reach Dead status will not retry automatically. Review the error, resolve the underlying issue, and manually retry. A Dead job means a sale that has not been fiscalised with ZRA.
6

Providing valid receipts to customers

Receipts marked Pending ZRA Sync are not yet legally complete. For customers who require a valid VAT invoice, reprint once the fiscal job succeeds.

Common compliance mistakes

Do not manually edit exported data before submitting to ZRA. Any modification to exported transaction data breaks the audit chain and can trigger a ZRA investigation.
Do not issue handwritten receipts instead of DishInk receipts. Handwritten receipts are not fiscalised and do not satisfy ZRA’s Smart Invoice requirement for VAT-registered businesses.
Do not ignore Dead jobs in the Fiscalisation Queue. A Dead job is a sale that ZRA has no record of. This creates a discrepancy between your sales records and ZRA’s records. Resolve Dead jobs promptly.
Reconcile your Smart Invoice records to your bank deposits monthly. Review the Fiscalisation Queue weekly to ensure no Dead jobs have accumulated. Discrepancies are significantly easier to explain when the trail is fresh.
Before your first busy service, process a low-value test sale and verify the receipt prints with the ZRA receipt number and QR code. Confirm the QR code scans correctly using your phone’s camera. This takes two minutes and confirms end-to-end fiscalisation is working.

Data export for audits

DishInk can provide the following exports for ZRA audit purposes:
All exports include the ZRA receipt number, fiscal signature, and timestamp for every transaction. These are sufficient for ZRA audit verification purposes.

Overview

Smart Invoice overview and setup guide.

ZRA Integration

Device setup, TPIN configuration, branch registration.

Fiscalisation Queue

Monitoring submissions and resolving failures.

Receipt Format

Every field on a ZRA-compliant tax invoice explained.

Purchase Management

Acknowledging supplier invoices and input VAT.

FAQ

Common questions and troubleshooting.
Last modified on August 17, 2026