Réparation prudente — ce qui est corrigé, ce qui ne l'est jamais

POST /api/v1/repair ne réécrit que la structure et la notation, puis revalide le résultat avec exactement le même validateur que tous les autres points d'entrée, afin que la réponse montre précisément ce qui a changé et ce qui reste à corriger. Contrairement à /api/v1/validate, ce point d'entrée exige un en-tête X-Api-Key à chaque appel.

Ce qui est réparé

  • Les éléments vides sont supprimés (PEPPOL-EN16931-R008) — sauf tout élément dont le nom se termine par « Amount », jamais touché par cette passe, même vide.
  • Un attribut currencyID manquant sur un élément de montant est ajouté, hérité du DocumentCurrencyCode du document (PEPPOL-EN16931-R051) — entièrement ignoré si le document porte plusieurs codes devise, car on ne peut alors plus déduire sans risque à quelle devise appartient quel montant.

Ce qui n'est jamais réparé — et pourquoi c'est une garantie de sécurité

Les montants, les taux de TVA, les dates et les identités des parties ne sont jamais modifiés par ce point d'entrée, en aucune circonstance. Les échecs de règles arithmétiques (BR-CO-*, par exemple un total qui ne correspond pas à ses lignes) sont uniquement signalés avec la valeur attendue et la valeur trouvée — jamais corrigés silencieusement. Laisser un logiciel décider de ce qu'un total « devrait » être est une décision qui revient à l'émetteur de la facture, pas à une passe de réparation ; refuser de deviner est la garantie, pas une fonctionnalité manquante.

Exemple de réponse

Pour une facture dont le PayableAmount n'a pas de currencyID :

{
  "repaired_xml": "...<cbc:PayableAmount currencyID=\"EUR\">121.00</cbc:PayableAmount>...",
  "changes": [
    {
      "rule_id": "PEPPOL-EN16931-R051",
      "location": "/Invoice/cbc:PayableAmount",
      "before": "<cbc:PayableAmount>",
      "after": "<cbc:PayableAmount currencyID=\"EUR\">",
      "changelog": "Added currencyID=\"EUR\" to cbc:PayableAmount, inherited from DocumentCurrencyCode"
    }
  ],
  "revalidation": { "verdict": "acceptable", "remaining_findings": [] }
}

Chaque changement appliqué porte les deux moitiés obligatoires : le diff machine (location/before/after) et une ligne de journal changelog lisible par un humain. Une réparation qui n'a rien changé renvoie un tableau changes vide avec repaired_xml identique à l'entrée — c'est un résultat normal, pas une erreur.

Valider votre facture gratuitement