Mexico — CFDI 4.0 and the PAC model
Mexico was one of the first countries to enforce a generalised fiscal clearance: since 2014, every tax document (invoice, credit note, payroll, transfer) must transit through a SAT-accredited PAC to obtain a stamped UUID.
Regulatory timeline
- 5 January 2004 — First CFD decree. Introduction of the Comprobante Fiscal Digital (CFD), generated and signed locally by the taxpayer.
- 1 January 2011 — Birth of CFDI. The Reforma Fiscal 2010 introduces the Comprobante Fiscal Digital por Internet, requiring the passage through a PAC for stamping.
- 1 April 2014 — Universal CFDI mandate. All taxpayers, without exception, must issue exclusively in CFDI; end of the local CFD and the Comprobante Fiscal Impreso (CFI).
- 1 July 2017 — CFDI 3.3. New schema with mandatory SAT catalogues (ClaveProdServ, ClaveUnidad, MetodoPago, UsoCFDI).
- 1 January 2022 — Carta Porte 2.0 mandatory. The Carta Porte complemento becomes mandatory for any goods transport on federal roads (CFF art. 84 and Anexo 20 sec. III.D).
- 1 April 2022 — CFDI 4.0. Official switch to schema version 4.0, with mandatory name and postal code on the recipient, recipient tax regime, ObjetoImp per concept, Exportacion at the root.
- 1 April 2023 — End of 3.3 / 4.0 coexistence. After several deferrals, CFDI 3.3 is no longer accepted.
- 2024-2026 — Carta Porte 3.0 strengthening. Progressive evolution of the Carta Porte complemento, version 3.0 mandatory since 17 July 2024 per SAT.
Technical schema
CFDI 4.0 is an XML document compliant with Anexo 20 of the Resolución Miscelánea Fiscal. Base structure:
- cfdi:Comprobante: root with Version, Serie, Folio, Fecha, SubTotal, Total, Moneda, TipoDeComprobante (I=Income, E=Expense, T=Transfer, N=Payroll, P=Payment).
- cfdi:Emisor and cfdi:Receptor: RFC, name, tax regime, UsoCFDI mandatory in 4.0.
- cfdi:Conceptos: invoice lines with ClaveProdServ (SAT catalogue), ClaveUnidad (UN/ECE Rec 20), ObjetoImp (01-04).
- cfdi:Impuestos: taxes per concept and totals.
- Complementos: sectoral extensions — Carta Porte (transport), Nómina (payroll), Pagos 2.0 (payments), Comercio Exterior (export), etc.
- TimbreFiscalDigital (TFD): added by the PAC with UUID, SelloSAT, NoCertificadoSAT.
Minimal CFDI 4.0 Income example:
<?xml version="1.0" encoding="UTF-8"?>
<cfdi:Comprobante xmlns:cfdi="http://www.sat.gob.mx/cfd/4"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.sat.gob.mx/cfd/4 http://www.sat.gob.mx/sitio_internet/cfd/4/cfdv40.xsd"
Version="4.0"
Serie="A"
Folio="0042"
Fecha="2026-05-16T10:23:00"
FormaPago="03"
NoCertificado="30001000000500003456"
SubTotal="1000.00"
Moneda="MXN"
Total="1160.00"
TipoDeComprobante="I"
Exportacion="01"
MetodoPago="PUE"
LugarExpedicion="06600">
<cfdi:Emisor Rfc="AAA010101AAA" Nombre="EDIVERSE DEMO SA DE CV" RegimenFiscal="601"/>
<cfdi:Receptor Rfc="XAXX010101000"
Nombre="PUBLICO EN GENERAL"
DomicilioFiscalReceptor="06600"
RegimenFiscalReceptor="616"
UsoCFDI="S01"/>
<cfdi:Conceptos>
<cfdi:Concepto ClaveProdServ="50211503"
NoIdentificacion="SKU-001"
Cantidad="1"
ClaveUnidad="H87"
Unidad="Pieza"
Descripcion="Servicio de software"
ValorUnitario="1000.00"
Importe="1000.00"
ObjetoImp="02">
<cfdi:Impuestos>
<cfdi:Traslados>
<cfdi:Traslado Base="1000.00"
Impuesto="002"
TipoFactor="Tasa"
TasaOCuota="0.160000"
Importe="160.00"/>
</cfdi:Traslados>
</cfdi:Impuestos>
</cfdi:Concepto>
</cfdi:Conceptos>
<cfdi:Impuestos TotalImpuestosTrasladados="160.00">
<cfdi:Traslados>
<cfdi:Traslado Base="1000.00"
Impuesto="002"
TipoFactor="Tasa"
TasaOCuota="0.160000"
Importe="160.00"/>
</cfdi:Traslados>
</cfdi:Impuestos>
</cfdi:Comprobante>Submission flow
The taxpayer signs the CFDI with their Certificado de Sello Digital (CSD) obtained from SAT, then transmits to the PAC. The PAC validates the syntax (XSD + Anexo 20 Schematron), the catalogue consistency, the certificate chain, then applies the stamp with its own SAT certificate.
┌──────────────┐ ┌──────────────────┐ ┌──────────────┐
│ MX issuer │───>│ PAC (Proveedor │───>│ SAT │
│ (ERP) │XML │ Autorizado de │TFD │ (validation) │
│ │CSD │ Certificación) │ │ │
└──────────────┘ └─────────┬────────┘ └──────────────┘
│
▼
┌──────────────────────────┐
│ Stamped CFDI (UUID + │ ← TFD complemento
│ SAT seal) within 72h │ XAdES
└──────────────────────────┘Stamping must happen within 72 hours of issuance (Anexo 20). The recipient retrieves the stamped CFDI either directly from the supplier or via the SAT portal (consulta de CFDI) with its RFC and UUID.
Validation
- SAT — Anexo 20 and catálogos: sat.gob.mx/.../anexo-20.
- Consulta de CFDI with UUID: verificacfdi.facturaelectronica.sat.gob.mx.
- List of accredited PACs: sat.gob.mx/consultas/.../pac.
- CFDI 4.0 XSD schemas: sat.gob.mx/sitio_internet/cfd/4.
Common pitfalls
- SAT catalogues frequently out of sync. ClaveProdServ, ClaveUnidad, ClaveTipoNomina, etc. evolve almost monthly. Keeping a frozen local copy leads to stamping rejections with code CFDI40118 (catalog value not found). Daily sync from the SAT portal is required.
-
Generic RFC XAXX010101000 vs EKU9003173C9.
XAXX010101000= Mexican general public,XEXX010101000= foreigner without RFC,EKU9003173C9= used in B2B for a recipient without formal commercial relationship. Confusion distorts VAT deductibility on the recipient side. - Consistency Régimen Fiscal Receptor + UsoCFDI. SAT published a compatibility matrix: a recipient under regime 601 (Personas Morales) cannot use UsoCFDI=S01 (Sin efectos fiscales). Incompatibility triggers a CFDI40177 stamping rejection.
- Carta Porte complemento mandatory for transport. Any goods movement on federal roads must include the Carta Porte 3.0 complemento with GPS coordinates of origin and destination, vehicle type, driver, distance. Absence results in physical vehicle stop at a SAT checkpoint.
- CFDI cancellation — two-step mechanism. Since CFDI 4.0, cancellation requires explicit recipient acceptance within 72h via the SAT portal (except special cases: error, no commercial relationship, total ≤ MXN 1,000). Many integrations forget this validation and leave CFDIs in "Cancelado con aceptación" status for weeks.
Cross-links
- UBL 2.1 — comparison with the international XML standard (Mexico does not use UBL).
- EN 16931 — for the European semantic comparison.
- Article — E-invoicing country deep dive 2026.
- Official sources: sat.gob.mx, gob.mx/shcp.