SDI / Fatturazione Elettronica

Generazione XML FatturaPA, trasmissione al Sistema di Interscambio e gestione notifiche

v 2.2 Manuale Utente

Riferimenti normativi

1Panoramica e logica del modulo

Il modulo SDI / Fatturazione Elettronica di NOX Enterprise Suite gestisce l'intero ciclo di vita della fattura elettronica: dalla generazione del file XML FatturaPA a partire dal modello Documento, fino alla trasmissione al Sistema di Interscambio e alla ricezione delle notifiche di esito.

Il flusso operativo si articola in tre fasi principali:

  1. Generazione XML: un adapter converte i dati del Documento (fattura, nota di credito, ecc.) nel tracciato XML conforme alle specifiche FatturaPA v1.2.2. La generazione puo avvenire singolarmente dal documento o in modalita batch per piu documenti contemporaneamente.
  2. Trasmissione al SDI: il file XML viene firmato digitalmente (se configurato) e trasmesso al Sistema di Interscambio tramite i canali previsti. Il sistema traccia lo stato di ogni trasmissione.
  3. Gestione notifiche: il modulo riceve e processa le notifiche restituite dal SDI (ricevuta di consegna, notifica di scarto, esito committente, ecc.), aggiornando automaticamente lo stato della trasmissione.
Il modulo supporta sia fatture verso privati (B2B/B2C, formato FPR12) sia fatture verso la Pubblica Amministrazione (formato FPA12). Il formato viene selezionato automaticamente in base al tipo di cessionario.
2Formati FPR12 e FPA12

Il tracciato FatturaPA prevede due formati distinti, identificati dal codice nel campo FormatoTrasmissione:

FormatoDestinatarioCodice DestinatarioUtilizzo
FPR12Privati (B2B / B2C)7 caratteri alfanumerici oppure 0000000Fatture verso imprese, professionisti e consumatori finali. Se il destinatario non ha un codice SDI, si utilizza 0000000 e si indica la PEC oppure la fattura viene recapitata nell'area riservata del portale Fatture e Corrispettivi.
FPA12Pubblica Amministrazione6 caratteri (Codice Univoco Ufficio IPA)Fatture verso enti pubblici. Il Codice Univoco Ufficio e reperibile dall'Indice delle Pubbliche Amministrazioni (iPA). Lo split payment (art. 17-ter DPR 633/72) viene applicato automaticamente.
Attenzione: il formato FPA12 richiede obbligatoriamente il Codice CIG e/o il Codice CUP nei dati del contratto/ordine, quando previsti dalla normativa sugli appalti pubblici. L'assenza di questi dati puo causare il rifiuto della fattura da parte dell'ente.
3Generazione XML singola

Per generare il file XML FatturaPA da un singolo documento:

  1. Aprire il Documento (fattura, nota di credito, ecc.) dalla lista documenti o dalla scheda dettaglio.
  2. Verificare che tutti i dati obbligatori siano compilati: dati cedente/prestatore, dati cessionario/committente, righe documento con natura IVA, condizioni di pagamento.
  3. Premere il pulsante XML SDI presente nella toolbar del documento.
  4. Il sistema genera il file XML tramite l'adapter Documento → FatturaPA, applicando automaticamente il formato corretto (FPR12 o FPA12) in base al tipo di cessionario.
  5. Viene visualizzata un'anteprima del file XML con evidenza dei principali campi mappati. Verificare la correttezza dei dati.
  6. Premere Conferma e Invia per trasmettere il file al SDI oppure Salva come bozza per salvarlo nello stato DA_INVIARE.
Il sistema esegue una validazione preventiva del file XML prima dell'invio, verificando la conformita al tracciato e segnalando eventuali errori o campi mancanti. Questo riduce significativamente il rischio di scarto da parte del SDI.
4Generazione XML batch

La generazione batch consente di elaborare in un solo passaggio tutte le fatture emesse che non sono ancora state archiviate in SDI. L'operazione si svolge direttamente dalla pagina Archivio SDI.

Come attivarla

  1. Accedere al menu Fatturazione → Archivio SDI.
  2. Nella barra dei filtri (sopra la lista delle trasmissioni) cliccare il pulsante ⚡ Genera da fatture.
  3. Si apre un pannello con l'elenco automatico di tutte le fatture emesse non ancora elaborate per il SDI: il sistema filtra autonomamente i documenti con tipo TD01…TD28 in stato definitivo (EMESSO, CONFERMATO, INVIATO, PAGATO) che non possiedono ancora un record in Archivio SDI.
  4. Selezionare le fatture desiderate con le checkbox a sinistra di ogni riga, oppure usare la checkbox di intestazione per selezionare tutto l'elenco.
  5. Premere ⚡ Genera N XML (dove N è il numero di fatture selezionate) per avviare la generazione.
  6. Al termine appare un riepilogo con: file XML generati, fatture già esistenti saltate (idempotenza), eventuali errori con documento di origine. Il pannello si chiude automaticamente e la tabella dell'archivio si aggiorna.

Colonne mostrate nel pannello di selezione

ColonnaDescrizione
TipoCodice SDI (es. TD01, TD24)
NumeroNumero progressivo del documento
DataData emissione
ClienteRagione sociale o nome/cognome
P.IVA / CFPartita IVA o Codice Fiscale cessionario
Cod. Dest.Codice destinatario SDI a 7 caratteri (o "PEC" se destinatario via PEC, o 0000000 di default)
Totale €Lordo documento

