Montant net du sous-total

Erreur BR-FXEXT-08 Factur-X

Si le « Sous-type de la ligne de facture » (BT-X-8) a la valeur « Sous-total » (GROUP) et que le « Montant net de la ligne de facture » (BT-131) est spécifié, il doit correspondre à la somme des BT-131 des niveaux immédiatement inférieurs pour lesquels le « Sous-type de la ligne de facture » (BT-X-8) a la valeur « Ligne normale (cas standard) » (DETAIL) ou « Sous-total » (GROUP). En conséquence, tous les niveaux inférieurs doivent contenir une valeur BT-131 lorsque BT-X-8 a la valeur DETAIL ou GROUP.

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 LineStatusReasonCode a la valeur GROUP et que LineTotalAmount est renseigné, ce montant doit être égal à la somme des valeurs LineTotalAmount des lignes directement rattachées ayant le sous-type DETAIL ou GROUP. Le test arrondit la somme à deux décimales.

Ce que signifie la règle

Le montant net d’un sous-total doit correspondre aux montants nets des lignes de facture subordonnées qui lui sont rattachées. Cela garantit la cohérence arithmétique de la hiérarchie des lignes.

Champs concernés BT-X-8 BT-131
Veuillez ajuster le montant net du sous-total

Le montant net d’une ligne de facture marquée GROUP ne correspond pas aux montants de ses lignes directement subordonnées. Ajustez ce montant ou ceux des lignes associées.

Que faire ?
  1. Vérifiez la valeur de LineTotalAmount sur le sous-total.
  2. Comparez-la aux valeurs LineTotalAmount des lignes directement associées marquées DETAIL ou GROUP.
  3. Vérifiez que chacune de ces lignes comporte un montant net.
  4. Générez de nouveau la facture et vérifiez-la une nouvelle fois.
À quoi cela ressemble
✗ Déclenche le message
<ram:IncludedSupplyChainTradeLineItem>
  <ram:AssociatedDocumentLineDocument>
    <ram:LineID>1</ram:LineID>
    <ram:LineStatusReasonCode>GROUP</ram:LineStatusReasonCode>
  </ram:AssociatedDocumentLineDocument>
  <ram:SpecifiedLineTradeSettlement>
    <ram:SpecifiedTradeSettlementLineMonetarySummation>
      <ram:LineTotalAmount>10.00</ram:LineTotalAmount>
    </ram:SpecifiedTradeSettlementLineMonetarySummation>
  </ram:SpecifiedLineTradeSettlement>
</ram:IncludedSupplyChainTradeLineItem>
<ram:IncludedSupplyChainTradeLineItem>
  <ram:AssociatedDocumentLineDocument>
    <ram:LineID>2</ram:LineID>
    <ram:ParentLineID>1</ram:ParentLineID>
    <ram:LineStatusReasonCode>DETAIL</ram:LineStatusReasonCode>
  </ram:AssociatedDocumentLineDocument>
  <ram:SpecifiedLineTradeSettlement>
    <ram:SpecifiedTradeSettlementLineMonetarySummation>
      <ram:LineTotalAmount>4.00</ram:LineTotalAmount>
    </ram:SpecifiedTradeSettlementLineMonetarySummation>
  </ram:SpecifiedLineTradeSettlement>
</ram:IncludedSupplyChainTradeLineItem>
✓ Correct
<ram:IncludedSupplyChainTradeLineItem>
  <ram:AssociatedDocumentLineDocument>
    <ram:LineID>1</ram:LineID>
    <ram:LineStatusReasonCode>GROUP</ram:LineStatusReasonCode>
  </ram:AssociatedDocumentLineDocument>
  <ram:SpecifiedLineTradeSettlement>
    <ram:SpecifiedTradeSettlementLineMonetarySummation>
      <ram:LineTotalAmount>4.00</ram:LineTotalAmount>
    </ram:SpecifiedTradeSettlementLineMonetarySummation>
  </ram:SpecifiedLineTradeSettlement>
</ram:IncludedSupplyChainTradeLineItem>
<ram:IncludedSupplyChainTradeLineItem>
  <ram:AssociatedDocumentLineDocument>
    <ram:LineID>2</ram:LineID>
    <ram:ParentLineID>1</ram:ParentLineID>
    <ram:LineStatusReasonCode>DETAIL</ram:LineStatusReasonCode>
  </ram:AssociatedDocumentLineDocument>
  <ram:SpecifiedLineTradeSettlement>
    <ram:SpecifiedTradeSettlementLineMonetarySummation>
      <ram:LineTotalAmount>4.00</ram:LineTotalAmount>
    </ram:SpecifiedTradeSettlementLineMonetarySummation>
  </ram:SpecifiedLineTradeSettlement>
</ram:IncludedSupplyChainTradeLineItem>
À vérifier dans FactoorSharp
  • AssociatedDocument.LineStatusReasonCode (BT-X-8)
  • LineStatusReasonCodes (BT-X-8)
  • TradeLineItem.LineTotalAmount (BT-131)
Détails techniques

Le test compare le LineTotalAmount d’une ligne à la somme arrondie à deux décimales des lignes dont ParentLineID correspond au LineID de cette ligne et dont LineStatusReasonCode vaut DETAIL ou GROUP.

Où la règle s'applique

La règle s’applique aux lignes de facture dans IncludedSupplyChainTradeLineItem. Elle compare le montant d’une ligne marquée GROUP à celui de ses lignes directement subordonnées.

Message d'origine du Schematron
If the "Subtype of invoice item" (BT-X-8) has the value "Subtotal" (GROUP) and the "Net amount of the invoice item" (BT-131) is specified, it must correspond to the sum of the BT-131 of the next lower levels for which the "Subtype of the invoice item" (BT-X-8) has the value "Regular item (standard case)" (DETAIL) or "Subtotal" (GROUP). As a consequence, all lower levels shall contain a BT-131 value, when BT-X-8 has the value DETAIL or GROUP.
Contexte (rule/@context)
//ram:IncludedSupplyChainTradeLineItem
Expression de contrôle (assert/@test)
every $item in //ram:IncludedSupplyChainTradeLineItem[ ram:AssociatedDocumentLineDocument/ram:LineStatusReasonCode = 'GROUP' and normalize-space(ram:SpecifiedLineTradeSettlement/ ram:SpecifiedTradeSettlementLineMonetarySummation/ ram:LineTotalAmount) != '' ] satisfies number(normalize-space($item/ram:SpecifiedLineTradeSettlement/ ram:SpecifiedTradeSettlementLineMonetarySummation/ ram:LineTotalAmount)) = round(sum( for $child in //ram:IncludedSupplyChainTradeLineItem[ normalize-space(ram:AssociatedDocumentLineDocument/ram:ParentLineID) = normalize-space($item/ ram:AssociatedDocumentLineDocument/ram:LineID) and ( ram:AssociatedDocumentLineDocument/ram:LineStatusReasonCode = 'DETAIL' or ram:AssociatedDocumentLineDocument/ram:LineStatusReasonCode = 'GROUP' ) ] return number(normalize-space( $child/ram:SpecifiedLineTradeSettlement/ ram:SpecifiedTradeSettlementLineMonetarySummation/ ram:LineTotalAmount)) )*100) div 100