Este artículo actualmente está disponible solo en inglés. La traducción estará disponible próximamente.
Odoo Mexico Localization 2026: CFDI 4.0, SAT & Sello Digital Setup
Mexico runs the most mature electronic invoicing ecosystem in Latin America. The Servicio de Administración Tributaria (SAT) has required CFDI (Comprobante Fiscal Digital por Internet) since 2014, with version 4.0 mandatory since April 2023. Every invoice, payroll receipt, and payment in Mexico must be issued as a CFDI signed by an authorized PAC (Proveedor Autorizado de Certificación), embedded with SAT's UUID timbre fiscal. Odoo's l10n_mx_edi module is one of the most battle-tested e-invoicing localizations in the platform, reflecting Mexico's role as Odoo's largest Latin American market.
Key Takeaways
- SAT administers IVA (16%), ISR (corporate 30%, progressive personal), and IEPS (excise)
- CFDI 4.0 mandatory since April 2023; covers invoices, payroll, payments, transport (Carta Porte)
- Odoo
l10n_mx_ediprovides native PAC integration, Sello Digital, complementos- Carta Porte complemento required for all goods transport since January 2024 (full enforcement)
- Withholding (retencion) on services and rentals; ISR 10% and IVA two-thirds standard
- Statutory reports include monthly DIOT, IVA return, ISR provisional, and annual declaration
- RFC (12 or 13 chars) and FIEL (digital signature) prerequisite for any operation
Mexico Tax Framework Overview
The SAT enforces:
- IVA (Value Added Tax): 16% standard rate; 8% in northern border zone (BIVA); 0% on exports, basic foods, medicines; exempt for medical services, education
- ISR (Income Tax): Corporate 30% flat; personal progressive up to 35% with brackets; resident vs non-resident distinction
- IEPS (Excise Tax): On tobacco, alcohol, gasoline, sugary beverages, junk food (variable rates)
- Withholding: ISR 10% on professional services to individuals; IVA two-thirds (10.67%) withheld by buyer in certain B2B scenarios
CFDI is the foundation of Mexican tax compliance. Every taxable economic event generates a CFDI:
- Ingreso: Sales invoices
- Egreso: Credit notes
- Traslado: Transfer documents (warehouse moves)
- Pago: Payment receipts (REP)
- Nomina: Payroll receipts
CFDIs include "complementos" for specific scenarios — Carta Porte (transport), Comercio Exterior (foreign trade), Receptor Persona Fisica (individual receivers), and dozens of industry-specific complements.
Required Odoo Localization Modules
| Module | Purpose | Edition |
|---|---|---|
l10n_mx | Mexico chart of accounts (CFC SAT compliant) | Community |
l10n_mx_edi | CFDI 4.0 generation and PAC integration | Community |
l10n_mx_edi_pos | POS-specific CFDI handling | Community |
l10n_mx_edi_extended | Foreign Trade complemento | Enterprise |
l10n_mx_edi_carta_porte | Carta Porte 3.1 complemento | Enterprise / Community |
l10n_mx_edi_landing | Landed cost integration with imports | Enterprise |
l10n_mx_hr_payroll | Mexico payroll and CFDI Nomina | Enterprise |
l10n_mx_reports | DIOT, IVA returns, COA SAT | Enterprise |
Mexico is one of the few countries where Odoo Community supports robust e-invoicing out of the box. The PAC integration (Solucion Factible, EDICOM, FacturaXML, NubeFact, etc.) is configurable per company.
Chart of Accounts Setup
Mexico's chart must align with SAT's "Codigo Agrupador de Cuentas" (CAC), a four-level hierarchical code system mandated by Anexo 24 of the Resolucion Miscelanea Fiscal. The l10n_mx chart includes:
- 100s: Activos (assets)
- 200s: Pasivos (liabilities) — including IVA por trasladar (output VAT in transit), IVA acreditable (input VAT)
- 300s: Capital (equity)
- 400s: Ingresos (revenue)
- 500s: Costo de ventas
- 600s-700s: Gastos operativos
- 800s: Cuentas de orden
Configure the company record with:
- RFC (Registro Federal de Contribuyentes) — 12 chars (entity) or 13 chars (individual)
- Regimen fiscal (tax regime code per SAT catalog c_RegimenFiscal)
- CSD (Certificado de Sello Digital) and FIEL — uploaded as .cer/.key files
- Domicilio fiscal with codigo postal validated against SAT's c_CodigoPostal catalog
CFDI 4.0 Configuration
CFDI 4.0 introduced significant changes from 3.3:
- Receiver name and tax regime are now mandatory (validated against SAT)
- "Exportacion" attribute on invoices for foreign trade indicators
- Specific CFDI use codes from c_UsoCFDI catalog
- Forma de pago and metodo de pago mapping (PUE = single payment vs PPD = installments)
- Period and CFDI relation for billed in installments
Odoo's l10n_mx_edi handles these via:
<record id="account_journal_invoice" model="account.journal">
<field name="name">Customer Invoices</field>
<field name="type">sale</field>
<field name="l10n_mx_edi_serie">A</field>
<field name="l10n_mx_edi_pac">solfact</field>
<field name="l10n_mx_edi_pac_test_env" eval="False"/>
</record>
Each invoice in Odoo:
- Validates receiver RFC and Regimen Fiscal against SAT catalogs
- Generates the CFDI XML per SAT schema XSD
- Submits to the configured PAC for stamping (timbrado)
- PAC returns the timbre fiscal (UUID, fecha timbrado, sello SAT)
- Odoo attaches the signed XML and PDF to the invoice record
IVA and Withholding Configuration
Configure IVA tax records:
| Tax Name | Rate | Type | SAT Code |
|---|---|---|---|
| IVA 16% Trasladado | 16% | Sales | 002 (IVA) |
| IVA 8% BIVA Trasladado | 8% | Sales | 002 (IVA) |
| IVA 0% Sales | 0% | Sales | 002 |
| IVA Exento | 0% | Sales | Exento |
| IVA 16% Acreditable | 16% | Purchase | 002 |
| IVA Retenido (10.67%) | 10.67% | Purchase | 002 (Retencion) |
| ISR Retenido (10%) | 10% | Purchase | 001 (Retencion) |
In B2B services from individuals (e.g., professional services), the buyer typically withholds two-thirds of IVA (10.67%) and 10% ISR. These appear on the CFDI as "Retenciones" and reduce the payable.
Carta Porte Complemento
Since 1 January 2022 (with full enforcement from January 2024), Mexico requires the Carta Porte complemento on every CFDI for the transport of goods. Carta Porte 3.1 (current version) includes:
- Transport mode (autotransporte, ferroviario, maritimo, aereo)
- Origin and destination addresses with kilometric distance
- Vehicle and trailer details (placa, configuration, SCT permit)
- Driver information (RFC, license)
- Goods details with SAT's product/service codes
- Weight (kg) and quantity per item
- Hazardous materials (if applicable) per SCT classification
Odoo's l10n_mx_edi_carta_porte module handles the complemento generation. Both shippers and carriers can issue Carta Porte; configure the issuance role per company.
Payroll Considerations
Mexico payroll requires CFDI Nomina — every payslip is a CFDI:
| Item | Employee | Employer | Notes |
|---|---|---|---|
| ISR (Income Tax) | Per progressive scale | N/A | Subsidio para empleo for low-income |
| IMSS (Social Security) | ~2% | ~21% | Variable based on risk class |
| INFONAVIT (Housing) | N/A | 5% | On Salario Base de Cotizacion |
| AFORE (Retirement) | 1.125% | 5.15% + state subsidy | Pension fund |
ISR brackets (2026, monthly):
- 0-746.04 MXN: 1.92%
- 746.05-6,332.05: 6.40%
- 6,332.06-11,128.01: 10.88%
- 11,128.02-12,935.82: 16.00%
- 12,935.83-15,487.71: 17.92%
- 15,487.72-31,236.49: 21.36%
- Higher brackets: 23.52% to 35%
CFDI Nomina includes detailed concepts (sueldo, premios, deducciones, otros pagos) per SAT's c_TipoPercepcion and c_TipoDeduccion catalogs.
Reporting Requirements
A Mexico Odoo deployment must produce:
- Pago Provisional ISR: Monthly ISR provisional payment
- Declaracion Mensual IVA: Monthly IVA return
- DIOT (Declaracion Informativa de Operaciones con Terceros): Monthly third-party operations report
- Declaracion Anual ISR: Annual income tax return
- Contabilidad Electronica (COA SAT): Monthly chart of accounts, trial balance, polizas (journal entries) submitted in XML
- DIM (Declaracion Informativa Multiple): Annual informative declarations
The Contabilidad Electronica is uniquely Mexican — every month's accounting is uploaded to SAT in a prescribed XML format, enabling continuous audit.
Implementation Checklist
- Obtain RFC, regimen fiscal classification, and CSD/FIEL certificates
- Sign contract with a PAC (Solucion Factible, EDICOM, FacturaXML, NubeFact, etc.)
- Install
l10n_mx_edi; configure CSD, PAC credentials, sandbox mode - Verify CAC chart of accounts; map to company-specific sub-accounts
- Configure IVA 16% (or 8% for BIVA) and exempt categories
- Configure withholding taxes (IVA 10.67%, ISR 10%) for service providers
- Test CFDI 4.0 stamping with sample invoices
- Configure Carta Porte if shipping goods (mandatory for all road transport)
- Set up CFDI Nomina for payroll with current year ISR brackets and IMSS rates
- Build COA SAT export for monthly Contabilidad Electronica
Common Pitfalls
Receiver RFC validation skipped: CFDI 4.0 validates receiver name + RFC + regimen fiscal against SAT registry. Old data with mismatches causes mass cancellation issues.
Wrong CFDI use code: c_UsoCFDI specifies what the buyer will use the invoice for (G01 = goods acquisition, G03 = general expenses, P01 = pending definition, etc.). Wrong codes cause buyer-side reconciliation issues.
PUE vs PPD payment method confusion: PUE means paid in one transaction (cash, debit, credit card immediately); PPD means deferred or installments requiring separate payment CFDIs (REP). Misclassifying PPD as PUE skips the REP issuance requirement.
Carta Porte missing on internal moves: Even warehouse-to-warehouse transfers between own facilities require Carta Porte if on public roads. Treating them as exempt internal moves is incorrect.
Mass cancellation without buyer acceptance: CFDI cancellation in version 4.0 requires buyer approval (within 72 hours) for invoices already accepted. Bulk cancellations without process trigger SAT inquiries.
ECOSIRE provides Odoo localization for Mexico, including PAC integration, Carta Porte, CFDI Nomina, and Contabilidad Electronica. Contact us for implementation or learn about our accounting services.
Frequently Asked Questions
Does Odoo Community fully support Mexican CFDI 4.0?
Yes, l10n_mx_edi is in Community and supports CFDI 4.0 stamping through configured PACs. Odoo Enterprise adds the Foreign Trade complemento, advanced reports, and Carta Porte (though Carta Porte is also available via community modules). Most Mexican deployments use Community plus a PAC subscription, with Enterprise added when DIOT and accounting reports become priorities.
How do we handle the new "Receptor" validations in CFDI 4.0?
CFDI 4.0 requires the receiver's name, RFC, regimen fiscal, and codigo postal to match SAT's registry exactly. If the buyer has multiple branches with different regimens, you need separate buyer records in Odoo per branch. Mismatches cause stamping failures. Use the Constancia de Situacion Fiscal (CSF) PDF to verify the buyer's exact details.
What's the difference between PUE, PPD, and REP?
PUE (Pago en Una Exhibicion) is a single-payment invoice — no separate payment CFDI needed. PPD (Pago en Parcialidades o Diferido) is for invoices paid later or in installments — each payment requires a REP (Recibo Electronico de Pagos) referencing the original invoice. Odoo creates REPs automatically when payments are registered against PPD invoices.
Is Carta Porte mandatory for all transport?
Yes for road transport of goods, with limited exceptions (private vehicles for personal use, deliveries within 30km same locality without crossing federal highways). Most enterprise scenarios fall in scope. Carta Porte 3.1 is the current version. ECOSIRE has Carta Porte working in production for clients across logistics, manufacturing, and distribution.
How does Contabilidad Electronica work?
Each month, the company exports three XML files to SAT: catalogo de cuentas (chart of accounts at level 2), balanza de comprobacion (trial balance), and polizas (journal entries — only on SAT request or for specific events like refund requests). The XML schemas are defined in Anexo 24. Odoo's l10n_mx_reports generates these exports with proper SAT codes.
Escrito por
ECOSIRE TeamTechnical Writing
The ECOSIRE technical writing team covers Odoo ERP, Shopify eCommerce, AI agents, Power BI analytics, GoHighLevel automation, and enterprise software best practices. Our guides help businesses make informed technology decisions.
ECOSIRE
Transforme su negocio con Odoo ERP
Implementación, personalización y soporte experto de Odoo para optimizar sus operaciones.
Artículos relacionados
Cómo agregar un botón personalizado a una vista de formulario de Odoo (2026)
Agregue botones de acción personalizados a las vistas de formulario de Odoo 19: método de acción de Python, herencia de vistas, visibilidad condicional, cuadros de diálogo de confirmación. Probado en producción.
Cómo agregar un campo personalizado en Odoo sin Studio (2026)
Agregue campos personalizados a través de un módulo personalizado en Odoo 19: herencia de modelo, extensión de vista, campos calculados, decisiones de tienda/no tienda. Código primero, controlado por versiones.
Cómo agregar un informe personalizado en Odoo usando un diseño externo
Cree un informe PDF con su marca en Odoo 19 usando web.external_layout: plantilla QWeb, formato de papel, enlace de acción. Con logotipo impreso + anulaciones de pie de página.