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
currencyIDmanquant sur un élément de montant est ajouté, hérité duDocumentCurrencyCodedu 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.