Error CFDI40107 al timbrar: el SubTotal excede la cantidad de decimales que soporta la moneda
El error CFDI40107 aparece cuando el atributo SubTotal del comprobante trae más decimales de los que soporta la Moneda indicada. Con pesos mexicanos (MXN) el subtotal se expresa con dos decimales; 1250.505 o 1250.5050 ya lo violan. Casi siempre es consecuencia de calcular con precios de más precisión y escribir el resultado sin redondear. Aquí verás cómo redondear en el momento correcto y cómo comprobarlo.
Resumen rápido del error
- Código: CFDI40107
- Campo: SubTotal
- Nodo del XML:
Comprobante - Regla del SAT (Anexo 20): El valor de este atributo debe tener hasta la cantidad de decimales que soporte la moneda.
- Mensaje de rechazo: El valor de este campo SubTotal excede la cantidad de decimales que soporta la moneda.
- Cuándo aparece: al timbrar, antes de que se genere el UUID.
¿Qué significa el error CFDI40107?
Cada moneda del catálogo c_Moneda tiene un número máximo de decimales. El SubTotal es una cantidad de dinero y no puede expresarse con mayor precisión que esa. La regla CFDI40107 revisa solo los decimales del atributo, no su valor.
No confundas esta regla con CFDI40108, que compara el subtotal con la suma de los importes de los conceptos, ni con CFDI40109, que exige subtotal cero en traslados y pagos. Un subtotal puede tener los decimales correctos y aun así no cuadrar con los conceptos, o al revés.
Dónde se valida: el nodo Comprobante y subtotal
La validación se aplica al atributo SubTotal del nodo cfdi:Comprobante y depende de la Moneda registrada en el mismo nodo.
- CFDI40107: el
SubTotaldebe tener los decimales que soporte la moneda (esta ficha). - CFDI40108: con I, E o N, el subtotal debe ser el redondeo de la suma de los importes de los conceptos.
- CFDI40109: con T o P, el subtotal debe ser cero.
- CFDI40112: el
Descuentodebe tener los decimales que soporte la moneda. - CFDI40113: la
Monedadebe estar enc_Moneda.
Causas más comunes del error CFDI40107
- El precio tiene seis decimales. Un precio de lista de
10.123456multiplicado por la cantidad deja decimales de sobra. - El subtotal se sumó sin redondear. Se sumaron importes de concepto con más de dos decimales.
- Se cambió de moneda. Se pasó de una moneda de dos decimales a otra sin ajustar los datos.
- Hay conversión de tipo de cambio. Se multiplicó un monto por el tipo de cambio sin redondear.
- Se importó desde una hoja de cálculo. La celda muestra dos decimales pero guarda más.
- El sistema trabaja con más precisión. Calcula con seis decimales y no redondea al escribir el XML.
Cómo corregir el error CFDI40107 paso a paso
- Revisa la moneda. Confirma qué decimales soporta la
Monedadel comprobante. - Mira el valor del subtotal. Cuenta los decimales del atributo en el XML.
- Redondea al escribir. Aplica el redondeo del sistema al valor final, no a pasos intermedios.
- Revisa los conceptos. Verifica que la suma redondeada siga coincidiendo con los importes (CFDI40108).
- Revisa el descuento. Debe tener también los decimales de la moneda (CFDI40112).
- Se vuelve a timbrar. Con los datos coherentes, el PAC pasa a las demás validaciones.
Ejemplo en el XML: incorrecto y correcto
Ejemplo de un comprobante en pesos con un subtotal de tres decimales; los importes son ficticios:
Incorrecto:
<cfdi:Comprobante Moneda="MXN" SubTotal="1250.505" Total="1450.59" ... >
Correcto:
<cfdi:Comprobante Moneda="MXN" SubTotal="1250.51" Total="1450.59" ... >
Los importes son ficticios. Tras redondear el subtotal, revisa que el IVA y el total sigan siendo coherentes con él.
Cuándo redondear: al final, no en cada paso
Una causa frecuente es redondear demasiado pronto, o nunca. Si tu sistema trabaja con precios de seis decimales, redondea cada importe de concepto a los decimales de la moneda antes de sumarlos y después suma ya los importes redondeados; así el subtotal y los conceptos coinciden. Si calculas un precio unitario a partir de un total, guarda ese precio con la precisión que necesites, pero el importe del concepto sí debe respetar la moneda. Haz una factura de prueba con un precio que genere muchos decimales y compara el XML con tu pantalla. Para repasar el cálculo general, 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 CFDI40108 (SubTotal): con I, E o N, el subtotal debe ser el redondeo de la suma de los conceptos.
- Error CFDI40109 (SubTotal): con T o P, el subtotal debe ser cero.
- Error CFDI40112 (Descuento): el descuento debe tener los decimales que soporte la moneda.
- Error CFDI40113 (Moneda): la moneda debe estar en el catálogo c_Moneda.
- Error CFDI40204 (TotalImpuestosTrasladados): el total de traslados debe tener los decimales de la moneda.
Consulta también el Centro de Soluciones con todos los errores del SAT.
Preguntas frecuentes
¿Qué significa el error 40107?
Que el subtotal tiene más decimales de los que soporta la moneda.
¿Cuántos decimales lleva el peso mexicano?
Dos, según el catálogo de monedas; confírmalo en c_Moneda.
¿Es lo mismo que el 40108?
No. El 40108 compara el subtotal con la suma de los conceptos.
¿Puedo conservar seis decimales en el precio?
En el precio unitario puede ser, pero el subtotal debe respetar la moneda.
¿Debo revisar también el descuento?
Sí, tiene su propia regla de decimales: 40112.
¿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.