BR-CO-10 : Total net des lignes incorrect
Recalculez BT-106 à partir des valeurs BT-131, avec un arrondi à deux décimales. L’unique ligne vaut 100,00 EUR ; 100,01 EUR est incorrect.
Champs : BT-106, BT-131.
Conditions sources et champs
UBL en16931 : le contexte cac:LegalMonetaryTotal sélectionne les nœuds contrôlés ; la condition porte sur LineExtensionAmount, InvoiceLine, CreditNoteLine.
context: cac:LegalMonetaryTotal
test: (xs:decimal(cbc:LineExtensionAmount) = xs:decimal(round(sum(//(cac:InvoiceLine|cac:CreditNoteLine)/xs:decimal(cbc:LineExtensionAmount)) * 10 * 10) div 100))CII en16931 : le contexte //ram:SpecifiedTradeSettlementHeaderMonetarySummation sélectionne les nœuds contrôlés ; la condition porte sur LineTotalAmount, IncludedSupplyChainTradeLineItem, SpecifiedLineTradeSettlement, SpecifiedTradeSettlementLineMonetarySummation.
context: //ram:SpecifiedTradeSettlementHeaderMonetarySummation
test: xs:decimal(ram:LineTotalAmount) = round(xs:decimal(sum(../../ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount)) * xs:decimal(100)) div xs:decimal(100)Les champs sont localisés par contexte source → sélecteur ; les alternatives et conditions de syntaxe restent explicites.
| BT/BG | UBL | CII | Source |
|---|---|---|---|
| BT-106 | cac:LegalMonetaryTotal → exists(cbc:LineExtensionAmount) | //ram:SpecifiedTradeSettlementHeaderMonetarySummation → (ram:LineTotalAmount) | BR-12 |
| BT-131 | cac:InvoiceLine | cac:CreditNoteLine → exists(cbc:LineExtensionAmount) | //ram:IncludedSupplyChainTradeLineItem → (ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount) | BR-24 |
Cette condition vient des artefacts européens EN 16931 ; XRechnung ajoute des contraintes nationales et Factur-X dispose de ses propres règles CII par profil.
Exemple contrôlé
La modification value porte directement sur /*/cac:LegalMonetaryTotal/cbc:LineExtensionAmount : valeur erronée '100.01', valeur restaurée '100.00'. Le document UBL erroné passe XSD et produit BR-CO-10 ; sa correction passe EN 16931 rules 1.3.16. Autres codes déclenchés : 1.
Line net total shown: 100.01 EUR. Expected: Σ line net amounts = 100.00 EUR (one line). Difference: 0.01 EUR. Round the sum to two decimal places.
Fragment erroné
<cac:LegalMonetaryTotal xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:ubl="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
<cbc:LineExtensionAmount currencyID="EUR">100.01</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="EUR">100.00</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount currencyID="EUR">121.00</cbc:TaxInclusiveAmount>
<cbc:PayableAmount currencyID="EUR">121.00</cbc:PayableAmount>
</cac:LegalMonetaryTotal>
Fragment corrigé
<cac:LegalMonetaryTotal xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:ubl="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
<cbc:LineExtensionAmount currencyID="EUR">100.00</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="EUR">100.00</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount currencyID="EUR">121.00</cbc:TaxInclusiveAmount>
<cbc:PayableAmount currencyID="EUR">121.00</cbc:PayableAmount>
</cac:LegalMonetaryTotal>
Messages communs dans nos mutations
Dans les 1 338 mutations synthétiques enregistrées, BR-CO-10 apparaît dans 108 essais (ubl/en16931 54, ubl/xrechnung 8, cii/en16931 35, cii/xrechnung 11). Les mêmes essais produisent aussi : BR-S-08: 80; BR-24: 15; BR-CO-13: 9; PEPPOL-EN16931-R120: 7; BR-12: 3; PEPPOL-EN16931-R008: 2.
Champs et règles associés
Diagnostic et emplacement dans le rapport
[BR-CO-10]-Sum of Invoice line net amount (BT-106) = Σ Invoice line net amount (BT-131).
/*:Invoice[namespace-uri()='urn:oasis:names:specification:ubl:schema:xsd:Invoice-2'][1]/*:LegalMonetaryTotal[namespace-uri()='urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2'][1]Le rapport JSON expose ce message dans errors[] ou warnings[] avec ce code et ce chemin ; l’interface l’affiche dans le rapport des règles métier.