En bref
- En XML, les préfixes (
rsm:,ram:) ne sont que des placeholders liés à des URI — c’est la recommandation W3C. - Les préfixes
rsm/ram/udt/qdtsont recommandés pour la lisibilité, maiscii:oufactx:peuvent être valides s’ils sont liés aux bonnes URI. - Ce qui est faux : URI obsolète (
:99,:200), URI mal orthographiée, ou mélange de vocabulaires UBL (cbc:,cac:) et CII. - Les URI canoniques pour Factur-X 1.0+ se terminent par
:100. - Réparable automatiquement par
/repair(normalisation des URI standards).
Ce que l’erreur veut dire
Factur-X est une instance du standard CII (Cross-Industry Invoice, UN/CEFACT). La recommandation W3C (Namespaces in XML) est explicite : le préfixe est un placeholder ; ce qui compte, c’est l’association entre le préfixe utilisé et la bonne namespace URI. Un élément foo:CrossIndustryInvoice peut être parfaitement valide si foo est lié à urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100. Les problèmes réels sont : (a) URI incorrecte (obsolète ou mal orthographiée), (b) mélange UBL/CII dans le même document.
Quand cette erreur arrive
Survient quand : (a) URI obsolète (:99 ou :200 au lieu de :100) ; (b) framework qui ré-écrit les namespaces et change les URI ; (c) utilisation accidentelle d’UBL (cbc:, cac:) au lieu de CII ; (d) mauvaise orthographe de l’URI CII.
Exemple XML qui déclenche l’erreur (mauvaise URI + mélange UBL)
<rsm:CrossIndustryInvoice
xmlns:rsm="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:99" <!-- ❌ :99 obsolète -->
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" <!-- ❌ UBL -->
>
...
</rsm:CrossIndustryInvoice>
Exemple XML corrigé (URI standards)
<rsm:CrossIndustryInvoice
xmlns:rsm="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100"
xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100"
xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100"
xmlns:qdt="urn:un:unece:uncefact:data:standard:QualifiedDataType:100">
...
</rsm:CrossIndustryInvoice>
Correction manuelle
Copier-coller le bloc de namespaces ci-dessus sur l’élément racine <rsm:CrossIndustryInvoice>. Vérifier que chaque URI se termine par :100. Les préfixes standards (rsm, ram, udt, qdt) sont RECOMMANDÉS pour la lisibilité et l’outillage, mais pas imposés par la norme — c’est l’URI qui valide, pas le préfixe. Ne JAMAIS mélanger UBL (cbc:, cac:) et CII dans le même document.
Réparable automatiquement par /repair ?
Oui — l’endpoint /repair corrige automatiquement cette erreur dans la majorité des cas.
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]"