Saltar al contenido principal
EN 16931 · categorías de IVA

Errores BR-E-10, BR-AE-10, BR-IC-10 y BR-G-10: el motivo de exención del IVA

Cada desglose de IVA de una factura electrónica lleva una categoría: S para el tipo general, E para exenta, AE para inversión del sujeto pasivo, K para entrega intracomunitaria, G para exportación, O para fuera del ámbito, Z para tipo cero. Cinco de esas categorías exigen decir por qué no hay IVA y dos lo prohíben. Es la regla número 10 de cada familia, y falla cuando la categoría no casa con el impuesto de Odoo.

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 siete reglas, con el texto del Schematron de EN 16931 (validation-1.3.17). Todas son fatales:

ReglaCategoríaTexto
BR-E-10E, exentaA VAT breakdown (BG-23) with VAT Category code (BT-118) "Exempt from VAT" shall have a VAT exemption reason code (BT-121) or a VAT exemption reason text (BT-120).
BR-AE-10AE, inversiónA VAT breakdown (BG-23) with VAT Category code (BT-118) "Reverse charge" shall have a VAT exemption reason code (BT-121), meaning "Reverse charge" or the VAT exemption reason text (BT-120) "Reverse charge" (or the equivalent standard text in another language).
BR-IC-10K, intracomunitariaA VAT breakdown (BG-23) with the VAT Category code (BT-118) "Intra-community supply" shall have a VAT exemption reason code (BT-121), meaning "Intra-community supply" or the VAT exemption reason text (BT-120) "Intra-community supply" (or the equivalent standard text in another language).
BR-G-10G, exportaciónA VAT breakdown (BG-23) with the VAT Category code (BT-118) "Export outside the EU" shall have a VAT exemption reason code (BT-121), meaning "Export outside the EU" or the VAT exemption reason text (BT-120) "Export outside the EU" (or the equivalent standard text in another language).
BR-O-10O, fuera del ámbitoA VAT breakdown (BG-23) with VAT Category code (BT-118) " Not subject to VAT" shall have a VAT exemption reason code (BT-121), meaning " Not subject to VAT" or a VAT exemption reason text (BT-120) " Not subject to VAT" (or the equivalent standard text in another language).
BR-S-10S, generalA VAT breakdown (BG-23) with VAT Category code (BT-118) "Standard rate" shall not have a VAT exemption reason code (BT-121) or VAT exemption reason text (BT-120).
BR-Z-10Z, tipo ceroA VAT breakdown (BG-23) with VAT Category code (BT-118) "Zero rated" shall not have a VAT exemption reason code (BT-121) or VAT exemption reason text (BT-120).

El motivo puede ir como código (BT-121, de la lista VATEX) o como texto (BT-120). Para E basta cualquiera de los dos; para AE, K, G y O, el código o el texto tienen que significar justo eso: «Reverse charge», «Intra-community supply»… Las reglas de las otras familias (BR-E-08, BR-AE-08 y siguientes) son las de importes; aquí solo va el motivo.

Tarjeta de las reglas de motivo de exención de EN 16931
Cinco categorías piden motivo (E, AE, K, G, O) y dos lo prohíben (S, Z).

Cómo decide Odoo la categoría

Aquí es donde las versiones se separan:

  • Odoo 17 y 18: de serie, el impuesto no trae campo de categoría y Odoo la deduce: a un cliente español con código postal que empieza por 35 o 38 (Canarias), L, y por 51 o 52 (Ceuta y Melilla), M; E si el impuesto es del 0 % y vendedor y cliente son del mismo país; AE en el autoliquidado de cocontratante belga o en la autofactura con impuesto de inversión; con NIF del vendedor e impuesto al 0 %, K si los dos son del EEE y G si solo lo es uno; en el resto, S si el impuesto tiene porcentaje y E si es del 0 %. El módulo estándar account_edi_ubl_cii_tax_extension (Tax extension for UBL/CII), que no se instala solo, añade al impuesto Tax Category Code y Tax Exemption Reason Code: con la categoría puesta, Odoo usa esa en vez de deducirla.
  • Odoo 19: cada impuesto tiene Tax Category Code (AE, E, S, Z, G, O, K, L, M, B) y Tax Exemption Reason Code, con la lista VATEX.
  • Odoo 20: los mismos dos campos y, además, Tax Exemption Reason, un texto libre.
  • En las cuatro versiones: si una categoría E se queda sin motivo, Odoo escribe el texto «Exempt from tax», que cumple BR-E-10.

La trampa típica de Odoo 17 y 18 sin ese módulo es un impuesto del 0 % para un servicio fuera del ámbito del IVA, que la deducción nunca marca como O, o una venta nacional con inversión del sujeto pasivo: la categoría sale distinta de la que esperaría tu asesor.

Con nuestro módulo XRechnung y ZUGFeRD

El generador del módulo publicado solo conoce dos categorías, S y Z. En XRechnung UBL escribe S cuando el impuesto tiene porcentaje y Z cuando es del 0 %. En XRechnung CII, su formato por defecto, cada línea sale como S, también con un impuesto del 0 %, y el validador de KoSIT la rechaza con BR-S-05 (lo hemos comprobado). Una factura con inversión del sujeto pasivo, intracomunitaria, de exportación o exenta no sale con AE, K, G ni E. En Odoo 18, 19 y 20, con la suscripción a FlexigoTech Cloud, el módulo valida el resultado con las reglas de KoSIT y deja en Validation Errors cualquier regla que falle. Para esas facturas, hoy, la exportación de Odoo es la que conoce las categorías. En Odoo 17, la versión publicada no valida.

Registro de auditoría del módulo XRechnung en Odoo 20
Envíos con su formato y el resultado de la validación, uno fallido. Captura de Odoo 20 con datos de demostración; los resultados son de prueba.

Cómo arreglarlo

  1. Identifica la categoría que sale en el desglose del XML (BT-118) y compárala con la operación real.
  2. En Odoo 19 y 20, abre el impuesto y pon su Tax Category Code y, si es E, AE, K, G u O, su Tax Exemption Reason Code.
  3. En Odoo 17 y 18, instala account_edi_ubl_cii_tax_extension y pon en cada impuesto su categoría y, si esa categoría lo pide, su motivo. Sin ese módulo, revisa el país del cliente, su código postal, su NIF y la posición fiscal: son los datos de los que Odoo deduce la categoría.
  4. Un motivo de exención en una línea al tipo general provoca BR-S-10: quítalo del impuesto.
  5. Genera el fichero de nuevo.

Sigue leyendo

Error BR-CO-15 en la factura electrónica: el total con IVA no es base más IVABR-CO-15, BR-CO-14, BR-CO-16 y BR-CO-17 comprueban que los totales de la factura electrónica cuadren. Qué suma cada una y cuáles fallan por un céntimo.Error BR-CO-09: el NIF-IVA del vendedor o del cliente no lleva el prefijo del paísBR-CO-09 rechaza un NIF-IVA sin el prefijo del país; BR-CO-26, BR-S-02, BR-AE-02 y BR-IC-02 piden el del vendedor o el del cliente. El aviso de Odoo y cómo escribirlo.Error UBL-SR-48: una línea de la factura con dos impuestos o sin ningunoUBL-SR-48 y BR-CO-04 exigen una categoría de IVA, y solo una, en cada línea de la factura electrónica. El aviso de Odoo 17, 18, 19 y 20, junto con BR-25 y BR-16.
Comprobado en el código del módulo (versión 17.0 y 20.0) y en las fuentes enlazadas

Fuentes