Point of sale in Odoo and ZATCA e-invoicing: getting the simplified invoice right from the till
How Odoo point of sale works, how the simplified invoice gets its QR code and ZATCA compliance, what happens when the internet drops, and what makes the link fail.
A shop with a till and e-invoicing has two problems instead of one: the till must be fast and simple for staff, and the invoice it prints must meet the requirements of the Zakat, Tax and Customs Authority. Many solutions fix one and break the other.
Odoo has a point-of-sale module that runs in the browser, connected to inventory and accounting, and it can be linked to e-invoicing. This post covers how it works, what correct setup needs, and what makes the link fail. For the background on e-invoicing itself, read ZATCA e-invoicing on Odoo first.
How Odoo point of sale works
The till is a screen in the browser: the cashier opens a session at the start of the shift (recording the opening cash float), sells by scanning barcodes or picking products, takes payment (cash, card, or split), and prints the invoice. At the end of the shift they close the session and record the actual cash, and the system shows any difference.
Behind the screen: every sale reduces stock in the shop's location instantly, and posts to accounting when the session closes (or instantly, depending on setup). The cashier knows nothing about this, which is the point.
What sets it apart from a standalone till
- One balance: the online store, the till and the warehouse all see the same number. We covered this in inventory management in Odoo.
- Runs on any device: a laptop, a tablet or an ordinary POS terminal, as long as it has a modern browser. The thermal printer, scanner and cash drawer connect.
- Several branches, several tills, all in one system with unified reports.
- Promotions, discounts and loyalty from the same system, without external tools.
E-invoicing from the till: the simplified invoice
Till sales to consumers produce a simplified invoice. The core requirements of the second phase (integration):
- The invoice is generated in an approved electronic format with the required fields (business name, VAT number, date and time, line items, tax, total).
- A QR code on the printed invoice that the authority's app reads and matches against the data.
- Reporting: simplified invoices are sent to the authority within the set window after issue (unlike tax invoices for businesses, which need clearance before issue). This difference matters for the till: selling does not stop to wait for the authority's response.
- A digital certificate per invoicing device (each till or group) linked to the business's account with the authority.
- Sequential numbering and a hash link to the previous invoice, with no gaps.
In Odoo this is done through the Saudi e-invoicing module that connects invoices issued from point of sale to the authority's platform, handling the certificate, signing and sending in the background.
What happens when the internet drops
Every shop's question. Odoo point of sale can keep selling without a connection for a while: invoices are stored locally and sent to the server when the connection returns. Reporting to the authority has a window after issue, so a short outage does not breach the rules provided sending happens within the window. What breaches them is a long outage with no follow-up, and that needs monitoring and alerts in the system: unsent invoices equal an alert to the person responsible.
Correct setup from the start
- Company, VAT number and address exactly as registered with the authority. One character's difference rejects the invoice.
- Taxes on products: each product has the correct tax setting (standard, zero-rated, exempt). Mistakes here produce wrong invoices that only surface later.
- The test environment first: the authority provides a simulation environment, and invoices are tested end to end there before production.
- A certificate per device, verified, with a plan for when it expires or the device changes.
- A printer that renders the QR code clearly enough for a phone to read.
- Returns and exchanges: a credit note linked to the original invoice, not a deletion. Point of sale must support this from the screen.
- Cashier training on only three cases: a normal sale, a return, and closing the session.
Why the link fails
- Business details do not match the authority's record.
- Taxes set at invoice level rather than product level, producing wrong amounts.
- The certificate expired or is linked to another device.
- A return done by deleting the invoice instead of a credit note, breaking the sequence.
- An old version of the module behind the authority's updates.
- Pending invoices that were never sent, with nobody noticing.
Do you need Enterprise?
The point-of-sale module exists in the Community edition, and Saudi e-invoicing is available as community and official modules depending on the version. The answer depends on your version and requirements, and we work it out with you rather than generalising.
The short version
Point of sale in Odoo gives staff a simple till connected to inventory and accounting, and it can issue a ZATCA-compliant simplified invoice with a QR code and background reporting. What separates a working link from a failing one is setup: matching details, taxes on products, a certificate per device, returns by credit note, and monitoring of pending invoices.
See Odoo implementation with ZATCA for what we do, or book a free consultation and we will look at your current till and tell you what it needs.