Eroare BR-23 e-Factura: unitate de masura lipsa (BT-130)

Eroarea BR-23 apare cand atributul unitCode lipseste de pe elementul InvoicedQuantity. Afla ce coduri UN/CEFACT sa folosesti si cum rezolvi rapid.

Eroare BR-23 e-Factura: unitate de masura lipsa (BT-130)
Photo by Bernd 📷 Dittrich on Unsplash

Daca ANAF a returnat eroarea BR-23, cauza este simpla: una dintre liniile facturii tale nu are completat atributul unitCode pe elementul InvoicedQuantity. In XML, cantitatea fara unitate arata asa: <cbc:InvoicedQuantity>5</cbc:InvoicedQuantity>. Fara atributul unitCode, validatorul ANAF respinge intreaga factura.

Ce inseamna eroarea BR-23

Regula BR-23 vine din standardul european EN 16931 si spune ca orice linie de factura trebuie sa indice nu doar cantitatea, ci si unitatea de masura in care aceasta se exprima. In UBL 2.1, unitatea de masura se specifica prin atributul unitCode pe elementul cbc:InvoicedQuantity.

Campul tehnic este BT-130 (Invoiced quantity unit of measure code). Valoarea acestuia trebuie sa fie un cod valid din lista UN/CEFACT Recommendation 20, adoptata de standardul CIUS-RO. Nu este un camp liber text. Nu poti scrie "buc" sau "bucata" direct. Trebuie sa folosesti codul standardizat, de exemplu C62 pentru bucata.

Eroarea este fatala: factura nu este acceptata in SPV pana cand toate liniile au unitCode completat cu un cod valid.

De ce apare aceasta eroare

Exista mai multe cauze frecvente care declanseaza BR-23.

1. Softul de facturare nu mapeaza unitatile la coduri UN/CEFACT. Cele mai multe sisteme de contabilitate sau ERP au propriile denumiri pentru unitati ("buc", "ora", "kg"). Daca exportul XML nu translateaza aceste denumiri la codurile standard, campul unitCode ramane gol sau lipseste complet.

2. Generare XML manuala sau prin script propriu. Daca ai un script care construieste XML-ul, e usor sa omiti atributul unitCode cand adaugi elementul InvoicedQuantity. Atributul nu face parte din valoarea elementului, ci este un atribut XML separat, ceea ce il face mai usor de omis.

3. Export dintr-un template vechi. Template-uri de factura create inainte de introducerea obligatorie a e-Factura adesea nu includ campul unitCode deoarece nu era necesar in formatul anterior.

4. Produse fara unitate de masura definita. Daca in baza ta de date un produs nu are unitate de masura selectata, exportul va genera o cantitate fara atribut. Validarea se opreste la prima linie invalida.

5. Copiere XML din alt sistem. Daca ai preluat un fragment XML dintr-un sistem care folosea un format diferit, este posibil ca structura elementului de cantitate sa nu corespunda specificatiei UBL 2.1 ceruta de CIUS-RO.

Exemplu XML si coduri unitCode

Mai jos este structura incorecta urmata de structura corecta pentru doua tipuri de produse.

XML incorect (lipseste unitCode):

<!-- INCORECT: lipseste atributul unitCode -->
<cac:InvoiceLine>
  <cbc:ID>1</cbc:ID>
  <cbc:InvoicedQuantity>5</cbc:InvoicedQuantity>
  <cbc:LineExtensionAmount currencyID="RON">500.00</cbc:LineExtensionAmount>
</cac:InvoiceLine>

XML corect pentru un produs vandut la bucata:

<!-- CORECT: unitCode prezent pe InvoicedQuantity -->
<cac:InvoiceLine>
  <cbc:ID>1</cbc:ID>
  <cbc:InvoicedQuantity unitCode="C62">5</cbc:InvoicedQuantity>
  <cbc:LineExtensionAmount currencyID="RON">500.00</cbc:LineExtensionAmount>
</cac:InvoiceLine>

XML corect pentru un serviciu facturat la ora:

<!-- CORECT: serviciu facturat la ora -->
<cac:InvoiceLine>
  <cbc:ID>1</cbc:ID>
  <cbc:InvoicedQuantity unitCode="HUR">8</cbc:InvoicedQuantity>
  <cbc:LineExtensionAmount currencyID="RON">800.00</cbc:LineExtensionAmount>
</cac:InvoiceLine>

