BR-27 : Prix net unitaire négatif
Corrigez le prix dans les données sources. Pour un avoir, vérifiez le type de document et le signe des quantités ; ne retirez pas arbitrairement le signe moins.
Champs : BT-146.
Le prix est le seul opérande modifié dans cette paire : PriceAmount devient -1.00 alors que la quantité et les autres données restent fixes. En CII, le champ correspondant est ChargeAmount dans NetPriceProductTradePrice. Il se distingue du prix brut avant remise. Une modification arbitraire du total documentaire ne corrige pas le signe du prix unitaire. Examinez le type de document, la convention de quantité et le prix source ensemble. La valeur positive de l’exemple réussi démontre uniquement cette position synthétique.
Conditions sources et champs
UBL en16931 : le contexte cac:InvoiceLine | cac:CreditNoteLine sélectionne les nœuds contrôlés ; la condition porte sur Price, PriceAmount.
context: cac:InvoiceLine | cac:CreditNoteLine
test: (cac:Price/cbc:PriceAmount) >= 0CII en16931 : le contexte //ram:IncludedSupplyChainTradeLineItem sélectionne les nœuds contrôlés ; la condition porte sur SpecifiedLineTradeAgreement, NetPriceProductTradePrice, ChargeAmount.
context: //ram:IncludedSupplyChainTradeLineItem
test: (ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:ChargeAmount) >= 0Les champs sont localisés par contexte source → sélecteur ; les alternatives et conditions de syntaxe restent explicites.
| BT/BG | UBL | CII | Source |
|---|---|---|---|
| BT-146 | cac:InvoiceLine | cac:CreditNoteLine → exists(cac:Price/cbc:PriceAmount) | //ram:IncludedSupplyChainTradeLineItem → (ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:ChargeAmount) | BR-26 |
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:InvoiceLine[1]/cac:Price/cbc:PriceAmount : valeur erronée '-1.00', valeur restaurée '100.00'. Le document UBL erroné passe XSD et produit BR-27 ; sa correction passe EN 16931 rules 1.3.16. Autres codes déclenchés : 0.
Fragment erroné
<cac:Price 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:PriceAmount currencyID="EUR">-1.00</cbc:PriceAmount>
</cac:Price>
Fragment corrigé
<cac:Price 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:PriceAmount currencyID="EUR">100.00</cbc:PriceAmount>
</cac:Price>
Messages communs dans nos mutations
Dans les 1 338 mutations synthétiques enregistrées, BR-27 apparaît dans 51 essais (ubl/en16931 32, ubl/xrechnung 3, cii/en16931 12, cii/xrechnung 4). Les mêmes essais produisent aussi : BR-26: 21; PEPPOL-EN16931-R120: 7; CII-SR-439: 2.
Champs et règles associés
Diagnostic et emplacement dans le rapport
[BR-27]-The Item net price (BT-146) shall NOT be negative.
/*:Invoice[namespace-uri()='urn:oasis:names:specification:ubl:schema:xsd:Invoice-2'][1]/*:InvoiceLine[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.