Error CFDI40209 al timbrar: el Importe de la retención exige TotalImpuestosRetenidos
El error CFDI40209 se revisa sobre el Importe de cada línea de retención del resumen de impuestos: los importes por impuesto (ISR, IVA) ya están escritos, pero el nodo cfdi:Impuestos no declara cuánto se retuvo en total. El Anexo 20 pide que, si hay importes de retención, exista TotalImpuestosRetenidos. Esta guía explica cómo se dispara desde cada línea Retencion, en qué se diferencia de CFDI40206, CFDI40210 y CFDI40211 y cómo corregirlo.
Resumen rápido del error
- Código: CFDI40209
- Campo: Importe
- Nodo del XML:
cfdi:Comprobante/cfdi:Impuestos/cfdi:Retenciones/cfdi:Retencion - Regla del SAT (Anexo 20): Debe existir el atributo TotalImpuestosRetenidos.
- Mensaje de rechazo: Debe existir el campo TotalImpuestosRetenidos.
- Cuándo aparece: al timbrar, antes de que se genere el UUID.
¿Qué significa el error CFDI40209?
El resumen de impuestos del CFDI 4.0 tiene una línea cfdi:Retencion por cada impuesto retenido (por ejemplo, una de ISR y otra de IVA) y cada línea declara su Importe. Esta validación parte de ese importe: el SAT toma lo que escribiste en la línea de retención y exige que el comprobante también diga cuánto retuvo en total, en TotalImpuestosRetenidos. El problema, entonces, no está en el monto de la línea sino en que falta el total que debe acompañarlo; por eso el PAC responde con CFDI40209 antes de generar el UUID.
Aunque el campo señalado en el mensaje es Importe, lo que falta en realidad es otro atributo: TotalImpuestosRetenidos. Por eso conviene no confundirlo con los errores que sí revisan el valor del importe: CFDI40210 (decimales de la moneda) y CFDI40211 (que coincida con la suma de las retenciones de los conceptos).
La diferencia con CFDI40206 está en lo que dispara el rechazo: el 40206 se activa por la presencia del nodo contenedor cfdi:Retenciones, mientras que el 40209 se activa por el Importe de cada cfdi:Retencion. Ambos códigos piden el mismo atributo; lo que cambia es el punto del XML desde el que se evalúa.
Dónde se valida: el nodo Retencion e Importe
El SAT evalúa el atributo Importe dentro de cfdi:Retenciones/cfdi:Retencion, a nivel comprobante. Es el importe acumulado por tipo de impuesto: por ejemplo, la suma de todo el ISR retenido de los conceptos.
La condición que se comprueba es la existencia del atributo TotalImpuestosRetenidos en cfdi:Impuestos. Los dos datos deben ser coherentes: el total retenido es la suma de los importes de las retenciones (validación CFDI40203).
Causas más comunes del error CFDI40209
- Falta el atributo de total. El XML contiene retenciones con su importe, pero el nodo
cfdi:Impuestossolo traeTotalImpuestosTrasladados. - El total se omite cuando es “cero”. Algunos sistemas no escriben el atributo si la retención les parece irrelevante. Si el nodo de retenciones existe, el atributo debe existir.
- Retenciones agregadas después de armar el XML. Se añadió una retención en un paso posterior del proceso y el cálculo del total no se volvió a ejecutar.
- Plantillas incompletas. Una plantilla de CFDI 3.3 migrada a 4.0 conserva solo parte de la estructura de impuestos.
- Nombre o ubicación incorrectos. El total existe pero con otro nombre o fuera de
cfdi:Impuestos, por lo que el esquema no lo reconoce.
Cómo corregir el error CFDI40209 paso a paso
- Identifica el nodo que falla. Busca
cfdi:Retenciones/cfdi:Retenciona nivel comprobante y anota elImportede cada tipo de impuesto retenido. - Calcula el total. Suma esos importes. El resultado es el valor de
TotalImpuestosRetenidos. - Escríbelo en el nodo correcto. Agrega
TotalImpuestosRetenidos="..."al elementocfdi:Impuestosdel comprobante, con los decimales de la moneda. - Revisa los importes de las retenciones. Verifica que cada
Importesea la suma, redondeada, de las retenciones del mismo impuesto en los conceptos (CFDI40211) y que no excedan los decimales permitidos (CFDI40210). - Confirma el Total del comprobante. El
Totaldebe restar las retenciones (CFDI40119). - Timbra de nuevo. Si editaste el XML, genera otra vez el sello antes de enviarlo al PAC.
Ejemplo en el XML: incorrecto y correcto
Ejemplo con dos retenciones a nivel comprobante, una de ISR y otra de IVA, cada una con su Importe:
Incorrecto:
<cfdi:Impuestos TotalImpuestosTrasladados="160.00">
<cfdi:Retenciones>
<cfdi:Retencion Impuesto="001" Importe="100.00"/>
<cfdi:Retencion Impuesto="002" Importe="106.67"/>
</cfdi:Retenciones>
<cfdi:Traslados> ... </cfdi:Traslados>
</cfdi:Impuestos>
Correcto:
<cfdi:Impuestos TotalImpuestosRetenidos="206.67" TotalImpuestosTrasladados="160.00">
<cfdi:Retenciones>
<cfdi:Retencion Impuesto="001" Importe="100.00"/>
<cfdi:Retencion Impuesto="002" Importe="106.67"/>
</cfdi:Retenciones>
<cfdi:Traslados> ... </cfdi:Traslados>
</cfdi:Impuestos>
El total retenido (206.67) es la suma de los dos importes (100.00 y 106.67). Los importes son ilustrativos: antes de emitir, confirma con tu contador qué retenciones y tasas aplican a tu operación.
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 CFDI40206 (Retenciones): exige TotalImpuestosRetenidos cuando existe el nodo de retenciones.
- Error CFDI40203 (TotalImpuestosRetenidos): el total retenido debe igualar la suma de las retenciones.
- Error CFDI40210 (Importe): el importe de la retención no debe exceder los decimales de la moneda.
- Error CFDI40211 (Importe): el importe debe igualar la suma de las retenciones de los conceptos.
- Error CFDI40208 (Impuesto): solo un registro por tipo de impuesto retenido.
- Error CFDI40119 (Total): el total debe restar las retenciones.
Consulta también el Centro de Soluciones con todos los errores del SAT.
Preguntas frecuentes
¿El error 40209 significa que mi Importe está mal calculado?
No necesariamente. Este código se activa porque falta TotalImpuestosRetenidos. Si el importe estuviera mal calculado, verías CFDI40211 (no coincide con los conceptos) o CFDI40210 (decimales de más).
¿Dónde va TotalImpuestosRetenidos?
En el elemento cfdi:Impuestos que cuelga directamente de cfdi:Comprobante, no dentro de los conceptos.
¿Qué valor debo escribir?
La suma de los importes de todas las retenciones del comprobante, con los decimales que soporta la moneda (dos para pesos mexicanos).
¿Puedo emitir el CFDI sin retenciones para evitar el error?
Solo si la operación no está sujeta a retención. Si debes retener, el comprobante tiene que reflejarlo. Consulta con tu contador.
¿Se genera UUID cuando aparece este rechazo?
No. El comprobante no queda certificado hasta que el PAC acepte un XML válido.
¿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.