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.
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).
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.Verifique su factura