Erori e-FacturaBR-CO-21

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

Codul regulii este BR-CO-21.

Mesajul exact din validatorul ANAF

textEroare=[BR-33]-Each Document level allowance (BG-20) shall have a Document level allowance reason (BT-97) or a Document level allowance reason code (BT-98).
textEroare=[BR-CO-21]-Each Document level allowance (BG-20) shall contain a Document level allowance reason (BT-97) or a Document level allowance reason code (BT-98), or both.

Ce inseamna

O reducere trecută la nivel de factură (nu pe linie), adică grupul cac:AllowanceCharge cu ChargeIndicator=false din zona de după condițiile de plată, trebuie să spună și de ce se acordă. Este suficient un singur lucru: fie motivul scris în clar (BT-97, cbc:AllowanceChargeReason), fie codul de motiv (BT-98, cbc:AllowanceChargeReasonCode), fie amândouă. Validatorul dă eroarea când grupul are indicator și sumă, dar nu are nici motiv, nici cod. Regula se uită doar la reducerile de la nivel de factură, nu la cele de pe linia facturii.

Cum repari

În programul de facturare, la reducerea globală de pe factură completați câmpul de motiv (text liber, orice formulare) sau, dacă programul are lista de coduri, câmpul de cod motiv cu 95 = discount. Dacă adăugați acum reducerea, verificați că totalurile s-au recalculat: baza de impozitare scade cu reducerea, iar TVA-ul și totalul de plată se recalculează din noua bază.

Exemplu

Asa pica

<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:PaymentTerms>
    <cbc:Note>Plata la 30 de zile de la emitere.</cbc:Note>
  </cac:PaymentTerms>
  <cac:AllowanceCharge>
    <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
    <cbc:Amount currencyID="RON">100.00</cbc:Amount>
    <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:AllowanceCharge>
  <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">1000.00</cbc:LineExtensionAmount>
    <cbc:TaxExclusiveAmount currencyID="RON">900.00</cbc:TaxExclusiveAmount>
    <cbc:TaxInclusiveAmount currencyID="RON">1071.00</cbc:TaxInclusiveAmount>
    <cbc:AllowanceTotalAmount currencyID="RON">100.00</cbc:AllowanceTotalAmount>
    <cbc:PayableAmount currencyID="RON">1071.00</cbc:PayableAmount>
  </cac:LegalMonetaryTotal>
</ubl:Invoice>

Asa 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:PaymentTerms>
    <cbc:Note>Plata la 30 de zile de la emitere.</cbc:Note>
  </cac:PaymentTerms>
  <cac:AllowanceCharge>
    <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
    <cbc:AllowanceChargeReason>Discount comercial acordat</cbc:AllowanceChargeReason>
    <cbc:Amount currencyID="RON">100.00</cbc:Amount>
    <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:AllowanceCharge>
  <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">1000.00</cbc:LineExtensionAmount>
    <cbc:TaxExclusiveAmount currencyID="RON">900.00</cbc:TaxExclusiveAmount>
    <cbc:TaxInclusiveAmount currencyID="RON">1071.00</cbc:TaxInclusiveAmount>
    <cbc:AllowanceTotalAmount currencyID="RON">100.00</cbc:AllowanceTotalAmount>
    <cbc:PayableAmount currencyID="RON">1071.00</cbc:PayableAmount>
  </cac:LegalMonetaryTotal>
</ubl:Invoice>

Greseala asta strica si alte verificari, deci in acelasi raspuns vei gasi si: BR-33. Le repari pe toate odata cu asta.

Verificat. Am pus fiecare din cele doua fragmente intr-o factura completa si le-am trecut prin validatorul oficial ANAF, versiunea ro16931-ubl-1.0.9. Factura cu fragmentul din stanga a fost respinsa cu exact mesajul de mai sus; cea cu fragmentul din dreapta a trecut fara nicio eroare. Verificarea s-a facut pe 14.09.2026.
Regula asa cum e scrisa in schematronul oficial

Textul oficial, in engleza

Each Document level allowance (BG-20) shall contain a Document level allowance reason (BT-97) or a Document level allowance reason code (BT-98), or both.

Unde se aplica

$Document_level_allowances

Conditia care trebuie sa fie adevarata

$BR-CO-21
Ce nu rezulta din textul oficial al regulii

Valoarea reducerii (100,00 RON) și textul motivului sunt alese de mine pentru exemplu, ca socoteala să se poată face din cap (1.000,00 - 100,00 = 900,00; 19% = 171,00; total 1.071,00) - în factura dumneavoastră puneți suma și motivul reale. Nu am putut verifica în validatorul ANAF valoarea exactă a codului pentru BT-98 (lista UNTDID 5189), de aceea exemplul corect folosește textul motivului, care este oricum acceptat.