Error CFDI40116 al timbrar: no se debe registrar TipoCambio cuando la Moneda es XXX
El error CFDI40116 aparece cuando el comprobante declara Moneda="XXX" y, aun así, incluye el atributo TipoCambio. La clave XXX significa que no hay una moneda de por medio, y sin moneda no hay nada que convertir. Esta guía explica en qué comprobantes se usa XXX, por qué los sistemas suelen agregar el tipo de cambio por costumbre y cómo dejar el encabezado limpio.
Resumen rápido del error
- Código: CFDI40116
- Campo: TipoCambio
- Nodo del XML:
cfdi:Comprobante - Regla del SAT (Anexo 20): Este atributo no se debe registrar cuando el atributo Moneda tenga el valor XXX.
- Mensaje de rechazo: El campo TipoCambio no se debe registrar cuando el campo Moneda tiene el valor XXX.
- Cuándo aparece: al timbrar, antes de que se genere el UUID.
¿Qué significa el error CFDI40116?
El TipoCambio sirve para convertir a pesos mexicanos los importes expresados en otra moneda. La clave XXX del catálogo c_Moneda se usa cuando la operación no involucra moneda alguna, por lo que la regla CFDI40116 prohíbe registrar el atributo: si aparece, el comprobante se rechaza.
Es la tercera de tres reglas complementarias: con MXN el tipo de cambio puede omitirse o valer 1 (CFDI40114), con una moneda extranjera es obligatorio (CFDI40115) y con XXX no debe existir (CFDI40116). Esta guía se ocupa solo del último caso.
Dónde se valida: el nodo Comprobante y TipoCambio
La validación se aplica al atributo TipoCambio del nodo cfdi:Comprobante y depende del valor de Moneda. Solo se evalúa cuando Moneda es XXX.
- CFDI40114: con
MXN,TipoCambiopuede omitirse o valer1. - CFDI40115: con una moneda distinta de
MXNyXXX,TipoCambioes requerido. - CFDI40116: con
XXX,TipoCambiono se registra (esta ficha). - CFDI40117: el valor de
TipoCambiodebe cumplir el patrón del atributo. - CFDI40113:
Monedadebe estar en el catálogoc_Moneda.
Causas más comunes del error CFDI40116
- El sistema agrega
TipoCambio="1"por defecto. Una plantilla general lo escribe en todos los comprobantes, incluidos los de pago y traslado. - Se cambió la moneda a XXX sin limpiar el resto. Primero se capturó USD con su tipo de cambio y luego se corrigió la moneda, pero el atributo quedó.
- El comprobante es de pago o de traslado. Son tipos de comprobante que suelen usar
XXXy a veces se llenan con los campos de una factura de ingreso. - Se copió el encabezado de otro comprobante. El XML de origen traía
TipoCambioy se reutilizó con otra moneda. - La integración envía siempre el campo. Un servicio externo manda
TipoCambiovacío o en cero, y el generador lo escribe tal cual. - Se editó el XML a mano. Se agregó el atributo creyendo que era necesario para cerrar el comprobante.
Cómo corregir el error CFDI40116 paso a paso
- Confirma el valor de Moneda. Si es
XXX, el tipo de cambio no debe aparecer. - Verifica el tipo de comprobante. Revisa si realmente corresponde
XXX; si es una factura en pesos, la moneda seríaMXN. - Elimina el atributo TipoCambio. Quítalo del nodo
cfdi:Comprobante; no basta con dejarlo vacío. - Revisa la plantilla de origen. Haz que el tipo de cambio solo se agregue con monedas extranjeras.
- Comprueba los importes. Un comprobante con
XXXsuele llevar importes en cero; confirma con tu contador. - Vuelve a timbrar. Sin el atributo, el PAC continúa con las siguientes validaciones.
Ejemplo en el XML: incorrecto y correcto
Ejemplo del encabezado de un comprobante sin moneda; los datos son ficticios y se muestran solo los atributos relevantes:
Incorrecto:
<cfdi:Comprobante Moneda="XXX" TipoCambio="1" SubTotal="0" Total="0" ... >
Correcto:
<cfdi:Comprobante Moneda="XXX" SubTotal="0" Total="0" ... >
Los importes de un comprobante sin moneda dependen del tipo de documento; el ejemplo es esquemático y los datos son ficticios.
Cuándo se usa XXX y cuándo no
Es común creer que XXX es una moneda de prueba o una opción para evitar el tipo de cambio. No lo es. La clave está pensada para comprobantes en los que no se intercambian importes monetarios, como ciertos documentos de traslado o de pago, y no se debe usar en una factura de ingreso solo para omitir la conversión. Si facturas en dólares, la moneda es USD y el tipo de cambio es obligatorio; si facturas en pesos, la moneda es MXN. Antes de timbrar, define en tu sistema cuál tipo de comprobante estás emitiendo, porque de él depende la moneda. Para repasar los tipos de comprobante, consulta la guía de facturación electrónica CFDI 4.0.
Cómo evitar este error con Soicont
Soicont es una plataforma de facturación electrónica CFDI 4.0 con PAC autorizado. Antes de enviar el comprobante a timbrar, valida los datos del receptor, los catálogos del SAT y los cálculos de impuestos, y si algo no cuadra te muestra el error con una explicación clara para que lo corrijas y vuelvas a emitir. Además, tus folios no caducan y puedes facturar para varias empresas (multi-RFC) desde una sola cuenta.
Conoce la facturación electrónica CFDI 4.0, la plataforma y los paquetes de folios.
Errores relacionados
- Error CFDI40114 (TipoCambio): con Moneda MXN, TipoCambio puede omitirse o valer 1.
- Error CFDI40115 (TipoCambio): con una moneda distinta de MXN y XXX, TipoCambio es requerido.
- Error CFDI40117 (TipoCambio): el valor de TipoCambio debe cumplir el patrón del atributo.
- Error CFDI40118 (TipoCambio): si el TipoCambio se aleja del rango permitido, se requiere confirmación.
- Error CFDI40113 (Moneda): la Moneda debe estar en el catálogo c_Moneda.
Consulta también el Centro de Soluciones con todos los errores del SAT.
Preguntas frecuentes
¿Qué significa el error 40116?
Que el comprobante tiene Moneda XXX y también trae TipoCambio, lo cual no está permitido.
¿Qué significa XXX?
Que la operación no involucra una moneda; se usa en ciertos tipos de comprobante.
¿Puedo poner TipoCambio en cero con XXX?
No. El atributo no debe registrarse, ni siquiera con valor en cero.
¿Es lo mismo que el 40114?
No. El 40114 se refiere a MXN y a un tipo de cambio distinto de 1; el 40116, a XXX.
¿Qué moneda uso en una factura normal?
Si facturas en pesos, MXN; confirma el caso con tu contador.
¿Se genera UUID con este error?
No. El comprobante se rechaza antes del timbrado.
¿Todavía no se resuelve?
Si después de revisar estos puntos el error continúa, escríbenos desde la página de contacto con el código del error y el XML que intentaste timbrar (nunca envíes contraseñas ni la llave privada del CSD). Si aún no tienes cuenta, crea la tuya y empieza a facturar con validaciones previas.