Saltar para o conteúdo principal
EN 16931 · linhas

Erro UBL-SR-48: uma linha da fatura com dois impostos ou sem nenhum

Na fatura eletrónica europeia cada linha tem uma categoria de IVA, e só uma. No Odoo uma linha pode ter vários impostos ou nenhum, por isso o choque é frequente: é UBL-SR-48 no ficheiro, e o Odoo para-o antes de o gerar com o seu próprio aviso. No mesmo grupo estão BR-CO-04, BR-25 e BR-16.

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
3 min

O que diz cada regra

As quatro são fatais no Schematron da EN 16931 (validation-1.3.17):

UBL-SR-48
«Invoice lines shall have one and only one classified tax category.» É uma regra da sintaxe UBL: uma linha, uma categoria.
BR-CO-04
«Each Invoice line (BG-25) shall be categorized with an Invoiced item VAT category code (BT-151).» O outro lado: nenhuma linha sem categoria.
BR-25
«Each Invoice line (BG-25) shall contain the Item name (BT-153).» Cada linha com nome.
BR-16
«An Invoice shall have at least one Invoice line (BG-25)» Pelo menos uma linha.
Cartão da regra UBL-SR-48 da EN 16931
Uma categoria de IVA por linha (BT-151), com BR-CO-04, BR-25 e BR-16.

O aviso do Odoo

O Odoo não espera pelo validador. Antes de gerar o UBL percorre as linhas e, se uma não tiver exatamente um imposto, para com: «Each invoice line shall have one and only one tax.» Acontece nas quatro versões, com uma nuance:

  • Odoo 17: conta os impostos da linha deixando de fora os de valor fixo, como as ecotaxas; tem de ficar um.
  • Odoo 18, 19 e 20: conta as categorias de imposto que vão ser escritas na linha do ficheiro; tem de haver uma.

No mesmo passo verifica BR-25: uma linha sem produto nem descrição para com «Each invoice line should have a product or a label.»

Os casos que o provocam

Caso no OdooO que fazer
Linha sem imposto, por exemplo uma despesa repercutidaAtribua-lhe o imposto correspondente, mesmo que seja de 0 % ou isento.
Dois impostos de IVA na mesma linhaDeixe um: se forem duas taxas diferentes, parta a linha em duas.
IVA mais um agravamento ou retenção na linhaVerifique se esse segundo imposto deve ir na fatura eletrónica como imposto ou de outra forma; a resposta correta depende do seu país.
Linha de texto sem produto nem descriçãoEscreva a descrição ou transforme-a em nota.

As secções e notas do Odoo não contam como linhas, por isso não provocam o aviso.

Com o nosso módulo XRechnung e ZUGFeRD

O módulo gera o XML com código próprio e não faz a verificação do Odoo: uma linha sem imposto ou com dois chega ao ficheiro tal como está. Verificámo-lo com o validador da KoSIT:

  • Linha sem imposto: sai sem categoria de IVA. Em XRechnung UBL dá UBL-SR-48, BR-CO-04 e BR-Z-08; em XRechnung CII, o formato por defeito do módulo, BR-CO-04, BR-Z-01 e BR-Z-08.
  • Linha com dois impostos: em UBL só se escreve o primeiro com percentagem, mas o total com IVA leva os dois, e dispara BR-CO-15. Em CII vão os dois na linha e o IVA total não bate com o desdobramento, e dispara BR-CO-14.
  • Linha com um imposto de 0 %: em UBL sai como Z e a KoSIT aceita-a. Em CII sai como S, e a KoSIT dá BR-S-05, além de BR-Z-01 e BR-Z-08.

Reveja os impostos de cada linha antes de gerar.

Fatura do Odoo 20 com o separador XRechnung / ZUGFeRD do módulo
Resultado da validação e Ready to send na fatura. Captura do Odoo 20 com dados de demonstração; o relatório da captura é de teste.

No Odoo 18, 19 e 20, com a subscrição do FlexigoTech Cloud, cada XRechnung e cada ZUGFeRD EN 16931 é validado com as regras da KoSIT e as regras que falhem ficam em Validation Errors. No Odoo 17 a versão publicada não valida: estes ficheiros saem sem aviso.

Passos

  1. Leia o aviso: diz se é o imposto ou o nome da linha.
  2. Abra a fatura em rascunho e reveja a coluna de impostos linha a linha.
  3. Corrija, confirme e volte a gerar o ficheiro.

Continue a ler

Erros BR-E-10, BR-AE-10, BR-IC-10 e BR-G-10: o motivo de isenção do IVABR-E-10, BR-AE-10, BR-IC-10, BR-G-10 e BR-O-10 exigem o motivo de isenção; BR-S-10 e BR-Z-10 proíbem-no. Como o Odoo 17, 18, 19 e 20 o define e onde se altera.Erro BR-CL-23: a unidade de medida da linha não é um código UN/ECEBR-CL-23 exige códigos UN/ECE para a unidade de cada linha, BR-23 que exista e PEPPOL-EN16931-R130 que coincida com a do preço. De onde o Odoo 17, 18, 19 e 20 o tiram.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.
Verificado no código do módulo (versão 17.0 e 20.0) e nas fontes indicadas

Fontes