SDI / Fatturazione Elettronica
Generazione XML FatturaPA, trasmissione al Sistema di Interscambio e gestione notifiche
Riferimenti normativi
- D.Lgs. 127/2015 — Obbligo di fatturazione elettronica: introduce l'obbligo di emissione e trasmissione delle fatture in formato elettronico tramite il Sistema di Interscambio (SDI) per le cessioni di beni e le prestazioni di servizi tra soggetti residenti o stabiliti in Italia. Dal 1° gennaio 2019 l'obbligo e esteso a tutti i soggetti passivi IVA, inclusi i forfettari dal 1° luglio 2022.
- DPR 633/72, art. 21 — Contenuto della fattura: definisce gli elementi obbligatori della fattura: dati identificativi del cedente/prestatore e del cessionario/committente, numero progressivo, data di emissione, natura/qualita/quantita dei beni o servizi, corrispettivi, aliquota e imposta. Il modulo SDI mappa automaticamente questi campi dal Documento alla struttura XML FatturaPA.
- Provvedimento AdE 89757/2018 — Specifiche tecniche (versione 1.9, in vigore dal 1° aprile 2025): stabilisce le regole tecniche per la predisposizione, trasmissione e ricezione delle fatture elettroniche tramite SDI. Definisce il tracciato XML FatturaPA, i controlli formali, i codici errore e le modalita di recapito (Codice Destinatario, PEC, area riservata). La versione 1.9 aggiunge il regime RF20 (franchigia transfrontaliera, presente in NOX) e il tipo TD29 (comunicazione di omessa o irregolare fatturazione da parte di un fornitore italiano, art. 6 c.8 D.Lgs. 471/97), che in NOX c'è: le aziende nuove nascono col suo tipo documento, il cedente nel file è il fornitore e non entra nei registri IVA né in prima nota (dettagli nel manuale Documenti).
- D.Lgs. 82/2005 — Codice dell'Amministrazione Digitale (CAD): disciplina la conservazione digitale dei documenti informatici. Le fatture elettroniche devono essere conservate in formato digitale per almeno 10 anni, garantendo autenticita, integrita, affidabilita, leggibilita e reperibilita, mediante un sistema di conservazione conforme alle linee guida AgID.
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.
Pacchetto. Tutta la parte SdI — archivio delle fatture emesse e dei loro stati, fatture ricevute, XML incollato o importato, configurazione dell'intermediario — fa parte del pacchetto Fatturazione: senza il pacchetto le voci SDI non compaiono nel menu e le sue funzioni rispondono «non compreso nella licenza».
Il flusso operativo si articola in tre fasi principali:
- 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.
- Trasmissione al SDI: il file XML (non firmato, vedi sezione 17) si scarica e si carica sul portale Fatture e Corrispettivi, oppure lo trasmette l'intermediario configurato. Il sistema traccia lo stato di ogni trasmissione.
- Gestione notifiche: le notifiche dello SdI (ricevuta di consegna, scarto, mancata consegna, esito della PA) NOX non le riceve da solo: quando arrivano — dal portale, dalla PEC o dall'intermediario — si registrano a mano, e lo stato si aggiorna di conseguenza (sezione 7).
Il tracciato FatturaPA prevede due formati distinti, identificati dal codice nel campo FormatoTrasmissione:
| Formato | Destinatario | Codice Destinatario | Utilizzo |
|---|---|---|---|
| FPR12 | Privati (B2B / B2C) | 7 caratteri alfanumerici oppure 0000000 | Fatture 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. |
| FPA12 | Pubblica Amministrazione | 6 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. |
Per generare il file XML FatturaPA da un singolo documento:
- Aprire il Documento (fattura, nota di credito, ecc.) dalla lista documenti o dalla scheda dettaglio.
- Verificare che tutti i dati obbligatori siano compilati: dati cedente/prestatore, dati cessionario/committente, righe documento con natura IVA, condizioni di pagamento.
- Premere il pulsante XML SDI presente nella toolbar del documento.
- 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.
- Viene visualizzata un'anteprima del file XML con evidenza dei principali campi mappati. Verificare la correttezza dei dati.
- Il file si salva nell'Archivio SDI in stato DA_INVIARE: da lì si scarica (📄) per caricarlo sul portale, oppure si trasmette col pulsante ⚡ se c'è un intermediario.
Il controllo sui totali
Fra i controlli che girano prima di trasmettere c'è quello sul totale del documento, che il SDI scarta col codice 00443 quando non torna. Il totale atteso è:
imponibile + IVA + bollo + cassa previdenziale
La cassa previdenziale fa parte del totale: su una parcella con cassa al 4% il documento vale più della somma di imponibile e IVA, ed è giusto cosí. Se il controllo trova una differenza, il documento non parte e il messaggio dice quali addendi ha usato.
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
- Accedere al menu DICHIARATIVI & TELEMATICI → SDI fatturazione elettronica (l'Archivio SDI).
- Nella barra dei filtri (sopra la lista delle trasmissioni) cliccare il pulsante ⚡ Genera da fatture.
- 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…TD09eTD16…TD29in stato definitivo (EMESSO, CONFERMATO, INVIATO, PAGATO) che non possiedono ancora un record in Archivio SDI. - Selezionare le fatture desiderate con le checkbox a sinistra di ogni riga, oppure usare la checkbox di intestazione per selezionare tutto l'elenco.
- Premere ⚡ Genera N XML (dove
Nè il numero di fatture selezionate) per avviare la generazione. - 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
| Colonna | Descrizione |
|---|---|
| Tipo | Codice SDI (es. TD01, TD24) |
| Numero | Numero progressivo del documento |
| Data | Data emissione |
| Cliente | Ragione sociale o nome/cognome |
| P.IVA / CF | Partita 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 sufatture_sdi.documentoId). Il prefisso_/evita la collisione con la rotta/emesse/:id.POST /api/sdi/emesse/_/batch-generacon body{ documentoIds:[id1,id2,…] }— genera in sequenza riusando internamente il flussogenera-da-documento, con gestione individuale degli errori e skip idempotente se il record SDI esiste già
L'Archivio SDI (menu DICHIARATIVI & TELEMATICI → SDI fatturazione elettronica; fa parte del pacchetto Fatturazione) 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:
| Indicatore | Descrizione |
|---|---|
| Da inviare | File XML generati ma non ancora trasmessi |
| In attesa | Fatture trasmesse in attesa di notifica dal SDI |
| Consegnate | Fatture recapitate con successo al destinatario |
| Con problemi | Scartate (NS), rifiutate dalla PA o in errore |
| Tot. anno | Fatture dell'anno nell'archivio, per data del documento |
Filtri disponibili
| Filtro | Descrizione |
|---|---|
| Stato SDI | Filtra per stato della trasmissione (v. sezione 6) |
| Dal / Al | Data del documento, estremi compresi |
| Cerca | Numero della fattura, cliente (ragione sociale, cognome o nome), nome del file o identificativo 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:
| Stato | Descrizione | Transizioni possibili |
|---|---|---|
| DA_INVIARE | File XML generato, non ancora trasmesso al SDI. Il documento e in attesa di invio manuale o automatico. | IN_ATTESA |
| IN_ATTESA | File 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 (e gli altri della sezione 19) |
| CONSEGNATA | La fattura e stata recapitata con successo al cessionario/committente tramite il canale telematico registrato (Codice SDI o PEC). | ACCETTATA, RIFIUTATA, DECORRENZA_TERMINI |
| IMPOSSIBILE (mancata consegna, MC) | Il SDI non e riuscito a recapitare la fattura al destinatario (canale non attivo, PEC piena, ecc.). La fattura è emessa ed è a disposizione nell'area riservata del cliente sul portale Fatture e Corrispettivi: al cliente va detto. Verso la PA lo SdI ritenta per 10 giorni. | CONSEGNATA (ricevuta tardiva verso la PA) |
| SCARTATA (notifica di scarto, NS) | Il 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 e nuova generazione), ANNULLATA (documento annullato) |
| ACCETTATA | Il cessionario (solo PA: formato FPA12 o codice destinatario di 6 caratteri) ha accettato esplicitamente la fattura. Stato finale positivo. | — (stato finale) |
| RIFIUTATA | Il cessionario (solo PA: formato FPA12 o codice destinatario di 6 caratteri) ha rifiutato la fattura, indicando la motivazione. E necessario emettere una nota di credito o una nuova fattura corretta. | — (stato finale) |
| DECORRENZA_TERMINI | Sono 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) |
| ERRORE | Il file non è partito per un errore tecnico. | DA_INVIARE, IN_ATTESA, ANNULLATA |
| ANNULLATA | Il file non è mai partito e non partirà: tipicamente perché il documento è stato annullato (annullare il documento annulla anche il suo XML non ancora trasmesso). Solo in questo stato il record si può eliminare. | DA_INVIARE |
Il Sistema di Interscambio comunica l'esito delle trasmissioni tramite notifiche codificate.
Come si registra una notifica
- Nell'Archivio SDI premi la campanella 🔔 sulla riga (attiva sulle fatture In attesa, Consegnate o in Mancata consegna), oppure apri la scheda della fattura → scheda Notifiche → Registra una notifica dello SdI.
- Scegli la notifica ricevuta. Per uno scarto (NS) scrivi il codice e il motivo; per l'esito della PA (NE) indica EC01 o EC02.
- NOX aggiorna lo stato come nella tabella qui sotto, e la notifica entra nella timeline della fattura.
| Codice | Nome | Descrizione | Azione sistema |
|---|---|---|---|
| RC | Ricevuta di consegna | Conferma che la fattura e stata recapitata al destinatario tramite il canale telematico registrato. | Stato → CONSEGNATA |
| NS | Notifica di scarto | Il SDI ha rilevato uno o piu errori nel file XML: la fattura non è emessa. Viene indicato il codice errore e la descrizione. | Stato → SCARTATA, col motivo; si corregge, si rigenera e si rimanda entro 5 giorni |
| MC | Mancata consegna | Il SDI non e riuscito a recapitare la fattura: è comunque emessa e sta nell'area riservata del cliente, a cui va comunicato. | Stato → IMPOSSIBILE |
| AT | Attestazione di trasmissione con impossibilità di recapito | Solo PA: dopo la mancata consegna, lo SdI attesta di aver ricevuto il file senza poterlo recapitare. | Stato resta IMPOSSIBILE |
| NE | Notifica di esito (esito committente) | Solo PA: l'ente comunica l'accettazione (EC01) o il rifiuto (EC02) entro 15 giorni. | Stato → ACCETTATA o RIFIUTATA |
| DT | Decorrenza termini | Solo PA: sono trascorsi 15 giorni senza esito. | Stato → DECORRENZA_TERMINI |
| SE | Scarto dell'esito committente | Riguarda l'esito inviato dalla PA, non la fattura. | Si registra; lo stato resta invariato |
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 FatturaPA | Sorgente Documento | Note |
|---|---|---|
| FatturaElettronicaHeader / DatiTrasmissione | Configurazione azienda + Soggetto cessionario | IdPaese, IdCodice, FormatoTrasmissione, CodiceDestinatario, PECDestinatario |
| CedentePrestatore / DatiAnagrafici | Anagrafica azienda emittente (nelle autofatture TD16–TD20, TD22, TD23, TD28, TD29: il fornitore) | P.IVA, codice fiscale, denominazione, regime fiscale (del fornitore: dalla sua scheda, vuoto = RF18 estero / RF01 Italia) |
| CedentePrestatore / Sede | Indirizzo sede legale azienda | Indirizzo, CAP, Comune, Provincia, Nazione |
| CessionarioCommittente / DatiAnagrafici | Soggetto cessionario (modulo Soggetti); nelle autofatture l'azienda, salvo la TD26 ceduta a un cliente | P.IVA o codice fiscale, denominazione o nome/cognome. Una partita IVA estera va nel file senza il prefisso del paese: IdPaese DE, IdCodice 123456789 (non DE123456789), anche se in anagrafica è scritta col prefisso; lo stesso per il fornitore cedente delle autofatture |
| CessionarioCommittente / Sede | Indirizzo soggetto cessionario | Indirizzo, CAP, Comune, Provincia, Nazione |
| FatturaElettronicaBody / DatiGenerali | Testata documento | TipoDocumento (TD01, TD04, ecc.), Divisa, Data, Numero, Causale |
| DatiBeniServizi / DettaglioLinee | Righe documento | NumeroLinea, Descrizione, Quantita, PrezzoUnitario, AliquotaIVA, Natura |
| DatiBeniServizi / DatiRiepilogo | Riepilogo IVA documento | AliquotaIVA, ImponibileImporto, Imposta, EsigibilitaIVA |
| DatiPagamento | Condizioni pagamento documento | CondizioniPagamento, ModalitaPagamento, ImportoPagamento, DataScadenzaPagamento |
Gestione massiva dell'archivio e correzioni 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 con l'unica operazione disponibile: Cambia stato, che applica il nuovo stato a tutte le fatture selezionate rispettando la matrice della sezione 19 (le righe per cui il passaggio non è ammesso restano com'erano, e il motivo si legge in cima alla pagina).
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. Annullare il documento porta in ANNULLATA il suo XML non ancora trasmesso. Il progressivo del record eliminato resta scritto nel registro delle modifiche e non viene riusato.
Modifica manuale del Progressivo Invio
Accanto al valore Progressivo Invio compare un'icona ✎, solo finché il file non è partito (stati DA_INVIARE o ERRORE). Il progressivo è un numero di cinque cifre (es. 00042) mai usato prima; cambiandolo cambiano insieme il nome del file e il <ProgressivoInvio> dentro l'XML. Dopo l'invio non si tocca più: è il nome con cui lo SdI conosce il file.
Data visualizzata in lista SDI
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
Lo SdI scarta un file con un nome già ricevuto (codice 00002), e il nome contiene il
progressivo. Per questo il prossimo progressivo si prende sotto un lucchetto
del database (due XML generati nello stesso momento non possono avere lo stesso numero),
sul massimo numerico mai usato — compresi i progressivi che un record
ha avuto prima di essere rigenerato, cambiato a mano o eliminato — e il campo
progressivoInvio ha un indice UNIQUE nel database.
<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. Il collegamento si configura per workspace. Lo stesso vale per i cambi di stato e le notifiche registrate.
Il documento corrispondente nel workspace target si riconosce da numero, data e tipo (il tipo per codice o, se il codice è diverso, per tracciato SdI: TD01, TD04…). Se non ce n'è uno solo che corrisponde, la copia non si fa: meglio nessuna copia che lo stato di una fattura scritto su un documento diverso con lo stesso numero.
Fix del generatore XML FatturaPA
Il file backend utils/fatturaXml.js è stato corretto in più punti per allinearsi al tracciato XSD ufficiale:
| Campo | Fix |
|---|---|
| IdCodice trasmittente | Usa idTrasmittente dai parametri (non la P.IVA con prefisso IT) |
| PrezzoTotale / ImponibileImporto | Calcolati correttamente (arrotondamenti a 2 decimali, gestione omaggi e sconti multipli) |
| Nome file | Formato corretto ITxxx_00035.xml (prefisso paese + identificativo trasmittente + progressivo) |
| Apostrofi curvi | Convertiti automaticamente in apostrofi dritti (scarto 00404 evitato) |
| Cassa previdenziale | Inclusa in ImponibileImporto |
| RiferimentoNormativo | Posizionato dopo Imposta (ordine XSD corretto) |
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à | Canale | Campi da configurare |
|---|---|---|
| Manuale (default) | Download XML + upload manuale sul portale AdE | Nessuno — l'utente scarica il file e lo carica in Fatture e Corrispettivi |
| PEC | Invio via posta elettronica certificata all'indirizzo sdi01@pec.fatturapa.it | Host SMTP PEC, porta, utente, password, mittente |
| Aruba API | API REST Fatturazione Elettronica Aruba (Produzione o Demo) | URL endpoint, username, password |
sdiConfig (JSONB) della tabella Parametri.
10.2 Modalità PEC (Aruba PEC esempio)
Se si utilizza una casella Aruba PEC, i parametri SMTP tipici sono:
| Parametro | Valore |
|---|---|
| Host | smtps.pec.aruba.it |
| Porta | 465 |
| TLS | Implicito (SSL) |
| Utente | Indirizzo PEC completo (es. studio@pec.esempio.it) |
| Password | Password della casella PEC |
| Destinatario | sdi01@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:
- Registrarsi sul portale demo.fatturazioneelettronica.aruba.it con un indirizzo email valido; si ottengono username e password di test.
- In NOX selezionare modalità Aruba API e inserire come URL:
https://demows.fatturazioneelettronica.aruba.it - Inserire le credenziali demo ricevute via email.
- Salvare la configurazione e provare a trasmettere una fattura di test dalla lista SDI.
- 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.
10.5 Pulsante ⚡ di trasmissione
Nell'Archivio SDI, per ogni record in stato DA_INVIARE compare il pulsante ⚡ (fulmine) nella riga. Premendolo:
- Il sistema legge la configurazione corrente (
sdiConfig) del workspace. - 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.itvia nodemailer - Aruba API: caricato sul web service REST con autenticazione Basic
- Se la trasmissione riesce, lo stato del record passa automaticamente da DA_INVIARE a IN_ATTESA.
- 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.
Un documento annullato o cancellato non si trasmette: il pulsante risponde con un errore. Ogni tentativo (riuscito, fallito o in modalità manuale) resta nel log delle trasmissioni (sezione 15).
10.6 Riepilogo stati
| Prima della trasmissione | Azione | Dopo trasmissione riuscita |
|---|---|---|
| DA_INVIARE | Pulsante ⚡ → invio PEC o Aruba API | IN_ATTESA → in attesa di notifica di esito (RC/NS/MC), che si registra a mano (sezione 7) |
| DA_INVIARE | Pulsante ⚡ → Manuale | Download 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.
Dalla versione 2.1.2, il menu Modalità trasmissione in Parametri → Fatturazione-Cassa ⚡SDI → ⚡ Trasmissione Sistema di Interscambio (SDI) offre 8 modalità: le 3 già presenti in v2.1.1 (Manuale, PEC, Aruba) e 5 intermediari aggiunti in questa release.
11.1 Riepilogo delle 8 modalità
| # | Intermediario | Stato | Canale / Autenticazione | Credenziali richieste |
|---|---|---|---|---|
| 1 | Manuale | Attivo | Download XML + upload manuale AdE | Nessuna |
| 2 | PEC | Attivo | SMTP con TLS → sdi01@pec.fatturapa.it | host, port, user, password |
| 3 | Aruba | Attivo | REST JSON (signin + upload) | apiUrl, username, password |
| 4 | Fatture in Cloud (TeamSystem) | Attivo con limitazione | OAuth2 refresh-token | clientId, clientSecret, companyId, refreshToken |
| 5 | Agyo Digital Hub (TeamSystem) | Attivo | OAuth2 client_credentials + POST /v1/documents | clientId, clientSecret, vatId (P.IVA) |
| 6 | Zucchetti Digital Hub | Attivo | REST con X-API-Key header + POST {endpoint}/invoices/send | apiKey, endpoint |
| 7 | FattureWeb (Wolters Kluwer) | Attivo | Multipart upload + Authorization: ApiKey | apiKey, companyCode, environment (test|production) |
| 8 | Fatturapa.it | Attivo | REST Bearer token + POST /v2/invoices | email, apiKey |
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 applicazionecompanyId— ID azienda su Fatture in CloudrefreshToken— token di refresh a lunga durata ottenuto tramite flusso OAuth2
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
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 (l'upload va poi su /v2/invoices, come sopra)
11.7 Come scegliere l'intermediario giusto
| Situazione | Modalità consigliata |
|---|---|
| Nessun contratto con intermediari — sono forfettario o micro-impresa | Manuale (upload su Fatture e Corrispettivi) |
| Ho già una casella PEC aziendale | PEC (limiti: circa 50 fatture/giorno) |
| Uso già Fatturazione Elettronica Aruba | Aruba |
| Sono cliente Fatture in Cloud | Fatture 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 consumo | Fatturapa.it |
| Voglio testare senza contratti | Manuale o Aruba Demo (vedi sezione 10.4) |
11.8 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: funzionalità non disponibile presso il fornitore (Fatture in Cloud: invio diretto dell'XML).
fetch nativo di Node 18+.
Se fatturi o ricevi fatture da clienti/fornitori con P.IVA in altri paesi UE, devi presentare gli elenchi Intrastat. L'esterometro non esiste più: dal 1° luglio 2022 le operazioni con l'estero passano dallo SdI (in vendita la fattura col codice destinatario XXXXXXX, in acquisto l'autofattura TD17, TD18 o TD19), e NOX non lo produce.
Intrastat UE — Cessioni (INTRA-1bis) e Acquisti (INTRA-2bis)
- Apri il menu utente in alto a destra → Fatturazione avanzata
- Nella sidebar scegli “Intrastat UE”
- Imposta l'anno di riferimento
- 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.
Scadenze
- Intrastat mensile: entro il giorno 25 del mese successivo
- Intrastat trimestrale: entro il 25 del mese successivo al trimestre (es. Q1 → 25 aprile)
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.0000000 e indicare la PEC del destinatario.• il pacchetto
FATTURAZIONE è compreso nella licenza dell’azienda
• il modulo è acceso nella Aziende & Licenze, per l’azienda e per l’utente
Spento vuol dire bloccato, non solo nascosto. Dettagli in Licenza e Aziende & Licenze.
Ogni transizione di stato di una fattura emessa è tracciata nella tabella log_modifiche_fattura_sdi, nella stessa operazione che cambia lo stato.
Stati gestiti
DA_INVIARE → IN_ATTESA → CONSEGNATA / IMPOSSIBILE / SCARTATA → (solo PA) ACCETTATA / RIFIUTATA / DECORRENZA_TERMINI; più ERRORE e ANNULLATA (sezione 6).
Ogni cambio registra: stato vecchio, stato nuovo, operatore, timestamp, motivo (la nota inserita, la notifica che l'ha causato o il messaggio di errore SDI). Vale anche per la rigenerazione dopo uno scarto (il progressivo vecchio) e per la modifica a mano del progressivo.
Endpoint: GET /api/sdi/emesse/:id/audit-log.
Ogni evento di interscambio con il Sistema di Interscambio è registrato in log_trasmissioni_sdi.
Eventi tracciati
| Evento | Significato |
|---|---|
| TRASMESSA | Inviata allo SdI dall'intermediario (pulsante ⚡) |
| PRONTO_DOWNLOAD | Pulsante ⚡ in modalità manuale: il file va caricato sul portale |
| ERRORE_TRASMISSIONE | Tentativo di invio fallito, col messaggio dell'intermediario |
| NOTIFICA_RC / NS / MC / AT / NE / DT / SE | Notifica dello SdI registrata (sezione 7) |
| IN_ATTESA, CONSEGNATA, … | Cambio di stato fatto a mano |
| CONSERVATA_MANUALE | Registrato il riferimento della conservazione fatta dal conservatore |
Dati conservati
identificativo_sdi: ID assegnato da AdEhash_xml: SHA-256 del file XML trasmessoxml_size: dimensione in bytericevuta_xml: XML della ricevuta, se incollato quando si registra la notifica (per un errore di trasmissione: il messaggio)operatore: utente che ha eseguito / ricevuto
Endpoint: GET /api/sdi/emesse/:id/trasmissioni.
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.
L'XML FatturaPA originale è conservato nel database anche dopo l'invio, e da quel momento non si rigenera né si cancella. L'hash SHA-256 permette di verificare a posteriori se il file conservato coincide con quanto trasmesso.
- Nome file generato per convenzione (provv. AdE 30/04/2018)
- Progressivo univoco per trasmissione, mai riutilizzabile
- Hash calcolato alla generazione dell'XML (e ricalcolato se il progressivo cambia prima dell'invio)
- Confronto con file attuale rileva alterazioni accidentali o deliberate
Le fatture elettroniche devono essere conservate per 10 anni (art. 2220 c.c. + art. 39 DPR 633/72).
La conservazione a norma AgID richiede un conservatore accreditato esterno. NOX non conserva: va affidata a un fornitore esterno o al commercialista. Ci sono due strumenti di appoggio: la pagina Archivia.online (il connettore verso il conservatore Genesys, che lavora solo col contratto attivo) e il pulsante Conserva della scheda, che registra il riferimento rilasciato dal conservatore.
Quello che NOX fa nel frattempo:
- Gli XML restano nel database (tabella delle fatture SDI)
- Backup giornaliero del DB include i riferimenti
- Log trasmissioni conservato per ricostruire lo 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_INVIARE | IN_ATTESA, ERRORE, ANNULLATA |
| IN_ATTESA | CONSEGNATA, IMPOSSIBILE, SCARTATA, DECORRENZA_TERMINI, ERRORE, ACCETTATA, RIFIUTATA |
| CONSEGNATA | ACCETTATA, RIFIUTATA, DECORRENZA_TERMINI |
| IMPOSSIBILE | CONSEGNATA (ricevuta tardiva verso la PA). Non torna IN_ATTESA: la fattura con mancata consegna è emessa, rimandarla farebbe un doppione |
| ACCETTATA | nessuna — stato finale positivo |
| RIFIUTATA | nessuna — stato finale negativo |
| SCARTATA | DA_INVIARE (correzione errore e re-invio), ANNULLATA |
| DECORRENZA_TERMINI | nessuna — stato finale (15 giorni senza esito committente) |
| ERRORE | DA_INVIARE, IN_ATTESA, ANNULLATA |
| ANNULLATA | DA_INVIARE |
La stessa matrice vale per le notifiche registrate (sezione 7). Cambiare lo stato e registrare notifiche è riservato agli amministratori.
Comportamento in caso di transizione non ammessa
- Il server risponde HTTP
409 Conflictcon messaggio esplicativo - Il body della response contiene il campo
ammessecon 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.
Riferimento normativo
- Provv. AdE 30/04/2018 — Specifiche tecniche della fatturazione elettronica (versione 1.9)
- Art. 1 comma 909 L. 205/2017 — Obbligo fatturazione elettronica
- Documentazione tecnica SdI — Cicli di vita fatture e notifiche
L'elenco Fatture Passive (SDI) raccoglie le fatture dei fornitori arrivate come XML. Ogni fattura è un documento di acquisto: il clic sulla riga apre la sua scheda in Documenti, con righe, scadenze e XML.
Chi la vede. Tutto il ciclo acquisti — ordini a fornitore, richieste di offerta e valutazione dei fornitori, fatture ricevute, import XML delle passive, e i loro documenti in Documenti (ordini e DDT del fornitore, fatture d'acquisto, integrazioni e autofatture) — si apre solo con il permesso «Vedere costi e margini»: sono prezzi d'acquisto. Di serie ce l'ha l'amministratore; per utenti e operatori si accende dal pannello «Permessi per ruolo». Senza il permesso la pagina risponde «serve il permesso Vedere costi e margini» e quei documenti non compaiono negli elenchi.
Tre informazioni, non uno stato solo
| Colonna | Cosa dice | Chi la decide |
|---|---|---|
| Verifica | Ricevuta, Da verificare, Verificata | Tu: è l'unico stato che si sceglie a mano (filtro e «Cambia stato» offrono solo queste tre voci) |
| in prima nota | La fattura è registrata in contabilità | La contabilizzazione: non si imposta a mano |
| Pagamento | Da pagare, Parziale, Pagata, Senza rate | Lo scadenzario: il pagamento si registra da lì (✓ o «Incasso parziale», con la data e il conto), così entra in prima nota |
I contatori in testa (da verificare, verificate, in prima nota, non registrate) contano tutto l'archivio, non solo la pagina che stai guardando. La colonna Scadenza mostra la prima rata ancora aperta, in rosso se è scaduta.
Niente esito EC01 / EC02
L'esito committente (accettazione EC01, rifiuto EC02) esiste solo per le fatture verso la Pubblica Amministrazione, e NOX non lo trasmette: la pagina non ha pulsanti Accetta / Rifiuta. Fra aziende una fattura non si «rifiuta»: se è sbagliata, chiedi al fornitore una nota di credito.
Importare un XML
- 📂 Importa XML: incolli l'XML, lo analizzi, lo importi. Dopo l'import la pagina mostra gli avvisi (prima nota, scadenze, valuta), se ce ne sono. Come l'import massivo, è riservato agli amministratori: crea il fornitore se manca e scrive in prima nota. Chi crea documenti senza essere amministratore il pulsante non lo vede; la fattura del fornitore la può scrivere a mano da Documenti.
- Una fattura intestata a un'altra azienda (il cessionario non siamo noi) non si importa.
- Una fattura già in archivio non si importa due volte. Se è nel cestino, NOX lo dice: va ripristinata dal cestino, non reimportata.
- Un'integrazione TD16-TD19 recapitata dallo SdI non si reimporta se l'ha emessa NOX; se cita la fattura del fornitore, registra solo l'IVA (il costo c'è già con la fattura originale).
- Una fattura in valuta senza il cambio resta da verificare, fuori da prima nota e scadenze finché non la reimporti col cambio: nell'elenco porta il segno «valuta senza cambio: non in prima nota».
- La fattura scritta a mano non si fa da qui: si fa da Documenti. Come quella importata, non carica la merce all'emissione: se non c'è un DDT, la si carica da qui con 📦 Carica a magazzino.
Il magazzino
La fattura importata non carica il magazzino: la merce entra col DDT del fornitore (la bolla di ricevimento). Il pulsante 📦 Carica a magazzino, per l'amministratore, serve solo alla fattura senza DDT (accompagnatoria o immediata): chiede conferma, e se ci sono più magazzini chiede quale. Il carico è rifiutato se la fattura è riepilogativa di DDT, se è una nota di credito o un'integrazione, se è già stato fatto, o se l'ordine collegato ha già le sue bolle (in quel caso NOX chiede se caricare comunque). Le righe senza articolo del catalogo, o di articoli non gestiti a magazzino, si saltano e vengono elencate.
Il cestino
Nel cestino vanno solo fatture in bozza o annullate e non in prima nota: una fattura registrata si annulla prima da Documenti (Cambia stato → Annullato). Le sue rate vanno nel cestino con lei.
Autofattura e contabilità
Il link autofattura compare quando la fattura va integrata (reverse charge: fornitore estero o natura N6); non compare sulle integrazioni TD16-TD19, che lo sono già. Per le scritture (ritenuta d'acconto, note di credito del fornitore) vedi il manuale Contabilità.
L'integrazione nasce in bozza come la vuole la guida dell'Agenzia (versione 1.10):
- cedente il fornitore, cessionario l'azienda, codice destinatario
0000000(il file torna all'azienda); - la fattura del fornitore citata in DatiFattureCollegate: numero e data, e in un secondo blocco l'identificativo SdI con cui la fattura è arrivata;
- la data è quella di ricezione della fattura (TD16, TD18, TD17/TD19 da fornitore UE, TD19 da San Marino); per l'extra-UE la data della fattura del fornitore, da correggere con la data di effettuazione se diversa;
- nella TD16 la natura N6.x del fornitore resta sulle righe, accanto all'aliquota.
Il dettaglio tipo per tipo (TD16–TD29, chi è il cedente, quando serve la fattura di riferimento, TD20 o TD29 per la regolarizzazione) è nel manuale Documenti.
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] — estraeDettaglioLinee,DatiRiepilogo, dati cedente; popolafattura_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
Ritirato: dal 1° luglio 2022 l'esterometro è stato sostituito dalla trasmissione via SdI (TD17/TD18/TD19 in acquisto, codice destinatario XXXXXXX in vendita). Gli XML già archiviati si scaricano da GET /api/fatturazione/xml-archivio/:id/download.
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 / TRIMESTRALEPOST /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 originePOST /api/fatturazione/intrastat/genera-xml/:dichiarazioneId[ADMIN] — produce XML e setta statoPRESENTATA,data_presentazione = oggi
Archivio XML centralizzato
Tabella xml_generati_archivio raccoglie tutti gli XML generati (Intrastat, Autofattura; in passato l'Esterometro). Ogni record ha hash SHA-256 per verifica integrità.
GET /api/fatturazione/archivio-xml?tipo=ESTEROMETRO&periodo=2026-Q1— lista filtrata
firma-cades.service.js e integrazioni.routes.js). Questa implementazione genera il contenuto XML conforme; la trasmissione richiede strumenti aggiuntivi.Le fatture devono arrivare al Sistema di Interscambio entro un termine che dipende dal tipo:
- fattura immediata: entro 12 giorni dall'operazione, cioè dalla data del documento (art. 21 c.4 DPR 633/72);
- fattura differita TD24: entro il 15 del mese successivo (art. 21 c.4 lett. a);
- fattura differita TD25: entro la fine del mese successivo (art. 21 c.4 lett. b);
- fattura scartata: si rimanda entro 5 giorni dalla notifica di scarto, con lo stesso numero e la stessa data (circ. AdE 13/E/2018); se il termine ordinario cade più tardi, vale quello.
Cosa conta
L'avviso conta le fatture con l'XML da inviare, quelle scartate e le fatture emesse a cui l'XML non è mai stato generato — che è il caso più comune di fattura dimenticata. Queste ultime si trovano nella finestra «⚡ Genera da fatture».
Dove si vede l'avviso
NOX ti avvisa in 3 punti diversi:
- Dashboard: tra gli avvisi in cima compare un banner rosso critico se ci sono fatture oltre il termine. Cliccando si apre l'Archivio SDI.
- Pagina /sdi (Archivio Emesse): in cima alla lista appare un banner che nomina insieme le fatture fuori termine, quelle in scadenza e quelle in vista del termine, ciascuna col suo numero, e dice quante non hanno ancora l'XML e di quale gruppo sono (le trovi in «⚡ Genera da fatture»).
- Riga tabella: per ogni fattura da inviare o scartata in vista del termine appare un badge con i giorni rimanenti (o di ritardo) e, passandoci sopra, la data limite. Stesso badge nella finestra «Genera XML da fatture».
Soglie di urgenza
- 🚨 SCADUTO (rosso): termine superato — trasmetti subito
- ⚠️ Imminente (arancione): 2 giorni o meno residui
- ⏳ Attenzione (giallo): 5 giorni o meno residui
Il termine lo calcola il server, con le regole qui sopra; le pagine lo mostrano.