Prevenir y tratar correctamente las diferencias de redondeo en facturas UBL: PayableRoundingAmount, redondeo de IVA y precios con IVA incluido.
Uno de los mensajes de error más frustrantes al enviar e-facturas es una diferencia de redondeo. Los totales de IVA no coinciden con los importes de las líneas, o el total de la factura difiere en un céntimo respecto a la suma calculada. El resultado: la factura es rechazada durante la validación. Este artículo explica de dónde provienen las diferencias de redondeo y cómo prevenirlas o resolverlas.
Las diferencias de redondeo surgen por la combinación de tres factores: la multiplicación, la división y el redondeo a dos decimales. Algunos ejemplos:
Precio unitario con muchos decimales. Un precio de 3,333... euros por unidad x 3 unidades = 9,999 euros. Redondeado, son 10,00 euros. Pero si primero redondea el precio unitario a 3,33 y luego multiplica: 3,33 x 3 = 9,99. Un céntimo de diferencia.
IVA por línea versus IVA por total. Si calcula el IVA por línea de factura y lo redondea, y después suma los resultados, la suma puede diferir del IVA calculado sobre el total. Con un 21 % de IVA sobre 33,33 euros, resultan 7,00 euros (redondeado). Pero un 21 % sobre 3 x 33,33 = 21 % sobre 99,99 = 21,00 euros. Mientras que 3 x 7,00 = 21,00 euros también. En este caso coincide, pero con otros importes no siempre es así.
Precios con IVA incluido. Algunos sectores (comercio minorista, hostelería) trabajan con precios con IVA incluido. El importe neto debe recalcularse, lo que introduce un momento de redondeo adicional.
EN 16931-1:2017 (versión de producción actual) estipula que todos los importes se redondean a 2 decimales, independientemente de la divisa.
La revisión EN 16931-1:2026 (aprobación CEN el 13 de marzo de 2026, urn:cen.eu:en16931:2026) sustituye esto por un número de decimales dependiente de la divisa: el número de decimales = la columna «minor unit» de ISO 4217 para la divisa utilizada. La implementación Peppol a través de OpenPeppol se espera como BIS Billing 4.0 (indicativamente 2027). Hasta que esa versión esté en producción, sigue vigente la regla actual de 2 decimales.
Excepciones en 2026 (fijas, independientemente de la divisa):
Impacto en eConnect: las facturas salientes siempre se envían en euros (minor unit 2) — sin cambios. Las facturas entrantes pueden contener divisas con minor unit de hasta 4 — el procesamiento debe gestionar hasta 4 decimales. Consulte también EN 16931-1:2026 principales cambios para una visión general completa.
El estándar UBL dispone de un elemento especial para las diferencias de redondeo: PayableRoundingAmount en el bloque LegalMonetaryTotal. Este elemento absorbe las pequeñas diferencias de redondeo, de modo que el PayableAmount pueda ser un importe redondo:
<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="EUR">99.99</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="EUR">99.99</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount currencyID="EUR">120.99</cbc:TaxInclusiveAmount>
<cbc:PayableRoundingAmount currencyID="EUR">0.01</cbc:PayableRoundingAmount>
<cbc:PayableAmount currencyID="EUR">121.00</cbc:PayableAmount>
</cac:LegalMonetaryTotal>
La diferencia de 0,01 euros se menciona explícitamente. Las reglas de validación permiten un PayableRoundingAmount, siempre que la diferencia sea lo suficientemente pequeña (generalmente un máximo de 1 euro, dependiendo del perfil).
XPath: Invoice/LegalMonetaryTotal/PayableRoundingAmount.
Ejemplo 1 (redondeo al alza): TaxInclusiveAmount es 9,99 euros, el importe a pagar deseado es 10,00 euros. Entonces PayableRoundingAmount = 0,01 euros y PayableAmount = 10,00 euros.
Ejemplo 2 (sin cambio en PayableAmount): con un cálculo de precio a 4 decimales puede surgir una diferencia submicro, por ejemplo 8,2646 × 1,21 = 10,000166. En ese caso PayableAmount permanece sin cambios y no se necesita PayableRoundingAmount.
El cálculo del IVA en una factura UBL funciona por tipo de IVA, no por línea. Todos los importes de línea con el mismo tipo de IVA se suman para obtener la base imponible (TaxableAmount), y el IVA se calcula sobre ese total. Esto evita redondear por línea y obtener después una diferencia de redondeo acumulativa.
La fórmula es:
TaxableAmount = suma de LineExtensionAmount por categoría de IVA
- AllowanceTotalAmount por categoría de IVA
+ ChargeTotalAmount por categoría de IVA
TaxAmount = TaxableAmount × Percent / 100 (redondeado a 2 decimales)
Importante: calcule siempre el IVA sobre la base imponible total por tipo, no por línea. El cálculo del IVA por línea es la causa más frecuente de las diferencias de redondeo.
Cuando los precios incluyen IVA, el importe neto debe recalcularse. El enfoque estándar es:
bruto / (1 + porcentaje de IVA/100)LineExtensionAmount es este importe netoPayableRoundingAmount<!-- Precio con IVA incluido: 12,10 € por unidad, 3 unidades -->
<cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<cbc:InvoicedQuantity unitCode="EA">3</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="EUR">30.00</cbc:LineExtensionAmount>
<cac:Price>
<cbc:PriceAmount currencyID="EUR">10.00</cbc:PriceAmount>
</cac:Price>
</cac:InvoiceLine>
En este ejemplo, el precio con IVA incluido es de 12,10 euros. El importe neto es de 10,00 euros por unidad (12,10 / 1,21). Multiplicado por 3 = 30,00 euros. IVA: 21 % de 30,00 = 6,30 euros. Total: 36,30 euros. Eso coincide exactamente con 3 x 12,10 euros. Pero con precios que no se dividen limpiamente, aparece una diferencia.
eConnect valida cada factura en cuanto a su coherencia interna. Si una pequeña diferencia de redondeo se encuentra dentro de la tolerancia, la factura es aceptada. Para diferencias mayores, recibe un mensaje de error claro que indica dónde se encuentra la diferencia.
La función de reparación automática XML de eConnect puede en algunos casos añadir un PayableRoundingAmount faltante si la diferencia es inferior al umbral de tolerancia. Pero siempre es mejor gestionar el redondeo correctamente en su propio software.
TaxExclusiveAmount + TaxAmount debe ser igual a TaxInclusiveAmount. Y TaxInclusiveAmount menos PrepaidAmount más PayableRoundingAmount debe ser igual a PayableAmount.Calcule el IVA por tipo (no por línea), trabaje internamente con más de dos decimales y redondee solo al rellenar los elementos XML. Si a pesar de un redondeo correcto queda una pequeña diferencia, absórbala con el elemento PayableRoundingAmount.
Es un elemento UBL especial que absorbe las pequeñas diferencias de redondeo en los totales de la factura. La diferencia se menciona explícitamente, de modo que la factura se valida de todas formas. La mayoría de los perfiles permiten un máximo de 1 euro.
En algunos casos, la función de reparación automática XML puede añadir un PayableRoundingAmount faltante si la diferencia es inferior al umbral de tolerancia. Pero siempre es mejor gestionar el redondeo correctamente en su propio software.
Verifique su factura