Skip to Content

Odoo POS Sales and the VAT Return: Why the Totals Don't Match

Your sales list from invoices is lower than the VAT return? The missing sales are usually the POS orders nobody invoiced. Here is where Odoo 19 books them and how to reconcile the quarter.
October 29, 2026 by
Odoo POS Sales and the VAT Return: Why the Totals Don't Match

Your sales list from invoices is lower than the VAT return? The missing sales are usually the POS orders nobody invoiced. Here is where Odoo 19 books them and how to reconcile the quarter.

On a recent project, a retail business with a shop counter and a handful of account customers prepared its quarterly VAT file the usual way: export the posted customer invoices for the quarter, add them up, compare with the VAT return in Odoo. The invoice list came out clearly lower than the return. Nothing was wrong with the return. The list was simply missing the shop sales.

A related question came up at the next quarter-end: why did the return include sales from the last evening of the previous quarter? Both have the same cause. Odoo books Point of Sale sales differently from invoices, and once you see how, the reconciliation is simple.

This is a practical note on how Odoo 19 records the figures. It is not tax advice. Confirm how your sales should be reported with your accountant or the Oman Tax Authority.

How Odoo 19 books POS sales

Most POS orders are never invoiced. A walk-in customer pays, gets a receipt and leaves. Odoo does not create an invoice for each of these orders. Instead, when you close the register, Odoo posts one closing journal entry for the whole session in the journal set as the Point of Sale journal.

That closing entry holds the sales and the output VAT for every order in the session that was not invoiced, summarised by account and tax. The tax lines carry the same tax grids as an invoice would, so these sales do feed the VAT return in Odoo. They just never appear in a list of customer invoices, and the summarised sales lines have no customer on them.

Orders that were invoiced are different. Their VAT sits on the invoice itself, in the invoice journal, and the session entry only clears what the customer owes.

So a POS business has two sources of sales VAT:

  • customer invoices and credit notes (including POS orders that were invoiced);
  • POS session closing entries (all POS orders that were not invoiced).

A sales list built from invoices alone covers only the first. The VAT return covers both. That is the gap.

Why the closing date decides the VAT period

The date of the session closing entry is the day you close the session, not the date of each order. Odoo 19's own documentation says closing the register posts the accounting entries, and it strongly advises closing the register at the end of each day.

If a register is left open over the last night of a quarter and closed the next morning, the whole session is posted on the first day of the new quarter. All those sales and their VAT land in the next VAT return, even though the customers paid in the old quarter. That is how the return in our example "picked up" sales from the previous quarter.

Whether those sales legally belong to the old or the new period is a question for your accountant. In practice, the safest thing is not to let it happen: close every register before midnight on the last day of the period.

Invoicing a POS order after the session is closed

A customer comes back a week later and asks for a tax invoice for a receipt. You can still create it: open the order in Point of Sale ‣ Orders ‣ Orders and click Invoice. Here is what Odoo 19 does when the session is already closed:

  • the invoice is dated the day you create it, not the order date;
  • Odoo also posts a reversal entry, on the same day, that takes that order's sales and VAT back out of the POS side.

The net VAT effect in the new period is zero, and the original period keeps the sale through the closing entry. But if your sales list for the new period is built from invoices only, that late invoice now appears there without the reversal next to it, and the list is overstated. If the two periods are compared, the same sale can look like it was counted twice.

How to build a sales list that matches the return

For each VAT period, build the supporting list from these three parts:

  1. Posted customer invoices and credit notes dated in the period (from the sales journal and the POS invoice journal).
  2. POS session closing entries dated in the period. You find each one on the session: Point of Sale ‣ Orders ‣ Sessions, open the session, and use the Journal Items button or the journal entry field.
  3. Reversal entries from POS orders invoiced after their session closed, dated in the period. They are in the POS journal and their reference starts with "Reversal of POS closing entry" (in English; the wording follows the user's language).

A quick cross-check: in Accounting ‣ Accounting ‣ Journal Items, filter on the period and your output VAT account, then group by Journal. You see invoice VAT and POS VAT side by side, and the total should agree with the output VAT in the tax report. In Odoo Enterprise you can also click an amount in the tax report to open the journal items behind it.

If something still does not match, check for draft documents first. Only posted entries count, so an invoice left in draft is in neither the list nor the return.

A short quarter-end checklist for POS businesses

  1. On the last day of the period, close every POS register before midnight. Make sure every order in the session is paid or cancelled, because Odoo will not close a session with draft orders in it.
  2. Next morning, check Point of Sale ‣ Orders ‣ Sessions and make sure no session from the old period is still open.
  3. For each closed session, check that a closing journal entry exists and is dated in the right period.
  4. Build the supporting sales list from the three parts above and compare it with the tax report.
  5. Only then set the tax return lock date. See our note on what an Odoo 19 lock date really does before you rely on it.

If a session did cross the period end, do not edit the posted closing entry on your own. Talk to your accountant about whether an adjustment is needed and how to record it.

Before you go live with POS

  • Decide with your accountant which journal POS sales post to, and check that the POS taxes (5% VAT and any zero-rated or exempt items) have the right tax grids. Our VAT setup checklist for Oman covers this.
  • Train every cashier and shift supervisor to close the register at the end of the day, not just log out.
  • Show the finance team where POS sales live in the books, so nobody builds the VAT file from invoices alone.
  • Add the POS check to your month-end close and to your VAT return routine.

Need a second look?

If your VAT sales list and your return in Odoo don't agree, or you are about to start POS in a shop or branch, I can help you check how your sessions, journals and taxes are set up. See how I work on Odoo implementation in Oman, or book a free 30-minute review.

Related guides

Book a Free 30-Minute Odoo Review

Bring last quarter's VAT return and your sales list, and we will find where the difference comes from in Odoo.

Book your free review

Odoo 19 UAT Passed as Admin, Failed for the Real User
Demos pass with full rights. Log in as the actual role and folders, templates, shifts and menus disappear. Here is how to test access before go-live.
WhatsApp Me