Vai al contenuto
Tutti gli articoli
iten

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
Fattura elettronica XML: come si legge e come portarla in Excel in automatico

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 Denominazione ma Nome e Cognome. Va gestito.
  • Più righe di riepilogo: con aliquote diverse (22%, 10%, 4%) ci sono più blocchi DatiRiepilogo. Vanno sommati.
  • Note di credito: un TD04 va 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.

Leggi anche