Endpoint backend

  • GET /api/sdi/emesse/_/da-elaborare — lista delle fatture senza record SDI (LEFT JOIN nullo su fatture_sdi.documentoId). Il prefisso _/ evita la collisione con la rotta /emesse/:id.
  • POST /api/sdi/emesse/_/batch-genera con body { documentoIds:[id1,id2,…] } — genera in sequenza riusando internamente il flusso genera-da-documento, con gestione individuale degli errori e skip idempotente se il record SDI esiste già
Idempotenza garantita: se una fattura è già stata elaborata in precedenza (ha già un record in Archivio SDI), il batch la salta senza errori e la segnala come "già esistente" nel riepilogo finale. Si può quindi rilanciare il batch in sicurezza senza rischio di duplicazioni.
La generazione batch elabora i documenti in sequenza sul backend. Per volumi molto elevati (oltre 500 fatture) è consigliabile frazionare la selezione in più sessioni consecutive per mantenere la responsività dell'interfaccia.
5Archivio SDI

L'Archivio SDI (menu Fatturazione → SDI → Archivio) presenta la lista completa di tutte le trasmissioni effettuate, con strumenti di consultazione e monitoraggio.

Statistiche riepilogative

In testa alla pagina vengono visualizzate le statistiche aggregate:

IndicatoreDescrizione
Totale trasmissioniNumero complessivo di file XML trasmessi
ConsegnateFatture recapitate con successo al destinatario
In attesaFatture trasmesse in attesa di notifica dal SDI
ScartateFatture rifiutate dal SDI per errori formali
Da inviareFile XML generati ma non ancora trasmessi

Filtri disponibili

FiltroDescrizione
Stato SDIFiltra per stato della trasmissione (v. sezione 6)
PeriodoIntervallo date di trasmissione
FormatoFPR12 o FPA12
CessionarioRicerca per ragione sociale o partita IVA del destinatario
Numero documentoRicerca per numero fattura di origine
Identificativo SDIRicerca per ID assegnato dal Sistema di Interscambio
Dall'archivio e possibile scaricare il file XML originale, visualizzare il foglio di stile della fattura e consultare tutte le notifiche ricevute per ciascuna trasmissione.
6Stati SDI

Ogni trasmissione al Sistema di Interscambio attraversa una sequenza di stati che ne descrivono il ciclo di vita. Di seguito la tabella completa degli stati e le transizioni possibili:

StatoDescrizioneTransizioni possibili
DA_INVIAREFile XML generato, non ancora trasmesso al SDI. Il documento e in attesa di invio manuale o automatico.IN_ATTESA
IN_ATTESAFile trasmesso al SDI, in attesa di notifica di esito. Il SDI ha preso in carico il file e sta eseguendo i controlli formali.CONSEGNATA, IMPOSSIBILE, SCARTATA
CONSEGNATALa fattura e stata recapitata con successo al cessionario/committente tramite il canale telematico registrato (Codice SDI o PEC).ACCETTATA, RIFIUTATA, DECORRENZA_TERMINI
IMPOSSIBILEIl SDI non e riuscito a recapitare la fattura al destinatario (canale non attivo, PEC piena, ecc.). La fattura viene messa a disposizione nell'area riservata del portale Fatture e Corrispettivi.ACCETTATA, RIFIUTATA, DECORRENZA_TERMINI
SCARTATAIl SDI ha rilevato errori formali nel file XML (es. partita IVA non valida, formato non conforme, codice errore specifico). La fattura si considera non emessa; e necessario correggere l'errore e ritrasmettere.DA_INVIARE (dopo correzione)
ACCETTATAIl cessionario (solo PA con formato FPA12) ha accettato esplicitamente la fattura. Stato finale positivo.— (stato finale)
RIFIUTATAIl cessionario (solo PA con formato FPA12) ha rifiutato la fattura, indicando la motivazione. E necessario emettere una nota di credito o una nuova fattura corretta.— (stato finale)
DECORRENZA_TERMINISono trascorsi 15 giorni dalla consegna/messa a disposizione senza che il cessionario PA abbia comunicato accettazione o rifiuto. La fattura si considera tacitamente accettata.— (stato finale)
Una fattura SCARTATA dal SDI si considera giuridicamente non emessa. Il cedente deve correggere gli errori segnalati e ritrasmettere il file entro 5 giorni dalla data di notifica di scarto, mantenendo lo stesso numero e data del documento originale, ai sensi dell'art. 21 DPR 633/72.
7Notifiche SDI

Il Sistema di Interscambio comunica l'esito delle trasmissioni tramite notifiche codificate. Il modulo riceve e processa automaticamente le seguenti tipologie:

CodiceNomeDescrizioneAzione sistema
RCRicevuta di ConsegnaConferma che la fattura e stata recapitata al destinatario tramite il canale telematico registrato.Stato → CONSEGNATA
NSNotifica di ScartoIl SDI ha rilevato uno o piu errori nel file XML. Viene indicato il codice errore specifico e la descrizione.Stato → SCARTATA; log errori visibile nel dettaglio
MCMancata ConsegnaIl SDI non e riuscito a recapitare la fattura al destinatario. La fattura viene messa a disposizione nell'area riservata.Stato → IMPOSSIBILE
NENotifica di Esito (Esito Committente)Il cessionario PA comunica l'accettazione o il rifiuto della fattura entro 15 giorni.Stato → ACCETTATA o RIFIUTATA
DTDecorrenza TerminiSono trascorsi 15 giorni senza comunicazione di esito da parte del cessionario PA.Stato → DECORRENZA_TERMINI
ATAttestazione di Avvenuta TrasmissioneConferma che il file e stato trasmesso al SDI e preso in carico. Generata in caso di impossibilita di recapito dopo la mancata consegna.Aggiornamento log trasmissione
SEScarto EsitoLa notifica di esito (NE) inviata dal cessionario PA e stata scartata dal SDI per errori formali.Aggiornamento log; lo stato resta invariato in attesa di nuova NE o DT
ECEsito CessionarioConferma dell'avvenuta ricezione della notifica di esito da parte del cedente. Chiude il ciclo di comunicazione.Aggiornamento log; conferma chiusura ciclo
Tutte le notifiche ricevute sono consultabili nel dettaglio della trasmissione all'interno dell'Archivio SDI. Il sistema invia inoltre un alert via email all'operatore in caso di notifica di scarto (NS) o rifiuto (NE con esito negativo).
8Adapter Documento → FatturaPA

