Gestione Documenti

Fatture, DDT, Preventivi, Ordini, Note di Credito, Ricette, Fatture Passive — Manuale completo

v 2.2 Manuale Utente

Riferimenti normativi

Note operative e permessi configurabili

🗒️ Pannello Note: ogni scheda di documento (fattura, ricevuta, DDT, ecc.) ha un pannello "post-it" giallo floating ancorato all'entità corrente. Si apre minimizzato come fascia centrata sulla topbar (sulla barra blu del modale per i documenti); cliccando la fascia o la freccia expand_more si espande al centro del viewport (ridimensionabile via handle in basso a destra). La fascia minimizzata è trascinabile e la sua posizione viene memorizzata in localStorage per ciascun record (es. ogni documento ha la sua posizione independente). Per scrivere una nota: testo nel box giallino + bottone + Aggiungi (o Cmd/Ctrl + Invio). Modifica/elimina riservate all'autore o agli amministratori. Cestino note con ripristino disponibile dal toggle delete_outline nell'header del pannello espanso (solo ADMIN/SUPERADMIN). Tutti i CRUD (create/update/delete/restore) sono tracciati in audit_log (consultabile da Amministrazione Sistema → Audit Log).

🔒 Permessi configurabili: alcune azioni di questa scheda (creazione, modifica, cancellazione, esportazione, stampa) possono essere bloccate per il ruolo del tuo workspace. Quando un bottone è bloccato, appare con icona "lucchetto" e tooltip "Permesso disabilitato dal Super Amministratore". La configurazione si fa in Amministrazione di Sistema » Permessi per Ruolo (solo SUPERADMIN).

Nuovo stile UI

🎨 Lista documenti — "Classic ERP": il modulo Documenti adotta una nuova estetica ispirata ai gestionali professionali (riferimenti: Linear, Stripe Dashboard). Tipografia Inter per UI e JetBrains Mono per cifre/date/totali (allineamento tabular). Tabella ultra-compatta con righe a strisce alternate, header maiuscoletto grigio, badge stato bordati con colore coerente al valore (Bozza, Emesso, Confermato, Inviato, Pagato, Annullato, Archiviato, Fatturato, Offerta, Ordine), bottoni azione 22×22 px con hover delicato, sfondo pagina grigio chiaro #f4f6fb da cui si stacca la card unica che contiene toolbar+tabella+footer.

📝 Form documento (modale): stessa tipografia Inter applicata. Sfondo della "tela" cambiato da bianco a grigio chiaro per stacco visivo delle card-sezione (Righe, Scadenzario, Listino & Sconti, Note, ecc.). Le icone Material continuano a essere visualizzate correttamente (override esplicito sul font).

1Panoramica

Il modulo Documenti è il cuore gestionale di NOX Enterprise Suite. Gestisce l'intero ciclo documentale commerciale: dall'offerta (preventivo) all'ordine, dalla bolla (DDT) alla fattura, fino alla nota di credito/debito e alle fatture ricevute dai fornitori (FP).

Tutti i tipi di documento convivono in un archivio unificato, filtrabile per tipo, stato, anno, soggetto e testo libero. Ogni tipo ha regole specifiche (tabs visibili, calcolo IVA/bollo/cassa, stati disponibili) configurabili nella Gestione Tabelle.

Funzionalità principali

  • Archivio unificato con filtri avanzati e ricerca full-text
  • Creazione guidata con autocompletamento da catalogo e anagrafe
  • Sconti a catena (10+10+5), omaggi con/senza rivalsa IVA
  • Gestione multi-valuta con controvalore EUR per SDI
  • Fatturazione elettronica SDI: generazione XML singola e batch
  • Fatture passive (FP) integrate: import XML, esiti EC01/EC02
  • Scadenzario automatico con rate configurabili
  • Provvigioni agenti su due livelli (riga/documento)
  • Movimenti magazzino automatici con lotti FIFO/FEFO
  • Listini e scaglioni di prezzo per quantità
  • Conversione documenti: Preventivo → Ordine → DDT → Fattura
  • Stampa PDF con template personalizzabili (Print Designer)
  • Lettere di intento per esportatori abituali
  • Validazione fiscale completa pre-invio SDI
Il modulo Documenti è accessibile dal menu laterale: Ciclo Attivo/Passivo → Documenti. Il pulsante + Nuovo nel footer apre la creazione guidata.
2Tipi Documento e Configurazione

Ogni tipo documento ha un codice SDI e regole di fatturazione specifiche. La configurazione avviene in Parametri → Gestione Tabelle → Tipi Documento.

CodiceTipoIVABolloCassaTabs visibili
TD01FatturaRighe, Pagamento, Trasporto, Agente, Scadenzario, Listino, Magazzino, Generale
TD02Acconto su FatturaRighe, Pagamento, Scadenzario, Generale
TD04Nota di CreditoRighe, Pagamento, Scadenzario, Generale (rif. fattura originale)
TD05Nota di DebitoRighe, Pagamento, Scadenzario, Generale
TD06ParcellaRighe, Pagamento, Scadenzario, Generale (INPS/cassa 4%)
TD07Fattura SemplificataRighe, Pagamento, Scadenzario, Generale
TD24Fattura DifferitaRighe (riepilogativa DDT), Pagamento, Trasporto, Agente, Scadenzario, Generale
DDTDocumento di TrasportoRighe, Pagamento, Trasporto, Agente, Scadenzario, Listino, Magazzino, Generale
PRVPreventivo / OffertaRighe, Pagamento, Agente, Listino, Generale (validità, intro, note)
PFPro-FormaRighe, Pagamento, Agente, Listino, Generale
ORDOrdine ClienteRighe, Pagamento, Agente, Listino, Generale
RICRicettaRighe (descrizione + posologia espansa), Pagamento
FPFattura PassivaRighe, Pagamento, Scadenzario, Dati SDI, Generale

Regole di fatturazione (regoleFatturazione)

Ogni tipo documento ha un oggetto JSON regoleFatturazione che controlla il comportamento del form:

  • calcolaIva: se abilitato, calcola IVA per aliquota
  • calcolaBollo: applica bollo virtuale 2,00 € se imponibile esente > 77,47 €
  • calcolaInps: aggiunge contributo cassa previdenziale
  • tabs: array di tab visibili nel form
  • statiDisponibili: stati ammessi per il tipo documento
  • labelIntestatario: etichetta del soggetto (Cliente, Paziente, Fornitore, Destinatario)
  • colore: colore identificativo nella lista documenti
  • visibileInInserimento: se appare nel dropdown tipo documento
  • isRiepilogativaDDT: abilita selezione DDT da raggruppare (TD24)
I profili aziendali (PG Ordinario, PF Sanitario, Forfettario, ecc.) preconfigurano automaticamente i tipi documento corretti al primo accesso. Il tipo FP è incluso in tutti i profili.
3Creazione Documento Passo-Passo
  1. Dalla lista documenti, premere il pulsante + Nuovo nel footer. In alternativa, usare Ctrl+N.
  2. Selezionare il tipo documento dal dropdown (TD01 Fattura, DDT, PRV Preventivo, FP Fattura Passiva, ecc.). Il form si adatta automaticamente mostrando le tab pertinenti.
  3. Selezionare il soggetto: digitare almeno 2 caratteri per cercare per nome, cognome, ragione sociale, CF o P.IVA. Oppure premere l'icona lente per sfogliare l'anagrafica completa. Se il soggetto non esiste, premere + Nuovo soggetto per crearlo al volo.
  4. Compilare la data del documento e, se necessario, la serie/sezionale.
  5. Inserire le righe nella tab Righe: cercare da catalogo o digitare manualmente.
  6. Compilare le tab aggiuntive: Pagamento (condizioni, modalità), Trasporto (DDT), Agente, Valuta, ecc.
  7. Verificare i totali in fondo alla pagina (imponibile, IVA, bollo, cassa, ritenuta, netto a pagare).
  8. Premere Salva (Ctrl+S). Il sistema esegue le validazioni fiscali e mostra eventuali avvisi prima del salvataggio.
Se il soggetto ha preferenze salvate (condizioni pagamento, agente, valuta, sconto, listino), vengono pre-compilate automaticamente alla selezione del soggetto.
Per le Fatture Passive (FP), il soggetto diventa “Fornitore”. Si può compilare manualmente o importare i dati da un XML SDI ricevuto tramite il pulsante Importa da XML nella tab Dati SDI.
4Tab Righe

La griglia righe mostra le colonne configurabili: #, Descrizione, U.M., Quantità, Prezzo, Sconto%, IVA%, Omaggio, Importo, Azioni. Le colonne possono essere mostrate/nascoste dalla Configura Vista.

Inserimento da Catalogo

Digitare almeno 2 caratteri nella colonna Descrizione: il sistema cerca per codice, descrizione, codice fornitore e barcode. I risultati appaiono in un dropdown navigabile con le frecce. Premere Enter per selezionare. Il prezzo, l'IVA e l'unità di misura vengono pre-compilati dalla voce catalogo.

In alternativa, premere l'icona catalogo sulla riga per aprire l'overlay completo con filtri per categoria, fornitore e ricerca avanzata. Si può creare un nuovo articolo al volo con il pulsante dedicato.

Navigazione e inserimento rapido

  • Tab per passare al campo successivo nella riga
  • Inserendo una riga valida, si aggiunge automaticamente una riga vuota sotto
  • Il pulsante X elimina la riga (con conferma se contiene dati)
  • Le righe sono ordinabili tramite il campo #

Formato prezzo (parser intelligente)

Il sistema accetta quattro convenzioni di input e riconosce automaticamente quale interpretazione usare:

Input utenteInterpretato comeValore finale
1.234,56Formato italiano completo (punto migliaia + virgola decimale)1234.56
1234,56Formato italiano senza migliaia1234.56
424.15Formato ISO/en (punto decimale — un solo punto con cifre decimali diverse da 3)424.15
1.234Formato italiano migliaia (un solo punto con esattamente 3 cifre intere a destra)1234.00

Il display è sempre in formato italiano 1.234,56. All'ingresso nel campo (focus) il valore viene mostrato con virgola decimale per editing coerente.

KIT (distinta base)

Le voci di tipo KIT nel catalogo possono essere inserite in tre modalità diverse, selezionabili tramite popup al momento dell'inserimento:

  1. Riga singola — il kit appare con una sola riga, prezzo unico “bundle” del kit. Usato per fatturare al cliente il prezzo promozionale pre-concordato.
  2. Esplodi componenti — ogni componente diventa una riga separata con il proprio prezzo di listino.
  3. Esplodi con intestazione Kit — come (2), con in più una riga di separatore “=== KIT: … ===” prima dei componenti (utile in stampa per far capire al cliente quali righe appartengono al kit).

Checkbox “Mantieni prezzo bundle”

Nel popup di inserimento è presente un'opzione “Mantieni prezzo bundle del kit — distribuisci lo sconto sui componenti”. Quando attiva:

  • Calcola il fattore fattore = prezzoBundleKit / sommaPrezziComponenti
  • Applica il fattore a ogni prezzo componente in modo che la somma delle righe esplose resti uguale al prezzo bundle del kit
  • Utile quando il cliente chiede il dettaglio dei componenti ma lo sconto bundle deve restare preservato (per evitare di perdere margine o di dover rinegoziare)
EsempioSenza “mantieni bundle”Con “mantieni bundle”
Notebook (1.299 €)1.299,001.205,40
Monitor (499 €)499,00463,08
Scrivania (349 €)349,00323,90
Sedia (289 €)289,00268,21
Installazione (150 €)150,00139,21
Totale2.586,00≈ 2.400,00 (bundle)

Il flag si resetta automaticamente dopo l'uso (ogni nuovo kit parte con la scelta spenta).

Ricalcolo prezzi al cambio cliente (listino)

Quando si cambia il cliente su un documento in corso di compilazione, il sistema valuta se proporre il ricalcolo automatico dei prezzi dal nuovo listino. Strategia “safe by default”:

