If you’ve ever tried to reconcile a month’s worth of Mexican electronic invoices against your accounting system, you know the drill: log into the SAT portal, download CFDIs one by one (or in frustratingly small batches), import the XML files into your ERP, manually match them to the right accounts, and hope the amounts line up. When they don’t — and they often don’t, thanks to rounding differences measured in centavos — you spend another hour tracking down the discrepancy.
Odoo 20 rewrites the entire Mexican CFDI workflow from the ground up. The changes span six major areas, and together they represent the most significant update to Odoo’s Mexican localization since the platform adopted CFDI 4.0.
Bulk CFDI Downloads From the SAT
The headline feature is mass CFDI downloading directly from the SAT portal. A new “CFDI Documents (MX)” menu in Odoo gives accounting teams a dedicated interface for pulling down electronic invoices in bulk — no more logging into the SAT website in a separate browser tab and clicking through individual downloads.
This sounds like a convenience feature, but for businesses that process hundreds or thousands of invoices monthly, it’s a workflow transformation. A distributor receiving invoices from fifty suppliers can now pull the entire month’s CFDIs into Odoo in a single operation. The documents land in the system ready for the next step: intelligent matching.
An XML Reader That Finally Gets the Centavos Right
Mexico’s CFDI system is XML-based, and one of the persistent headaches has been rounding. A supplier’s invoice might show $1,234.57, but the XML encodes it as $1,234.565 before rounding, and your system calculates $1,234.56 based on different rounding rules. One centavo off, and the automatic matching fails. Multiply that by hundreds of invoices and you have an accounts payable team spending days on what should be an automated process.
The new XML reader in Odoo 20 handles cent-level matching. It understands that a one-centavo difference on a line item is almost certainly a rounding artifact, not a pricing discrepancy. The system matches invoices correctly even when the XML-encoded amounts don’t land on the exact same centavo as Odoo’s internal calculations.
Beyond rounding, the reader now validates RFCs (Mexico’s tax identification numbers) during import. If a supplier’s RFC in the XML doesn’t match what’s on file, the system flags it before the invoice enters the accounting pipeline. And for accounts that haven’t been explicitly mapped, a predictive engine suggests the most likely account based on historical patterns. The first import of a new supplier’s invoice might require manual account assignment. The second one fills itself in.
PDF Invoices Generated From the XML Itself
Here’s a feature that solves a surprisingly common problem. Mexican businesses need to produce PDF versions of their electronic invoices — for customers who want a printable copy, for internal filing, for auditors who want something they can read without an XML parser. Previously, these PDFs were generated from the ERP’s own invoice data, which sometimes didn’t match the CFDI XML exactly.
Odoo 20 takes a different approach: the PDF is now generated directly from the XML data. What the SAT received is what gets printed. There’s no room for discrepancies between the digital invoice on file with the tax authority and the paper (or PDF) copy in your filing cabinet. For businesses that have been burned by auditors pointing out differences between their PDFs and their CFDIs, this is a quiet but important fix.
eCommerce Gets Its Own Invoicing Form
Mexican e-commerce has a unique invoicing requirement that doesn’t exist in most other markets. When a customer buys something online, they often need a CFDI — a proper electronic invoice with their RFC and fiscal address — not just a receipt. This is especially common in B2B e-commerce, but even individual consumers request CFDIs for tax deductions.
Odoo 20 adds a dedicated eCommerce invoicing form that lets online customers request a CFDI during or after their purchase. The form collects the RFC, fiscal regime, and CFDI usage code that Mexican tax law requires. The invoice is generated automatically, stamped, and delivered without anyone in the back office touching it.
For online retailers, this eliminates one of the most labor-intensive post-sale processes in Mexican e-commerce. Instead of customers emailing their billing details and an accounting clerk manually generating invoices, the entire flow is self-service.
Carta Porte: One Operator Per Delivery
The Carta Porte — Mexico’s electronic waybill for goods in transit — gets a targeted update. The system now tracks the operator per delivery rather than per shipment batch. This matters for logistics companies and distributors where different drivers handle different legs of a delivery route. Each delivery document now carries the correct operator information, which is what the tax authority expects to see during roadside inspections and audits.
Foreign Trade Gets a Proper Section
Finally, what was previously called “external trade” in the documentation — a somewhat confusing translation that didn’t align with how Mexican businesses actually refer to international commerce operations — has been renamed to “Foreign Trade” and given its own dedicated section. The controls around international transactions, customs documentation, and cross-border invoicing are now organized in a way that matches the terminology businesses and their accountants actually use.
A Rewrite, Not a Patch
What makes this update notable isn’t any single feature — it’s the scope. The Mexican localization received over a thousand line changes, with broken government links replaced, field names corrected to match the current SAT terminology, menu paths completed where they were previously truncated, and step sequences reordered so that dependent operations don’t come before their prerequisites.
For the thousands of Mexican businesses running on Odoo, this is the kind of update that reduces the daily friction of tax compliance from a constant irritation to something that largely handles itself.