L'adapter converte il modello Documento di NOX nella struttura XML FatturaPA conforme al tracciato v1.2.2. Di seguito la mappatura dei principali blocchi:

Blocco FatturaPASorgente DocumentoNote
FatturaElettronicaHeader / DatiTrasmissioneConfigurazione azienda + Soggetto cessionarioIdPaese, IdCodice, FormatoTrasmissione, CodiceDestinatario, PECDestinatario
CedentePrestatore / DatiAnagraficiAnagrafica azienda emittenteP.IVA, codice fiscale, denominazione, regime fiscale
CedentePrestatore / SedeIndirizzo sede legale aziendaIndirizzo, CAP, Comune, Provincia, Nazione
CessionarioCommittente / DatiAnagraficiSoggetto cessionario (modulo Soggetti)P.IVA o codice fiscale, denominazione o nome/cognome
CessionarioCommittente / SedeIndirizzo soggetto cessionarioIndirizzo, CAP, Comune, Provincia, Nazione
FatturaElettronicaBody / DatiGeneraliTestata documentoTipoDocumento (TD01, TD04, ecc.), Divisa, Data, Numero, Causale
DatiBeniServizi / DettaglioLineeRighe documentoNumeroLinea, Descrizione, Quantita, PrezzoUnitario, AliquotaIVA, Natura
DatiBeniServizi / DatiRiepilogoRiepilogo IVA documentoAliquotaIVA, ImponibileImporto, Imposta, EsigibilitaIVA
DatiPagamentoCondizioni pagamento documentoCondizioniPagamento, ModalitaPagamento, ImportoPagamento, DataScadenzaPagamento
Il campo TipoDocumento viene mappato automaticamente dal tipo di documento NOX: Fattura → TD01, Nota di Credito → TD04, Fattura Acconto → TD02, Parcella → TD06. La mappatura e configurabile dall'amministratore nel pannello Impostazioni SDI.
Per le righe con aliquota IVA pari a zero, e obbligatorio specificare il campo Natura (es. N1 escluse, N2.1 non soggette, N2.2 non soggette altri casi, N3 non imponibili, N4 esenti, N6 reverse charge). L'assenza di questo campo causa lo scarto da parte del SDI (errore 00400).
9Novita Aprile 2026 (v2.1)

Aggiornamento del modulo SDI con nuove funzionalità di gestione massiva e fix del generatore XML.

Selezione multipla con checkbox

Nella lista Archivio SDI è disponibile una colonna checkbox per la selezione multipla dei record. Quando sono selezionati uno o più record compare una barra azioni bulk in alto con le operazioni disponibili:

  • Cambia stato → applica il nuovo stato a tutte le fatture selezionate
  • Rigenera XML → rigenera in massa
  • Esporta → esporta XML e ricevute

Eliminazione (cestino) record SDI

Ogni record SDI presenta un'icona cestino. L'icona è sempre visibile ma è attiva solo per i record in stato ANNULLATA; negli altri stati è disabilitata a tutela della tracciabilità fiscale.

Modifica manuale del Progressivo Invio

Accanto al valore Progressivo Invio compare un'icona che permette di modificare manualmente il contatore. Utile per allineamenti in fase di migrazione o quando il contatore SDI remoto e quello locale vanno disallineati.

Data visualizzata in lista SDI (fix 24 aprile 2026)

La colonna Data nella lista SDI mostra la data del documento fiscale (campo dataDocumento), non la data di generazione del record SDI. Prima del fix, i record generati in massa (es. tutti insieme dopo una migrazione) apparivano tutti con la stessa data di creazione, nascondendo la data fiscale reale.

Univocità del Progressivo Invio (fix aprile 2026)

