WooCommerce e fatturazione elettronica italiana: configurare IVA, SDI e conservazione

Per gli e-commerce italiani WooCommerce non basta vendere: ogni ordine B2B può richiedere fattura elettronica XML verso il SDI, gestione dell'IVA per aliquota, e conservazione sostitutiva a norma. Come configurare correttamente le aliquote, i codici destinatario e l'invio allo SDI senza plugin che promettono tutto e fanno male.
La fatturazione elettronica in Italia è obbligo per le B2B dal 2019 e il quadro tecnico è rigido: ogni fattura verso un cliente con partita IVA italiana va trasmessa al Sistema Di Interscambio (SDI) in formato XML, secondo lo standard FatturaPA. Per un e-commerce WooCommerce questo significa che, quando un cliente B2B chiede la fattura, il negozio deve produrre un XML valido, inviarlo allo SDI, conservarne copia a norma e gestire le eventuali notifiche di scarto. Non è un dettaglio: è un processo che, se sbagliato, genera sanzioni.
Il primo malinteso è che un plugin di fatturazione risolva tutto. Non è così. Un plugin può automatizzare la generazione dell'XML e l'invio, ma la correttezza dipende dalla configurazione: le aliquote IVA devono corrispondere esattamente alle categorie merceologiche, i codici destinatario (SDI o PEC) devono essere raccolti e validati, e i dati anagrafici del cliente devono essere completi. Un plugin con dati di configurazione sbagliati produce XML errati che lo SDI scarta — e una fattura scartata è una fattura non emessa, con conseguenze fiscali.
Configurare le aliquote IVA per aliquota corretta
WooCommerce gestisce le aliquote IVA per zona geografica e classe di imposta. Per la fatturazione italiana, ogni aliquota (22%, 10%, 4%, 5%) deve essere configurata come imposta distinta con il suo codice aliquota, perché l'XML di FatturaPA richiede l'aliquota per riga di prodotto. L'errore comune è avere una sola aliquota generica al 22% e applicarla a tutto — ma se vendi prodotti con aliquote ridotte (es. alimentari al 4%, libri al 4%), l'XML sarà sbagliato e la fattura non rifletterà l'IVA realmente applicata.
La configurazione corretta prevede una classe di imposta per ogni aliquota italiana, con la percentuale esatta e il codice aliquota che il plugin di fatturazione userà nell'XML. Puoi verificare le aliquote configurate via WP-CLI:
# Verifica le aliquote IVA configurate in WooCommerce via WP-CLI
wp eval '
$rates = WC_Tax::get_rates();
foreach ( $rates as $rate ) {
echo $rate["label"] . " — " . $rate["rate"] . "% (codice: " . $rate["tax_rate_id"] . ")\n";
}
'
# Le aliquote italiane standard dovrebbero essere:
# IVA 22% — 22.0000%
# IVA 10% — 10.0000%
# IVA 4% — 4.0000%
# IVA 5% — 5.0000% (es. alcuni generi alimentari)
# Verifica che ogni prodotto abbia la classe di imposta corretta
wp wc product list --fields=id,name,tax_status,tax_class --user=1
# tax_class vuoto = standard (22%). Valori custom = aliquote ridotte.Codice destinatario SDI e PEC: raccoglierli dal cliente
Per inviare la fattura al SDI serve il codice destinatario del cliente — un codice di 7 caratteri (es. KRRH2B4) — oppure, in sua assenza, la PEC. WooCommerce non raccoglie questi campi per default: vanno aggiunti al checkout o al profilo cliente. La pratica corretta è aggiungere i campi al checkout, ma renderli obbligatori solo quando il cliente seleziona 'fattura' (B2B) invece di 'ricevuta' (B2C). Un cliente B2C non ha codice SDI e non va richiesto; un cliente B2B sì e la sua mancanza blocca l'emissione.
// Aggiungere i campi SDI e PEC al checkout WooCommerce
// functions.php del tema child
add_filter( 'woocommerce_checkout_fields', function( $fields ) {
$fields['billing']['billing_codice_sdi'] = array(
'type' => 'text',
'label' => 'Codice destinatario (SDI)',
'placeholder' => 'Es. KRRH2B4 (7 caratteri)',
'required' => false, // reso obbligatorio via JS se scelta fattura
'class' => array( 'form-row-wide' ),
'priority' => 120,
);
$fields['billing']['billing_pec'] = array(
'type' => 'email',
'label' => 'PEC (alternativa al codice SDI)',
'required' => false,
'class' => array( 'form-row-wide' ),
'priority' => 125,
);
// Campo partita IVA (se non già presente)
$fields['billing']['billing_vat'] = array(
'type' => 'text',
'label' => 'Partita IVA',
'required' => false,
'class' => array( 'form-row-wide' ),
'priority' => 115,
);
return $fields;
} );
// Validazione: SDI o PEC obbligatori se è richiesta la fattura
add_action( 'woocommerce_checkout_process', function() {
if ( isset( $_POST['billing_codice_sdi'] ) && $_POST['billing_codice_sdi'] !== '' ) {
// Validazione formato: 7 caratteri alfanumerici
if ( ! preg_match( '/^[A-Z0-9]{7}$/', strtoupper( $_POST['billing_codice_sdi'] ) ) ) {
wc_add_notice( 'Il codice destinatario SDI deve essere di 7 caratteri alfanumerici.', 'error' );
}
}
} );L'invio allo SDI: plugin o servizio esterno?
La generazione dell'XML FatturaPA e l'invio allo SDI richiedono un'infrastruttura certificata — non si fa con codice custom, perché il SDI ha requisiti di trasmissione (canale accreditato, firma, ricevute) che un'integrazione fai-da-te non soddisfa. La scelta è tra un plugin WordPress di fatturazione (che gestisce XML + invio tramite un proprio servizio accreditato) e un servizio esterno di fatturazione elettronica collegato a WooCommerce via API. Il primo è più integrato; il secondo è più robusto e separa la logica fiscale dal negozio.
La regola pratica: per volumi bassi (poche fatture B2B al mese), un plugin integrato basta. Per volumi alti o per aziende con un gestionale fiscale esistente, conviene esportare gli ordini via API verso il gestionale, che produce e invia le fatture. In entrambi i casi, l'XML va validato prima dell'invio — un XML malformato viene scartato dal SDI e la fattura risulta non emessa.
# Validazione di un XML FatturaPA prima dell'invio allo SDI
# Usa xmllint con lo schema ufficiale FatturaPA (scaricabile dall'Agenzia delle Entrate)
xmllint --noout --schema FatturaPA_v1.2.1.xsd fattura-001234.xml
# Output: 'fattura-001234.xml validates' = XML valido
# Output con errori = XML da correggere prima dell'invio
# Verifica rapida della struttura minima (senza schema):
# Il nodo radice deve essere <p:FatturaElettronica
# con namespace http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fattura
head -5 fattura-001234.xmlConservazione sostitutiva: non basta emettere, va conservata
L'ultimo obbligo, spesso dimenticato, è la conservazione sostitutiva a norma: le fatture elettroniche vanno conservate per 10 anni in un sistema di conservazione conforme (con marca temporale e firma). Non basta salvarle in una cartella o in un backup — la conservazione a norma è un processo tecnico-giurale che un plugin di WooCommerce non fornisce. La pratica corretta è esportare le fatture verso un servizio di conservazione sostitutiva accreditato, che le archivia a norma per la durata obbligatoria.
Per un e-commerce WooCommerce italiano, la fatturazione elettronica è un processo a sé che richiede competenza fiscale e tecnica insieme. Un check-up del checkout e della configurazione IVA verifica che le aliquote siano corrette, che i campi SDI/PEC siano raccolti e validati, e che il flusso di emissione e conservazione sia completo — prima che un controllo fiscale lo faccia al posto tuo.
Verifica che il tuo WooCommerce sia a norma per la fatturazione italiana.
Verifica tecnica del checkout, delle aliquote IVA, dei campi SDI/PEC e del flusso di fatturazione elettronica del tuo store WooCommerce.
Articoli correlati

PDF e fatture WooCommerce: invio automatico, conformità italiana e archiviazione
Leggi
Abbonamenti ricorrenti WooCommerce: subscription, trial e fallimenti dei rinnovi
Leggi
