Saltar para o conteúdo principal
EN 16931 · categorias de IVA

Erros BR-E-10, BR-AE-10, BR-IC-10 e BR-G-10: o motivo de isenção do IVA

Cada discriminação de IVA numa fatura eletrónica leva uma categoria: S para a taxa normal, E para isenta, AE para autoliquidação, K para entrega intracomunitária, G para exportação, O para fora do âmbito, Z para taxa zero. Cinco dessas categorias exigem indicar porque não há IVA e duas proíbem-no. É a regra número 10 de cada família, e falha quando a categoria não coincide com o imposto do Odoo.

FlexigoTech · Responsável: Víctor Gómez · Atualizado em 4 de novembro de 2026

O essencial

Versões
Odoo 17, 18, 19 e 20
Verificado
no código do módulo, versão 17.0 e 20.0 · nas fontes indicadas no fim
Leitura
5 min

As sete regras, com o texto do Schematron de EN 16931 (validation-1.3.17). Todas são fatais:

RegraCategoriaTexto
BR-E-10E, isentaA 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, autoliquidaçãoA 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, intracomunitáriaA 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, exportaçãoA 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, fora do â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, normalA 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, taxa zeroA 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).

O motivo pode ir como código (BT-121, da lista VATEX) ou como texto (BT-120). Para E basta qualquer um dos dois; para AE, K, G e O, o código ou o texto têm de significar exatamente isso: «Reverse charge», «Intra-community supply»… As regras das outras famílias (BR-E-08, BR-AE-08 e seguintes) são de montantes; aqui trata-se apenas do motivo.

Cartão das regras de motivo de isenção de EN 16931
Cinco categorias exigem motivo (E, AE, K, G, O) e duas proíbem-no (S, Z).

Como o Odoo decide a categoria

É aqui que as versões se separam:

  • Odoo 17 e 18: de série, o imposto não tem campo de categoria e o Odoo deduz-na: a um cliente espanhol com código postal que começa por 35 ou 38 (Canárias), L, e por 51 ou 52 (Ceuta e Melilla), M; E se o imposto for de 0 % e vendedor e cliente forem do mesmo país; AE na autoliquidação de cocontratante belga ou na autofaturação com imposto de autoliquidação; com NIF do vendedor e imposto a 0 %, K se ambos forem do EEE e G se só um for; no resto, S se o imposto tiver percentagem e E se for de 0 %. O módulo padrão account_edi_ubl_cii_tax_extension (Tax extension for UBL/CII), que não se instala sozinho, acrescenta ao imposto Tax Category Code e Tax Exemption Reason Code: com a categoria definida, o Odoo usa essa em vez de a deduzir.
  • Odoo 19: cada imposto tem Tax Category Code (AE, E, S, Z, G, O, K, L, M, B) e Tax Exemption Reason Code, com a lista VATEX.
  • Odoo 20: os mesmos dois campos e, além disso, Tax Exemption Reason, um texto livre.
  • Nas quatro versões: se uma categoria E ficar sem motivo, o Odoo escreve o texto «Exempt from tax», que cumpre BR-E-10.

A armadilha típica do Odoo 17 e 18 sem esse módulo é um imposto de 0 % para um serviço fora do âmbito do IVA, que a dedução nunca marca como O, ou uma venda nacional com autoliquidação: a categoria sai diferente da que o seu contabilista esperaria.

Com o nosso módulo XRechnung e ZUGFeRD

O gerador do módulo publicado só conhece duas categorias, S e Z. Em XRechnung UBL escreve S quando o imposto tem percentagem e Z quando é de 0 %. Em XRechnung CII, o formato por defeito, cada linha sai como S, também com um imposto de 0 %, e o validador da KoSIT rejeita-a com BR-S-05 (verificámo-lo). Uma fatura com autoliquidação, intracomunitária, de exportação ou isenta não sai com AE, K, G nem E. No Odoo 18, 19 e 20, com a subscrição do FlexigoTech Cloud, o módulo valida o resultado com as regras da KoSIT e deixa em Validation Errors qualquer regra que falhe. Para essas faturas, hoje, a exportação do próprio Odoo é a que conhece as categorias. No Odoo 17, a versão publicada não valida.

Registo de auditoria do módulo XRechnung no Odoo 20
Envios com o respetivo formato e o resultado da validação, um falhado. Captura do Odoo 20 com dados de demonstração; os resultados são de teste.

Como o corrigir

  1. Identifique a categoria que sai na discriminação do XML (BT-118) e compare-a com a operação real.
  2. No Odoo 19 e 20, abra o imposto e defina o seu Tax Category Code e, se for E, AE, K, G ou O, o seu Tax Exemption Reason Code.
  3. No Odoo 17 e 18, instale account_edi_ubl_cii_tax_extension e defina em cada imposto a sua categoria e, se essa categoria o exigir, o seu motivo. Sem esse módulo, verifique o país do cliente, o código postal, o NIF e a posição fiscal: são os dados a partir dos quais o Odoo deduz a categoria.
  4. Um motivo de isenção numa linha à taxa normal provoca BR-S-10: retire-o do imposto.
  5. Gere o ficheiro novamente.

Continue a ler

Erro BR-CO-15 na fatura eletrónica: o total com IVA não é base mais IVABR-CO-15, BR-CO-14, BR-CO-16 e BR-CO-17 verificam que os totais da fatura eletrónica batem certo. O que soma cada uma e quais falham por um cêntimo.Erro BR-CO-09: o NIF-IVA do vendedor ou do cliente não tem o prefixo do paísBR-CO-09 rejeita um NIF-IVA sem o prefixo do país; BR-CO-26, BR-S-02, BR-AE-02 e BR-IC-02 exigem o do vendedor ou o do cliente. O aviso do Odoo e como o escrever.Erro UBL-SR-48: uma linha da fatura com dois impostos ou sem nenhumUBL-SR-48 e BR-CO-04 exigem uma categoria de IVA, e só uma, em cada linha da fatura eletrónica. O aviso do Odoo 17, 18, 19 e 20, com BR-25 e BR-16.
Verificado no código do módulo (versão 17.0 e 20.0) e nas fontes indicadas

Fontes