Dal 24 aprile 2026 il campo progressivoInvio ha un constraint UNIQUE a livello database su tutti i workspace. Il calcolo del prossimo progressivo si basa ora sul valore massimo del progressivoInvio esistente (non sull'id record), eliminando un bug che poteva generare duplicati dopo cancellazioni di record SDI pregressi.

Precisazione normativa: il <ProgressivoInvio> nell'XML FatturaPA e il <Numero> della fattura sono due contatori indipendenti. L'unico requisito è l'univocità del progressivo per cedente. Non è previsto (né richiesto) che coincida con il numero fattura o che sia contiguo senza salti.

Sincronizzazione cross-workspace

Quando si genera un XML in un workspace per cui è configurato un syncTargetWorkspaceId (vedi Utenti → Database di Lavoro), il record SDI e il file XML vengono replicati automaticamente sul workspace target. Rimpiazza gli hardcoded precedenti (“provatest” / “studio”) con una configurazione per workspace.

Fix del generatore XML FatturaPA

Il file backend utils/fatturaXml.js è stato corretto in più punti per allinearsi al tracciato XSD ufficiale:

CampoFix
IdCodice trasmittenteUsa idTrasmittente dai parametri (non la P.IVA con prefisso IT)
PrezzoTotale / ImponibileImportoCalcolati correttamente (arrotondamenti a 2 decimali, gestione omaggi e sconti multipli)
Nome fileFormato corretto ITxxx_00035.xml (prefisso paese + identificativo trasmittente + progressivo)
Apostrofi curviConvertiti automaticamente in apostrofi dritti (scarto 00404 evitato)
Cassa previdenzialeInclusa in ImponibileImporto
RiferimentoNormativoPosizionato dopo Imposta (ordine XSD corretto)
Non è necessario ri-trasmettere le fatture già accettate. I fix si applicano alle nuove generazioni XML e alle rigenerazioni di fatture in stato DA_INVIARE / SCARTATA.
10Trasmissione diretta SDI (v2.1.1)

Dalla versione 2.1.1 NOX supporta la trasmissione diretta dei file XML FatturaPA al Sistema di Interscambio, senza passaggio manuale attraverso il portale Fatture e Corrispettivi. Sono disponibili tre modalità configurabili per workspace.

10.1 Configurazione intermediario

La configurazione si effettua in Parametri → Fatturazione-Cassa ⚡SDI → sezione ⚡ Trasmissione Sistema di Interscambio (SDI).

ModalitàCanaleCampi da configurare
Manuale (default)Download XML + upload manuale sul portale AdENessuno — l'utente scarica il file e lo carica in Fatture e Corrispettivi
PECInvio via posta elettronica certificata all'indirizzo sdi01@pec.fatturapa.itHost SMTP PEC, porta, utente, password, mittente
Aruba APIAPI REST Fatturazione Elettronica Aruba (Produzione o Demo)URL endpoint, username, password
Le password sono protette dal toggle 👁 (occhio) che consente di mostrarle o nasconderle in fase di inserimento, senza mai registrarle in chiaro nell'interfaccia. Il valore salvato e crittografato nel campo sdiConfig (JSONB) della tabella Parametri.

10.2 Modalità PEC (Aruba PEC esempio)

Se si utilizza una casella Aruba PEC, i parametri SMTP tipici sono:

ParametroValore
Hostsmtps.pec.aruba.it
Porta465
TLSImplicito (SSL)
UtenteIndirizzo PEC completo (es. studio@pec.esempio.it)
PasswordPassword della casella PEC
Destinatariosdi01@pec.fatturapa.it (preimpostato di sistema)

Per altri gestori PEC (Legalmail, Namirial, ecc.) consultare la documentazione del provider. I limiti di invio della casella PEC vanno rispettati: la PEC e sconsigliata per volumi massivi (> 50 fatture/giorno).

10.3 Modalità Aruba API — Produzione

Per il canale Aruba Fatturazione Elettronica API servono credenziali rilasciate da Aruba al momento dell'attivazione del servizio (non coincidono con le credenziali della PEC). Endpoint tipico di produzione:

  • URL: https://ws.fatturazioneelettronica.aruba.it
  • Username / Password: forniti nel pannello Aruba

10.4 Modalità Aruba API — Demo (test)

Aruba mette a disposizione un ambiente di collaudo gratuito per testare l'integrazione senza inviare fatture reali al SDI. I passi per registrarsi e testare sono:

  1. Registrarsi sul portale demo.fatturazioneelettronica.aruba.it con un indirizzo email valido; si ottengono username e password di test.
  2. In NOX selezionare modalità Aruba API e inserire come URL: https://demows.fatturazioneelettronica.aruba.it
  3. Inserire le credenziali demo ricevute via email.
  4. Salvare la configurazione e provare a trasmettere una fattura di test dalla lista SDI.
  5. Le fatture trasmesse sono visibili nel pannello web Aruba Demo sotto Gestione Documenti → Inviati, dove si possono verificare lo stato e i messaggi di risposta.
Le fatture trasmesse in modalità Demo non sono inviate al Sistema di Interscambio reale e non hanno alcun valore fiscale. Servono solo per validare la connessione, la generazione XML e il flusso di stato. Prima di passare in produzione, cambiare URL, username e password con quelli definitivi.

10.5 Pulsante ⚡ di trasmissione

Nell'Archivio SDI, per ogni record in stato DA_INVIARE compare il pulsante ⚡ (fulmine) nella riga. Premendolo:

  1. Il sistema legge la configurazione corrente (sdiConfig) del workspace.
  2. A seconda della modalità attiva, il file XML viene:
    • Manuale: scaricato sul PC dell'operatore (non cambia stato)
    • PEC: allegato a un messaggio PEC inviato a sdi01@pec.fatturapa.it via nodemailer
    • Aruba API: caricato sul web service REST con autenticazione Basic
  3. Se la trasmissione riesce, lo stato del record passa automaticamente da DA_INVIARE a IN_ATTESA.
  4. Se la trasmissione fallisce (es. credenziali errate, rete, 5xx), il record resta in DA_INVIARE e l'errore viene mostrato in popup + scritto nel log trasmissione.
Il pulsante ⚡ sostituisce, per chi ha configurato PEC o Aruba, il download manuale dell'XML e il successivo upload sul portale AdE. La modalità Manuale rimane il fallback sempre disponibile.

10.6 Riepilogo stati

Prima della trasmissioneAzioneDopo trasmissione riuscita
DA_INVIAREPulsante ⚡ → invio PEC o Aruba APIIN_ATTESA → in attesa di notifica di esito (RC/NS/MC)
DA_INVIAREPulsante ⚡ → ManualeDownload XML; stato invariato fino al caricamento manuale e alla ricezione notifiche

10.7 Password Toggle

Tutte le caselle password della sezione (PEC e Aruba) e della configurazione SMTP email sono dotate dell'icona 👁 per mostrare il carattere in chiaro durante l'inserimento. L'icona agisce solo sul rendering del campo: il valore salvato resta nascosto di default e viene sempre trasmesso su connessione HTTPS.

11Nuovi intermediari SDI (v2.1.2)

Dalla versione 2.1.2, il menu Modalità trasmissione in Parametri → Fatturazione-Cassa ⚡SDI → ⚡ Trasmissione Sistema di Interscambio (SDI) offre 11 opzioni totali: le 3 già presenti in v2.1.1 (Manuale, PEC, Aruba) e 8 nuovi intermediari aggiunti in questa release.

11.1 Riepilogo delle 11 modalità

#IntermediarioStatoCanale / AutenticazioneCredenziali richieste
1ManualeAttivoDownload XML + upload manuale AdENessuna
2PECAttivoSMTP con TLS → sdi01@pec.fatturapa.ithost, port, user, password
3ArubaAttivoREST JSON (signin + upload)apiUrl, username, password
4Fatture in Cloud (TeamSystem)Attivo con limitazioneOAuth2 refresh-tokenclientId, clientSecret, companyId, refreshToken
5Agyo Digital Hub (TeamSystem)AttivoOAuth2 client_credentials + POST /v1/documentsclientId, clientSecret, vatId (P.IVA)
6Zucchetti Digital HubAttivoREST con X-API-Key header + POST {endpoint}/invoices/sendapiKey, endpoint
7FattureWeb (Wolters Kluwer)AttivoMultipart upload + Authorization: ApiKeyapiKey, companyCode, environment (test|production)
8Fatturapa.itAttivoREST Bearer token + POST /v2/invoicesemail, apiKey
9Infocert🧩 Stub 501Richiede certificato digitale X.509
10Sistema Impresa (Engineering)🧩 Stub 501Integrazione in corso
11AdE Web Services diretti🧩 Stub 501Richiede accreditamento SDI e firma digitale
Tutti gli intermediari attivi validano le credenziali prima dell'invio e ritornano un errore 400 se mancanti. In caso di fallimento remoto, il body di errore del provider viene restituito all'interno di un errore 502 per facilitarne il debug.

11.2 Fatture in Cloud (TeamSystem)

Autenticazione: OAuth2 refresh-token. Durante l'invio NOX scambia il refresh-token con un access-token temporaneo e lo utilizza per tentare l'upload dell'XML.

Credenziali richieste:

  • clientId — ID applicazione (ottenuto dal portale sviluppatori TeamSystem)
  • clientSecret — segreto applicazione
  • companyId — ID azienda su Fatture in Cloud
  • refreshToken — token di refresh a lunga durata ottenuto tramite flusso OAuth2
Limitazione API: l'intermediario valida correttamente le credenziali ma ritorna 501 Not Implemented per l'upload diretto XML. Il motivo è architetturale: Fatture in Cloud richiede che il documento sia già stato creato al suo interno (tramite UI o API di creazione). NOX supporterà l'export completo nelle versioni successive.

11.3 Agyo Digital Hub (TeamSystem)

Autenticazione: OAuth2 client_credentials grant type. NOX ottiene un access-token via /auth/token e lo utilizza come Bearer per POST /v1/documents.

Credenziali richieste: clientId, clientSecret, vatId (P.IVA dell'azienda).

Esempio URL: https://services.agyo.io/v1/documents

Agyo è l'hub digitale di TeamSystem dedicato allo scambio B2B/B2G con il SDI. Adatto a chi già utilizza prodotti TeamSystem (Gecom, ACG, Alyante).

11.4 Zucchetti Digital Hub

Autenticazione: header X-API-Key con chiave fornita da Zucchetti.

Endpoint configurabile: il campo endpoint è personalizzabile per puntare ad ambienti diversi (produzione, staging). NOX chiama POST {endpoint}/invoices/send.

Credenziali richieste: apiKey, endpoint.

Esempio endpoint test: https://api.zucchetti-digital-hub.com

11.5 FattureWeb (Wolters Kluwer)

Autenticazione: header Authorization: ApiKey {apiKey}. Upload dell'XML tramite multipart/form-data.

Selezione ambiente: il campo environment accetta test o production; NOX commuta automaticamente l'URL base.

Credenziali richieste: apiKey, companyCode, environment.

Esempio URL di test: https://test.fattureweb.wolterskluwer.it/api

Esempio URL produzione: https://fattureweb.wolterskluwer.it/api

11.6 Fatturapa.it

Autenticazione: Bearer token Authorization: Bearer {apiKey}. Upload XML tramite POST /v2/invoices.

Credenziali richieste: email (account Fatturapa.it), apiKey.

Esempio URL: https://www.fatturapa.it/api/v2/invoices

Fatturapa.it è un servizio indipendente (non legato a un ERP specifico) adatto anche ai piccoli emittenti. L'API key si genera dal pannello utente.

11.7 Intermediari con requisiti speciali (stub)

Tre intermediari sono presenti in elenco ma ritornano 501 Not Implemented con un messaggio esplicativo: richiedono setup aggiuntivo non disponibile nella versione corrente.

IntermediarioMotivo dello stubAlternativa consigliata
InfocertRichiede certificato digitale X.509. Il formato del certificato e la catena di fiducia devono essere installati lato server. Contattare l'assistenza per il setup.PEC o Aruba API nel frattempo
Sistema Impresa (Engineering)Intermediario in fase di integrazione. Specifiche tecniche ricevute ma implementazione non ancora completata.Modalità Manuale o PEC in attesa del rilascio
AdE Web Services direttiLa trasmissione diretta all'Agenzia Entrate richiede accreditamento SDI con firma tramite certificato digitale. Non supportato nella versione web-only di NOX.Usare un intermediario accreditato
Questi tre intermediari compaiono nel menu per anticipare le future attivazioni. Selezionandoli e tentando un invio, l'utente riceve un errore esplicativo (501). L'XML resta in stato DA_INVIARE.

11.8 Come scegliere l'intermediario giusto

SituazioneModalità consigliata
Nessun contratto con intermediari — sono forfettario o micro-impresaManuale (upload su Fatture e Corrispettivi)
Ho già una casella PEC aziendalePEC (limiti: circa 50 fatture/giorno)
Uso già Fatturazione Elettronica ArubaAruba
Sono cliente Fatture in CloudFatture in Cloud (limitazione: l'invio diretto XML non è supportato dall'API; usare in modalità consultazione)
Sono cliente TeamSystem (Gecom, ACG, Alyante)Agyo Digital Hub
Sono cliente Zucchetti (Ad Hoc, InfoBusiness)Zucchetti Digital Hub
Sono cliente Wolters Kluwer (Osra, Genesio, Arca)FattureWeb
Voglio un servizio indipendente e a consumoFatturapa.it
Voglio testare senza contrattiManuale o Aruba Demo (vedi sezione 10.4)

11.9 Validazione credenziali ed errori

  • Errore 400: credenziali mancanti o incomplete (il sistema verifica i campi obbligatori prima di contattare il provider).
  • Errore 401/403: credenziali errate o scadute (apiKey revocata, refreshToken scaduto, password cambiata).
  • Errore 502: il provider ha restituito un errore. Il body della risposta del provider è incluso nel messaggio per facilitare il debug.
  • Errore 501: intermediario non implementato (Infocert / Sistema Impresa / AdE diretti) o funzionalità non disponibile (Fatture in Cloud upload XML).
Tutti i campi password e le chiavi API hanno il toggle 👁 per mostrare/nascondere il valore durante l'inserimento. Nessuna dipendenza npm aggiuntiva è stata introdotta: le chiamate HTTP usano il fetch nativo di Node 18+.
12Intrastat UE + Esterometro — export trimestrali

Se fatturi o ricevi fatture da clienti/fornitori con P.IVA in altri paesi UE, devi presentare all'Agenzia Entrate gli elenchi Intrastat e, per operazioni esterne UE, l'Esterometro.

Intrastat UE — Cessioni (INTRA-1bis) e Acquisti (INTRA-2bis)

  1. Apri il menu utente in alto a destra → Fatturazione avanzata
  2. Nella sidebar scegli “Intrastat UE”
  3. Imposta l'anno di riferimento
  4. Clicca Genera CSV INTRA-1bis/2bis

Il file CSV contiene, per ciascun paese UE, l'elenco dei soggetti con P.IVA + il totale fatture/imponibile/IVA. Le ultime 4 colonne (Nomenclatura combinata, Natura transazione, Condizioni consegna, Modo trasporto) sono da compilare dal commercialista.

Esterometro — Comunicazione operazioni transfrontaliere

  1. Stessa pagina, sezione “Esterometro”
  2. Scegli anno + trimestre (Q1-Q4)
  3. Clicca Genera XML

Il file XML elenca separatamente Cessioni e Acquisti verso controparti con P.IVA non italiana. È pensato come riepilogo per controlli interni o per export al commercialista.

Dal 1° luglio 2022 l'Esterometro è stato sostituito dalla Fattura Elettronica via SDI anche per operazioni cross-border (art. 1 comma 3-bis DL 127/2015): se emetti/ricevi fatture elettroniche verso estero già tramite SDI, l'Esterometro non va più presentato separatamente. Resta comunque utile come strumento di riepilogo.

Scadenze

  • Intrastat mensile: entro il giorno 25 del mese successivo
  • Intrastat trimestrale: entro il 25 del mese successivo al trimestre (es. Q1 → 25 aprile)
  • Esterometro: entro la fine del mese successivo al trimestre
?Domande frequenti (FAQ)
La fattura e stata scartata dal SDI. Cosa devo fare?
Consultare il dettaglio della trasmissione nell'Archivio SDI per individuare il codice errore specifico. Correggere il dato errato nel Documento originale (es. partita IVA, codice natura IVA, formato importi), rigenerare l'XML e ritrasmettere entro 5 giorni dalla notifica di scarto. Il numero e la data del documento restano invariati.
Qual e la differenza tra FPR12 e FPA12?
FPR12 e il formato per le fatture destinate a soggetti privati (imprese, professionisti, consumatori finali), identificati da un Codice Destinatario a 7 caratteri. FPA12 e il formato per le fatture destinate alla Pubblica Amministrazione, identificata da un Codice Univoco Ufficio a 6 caratteri. Il sistema seleziona automaticamente il formato corretto in base all'anagrafica del cessionario.
Come gestisco una fattura verso un consumatore finale senza partita IVA?
Per i consumatori finali (B2C) si utilizza il formato FPR12 con Codice Destinatario 0000000. Nel campo IdFiscaleIVA si omette la partita IVA e si indica il solo codice fiscale della persona fisica. La fattura viene messa a disposizione nell'area riservata del portale Fatture e Corrispettivi dell'Agenzia delle Entrate.
Posso annullare una fattura gia trasmessa e consegnata?
No, una fattura elettronica trasmessa al SDI e consegnata al destinatario non puo essere annullata o ritirata. Per correggere errori e necessario emettere una nota di credito (TD04) a storno totale e, se necessario, riemettere una nuova fattura corretta. Questa procedura e conforme all'art. 26 DPR 633/72.
Quanto tempo impiega il SDI a processare una fattura?
Il Sistema di Interscambio normalmente processa e recapita le fatture entro pochi minuti dalla trasmissione. Tuttavia, in periodi di alto traffico (fine mese, scadenze fiscali), i tempi possono estendersi fino a 5 giorni. Lo stato IN_ATTESA indica che il SDI ha preso in carico il file e sta eseguendo i controlli.
Come verifico che il Codice Destinatario del cessionario sia corretto?
Il Codice Destinatario e un codice alfanumerico di 7 caratteri (per privati) o 6 caratteri (per PA, detto Codice Univoco Ufficio). Per i privati, il codice viene comunicato dal cessionario e registrato nell'anagrafica Soggetti. Per la PA, e reperibile dal portale iPA (indicepa.gov.it). In caso di dubbio, utilizzare 0000000 e indicare la PEC del destinatario.
14Audit cambio stato fattura SDI
🔑 Visibilità condizionata (certificazione v 2.2) — Questo modulo è accessibile solo se:
Pacchetto BASE attivo sul workspace (configurabile da SUPERADMIN in /admin/pacchetti)
Profilo attività compatibile: Tutti i profili (fatturazione elettronica obbligatoria)
Permesso utente abilitato in Modifica Utente → Moduli
I tre livelli si applicano in intersezione. Dettagli completi in Gerarchia Pacchetti+Profilo+Utente.

Ogni transizione di stato di una fattura emessa è tracciata nella tabella log_modifiche_fattura_sdi.

Stati gestiti

PENDENTE → IN_ATTESA → INVIATA → (ACCETTATA | SCARTATA) → CONSERVATA

Ogni cambio registra: stato vecchio, stato nuovo, operatore, timestamp, eventuale messaggio di errore SDI come motivazione.

Endpoint: GET /api/sdi/emesse/:id/audit-log.

La matrice di transizioni vietate (es. impedire ACCETTATA → PENDENTE) è in roadmap v 2.3: oggi qualsiasi transizione è accettata ma lascia traccia audit.
15Log trasmissioni SdI

Ogni evento di interscambio con il Sistema di Interscambio è registrato in log_trasmissioni_sdi.

Eventi tracciati

EventoSignificato
TRASMESSAInviata a SdI
NSNotifica Scarto (errore tecnico o formale)
MCMancata Consegna (destinatario non raggiungibile)
RCRicevuta di Consegna
EC01Esito committente: Accettata
EC02Esito committente: Rifiutata

Dati conservati

  • identificativo_sdi: ID assegnato da AdE
  • hash_xml: SHA-256 del file XML trasmesso
  • xml_size: dimensione in byte
  • ricevuta_xml: XML ricevuta grezza conservata per analisi forense
  • operatore: utente che ha eseguito / ricevuto

Endpoint: GET /api/sdi/emesse/:id/trasmissioni.

16Timeline aggregata

Endpoint GET /api/sdi/emesse/:id/timeline restituisce la vista unificata: modifiche + trasmissioni ordinate cronologicamente (descendente).

Utile per ricostruire la catena completa «fattura → invio SdI → notifica AdE → esito» in caso di contestazione o verifica fiscale.

Esempio: fattura con Notifica Scarto può essere rinviata correggendo l'errore indicato, e la timeline conserva la traccia di tutto il percorso.
17Immutabilità XML

L'XML FatturaPA originale è conservato anche dopo invio. L'hash SHA-256 permette di verificare a posteriori se il file sul disco coincide con quanto trasmesso.

  • Nome file generato per convenzione (provv. AdE 30/04/2018)
  • Progressivo univoco per trasmissione, mai riutilizzabile
  • Hash calcolato al momento della prima trasmissione
  • Confronto con file attuale rileva alterazioni accidentali o deliberate
La firma digitale CAdES sull'XML è in roadmap v 2.3 (oggi gli XML sono trasmessi non firmati, se il canale SdI richiede firma va integrato HSM o cert. locale).
18Conservazione fiscale 10 anni

Le fatture elettroniche devono essere conservate per 10 anni (art. 2220 c.c. + art. 39 DPR 633/72).

La conservazione a norma AgID richiede conservatore accreditato esterno. Il modulo conservazione interno è placeholder.

In attesa dell'integrazione conservatore AgID:

  • Gli XML restano nel filesystem backend del server
  • Backup giornaliero del DB include i riferimenti
  • Log trasmissioni conservato per ricostruire lo stato
Per compliance fiscale completa è necessario stipulare contratto con conservatore accreditato AgID (Aruba, InfoCert, Namirial, etc.).
19Matrice transizioni di stato

La transizione dello stato di una fattura SDI è validata server-side da una matrice fissa che impedisce retrocessioni incoerenti con la posizione fiscale e con la logica del Sistema di Interscambio.

Matrice applicata

Da stato→ Transizioni ammesse
DA_INVIAREIN_ATTESA, ERRORE, ANNULLATA
IN_ATTESACONSEGNATA, IMPOSSIBILE, SCARTATA, DECORRENZA_TERMINI, ERRORE, ACCETTATA, RIFIUTATA
CONSEGNATAACCETTATA, RIFIUTATA, DECORRENZA_TERMINI
IMPOSSIBILEIN_ATTESA (re-invio dopo mancata consegna)
ACCETTATAnessuna — stato finale positivo
RIFIUTATAnessuna — stato finale negativo
SCARTATADA_INVIARE (correzione errore e re-invio)
DECORRENZA_TERMINInessuna — stato finale (15 giorni senza esito committente)
ERROREDA_INVIARE, IN_ATTESA
ANNULLATADA_INVIARE

Comportamento in caso di transizione non ammessa

  • Il server risponde HTTP 409 Conflict con messaggio esplicativo
  • Il body della response contiene il campo ammesse con l'elenco delle transizioni lecite da quello stato
  • Esempio: { error: "Transizione non consentita: ACCETTATA → IN_ATTESA. Stati ammessi: (stato finale). SUPERADMIN può forzare con flag forza:true.", ammesse: [] }

Forzatura transizione (override)

Solo un utente SUPERADMIN può forzare una transizione non ammessa aggiungendo "forza": true nel body del PATCH. La forzatura viene registrata separatamente nell'audit log come campo = "stato_forzato" con motivazione automatica.

La forzatura deve essere usata solo per correggere errori di integrazione, non per aggirare la logica fiscale. Ogni forzatura lascia traccia permanente nell'audit.

Riferimento normativo

  • Provv. AdE 30/04/2018 — Specifiche tecniche fatturazione elettronica v1.7.1
  • Art. 1 comma 909 L. 205/2017 — Obbligo fatturazione elettronica
  • Documentazione tecnica SdI — Cicli di vita fatture e notifiche
§Parsing XML passive + Esterometro + Intrastat (v 2.2 wave 8)

Parsing XML FatturaElettronica robusto

Il parsing del XML ricevuto da SDI è ora eseguito tramite la libreria xml2js (aggiunta come dipendenza backend). Gestisce correttamente namespaces, attributi, linee singole o array, riepiloghi IVA multipli.

  • POST /api/fatturazione/sdi-passive/:id/parse-xml [ADMIN] — estrae DettaglioLinee, DatiRiepilogo, dati cedente; popola fattura_passiva_righe
  • Ritorna: righeEstratte, riepilogoIva[] (aliquota + natura + imponibile + imposta + esigibilità), intestazioneFornitore

Contabilizzazione automatica fatture passive

Vedi manuale Contabilità § Contabilizzazione automatica. Pattern reverse charge per TD17/TD18/TD19 con doppia annotazione IVA credito/debito.

Esterometro — XML reale

Generazione del file XML "Dati fatture transfrontaliere" v3.0 (schema Agenzia Entrate) a partire dai documenti TD17/TD18/TD19 del trimestre.

  • POST /api/fatturazione/esterometro-xml/genera/:periodo [ADMIN] (es. 2026-Q1) — produce XML con sezioni DTE (cessioni) e DTR (acquisti), salva file in /app/xml-generati/, aggiorna esterometro_comunicazioni.stato = INVIATO
  • GET /api/fatturazione/esterometro-xml/download/:id — scarica il file XML generato
  • Archivio centralizzato: xml_generati_archivio con path, SHA-256, contenuto inline se < 500KB

Intrastat — dichiarazioni cessioni / acquisti UE

Gestione dichiarazioni intra-comunitarie con tabelle intrastat_dichiarazioni (UNIQUE periodo + tipo) e intrastat_righe. Generazione XML secondo schemi ministeriali (INTRA-1bis per cessioni, INTRA-2bis per acquisti).

  • GET/POST /api/fatturazione/intrastat/dichiarazioni — CRUD dichiarazioni con periodicità MENSILE / TRIMESTRALE
  • POST /api/fatturazione/intrastat/righe/:dichiarazioneId [ADMIN] — inserisce riga con: paese ISO, PIVA controparte, codice NC8, valore statistico, massa netta kg, natura transazione (A-P tabella Dogana), condizioni consegna (INCOTERMS: EXW, FOB, CIF, DAP…), modo trasporto (1-5), paese origine
  • POST /api/fatturazione/intrastat/genera-xml/:dichiarazioneId [ADMIN] — produce XML e setta stato PRESENTATA, data_presentazione = oggi

Archivio XML centralizzato

Tabella xml_generati_archivio raccoglie tutti gli XML generati (Esterometro, Intrastat, Autofattura). Ogni record ha hash SHA-256 per verifica integrità.

  • GET /api/fatturazione/archivio-xml?tipo=ESTEROMETRO&periodo=2026-Q1 — lista filtrata
L'invio effettivo alla Dogana tramite sistema STATEL o portale IntraSIM dell'Agenzia delle Dogane richiede certificato digitale esterno e firma CAdES (vedere scaffolding in firma-cades.service.js e integrazioni.routes.js). Questa implementazione genera il contenuto XML conforme; la trasmissione richiede strumenti aggiuntivi.
!Avviso termine SDI 12 giorni

Le fatture devono essere trasmesse al Sistema di Interscambio entro 12 giorni dalla data documento (Art. 21 DPR 633/72, vigente dal 1° luglio 2019).

🚨Sanzione tardiva: 90% dell'IVA, minimo 500 € per fattura. Riducibile a 250 € con ravvedimento operoso, ma comunque insidiosa se accumulata.

Dove si vede l'avviso

NOX ti avvisa in 3 punti diversi:

  1. Dashboard: tra le notifiche compare un banner rosso critico se ci sono fatture DA_INVIARE oltre i 12 giorni. Cliccando si va in /sdi filtrato per DA_INVIARE.
  2. Pagina /sdi (Archivio Emesse): in cima alla lista appare un banner riepilogo a 3 livelli con il conteggio aggregato delle fatture in vista del termine.
  3. Riga tabella: per ogni fattura DA_INVIARE in vista del termine appare un badge pulsante con i giorni rimanenti (o di ritardo). Stesso badge nel modal «Genera XML da fatture».

Soglie di urgenza

  • 🚨 SCADUTO (rosso): oltre 12 giorni dalla data documento — trasmetti subito
  • ⚠️ Imminente (arancione): 2 giorni o meno residui
  • Attenzione (giallo): 5 giorni o meno residui

Le soglie sono visibili e configurabili in archivio-sdi.component.ts (costante TERMINE_SDI_GG).