Ga naar de hoofdinhoud

Gids · 2026-09-30

Markdown-export

XML-schemafouten (cvc-…) in de XRechnung-validator

Schemafouten betekenen dat de XML-structuur niet past bij de XSD van UBL of CII. Los ze eerst op: de validator controleert de bedrijfsregels pas als de schemacontrole is geslaagd.

Een cvc-code is een XML-schemafout: een element staat in de verkeerde volgorde, ontbreekt, is onbekend, heeft de verkeerde namespace of een waarde in het verkeerde formaat. De KoSIT-validator controleert de bedrijfsregels (BR-…) pas als het bestand de schemacontrole doorstaat.

Schemafouten en bedrijfsregels

De KoSIT-validator controleert een XRechnung in drie stappen: goed gevormde XML, XML-schema (XSD), daarna bedrijfsregels (Schematron).

Het XML-schema van UBL 2.1 of CII D16B legt vast welke elementen er zijn, in welke volgorde ze staan, welke verplicht zijn en welk gegevenstype een waarde heeft. De bedrijfsregels van EN 16931 en XRechnung (BR-…, BR-DE-…) controleren de inhoud, bijvoorbeeld totalen, btw en verplichte factuurgegevens.

Als de schemacontrole mislukt, voert de validator de bedrijfsregels niet uit. Nadat u de schemafouten hebt opgelost, kunnen daarom nieuwe fouten in de bedrijfsregels verschijnen. Dat is te verwachten.

Waar de codes vandaan komen

De codes verwijzen naar validatieregels uit de W3C-specificatie XML Schema, bijvoorbeeld cvc-complex-type voor de inhoud van een element. De XML-parser die KoSIT gebruikt, meldt ze met een regel en kolom in uw bestand.

Veelvoorkomende meldingen en hun oplossing

CodeBetekenisGebruikelijke oplossing
cvc-complex-type.2.4.aEen element staat op een positie die het schema niet accepteert: verkeerde volgorde, een element dat daar niet hoort, of er ontbreekt een verplicht element ervoor.Vergelijk de volgorde met de lijst "One of … is expected". Verplaats het element, of voeg het ontbrekende element ervoor toe.
cvc-complex-type.2.4.bEen element eindigt vóór een verplicht onderliggend element.Voeg het ontbrekende element toe. Het verplichte element is meestal het laatste van de genoemde elementen.
cvc-complex-type.2.4.dEen element volgt op het laatste onderliggende element dat het schema toestaat.Verwijder het element, of verplaats het naar het juiste bovenliggende element.
cvc-datatype-valid.1.2.1 met cvc-complex-type.2.2 of cvc-type.3.1.3Een waarde past niet bij haar gegevenstype, bijvoorbeeld een datum of een decimaal getal.Datums als JJJJ-MM-DD, bedragen met een punt als decimaalteken, true of false voor indicatoren.
cvc-complex-type.4Een verplicht attribuut ontbreekt, bijvoorbeeld currencyID bij een bedrag.Voeg het attribuut toe, bijvoorbeeld currencyID="EUR".
cvc-complex-type.3.2.2Een element heeft een attribuut dat het schema voor dit element niet definieert.Verwijder het attribuut of corrigeer de spelling (hoofdlettergevoelig).
cvc-complex-type.2.3Een element dat andere elementen groepeert, bevat tekst.Zet de tekst in het juiste onderliggende element.
cvc-minLength-valid, cvc-maxLength-valid met cvc-attribute.3Een waarde is te kort of te lang, bijvoorbeeld een lege unitCode bij een CII-maat.Vul een waarde in met het toegestane aantal tekens.
cvc-pattern-valid, cvc-enumeration-validEen waarde past niet bij een patroon of een vaste lijst. De UBL- en CII-schema’s van XRechnung 3.0.2 definiëren zulke beperkingen niet voor factuurgegevens; bedrijfsregels (BR-CL-…) controleren de codelijsten.Gebruik het formaat of de waarde die de melding noemt.
Content is not allowed in prolog, must be terminated by the matching end-tag, …Het bestand is geen goed gevormde XML. Er is geen regel gecontroleerd.Corrigeer de XML-syntaxis: tekst vóór de XML-declaratie, niet afgesloten elementen, & in plaats van &.

Voorbeelden

Voorbeeldwaarden. De volgorde volgt de vastgelegde schema’s UBL 2.1 en CII D16B.

UBL, verkeerde volgorde: cvc-complex-type.2.4.a bij cbc:DueDate
<cbc:ID>INV-1001</cbc:ID>
<cbc:DueDate>2026-02-14</cbc:DueDate>
<cbc:IssueDate>2026-01-15</cbc:IssueDate>
UBL, juist: cbc:IssueDate vóór cbc:DueDate
<cbc:ID>INV-1001</cbc:ID>
<cbc:IssueDate>2026-01-15</cbc:IssueDate>
<cbc:DueDate>2026-02-14</cbc:DueDate>
Verkeerde gegevenstypen: cvc-datatype-valid.1.2.1
<cbc:IssueDate>15.01.2026</cbc:IssueDate>
<cbc:PayableAmount currencyID="EUR">119,00</cbc:PayableAmount>
Juist: ISO-datum en een punt als decimaalteken
<cbc:IssueDate>2026-01-15</cbc:IssueDate>
<cbc:PayableAmount currencyID="EUR">119.00</cbc:PayableAmount>
CII, verkeerde volgorde: cvc-complex-type.2.4.a bij ram:TypeCode
<rsm:ExchangedDocument>
  <ram:TypeCode>380</ram:TypeCode>
  <ram:ID>INV-1001</ram:ID>
</rsm:ExchangedDocument>
CII, juist: ram:ID vóór ram:TypeCode
<rsm:ExchangedDocument>
  <ram:ID>INV-1001</ram:ID>
  <ram:TypeCode>380</ram:TypeCode>
</rsm:ExchangedDocument>

Schemafouten oplossen

  1. Los eerst een niet goed gevormd bestand op. Zolang de XML niet goed gevormd is, loopt er geen andere controle.
  2. Begin met de eerste schemafout en gebruik de regel en kolom. Eén structuurfout kan andere fouten in hetzelfde element verbergen.
  3. Lees "One of … is expected": dat zijn de elementen die het schema op deze positie accepteert, in de volgorde van het schema.
  4. Corrigeer de export in uw ERP- of factuursoftware in plaats van de XML met de hand te wijzigen; dan is ook de volgende factuur juist.
  5. Valideer opnieuw. Verwacht fouten in de bedrijfsregels nadat de schemafouten zijn opgelost.

Veelgestelde vragen

Waarom meldt de validator een element dat in mijn bestand staat?

Meestal staat het element in de verkeerde volgorde. UBL vereist bijvoorbeeld cbc:IssueDate vóór cbc:DueDate. Staat cbc:DueDate eerst, dan meldt de validator cbc:DueDate met cvc-complex-type.2.4.a en noemt cbc:IssueDate als verwacht.

Waarom zie ik nieuwe BR-fouten nadat ik de schemafouten heb opgelost?

De validator controleert de bedrijfsregels pas als het bestand de schemacontrole doorstaat. Daarvoor waren ze niet gecontroleerd.

Verwijzen regel en kolom naar mijn bestand?

Ja, naar het bestand precies zoals u het hebt geüpload. Als u het bestand opnieuw opmaakt of omzet, veranderen de posities.

Volgende stappen