3 min di lettura
Fattura elettronica XML: come si legge e come portarla in Excel in automatico
Cos'è davvero il file XML di una fattura elettronica, perché alcune finiscono in .p7m, quali campi contano e come estrarre righe, importi e IVA in un Excel senza ricopiare nulla. Con esempi pratici.
- Automazioni
- Fattura elettronica
- Excel
Ogni mese molte aziende scaricano decine di fatture elettroniche e poi ricopiano a mano fornitore, data, importi e IVA in un foglio Excel. È un lavoro lento e facile da sbagliare, e si può automatizzare quasi del tutto. Vediamo prima come è fatta una fattura elettronica "dentro", poi come trasformarla in una tabella.
Cos'è il file di una fattura elettronica?
In Italia una fattura elettronica non è un PDF: è un file XML nel formato FatturaPA, definito dall'Agenzia delle Entrate e trasmesso tramite il Sistema di Interscambio (SdI). XML è un testo strutturato, con "etichette" (tag) che dicono cosa c'è scritto: un po' come le colonne di un foglio Excel, ma organizzate ad albero.
Il PDF che vedi aprendo la fattura con un visualizzatore è solo una rappresentazione grafica di quel file: i dati veri sono nell'XML.
Perché alcune fatture finiscono in .xml.p7m?
Il file .p7m è la fattura XML firmata digitalmente e "imbustata" con la firma (formato CAdES). Dentro c'è lo stesso XML di sempre. Per leggerlo bisogna prima estrarlo dalla busta, per esempio con OpenSSL:
openssl smime -verify -noverify -inform DER -in fattura.xml.p7m -out fattura.xml
L'opzione -noverify serve solo a estrarre il contenuto senza controllare la catena di certificati: per un'automazione interna è normale, ma la validità della firma resta compito dei canali ufficiali. Alcuni file arrivano anche codificati in Base64: in quel caso vanno prima decodificati.
Quali campi contano davvero?
Il file ha due parti principali. Ecco i campi che quasi sempre servono:
| Dato | Dove si trova nell'XML |
|---|---|
| Fornitore (nome e P.IVA) | FatturaElettronicaHeader → CedentePrestatore |
| Cliente | FatturaElettronicaHeader → CessionarioCommittente |
| Tipo documento (fattura, nota di credito…) | DatiGeneraliDocumento → TipoDocumento (es. TD01 fattura, TD04 nota di credito) |
| Numero e data | DatiGeneraliDocumento → Numero e Data |
| Totale | DatiGeneraliDocumento → ImportoTotaleDocumento |
| Righe (prodotti e servizi) | DatiBeniServizi → DettaglioLinee: Descrizione, Quantita, PrezzoUnitario, PrezzoTotale, AliquotaIVA |
| Riepilogo IVA | DatiBeniServizi → DatiRiepilogo: ImponibileImporto, Imposta |
| Scadenze e pagamento | DatiPagamento |
Attenzione a un dettaglio: ImportoTotaleDocumento è facoltativo, quindi non tutte le fatture lo riportano. Il totale affidabile si ricava sommando imponibili e imposte dai blocchi DatiRiepilogo.
Come si trasforma in Excel?
Il principio è semplice: leggere l'XML, prendere i campi che servono e scriverli in una riga del foglio. Con Python bastano poche righe usando la libreria standard xml.etree.ElementTree e openpyxl o pandas per l'Excel. Lo schema del ragionamento:
import xml.etree.ElementTree as ET
root = ET.parse("fattura.xml").getroot()
def testo(percorso):
# cerca il campo ignorando i namespace (il prefisso "p:" del file)
el = root.find(".//{*}" + percorso.replace("/", "/{*}"))
return el.text if el is not None else ""
riga = {
"fornitore": testo("CedentePrestatore/DatiAnagrafici/Anagrafica/Denominazione"),
"numero": testo("DatiGeneraliDocumento/Numero"),
"data": testo("DatiGeneraliDocumento/Data"),
"totale": testo("DatiGeneraliDocumento/ImportoTotaleDocumento"),
}
Ripetendo questo per tutti i file di una cartella si ottiene un Excel con una riga per fattura (o una riga per ogni prodotto, se servono i dettagli). Da lì si possono fare filtri, totali per fornitore, controlli sull'IVA.
Gli errori più comuni
- Namespace: l'XML usa un "prefisso" (
p:FatturaElettronica). Se il codice non ne tiene conto, non trova nessun campo. - Persone fisiche: alcuni fornitori non hanno
DenominazionemaNomeeCognome. Va gestito. - Più righe di riepilogo: con aliquote diverse (22%, 10%, 4%) ci sono più blocchi
DatiRiepilogo. Vanno sommati. - Note di credito: un
TD04va sottratto, non sommato. - Numeri con il punto: nell'XML i decimali usano il punto (
122.00). In Excel italiano vanno convertiti in numeri veri, non lasciati come testo.
Vale la pena automatizzarlo?
Facciamo due conti: se ricopiare una fattura richiede 2–3 minuti, 100 fatture al mese sono 3–5 ore di lavoro ripetitivo. Un'automazione le elabora in pochi secondi, sempre nello stesso modo, e libera quel tempo per lavoro che conta.
Se nella tua azienda le fatture si ricopiano ancora a mano, scrivimi: con un esempio dei tuoi file ti dico in poco tempo come si può automatizzare.