# Errori di schema XML (cvc-…) nel validatore XRechnung

- 2026-09-30

Un errore di schema significa che la struttura XML non corrisponde all’XSD UBL o CII. Correggilo per primo: il validatore controlla le regole di business solo dopo che il controllo dello schema è riuscito.

> Un codice cvc- è un errore di schema XML: un elemento è nell’ordine sbagliato, manca, è sconosciuto, è nel namespace sbagliato o ha un valore nel formato sbagliato. Il validatore KoSIT controlla le regole di business (BR-…) solo dopo che il file ha superato il controllo dello schema.

## Errori di schema e regole di business

Il validatore KoSIT controlla una XRechnung in tre passaggi: XML ben formato, schema XML (XSD), poi regole di business (Schematron).

Lo schema XML UBL 2.1 o CII D16B stabilisce quali elementi esistono, in quale ordine compaiono, quali sono obbligatori e quale tipo di dati ha un valore. Le regole di business di EN 16931 e XRechnung (BR-…, BR-DE-…) controllano il contenuto, per esempio totali, IVA e dati obbligatori della fattura.

Se il controllo dello schema non riesce, il validatore non esegue le regole di business. Dopo aver corretto gli errori di schema possono quindi comparire nuovi errori delle regole di business. È normale.

> **Da dove vengono i codici**: I codici rimandano alle regole di validazione della specifica W3C XML Schema, per esempio cvc-complex-type per il contenuto di un elemento. Il parser XML usato da KoSIT li segnala con riga e colonna nel tuo file.

## Messaggi frequenti e la loro correzione

| Codice | Significato | Correzione tipica |
| --- | --- | --- |
| cvc-complex-type.2.4.a | Un elemento si trova in una posizione che lo schema non accetta: ordine sbagliato, un elemento che non appartiene a quella posizione, o prima di esso manca un elemento obbligatorio. | Confronta l’ordine con l’elenco "One of … is expected". Sposta l’elemento oppure aggiungi prima l’elemento mancante. |
| cvc-complex-type.2.4.b | Un elemento termina prima di un elemento figlio obbligatorio. | Aggiungi l’elemento mancante. Quello obbligatorio di solito è l’ultimo degli elementi elencati. |
| cvc-complex-type.2.4.d | Un elemento segue l’ultimo elemento figlio consentito dallo schema. | Rimuovi l’elemento oppure spostalo nell’elemento padre corretto. |
| cvc-datatype-valid.1.2.1 con cvc-complex-type.2.2 o cvc-type.3.1.3 | Un valore non corrisponde al suo tipo di dati, per esempio una data o un numero decimale. | Date nel formato AAAA-MM-GG, importi con il punto come separatore decimale, true o false per gli indicatori. |
| cvc-complex-type.4 | Manca un attributo obbligatorio, per esempio currencyID su un importo. | Aggiungi l’attributo, per esempio currencyID="EUR". |
| cvc-complex-type.3.2.2 | Un elemento ha un attributo che lo schema non definisce per esso. | Rimuovi l’attributo o correggine la grafia (distingue maiuscole e minuscole). |
| cvc-complex-type.2.3 | Un elemento che raggruppa altri elementi contiene testo. | Inserisci il testo nell’elemento figlio corretto. |
| cvc-minLength-valid, cvc-maxLength-valid con cvc-attribute.3 | Un valore è troppo corto o troppo lungo, per esempio un unitCode vuoto su una misura CII. | Inserisci un valore con il numero di caratteri consentito. |
| cvc-pattern-valid, cvc-enumeration-valid | Un valore non corrisponde a un modello o a un elenco fisso. Gli schemi UBL e CII di XRechnung 3.0.2 non definiscono tali vincoli per i dati della fattura; le regole di business (BR-CL-…) controllano gli elenchi di codici. | Usa il formato o il valore indicato dal messaggio. |
| Content is not allowed in prolog, must be terminated by the matching end-tag, … | Il file non è un XML ben formato. Nessuna regola è stata controllata. | Correggi la sintassi XML: testo prima della dichiarazione XML, elementi non chiusi, & invece di &amp;. |

## Esempi

Valori segnaposto. L’ordine segue gli schemi UBL 2.1 e CII D16B usati dal validatore.

### UBL, ordine sbagliato: cvc-complex-type.2.4.a su cbc:DueDate
```
<cbc:ID>INV-1001</cbc:ID>
<cbc:DueDate>2026-02-14</cbc:DueDate>
<cbc:IssueDate>2026-01-15</cbc:IssueDate>
```

### UBL, corretto: cbc:IssueDate prima di cbc:DueDate
```
<cbc:ID>INV-1001</cbc:ID>
<cbc:IssueDate>2026-01-15</cbc:IssueDate>
<cbc:DueDate>2026-02-14</cbc:DueDate>
```

### Tipi di dati sbagliati: cvc-datatype-valid.1.2.1
```
<cbc:IssueDate>15.01.2026</cbc:IssueDate>
<cbc:PayableAmount currencyID="EUR">119,00</cbc:PayableAmount>
```

### Corretto: data ISO e punto come separatore decimale
```
<cbc:IssueDate>2026-01-15</cbc:IssueDate>
<cbc:PayableAmount currencyID="EUR">119.00</cbc:PayableAmount>
```

### CII, ordine sbagliato: cvc-complex-type.2.4.a su ram:TypeCode
```
<rsm:ExchangedDocument>
  <ram:TypeCode>380</ram:TypeCode>
  <ram:ID>INV-1001</ram:ID>
</rsm:ExchangedDocument>
```

### CII, corretto: ram:ID prima di ram:TypeCode
```
<rsm:ExchangedDocument>
  <ram:ID>INV-1001</ram:ID>
  <ram:TypeCode>380</ram:TypeCode>
</rsm:ExchangedDocument>
```

## Come correggere gli errori di schema

1. Correggi prima un file non ben formato. Finché l’XML non è ben formato, nessun altro controllo viene eseguito.
2. Inizia dal primo errore di schema e usa la sua riga e colonna. Un errore di struttura può nascondere altri errori nello stesso elemento.
3. Leggi "One of … is expected": sono gli elementi che lo schema accetta in questa posizione, nell’ordine dello schema.
4. Correggi l’esportazione nel tuo ERP o software di fatturazione invece di modificare l’XML a mano; così anche la fattura successiva sarà corretta.
5. Valida di nuovo. Dopo aver corretto gli errori di schema, aspettati errori delle regole di business.

## Domande frequenti

### Perché il validatore segnala un elemento presente nel mio file?
Di solito l’elemento è nell’ordine sbagliato. Per esempio, UBL richiede cbc:IssueDate prima di cbc:DueDate. Se cbc:DueDate viene prima, il validatore segnala cbc:DueDate con cvc-complex-type.2.4.a e indica cbc:IssueDate come atteso.

### Perché vedo nuovi errori BR dopo aver corretto gli errori di schema?
Il validatore controlla le regole di business solo dopo che il file ha superato il controllo dello schema. Prima non erano state controllate.

### Riga e colonna si riferiscono al mio file?
Sì, al file esattamente come lo hai caricato. Se riformatti o converti il file, le posizioni cambiano.

## Passi successivi

- [Controlla il file corretto con il validatore XRechnung](/xrechnung-validator)
- [Errori delle regole di business: catalogo degli errori KoSIT](/resources/kosit-validator-errors)
