Error CFDI40184 al timbrar: una retención no puede tener TipoFactor Exento
El error CFDI40184 aparece cuando una cfdi:Retencion dentro de un concepto declara TipoFactor="Exento". Aunque Exento es un valor válido del catálogo, el SAT no lo permite en retenciones: una retención o se aplica con tasa o cuota, o simplemente no se declara. En esta guía verás por qué ocurre, qué hacer con el nodo y cómo se distingue de los errores de catálogo del factor.
Resumen rápido del error
- Código: CFDI40184
- Campo: TipoFactor
- Nodo del XML:
cfdi:Comprobante/cfdi:Conceptos/cfdi:Concepto/cfdi:Impuestos/cfdi:Retenciones/cfdi:Retencion - Regla del SAT (Anexo 20): El valor registrado debe ser distinto de Exento.
- Mensaje de rechazo: El valor registrado debe ser distinto de Exento.
- Cuándo aparece: al timbrar, antes de que se genere el UUID.
¿Qué significa el error CFDI40184?
Exento describe una operación que no causa un impuesto trasladado. Una retención es otra cosa: es un impuesto que se retiene y se entera, así que no existe una “retención exenta”. Por eso, dentro de cfdi:Retenciones, el factor debe ser Tasa o Cuota.
La regla CFDI40184 no compara el valor contra el catálogo (eso lo hace CFDI40183); lo que hace es prohibir un valor concreto que sí está en el catálogo. Por eso suele aparecer cuando un sistema usa la misma plantilla para traslados y retenciones.
Dónde se valida: el nodo Retención del concepto y el valor Exento
La validación se aplica a cada cfdi:Retencion del concepto. Si el comprobante tiene conceptos con traslados exentos, esos traslados siguen siendo válidos; el error se produce solo cuando el factor Exento aparece dentro del nodo de retenciones.
- Traslados:
Exentoes un valor permitido; entonces no llevanTasaOCuotaniImporte(CFDI40177). - Retenciones:
Exentono está permitido (CFDI40184). - Retenciones con un factor inexistente en el catálogo: CFDI40183.
- Resumen del comprobante: solo agrega los importes retenidos de los conceptos.
Causas más comunes del error CFDI40184
- Una plantilla común para traslados y retenciones. El sistema copia el factor del traslado exento al nodo de retención del mismo concepto.
- Se quiso indicar “no aplica retención”. Se declaró la retención con
Exentoen lugar de omitir el nodo. - Se heredó el factor de un producto exento. El producto está marcado como exento de IVA y esa marca se propagó a todos sus impuestos.
- Configuración por defecto del impuesto. El impuesto retenido se creó en el sistema sin elegir
Tasay quedó con el primer valor de la lista. - Se confundió con el objeto del impuesto. En lugar de ajustar
ObjetoImp, se intentó expresar la exención dentro del nodo de retención.
Cómo corregir el error CFDI40184 paso a paso
- Localiza la retención con error. Revisa cada
cfdi:Retenciony busca el valorExento. - Decide si la retención realmente aplica. Si no aplica, elimina el nodo
cfdi:Retencion. Si aplica, continúa. - Cambia el factor. Escribe
Tasa(oCuota) y registraTasaOCuotaeImportecon valores válidos. - Revisa los traslados del mismo concepto. Un traslado
Exentoen el mismo concepto es válido; no necesita cambios por este error. - Corrige la plantilla. Para que traslados y retenciones tengan configuraciones separadas.
- Vuelve a timbrar. Con la retención corregida el PAC continúa con las demás validaciones.
Ejemplo en el XML: incorrecto y correcto
Ejemplo con una retención mal declarada como exenta; las cifras son ilustrativas:
Incorrecto:
<cfdi:Retencion Base="1000.00" Impuesto="001" TipoFactor="Exento"/>
Correcto:
<cfdi:Retencion Base="1000.00" Impuesto="001" TipoFactor="Tasa" TasaOCuota="0.100000" Importe="100.00"/>
Hay dos salidas: si la retención aplica, declárala con Tasa y su tasa e importe; si no aplica, elimina el nodo. Cuál procede en tu caso debe confirmarlo tu contador; la tasa del ejemplo es solo ilustrativa.
Exento en traslados, no en retenciones: cómo mantenerlos separados
Una buena práctica es configurar los impuestos de tu sistema por separado: un registro para el traslado (con su factor, que puede ser Tasa, Cuota o Exento) y otro para la retención (con Tasa o Cuota). Cuando un producto sea exento de un impuesto trasladado, esa marca solo debe afectar al traslado y no a las retenciones que puedan acompañar al concepto. Antes de timbrar, revisa el XML y busca el texto Exento dentro de los nodos cfdi:Retencion: no debería aparecer nunca. Si tu operación combina productos exentos con retenciones, confirma con tu contador cómo se declara cada concepto.
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 CFDI40183 (TipoFactor): el valor del factor de la retención debe existir en el catálogo.
- Error CFDI40176 (TipoFactor): el valor del factor del traslado debe existir en el catálogo.
- Error CFDI40177 (TipoFactor): con Exento, el traslado no registra tasa ni importe.
- Error CFDI40185 (TasaOCuota): la tasa de la retención debe coincidir con el catálogo.
- Error CFDI40181 (Base): la base de la retención debe ser mayor que cero.
Consulta también el Centro de Soluciones con todos los errores del SAT.
Preguntas frecuentes
¿Puede una retención ser exenta?
No. Dentro de cfdi:Retenciones el factor debe ser Tasa o Cuota.
¿Por qué Exento es válido en traslados pero no en retenciones?
Porque exento describe una operación sin impuesto trasladado; una retención es un impuesto retenido y se declara con tasa o cuota.
¿Qué hago si no quiero retener?
Elimina el nodo de retención del concepto y confirma con tu contador el valor de ObjetoImp.
¿Se parece a CFDI40183?
Es una regla hermana: CFDI40183 revisa que el valor exista en el catálogo; CFDI40184 prohíbe el valor Exento aunque exista.
¿Se genera UUID con CFDI40184?
No. El comprobante se rechaza antes del timbrado y se corrige antes de volver a emitir.
¿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.