EN16931
Fiecare linie de factură trebuie să aibă număr de linie (cbc:ID)
Codul regulii este BR-21.
Mesajul exact din validatorul ANAF
Ce înseamnă
Fiecare linie de factură (BG-25) trebuie să conțină un identificator propriu, elementul cbc:ID (BT-126), primul copil al lui cac:InvoiceLine. Fără el, ANAF nu poate identifica linia la care se referă cantitățile, prețul și cota de TVA, iar factura este respinsă. Nu contează că numărul este 1, 2, 10 sau un cod de articol: contează să existe și să fie unic în cadrul facturii.
Cum repari
Verifică generatorul de XML și asigură-te că pentru fiecare cac:InvoiceLine scrie un cbc:ID imediat după deschiderea liniei, înaintea cantității. Dacă în baza ta de date linia nu are un număr propriu, folosește numărul de ordine al liniei (1, 2, 3...), care este unic prin construcție și nu se repetă dacă reordonai liniile manual.
Exemplu
Așa pică
<ubl:Invoice xmlns:ubl="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
<cac:InvoiceLine>
</cac:InvoiceLine>
</ubl:Invoice>Așa trece
<ubl:Invoice xmlns:ubl="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
<cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
</cac:InvoiceLine>
</ubl:Invoice>În practică nu ajungi să vezi codul regulii: valoarea e respinsă mai devreme, de schema XML, iar mesajul arată cum scrie mai sus. Regula există și ea, dar prinde doar cazurile pe care schema le lasă să treacă.
ro16931-ubl-1.0.9. Factura cu fragmentul din stânga a fost respinsă cu mesajul de mai sus; cea cu fragmentul din dreapta a trecut fără nicio eroare. Verificarea s-a făcut pe 14.09.2026.Regula așa cum e scrisă în schematronul oficial
Textul oficial, în engleză
Each Invoice line (BG-25) shall have an Invoice line identifier (BT-126).
Unde se aplică
$Invoice_Line
Condiția care trebuie să fie adevărată
$BR-21
Ce nu rezultă din textul oficial al regulii
Nu pot confirma din datele primite dacă validatorul ANAF impune un format anume pentru BT-126 (de exemplu doar cifre sau o lungime maximă); EN 16931 nu restrânge formatul, dar nu exclud o condiție suplimentară în schematronul CIUS-RO. De asemenea, fragmentele sunt scrise cu rădăcina <ubl:Invoice>, conform convenției cerute, în timp ce factura de referință folosește elementul <Invoice> în spațiul de nume implicit.