Salta al contenuto principale
Sistemi Attivi
WP Planet — WordPress Cloud & Managed Services
Torna al MagazineWooCommerce

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

09 Nov 2026 — 15:20 9 min di lettura
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:

Terminale
# 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.
Nota: Ogni aliquota deve essere una riga distinta nelle impostazioni IVA di WooCommerce, non una sola generica. Il codice aliquota (tax_rate_id) è quello che il plugin di fatturazione mappa nell'XML FatturaPA. Se un prodotto ha tax_class vuoto, prende l'aliquota standard — verifica che sia corretta per quella categoria merceologica.

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.

wp-config.php
// 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' );
        }
    }
} );
Nota: I campi SDI e PEC vanno resi obbligatori condizionalmente: solo se il cliente sceglie di ricevere fattura (B2B). La validazione del formato SDI (7 caratteri alfanumerici maiuscoli) evita codici errati che il SDI rifiuterebbe. Il campo PEC è l'alternativa quando il cliente non ha codice SDI (es. professionisti con PEC ma senza SDI).

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.

Terminale
# 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.xml
Nota: La validazione con lo schema XSD ufficiale dell'Agenzia delle Entrate è l'unico modo per essere certi che l'XML sia accettato dal SDI. Uno scarto del SDI va gestito tempestivamente: il plugin o il servizio deve notificare lo scarto, correggere l'XML e reinviare, perché una fattura scartata non è fiscalmente emessa.

Conservazione 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.

Assistenza WooCommerce

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.

Assistenza WooCommerce
Condividi