Tabelul de mai jos contine cele mai folosite coduri UN/CEFACT Recommendation 20 in facturile romanesti.

Cod Denumire EN Denumire RO
C62Unit / OneBucata / unitate
HURHourOra
DAYDayZi
MONMonthLuna
ANNYearAn
KGMKilogramKilogram
GRMGramGram
TNETonneTona
MTRMetreMetru
CMTCentimetreCentimetru
MTKSquare metreMetru patrat
MTQCubic metreMetru cub
LTRLitreLitru
MLTMillilitreMililitru
XBXBoxCutie
XPKPackagePachet
XPLPalletPalet
SETSetSet
PRPairPereche
KWHKilowatt hourKilowatt ora

Daca unitatea ta nu se regaseste in tabel, consulta lista completa in Anexa CIUS-RO sau in documentul UN/CEFACT Recommendation 20. Lista contine peste 400 de coduri.

Cum o rezolvi pas cu pas

  1. Identifica liniile fara unitCode. Deschide fisierul XML si cauta toate elementele InvoicedQuantity. Fiecare trebuie sa aiba atributul unitCode prezent si completat cu un cod valid.
  2. Alege codul corect din tabelul de mai sus. Cel mai folosit este C62 pentru produse vandute la bucata. Pentru servicii, HUR (ora), DAY (zi) sau MON (luna) sunt cele mai frecvente.
  3. Adauga atributul in XML. Elementul corect arata asa: <cbc:InvoicedQuantity unitCode="C62">5</cbc:InvoicedQuantity>. Codul se trece ca valoare a atributului, fara spatii.
  4. Verifica toate liniile. Eroarea BR-23 se aplica per linie. Daca ai 10 linii si doar una lipseste unitCode, tot factura este respinsa. Asigura-te ca fiecare InvoicedQuantity din document are unitCode.
  5. Actualizeaza sursa datelor. Daca eroarea vine dintr-un export ERP, adauga un camp de mapare unitate in configuratia exportului. Altfel vei corecta manual de fiecare data.
  6. Retrimite factura si verifica raspunsul din SPV.

Previne eroarea cu Billyou

Billyou mapeaza automat unitatile de masura pe care le folosesti in produsele tale la codurile UN/CEFACT cerute de CIUS-RO. Poti numi produsul "Consultanta" si selecta "ora" ca unitate, iar Billyou va scrie unitCode="HUR" in XML fara nicio interventie din partea ta.

Nu trebuie sa cunosti tabelul de coduri. Cand adaugi un produs sau serviciu in Billyou, interfata ofera lista unitatilor de masura disponibile cu denumirile lor in romana. Selectia ta se translateaza automat la codul standardizat.

Daca folosesti Billyou API, trimiti campul unitCode: "C62" in obiectul de linie de factura. Daca omiti campul, Billyou foloseste C62 ca valoare implicita si te avertizeaza sa verifici ca este corect pentru produsul respectiv. Referinta completa a campurilor este in documentatia API la billyou.ro/dev.

Citeste si articolul despre eroarea BR-CO-10 e-Factura, care apare frecvent in aceeasi sesiune de validare cand calculele de total sunt afectate de linii malformate.

Intrebari frecvente

Pot folosi un cod inventat daca unitatea mea nu e in lista?

Nu. ANAF valideaza codul fata de lista UN/CEFACT Recommendation 20. Un cod care nu exista in aceasta lista va genera o eroare de validare. Daca nu gasesti un cod potrivit, alege C62 (bucata/unitate generica) sau cauta in lista completa UN/CEFACT un cod mai specific pentru domeniul tau.

Este "buc" un cod valid?

Nu. "buc" este o abreviere romaneasca, nu un cod UN/CEFACT. Codul corect pentru bucata sau unitate generica este C62. Acesta este unul dintre cele mai folosite coduri in facturile din Romania.

Toate liniile facturii trebuie sa aiba unitCode?

Da. Regula BR-23 se aplica fiecarei linii (BG-25) in mod individual. Daca o singura linie lipseste unitCode, factura este respinsa. Nu exista exceptii pentru anumite tipuri de linii.

Ce cod folosesc pentru abonamente software sau licente?

Pentru abonamente lunare folosesti MON (luna). Pentru abonamente anuale folosesti ANN (an). Pentru licente perpetue sau activari punctuale, C62 (unitate) este alegerea corecta. Alegerea codului nu afecteaza valoarea fiscala a facturii.

Citește mai mult