AutoAzur Global Invoice Reconciler
One global CFDI, hundreds of orders, one run
Reads AutoAzur's global CFDI, creates the invoice in Odoo and links every line item to its sales order. Closes the billing cycle on hundreds of marketplace orders without keying a single line.
How you get it
Every development works in all three Odoo environments. The only thing that changes is how we deliver it.
Odoo Online (SaaS)
You do not need the ability to install modules. A Millora consultant comes in with temporary access that you authorize and implements it with Odoo Studio. When they are done, you revoke the access.
Odoo.sh or your own server
You receive the module and the installation guide by email as soon as payment clears. Install it yourself, or we install it with you.
Installation · shell
# 1 · copia el módulo a tu addons_path
cp -r millora_conciliador_factura_global_autoazur /mnt/extra-addons/
# 2 · reinicia y actualiza la lista de apps
odoo-bin -u all -d tu_base --stop-after-init
# 3 · instala desde Apps
# busca "AutoAzur Global Invoice Reconciler"What it solves
The problem
A marketplace does not invoice you order by order. It sends a single global CFDI at the close of the period, with hundreds of line items inside. On the Odoo side you have hundreds of sales orders waiting to be invoiced.
Matching them is pure data entry: open the XML, read item by item, find which order each one belongs to, key the line, repeat. At three hundred items that is a day's work. And a slip of the finger does not stay a slip of the finger: it becomes an order invoiced twice, or one never invoiced that nobody catches until closing.
How it works
You upload the XML and hit run.
The module reads the document — series, folio, date, currency, payment form and method, and the tax stamp's UUID — pulls out every line item, and looks up the sales order for each one by the reference that opens its description.
When it finds one it does more than note it down: it links the invoice line to the order line, which is what makes Odoo consider that order invoiced. If the order has a single line the link is direct; if it has several, it matches on SKU, and when the SKU does not line up, on unit price and quantity.
Shipping items are set aside and consolidated into one line, so freight does not muddy the reconciliation.
Before creating anything it checks that the UUID does not already exist in the database. The same XML does not go in twice.
When it finishes you have the invoice created, posted and with the XML attached — plus a dashboard telling you how many lines reconciled, how many did not, the coverage percentage, and the gap between the CFDI total and the Odoo invoice total. Unmatched lines are listed separately, with their amounts, for review.
What it doesn't do
Worth saying up front. Lines that find no sales order still get invoiced: they go into the invoice, just unlinked. The dashboard flags them for someone to review; it does not leave them out.
The invoice is issued to the general public taxpayer, which is how a global invoice works, and applies 16% VAT to every line — other rates are not covered. Running it again on an already processed record only regenerates the dashboard: it does not redo or correct the invoice.
And reconciliation lives or dies by the description: the order reference has to open each CFDI line item, and match what the order carries in Odoo.
What changes
A billing close that took a day takes one run. But what really changes is that it stops being a black box: instead of assuming everything matched, you get a number — how many out of how many — and the exact list of what is still pending.
What's included
- Reads the global CFDI and pulls series, folio, date, currency, payment forms and UUID
- Looks up each line item's sales order by the reference in its description
- Links the invoice line to the order line, which is what marks it invoiced
- Matches on SKU and, when that fails, on unit price and quantity
- Rejects the XML if its UUID already exists: nothing gets invoiced twice
- Consolidates shipping items into a single line
- Creates the invoice, posts it and attaches the original XML
- Dashboard with reconciled lines, pending ones, coverage and gap against the CFDI
Requirements
- Sales and Accounting modules with the Mexican localisation installed
- A general public taxpayer contact (RFC XAXX010101000) and a 16% sales VAT configured
- The order reference opening the description of every CFDI line item
- That same reference captured on the Odoo sales order
You might also need
Company Color Bar
Know which company you're in at a glance
Administration
Instant Out — Stockout Report
What ran out, at which location, and at exactly what time
Inventory & warehouse
Warehouse Occupancy Report
How many slots are free, not how many units
Inventory & warehouse

