EN16931
Discountul pe factură trebuie să aibă suma completată
Codul regulii este BR-31.
Mesajul exact din validatorul ANAF
Ce înseamnă
Când acorzi o reducere care se aplică pe toată factura, nu pe o singură linie, ea se scrie în grupul AllowanceCharge de la nivel de document (BG-20). Regula BR-31 cere ca acest grup să conțină obligatoriu suma reducerii, BT-92, adică elementul cbc:Amount. Fără sumă, ANAF nu poate verifica totalurile facturii și fișierul se respinge.
Cum repari
În programul de facturare, la discountul pe factură completează câmpul sumă (BT-92). Dacă suma se schimbă, actualizează în același pas totalul reducerilor (BT-107), baza impozabilă (BT-109), TVA-ul (BT-110) și totalul de plată (BT-115), altfel factura pică pe alte reguli de aritmetică. Dacă discountul rămâne fără sumă, șterge complet grupul AllowanceCharge.
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:AllowanceChargeReason>Discount comercial acordat pe factura</cbc:AllowanceChargeReason>
<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 pe factura</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>Î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 Document level allowance (BG-20) shall have a Document level allowance amount (BT-92).
Unde se aplică
$Document_level_allowances
Condiția care trebuie să fie adevărată
$BR-31
Ce nu rezultă din textul oficial al regulii
Valoarea discountului (100,00 RON) și sumele recalculate din exemplu (bază 900,00; TVA 171,00; total 1.071,00) sunt alese rotund pentru verificare din cap; în factura ta pui discountul real și recalculezi toate totalurile. Ordinea elementelor din AllowanceCharge (ChargeIndicator, AllowanceChargeReason, Amount, TaxCategory) respectă secvența UBL, dar nu am putut confirma aici dacă validatorul ANAF cere suplimentar și un cod de motiv în locul textului liber.