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 v1.8.1: stabilisce le regole tecniche per la predisposizione, trasmissione e ricezione delle fatture elettroniche tramite SDI. Definisce il tracciato XML FatturaPA (versione 1.2.2), i controlli formali, i codici errore e le modalita di recapito (Codice Destinatario, PEC, area riservata).
- 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.
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 viene firmato digitalmente (se configurato) e trasmesso al Sistema di Interscambio tramite i canali previsti. Il sistema traccia lo stato di ogni trasmissione.
- 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 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.
- Premere Conferma e Invia per trasmettere il file al SDI oppure Salva come bozza per salvarlo nello stato DA_INVIARE.
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 Fatturazione → 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…TD28in 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 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:
| Indicatore | Descrizione |
|---|---|
| Totale trasmissioni | Numero complessivo di file XML trasmessi |
| Consegnate | Fatture recapitate con successo al destinatario |
| In attesa | Fatture trasmesse in attesa di notifica dal SDI |
| Scartate | Fatture rifiutate dal SDI per errori formali |
| Da inviare | File XML generati ma non ancora trasmessi |
Filtri disponibili
| Filtro | Descrizione |
|---|---|
| Stato SDI | Filtra per stato della trasmissione (v. sezione 6) |
| Periodo | Intervallo date di trasmissione |
| Formato | FPR12 o FPA12 |
| Cessionario | Ricerca per ragione sociale o partita IVA del destinatario |
| Numero documento | Ricerca per numero fattura di origine |
| Identificativo SDI | Ricerca per ID assegnato dal Sistema di Interscambio |
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 |
| 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 | Il 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 |
| SCARTATA | 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) |
| ACCETTATA | Il cessionario (solo PA con formato FPA12) ha accettato esplicitamente la fattura. Stato finale positivo. | — (stato finale) |
| RIFIUTATA | Il 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_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) |
Il Sistema di Interscambio comunica l'esito delle trasmissioni tramite notifiche codificate. Il modulo riceve e processa automaticamente le seguenti tipologie:
| 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. Viene indicato il codice errore specifico e la descrizione. | Stato → SCARTATA; log errori visibile nel dettaglio |
| MC | Mancata Consegna | Il SDI non e riuscito a recapitare la fattura al destinatario. La fattura viene messa a disposizione nell'area riservata. | Stato → IMPOSSIBILE |
| NE | Notifica di Esito (Esito Committente) | Il cessionario PA comunica l'accettazione o il rifiuto della fattura entro 15 giorni. | Stato → ACCETTATA o RIFIUTATA |
| DT | Decorrenza Termini | Sono trascorsi 15 giorni senza comunicazione di esito da parte del cessionario PA. | Stato → DECORRENZA_TERMINI |
| AT | Attestazione di Avvenuta Trasmissione | Conferma 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 |
| SE | Scarto Esito | La 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 |
| EC | Esito Cessionario | Conferma dell'avvenuta ricezione della notifica di esito da parte del cedente. Chiude il ciclo di comunicazione. | Aggiornamento log; conferma chiusura ciclo |
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 | P.IVA, codice fiscale, denominazione, regime fiscale |
| CedentePrestatore / Sede | Indirizzo sede legale azienda | Indirizzo, CAP, Comune, Provincia, Nazione |
| CessionarioCommittente / DatiAnagrafici | Soggetto cessionario (modulo Soggetti) | P.IVA o codice fiscale, denominazione o nome/cognome |
| 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 |
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.
<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:
| 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.
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) |
| 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 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à
| # | 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 |
| 9 | Infocert | 🧩 Stub 501 | Richiede certificato digitale X.509 | — |
| 10 | Sistema Impresa (Engineering) | 🧩 Stub 501 | Integrazione in corso | — |
| 11 | AdE Web Services diretti | 🧩 Stub 501 | Richiede accreditamento SDI e firma digitale | — |
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/v2/invoices
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.
| Intermediario | Motivo dello stub | Alternativa consigliata |
|---|---|---|
| Infocert | Richiede 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 diretti | La 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 |
11.8 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.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).
fetch nativo di Node 18+.
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)
- 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.
Esterometro — Comunicazione operazioni transfrontaliere
- Stessa pagina, sezione “Esterometro”
- Scegli anno + trimestre (Q1-Q4)
- 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.
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
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.• 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.
Ogni evento di interscambio con il Sistema di Interscambio è registrato in log_trasmissioni_sdi.
Eventi tracciati
| Evento | Significato |
|---|---|
| TRASMESSA | Inviata a SdI |
| NS | Notifica Scarto (errore tecnico o formale) |
| MC | Mancata Consegna (destinatario non raggiungibile) |
| RC | Ricevuta di Consegna |
| EC01 | Esito committente: Accettata |
| EC02 | Esito committente: Rifiutata |
Dati conservati
identificativo_sdi: ID assegnato da AdEhash_xml: SHA-256 del file XML trasmessoxml_size: dimensione in bytericevuta_xml: XML ricevuta grezza conservata per analisi forenseoperatore: 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 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
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
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 | IN_ATTESA (re-invio dopo mancata consegna) |
| ACCETTATA | nessuna — stato finale positivo |
| RIFIUTATA | nessuna — stato finale negativo |
| SCARTATA | DA_INVIARE (correzione errore e re-invio) |
| DECORRENZA_TERMINI | nessuna — stato finale (15 giorni senza esito committente) |
| ERRORE | DA_INVIARE, IN_ATTESA |
| ANNULLATA | DA_INVIARE |
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 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 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 — 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/, aggiornaesterometro_comunicazioni.stato = INVIATOGET /api/fatturazione/esterometro-xml/download/:id— scarica il file XML generato- Archivio centralizzato:
xml_generati_archiviocon 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 / 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 (Esterometro, Intrastat, Autofattura). 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 essere trasmesse al Sistema di Interscambio entro 12 giorni dalla data documento (Art. 21 DPR 633/72, vigente dal 1° luglio 2019).
Dove si vede l'avviso
NOX ti avvisa in 3 punti diversi:
- Dashboard: tra le notifiche compare un banner rosso critico se ci sono fatture
DA_INVIAREoltre i 12 giorni. Cliccando si va in /sdi filtrato per DA_INVIARE. - 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.
- 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).