Erori e-Factura

EN16931

Discount de linie fara suma: factură e respinsa de ANAF

Codul regulii este BR-41.

Mesajul exact din validatorul ANAF

org.xml.sax.SAXParseException; lineNumber: 161; columnNumber: 186; cvc-complex-type.2.4.b: The content of element 'cac:AllowanceCharge' is not complete. One of '{"urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2":AllowanceChargeReason, "urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2":MultiplierFactorNumeric, "urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2":PrepaidIndicator, "urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2":SequenceNumeric, "urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2":Amount}' is expected.

Ce înseamnă

Când pe o linie de factură apare un discount (sau o penalizare) de linie, adica grupul BG-27, el trebuie să contina obligatoriu și suma lui, BT-136. In UBL, discountul de linie este un cac:AllowanceCharge cu cbc:ChargeIndicator egal cu false, iar suma lui este elementul cbc:Amount. Regula spune simplu: daca ai pus discountul pe linie, trebuie să-i spui și cât este; altfel nu se stie cu cât se reduce baza liniei.

Cum repari

In programul de facturare, la discountul aplicat pe linie completează și suma discountului (BT-136), nu doar indicatorul și motivul. Dupa ce adaugi discountul, scade-l din baza liniei și recalculeaza in jos: baza liniei (BT-131), baza de impozitare și TVA-ul din detalierea pe cote (BT-116, BT-117), apoi totalurile facturii (BT-106, BT-109, BT-112, BT-115).

Exemplu

Așa pică

<Invoice xmlns="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:AllowanceCharge>
      <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
      <cbc:AllowanceChargeReason>Discount comercial acordat la linie</cbc:AllowanceChargeReason>
    </cac:AllowanceCharge>
    <cac:Item>
      <cbc:Name>Serviciu de consultanta</cbc:Name>
      <cac:ClassifiedTaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>19.00</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:ClassifiedTaxCategory>
    </cac:Item>
    <cac:Price>
      <cbc:PriceAmount currencyID="RON">100.00</cbc:PriceAmount>
    </cac:Price>
  </cac:InvoiceLine>
</Invoice>

Așa trece

<Invoice xmlns="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:AllowanceCharge>
      <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
      <cbc:AllowanceChargeReason>Discount comercial acordat la linie</cbc:AllowanceChargeReason>
      <cbc:Amount currencyID="RON">100.00</cbc:Amount>
    </cac:AllowanceCharge>
    <cac:Item>
      <cbc:Name>Serviciu de consultanta</cbc:Name>
      <cac:ClassifiedTaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>19.00</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:ClassifiedTaxCategory>
    </cac:Item>
    <cac:Price>
      <cbc:PriceAmount currencyID="RON">100.00</cbc:PriceAmount>
    </cac:Price>
  </cac:InvoiceLine>
</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ă.

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 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 have an Invoice line allowance amount (BT-136).

Unde se aplică

$Invoice_line_allowances

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

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

Factură de referinta nu are niciun discount de linie, deci exemplul l-am construit adaugand grupul BG-27 și am recalculat sumele ca să rămână valide cap-coada: 10 x 100,00 = 1.000,00, minus discount 100,00 = 900,00 baza, TVA 19% = 171,00, total 1.071,00. Nu am putut confirma daca validatorul cere și un motiv sau un cod de motiv pentru discountul de linie; am pus doar textul motivului. De asemenea, nu am confirmat daca exista vreo regula care verifica egalitatea dintre cantitate x preț și baza liniei, sau daca doar sumele din detalierea de TVA și din totaluri sunt controlate de validator.