Rapprocher les charges et les frais de services logistiques

Erreur BR-FXEXT-CO-12 Factur-X

Valeur absolue de (Somme des charges ou frais au niveau du document (BT-108) - Σ Montants de charge ou frais au niveau du document (BT-99) - Σ Montants des frais de service (BT-x-272))<= 0,01 * (Nombre de montants de charge ou frais au niveau du document (BT-99) + Nombre de montants des frais de service (BT-X-272)).

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

ram:ChargeTotalAmount doit correspondre à la somme des charges au niveau du document (BT-99) et des frais de services logistiques (BT-X-272). L’écart autorisé est au maximum de 0,01 par charge ou frais de services logistiques enregistré ; le total ne doit pas manquer lorsque de tels montants sont présents.

Ce que signifie la règle

BT-108 représente le montant total des charges au niveau du document. Il comprend les charges individuelles BT-99 et les frais de services logistiques BT-X-272, sous réserve de la tolérance d’arrondi définie.

Champs concernés BT-108 BT-99 BT-X-272
Veuillez rapprocher le total des charges et des frais de services logistiques

Le total des charges ne correspond pas suffisamment aux charges au niveau du document et aux frais de services logistiques, ou le total manque. Rapprochez le total des montants individuels enregistrés.

Que faire ?
  1. Comparez ram:ChargeTotalAmount aux valeurs ram:ActualAmount des charges et aux valeurs ram:AppliedAmount des frais de services logistiques.
  2. Vérifiez le total à l’aide de ChargeTotalAmount et les montants individuels des charges à l’aide de ActualAmount.
  3. Tenez compte de la tolérance autorisée de 0,01 par charge ou frais de services logistiques.
  4. Générez à nouveau la facture et vérifiez-la de nouveau.
À vérifier dans FactoorSharp
  • FacturXInvoice.ChargeTotalAmount (BT-108)
  • AbstractTradeAllowanceCharge.ActualAmount (Document level charge: BT-99)
Détails techniques

Le test compare ram:ChargeTotalAmount à la somme arrondie des valeurs ram:ActualAmount des charges pour lesquelles ram:ChargeIndicator/udt:Indicator='true', ainsi qu’aux valeurs ram:AppliedAmount de ram:SpecifiedLogisticsServiceCharge. La tolérance absolue est de 0,01 multiplié par le nombre total de ces éléments ; la condition est également satisfaite si aucun élément ni total n’est présent.

Où la règle s'applique

S’applique au total des charges dans ram:SpecifiedTradeSettlementHeaderMonetarySummation, aux éléments ram:SpecifiedTradeAllowanceCharge au niveau du document et à ram:SpecifiedLogisticsServiceCharge.

Message d'origine du Schematron
Absolute Value of (Sum of charges on document level (BT-108) - Σ Document level charge amounts (BT-99) - Σ Logistics Service fee amounts (BT-x-272))<= 0,01 * (Number of Document level charge amounts (BT-99) + Number of Logistics Service fee amounts (BT-X-272)).
Contexte (rule/@context)
//ram:SpecifiedTradeSettlementHeaderMonetarySummation
Expression de contrôle (assert/@test)
( not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator='true']) and not (ram:ChargeTotalAmount) ) or ( for $calculatedAmount in xs:decimal(xs:decimal(round(sum(/rsm:CrossIndustryInvoice/ rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator='true']/ ram:ActualAmount)* 100 ) div 100)+ xs:decimal(round(sum(/rsm:CrossIndustryInvoice/ rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ ram:SpecifiedLogisticsServiceCharge/ram:AppliedAmount)* 10 * 10 ) div 100)), $totalAmount in xs:decimal(ram:ChargeTotalAmount), $nbChargeItems in xs:decimal(count(../ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/ udt:Indicator='true']) + count(../ram:SpecifiedLogisticsServiceCharge)), $tolerance in xs:decimal(0.01), $maxTolerance in $nbChargeItems * $tolerance, $diff in xs:decimal($totalAmount - $calculatedAmount), $abs in xs:decimal(abs($diff)) return $abs le $maxTolerance )