Saltar al contenido principal
EN 16931 · totales

Error BR-CO-15 en la factura electrónica: el total con IVA no es base más IVA

BR-CO-15 es la regla de EN 16931 que comprueba la suma más simple de una factura: total con IVA igual a total sin IVA más IVA. Va acompañada de BR-CO-14, BR-CO-16, BR-CO-17 y, para el tipo general, BR-S-08 y BR-S-09, y las aplican XRechnung, Factur-X y Peppol BIS. Un céntimo de redondeo basta para que falle BR-CO-14 o BR-CO-15; BR-CO-17 y BR-S-09 admiten hasta 1 € de diferencia.

FlexigoTech · Responsable: Víctor Gómez · Actualizado el 4 de noviembre de 2026

Lo esencial

Versiones
Odoo 17, 18, 19 y 20
Comprobado
en el código del módulo, versión 17.0 y 20.0 · en las fuentes enlazadas al final
Lectura
5 min

Las fórmulas, tal como las escribe el Schematron

ReglaTexto de EN 16931 (Schematron validation-1.3.17)
BR-CO-15Invoice total amount with VAT (BT-112) = Invoice total amount without VAT (BT-109) + Invoice total VAT amount (BT-110).
BR-CO-14Invoice total VAT amount (BT-110) = Σ VAT category tax amount (BT-117).
BR-CO-16Amount due for payment (BT-115) = Invoice total amount with VAT (BT-112) -Paid amount (BT-113) +Rounding amount (BT-114).
BR-CO-17VAT category tax amount (BT-117) = VAT category taxable amount (BT-116) x (VAT category rate (BT-119) / 100), rounded to two decimals.
BR-S-08For each different value of VAT category rate (BT-119) where the VAT category code (BT-118) is "Standard rated", the VAT category taxable amount (BT-116) in a VAT breakdown (BG-23) shall equal the sum of Invoice line net amounts (BT-131) plus the sum of document level charge amounts (BT-99) minus the sum of document level allowance amounts (BT-92) where the VAT category code (BT-151, BT-102, BT-95) is "Standard rated" and the VAT rate (BT-152, BT-103, BT-96) equals the VAT category rate (BT-119).
BR-S-09The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where VAT category code (BT-118) is "Standard rated" shall equal the VAT category taxable amount (BT-116) multiplied by the VAT category rate (BT-119).

Las seis son fatales. Léelas como una cadena: las líneas suman la base de cada tipo (BR-S-08), cada base por su tipo da el IVA de ese tipo (BR-CO-17 y BR-S-09), los IVA por tipo suman el IVA total (BR-CO-14), base más IVA da el total (BR-CO-15) y el total menos lo pagado más el redondeo da lo que queda por pagar (BR-CO-16).

Tarjeta de las reglas de totales de EN 16931
BR-CO-15 con BR-CO-14, BR-CO-16, BR-CO-17, BR-S-08 y BR-S-09: la cadena de sumas de una factura.

Qué reglas notan un céntimo

No todas cuentan céntimos. BR-CO-17 y BR-S-09 comparan el IVA de cada tipo (BT-117) con la base por el tipo, pero el Schematron les deja un margen de 1 € arriba o abajo. BR-S-08 compara bases, así que el redondeo del IVA no le afecta. BR-CO-14, BR-CO-15 y BR-CO-16 comparan sumas redondeadas a dos decimales, sin margen: ahí un céntimo ya es un error.

El céntimo aparece cuando hay dos maneras de calcular el IVA. Odoo lo calcula según el ajuste Tax Calculation Rounding Method de la empresa:

Versión de OdooOpcionesPor defecto
Odoo 17 y 18Round per Line o Round GloballyPor línea
Odoo 19 y 20Round per Tax o Round per LinePor impuesto

Con el redondeo por línea, Odoo redondea el IVA de cada línea y luego suma. En una factura con muchas líneas de importes pequeños, esa suma puede quedar a un céntimo del IVA calculado sobre la base de cada tipo. Si todas las cifras del fichero salen del mismo cálculo, las sumas cuadran. Si el fichero lleva el IVA total de Odoo junto a un desglose rehecho por tipo, falla BR-CO-14; si lleva el total con IVA de Odoo junto a un IVA rehecho, falla BR-CO-15. Para que salte BR-CO-17, la diferencia tiene que pasar de 1 €.

