Technique

Erreur BR-33 EN16931 : remise documentaire sans raison — codes UNCL 5189

2 min de lecture Par FacturX API

BR-33 exige qu'une DocumentLevelAllowance (BG-20) ait un Reason (BT-97) ou ReasonCode (BT-98). BR-31 concerne la présence du montant BT-92.

En bref

  • BR-33 exige qu’une DocumentLevelAllowance (BG-20) ait soit Reason (BT-97) soit ReasonCode (BT-98).
  • BR-31 est une règle DIFFÉRENTE : elle concerne la présence du montant de la remise (BT-92).
  • Le code de raison vient du subset UNCL 5189 — à revérifier dans la code-list EN16931 en vigueur avant toute génération automatique.
  • Le texte libre Reason est accepté ; le code est préféré pour l’interopérabilité inter-systèmes.
  • Réparable automatiquement par /repair quand un code raison par défaut est acceptable (best-effort, à valider métier).

Ce que l’erreur veut dire

BR-33 (règle cœur EN16931, aussi IBR-033 dans PINT) impose que toute DocumentLevelAllowance (remise documentaire au niveau facture, BG-20) déclare au moins une justification : soit Reason (texte libre, BT-97), soit ReasonCode (code du subset UNCL 5189, BT-98). Attention : BR-31 est une règle différente — elle vérifie la présence du MONTANT de la remise (BT-92), pas de la raison.

Quand cette erreur arrive

Survient quand : (a) une remise est appliquée par l’ERP sans champ libre associé ; (b) la remise est purement commerciale et n’a pas de motif explicite saisi ; (c) remise calculée par règle métier (volume, fidélité) sans expliciter le moteur de calcul ; (d) export XML qui oublie le bloc Reason/ReasonCode même quand la valeur est saisie côté ERP.

Exemple XML qui déclenche l’erreur

<ram:SpecifiedTradeAllowanceCharge>
  <ram:ChargeIndicator><udt:Indicator>false</udt:Indicator></ram:ChargeIndicator>
  <ram:ActualAmount>50.00</ram:ActualAmount>
  <!-- ❌ ni Reason ni ReasonCode -->
</ram:SpecifiedTradeAllowanceCharge>

Exemple XML corrigé

<ram:SpecifiedTradeAllowanceCharge>
  <ram:ChargeIndicator><udt:Indicator>false</udt:Indicator></ram:ChargeIndicator>
  <ram:ActualAmount>50.00</ram:ActualAmount>
  <ram:ReasonCode>95</ram:ReasonCode>
  <ram:Reason>Remise commerciale fidélité</ram:Reason>
</ram:SpecifiedTradeAllowanceCharge>

Correction manuelle

Ajouter <ram:ReasonCode> (recommandé) avec un code du subset UNCL 5189 valide dans la code-list EN16931 en vigueur. Compléter idéalement avec un <ram:Reason> en texte libre pour la lisibilité humaine. Avant de mettre un code en dur dans votre pipeline, vérifier dans la code-list que le code est bien autorisé au moment de la génération.

Réparable automatiquement par /repair ?

Oui, sous conditions — l’endpoint /repair corrige automatiquement cette erreur quand les données structurées sont récupérables. Dans les cas ambigus, une décision humaine reste nécessaire.

Et maintenant ?

Réparer mon Factur-X →

curl -X POST https://api.facturxapi.com/api/v1/repair \
  -H "Authorization: Bearer VOTRE_CLE" \
  -F "[email protected]"

Voir aussi

#en16931 #schematron #factur-x #erreurs #validation