Rapprocher le total de la facture TVA comprise

Erreur BR-FXEXT-CO-15 Factur-X

Si le montant total de TVA de la facture (BT-110), dont la devise (BT-110-0) est égale à BT-5, est présent, alors la valeur absolue de (Montant total de la facture TVA comprise (BT-112) - Montant total de la facture hors TVA (BT-109) - Montant total de TVA de la facture (BT-110)) <= 0,01 * (Nombre de montants nets des lignes de facture (BT-131) + Nombre de montants de remise au niveau du document (BT-92) + Nombre de montants de charge ou frais au niveau du document (BT-99) + Nombre de montants des frais de service (BT-X-272). Sinon, le montant total de la facture TVA comprise (BT-112) est égal au montant total de la facture hors TVA (BT-109).

Règle obligatoire : tant qu'elle n'est pas respectée, la facture est invalide et sera rejetée par les validateurs.
Ce qui ne va pas

Si un seul ram:TaxTotalAmount dans la devise de la facture est présent, ram:GrandTotalAmount doit être égal à la somme de ram:TaxBasisTotalAmount et de ce montant de taxe, avec une tolérance de 0,01 par ligne de facture, remise ou charge prise en compte. S’il n’y a pas exactement un tel montant de taxe, ram:GrandTotalAmount doit être égal à ram:TaxBasisTotalAmount.

Ce que signifie la règle

Le total de la facture TVA comprise (BT-112) découle du montant hors TVA (BT-109) et du montant de taxe dans la devise de la facture (BT-110). S’il n’y a pas exactement un montant de taxe dans la devise de la facture, la règle exige l’égalité de BT-112 et BT-109.

Veuillez rapprocher le total de la facture TVA comprise

Le total de la facture TVA comprise ne correspond pas au montant hors TVA augmenté du montant de taxe dans la devise de la facture. S’il n’y a pas exactement un montant de taxe dans la devise de la facture, les deux totaux de facture doivent être égaux.

Que faire ?
  1. Comparez ram:GrandTotalAmount à ram:TaxBasisTotalAmount et au montant de ram:TaxTotalAmount dont currencyID correspond à ram:InvoiceCurrencyCode.
  2. Vérifiez la devise de la facture à l’aide de Currency et les montants à l’aide de GrandTotalAmount, TaxBasisAmount et TaxTotalAmount.
  3. S’il n’y a pas exactement un montant de taxe dans la devise de la facture, rapprochez ram:GrandTotalAmount et ram:TaxBasisTotalAmount.
  4. Générez à nouveau la facture et vérifiez-la de nouveau.
À vérifier dans FactoorSharp
  • AbstractTradeAllowanceCharge.ActualAmount (Document level allowance: BT-92; Document level charge: BT-99)
  • FacturXInvoice.Currency (Invoice currency: BT-5)
  • FacturXInvoice.GrandTotalAmount (BT-112)
  • FacturXInvoice.TaxBasisAmount (BT-109)
  • FacturXInvoice.TaxTotalAmount (BT-110)
Détails techniques

Le test compte les éléments ram:TaxTotalAmount dont currencyID est égal à ram:InvoiceCurrencyCode. S’il y a exactement une correspondance, il vérifie que l’écart absolu entre ram:GrandTotalAmount et la somme de ram:TaxBasisTotalAmount et de ce montant de taxe ne dépasse pas 0,01 multiplié par le nombre de lignes, remises et charges prises en compte. Pour tout autre nombre de correspondances, il vérifie que ram:GrandTotalAmount est égal à ram:TaxBasisTotalAmount.

Où la règle s'applique

S’applique à ram:GrandTotalAmount et ram:TaxBasisTotalAmount dans le récapitulatif monétaire. Le test compare également les montants de taxe dans ram:TaxTotalAmount dont currencyID correspond à la devise de la facture dans ram:InvoiceCurrencyCode.

Message d'origine du Schematron
If Invoice Total VAT amount (BT-110) ,where currency (BT-110-0) is equal to BT-5, is present, then the Absolute Value of (Invoice total amount with VAT (BT-112) - Invoice total amount without VAT (BT-109) - Invoice total VAT amount (BT-110)) <= 0,01 * (Number of line net amounts (BT-131) + Number of Document level allowance amounts (BT-92) + Number of Document level charges amounts (BT-99) + Number of Logistics Service fee amounts (BT-X-272). Else, Invoice total amount with VAT (BT-112) is equal to Invoice total amount without VAT (BT-109).
Contexte (rule/@context)
//ram:SpecifiedTradeSettlementHeaderMonetarySummation
Expression de contrôle (assert/@test)
for $Currency in ../ram:InvoiceCurrencyCode, $BT109 in xs:decimal(ram:TaxBasisTotalAmount), $BT110 in xs:decimal(ram:TaxTotalAmount[@currencyID=$Currency]), $BT112 in xs:decimal(ram:GrandTotalAmount), $nbTaxTotalAmountInvoiceCurrency in count (ram:TaxTotalAmount[@currencyID=$Currency] ), $nbLineItems in xs:decimal(count(../../ram:IncludedSupplyChainTradeLineItem[ not(ram:AssociatedDocumentLineDocument/ram:LineStatusReasonCode) or ram:AssociatedDocumentLineDocument/ram:LineStatusReasonCode = 'DETAIL' ])), $nbAllowanceItems in xs:decimal(count(../ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/ udt:Indicator='false'])), $nbChargeItems in xs:decimal(count(../ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/ udt:Indicator='true']) + count(../ram:SpecifiedLogisticsServiceCharge)), $tolerance in xs:decimal(0.01), $maxTolerance in $tolerance * ($nbLineItems + $nbAllowanceItems + $nbChargeItems), $diff in xs:decimal($BT112 - $BT110 - $BT109), $abs in xs:decimal(abs($diff)) return ( $abs le $maxTolerance and $nbTaxTotalAmountInvoiceCurrency eq 1 ) or ($BT109 eq $BT112 and $nbTaxTotalAmountInvoiceCurrency ne 1)