Erori e-Factura

EN16931

Discountul pe linie trebuie să aibă motiv sau cod de motiv

Codul regulii este BR-CO-23.

Mesajul exact din validatorul ANAF

textEroare=[BR-42]-Each Invoice line allowance (BG-27) shall have an Invoice line allowance reason (BT-139) or an Invoice line allowance reason code (BT-140).
textEroare=[BR-CO-23]-Each Invoice line allowance (BG-27) shall contain an Invoice line allowance reason (BT-139) or an Invoice line allowance reason code (BT-140), or both.

Ce înseamnă

Când acorzi o reducere pe o singură linie de factură (nu la nivelul întregii facturi), grupul de reducere trebuie să spună și de ce se acordă: fie printr-un text liber, fie printr-un cod de motiv. Validatorul nu verifică valoarea reducerii, ci doar că nu lipsește orice explicație. Fără motiv sau cod, factura se respinge chiar dacă toate cifrele sunt corecte.

Cum repari

În programul de facturare, la fiecare reducere pusă pe linie completează câmpul de motiv (text liber) sau codul de motiv din nomenclatorul agreat de EN 16931. Ai grijă că reducerea de pe linie scade netul liniei: netul liniei, baza de TVA și totalurile facturii trebuie recalculate, altfel factura pică pe regulile de aritmetică.

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:TaxTotal>
    <cbc:TaxAmount currencyID="RON">171.00</cbc:TaxAmount>
    <cac:TaxSubtotal>
      <cbc:TaxableAmount currencyID="RON">900.00</cbc:TaxableAmount>
      <cbc:TaxAmount currencyID="RON">171.00</cbc:TaxAmount>
      <cac:TaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>19.00</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:TaxCategory>
    </cac:TaxSubtotal>
  </cac:TaxTotal>
  <cac:LegalMonetaryTotal>
    <cbc:LineExtensionAmount currencyID="RON">900.00</cbc:LineExtensionAmount>
    <cbc:TaxExclusiveAmount currencyID="RON">900.00</cbc:TaxExclusiveAmount>
    <cbc:TaxInclusiveAmount currencyID="RON">1071.00</cbc:TaxInclusiveAmount>
    <cbc:PayableAmount currencyID="RON">1071.00</cbc:PayableAmount>
  </cac:LegalMonetaryTotal>
  <cac:InvoiceLine>
    <cbc:ID>1</cbc:ID>
    <cbc:InvoicedQuantity unitCode="H87">10</cbc:InvoicedQuantity>
    <cbc:LineExtensionAmount currencyID="RON">900.00</cbc:LineExtensionAmount>
    <cac:Price>
      <cbc:PriceAmount currencyID="RON">100.00</cbc:PriceAmount>
    </cac:Price>
    <cac:AllowanceCharge>
      <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
      <cbc:Amount currencyID="RON">100.00</cbc:Amount>
    </cac:AllowanceCharge>
  </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:TaxTotal>
    <cbc:TaxAmount currencyID="RON">171.00</cbc:TaxAmount>
    <cac:TaxSubtotal>
      <cbc:TaxableAmount currencyID="RON">900.00</cbc:TaxableAmount>
      <cbc:TaxAmount currencyID="RON">171.00</cbc:TaxAmount>
      <cac:TaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>19.00</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:TaxCategory>
    </cac:TaxSubtotal>
  </cac:TaxTotal>
  <cac:LegalMonetaryTotal>
    <cbc:LineExtensionAmount currencyID="RON">900.00</cbc:LineExtensionAmount>
    <cbc:TaxExclusiveAmount currencyID="RON">900.00</cbc:TaxExclusiveAmount>
    <cbc:TaxInclusiveAmount currencyID="RON">1071.00</cbc:TaxInclusiveAmount>
    <cbc:PayableAmount currencyID="RON">1071.00</cbc:PayableAmount>
  </cac:LegalMonetaryTotal>
  <cac:InvoiceLine>
    <cbc:ID>1</cbc:ID>
    <cbc:InvoicedQuantity unitCode="H87">10</cbc:InvoicedQuantity>
    <cbc:LineExtensionAmount currencyID="RON">900.00</cbc:LineExtensionAmount>
    <cac:Price>
      <cbc:PriceAmount currencyID="RON">100.00</cbc:PriceAmount>
    </cac:Price>
    <cac:AllowanceCharge>
      <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
      <cbc:AllowanceChargeReason>Reducere comerciala 10%</cbc:AllowanceChargeReason>
      <cbc:Amount currencyID="RON">100.00</cbc:Amount>
    </cac:AllowanceCharge>
  </cac:InvoiceLine>
</ubl:Invoice>

Greșeala asta strică și alte verificări, deci în același răspuns vei găsi și: BR-42. Le repari pe toate odată cu asta.

Verificat. Am pus fiecare din cele două fragmente într-o factură completă și le-am trecut prin validatorul oficial ANAF, versiunea ro16931-ubl-1.0.9. Factura cu fragmentul din stânga a fost respinsă cu exact 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 allowance (BG-27) shall contain an Invoice line allowance reason (BT-139) or an Invoice line allowance reason code (BT-140), or both.

Unde se aplică

$Invoice_line_allowances

Condiția care trebuie să fie adevărată

$BR-CO-23
Ce nu rezultă din textul oficial al regulii

Factura de referință nu conține nicio reducere pe linie, așa că grupul cac:AllowanceCharge a fost adăugat integral în ambele variante, iar totalurile au fost recalculate ca să rămână valide: 10 x 100,00 = 1.000,00, minus 100,00 reducere = 900,00 net, TVA 19% = 171,00, total 1.071,00. Poziția elementului cac:AllowanceCharge în linie (după cac:Price) provine din secvența UBL 2.1 și nu a putut fi verificată pe o factură de referință care să conțină deja o reducere pe linie. Nu am folosit un cod de motiv (BT-140) pentru că nu am lista de coduri acceptată de validator, iar regula cere motivul SAU codul.