ScenarioComportamento
Apertura di un documento esistenteNessun dialogo (caricamento iniziale)
Nuovo documento, nessuna riga o righe senza voce catalogoRicalcolo silenzioso (non c'è nulla da perdere)
Nuovo documento / BOZZA con righe già compilate con prezziDialogo di conferma: mostra nuovo listino, numero righe coinvolte, avverte che eventuali sconti manuali verranno sovrascritti
Documento in stato EMESSO / CONFERMATO / INVIATO / PAGATO / ARCHIVIATOMai toccare i prezzi (sono storicizzati)
Listino non cambia (stesso listino del cliente precedente)Nessun dialogo, nessun ricalcolo

Ricetta (RIC)

Per il tipo documento RIC, la griglia mostra un layout speciale a 4 colonne con il campo Descrizione espanso su più righe per consentire l'inserimento della posologia completa senza troncamenti.

Numerazione alla stampa: alla prima stampa la ricetta riceve subito il numero definitivo. Ora basta un solo clic su Stampa per assegnare e visualizzare il numero ricetta.

📝 Natura IVA — subrow automatica quando IVA = 0

Quando in una riga del documento imposti l'aliquota IVA a 0, sotto la riga compare automaticamente una subrow ambrata con il dropdown "Natura IVA (obbligatoria per XML SDI)". Il dropdown ha 21 codici secondo il tracciato FatturaPA:

  • N1 — Escluse art. 15 DPR 633/72 (spese banca, anticipazioni in nome e per conto)
  • N2.1 — Non soggette art. 7 DPR 633/72 (operazioni fuori campo IVA)
  • N2.2 — Non soggette altri casi
  • N3.1...N3.6 — Non imponibili (esportazioni, intra-UE, San Marino, lettere d'intento, ecc.)
  • N4Esenti art. 10 DPR 633/72 (sanitari, naturopati, formazione, finanziarie) — il caso più comune per studi sanitari
  • N5 — Regime del margine (beni usati)
  • N6.1...N6.9 — Reverse charge / inversione contabile (rottami, oro, edilizia, ecc.)
  • N7 — IVA assolta in altro Stato UE (OSS)

Il bordo del dropdown è rosso finché non selezioni un codice (campo richiesto). Hovering sul codice scelto mostra la descrizione completa. Sulle nuove righe in regime forfettario/minimi (RF19/RF02), il default N2.2 viene applicato automaticamente.

5Sconti e Omaggi

Sconto multiplo a catena

Nel campo Sconto% è possibile digitare una catena di sconti come 10+10+5. Il sistema:

  1. Calcola lo sconto equivalente: 1 - (0.90 × 0.90 × 0.95) = 23,05%
  2. Applica lo sconto calcolato all'importo della riga
  3. Preserva la notazione originale “10+10+5” nel campo scontoMultiplo, così al rientro nel documento viene rivisualizzato il formato originale e non il valore calcolato

Il campo si evidenzia in viola quando contiene uno sconto multiplo.

Omaggio

La colonna Omaggio (attivabile da Configura Vista) gestisce le cessioni gratuite secondo la normativa IVA:

OpzioneNormativaComportamento
S/R — Senza rivalsaArt. 2 c.2 DPR 633/72Imponibile riga = 0, natura = N2.2. L'IVA non viene addebitata al cessionario.
C/R — Con rivalsaArt. 18 c.3 DPR 633/72Il prezzo resta invariato ma viene computato come omaggio. L'IVA viene calcolata normalmente e addebitata al destinatario.

Le righe con omaggio attivo si evidenziano in rosa.

Priorità sconti

Quando più sorgenti forniscono sconti, la priorità applicata è:

  • Sconto multiplo catalogo > Sconto default catalogo > Sconto soggetto > API listino > Listino base
6Tab Pagamento

Il campo Condizioni e Modalità Pagamento unifica in un'unica selezione:

  • Codice condizioni SDI (TP): TP01 (rate), TP02 (completo), TP03 (anticipo)
  • Codice modalità SDI (MP): MP01 (contanti), MP02 (assegno), MP05 (bonifico), MP08 (carta), ecc.

La selezione determina automaticamente il comportamento dello scadenzario (numero rate, tipo di pagamento) e i codici da inserire nell'XML FatturaPA.

Comportamento all'incasso

Le condizioni di pagamento possono avere flag aggiuntivi:

  • Richiede IBAN: il sistema avvisa se il soggetto non ha l'IBAN configurato
  • Richiede riferimento: per pagamenti con riferimento esterno (bonifico, RID)
  • Pagamento contanti: flag per la gestione corrispettivi
  • Applica sconto: sconto cassa automatico se pagamento entro i termini
7Tab Scadenzario

Lo scadenzario genera automaticamente le rate di pagamento in base alle condizioni selezionate:

TipoCodice TPScadenze generate
Pagamento a vistaTP021 scadenza alla data documento
Pagamento a N giorniTP021 scadenza a data documento + N giorni
Rate (30/60/90 gg)TP01N scadenze equamente distribuite
Anticipo + saldoTP03Anticipo alla data + saldo a N giorni

Ogni scadenza è modificabile manualmente: importo, data, flag pagata, data pagamento effettivo. Il sistema verifica che la somma delle scadenze corrisponda al totale documento.

🔄 Rigenerazione automatica scadenze

Le scadenze si rigenerano automaticamente al cambio delle condizioni di pagamento e dopo il salvataggio del documento (debounced ~400ms). Salvaguardia: la rigenerazione automatica non parte se ci sono rate già PAGATA, per non perdere il pagato registrato — in quel caso interviene il banner di disallineamento descritto sotto.

📊 Banner disallineamento scadenzario con 3 azioni

Se la somma delle scadenze del documento non corrisponde al totale documento (al netto delle spese banca/bolli per rata), nella sezione Scadenze appare un banner ambrato con la differenza in evidenza e tre pulsanti:

  • 🔄 Rigenera tutto: elimina tutte le scadenze esistenti e ricalcola sul totale documento attuale. Se ci sono rate PAGATA chiede conferma esplicita (riazzera anche le pagate).
  • 🗛 Rata di pareggio (X €): aggiunge una nuova rata a copertura della differenza, lasciando intatte tutte le rate esistenti. Si chiede solo la data scadenza (default oggi+30gg).
  • Ignora: chiude il banner senza modifiche.

💰 Formato italiano (1.234,00)

Gli importi nello scadenzario (sia nelle righe che nei totali, sia nella pagina Scadenzario che nella sezione Scadenze del documento) sono visualizzati ed editati in formato italiano con punto come separatore di migliaia e virgola come separatore decimale (es. 1.234,56). Sui campi editabili: parsing intelligente sia di "1.234,56" che di "1234.56" che di "1234,56".

Le scadenze delle fatture passive (FP) appaiono nello Scadenzario con il tipo “FP”, permettendo di separare facilmente le scadenze da incassare (ciclo attivo) da quelle da pagare (ciclo passivo).
8Tab Trasporto

Visibile per DDT e fatture con trasporto. Contiene i dati per il documento di trasporto:

  • Vettore: selezionabile dall'anagrafica soggetti con flag “È vettore”
  • Destinazione: indirizzo di consegna (diverso dalla sede legale)
  • Causale trasporto: vendita, conto lavorazione, conto visione, ecc.
  • Porto: franco/assegnato
  • Aspetto esteriore: descrizione dei colli
  • Numero colli e peso
  • Data e ora inizio trasporto
  • Tracking: codice di tracciamento spedizione

✉ Pannello "Firma elettronica acquisita"

Nel dettaglio del documento è disponibile il pannello "Firma elettronica acquisita". Quando un documento è stato firmato — tipicamente un ordine raccolto dagli agenti o un DDT firmato alla consegna — il pannello mostra:

  • l'immagine della firma apposta dal cliente/destinatario;
  • il nome del firmatario;
  • la data e l'ora della firma;
  • la località GPS in cui è stata raccolta, con link diretto alla mappa.

Serve a verificare in modo immediato chi ha firmato e dove, utile per la conferma degli ordini degli agenti e per la prova di consegna dei DDT.

✍️ Badge firma in elenco documenti

Nell'elenco Documenti, i documenti firmati digitalmente mostrano il badge ✍️ FIRMA. Il colore indica l'origine: verde per gli ordini firmati dagli agenti, arancione per le consegne DDT firmate dai trasportatori. Passando il mouse, il tooltip mostra firmatario, data/ora e posizione GPS.

I simboli di riga (📎 collegati, ✓ fatturato, 🚚 spedizione, ✍️ firma) hanno posizioni a colonna fissa: restano allineati e facili da leggere tra le righe.

9Tab Agente e Provvigioni

Il sistema supporta provvigioni su due livelli con priorità riga > documento > soggetto:

  • Agente di testata: selezionabile dalla lista agenti. Imposta la provvigione su tutte le righe che non hanno un agente specifico.
  • Agente per riga: sovrascrive l'agente di testata per singole righe, utile quando articoli diversi hanno agenti diversi.
  • Percentuale provvigione: applicata sull'imponibile della riga. Il calcolo è imponibileRiga × %provvigione.

Alla conferma del documento, le provvigioni maturano e sono visibili nel modulo Agenti & Provvigioni per la liquidazione.

10Tab Listino e Sconti

Mostra il listino assegnato al soggetto e gli sconti applicabili. Il listino può contenere scaglioni per quantità: all'inserimento o modifica della quantità, il prezzo unitario si aggiorna automaticamente in base allo scaglione appropriato.

Priorità prezzi

  1. Prezzo da listino soggetto (con scaglioni quantità)
  2. Prezzo del catalogo
  3. Prezzo digitato manualmente (sovrascrive sempre)

Le righe il cui prezzo proviene da un listino sono indicate con un'icona tag e il nome del listino nella riga.

11Tab Magazzino

Gestione magazzino integrata con il documento:

  • Magazzino di testata: selezionabile dalla lista magazzini attivi. Pre-impostato sul magazzino default.
  • Magazzino per riga: consente di prelevare articoli da magazzini diversi nella stessa fattura.
  • Colonna Disponibile: mostra la giacenza in tempo reale per ogni voce catalogo nel magazzino selezionato.

Movimenti automatici

Al passaggio di stato a CONFERMATO o EMESSO, il sistema genera automaticamente i movimenti di scarico per ogni riga con voce catalogo collegata:

  • FIFO (First In, First Out): per articoli senza scadenza, scarica prima i lotti più vecchi per data ricevimento.
  • FEFO (First Expired, First Out): per articoli con scadenza, scarica prima i lotti con scadenza più vicina.
  • Se un singolo lotto non copre la quantità richiesta, il sistema splitta lo scarico su più lotti.

All'annullamento, i movimenti vengono stornati e le giacenze ripristinate.

Se la giacenza è insufficiente, il documento viene comunque salvato ma il sistema lo segnala. La verifica è indicativa, non bloccante.
12Tab Dati SDI (solo Fattura Passiva FP)

Questa tab è visibile solo per il tipo documento FP. Contiene i metadati della fattura ricevuta dal Sistema di Interscambio:

CampoDescrizione
ID SDIIdentificativo univoco assegnato dal Sistema di Interscambio
Nome File SDINome del file XML ricevuto (es. IT01234567890_00001.xml)
Data RicezioneData di ricezione dal canale SDI
Stato SDIStato della fattura: Ricevuta, Da verificare, Verificata, Accettata, Contabilizzata, Pagata, Contestata, Scartata
Scadenza PagamentoData scadenza pagamento al fornitore
ConservazioneFlag che indica se la conservazione sostitutiva a norma è stata effettuata
P.IVA / CF FornitoreDati fiscali del fornitore estratti dall'XML
XML RicevutoAnteprima dell'XML originale conservato

Importa da XML

Il pulsante Importa da XML apre una modale dove incollare il contenuto dell'XML FatturaPA ricevuto. Il sistema:

  1. Analizza l'XML e mostra un'anteprima (fornitore, numero, data, tipo, totale)
  2. Premendo Applica al Documento, popola automaticamente tutti i campi del form: numero, data, righe, importi IVA, totali
  3. Cerca il fornitore nell'anagrafica soggetti per P.IVA e lo collega al documento

Esiti EC01 / EC02

Dalla tab Dati SDI è possibile inviare gli esiti di accettazione/rifiuto al SDI:

  • EC01 — Accettazione: conferma la ricezione della fattura. Lo stato passa ad “Accettata”.
  • EC02 — Rifiuto: contesta la fattura. Lo stato passa a “Contestata”.

I pulsanti sono abilitati solo per fatture in stato Ricevuta, Da verificare o Verificata.

Attenzione: il rifiuto (EC02) deve essere motivato e va inviato entro 15 giorni dalla ricezione. Trascorso il termine, la fattura si considera accettata per silenzio-assenso.
13Tab Generale

La tab Generale contiene i campi fiscali avanzati e le sezioni condizionali:

Lettera di Intento

Per fatture verso esportatori abituali (art. 8 c.1 lett. c DPR 633/72): selezionare la lettera di intento attiva. Il sistema mostra plafond, utilizzato, residuo e verifica che il documento non ecceda il residuo disponibile. L'IVA viene azzerata con natura N3.4.

Ritenuta d'acconto

Attivabile con checkbox. Campi: tipo ritenuta (RT01/RT02/RT03/RT04), aliquota %, causale pagamento, base di calcolo %. Il calcolo è automatico: imponibile × baseCalcolo% × aliquotaRitenuta%.

Esigibilità IVA e Split Payment

  • I — Immediata: comportamento standard
  • D — Differita: per fatture differite (TD24)
  • S — Split Payment: l'IVA non viene incassata dal cedente ma versata direttamente dal cessionario all'Erario (fatture verso PA)

CIG / CUP

Obbligatori per fatture verso la Pubblica Amministrazione. CIG = Codice Identificativo Gara, CUP = Codice Unico Progetto.

Riferimento fattura originale

Obbligatorio per Note di Credito (TD04) e Note di Debito (TD05): numero e data della fattura alla quale si riferiscono.

Ordine d'acquisto

Dati ordine acquisto (blocco 2.1.2 FatturaPA): numero e data dell'ordine cliente.

Multi-valuta

Selezionare la valuta e il tasso di conversione. Maggiori dettagli nella sezione 18.

14Totali e Calcoli

Il riepilogo totali è sempre visibile in fondo alla pagina e si aggiorna in tempo reale:

VoceFormula di calcolo
Imponibile∑ (prezzoUnitario × quantità - sconto%) per ogni riga
Cassa PrevidenzaImponibile × aliquota cassa% (solo parcelle con calcolaInps=true)
IVARiepilogo per aliquota: (imponibile + cassa per aliquota) × aliquotaIVA%
Bollo virtuale2,00 € se imponibile esente IVA > 77,47 € e calcolaBollo=true
Totale documentoImponibile + Cassa + IVA + Bollo
Ritenuta d'accontoImponibile × baseCalcolo% × aliquotaRitenuta% (se attiva)
Netto a pagareTotale - Ritenuta (- IVA se split payment)
Controvalore EURSolo se valuta ≠ EUR: totale × tassoConversione

Riepilogo IVA

Il sistema genera automaticamente il blocco 2.2.2 RiepilogoIVA raggruppando le righe per aliquota e natura, con calcolo dell'esigibilità IVA e riferimento normativo per ciascuna riga del riepilogo.

Il calcolo usa l'operatore ?? per i valori zero, evitando il bug “falsy zero” dove un imponibile di 0,00 veniva ignorato.
15Workflow e Stati

Ogni tipo documento ha i propri stati disponibili. Le transizioni di stato principali:

Documenti commerciali (Fatture, DDT)

DaAAzione automatica
BOZZAEMESSOAssegnazione numero progressivo definitivo dal sezionale. Irreversibile.
BOZZACONFERMATOConferma senza numerazione definitiva
BOZZAANNULLATOAnnullamento bozza
EMESSOCONFERMATOConferma (genera movimenti magazzino)
EMESSOANNULLATOAnnullamento (storno movimenti magazzino)
CONFERMATOARCHIVIATOArchiviazione finale
CONFERMATOANNULLATOAnnullamento (storno movimenti e provvigioni)

Preventivi

DaADescrizione
BOZZAINVIATOPreventivo inviato al cliente
INVIATOACCETTATO / RIFIUTATOEsito dal cliente
*SCADUTOSuperata la data validità

Ordini

DaADescrizione
BOZZACONFERMATOOrdine confermato
CONFERMATOIN_LAVORAZIONEOrdine in fase di evasione
IN_LAVORAZIONEPARZ_EVASO / EVASOEvasione parziale o completa

Fatture Passive (FP)

StatoDescrizione
RICEVUTAFattura ricevuta dal SDI, da verificare
DA_VERIFICARESegnalata per verifica interna
VERIFICATAControllata dall'operatore
CONTABILIZZATARegistrata in Prima Nota / Registro IVA acquisti
PAGATAPagamento effettuato al fornitore
CONTESTATARifiutata con esito EC02
L'emissione di un documento (BOZZA → EMESSO) assegna il numero progressivo dal sezionale ed è irreversibile. Un documento emesso non può essere modificato: per correggere, emettere una Nota di Credito (TD04) con riferimento all'originale.

🔒 Blocco modifiche fiscali sui documenti numerati + sblocco amministratore

Quando un documento è numerato (numero progressivo assegnato, diverso da BOZZA) i campi che incidono sui totali fiscali sono bloccati per evitare modifiche non tracciate dopo l'emissione. Campi protetti: righe (qta/prezzo/sconto/IVA/natura), sconto globale, soggetto, data documento, condizioni di pagamento, cassa previdenza, bollo, ritenuta.

Sopra il form modifica appare un banner rosso con il messaggio "Documento N. xxx numerato — modifiche fiscali bloccate" e, per gli admin, il pulsante "Sblocca". La normale procedura di correzione resta la Nota di Credito.

Sblocco admin (eccezionale): cliccando "Sblocca" l'admin inserisce una motivazione obbligatoria registrata in audit log (tabella log_sblocchi_documento). Il banner diventa giallo con la motivazione e il pulsante "Annulla sblocco". Lo sblocco resta attivo finché non viene esplicitamente revocato — così più salvataggi consecutivi non richiedono nuovi sblocchi.

Tutte le modifiche durante la finestra di sblocco vengono comunque tracciate in audit log (campo+vecchio+nuovo+utente+data). Il flusso preferenziale per correggere un documento emesso resta la Nota di Credito.
16Fatturazione Elettronica SDI

Il modulo genera XML FatturaPA v1.8 conformi alle specifiche dell'Agenzia delle Entrate.

Validazione pre-invio

Prima del salvataggio, il sistema esegue le seguenti validazioni fiscali (con avviso, non bloccante):

  • P.IVA: 11 cifre + checksum Luhn mod 10
  • Codice Fiscale: 16 caratteri (PF) o 11 cifre (PG)
  • Codice Destinatario SDI: 7 caratteri alfanumerici oppure PEC
  • Righe IVA 0% senza natura: errore SDI 00401
  • Split Payment + Ritenuta: non compatibili (Circ. AdE 15/E 2015)
  • NC/ND senza riferimento fattura originale: blocco FatturaPA
  • Data futura o oltre 12 giorni (fattura immediata) / 15 mese successivo (differita)
  • Regime forfettario con ritenuta o cassa: combinazione impossibile
  • IBAN richiesto dalla condizione pagamento ma assente

Generazione singola

Dal documento aperto, premere Invia al SDI nel footer. Il sistema genera l'XML, lo valida e lo trasmette al canale SDI configurato (Aruba, Infocert, PEC).

Generazione batch

Dalla lista documenti, selezionare più fatture e premere Invio batch SDI. Il sistema elabora in sequenza con report esito per ogni documento.

Multi-valuta e SDI

L'XML FatturaPA richiede importi in EUR. Per documenti in altra valuta, il sistema inserisce automaticamente il controvalore in EUR calcolato con il tasso di conversione indicato.

17Conversione Documenti

Il sistema supporta la catena documentale completa:

DaADescrizione
Preventivo (PRV)Ordine (ORD)Mantiene righe, soggetto, condizioni pagamento
Ordine (ORD)DDTGenera bolla di accompagnamento merce
DDTFattura (TD01)Fatturazione singolo DDT
Più DDTFattura Differita (TD24)Fattura riepilogativa: raggruppamento più DDT dello stesso soggetto

DDT Riepilogativa (TD24)

Selezionando il tipo TD24, si apre automaticamente l'overlay selezione DDT dove scegliere i DDT da includere. Il sistema:

  1. Mostra solo i DDT dello stesso soggetto non ancora collegati a fattura
  2. Permette la selezione multipla con totale progressivo
  3. Genera le righe della fattura dai DDT selezionati con riferimento (Rif. DDT n. X del dd/mm/yyyy)
  4. Collega i DDT alla fattura con relazione documentoPadre

📋 Evadi Ordini → DDT (con controllo fido cliente)

Creando un DDT, dopo aver scelto il cliente, è disponibile il pulsante "📋 Evadi Ordini". Apre l'elenco degli ordini approvati del cliente (stato Confermato o Parzialmente evaso con residuo) e permette di trasformarli in un unico DDT, anche da più ordini insieme.

  • Selezione riga per riga con quantità (predefinita = residuo da evadere); il residuo non spedito genera automaticamente i back-order e l'ordine passa a Evaso/Parziale.
  • In cima all'elenco viene mostrata la situazione creditizia del cliente: fido massimo, sospesi (rate aperte), insoluti (rate scadute non saldate) e fido residuo.
  • Se il fido è superato o sono presenti insoluti, compare un avviso e viene richiesta una conferma esplicita prima di creare il DDT (non blocca, ma avvisa).
18Multi-valuta

Il modulo supporta 21 valute con bandiera identificativa. La valuta è selezionabile nella tab Generale:

  • Valuta pre-compilata: se il soggetto ha una valutaDefault, viene impostata automaticamente
  • Tasso di conversione: tasso indicativo verso EUR (es. 1 USD = 0,92 EUR). Modificabile manualmente.
  • Controvalore EUR: nei totali appare una riga aggiuntiva con il controvalore in euro per l'XML SDI

Ai sensi dell'art. 14 DPR 633/72, la conversione deve avvenire al tasso BCE del giorno dell'operazione. Il tasso inserito è indicativo e può essere aggiornato dall'operatore.

Simboli valuta: € EUR, $ USD, £ GBP, Fr. CHF, ¥ JPY, e altre 16 valute internazionali. I simboli appaiono nei totali e nelle righe accanto ai prezzi.
19Stampa e Modelli

Nel footer del documento è presente il selettore modello di stampa:

  • I modelli sono filtrati per tipo documento: selezionando una fattura si vedono solo i template fattura
  • Il modello di default è pre-selezionato automaticamente
  • Premendo Stampa PDF si genera il documento in una nuova finestra del browser
  • I template sono personalizzabili nel modulo Print Designer

Ogni template può includere: logo aziendale, intestazione, griglia righe, riepilogo IVA, totali, coordinate bancarie, diciture obbligatorie, codice a barre e QR code.

20Configura Vista

Il pannello Configura Vista (icona ingranaggio in alto a destra) permette di personalizzare il form documento:

Colonne Righe

Mostrare/nascondere singole colonne della griglia righe: U.M., Quantità, Prezzo, Sconto, IVA%, Omaggio, Importo, ecc. Lo stato è persistente in localStorage.

Tab visibili

Mostrare/nascondere singole tab del form (Pagamento, Trasporto, Agente, Magazzino, Generale). Utile per semplificare l'interfaccia quando non servono tutte le sezioni.

Vista Espansa

Attivando la Vista Espansa, tutte le tab visibili vengono mostrate in un'unica pagina scorrevole con titoli di sezione, invece della navigazione a tab. Utile per vedere tutto il documento in un colpo d'occhio.

Template Vista

Salvare la configurazione corrente come template e richiamarla in qualsiasi momento. Utile per avere configurazioni diverse per tipi documento diversi.

⬅ Freccia "Torna indietro"

Nell'header del form modifica documento e di tutte le liste principali (Documenti, Soggetti, Catalogo, ecc.) la freccia riporta sempre alla videata precedente, rendendo più rapida la navigazione tra le pagine. Dal form modifica documento, la freccia torna alla lista documenti (non alla dashboard).

💾 Pulsante "Salva" unificato

Il pulsante in basso a destra del form documento si chiama Salva, sia per i nuovi documenti che per le modifiche — senza distinzione "Salva" / "Aggiorna" che generava confusione.

📋 Toast di conferma/errore

I toast di salvataggio e di errore hanno una struttura dedicata (classe doc-toast): centrati in basso, larghezza minima 480px, emoji invece di icone-font, niente troncamenti del testo. Il messaggio è sempre leggibile per intero.

21Shortcut Tastiera
CombinazioneAzione
Ctrl+S / Cmd+SSalva documento
Cmd+Shift+/Apri manuale
EscChiudi modale / torna alla lista
TabNaviga campi riga (avanti)
Shift+TabNaviga campi riga (indietro)
EnterSeleziona voce dal dropdown catalogo
↑ ↓Naviga risultati dropdown catalogo
Ctrl+N / Cmd+NNuovo documento
22Eliminazione Ricette e Privacy (Solo Naturopati)

Per il profilo attività “Studio Medico / Naturopatico”, nel footer della lista documenti è disponibile il pulsante “Elimina Ricette” (icona delete_sweep, colore rosso). Questo pulsante non appare per gli altri profili aziendali.

Motivazione normativa

In Italia il naturopata non è riconosciuto come professione sanitaria (L. 3/2018). A differenza del medico, non ha obbligo di tenuta della cartella clinica né obbligo di conservazione delle prescrizioni. Le “ricette” naturopatiche sono consigli d'acquisto, non atti medici con valore legale.

NormaImplicazione per il naturopata
Art. 5.1.c GDPR — MinimizzazioneI dati personali devono essere limitati a quanto necessario. Senza obbligo legale di conservazione, mantenere migliaia di ricette con dati sanitari è una violazione del principio di minimizzazione.
Art. 5.1.e GDPR — Limitazione conservazioneI dati vanno conservati per un arco di tempo non superiore al conseguimento delle finalità. La finalità del consiglio d'acquisto si esaurisce con l'acquisto stesso.
Art. 9 GDPR — Dati particolari (sanitari)Le indicazioni su integratori, fitoterapici, posologie e note cliniche sono dati relativi alla salute. Il naturopata li tratta solo con consenso esplicito (art. 9.2.a), revocabile in qualsiasi momento.
Art. 83 GDPR — SanzioniLa conservazione di dati sanitari senza base giuridica può comportare sanzioni fino a 20 milioni di euro o 4% del fatturato.
Un naturopata che conserva ricette con note cliniche, patologie e terapie di pazienti che non tornano da anni ha un rischio GDPR elevato in caso di ispezione del Garante. Non può giustificare la conservazione con un obbligo di legge (non ne ha). Le fatture, invece, devono essere conservate per 10 anni (art. 2220 CC).

Confronto Medico vs Naturopata

AspettoMedico / Prof. sanitarioNaturopata
Base giuridica dati sanitariArt. 9.2.h GDPR (medicina preventiva)Solo consenso esplicito art. 9.2.a
Obbligo cartella clinicaSì (DM 380/2000)No
Conservazione obbligatoria ricette10 anni minimoNessun obbligo
Valore legale della ricettaAtto medico prescrittivoConsiglio d'acquisto
Principio di minimizzazioneTemperato dall'obbligo documentalePieno

Come usare il pulsante

  1. Dalla lista documenti, il pulsante “Elimina Ricette” appare nel footer a destra (solo per profilo Studio Medico/Naturopatico).
  2. Il sistema conta il numero di ricette (RIC) presenti nel workspace.
  3. Prima conferma: mostra il numero esatto di ricette e avvisa che l'operazione è irreversibile.
  4. Seconda conferma: chiede una conferma finale prima di procedere.
  5. Il sistema elimina tutte le righe delle ricette e poi tutti i documenti di tipo RIC.
  6. Messaggio di successo con il conteggio delle ricette eliminate.
Consiglio: prima di eliminare le ricette, eseguire un backup del workspace dal modulo Backup & Ripristino. In questo modo, se necessario, sarà possibile ripristinare i dati.

Buone pratiche per la conformità GDPR

  • Eliminare periodicamente le ricette dei pazienti che non si presentano da oltre 12-24 mesi
  • Conservare solo le fatture (obbligo fiscale 10 anni — art. 2220 CC)
  • Documentare nel Registro Trattamenti GDPR il termine di conservazione per le ricette
  • Acquisire il consenso esplicito (art. 9.2.a) per il trattamento dei dati sanitari e documentarlo nel modulo GDPR
  • Informare i pazienti nell'informativa privacy sul periodo di conservazione dei dati relativi alla salute
23Funzionalità Avanzate — v2.1

Aggiornamento funzionale del modulo documenti. Di seguito le novità introdotte.

Tab dinamiche dal profilo + moduli workspace

Le tab del form documento (Pagamento, Trasporto, Agente, Scadenzario, Magazzino, Dati SDI) non sono più configurabili manualmente da “Configura Vista”. La visibilità viene determinata automaticamente combinando:

  • Il profilo del tipo documento (es. PF_SANITARIO, PF_NATUROPATA, PF_COMMERCIALE)
  • I moduli abilitati nel workspace corrente (Parametri → menuConfig)

La sezione “Tab visibili” è stata rimossa dal pannello Configura Vista. Resta la personalizzazione delle colonne righe e del tema.

Totali nascosti per le Ricette (RIC)

Sui documenti di tipo RIC (Ricetta / Consiglio d'acquisto) non vengono più mostrati i campi:

  • Imponibile, INPS, Bollo, Netto a pagare
  • Tab Generale, Pagamento, Scadenzario

La ricetta mantiene solo le sezioni rilevanti: Soggetto, Righe, eventuale Tab Magazzino. Questo rende l'interfaccia coerente con la natura non fiscale del documento.

Pulsante “Fattura Diretta” (solo su RIC)

Sui documenti RIC compare un nuovo pulsante “Fattura Diretta” che esegue in un'unica azione:

  1. Crea una fattura TD01 in stato EMESSA con le stesse righe della ricetta
  2. Usa la Dicitura Standard e l'Importo Proposto dai preset configurati in Parametri → Preset Fatture
  3. Emette anche la ricetta corrente (cambio di stato automatico)
Utile per il flusso “consiglio → vendita” dello studio medico/naturopatico: dalla ricetta si passa direttamente alla fattura senza riempire di nuovo i campi.

Numero manuale per documenti in Bozza

Accanto al badge BOZZA, nell'intestazione del documento, è ora presente un input inline che consente di assegnare manualmente un numero al documento prima dell'emissione. Utile per recuperare numerazioni saltate o inserire documenti storici.

Navigazione frecce per tipo documento

Le frecce di navigazione ← precedente / successivo → nell'header del documento filtrano ora per lo stesso tipo documento del corrente. Scorrendo da una fattura TD01 si passa solo ad altre TD01; da una RIC ad altre RIC.

Paginazione lista documenti

Nel footer della lista documenti sono stati aggiunti i controlli di paginazione con selettore delle righe per pagina: 25 / 50 / 100 / 200. Riduce i tempi di caricamento su workspace con molti documenti.

Ergonomia tastiera nelle righe

  • Tab con Enter sull'ultimo campo di una riga sposta il focus sul pulsante “Aggiungi riga”. Un ulteriore Enter aggiunge la riga e il focus passa al primo campo della nuova riga.
  • I bottoni Catalogo (apertura dropdown) e Cestino (eliminazione riga) sono ora fuori dal flusso Tab (tabindex=-1). Così la digitazione rapida non viene interrotta da bottoni non di input.
Il flusso ottimale è ora: digitare riga → Tab/Enter fino a fine riga → Enter → Enter (aggiunge) → digita la prossima riga, senza mai usare il mouse.
24Audit, Cestino BOZZE, Operazioni massive

Aggiornamento strutturale del modulo Documenti: tracciamento modifiche, cestino dedicato alle BOZZE, operazioni massive con validazione delle transizioni di stato. Tutte le novita sono progettate nel rispetto dei vincoli di conservazione fiscale: i documenti emessi restano immutabili.

Soft-delete limitato alle BOZZE

L'eliminazione di un documento segue ora regole differenti in base allo stato:

  • BOZZA: eliminazione = soft-delete (il documento va nel cestino, e ripristinabile).
  • EMESSO / CONFERMATO / INVIATO / PAGATO / ARCHIVIATO: eliminazione non consentita (errore 409). Per annullare un documento fiscale usare lo stato ANNULLATO, che preserva numerazione e tracciabilita.

Questa distinzione e fondamentale per la conservazione fiscale: una fattura emessa non puo sparire dal database, deve restare con stato ANNULLATO se ritirata.

Cestino e ripristino

Nel footer della lista documenti e ora presente il pulsante 🗑 Cestino. Premendolo la lista mostra solo le bozze cancellate con i metadati di eliminazione (data e autore).

Per ogni bozza nel cestino sono disponibili due azioni nella colonna Azioni:

  • ↺ Ripristina: la bozza torna nella lista attiva.
  • ✗ Definitivo: eliminazione fisica irreversibile, riservata ad utenti ADMIN o SUPERADMIN. Blocca se il documento e referenziato altrove.

Audit log automatico

Ogni modifica a un documento (PUT su campi fiscali o PATCH sullo stato) viene registrata nella tabella log_modifiche_documenti con valore precedente, valore nuovo, utente e data/ora.

I campi tracciati includono: numero, serie, data documento, stato, soggetto, tipo documento, totali (imponibile, IVA, lordo), dati di trasporto, sconto, condizioni di pagamento, agente di riferimento. Lo storico e accessibile via API GET /api/documenti/:id/audit-log.

Timeline del documento

L'endpoint GET /api/documenti/:id/timeline restituisce una vista aggregata: modifiche dell'audit, scadenze (rate di pagamento), movimenti di magazzino generati dal documento e provvigioni maturate, ordinati per data decrescente.

Operazioni massive (selezione multipla)

La barra azioni che appare quando si selezionano piu documenti include ora:

  • Cambio stato massivo (Inviato, Pagato, Archivia, Annulla): il backend valida ogni transizione. I documenti con stato incompatibile vengono ignorati e riportati come invalidi nella risposta.
  • Cestino: sposta nel cestino solo le BOZZE selezionate. Gli altri documenti vengono riportati come bloccati.
  • Fatt. Riepilogativa (solo filtro DDT): invariato.

Tecnicamente, le operazioni passano ora da un singolo endpoint POST /api/documenti/bulk che gestisce sia cambia-stato sia soft-delete. La validazione delle transizioni e centralizzata lato server.

Matrice delle transizioni di stato

DaVerso (consentite)
BOZZAEMESSO, CONFERMATO, ANNULLATO
EMESSOCONFERMATO, INVIATO, ANNULLATO
CONFERMATOINVIATO, PAGATO, ARCHIVIATO, ANNULLATO
INVIATOPAGATO, ARCHIVIATO, ANNULLATO
PAGATOARCHIVIATO
ANNULLATO— (terminale)
ARCHIVIATO— (terminale)
?Domande Frequenti (FAQ)
Come duplico un documento?
Dalla lista documenti, fare clic destro sul documento e selezionare “Duplica”. Viene creata una copia in stato BOZZA con data odierna, stesso soggetto e stesse righe. Il numero viene azzerato.
Come elimino un documento?
Solo i documenti in stato BOZZA possono essere eliminati. I documenti emessi o confermati devono essere annullati (non eliminati) per mantenere la tracciabilità fiscale. Un documento annullato resta visibile nell'archivio con lo stato “Annullato”.
Posso modificare un documento già emesso?
No. L'emissione è irreversibile (art. 21 DPR 633/72). Per correggere un errore, emettere una Nota di Credito (TD04) che fa riferimento alla fattura originale, poi eventualmente riemettere il documento corretto.
Come funziona il bollo virtuale automatico?
Il bollo di 2,00 € viene calcolato automaticamente se: (a) il tipo documento ha calcolaBollo=true, (b) il bollo virtuale è attivo nei Parametri azienda, (c) l'imponibile esente IVA è superiore a 77,47 € (DM 17/06/2014). L'importo viene incluso nel totale e nel XML FatturaPA (blocco 2.1.1.8).
Come attivo lo Split Payment?
Nella tab Generale, impostare Esigibilità IVA = “S” (Split Payment). L'IVA non verrà incassata dal cedente ma versata dal cessionario (tipicamente PA). Attenzione: Split Payment e Ritenuta d'acconto non sono compatibili sullo stesso documento (Circ. AdE 15/E 2015).
Come distinguo le fatture passive da quelle attive?
Le fatture passive hanno tipo documento FP. Nella lista documenti, filtrare per tipo = FP. Hanno un colore viola distintivo e l'intestatario si chiama “Fornitore” anziché “Cliente”.
Posso importare fatture passive da XML senza canale SDI?
Sì. Creare un nuovo documento di tipo FP, poi nella tab Dati SDI premere “Importa da XML” e incollare il contenuto dell'XML FatturaPA ricevuto. Il sistema lo analizza e popola automaticamente tutti i campi.
Come funziona la fattura riepilogativa DDT?
Selezionare il tipo TD24 (Fattura Differita). Si apre l'overlay di selezione DDT: scegliere i DDT dello stesso soggetto da raggruppare. Il sistema genera le righe della fattura automaticamente con i riferimenti ai DDT originali. La fattura differita va emessa entro il 15 del mese successivo all'effettuazione dell'operazione.
Come gestisco uno sconto a catena 10+10+5?
Digitare 10+10+5 nel campo Sconto% della riga. Il sistema calcola lo sconto equivalente (23,05%) e lo applica all'importo, ma preserva la notazione originale nel campo scontoMultiplo. Al rientro nel documento si vede sempre “10+10+5” e non il valore calcolato.
Come funziona l'omaggio senza rivalsa?
Nella colonna Omaggio, selezionare S/R (senza rivalsa). L'imponibile della riga viene azzerato e la natura IVA impostata a N2.2 (art. 2 c.2 DPR 633/72). L'IVA resta a carico del cedente. Con rivalsa (C/R), invece, l'IVA viene addebitata al destinatario (art. 18 c.3 DPR 633/72).
Come cambio la valuta del documento?
Nella tab Generale, sezione Multi-valuta, selezionare la valuta desiderata. Il tasso di conversione verso EUR viene pre-compilato (modificabile). I totali mostreranno una riga aggiuntiva con il controvalore in EUR. Se il soggetto ha una valutaDefault, viene pre-selezionata alla creazione.
Cosa succede ai movimenti di magazzino se annullo un documento?
I movimenti di scarico vengono stornati automaticamente: le quantità residue dei lotti vengono ripristinate ai valori precedenti. Lo storno è tracciato con un movimento di segno opposto.
L'IVA delle fatture passive è detraibile?
Sì, ai sensi dell'art. 19 DPR 633/72, a condizione che la fattura sia registrata nel registro IVA acquisti entro i termini di legge e che l'acquisto sia inerente all'attività d'impresa o professionale.
Come uso le lettere di intento?
Nella tab Generale, sezione “Lettera di Intento”, selezionare la lettera attiva del soggetto. Il sistema mostra plafond, utilizzato e residuo. Se il residuo è sufficiente, l'IVA viene azzerata con natura N3.4 e la dicitura di legge (art. 8 c.1 lett. c DPR 633/72).
Quali validazioni fa il sistema prima del salvataggio?
Il sistema controlla: P.IVA e CF validi, codice SDI o PEC presente (fatture), righe IVA 0% con natura, compatibilità split/ritenuta, tempistica emissione (12gg immediata, 15 mese differita), NC con riferimento originale, regime forfettario con ritenuta/cassa, IBAN per condizioni che lo richiedono. Tutti gli avvisi sono non bloccanti ma richiedono conferma esplicita.
Perché c'è un pulsante per eliminare tutte le ricette?
Il pulsante “Elimina Ricette” appare solo per il profilo Studio Medico/Naturopatico. Il naturopata non è un professionista sanitario riconosciuto (L. 3/2018) e non ha obbligo legale di conservare le ricette. Ai sensi del GDPR (art. 5.1.c minimizzazione, art. 5.1.e limitazione conservazione), mantenere dati sanitari senza base giuridica è una violazione. Le fatture invece devono essere conservate per 10 anni (art. 2220 CC) e non vengono toccate.
L'eliminazione delle ricette cancella anche le fatture?
No. Il pulsante elimina solo i documenti di tipo RIC (ricette) e le relative righe. Le fatture (TD01), i DDT, i preventivi e tutti gli altri tipi documento non vengono toccati.
Posso eliminare una fattura emessa?
No. Per conservazione fiscale (art. 2220 CC), i documenti in stato EMESSO / CONFERMATO / INVIATO / PAGATO / ARCHIVIATO non possono essere eliminati dal sistema. Se una fattura deve essere ritirata, assegnare lo stato ANNULLATO: il documento resta tracciato, la numerazione non cambia, i movimenti di magazzino vengono stornati automaticamente. L'eliminazione (soft-delete con cestino) e consentita solo sulle BOZZE non ancora emesse.
Ho eliminato una bozza per errore. Posso recuperarla?
Si. L'eliminazione di una bozza e un soft-delete: la bozza va nel cestino. Premere il pulsante “🗑 Cestino” nel footer della lista documenti, individuare la bozza e premere “↺ Ripristina”. Torna attiva con tutte le righe e gli allegati originali.
Chi ha modificato la data di una fattura e quando?
Ogni modifica ai campi fiscali (numero, data, stato, totali, soggetto, trasporto, sconto, agente, pagamento) viene registrata nell'audit log del documento con valore precedente, valore nuovo, utente e timestamp. La lista e accessibile via API GET /api/documenti/:id/audit-log e inclusa nella timeline del documento.
Posso cambiare lo stato di 30 fatture emesse a “Pagato” in un colpo solo?
Si. Selezionare le fatture con le checkbox, premere il pulsante Pagato nella barra azioni. Il sistema valida ogni transizione: le fatture in stato EMESSO, CONFERMATO o INVIATO passeranno a PAGATO, quelle in stato non compatibile (es. gia ARCHIVIATO) verranno ignorate e riportate come invalidi nella risposta del bulk.
Come cancello in blocco delle bozze vecchie?
Selezionare le bozze con le checkbox, premere Cestino nella barra azioni. Il sistema sposta solo le bozze nel cestino; eventuali documenti selezionati non in stato BOZZA vengono ignorati per motivi di compliance e riportati come bloccati. Dal cestino le bozze possono essere ripristinate o eliminate definitivamente (solo ADMIN).
Certificazione v 2.2 — Presidi di compliance
🔑 Visibilità condizionata (certificazione v 2.2) — Questo modulo è accessibile solo se:
Pacchetto FATTURAZIONE attivo sul workspace (configurabile da SUPERADMIN in /admin/pacchetti)
Profilo attività compatibile: Tutti i profili (richiede pacchetto FATTURAZIONE)
Permesso utente abilitato in Modifica Utente → Moduli
I tre livelli si applicano in intersezione. Dettagli completi in Gerarchia Pacchetti+Profilo+Utente.

A partire dalla versione 2.2, il modulo Documenti adotta lo standard di certificazione NOX con i seguenti presidi:

Cestino e soft-delete

Gli elementi cancellati non vengono rimossi fisicamente ma spostati in un cestino interno (campi cancellatoIl / cancellatoDa). Dalla toolbar il pulsante Cestino alterna tra vista attivi e vista cestino. Dal cestino è possibile:

  • Ripristinare l'elemento (riportarlo nella lista attiva) — operazione riservata ad amministratori.
  • Eliminare definitivamente con motivazione obbligatoria — azione irreversibile, riservata ad amministratori, tracciata nell'audit log.

Azioni massive (bulk)

È possibile selezionare più elementi con le checkbox della prima colonna. Appare una barra inferiore con le azioni disponibili: Cambio stato, Invia, Storna. Stato CONFERMATO/EMESSO blocca modifica dati fiscali. La risposta indica N operazioni riuscite / M fallite; i dettagli delle fallite compaiono nella console browser (F12).

Storico modifiche (audit log)

L'icona history nelle azioni di riga apre un modal con la storia completa delle modifiche: data, campo, valore precedente, valore nuovo, operatore, eventuale motivazione. I record di audit non sono modificabili né eliminabili via UI. Conservazione: indefinita (art. 2220 c.c. — 10 anni minimo).

Mascheramento dati sensibili (GDPR art. 32)

Se i campi modificati contengono dati sensibili (IBAN, Codice Fiscale, Partita IVA, password/token), l'audit log salva il valore mascherato anziché in chiaro:

CampoEsempio originaleNel log
IBANIT60X0542811101000000123456IT60****3456
Codice Fiscale (PF)RSSMRA80A01H501ZRSSMRA****501Z
Partita IVA12345678901123****901
Password / token(qualsiasi)***REDACTED***

Timeline aggregata

Per ciascun elemento è disponibile una vista Timeline che aggrega in ordine cronologico audit, eventi del ciclo di vita ed eventuali entità collegate (es. documenti, movimenti, storni).

RBAC uniforme

Tutte le azioni distruttive o massive (soft-delete, ripristino, eliminazione definitiva, bulk, storno) richiedono il ruolo ADMIN o superiore. Gli operatori possono continuare a creare / modificare / consultare secondo le proprie abilitazioni.

Il DOCX di certificazione formale per questo modulo è disponibile: certificazione-documenti.docx (cartella manuali).
25Pacchetto FATTURAZIONE Avanzato — 12 feature operative

Estensione del pacchetto FATTURAZIONE con le funzionalità operative più richieste dal mercato italiano. Tutti gli endpoint sono montati sotto /api/fatturazione/*. Le feature riguardano la vita del documento: dalla generazione automatica (ricorrenti, DDT raggruppati) allo storno, dalla liquidazione IVA differita ai template di stampa.

#1 Fatture ricorrenti / abbonamenti

Permette di definire un documento template che verrà emesso automaticamente a intervalli regolari (mensile, bimestrale, trimestrale, semestrale, annuale). Uno scheduler cron attivo su tutti i workspace (5 4 * * * UTC — 04:05) controlla ogni notte le ricorrenti scadute (prossima_emissione <= oggi) e genera la fattura corrispondente.

  • Tabella: fatture_ricorrenti + log log_emissioni_ricorrenti
  • Campi: frequenza, giorno del mese (cap 28 per sicurezza su febbraio), fine validità (NULL = illimitato), auto invio email
  • Endpoint: GET /api/fatturazione/ricorrenti (elenco + cestino), POST /ricorrenti, PUT /ricorrenti/:id, DELETE (soft-delete), POST /ripristina, POST /:id/esegui-ora (test manuale), GET /:id/log
  • Soft-delete integrato: elementi cancellati vanno in cestino con cancellato_il + cancellato_da, ripristino tramite endpoint dedicato
Il documento template va creato una sola volta come fattura normale: la ricorrente ne userà soggetto, righe, pagamento, totali clonandoli nel nuovo documento in stato BOZZA.

#2 Raggruppamento DDT → Fattura differita (TD24)

Consente di emettere entro il 15 del mese successivo una unica fattura TD24 che raggruppi tutti i DDT consegnati a un soggetto (art. 21 c.4 DPR 633/72).

  • Nuovi campi su documenti: fatturatoIl (timestamp) e fatturaRaggruppataId (FK alla fattura cumulativa)
  • GET /api/fatturazione/ddt-fatturabili?soggettoId=X&dataFinoA=YYYY-MM-DD — lista DDT emessi, non cancellati, non ancora fatturati
  • POST /api/fatturazione/raggruppa-ddt body {soggettoId, ddtIds:[], dataFattura} — crea TD24 con righe aggregate e marca i DDT come fatturati
  • Ogni riga della nuova fattura riporta in testa il riferimento DDT (numero, anno, data) per tracciabilità

#3 Storno con Nota di Credito collegata (TD04)

Genera automaticamente una TD04 con righe negate (imponibile/IVA/totale invertiti) collegata al documento originale. La nota di credito può stornare tutte le righe o solo un sottoinsieme (storno parziale).

  • Nuovi campi su documenti: documentoOriginaleId (FK) e motivazioneStorno
  • POST /api/fatturazione/storno/:docId body {righeDaStornare?: [ids], motivazione, dataNC}
  • La descrizione della NC riporta in automatico: "Nota di credito per TD01 12/2026: <motivazione>"

#4 Split payment PA automatico (art. 17-ter)

Flag isPA + codiceIpa sul soggetto. Quando si emette una fattura verso un soggetto marcato PA, l'esigibilità IVA va impostata a S (scissione pagamenti): l'IVA non viene incassata dal fornitore ma versata direttamente dalla PA all'Erario.

  • PATCH /api/fatturazione/soggetto/:id/is-pa body {isPA:true, codiceIpa:"UFXXXX"}
  • GET /api/fatturazione/soggetti-pa — elenco enti PA attivi

#6 IVA per cassa (art. 32-bis DL 83/2012)

Regime opzionale per piccole imprese: l'IVA diventa esigibile solo al pagamento della fattura (non all'emissione), con limite massimo di 12 mesi dall'emissione. Due nuovi campi su documenti:

  • ivaPerCassa (boolean) — marca il documento come soggetto al regime
  • ivaPerCassaVersataIl (timestamp) — data pagamento → IVA diventa esigibile
  • PATCH /api/fatturazione/iva-per-cassa/:docId (attiva/disattiva flag)
  • POST /api/fatturazione/iva-per-cassa/:docId/versata — marca l'IVA come esigibile
  • GET /api/fatturazione/iva-per-cassa/pendenti — fatture con IVA ancora sospesa

#7 Log invio email documenti

Ogni email inviata relativa a un documento (manuale o automatica) lascia traccia in log_invio_email_documento.

  • Eventi tracciati: MANUALE, AUTO_EMESSO, AUTO_SOLLECITO, AUTO_RICORRENTE
  • Esiti: OK, ERRORE, BOUNCE
  • Flag allegati: allegato_pdf, allegato_xml
  • POST /api/fatturazione/invio-email/:docId body {destinatario, oggetto, corpo, allegatoPdf, allegatoXml, evento}
  • GET /api/fatturazione/invio-email/:docId/log

#8 Sezionali multipli (numerazione per serie)

Numerazione progressiva indipendente per tipologia/sezionale. Formato generato: 2026/A/0001 con separatore personalizzabile. Il progressivo si resetta automaticamente ad ogni cambio d'anno.

  • Tabella: sezionali_documento, FK su documenti.sezionaleId
  • Seed iniziale: sezionale DEFAULT creato automaticamente
  • GET /api/fatturazione/sezionali, POST /sezionali (ADMIN), POST /sezionali/:id/next-progressivo
  • Un sezionale può essere universale (tipo_documento=NULL) o legato a un tipo specifico (TD01, TD04, DDT...)

#9 Bonus edilizi (art. 121 DL 34/2020)

Gestione sconto in fattura + cessione del credito per i vari bonus edilizi (110%, 65%, 50%, bonus facciate, ecc.).

  • Nuovi campi su documenti: scontoInFattura (numerico), tipoBonusEdilizio (es. "110", "65", "facciate"), cessionarioCredito, dataCessioneCredito
  • PATCH /api/fatturazione/bonus-edilizi/:docId body {scontoInFattura, tipoBonusEdilizio, cessionarioCredito, dataCessioneCredito}
  • GET /api/fatturazione/bonus-edilizi?anno=2026 — report annuale bonus applicati

#12 Template di stampa per tipo documento

Layout configurabili per ciascun tipo di documento con CSS personalizzato e blocchi JSON. Seed iniziale: template standard per TD01, TD04, DDT, PRV.

  • Tabella: template_stampa_documento con layout_json (blocchi: intestazione_azienda, intestazione_cliente, tabella_righe, totali, scadenze...) + CSS personalizzato
  • Un template può essere default per tipo o universale (tipo_documento=NULL)
  • CRUD completo: GET /template-stampa, POST, PUT /:id, DELETE /:id (disattiva)
  • Filtri: ?tipoDocumento=TD01 restituisce template specifici + universali ordinati per default
Le feature correlate a scadenze (#5 multi-rata), provvigioni (#10), corrispettivi (#11) sono documentate nei rispettivi manuali: scadenzario-u.html, provvigioni-u.html, corrispettivi-u.html. Il soggetto PA (#4) è anche in soggetti-u.html; IVA per cassa (#6) anche in contabilita-u.html.
26FATTURAZIONE — completamento ALTA + MEDIA priorità

Completa il pacchetto FATTURAZIONE con le 9 macro-funzionalità residue ritenute indispensabili dal mercato italiano: ritenuta d'acconto, rivalsa INPS, bollo virtuale automatico, cassa previdenziale, collegamento acconti, multimoneta, solleciti, autofattura e esterometro. Tutte le novità sono montate sotto /api/fatturazione/* (router fatturazione-v22-wave7.routes.js).

A. Ritenuta d'acconto (art. 25 DPR 600/73)

Applica e calcola automaticamente la ritenuta d'acconto sulla fattura in emissione. Campi documenti: ritenutaAttiva, aliquotaRitenuta (default 20%), baseCalcoloRitenuta, tipoRitenuta (codice tributo: 1040 professionisti, 1046 prov. agenti, 1050 lav. occasionali, 1019 cap. sociale), causaleRitenuta (A/B/C/D/H come tabella CU), importoRitenuta (calcolato).

  • PATCH /api/fatturazione/ritenuta/:docId body {attiva, aliquota, baseCalcolo, tipoRitenuta, causaleRitenuta}
  • GET /api/fatturazione/ritenuta/report?anno=2026&soggettoId=X — riepilogo per CU/770

B. Rivalsa INPS 4% (art. 1 c. 212 L. 662/1996)

Per professionisti iscritti alla gestione separata INPS: rivalsa addebitata al cliente in fattura, non concorre a base IVA, aliquota max 4%.

  • Campi: rivalsaInps (importo), aliquotaRivalsaInps
  • Sul soggetto: aliquotaRivalsaInpsDefault, tipoProfessionista (INPS_GS / CNPADC / ENPAP / ENPAM / ENPAV / EPAP)
  • PATCH /api/fatturazione/rivalsa-inps/:docId body {aliquota}

C. Bollo virtuale automatico (DM 17/06/2014)

Calcolo automatico del bollo di € 2,00 su fatture con totale operazioni esenti/escluse/non soggette ≥ € 77,47. Il sistema somma gli imponibili delle righe con natura IVA N1..N7 e applica la soglia.

  • Campi: bolloAutoCalcolato (boolean), motivazioneBollo (testo con dettaglio calcolo)
  • POST /api/fatturazione/bollo/auto-calcola/:docId — valuta soglia e applica bollo

D. Cassa previdenziale (codici TC01..TC22 FE)

Gestione strutturata delle 22 casse previdenziali professionali con i relativi codici Fattura Elettronica. Seed automatico: Cassa Forense (TC01), CNPADC (TC02), Geometri, INARCASSA, Notariato, CNPR, ENASARCO (TC07), ENPACL, ENPAM (TC09), ENPAF, ENPAV, ENPAP (TC12), ENPAPI, EPPI, EPAP (TC15), ENPAB, INPGI, ENPPI, INPS Gestione Separata (TC21), INPS (TC22).

  • Tabella: categorie_cassa_previdenza con flag concorre_imponibile_iva (false per TC07/TC21/TC22)
  • Campi documenti: tipoCassaPrevidenza (codice), aliquotaCassaPrevidenza, cassaPrevidenza (importo)
  • GET /cassa-prev/categorie, PATCH /cassa-prev/:docId
  • GET /calcolo-netto/:docId — ritorna breakdown completo: imponibile + cassa + IVA + rivalsa + bollo − ritenuta = netto

E. Acconti TD02/TD03 → fattura finale TD01

Collega uno o più acconti (TD02 acconto su fattura, TD03 acconto su parcella) alla fattura finale TD01 che li incorpora. Il sistema verifica che acconti e fattura siano dello stesso soggetto e che gli acconti non siano già legati altrove.

  • Campi: documentoAccontoId (FK TD01 dal TD02/TD03), importoAcconto (totale acconti detratti sulla TD01)
  • GET /api/fatturazione/acconto/disponibili?soggettoId=X — acconti non ancora legati
  • POST /api/fatturazione/acconto/lega/:fatturaId body {accontoIds: [ids]}

F. Multimoneta — cambi valuta + totale in valuta estera

Registra documenti in valuta straniera con cambio storico. La tabella cambi_valuta_storici mantiene lo storico dei cambi (fonte: manuale / BCE / API ECB). Seed iniziale: USD, GBP, CHF, JPY, CNY.

  • Campi documenti: valuta (ISO 4217), cambio, dataCambio, totaleInValutaEstera (calcolato auto)
  • GET /multimoneta/cambi?valuta=USD&data=2026-04-15 — ritorna il cambio valido a quella data
  • POST /multimoneta/cambio [ADMIN] — inserisce/aggiorna un cambio storico
  • PATCH /multimoneta/:docId body {valuta, cambio?, dataCambio?} — se cambio non passato, viene recuperato dallo storico alla dataDocumento

G. Solleciti automatici con interessi legali

Template configurabili per 4 livelli (cortese, secondo, terzo, diffida ex art. 1454 c.c.). Gli interessi legali sono calcolati automaticamente al tasso BCE vigente (2026: 5%) sui giorni di ritardo effettivi. Sostituzioni di variabili nell'oggetto e corpo: {NUMERO}, {ANNO}, {DATA_DOC}, {DATA_SCAD}, {IMPORTO}, {INTERESSI}, {SOGGETTO}, {GIORNI_RITARDO}.

  • Tabelle: template_sollecito (4 livelli seed), solleciti_documento (log invii)
  • GET /solleciti/templates, PUT /solleciti/templates/:id [ADMIN]
  • POST /solleciti/invia/:docId body {livello, scadenzaId?, destinatarioOverride?}
  • GET /solleciti/log/:docId — storico solleciti
  • GET /solleciti/scaduti?giorni=N — cruscotto scadenze pendenti ≥ N giorni

H. Autofattura TD17/TD19/TD20/TD21 (reverse charge)

Genera automaticamente un'autofattura di regolarizzazione TD20 (art. 6 c.8 D.Lgs 471/97) a partire da una fattura originale con righe copiate e flag autofatturaDenuncia = true. Per TD17/19/21 è disponibile un endpoint di marca manuale.

  • Campi: autofatturaDenuncia (boolean), fatturaOrigineAutofatturaId (FK alla fattura originale per TD20)
  • POST /autofattura/td20/:fatturaOrigineId [ADMIN] body {motivazione} — genera TD20
  • PATCH /autofattura/marca/:docId — marca TD17/19/21 come autofattura + esterometro
  • GET /autofattura/lista — elenco autofatture emesse

I. Esterometro trimestrale

Raccolta e comunicazione trimestrale dei documenti verso/da esteri (TD17 servizi esteri, TD18 beni UE, TD19 beni extra-UE).

  • Tabella: esterometro_comunicazioni (periodo UNIQUE, num_cessioni, num_acquisti, stato BOZZA/INVIATO/ACCETTATO/SCARTATO)
  • Campi documenti: esterometroFlag, esterometroComunicatoIl, esterometroPeriodo ("2026-Q1")
  • GET /esterometro/candidati?periodo=2026-Q1 — documenti candidati del trimestre
  • POST /esterometro/comunica [ADMIN] body {periodo, documentiIds:[]} — marca documenti + crea comunicazione
  • GET /esterometro/comunicazioni — storico comunicazioni
Dettagli fiscali per area specialistica: ritenuta/rivalsa/cassa/bollo in contabilita-u.html; solleciti + interessi legali in scadenzario-u.html; rivalsa default agente in soggetti-u.html.
27FATTURAZIONE v 2.2 — 8ª ondata (chiusura residui)

Chiusura definitiva dei residui aperti: invio SMTP reale solleciti, parsing XML FatturaPA robusto + contabilizzazione automatica fatture passive con reverse charge, generazione XML Esterometro e Intrastat UE. Router fatturazione-v22-wave8.routes.js, dipendenza aggiunta xml2js.

1. SMTP reale per solleciti

Sostituisce il log-only di wave7 con invio reale tramite nodemailer usando la configurazione SMTP salvata nei parametri aziendali (smtpHost, smtpPort, smtpUser, smtpPass, smtpSecure, smtpFrom, flag smtpTestato).

  • POST /api/fatturazione/solleciti-smtp/invia/:docId body {livello, scadenzaId?, destinatarioOverride?, allegaPdf?} — invio singolo con sostituzione variabili + interessi legali BCE
  • POST /api/fatturazione/solleciti-smtp/invia-bulk [ADMIN] body {livello, giorniRitardoMinimo, limiteInvii} — invio massivo a tutte le scadenze candidate, esclude destinatari già sollecitati a livello ≥ N
  • Registra in solleciti_documento E log_invio_email_documento (evento AUTO_SOLLECITO)

2. SDI fatture passive — parsing XML + contabilizzazione

Parsing robusto del XML FatturaElettronica con xml2js (sostituisce il regex parser precedente). Estrae DettaglioLinee, DatiRiepilogo, dati cedente e totali. Popola la nuova tabella fattura_passiva_righe.

  • POST /api/fatturazione/sdi-passive/:id/parse-xml [ADMIN] — esegue parsing e salva righe
  • GET /api/fatturazione/sdi-passive/candidati-contab — fatture passive ricevute/verificate non ancora contabilizzate
  • POST /api/fatturazione/sdi-passive/:id/contabilizza [ADMIN] body {contoAcquisti?, contoIvaCredito?, contoFornitore?, forza?}

Pattern contabile applicato (prima_nota_righe generate automaticamente)

ScenarioDareAvere
TD01/TD04 standardAcquisti + IVA creditoDebito vs fornitore (lordo)
TD17/TD18/TD19 reverse chargeAcquisti + IVA credito reverseIVA debito reverse + Debito vs fornitore estero

Le registrazioni vengono create con stato = PROVVISORIO, tipo = AUTO, causale ACQUISTO. Il numero registrazione è progressivo annuale AAAA/N. Il flag contabilizzataIl sulla fattura passiva previene la doppia contabilizzazione (override con forza=true).

3. XML Esterometro reale

Genera l'XML effettivo della comunicazione "Dati fatture transfrontaliere" (schema Agenzia Entrate v3.0) con sezioni DTE (cessioni TD17) e DTR (acquisti TD18/TD19). File salvato in /app/xml-generati/, hash SHA-256 + archivio inline (< 500KB) nella nuova tabella xml_generati_archivio.

  • POST /api/fatturazione/esterometro-xml/genera/:periodo [ADMIN] (es. 2026-Q1)
  • GET /api/fatturazione/esterometro-xml/download/:id — download del file XML generato
  • Aggiorna esterometro_comunicazioni.stato = INVIATO e salva file_xml_path

4. Intrastat UE — dichiarazioni cessioni / acquisti

Nuove tabelle intrastat_dichiarazioni (UNIQUE periodo + tipo) e intrastat_righe per registrare le operazioni intra-UE. Generazione XML secondo schema INTRA-1bis (cessioni) / INTRA-2bis (acquisti).

  • GET/POST /api/fatturazione/intrastat/dichiarazioni [ADMIN POST] — CRUD dichiarazioni periodiche
  • POST /api/fatturazione/intrastat/righe/:dichiarazioneId [ADMIN] — inserisce riga con paese, codice NC8, valore statistico, massa netta, natura transazione, condizioni consegna (EXW/FOB/CIF…), modo trasporto
  • GET /api/fatturazione/intrastat/righe/:dichiarazioneId — elenco righe
  • POST /api/fatturazione/intrastat/genera-xml/:dichiarazioneId [ADMIN] — produce XML, stato → PRESENTATA, data presentazione = oggi

Archivio XML centralizzato

Nuova tabella xml_generati_archivio che raccoglie tutti gli XML generati (Esterometro, Intrastat, Autofattura future). Ogni record include path file, dimensione byte, hash SHA-256, contenuto inline se < 500KB, generato_il/generato_da.

  • GET /api/fatturazione/archivio-xml?tipo=ESTEROMETRO&periodo=2026-Q1
L'XML Esterometro generato segue la struttura Dati Fatture Transfrontaliere versione 3.0 (obbligatoria per i documenti post-luglio 2022). L'Intrastat XML è in formato interno; per l'invio effettivo alla Dogana tramite il sistema STATEL o il portale IntraSIM è necessario il cert. digitale e la firma CAdES (v. firma-cades.service.js).
28BOLLETTAZIONE v 2.2 — 9ª ondata (DDT / Spedizioni complete)

Il pacchetto BOLLETTAZIONE completo il ciclo DDT/Spedizioni con 13 feature di priorità ALTA + MEDIA. Vedere il manuale dedicato spedizioni-u.html per la documentazione completa. Di seguito un riepilogo delle feature che toccano il documento (DDT/fattura).

Impatti sul documento

  • Nuovi campi su documenti: resoTipo (RESO_CLIENTE | RESO_FORNITORE), resoDocumentoOrigineId, resoMotivazione, resoNotaCreditoId, fatturaAccompagnatoriaFlag
  • DDT di reso — endpoint POST /api/bollettazione/ddt-reso/:docOrigineId genera DDT con causale RESO_DA_CLIENTE / RESO_A_FORNITORE e opzionale NC TD04 collegata
  • Fattura accompagnatoria — flag su TD01 che incorpora i dati trasporto (alternativa a DDT + fattura differita TD24)
  • Magazzino auto — il DDT emesso triggera automaticamente i movimenti di magazzino con POST /api/bollettazione/magazzino-auto/ddt/:docId
  • Conto deposito/visione/lavorazione (art. 53 DPR 633/72) — workflow completo con data scadenza rientro, firma fornitore, stato APERTO → RIENTRATO → FATTURATO

Etichette, CMR, DAU, POD

Documentazione di supporto generata automaticamente per spedizioni: etichette PDF 10x15 con QR/Code128, CMR internazionale (Ginevra 1956), bolle doganali DAU (export extra-UE) con certificati origine EUR1/ATR, POD firma digitale con hash SHA-256 integrità.

Corrieri + tracking real-time

Adapter pattern per 6 provider (MOCK funzionante, DHL/SDA/GLS/BRT/TNT stub). Eventi tracking real-time con webhook pubblico per ricevere push dai corrieri integrati.

Tutti gli endpoint sono montati sotto /api/bollettazione/*. Vedere spedizioni-u.html per la documentazione completa dei 13 endpoint.
29UI/UX v2.2 — 10ª ondata (restyling form documento, 23 aprile 2026)

Restyling completo del form di modifica documento per migliorare leggibilità, uniformità e produttività dell'operatore. Nessun impatto funzionale: i dati, le validazioni e il flusso rimangono invariati.

Header documento (barra superiore)

  • Sfondo blu navy gradient #1a3a6e → #2a548e (prima era quasi nero #1a1a2e)
  • Etichetta "Nuovo/Modifica Documento": 14px → 18px, peso 800 (molto bold)
  • Numero documento (badge dorato): 13px → 18px, font Segoe UI sans-serif (invece del Courier monospace)
  • Stato documento (BOZZA / EMESSO / CONFERMATO / ...): badge + dropdown ingranditi a 15px con padding generoso e altezza 36px

Riga testata (Tipo Documento / Data / Serie / Sezionale)

  • Tutti e 4 i campi condividono lo stesso stile: label 12px weight 800, input 16px peso 500, altezza fissa 40px, font Segoe UI, colore #0f2349
  • Tipo Documento: cella flex: 0 1 240px (ridotta da 380px il 6 Maggio 2026 per non troncare il Sezionale).
  • Sezionale: dropdown che lista i sezionali attivi per il Tipo Documento e Anno scelti, con auto-selezione del default. Per ogni opzione mostra anteprima del prossimo numero (es. 5_2026F, 5/2026A). Su documenti già emessi compare il lucchetto 🔒 e il bottone «↺ Cambia» che apre un dialog modale per il cambio sezionale a posteriori (con motivazione e log audit). Vedi anche Tabelle Sezionali in Manuale Tabelle § 11.

Banner «Cosa vuoi fare adesso?» (compatto, 6 Maggio 2026)

Sopra il form documento, in modifica di un documento esistente con conversioni disponibili, appare un banner verde-azzurro con i pulsanti per il passo successivo del ciclo di vendita (es. PRV → ORD, ORD → DDT, DDT → FT, oppure Reso/Nota Credito, Emetti Acconto). Layout reso più compatto: pulsanti orizzontali con icona+label+codice in fila, altezza dimezzata per non rubare spazio al form.

Tab Scadenzario — hint dinamico spese banca/bolli

Nel tab Scadenzario, quando le rate generate hanno spese banca o bolli aggiunti dalla condizione di pagamento, NOX mostra un hint colorato per chiarire il trattamento fiscale:

  • 🏦 Hint azzurro — modalità «In scadenzario»: «Spese banca/bolli a carico del cliente in fase di incasso». Indica che le rate includono X € di spese che la banca addebiterà al cliente al momento dell'incasso (RIBA / SEPA / tratta). Non vanno in fattura: non sono ricavi e non rientrano nell'imponibile fatturato.
  • 📋 Hint ambra — modalità «In fattura»: «Spese incluse in fattura come riga automatica». NOX ha aggiunto automaticamente le righe Spese bancarie e/o Bolli su tratta al documento (aliquota 0%, natura N1 escluso art. 15 DPR 633/72).

Validazione importo scadenze: il banner di errore «Scadenzario disallineato: totale scadenze X € ≠ totale documento Y €» ora scorpora correttamente le spese banca/bolli dalla somma rate prima del confronto, evitando falsi allarmi quando la condizione di pagamento ha includeSpeseBanca/includeSpeseBolli attivi e modalità IN_SCADENZARIO.

Righe documento — colonne a larghezza fissa

Tutte le colonne della tabella righe ora hanno larghezza fissa preimpostata, eccetto la DESCRIZIONE che occupa lo spazio residuo (1fr). Le larghezze sono definite in documento.component.ts nel metodo righeGridColumns.

ColonnaLarghezzaNote
#28pxNumero riga
DESCRIZIONE1frRiempie lo spazio disponibile, va a capo se necessario
U.M.48pxUnità di misura (pz, kg, ...)
QTÀ64pxQuantità
PREZZO90pxPrezzo unitario
SC.%60pxSconto percentuale
IVA %52pxAliquota IVA
OMAG.48pxTipo omaggio (— / S/R / C/R)
IMPORTO150pxFissa per contenere 123.456.789,00 €
AZIONI62pxCatalogo + cestino

Altezze riga uniformi e stretch automatico

Tutte le celle della riga (descrizione, quantità, prezzo, importo, ecc.) hanno altezza minima uniforme 22px e line-height: 18px. La riga usa display: grid con align-items: stretch: quando la textarea descrizione va a capo, tutte le altre celle crescono di altezza in modo proporzionale mantenendo l'allineamento visivo.

Formato prezzo italiano sempre attivo

La colonna PREZZO mostra sempre il formato italiano 1.234,00 (punto migliaia + virgola decimale), anche durante l'editing al focus. La formattazione è ora implementata manualmente con regex /\B(?=(\d{3})+(?!\d))/g invece di toLocaleString('it-IT'), per evitare problemi di rendering del separatore migliaia su browser/runtime ICU.

// documento.component.ts
formatPrezzoIT(value: number | null | undefined): string {
  if (value == null || isNaN(value)) return '';
  const negativo = value < 0;
  const fixed = Math.abs(value).toFixed(2);
  const [intPart, decPart] = fixed.split('.');
  const withThousands = intPart.replace(/\B(?=(\d{3})+(?!\d))/g, '.');
  return (negativo ? '-' : '') + withThousands + ',' + decPart;
}

Tab (Pagamento, Trasporto, Magazzino, Scadenzario, ...)

In vista espansa le tab sono mostrate tutte in pagina sotto forma di accordion. Nuove funzionalità:

  • Priorità automatica: tab con dati all'inizio, tab vuote in fondo (ogni tab conserva comunque l'ordine custom dell'utente)
  • Auto-collapse: tab vuote vengono chiuse automaticamente al caricamento del documento
  • Indicatore ⚠️ su tab collassate con dati: quando una tab è chiusa ma contiene informazioni, viene evidenziata con sfondo arancione chiaro, bordo sinistro arancione (3px) e icona attenzione pulsante. Utile per capire subito quali sezioni "nascoste" hanno contenuto senza dover espandere tutto.
  • Totali sempre in fondo: il box dei totali (riga nera con imponibile/IVA/totale) usa order: 9999 in flex per essere sempre l'ultimo elemento del form, indipendentemente dall'ordine delle tab

Pulsanti "Configura vista" spostati

I pulsanti Configura vista modifica (tune) e Mostra tutte le sezioni (view_agenda/stream) sono stati spostati dalla barra tab alla riga del titolo SOGGETTO, allineati a destra. Liberano spazio nell'area principale e restano sempre visibili nell'intestazione.

Cella IMPORTO con bordi e background

La cella IMPORTO ora ha aspetto coerente con le altre celle di input: bordo 0.5px solid #ddd, border-radius: 3px, background #fafafa, padding 1px 8px, min-height 22px. L'allineamento del numero è a destra con font Courier monospace.

Colonne righe — ordine nel codice

Fonte di verità per le larghezze delle colonne: righeGridColumns in documento.component.ts. L'array colonneRigheDisponibili (stesso file) deve avere lo stesso ordine dei tag HTML delle celle, altrimenti i binari della CSS grid vengono assegnati a colonne sbagliate. Durante questa ondata è stato corretto un bug in cui importo precedeva omaggio nell'array ma nel template HTML era l'inverso.

Nessuna modifica ai dati o al DB. Solo CSS + pochi adjustments ai template HTML/TS. Tutti i cambiamenti sono reversibili via git. File principali toccati: documento.component.ts, documento.component.html, documento.component.css.
30Preferenze vista scoped per utente + workspace

Le preferenze di visualizzazione del modulo Documenti (Configura vista modifica e Mostra tutte le sezioni in pagina) sono ora memorizzate per combinazione utente + workspace, non più globalmente per browser.

Preferenze interessate e livelli di scoping

PreferenzaCosa salvaScoping
Vista espansaToggle "Mostra tutte le sezioni in pagina" (accordion)user + ws + tipo doc
Colonne righeQuali colonne (#, Descrizione, U.M., Qtà, ...) sono visibiliuser + ws + tipo doc
Ordine tabOrdine di priorità delle tabuser + ws + tipo doc
Template modificaConfigurazioni salvate dell'intero layout modifica documentouser + ws (globali)
Template listaConfigurazioni salvate della lista documenti (filtri + colonne + sort)user + ws (globali)

Scoping a 3 livelli

Le preferenze "per tipo" (colonne righe, vista espansa, ordine tab) usano una chiave a 4 segmenti, quelle globali (template) una chiave a 3 segmenti:

// Per tipo documento (specifico)
doc_colonneRighe__admin__af0e086a-21f2-4784__RIC      // Ricetta
doc_colonneRighe__admin__af0e086a-21f2-4784__TD01     // Fattura
doc_colonneRighe__admin__af0e086a-21f2-4784__DDT      // Documento di trasporto

// Globale user+ws (template)
doc_templateModifica__admin__af0e086a-21f2-4784

Caso d'uso tipico — Ricetta vs Fattura

Lo stesso utente, nello stesso ambiente, apre una Ricetta e nasconde Prezzo, QTÀ, IMPORTO (non rilevanti per prescrizioni mediche). Poi apre una Fattura: le stesse 3 colonne riappaiono automaticamente perché la preferenza è memorizzata per tipo documento.

Fallback in caso di nuovo tipo documento

Se l'utente apre un tipo documento per il quale non ha ancora configurato preferenze (prima apertura), il sistema applica la seguente strategia a cascata:

  1. Preferenza per tipo specifico (es. ...__RIC) → se esiste la usa.
  2. Altrimenti preferenza user+ws generica → fallback ragionevole.
  3. Altrimenti default di sistema (tutte colonne visibili, ordine tab standard).

Al primo salvataggio dopo aver modificato la configurazione su un tipo specifico, la nuova preferenza viene scritta con la chiave per-tipo, senza toccare il fallback generico.

Trigger di ricarica preferenze

Le preferenze per-tipo vengono ricaricate automaticamente in 2 momenti:

  • Quando l'utente apre un documento esistente (il tipo è letto dal DB e applicato)
  • Quando l'utente cambia il tipo documento nella select in alto al form (metodo onTipoDocumentoChange)

Migrazione soft delle preferenze esistenti

Al primo accesso dopo l'aggiornamento, la vecchia chiave non-scoped viene letta come fallback e automaticamente copiata nella nuova chiave user-scoped. Nessuna perdita di configurazione esistente. Le vecchie chiavi restano in localStorage (non vengono rimosse per non causare problemi se l'utente effettua un downgrade).

Le preferenze sono salvate in localStorage del browser: cambiando computer/browser le preferenze restano vuote (primo avvio). Per una sincronizzazione cross-device servirebbe un endpoint backend dedicato (non implementato in questa versione).

File modificati

  • src/app/auth/auth.service.ts: aggiunto metodo pubblico getCurrentUser()
  • src/app/pages/documenti/documento.component.ts: rimossa inizializzazione inline di 3 preferenze; aggiunti helper scopedKey(), readScopedLs(), writeScopedLs(); aggiunto metodo caricaPreferenzeVistaUtente() chiamato in ngOnInit
31Dropdown catalogo a 4 colonne per Ricetta

Quando l'utente digita nel campo descrizione di una riga documento mentre sta creando una Ricetta, il dropdown dei risultati del catalogo mostra un layout a 4 colonne incolonnate pensato appositamente per la prescrizione medica. Per gli altri tipi documento (Fattura, DDT, ecc.) il dropdown mantiene il layout precedente (codice + descrizione + produttore + posologia inline).

Colonne visualizzate (solo Ricetta)

ColonnaCampoStile
Descrizionev.descrizioneGrassetto colore principale
ProduttoreproduttoreOf(v) (cascata: dettaglioFarmaco.produttore → dettaglioArticolo.produttore → marca)Colore viola
Indicazioni terapeutichev.indicazioniCorsivo grigio scuro
Note prescrizionev.notePrescrizioneColore verde (tipografico)

Se un campo è vuoto, viene mostrato il placeholder .

Layout

  • Grid CSS a 4 colonne con larghezze proporzionali (descrizione 1.3fr, produttore 0.8fr, indicazioni 1.4fr, note 1.1fr).
  • Header sticky in cima al dropdown con i titoli delle 4 colonne.
  • Testi multi-riga: ogni cella può andare a capo su 2 righe (-webkit-line-clamp: 2), poi ellissi.
  • Larghezza minima dropdown: 680px per garantire leggibilità delle 4 colonne.

Attivazione

Il layout a 4 colonne si attiva automaticamente quando isRicetta è true (tipo documento con codice RIC). Per gli altri tipi il dropdown usa il layout inline tradizionale.

I campi Indicazioni terapeutiche e Note prescrizione vanno inseriti nel Catalogo sul singolo prodotto (scheda voce): finché non vengono popolati, in dropdown compare il placeholder "—". Per popolare in massa: manuale Catalogo.
32UX Soggetto in Documento — accesso rapido alla scheda

Dalla sezione superiore del form Documento (intestazione soggetto) l'utente ha adesso un accesso diretto alla scheda di modifica del soggetto selezionato, senza passaggi intermedi.

Tre modi per aprire la scheda

  • Click sul nome: il nome del soggetto è cliccabile e apre la modale di modifica.
  • Pulsantino «Scheda»: pill navy con icona assignment_ind accanto al nome — affordance immediata (l'utente riconosce il punto d'ingresso senza esplorare il flusso).
  • Icona matita: la tradizionale «edit» continua a funzionare (invariata).

Modale di modifica — miglioramenti

  • Pulsante «×» nell'header: chiusura dedicata della modale in alto a destra.
  • Header non scorre: in modale l'header sticky resta fissato in cima (top:0) invece di lasciare spazio alla topbar della pagina; i campi non scorrono più sotto l'header.
  • Autocomplete Luogo di Nascita robusto: la tendina filtrata dei comuni in position:fixed non viene più clippata dalla modale. Vedi soggetti-u.html §3.

Messaggio errore 409 Conflict leggibile

In precedenza, al salvataggio di un soggetto con codice fiscale già esistente, compariva il messaggio criptico «Http failure response for …: 409 Conflict». Adesso viene mostrato il messaggio parlante restituito dal backend (es. «CF <codice> già assegnato al soggetto <id>»).

Il pannellino read-only presente in versioni precedenti è stato rimosso: si va sempre direttamente alla modale di modifica. Tutti i dati del soggetto (anagrafica, fiscali, contatti, commerciali, clinici) sono disponibili e modificabili in un solo punto.
33Tasti rapidi personalizzabili (Alt+Shift+lettera) da Ctrl+K

È ora possibile assegnare scorciatoie di tastiera a qualsiasi voce del menu, direttamente dalla modale di ricerca globale Ctrl+K. Gli shortcut funzionano ovunque nel gestionale e sono cross-platform: Windows, Linux, macOS.

Come assegnare uno shortcut

  1. Premere Ctrl+K (ovunque).
  2. Digitare qualche carattere per trovare la voce menu desiderata.
  3. Fare click sull'icona tastiera (a destra della voce).
  4. Premere la lettera (A–Z) da associare e confermare con OK.
  5. La combinazione è salvata: lasciare vuoto per rimuoverla.

Come usare gli shortcut

  • Windows / Linux: Alt + Shift + <lettera>
  • macOS: ⌥ + ⇧ + <lettera> (Option + Shift + lettera)

Gli shortcut non si attivano quando l'utente sta scrivendo in un campo di testo (input, textarea, select, contenteditable): in questo modo non interferiscono con la digitazione.

Collisioni e rimozione

  • Collisione: se si assegna la stessa lettera a una seconda voce, il sistema chiede conferma prima di sovrascrivere.
  • Badge visivo: ogni voce di Ctrl+K con shortcut configurato mostra un badge blu con la combinazione corrente (es. ⌥⇧ D).
  • Rimozione: click sull'icona tastiera e inserire stringa vuota.
  • Persistenza: le assegnazioni sono salvate nel browser (localStorage), scoped sulla macchina/browser dell'utente. Un cambio di browser o una pulizia dei dati del sito richiede nuova configurazione.
Il footer della modale Ctrl+K ricorda dinamicamente la combinazione corretta in base al sistema operativo rilevato — nessuna confusione tra Mac e PC.
34Footer del form Documento — bottoni responsive

Quando si restringe manualmente la finestra del browser, i pulsanti del footer del form Documento (Salva/Aggiorna, modello stampa, Stampa, Anteprima, XML SDI, Email, Informativa, Fattura Diretta, Ricette, Spedizione, conversioni, Ricorrente, +30gg) si rimpiccioliscono progressivamente e poi vanno a capo invece di sovrapporsi.

Comportamento per dimensioni finestra

  • ≥ 1281 px: layout completo, bottoni a 34 px di altezza.
  • ≤ 1280 px: bottoni 32 px, padding e font ridotti, select del modello più compatta.
  • ≤ 1024 px: bottoni 30 px, icone 15 px, font 11 px.
  • ≤ 820 px: navigazione precedente/successivo a sinistra e gruppo destro su due righe a piena larghezza.
  • ≤ 480 px (mobile): pulsanti secondari (Stampa, Anteprima, Email, Informativa, ecc.) nascosti automaticamente, restano i principali (Salva, Ricette).
Il salva è sempre visibile, anche al minimo della larghezza. Le conversioni e le azioni accessorie vanno a capo prima di sovrapporsi.
35Formato monetario italiano 1.234,00 — allineamento globale

In alcuni runtime/browser i valori monetari del frontend e dei PDF stampati comparivano come 1234,00 (senza punto migliaia). Il formato corretto italiano è 1.234,00: punto come separatore migliaia, virgola come decimale.

Frontend

Allineate 16 funzioni di formattazione in tutta la suite: dettaglio Agente (Fatturato anno, Provvigioni maturate/liquidate, tabella mensile, tutte le tab), dashboard Contabilità/Magazzino/Spedizioni, archivio e dettaglio SDI, pipeline e archivio CRM, form Documento (riga catalogo) e form Soggetto (Fido massimo).

PDF stampati (backend)

Allineati i seguenti generatori PDF lato server:

  • Dichiarazione IVA annuale (quadri VE, VF, VJ, VL).
  • Modello Redditi (ricavi, costi, ammortamenti, plus/minus, reddito).
  • Report Fatture verso PA (split-payment).
  • Certificazione Unica (compensi, ritenute per percipienti).
  • Registro beni ammortizzabili (tabella + totali + frase finale).
I file F24 e l'XML FatturaPA per SDI mantengono apposta il formato AdE con punto decimale e senza separatore migliaia — non sono stati toccati.
36Modulo Note centrale — pagina /note

Oltre al pannello postit giallo embedded nelle schede (Documento, Soggetto, Catalogo, Distinta, Ordine produzione), è disponibile una pagina centralizzata per consultare e gestire tutte le note del workspace in un unico posto.

Come accedere

Sidebar → AMMINISTRAZIONE → Note. La voce è visibile a tutti i ruoli ADMIN+ (la sezione AMMINISTRAZIONE è già gated). Il SUPERADMIN può nasconderla per workspace specifici dal pannello "Permessi del Ruolo" (chiave note).

Cosa fa

  • Tabella ERP-style con badge colorato per ciascuna entità: Documento (blu), Soggetto (verde), Catalogo (giallo), Distinta base (viola), Ordine produzione (rosso), Generica (giallo postit).
  • Filtri: ricerca testo libero, entità, autore (username), range date dal-al.
  • Tab Cestino visibile solo a ADMIN/SUPERADMIN: lista delle note soft-deletate con bottone "Ripristina".
  • Click sulla riga → modale dettaglio con metadati (autore, data, ultimo aggiornamento), testo completo in box giallo postit + chip "Apri record" che porta al documento/soggetto/ordine collegato.
  • Modifica e cancella consentite solo a chi ha scritto la nota (o a ADMIN/SUPERADMIN).
  • Bottone "+ Nuova nota" apre una modale di creazione con select entità + ID record opzionale. Per note libere senza target lasciare entità "Generica".

Differenza pannello postit vs pagina Note

  • Pannello postit (giallo, drag, persistente): comodo durante il lavoro su un singolo record — le note rimangono in vista e non occupano la pagina principale.
  • Pagina Note centralizzata: utile per un'overview di tutto il lavoro annotato, ricerca cross-record (es. "tutte le note dove ho scritto consegna prevista"), gestione ADMIN del cestino.
Le note sono scoped per workspace: ogni utente vede solo le note del proprio workspace di lavoro. Il SUPERADMIN che cambia workspace dalla topbar vede automaticamente l'archivio dell'azienda corrente.
37

Promozione automatica BOZZA → EMESSO sulla stampa

Cliccando Stampa su un documento ancora in BOZZA, il sistema mostra una conferma:

Il documento è in BOZZA. Vuoi marcarlo come EMESSO prima di stampare? (assegna numero ufficiale e blocca ulteriori modifiche)
  • : il documento passa a EMESSO — numero ufficiale assegnato dal sezionale, provvigioni dell'agente maturate server-side, documento entra nel registro IVA e nel ciclo scadenze. La stampa parte subito dopo.
  • No: stampa la BOZZA così com'è (utile per anteprime cartacee senza impegnare il numero).
  • Se la promozione fallisce per permessi o stato non consentito, la stampa parte comunque.
Il prompt appare solo se il documento è in BOZZA. Documenti già EMESSO/CONFERMATO/INVIATO stampano direttamente.
38

Multischermo: aprire più pagine in finestre/schede separate

È possibile mantenere aperte più aree dell'applicazione contemporaneamente (es. Documenti aperto e Soggetti in un'altra scheda) usando i modificatori da tastiera mentre si seleziona una voce di menù:

CombinazioneEffetto
Ctrl + click (Windows/Linux) o Cmd + click (Mac)Apre la voce in una nuova scheda del browser
Shift + clickApre la voce in una nuova finestra del browser
Alt + click (Windows/Linux) o Option + click (Mac)Apre in una nuova scheda (alternativa a Ctrl)

Funziona su:

  • Voci della sidebar sinistra (Documenti, Soggetti, Magazzino, ecc.)
  • Voci della modale di ricerca rapida Ctrl+K (tutti i risultati)
  • Card della dashboard e link nei report
Le nuove schede ereditano automaticamente login e workspace correnti — non serve riautenticarsi. Cambiare workspace in una scheda non influisce sulle altre fino al prossimo refresh.
Modificare lo stesso documento in due schede diverse contemporaneamente è sconsigliato — vince l'ultimo salvataggio. Usa il multischermo per consultare in parallelo, non per editare in parallelo.
39

Selezione DDT per fattura riepilogativa — modale in primo piano + refresh

Quando crei una fattura riepilogativa TD24 dai DDT, si apre una modale "Seleziona DDT da raggruppare nella fattura riepilogativa" sopra la modale del documento. La modale è ora sempre in primo piano rispetto al documento sottostante.

  • Bottone "↻ Aggiorna" nell'header per ricaricare la lista DDT senza chiudere la modale (utile se nel frattempo sono stati creati nuovi DDT in un'altra scheda).
  • Lista filtrata escludendo i DDT già collegati a una fattura riepilogativa precedente e quelli ANNULLATO.
  • Modalità di aggregazione righe: Righe originali per DDT / Aggregate per articolo / Una riga per DDT / Totali per DDT.
40

"Ultimi clienti" sempre del workspace corrente

Aprendo il selettore Cliente in fase di nuovo documento, la sezione Ultimi clienti mostra le 10 anagrafiche selezionate più di recente. Da questa versione la lista è scoped per workspace: cambiando workspace dalla topbar non vedrai più clienti di altre aziende.

Il fix è retroattivo: al primo accesso post-aggiornamento, la vecchia lista globale viene cancellata automaticamente.

📊 Aggiornamenti

Stati documento — etichette per famiglia

La stessa chiave di stato viene mostrata con label diverse a seconda del tipo di documento, per togliere ambiguità tra "EMESSO" / "CONFERMATO" / "EVASO" / "FATTURATO":

Il dropdown del cambio stato è ora filtrato per tipo: una fattura non mostra "CONFERMATO", un preventivo non mostra "INVIATO" SDI.

Conversioni guidate — padre auto-evaso

Convertendo un documento (Preventivo→Ordine, Ordine→DDT, DDT→Fattura) il documento padre passa automaticamente a stato EVASO (o FATTURATO per i DDT) e il banner "Cosa vuoi fare adesso?" sparisce. Il figlio è ora collegato al padre tramite il campo documentoPadre: l'icona "documenti collegati" si popola correttamente in entrambe le direzioni.

"Fattura Diretta" da Ricetta — ora in BOZZA

Premendo "Fattura Diretta" da una RIC, la fattura nasce in BOZZA e la ricetta origine resta anch'essa in BOZZA. La numerazione progressiva ufficiale e la promozione a EMESSO avvengono al momento della stampa (prompt automatico "Vuoi marcarlo come EMESSO prima di stampare?"). Toast aggiornato: "Fattura creata in BOZZA (numero definitivo alla stampa)".

"Configura vista modifica" — impostazione del tipo documento

Le preferenze del pannello "Configura Vista" del form documento (colonne righe visibili, ordine tab, vista espansa, template salvati) sono ora associate al tipo documento e condivise con tutti gli utenti del workspace. Esempio: se imposti le colonne preferite per "Ricetta", la stessa configurazione si applica a tutte le ricette future per qualsiasi utente. Hint nel pannello: "Impostazioni del tipo documento — valgono per tutti gli utenti del workspace."

Modale "Sfoglia Catalogo" — allineamento a colonne

Il modale che si apre dal pulsante 📦 Sfoglia catalogo nelle righe documento mostra ora le voci incolonnate con layout fisso: icona | descrizione | posologia | produttore. L'allineamento verticale rimane corretto anche quando alcune voci non hanno indicazioni o produttore.

Banner "Voce non in catalogo"

Quando inserisci una voce nelle righe del documento scrivendo a mano (descrizione + prezzo) senza selezionarla dall'autocomplete catalogo, sopra l'header delle righe appare un banner gold:

Comportamento contestuale per Ricette (RIC): in una ricetta i prodotti spesso non hanno prezzo, quindi il banner appare anche se il prezzo è 0 o assente. Il tipo di voce di default è scelto in base al profilo attività:

Puoi sempre raffinire il tipo (es. da INTEGRATORE → OMEOPATICO/FITOTERAPICO/VITAMINA) dalla scheda Catalogo.

Il banner si nasconde automaticamente sui documenti definitivi (EMESSO, INVIATO, EVASO, FATTURATO, PAGATO, ARCHIVIATO).

Lavorazioni Parziali

Conversione parziale Ordine → DDT

Quando converti un ordine cliente in DDT, ora puoi spedire solo parte della merce ordinata. Click «Converti in DDT»: si apre un dialog con le righe e le quantità pre-impostate al residuo. Per spedire meno togli la spunta su una riga (resta sull'ordine) oppure inserisci nella colonna «Resta in ordine» la quantità che NON spedisci. La colonna verde «Va in DDT» mostra la quantità effettivamente trasferita.

Click «Crea DDT»: l'ordine passa a stato PARZIALE. Può essere riconvertito più volte fino a evasione completa (stato EVASO).

Visualizzazione ordini PARZIALI: banner ambra («X righe ancora da evadere»); per ogni riga già toccata l'input quantità mostra il residuo (sfondo arancio, read-only) e sotto la descrizione la scritta in rosso «Ordinato: 10 e evaso: 6».

Nel dialog di conversione c'è un toggle «Genera back-order per le quantità non spedite» (acceso di default): le quantità non spedite vengono tracciate in Magazzino > Back-Order.

Reso e Nota di Credito (TD04)

Pulsante rosso «Reso / Nota Credito» nel banner azioni di fatture/DDT/parcelle. Dialog con tutte le righe + checkbox «Rendi»: scegli quali rendere e inserisci motivazione obbligatoria. Click «Crea Nota di Credito» → TD04 in BOZZA con totali in negativo, collegata al documento padre.

Acconto TD02 + Saldo

Pulsante ambra «Emetti Acconto» nel banner azioni di preventivi e ordini. Dialog con tab Percentuale (10/20/30/50/70 con un click) o Importo libero; IVA pre-popolata e modificabile. Crea TD02 in BOZZA con riga «Acconto X% su PRV ###/anno». Quando emetti la fattura finale TD01 puoi legare gli acconti già emessi e l'importo viene detratto.

Fatturazione differita TD24

Voce sidebar Vendite > Fattura Differita TD24: pagina dedicata per raggruppare in un'unica fattura mensile più DDT dello stesso cliente. Cerchi il cliente, imposti data limite (default fine mese), vedi i DDT non fatturati già pre-selezionati, deselezioni eventuali esclusi e generi la TD24. I DDT inclusi vengono marcati come fatturati.

!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). Sanzione: 90% IVA, minimo 500 € (riducibile a 250 € con ravvedimento).

NOX ti avvisa in 3 punti:

  • Dashboard: banner rosso critico nelle notifiche se ci sono fatture fuori termine; cliccando si va in /sdi filtrato.
  • Pagina /sdi: banner riepilogo in cima a 3 livelli (rosso scaduti, arancione ≤2gg, giallo ≤5gg).
  • Righe tabella: badge inline pulsante con giorni rimanenti/ritardo per ogni fattura DA_INVIARE.

Soglie: 🚨 SCADUTO (> 12gg) · ⚠️ Imminente (≤ 2gg) · ⏳ Attenzione (≤ 5gg).