El método de redondeo es un ajuste de la empresa, no de cada factura: cambiarlo afecta a los impuestos que se calculen desde ese momento. Hazlo entre facturas, nunca con una a medias.

Lo que hace el Factur-X de Odoo

En el Factur-X (CII) de Odoo 18, 19 y 20, el total con IVA (BT-112) se escribe como la suma de la base (BT-109) y del IVA (BT-110) que ya van en el fichero, justo para cumplir BR-CO-15. Eso asegura la regla de la suma; el resto de la cadena sigue dependiendo de que el desglose cuadre.

Con nuestro módulo XRechnung y ZUGFeRD

El módulo genera el XML con su propio código y hoy mezcla los dos cálculos. El IVA de cada tipo (BT-117) lo calcula como base por tipo; el total con IVA (en UBL) y el IVA total (en CII) los copia de la factura de Odoo. Con el redondeo por línea, un céntimo de diferencia basta: el XML sale con BR-CO-15 en XRechnung UBL y con BR-CO-14 en XRechnung CII, el formato que el módulo usa por defecto. Lo hemos comprobado con el validador de KoSIT. En Odoo 17 y 18, el redondeo por línea es el valor por defecto.

Con un pago parcial falla BR-CO-16: el importe a pagar (BT-115) es lo que queda pendiente en Odoo, pero el fichero no lleva el importe ya pagado (BT-113).

Factura de Odoo 20 con la pestaña XRechnung / ZUGFeRD del módulo
Resultado de la validación y casilla Ready to send en la factura. Captura de Odoo 20 con datos de demostración; el informe de la captura es de prueba.

En Odoo 18, 19 y 20, con la suscripción a FlexigoTech Cloud, cada XRechnung y cada ZUGFeRD EN 16931 que genera el módulo pasa por las reglas de KoSIT, que incluyen estas seis. Si una falla, queda escrita en la factura, en Validation Errors, y la factura no se marca como Ready to send. En Odoo 17 la versión publicada no valida: el fichero sale con el fallo y sin aviso.

Qué hacer

  1. Mira en el informe qué regla falla primero: BR-S-08 apunta a las bases, BR-CO-14 al desglose, BR-CO-15 al total y BR-CO-17 al IVA de un tipo.
  2. Revisa el método de redondeo de la empresa y, si emites facturas electrónicas con muchas líneas, valora el redondeo por impuesto con tu asesor.
  3. BR-CO-16 aparece con pagos parciales o con redondeo de caja: el importe pagado y el de redondeo tienen que ir en el fichero. Con nuestro módulo, genera la XRechnung antes de registrar ningún pago.
  4. Corrige y genera de nuevo; no edites el XML a mano.

Sigue leyendo

Errores BR-E-10, BR-AE-10, BR-IC-10 y BR-G-10: el motivo de exención del IVABR-E-10, BR-AE-10, BR-IC-10, BR-G-10 y BR-O-10 piden el motivo de exención; BR-S-10 y BR-Z-10 lo prohíben. Cómo lo decide Odoo 17, 18, 19 y 20 y dónde se cambia.Errores BR-09 y BR-11: la dirección del vendedor o del comprador sin código de paísBR-09 y BR-11 piden el código de país en la dirección del vendedor y del comprador; BR-08 y BR-10, la dirección misma. El aviso de Odoo 17, 18, 19 y 20 y qué rellenar.Errores BR-DE-1, BR-61 y BR-DE-23 en XRechnung: las instrucciones de pagoBR-DE-1 pide en XRechnung las instrucciones de pago (BG-16) y BR-61 la cuenta cuando se paga por transferencia. Qué pone Odoo 17, 18, 19 y 20 y cómo arreglarlo.
Comprobado en el código del módulo (versión 17.0 y 20.0) y en las fuentes enlazadas

Fuentes