Imagina que tienes un sistema de logística funcionando perfecto. Facturas, pagos, rutas. Todo tranquilo. Entonces el SAT decide que cada vez que se mueva mercancía en territorio nacional, el transportista debe adjuntar un complemento especial al CFDI: el Complemento Carta Porte. Y de repente tu XML que antes timbraba sin problemas empieza a regresar errores que ni Google sabe explicar bien.
Si estás en ese punto, este artículo es para ti.
Primero lo primero: ¿qué es el Complemento Carta Porte?
El Complemento Carta Porte es una extensión del CFDI 4.0 que documenta el traslado de mercancías. No reemplaza a la factura: se adjunta a ella como un complemento que detalla exactamente qué se transporta, desde dónde, hacia dónde, en qué vehículo y con qué operador.
El SAT lo introdujo para tener trazabilidad fiscal del movimiento de bienes en México. Si un camión carga mercancía sin este complemento, tanto el transportista como el dueño de la carga se exponen a multas y retención de la mercancía en carretera.
¿Quién lo necesita?
- Empresas de transporte de carga federal
- Negocios que mueven su propia mercancía en vehículos propios (distribución, retail, manufactura)
- Cualquier operación donde haya traslado físico de bienes entre ubicaciones distintas
Si tu sistema genera CFDIs para alguno de estos casos, necesitas integrar el Complemento Carta Porte.
¿Cómo funciona en la práctica?
Antes de tocar una sola línea de código, vale la pena entender el flujo de negocio:
- Un transportista va a mover mercancía del punto A al punto B
- Antes de salir, se genera un CFDI de tipo Traslado (o Ingreso si hay cobro por el flete) con el Complemento Carta Porte adjunto
- El CFDI se timbra con el PAC y se obtiene el folio fiscal
- El operador lleva ese CFDI (en XML o en PDF con código QR) como su "carta de porte" digital
- Si lo detienen en carretera, el inspector de la SCT puede verificar el folio en el portal del SAT
El complemento no es solo burocracia: es el documento que le dice a cualquier autoridad en el camino qué hay en ese camión, de quién es, y que todo está en regla fiscalmente.
La versión vigente: Carta Porte 3.1
A partir de 2024, la versión oficial es la 3.1. Si tu integración todavía usa el namespace de la versión 3.0 (http://www.sat.gob.mx/CartaPorte30), el PAC la rechazará con el error CO1001.
El primer lugar donde esto se nota es en el namespace del XML. El nodo raíz de tu CFDI debe declarar el complemento así:
<cfdi:Comprobante
xmlns:cfdi="http://www.sat.gob.mx/cfd/4"
xmlns:cartaporte31="http://www.sat.gob.mx/CartaPorte31"
xsi:schemaLocation="
http://www.sat.gob.mx/cfd/4 cfdv40.xsd
http://www.sat.gob.mx/CartaPorte31 CartaPorte31.xsd">Hay un detalle que atrapa a casi todos en la primera integración: ese xmlns:cartaporte31 debe ir en el nodo raíz <cfdi:Comprobante>, no en el nodo <cfdi:Complemento>. Si lo pones en el lugar equivocado, recibes el error CO1002 y el mensaje no deja muy claro dónde está el problema.
La anatomía del complemento
El Complemento Carta Porte tiene una estructura jerárquica. No es un nodo plano de atributos: es un árbol que describe el viaje completo.
CartaPorte (Version="3.1")
├── Ubicaciones
│ └── Ubicacion × 2 o más ← origen, destino, y escales intermedias
├── Mercancias
│ └── Mercancia × 1 o más ← qué se transporta
├── Autotransporte ← si el medio es carretera
│ ├── IdentificacionVehicular
│ ├── Seguros
│ └── Remolques
└── FiguraTransporte
└── TiposFigura ← operador, propietario, arrendadorPara transporte marítimo, aéreo o ferroviario, el nodo Autotransporte se reemplaza por TransporteMaritimo, TransporteAereo o TransporteFerroviario según corresponda.
Los atributos que más duelen si se equivocan
El nodo raíz CartaPorte tiene atributos obligatorios que no son obvios:
| Atributo | Ejemplo | Por qué importa |
|---|---|---|
Version | "3.1" | Nunca "3.0". Siempre "3.1" |
TranspInternac | "No" | Si es "Sí", activas validaciones adicionales de comercio exterior |
PesoBrutoTotal | "1500.000" | Suma del peso de toda la mercancía declarada |
UnidadPeso | "KGM" | Del catálogo c_ClaveUnidadPeso. KGM = kilogramos |
NumTotalMercancias | "3" | Debe coincidir exactamente con los nodos Mercancia que declares |
Ubicaciones: origen y destino
Se necesitan mínimo dos nodos Ubicacion: uno de origen (TipoUbicacion="Origen") y uno de destino (TipoUbicacion="Destino"). Cada uno lleva el RFC de quien remite o recibe, y el domicilio fiscal.
<cartaporte31:Ubicacion
TipoUbicacion="Origen"
IDUbicacion="OR000001"
RFCRemitenteDestinatario="ABC010101XYZ"
NombreRemitenteDestinatario="Empresa Origen SA de CV"
FechaHoraSalidaLlegada="2025-08-07T08:00:00"
DistanciaRecorrida="320">
<cartaporte31:Domicilio
Calle="Av. Industrial"
NumeroExterior="100"
Municipio="Monterrey"
Estado="NLE"
Pais="MEX"
CodigoPostal="64000"/>
</cartaporte31:Ubicacion>Lo nuevo en la versión 3.1: regímenes aduaneros
La diferencia estructural más importante entre 3.0 y 3.1 es el nuevo nodo RegimenesAduaneros. Permite declarar hasta 10 regímenes aduaneros por Carta Porte, algo que antes era imposible.
Esto es relevante para operaciones de importación temporal, maquila o tránsito internacional. Los valores del catálogo c_RegimenAduanero más usados son:
| Clave | Descripción |
|---|---|
IMD | Importación definitiva |
EXD | Exportación definitiva |
ITR | Importación temporal para retorno en mismo estado |
ITE | Importación temporal para elaboración o transformación |
TRA | Tránsito |
Si tu operación no involucra comercio exterior, este nodo es opcional y puedes ignorarlo.
Un problema que nadie menciona: los catálogos que cambian
Los catálogos del SAT no son estáticos. El SAT los actualiza periódicamente y si tu sistema usa una copia desactualizada, el PAC rechaza el CFDI aunque el XML esté perfectamente formado.
El campo más afectado es c_NumAutorizacionNaviero (para transporte marítimo). Solo en los últimos meses:
- Noviembre 2025: Se agregaron 26 nuevos códigos de autorización con sufijo
/2025 - Enero 2026: 14 códigos adicionales
Si tienes catálogos hardcodeados, un envío marítimo puede fallar de la nada porque el código de naviero que usabas ya no aparece en la versión más reciente. La solución es refrescar los catálogos al menos una vez al mes desde el repositorio oficial.
Los errores más comunes y cómo resolverlos
Después de revisar integraciones fallidas, estos son los cinco problemas que aparecen una y otra vez:
| Error | Qué significa en la práctica | Cómo resolverlo |
|---|---|---|
301 | El XML no pasa la validación del XSD | Valida localmente contra el esquema antes de enviar al PAC |
CO1001 | Namespace del complemento no reconocido | Asegúrate de usar cartaporte31, no cartaporte30 |
CO1002 | Namespace declarado en el lugar equivocado | Mover xmlns:cartaporte31 al nodo raíz <cfdi:Comprobante> |
CO1003 | URL del esquema faltante | Agregar la URL de CartaPorte31.xsd al xsi:schemaLocation del nodo raíz |
| Valor de catálogo inválido | Campo con un valor que ya no existe en el catálogo SAT | Actualizar copia local de catálogos |
Antes de enviar a timbrado: tu checklist
- ☐ El namespace
xmlns:cartaporte31está en<cfdi:Comprobante>, no en<cfdi:Complemento> - ☐
Version="3.1"en el nodo raíz del complemento - ☐
xsi:schemaLocationincluye la URL del esquemaCartaPorte31.xsd - ☐ Hay mínimo 2 nodos
Ubicacion(un origen y un destino) - ☐
NumTotalMercanciascoincide con la cantidad de nodosMercancia - ☐
FechaHoraSalidaLlegadaen formatoYYYY-MM-DDTHH:mm:ss - ☐ Catálogos actualizados