Guide · 2026-09-30
Export MarkdownErreurs de schéma XML (cvc-…) dans le validateur XRechnung
Une erreur de schéma signifie que la structure XML ne correspond pas au XSD UBL ou CII. Corrigez-la d’abord : le validateur ne contrôle les règles métier qu’après la réussite du contrôle de schéma.
Un code cvc- est une erreur de schéma XML : un élément est dans le mauvais ordre, manquant, inconnu, dans le mauvais espace de noms, ou sa valeur n’a pas le bon format. Le validateur KoSIT ne contrôle les règles métier (BR-…) qu’après la réussite du contrôle de schéma.
Erreurs de schéma et règles métier
Le validateur KoSIT contrôle une XRechnung en trois étapes : XML bien formé, schéma XML (XSD), puis règles métier (Schematron).
Le schéma XML UBL 2.1 ou CII D16B définit quels éléments existent, dans quel ordre ils apparaissent, lesquels sont obligatoires et quel type de données a une valeur. Les règles métier d’EN 16931 et de XRechnung (BR-…, BR-DE-…) contrôlent le contenu, par exemple les totaux, la TVA et les mentions obligatoires.
Si le contrôle de schéma échoue, le validateur n’exécute pas les règles métier. Après la correction des erreurs de schéma, de nouvelles erreurs de règles métier peuvent donc apparaître. C’est normal.
D’où viennent les codes
Les codes renvoient à des règles de validation de la spécification W3C XML Schema, par exemple cvc-complex-type pour le contenu d’un élément. L’analyseur XML utilisé par KoSIT les signale avec une ligne et une colonne de votre fichier.
Messages fréquents et leur correction
| Code | Signification | Correction habituelle |
|---|---|---|
| cvc-complex-type.2.4.a | Un élément se trouve à une position que le schéma n’accepte pas : mauvais ordre, élément qui n’a pas sa place ici, ou élément obligatoire manquant avant lui. | Comparez l’ordre avec la liste « One of … is expected ». Déplacez l’élément ou ajoutez l’élément manquant avant lui. |
| cvc-complex-type.2.4.b | Un élément se termine avant un élément enfant obligatoire. | Ajoutez l’élément manquant. L’élément obligatoire est en général le dernier de la liste. |
| cvc-complex-type.2.4.d | Un élément suit le dernier élément enfant autorisé par le schéma. | Supprimez l’élément ou placez-le dans le bon élément parent. |
| cvc-datatype-valid.1.2.1 avec cvc-complex-type.2.2 ou cvc-type.3.1.3 | Une valeur ne correspond pas à son type de données, par exemple une date ou un nombre décimal. | Dates au format AAAA-MM-JJ, montants avec un point comme séparateur décimal, true ou false pour les indicateurs. |
| cvc-complex-type.4 | Un attribut obligatoire manque, par exemple currencyID sur un montant. | Ajoutez l’attribut, par exemple currencyID="EUR". |
| cvc-complex-type.3.2.2 | Un élément a un attribut que le schéma ne définit pas pour lui. | Supprimez l’attribut ou corrigez son orthographe (sensible à la casse). |
| cvc-complex-type.2.3 | Un élément qui regroupe d’autres éléments contient du texte. | Placez le texte dans le bon élément enfant. |
| cvc-minLength-valid, cvc-maxLength-valid avec cvc-attribute.3 | Une valeur est trop courte ou trop longue, par exemple un unitCode vide sur une mesure CII. | Saisissez une valeur avec le nombre de caractères autorisé. |
| cvc-pattern-valid, cvc-enumeration-valid | Une valeur ne correspond pas à un motif ou à une liste fixe. Les schémas UBL et CII de XRechnung 3.0.2 ne définissent pas de telles contraintes pour les données de facture ; les règles métier (BR-CL-…) contrôlent les listes de codes. | Utilisez le format ou la valeur indiqués par le message. |
| Content is not allowed in prolog, must be terminated by the matching end-tag, … | Le fichier n’est pas un XML bien formé. Aucune règle n’a été contrôlée. | Corrigez la syntaxe XML : texte avant la déclaration XML, éléments non fermés, & au lieu de &. |
Exemples
Valeurs fictives. L’ordre suit les schémas UBL 2.1 et CII D16B utilisés par le validateur.
<cbc:ID>INV-1001</cbc:ID>
<cbc:DueDate>2026-02-14</cbc:DueDate>
<cbc:IssueDate>2026-01-15</cbc:IssueDate><cbc:ID>INV-1001</cbc:ID>
<cbc:IssueDate>2026-01-15</cbc:IssueDate>
<cbc:DueDate>2026-02-14</cbc:DueDate><cbc:IssueDate>15.01.2026</cbc:IssueDate>
<cbc:PayableAmount currencyID="EUR">119,00</cbc:PayableAmount><cbc:IssueDate>2026-01-15</cbc:IssueDate>
<cbc:PayableAmount currencyID="EUR">119.00</cbc:PayableAmount><rsm:ExchangedDocument>
<ram:TypeCode>380</ram:TypeCode>
<ram:ID>INV-1001</ram:ID>
</rsm:ExchangedDocument><rsm:ExchangedDocument>
<ram:ID>INV-1001</ram:ID>
<ram:TypeCode>380</ram:TypeCode>
</rsm:ExchangedDocument>Corriger les erreurs de schéma
- Corrigez d’abord un fichier mal formé. Tant que le XML n’est pas bien formé, aucun autre contrôle ne s’exécute.
- Commencez par la première erreur de schéma et utilisez sa ligne et sa colonne. Une erreur de structure peut masquer d’autres erreurs dans le même élément.
- Lisez « One of … is expected » : ce sont les éléments que le schéma accepte à cette position, dans l’ordre du schéma.
- Corrigez l’export dans votre ERP ou logiciel de facturation plutôt que de modifier le XML à la main ; la facture suivante sera aussi correcte.
- Validez de nouveau. Attendez-vous à des erreurs de règles métier une fois les erreurs de schéma corrigées.
Questions fréquentes
Pourquoi le validateur signale-t-il un élément présent dans mon fichier ?
En général, l’élément est dans le mauvais ordre. Par exemple, UBL exige cbc:IssueDate avant cbc:DueDate. Si cbc:DueDate vient en premier, le validateur signale cbc:DueDate avec cvc-complex-type.2.4.a et indique cbc:IssueDate comme attendu.
Pourquoi vois-je de nouvelles erreurs BR après avoir corrigé les erreurs de schéma ?
Le validateur ne contrôle les règles métier qu’après la réussite du contrôle de schéma. Elles n’avaient pas été contrôlées auparavant.
La ligne et la colonne se rapportent-elles à mon fichier ?
Oui, au fichier exactement tel que vous l’avez téléversé. Si vous reformatez ou convertissez le fichier, les positions changent.