Saltar para o conteúdo principal
EN 16931 · listas de códigos

Erro BR-CL-23: a unidade de medida da linha não é um código UN/ECE

Cada linha de uma fatura eletrónica leva a sua quantidade com uma unidade, escrita como um código da Recomendação 20 da UN/ECE: C62 para unidade, por exemplo. BR-CL-23 verifica que o código está na lista, BR-23 que existe e PEPPOL-EN16931-R130 que a unidade do preço é a mesma que a da quantidade.

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
  1. BR-23, fatal «An Invoice line (BG-25) shall have an Invoiced quantity unit of measure code (BT-130).» A linha tem de levar unidade.
  2. BR-CL-23, fatal «Unit code MUST be coded according to the UN/ECE Recommendation 20 with Rec 21 extension» A unidade tem de ser um código da lista.
  3. PEPPOL-EN16931-R130, fatal «Unit code of price base quantity MUST be same as invoiced quantity.» Se o preço for por uma quantidade base, a sua unidade é a mesma que a da linha.

As duas primeiras são da EN 16931 (Schematron validation-1.3.17). A terceira é da Peppol BIS (3.0.22) e o XRechnung também a aplica.

Cartão das regras de unidade de medida
BR-CL-23, BR-23 e PEPPOL-EN16931-R130 sobre BT-130 e o atributo unitCode.

De onde o Odoo tira o código

O código que o Odoo escreve no ficheiro vem de um sítio diferente consoante a versão:

  • Odoo 17, 18 e 19: tem uma tabela que relaciona as unidades do Odoo (pelo seu identificador externo) com códigos UN/ECE. Uma unidade que criou você não está na tabela e sai como C62, unidade.
  • Odoo 20: cada unidade de medida tem o seu próprio campo de código UN/ECE, e é esse código que vai para o ficheiro. O Odoo passa-o para maiúsculas, mas não o compara com a lista.

A BR-CL-23 dispara quando o código do ficheiro não está na lista. No Odoo 20 basta um código mal escrito na unidade de medida. No Odoo 17 a 19 a tabela dá sempre um código da lista, por isso a regra só dispara se o código chegar por outro caminho, como um módulo que o altere.

Há ainda um problema que nenhuma regra vê: uma unidade própria («palete», «caixa de doze») que no Odoo 17 a 19 se converte em C62 sem avisar. O ficheiro passa a BR-CL-23, porque C62 está na lista, mas o seu cliente recebe «unidades» onde você vendeu caixas.

Para quem recebe a fatura, o código conta: o seu programa lê-o para cruzar a linha com a sua encomenda e com a entrada de mercadoria. Se encomendou caixas e a fatura diz unidades, a quantidade não bate com o que recebeu mesmo que o valor seja o mesmo, e a fatura fica parada na sua revisão.

Com o nosso módulo XRechnung e ZUGFeRD

O módulo traz a sua própria tabela, editável, de unidades do Odoo para códigos UN/ECE, para que cada unidade sua tenha o seu código em BT-130. Uma unidade que não esteja nessa tabela sai como C62, tal como no Odoo 17 a 19, e o único aviso fica no registo do servidor, que não se vê a partir da fatura. Uma linha sem unidade também sai como C62.

Tabela do módulo XRechnung que relaciona unidades do Odoo com códigos UN/ECE no Odoo 20
Minutos, unidades, horas, metros quadrados, quilowatts-hora e outras, com o seu código para BT-130. Captura do Odoo 20 com dados de demonstração.

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 um código fora da lista aparece como BR-CL-23 em Validation Errors. No Odoo 17 a versão publicada não valida.

O que rever

  1. Veja que unidade leva a linha no XML (atributo unitCode).
  2. No Odoo 20, abra a unidade de medida e defina o seu código UN/ECE.
  3. No Odoo 17, 18 e 19, se usar unidades próprias, tenha em conta que saem como C62. Com o nosso módulo, em qualquer versão, acrescente cada uma à sua tabela: as que faltarem também saem como C62.
  4. Se o preço for por quantidade base (por exemplo, por cada cem unidades), a sua unidade tem de ser a mesma que a da linha.
  5. Gere o ficheiro outra vez e verifique o atributo unitCode de cada linha antes de o enviar.

Continue a ler

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.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.Erros BR-09 e BR-11: morada do vendedor ou do comprador sem código de paísBR-09 e BR-11 exigem o código de país nas moradas do vendedor e do comprador; BR-08 e BR-10, a morada em si. O aviso do Odoo 17, 18, 19 e 20 e o que preencher.
Verificado no código do módulo (versão 17.0 e 20.0) e nas fontes indicadas

Fontes