EN16931
Discountul de pe factură trebuie să aibă motiv sau cod de motiv
Codul regulii este BR-CO-21.
Mesajul exact din validatorul ANAF
Ce înseamnă
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
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: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>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: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>Greșeala asta strică și alte verificări, deci în același răspuns vei găsi și: BR-33. Le repari pe toate odată cu asta.
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 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 aplică
$Document_level_allowances
Condiția care trebuie să fie adevărată
$BR-CO-21
Ce nu rezultă 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.