Magazzino
Giacenze, movimenti, lotti FIFO/FEFO, alert scorte, inventario fisico, analisi ABC e riordino
Riferimenti normativi
- DPR 441/97 — Presunzione di cessione e acquisto: I beni nei locali dell'impresa si presumono acquistati, prodotti o ceduti. Il registro carico/scarico documenta la movimentazione e giustifica le giacenze.
- Art. 2214 Codice Civile — Scritture contabili obbligatorie: L'imprenditore deve tenere le scritture richieste dalla natura dell'impresa, incluso il registro di magazzino.
- Art. 2217 Codice Civile — Inventario: L'inventario deve essere redatto ogni anno con indicazione e valutazione delle rimanenze di magazzino.
- Art. 92 TUIR (DPR 917/86) — Valutazione rimanenze: Metodi ammessi: costo specifico, FIFO, LIFO o costo medio ponderato. Il sistema supporta tutti e tre nella dashboard.
- OIC 13 — Rimanenze: Valutazione al minore tra costo di acquisto/produzione e valore di realizzo desumibile dal mercato.
- DPR 633/72 art. 53 — Beni in deposito: Per beni in conto lavorazione, deposito o visione va tenuto registro apposito.
- D.Lgs. 193/2007 — Tracciabilità alimentare e farmaceutica: Obbligo di tracciabilità del lotto per prodotti alimentari e farmaceutici.
- Reg. UE 178/2002 art. 18 — General Food Law: Tracciabilità in tutte le fasi di produzione, trasformazione e distribuzione.
- D.Lgs. 219/2006 — Codice dei medicinali: Gestione lotti con data scadenza obbligatoria. FEFO garantisce dispensazione corretta.
Note operative e permessi configurabili
🗒️ Pannello Note: ogni scheda di movimento di magazzino, magazzino o ubicazione 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 dal Registro modifiche, in Aziende & Licenze).
🔒 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 Aziende & Licenze » Permessi (solo SUPERADMIN).
Il modulo Magazzino gestisce l'intero ciclo delle scorte. L'header mostra 4 KPI chip (articoli, valore stock, sotto scorta, in esaurimento), selettore magazzino, ricerca e scanner barcode.
10 Tab
| Tab | Contenuto |
|---|---|
| Giacenze | Quantità per articolo: totale, disponibile, riservata, scorta min, costo medio, valore |
| Movimenti | Registro cronologico carico/scarico con 12 tipi |
| Lotti | Lotti con quantità residua, scadenza, fornitore |
| Alert | Sotto scorta + lotti in scadenza 30gg |
| Dashboard | KPI avanzati, valorizzazione FIFO/LIFO/Costo Medio, top 10 |
| ABC | Classificazione Pareto: A (80%), B (95%), C |
| Rotazione | Indice rotazione, copertura gg, stato (obsoleto/lento/normale/veloce) |
| Riordino | ROP automatico, quantità da ordinare |
| Trasferimenti | Movimenti tra magazzini |
| Storico Prezzi | Cronologia costi unitari per articolo |
Il sistema supporta più magazzini indipendenti. Il selettore nell'header permette di cambiare.
- Premere “Gestione Magazzini” nel footer.
- Dialog con elenco magazzini. Compilare: codice, nome, tipo, indirizzo, CAP, provincia. Flag Default per il principale.
- Modificare: clic su un magazzino, editare, salvare. Eliminare: solo se vuoto.
| Colonna | Descrizione |
|---|---|
| Codice / Descrizione | Articolo dal catalogo |
| Tipo | Farmaco, Integratore, Articolo, ecc. |
| Quantità | Giacenza totale |
| Disponibile | Totale − riservata |
| Riservata | Impegnata in documenti non spediti |
| U.M. | Unità di misura |
| Ubicazione | Corridoio-Scaffale-Ripiano-Cella |
| Scorta min. | Soglia alert sotto scorta |
| Costo medio / Valore | Costo medio ponderato × giacenza |
| Stato | OK (verde), Sotto scorta (rosso), In esaurimento (arancione) |
Filtri: ricerca testo, ubicazione, tipo voce, paginazione 50/pagina. Azioni riga: scheda catalogo, soglie, etichetta.
Registro cronologico. Colonne: data, tipo, articolo, segno (+/−), quantità, costo unit., valore, lotto, ubicazione, documento, giacenza post.
12 tipi di movimento
| Tipo | Segno | Descrizione |
|---|---|---|
| CARICO_ACQUISTO | + | Merce da fornitore |
| CARICO_RESO | + | Reso da cliente |
| CARICO_PRODUZIONE | + | Prodotto finito interno |
| CARICO_TRASFERIMENTO | + | Da altro magazzino |
| SCARICO_VENDITA | − | Vendita/consegna |
| SCARICO_RESO | − | Reso a fornitore |
| SCARICO_TRASFERIMENTO | − | Verso altro magazzino |
| SCARICO_CONSUMO | − | Consumo interno |
| RETTIFICA_POSITIVA | + | Correzione manuale + |
| RETTIFICA_NEGATIVA | − | Correzione manuale − |
| INVENTARIO | ± | Da inventario fisico |
| STORNO | + | Annullamento scarico |
Un carico con un numero di lotto nuovo crea il lotto nel magazzino del movimento: così lo trovano anche le funzioni che cercano i lotti per magazzino, come il conto lavoro.
Filtri: tipo, data dal/al, ricerca per codice o descrizione dell'articolo, causale o numero lotto, paginazione. Con un magazzino scelto nel selettore in alto l'elenco mostra solo i suoi movimenti; per un trasferimento contano sia il magazzino di partenza sia quello di arrivo. Solo movimenti manuali eliminabili.
- Premere “+ Movimento” nel footer → dialog modale.
- Selezionare tipo (12 opzioni).
- Cercare articolo da catalogo (autocomplete).
- Selezionare ubicazione (opzionale).
- Inserire quantità e costo unitario.
- Opzionale: numero lotto, data scadenza, data, note.
- Premere Salva.
Abbigliamento: il carico a griglia
Per un capo con taglie e colori caricare una riga per volta è lento e si sbaglia. Da Taglie e colori → Carico merce si scrivono i pezzi nelle caselle come sulla bolla del fornitore: ogni casella diventa un movimento di carico identico a quello creato qui, con gli stessi controlli su periodo IVA, lotti e scadenze. Le quantità si possono anche distribuire da sole su una curva taglie.
Colonne: articolo, lotto, qta iniziale, qta residua, U.M., scadenza, giorni alla scadenza (rosso <30, arancione <90), data ricevimento, fornitore.
Filtro “Solo in scadenza”: mostra solo lotti che scadono entro 30 giorni.
Alla conferma documento, scarico automatico:
| Metodo | Criterio | Uso |
|---|---|---|
| FEFO | First Expired, First Out — prima lotti con scadenza vicina | Farmaci, integratori, alimenti |
| FIFO | First In, First Out — prima lotti ricevuti prima | Articoli senza scadenza |
Split lotti: se un lotto non copre la quantità, lo scarico si distribuisce su più lotti. All'annullamento i movimenti vengono stornati e le quantità ripristinate.
Valorizzazione dello scarico: con FIFO/LIFO il costo dello scarico proviene dai lotti prelevati. Per articoli gestiti senza lotti, la quantità non coperta viene valorizzata col costo medio (CMP) della giacenza, così il movimento riporta sempre un costo coerente con il valore di magazzino.
Due sezioni: Sotto scorta minima (card per articolo con giacenza, scorta min, deficit) e Lotti in scadenza 30gg (card con lotto, quantità, scadenza, giorni).
KPI: valore stock, articoli totali, sotto scorta, rotazione media. Metodo valorizzazione (art. 92 TUIR):
| Metodo | Formula | Normativa |
|---|---|---|
| Costo Medio | (costo acquisti + rimanenze) / quantità totale | Art. 92 c.1 TUIR, OIC 13 |
| FIFO | Rimanenze valutate al costo ultimi acquisti | Art. 92 c.2 TUIR |
| LIFO | Rimanenze valutate al costo primi acquisti | Art. 92 c.2 TUIR |
Sotto i KPI: tabella categorie e top 10 articoli per valore stock.
Il valore lo calcola il server
Scegliendo il metodo e premendo Ricalcolo, il valore del magazzino viene ricalcolato dagli strati di carico: ogni carico è uno strato con la sua quantità e il suo costo, e il metodo decide da quali strati si prende. Cambiando metodo i numeri cambiano davvero, e il totale resta quello scelto fino al ricalcolo successivo.
| Metodo | Da quali strati prende |
|---|---|
| FIFO | I carichi più recenti: quello che resta in magazzino è l'ultimo entrato. |
| LIFO | I carichi più vecchi: quello che resta è il primo entrato. |
| Costo medio | La media pesata di tutti i carichi. |
I riquadri degli alert portano dove si rimedia
I riquadri in cima (sotto scorta, scaduti, in scadenza) si premono: ognuno apre l'elenco già filtrato su quel problema, invece di lasciare il numero lì a guardare.
Classificazione Pareto:
| Classe | % Valore | Gestione |
|---|---|---|
| A | 0–80% | Monitoraggio stretto, riordino frequente, scorte di sicurezza |
| B | 80–95% | Monitoraggio periodico, riordino a soglia |
| C | 95–100% | Gestione semplificata, ordini meno frequenti |
Colonne: articolo, giacenza, mov/mese, indice rotazione, giorni copertura (giacenza / consumo medio), stato:
| Stato | Indice | Significato |
|---|---|---|
| OBSOLETO | < 1 | Meno di 1 scarico/anno — capitale immobilizzato |
| LENTO | 1–3 | Bassa rotazione, valutare promozioni |
| NORMALE | 3–10 | Rotazione nella norma |
| VELOCE | > 10 | Alta rotazione, garantire scorte |
Formula: ROP = (consumo medio giornaliero × lead time) + scorta di sicurezza
Colonne: giacenza, scorta min, consumo medio, lead time, ROP, da ordinare (ROP − giacenza). Articoli con “da ordinare” positivo richiedono riapprovvigionamento.
- Aprire dialog Trasferimento.
- Selezionare magazzino origine e destinazione.
- Selezionare articolo e quantità.
- Salva: genera SCARICO_TRASFERIMENTO nell'origine e CARICO_TRASFERIMENTO nella destinazione.
Quando un documento di vendita o acquisto non indica il magazzino, il movimento va sul magazzino predefinito (o sull'unico che c'è): così i movimenti di ogni magazzino tornano con la sua giacenza.
Struttura a 4 livelli: Corridoio — Scaffale — Ripiano — Cella + barcode opzionale. Premere “Nuova Ubicazione” nel footer per crearne una.
Cronologia costi unitari alimentata dai movimenti di carico. Colonne: data, articolo, tipo, costo unit., quantità, fornitore. Utile per monitorare l'andamento prezzi e negoziare.
Scanner: campo barcode nell'header per ricerca rapida EAN. Etichette: singola (icona nella riga giacenze) o batch (checkbox + “Stampa etichette” nel footer). Include: codice, descrizione, barcode, prezzo, ubicazione.
Creare un inventario
- Premere “+ Nuovo Inventario”.
- Descrizione (opzionale), magazzino (vuoto = tutti) e scaffale (vuoto = tutto il magazzino).
- Crea: genera l'elenco con la giacenza teorica, una riga per articolo e per posto (magazzino e scaffale): la colonna «Dove» dice quale.
Abbigliamento: contare a griglia
Con taglie e colori l'elenco è il modo peggiore di contare: quindici righe uguali tranne due parole, e se ne salta una senza accorgersene. Da Taglie e colori → Inventario lo stesso inventario si vede a matrice: in ogni casella la giacenza attesa, il campo dove scrivere il contato e la differenza col segno. Le combinazioni che non erano a giacenza quando l'inventario è nato sono segnate fuori inventario, non mostrate a zero.
La chiusura resta qui, in questa pagina: applica le rettifiche a tutto quello che è stato contato, non al solo capo che si stava guardando.
Conteggio
- Aprire l'inventario (stato IN_CORSO).
- Per ogni articolo inserire quantità contata.
- Differenza: +N (verde surplus), −N (rosso ammanco), 0 (grigio ok). Si misura nel momento in cui scrivi la conta, sulla giacenza di quel posto in quel momento — non sulla foto d'apertura: se fra l'apertura e la conta sono usciti tre pezzi, e tu conti quello che vedi, la differenza è zero.
- KPI: contati/totale, righe con differenze.
Mentre l'inventario è aperto si può continuare a vendere e caricare: quello che si muove dopo la conta di una riga resta, alla chiusura. Lo Scan inventario dal telefono, su un posto coperto da un inventario aperto, scrive la conta nell'inventario invece di muovere merce.
Filtri
Solo non contati (toggle), ricerca per codice/descrizione.
Chiusura
- Premere “Chiudi e applica rettifiche”.
- Per ogni riga contata con differenza ≠ 0 il programma scrive una rettifica (carico o scarico di rettifica) sul posto della riga, sommando la differenza misurata alla conta alla giacenza di adesso.
- Ogni rettifica è valorizzata al costo (costo medio dell'articolo, o prezzo d'acquisto; mai il prezzo di vendita) e porta la causale «Rettifica inventario» col codice dell'inventario e la sua riga. Stato → COMPLETATO.
Aggiornamento strutturale del modulo Magazzino. Le novità sono pensate nel rispetto della natura contabile dei movimenti: i movimenti di magazzino sono cronologia e non si cancellano — si stornano. Il soft-delete e applicato solo alle anagrafiche (magazzini, ubicazioni), non alle registrazioni.
Storno dei movimenti (pattern contabilmente corretto)
Nel tab Movimenti, selezionando una o piu righe con le checkbox, compare una barra blu con le azioni di gruppo:
- ↵ Storna: crea, per ogni movimento selezionato, un movimento di rettifica di segno opposto (CARICO_RETTIFICA per uno scarico, SCARICO_RETTIFICA per un carico). Il movimento originale rimane tracciato. Questo e il modo corretto per correggere un errore senza perdere lo storico. Se un movimento e gia stato stornato, viene bloccato.
- 🗑 Elimina manuali: cancella fisicamente i movimenti selezionati che non hanno documento collegato (bolla, ordine, fattura, documento). I movimenti generati da documenti vengono ignorati e riportati come bloccati nella risposta. La giacenza viene riallineata automaticamente.
Entrambe le azioni registrano un'entry nell'audit log del movimento.
Audit log dei movimenti
Ogni modifica o cancellazione di un movimento (manuale o automatica) viene registrata nella tabella log_modifiche_movimenti_magazzino con campo modificato, valore precedente, valore nuovo, utente e timestamp. Lo storico e accessibile via GET /api/magazzino/movimenti/:id/audit-log.
Audit log degli inventari
La chiusura di un inventario fisico (transizione IN_CORSO → COMPLETATO) viene registrata nella tabella log_modifiche_inventari con utente e data. Accesso via GET /api/magazzino/inventari/:id/audit-log.
Timeline voce magazzino
Nuovo endpoint GET /api/magazzino/voce/:id/timeline che aggrega in ordine cronologico decrescente: movimenti (con flag di storno), righe inventario (conteggiate e non) con giacenza attesa/contata/differenza. Utile per ricostruire la storia di un articolo dal punto di vista del magazzino.
Soft-delete + Cestino su Magazzini e Ubicazioni
Le anagrafiche (depositi e scaffali) sono ora soft-deletabili:
- DELETE marca i campi
cancellatoIlecancellatoDa, disattiva automaticamente il record e lo rimuove dalla lista standard. Giacenze e movimenti storici restano intatti. - Lista cancellati via
GET /api/magazzino/magazzini/_/cestinoeGET /api/magazzino/ubicazioni/_/cestino(con counters di giacenze/movimenti collegati). - Ripristino via
POST /api/magazzino/magazzini/:id/ripristinaePOST /api/magazzino/ubicazioni/:id/ripristina. - Eliminazione definitiva via
DELETE /api/magazzino/{tipo}/:id/definitivo: hard delete consentito solo se il record e gia soft-deletato e non ha giacenze ne movimenti collegati.
Perche NON c'e il cestino per movimenti, giacenze e inventari
- Movimenti: sono cronologia contabile. La correzione corretta e lo storno, non la cancellazione logica.
- Giacenze: sono snapshot calcolati (voce × ubicazione). Non ha senso “cancellarle”: si svuotano azzerando i movimenti.
- Inventari: hanno gia un proprio lifecycle IN_CORSO / COMPLETATO / ANNULLATO. Lo stato ANNULLATO e il meccanismo corretto.
Quando emetti una fattura e scarichi merce dal magazzino, il gestionale deve decidere a che costo registrare quello scarico. I tre metodi riconosciuti fiscalmente sono CMP (Costo Medio Ponderato), FIFO (primo entrato, primo uscito) e LIFO (ultimo entrato, primo uscito).
Dove si imposta
- Apri Amministrazione → Parametri
- Scorri fino alla sezione “📦 Valorizzazione magazzino”
- Scegli il metodo dal menu a tendina:
- CMP — il più comune per PMI. Media ponderata tra tutte le giacenze
- FIFO — tipico per prodotti con obsolescenza (elettronica, alimentare non deperibile)
- LIFO — usato con prezzi in crescita per “caricare” i costi recenti (risparmio fiscale immediato ma magazzino sottovalorizzato)
- Salva. Il cambio del metodo impatta solo i nuovi scarichi; i movimenti già registrati restano invariati.
Override per singolo prodotto
Nella scheda di un prodotto in Catalogo, se vuoi che quel singolo articolo usi un metodo diverso dal default aziendale, c'è un campo “Metodo valorizzazione” personalizzato. Lasciare vuoto per ereditare la scelta aziendale.
Simulazione rapida
Se prima di confermare una vendita vuoi vedere quanto ti costa con i 3 metodi, nella pagina Giacenze Magazzino → tab Lotti trovi per ogni articolo il costo/pz e il valore residuo. Così decidi se vendere questo o quello a parità di tipo prodotto.
Il tab “🏷 Lotti” della pagina Giacenze Magazzino è stato potenziato per mostrare in un colpo d'occhio quanto hai in magazzino come valore, non solo come quantità.
Cosa vedi
- Filtro ricerca testuale per codice articolo, descrizione o numero lotto
- Toggle “Solo lotti in scadenza (30gg)”
- Colonne: N° lotto, Q.tà iniziale, Q.tà residua, U.M., Costo/pz, Valore residuo, Data scadenza, Giorni rimanenti, Data ricevimento, Fornitore
- Riga colorata:
- rosso = lotto scaduto
- giallo = scade entro 30 giorni
- bianco = tutto ok
KPI in alto
Nella barra filtri vedi due numeri aggregati:
- Lotti attivi: quanti lotti sono attualmente in magazzino
- Valore residuo: quanto valgono complessivamente (Q.tà residua × costo unitario)
Quando filtri per articolo o per scadenze, i KPI si aggiornano. Utile per calcolare al volo quanto ti costerebbe uno smaltimento di merce scaduta.
Il gestionale ti segnala proattivamente i lotti scaduti o in scadenza, senza bisogno che vai a controllare manualmente.
Dove compare l'alert
Nella Dashboard, tra le schede statistica colorate, trovi una card dedicata “Lotti in scadenza” che compare solo se hai almeno uno scaduto/critico/warning:
- Rosso — ci sono lotti già scaduti: URGENTE, rischio sanitario/fiscale
- Arancio — ci sono lotti critici (scadono entro 7 giorni)
- Neutro — solo warning (scadenza fra 8-30 giorni)
Al centro della card vedi il numero (scaduti + critici) e il valore a rischio in euro. Un click ti porta direttamente al tab Lotti filtrato sui lotti interessati.
Email automatica giornaliera
Ogni mattina alle 07:00 il sistema invia una mail riepilogativa a tutti gli admin aziendali con gli alert del giorno. Se non hai configurato l'SMTP aziendale, l'alert resta comunque visibile in dashboard.
Disponibilità reale (ATP — Available To Promise)
La colonna Riservata delle giacenze è collegata agli ordini cliente aperti: la quantità ordinata e non ancora evasa impegna la merce, e il Disponibile diventa quello vero (fisica − impegnata). Nella tab Giacenze:
- Il pulsante ↻ Ricalcola impegni riallinea la colonna Riservata con gli ordini aperti. L'allineamento avviene comunque in automatico quando si crea/modifica un ordine o lo si evade in DDT.
- Il pulsante 📊 su ogni riga apre la scheda Disponibilità reale: quantità fisica, impegnata dagli ordini cliente, in arrivo dagli ordini fornitore, disponibile e disponibile-con-arrivi, con l'elenco degli ordini aperti che impegnano o portano merce.
È la risposta alla domanda “posso prometterla a un altro cliente?” — guardando il disponibile vero, non la giacenza fisica.
Scarico FEFO (First Expired, First Out)
Per gli articoli gestiti a lotti con scadenza, il pulsante ⌛ sulla riga di giacenza apre lo Scarico FEFO: indichi la quantità e il sistema propone il piano di prelievo — esce prima il lotto che scade prima (a parità, il più vecchio); i lotti senza scadenza per ultimi; i lotti bloccati/in quarantena non escono mai.
- Se un lotto non basta, il piano è multi-lotto: viene creato un movimento per ogni lotto, col costo del lotto.
- Se i lotti non coprono tutta la quantità, la parte scoperta viene scaricata senza lotto solo se lo confermi esplicitamente.
- I residui dei lotti e la giacenza vengono aggiornati in modo atomico: niente over-vendita nemmeno con più operatori contemporanei.
La pagina Magazzino → Strumenti di magazzino raccoglie le funzioni per chi ha più magazzini o deve giustificare ogni correzione. A sinistra c'è l'elenco delle sezioni; il pulsante ? in alto apre la spiegazione della sezione aperta, e Ricarica rilegge i dati. Ecco cosa succede davvero quando le usi.
Le sezioni: Causali rettifica · Approvazioni rettifiche · Allegati movimenti · Giacenza retrospettiva · Valutazione FIFO/LIFO/CMP · Seriali prodotto · RMA pratiche · MRP — Riordino auto · Import CSV movimenti · Listini multi-magazzino · Trasferimenti · Regole approvazione · DDT ↔ RMA.
Causali rettifica
La causale dice perché la merce entra o esce senza un documento: danneggiata, scaduta, rubata, trovata in più all'inventario… Qui vedi le causali attive e ne crei di nuove.
- Premi Nuova causale.
- Scrivi il Codice e la Descrizione: servono tutti e due. NOX scrive il codice in maiuscolo, e due causali non possono avere lo stesso codice.
- Scegli il Tipo: Scarico (la merce esce) o Carico (la merce entra).
- Se vuoi, scrivi la Soglia approvazione €: da quel valore in su la rettifica aspetta un amministratore (o chi dice una regola). Vuota vuol dire «mai».
- Spunta Richiede foto se la rettifica non deve muovere la merce finché non c'è la foto, e Richiede motivazione se chi rettifica deve scrivere perché (almeno 3 caratteri). La motivazione parte già spuntata.
- Premi Salva.
- Creare una causale è dell'amministratore.
- Le aziende nuove partono con quattordici causali standard, per esempio DANNEGGIATO, FURTO, SCADUTO, OMAGGIO, SOTTOINVENTARIO.
- Da questa pagina una causale non si modifica e non si disattiva.
- Il pulsante Fai una rettifica porta alla sezione Approvazioni rettifiche, dove le rettifiche con causale si registrano.
Rettifiche con approvazione
Ogni rettifica con causale ha un valore: quantità × costo unitario. Il costo è quello scritto nella rettifica; se lo lasci vuoto NOX usa il costo dell'articolo, nell'ordine: il costo medio nel magazzino della rettifica, il costo medio su tutti i magazzini, il costo dell'ultimo carico con un prezzo, il prezzo d'acquisto della scheda articolo. Dopo il salvataggio NOX dice quale ha usato. Solo se l'articolo non ha nessuno di questi il valore è zero.
- Sotto la soglia della causale, e senza una regola di approvazione che la riguardi, la rettifica è approvata subito e la giacenza cambia.
- Sopra la soglia, oppure quando una regola attiva la riguarda (anche sotto la soglia), la rettifica resta in attesa di approvazione: la giacenza non si muove finché qualcuno non la approva. Chi approva vede anche il giustificativo allegato (una foto, un verbale), che poi passa al movimento.
- Chi approva: se la rettifica è ferma per una regola, chi ha il ruolo della regola o uno superiore (Utente < Operatore < Amministratore < Super amministratore); se è ferma solo per la soglia della causale, l'amministratore. In più serve il permesso di registrare movimenti di magazzino, e chi non è amministratore non decide una rettifica chiesta da lui. Il ruolo resta quello del momento in cui la rettifica è stata chiesta, anche se poi la regola cambia.
- Se la causale ha la spunta Richiede foto, la foto è davvero obbligatoria. Sotto la soglia la rettifica resta in attesa della foto e la giacenza cambia appena la foto viene caricata; sopra la soglia non si può approvare finché la foto non c'è. Una rettifica in attesa della foto si può anche rifiutare.
- Se al momento dell'approvazione la merce da scaricare non c'è più, il movimento non nasce e NOX dice perché. Una rettifica rifiutata non tocca la giacenza.
Approvazioni rettifiche
Qui si registrano le rettifiche con causale e si decidono quelle in attesa.
- Premi Nuova rettifica.
- Scegli la Causale (dice anche se la merce entra o esce), l'Articolo e il Magazzino (con un solo magazzino è già quello).
- Scrivi la Quantità, sempre positiva: il segno lo dà la causale. Se vuoi, il Costo unitario (vuoto = costo dell'articolo) e il Lotto, se l'articolo lo chiede.
- Scrivi la Motivazione (obbligatoria se la causale la chiede) e, se vuoi, le note.
- Con Foto o documento puoi allegare subito il giustificativo. Se la causale vuole la foto e non la alleghi, la pagina te lo ricorda.
- Premi Registra la rettifica. NOX dice il numero, il valore e com'è andata: registrata (la giacenza è cambiata), in attesa della foto, o in attesa di approvazione con il motivo e il ruolo che la decide.
- Registrare una rettifica chiede il permesso di registrare movimenti di magazzino.
- La tabella In attesa di approvazione o di foto mostra, dalla più recente, articolo, magazzino, quantità, valore, causale, motivazione, quanti allegati ha, chi l'ha chiesta e Decide: il ruolo minimo che la può approvare e, se c'è, la regola. La colonna N. è il numero della richiesta: il movimento non esiste ancora.
- 📷 Carica foto (su ogni riga): allega la foto o un documento alla rettifica. Se la rettifica aspettava la foto, il movimento nasce subito e la giacenza cambia.
- ✓ Approva: nasce il movimento e la giacenza cambia. ✗ Rifiuta: NOX chiede il motivo, che è obbligatorio; la giacenza non cambia. I due pulsanti compaiono solo a chi può decidere quella rettifica; gli altri leggono «non tua».
- Una rettifica che aspetta la foto non si approva: si carica la foto, oppure si rifiuta.
- Decise negli ultimi 90 giorni: le ultime 50 rettifiche approvate o rifiutate, con chi ha deciso, quando e il motivo del rifiuto. Quelle approvate da sole al momento della richiesta, perché sotto soglia, qui non compaiono.
- I giustificativi delle rettifiche si scaricano dalla sezione Allegati movimenti.
Allegati movimenti
Qui alleghi a un movimento di magazzino i suoi giustificativi (la foto della merce rotta, un verbale, un certificato di distruzione) e li ritrovi tutti, i più recenti in cima (fino a 500).
- Nel riquadro 1. Scegli il movimento la pagina mostra gli ultimi 50 movimenti. Per trovarne un altro scrivi il codice o il nome dell'articolo, la causale, il lotto o il numero del movimento e premi Cerca.
- Clicca la riga del movimento: diventa blu e compare sotto, in 2. Carica il file.
- Scegli Foto o Documento, premi Carica allegato e scegli il file (fino a 15 MB).
- Il file va solo su un movimento scelto dall'elenco, e NOX controlla che sia davvero un movimento. Una rettifica ancora in attesa non è un movimento: la sua foto si carica da Approvazioni rettifiche.
- Il file resta sul server in una cartella riservata, con la sua impronta (SHA-256). Allegarlo non cambia né il movimento né la giacenza.
- Il pulsante ⬇ scarica il file con il suo nome originale.
- Il cestino 🗑 toglie l'allegato e cancella il file: è dell'amministratore. Non si toglie l'unica foto di una rettifica la cui causale chiede la foto: è il giustificativo su cui la rettifica è stata registrata.
- Un allegato di una rettifica ancora in attesa compare come «rettifica n. N (in attesa)»; quando la rettifica viene approvata passa al suo movimento.
- Caricare un allegato chiede il permesso di registrare movimenti di magazzino; scaricarlo basta poter aprire la pagina.
Giacenza retrospettiva
Dice quanta merce c'era a una data passata, articolo per articolo e magazzino per magazzino.
- Scegli la Data (parte da oggi).
- Se vuoi, scegli una sola Voce; altrimenti lascia Tutte.
- Premi Calcola.
- Sopra la tabella un riquadro verde dice quante righe articolo/magazzino ci sono a quella data e il valore stimato totale.
- NOX somma i movimenti fino al giorno scelto, compreso: i carichi (acquisti, carichi iniziali, resi da cliente, rettifiche in aumento, produzione, arrivi da trasferimento, inventario) in più, tutti gli altri in meno.
- Conta solo i movimenti. Una rettifica ancora in attesa di approvazione non c'è, e nemmeno la merce messa in giacenza senza un movimento.
- Gli articoli a zero in quella data non compaiono.
- Il Costo medio è la media semplice dei costi dei carichi fino a quella data, non pesata sulle quantità; il Valore è quantità × quel costo. È una stima, non il valore del magazzino con un metodo fiscale: per quello c'è la Valutazione.
Valutazione FIFO / LIFO / CMP
Risponde alla domanda: la merce che c'è oggi a scaffale, quanto vale? Per ogni articolo dà la quantità, il costo unitario e il valore, con il metodo che scegli.
- Scegli il Metodo: FIFO, LIFO o CMP (costo medio).
- Se vuoi, scegli una sola Voce; altrimenti lascia Tutte.
- Premi Calcola.
- Lo stesso conto della linguetta Dashboard di Movimenti & Giacenze e delle Rimanenze di fine anno: con lo stesso metodo i tre numeri coincidono (le Rimanenze guardano al 31/12, qui si guarda a oggi).
- A che data: sempre a oggi. La quantità è la giacenza di adesso, sommata su tutti i magazzini.
- Quali articoli: quelli con giacenza maggiore di zero, dal valore più alto; con una Voce scelta, solo quella.
- Quale metodo: quello della tendina, uguale per tutti gli articoli. Se è diverso dal metodo con cui l'azienda scarica (Parametri), il riquadro verde lo dice.
- Il riquadro verde dà il metodo, quanti articoli e il valore totale; quello ambra, se c'è, dice quanti articoli non sono valorizzati del tutto col metodo scelto.
- La tabella è solo un conto: non cambia giacenze, costi o contabilità.
| Metodo | Quale merce considera rimasta | Come trova il costo |
|---|---|---|
| CMP | Tutta mescolata, un prezzo solo | La media dei carichi con un prezzo, pesata sulle quantità: (somma di quantità × costo) ÷ somma delle quantità. |
| FIFO | È uscita la merce entrata prima: restano i carichi più recenti | Parte dall'ultimo carico e va indietro finché copre la giacenza, ogni carico al suo costo. |
| LIFO | È uscita la merce entrata per ultima: restano i carichi più vecchi | Parte dal primo carico e va avanti finché copre la giacenza, ogni carico al suo costo. |
- Contano come carichi gli acquisti, i carichi iniziali, i resi da cliente, le rettifiche in aumento e la produzione, di tutti i magazzini, purché abbiano un costo maggiore di zero. Due carichi dello stesso giorno contano nell'ordine in cui sono stati registrati.
- Gli arrivi da trasferimento non sono carichi: la merce spostata da un magazzino all'altro ha già il suo carico, quello con cui è entrata in azienda, e contarla di nuovo all'arrivo la farebbe valere due volte. Lo stesso vale per il rientro di un trasferimento annullato. Non contano nemmeno i movimenti stornati e i loro storni.
- Se i carichi non bastano a coprire la giacenza (merce entrata prima di usare NOX, carichi senza costo), la parte scoperta prende il costo medio registrato sulla giacenza. La colonna Costo da lo dice riga per riga: carichi, carichi + costo medio (con quante unità sono al costo medio) o costo medio (nessun carico con un prezzo); le righe non valorizzate del tutto col metodo scelto sono in giallo.
- La colonna Costo unitario è il valore diviso la quantità.
Un esempio. Un articolo, un solo magazzino. Il 1° febbraio entrano 100 pezzi a 10,00 €, il 1° marzo altri 100 a 12,00 €; poi se ne vendono 150. Oggi ne restano 50.
| Metodo | Quali 50 pezzi restano | Costo unitario | Valore |
|---|---|---|---|
| CMP | Media dei carichi: (100 × 10 + 100 × 12) ÷ 200 = 11 | 11,00 € | 550,00 € |
| FIFO | 50 del carico di marzo | 12,00 € | 600,00 € |
| LIFO | 50 del carico di febbraio | 10,00 € | 500,00 € |
Con i prezzi che salgono il FIFO dà il valore più alto e il LIFO il più basso; con i prezzi che scendono è il contrario.
Seriali prodotto
Il numero di serie identifica il singolo pezzo: un telefono, uno strumento, una macchina. Qui lo registri, lo ritrovi e ne cambi lo stato.
- Premi Nuovo seriale.
- Scrivi il Numero seriale e scegli la Voce catalogo: servono tutti e due.
- Se vuoi, scegli il Magazzino, la Data ingresso (parte da oggi), la Fine garanzia e scrivi le note.
- Premi Salva.
- Registrare un seriale e cambiarne lo stato è dell'amministratore. Il seriale nasce in stato ATTIVO.
- Lo stesso numero non si ripete sullo stesso articolo: NOX rifiuta il doppione con «Seriale già esistente per questa voce», senza badare a maiuscole e spazi. Lo stesso numero può esistere per articoli diversi.
- Il seriale non è legato a movimenti o documenti: registrarlo non carica la merce, e vendere l'articolo non cambia il suo stato. La giacenza la muovono i carichi, i DDT e le fatture.
- ⇄ Cambia stato (su ogni riga): scegli il nuovo stato (ATTIVO, VENDUTO, IN_RMA, IN_RIPARAZIONE, RESO, SCARTATO, SMARRITO) e, se serve, la data di uscita, il cliente e una nota. Quando il pezzo esce (venduto, reso, scartato, smarrito) la data di uscita è quella scritta, o oggi; quando torna ATTIVO la data di uscita si toglie. Cambiare stato non muove la giacenza.
- L'apertura di una pratica RMA mette il seriale in stato IN_RMA da sola. Quando la pratica finisce il seriale non cambia da solo: lo stato giusto lo scegli tu da qui.
- L'elenco mostra gli ultimi 500 seriali, dal più recente per data di ingresso.
RMA pratiche
La pratica RMA segue il pezzo che il cliente ti rimanda: un guasto in garanzia, un reso, una sostituzione.
- Premi Nuova RMA.
- Controlla il Numero pratica: NOX propone il primo numero libero dell'anno (RMA-anno-progressivo, uno più del più alto già usato), e lo puoi cambiare.
- Scegli l'Articolo (obbligatorio). La tendina Seriale si riempie con i seriali di quell'articolo; se non ne ha, resta spenta.
- Scegli il Cliente, scrivi il Motivo del reso (parte da «Guasto in garanzia») e il Difetto riscontrato.
- Premi Salva.
- Aprire e far avanzare una pratica è dell'amministratore. La pratica nasce APERTA, con la data di oggi, e NOX annota chi l'ha aperta.
- Il numero non si ripete: se è già usato da un'altra pratica, NOX lo dice e non salva.
- Se hai scelto un seriale, quel seriale passa in stato IN_RMA.
- ⟶ Avanza (su ogni pratica non chiusa): scegli il nuovo stato (IN_ANALISI, IN_RIPARAZIONE, RIPARATA, NON_RIPARABILE, SOSTITUITA, RIMBORSATA, CHIUSA…) e scrivi diagnosi tecnica, soluzione applicata e costo della riparazione. RIPARATA, NON_RIPARABILE, SOSTITUITA, RIMBORSATA e CHIUSA scrivono la data di chiusura e chi ha chiuso. Ogni cambio di stato resta scritto nello storico della pratica, con chi l'ha fatto.
- Una pratica CHIUSA non avanza più.
- La pratica non muove merce e non crea documenti. I DDT di reso e di sostituzione si fanno in Documenti e si collegano alla pratica nella sezione DDT ↔ RMA; qui compaiono col loro numero.
- L'elenco mostra le ultime 200 pratiche.
MRP — Riordino automatico
Questa sezione mostra le proposte d'ordine di NOX, le più recenti in cima (fino a 500): articolo, magazzino, giacenza, scorta minima, quantità proposta, valore stimato, fornitore suggerito, tipo e origine, stato e data. Da qui le proposte a scorta si generano, si decidono e diventano ordini.
- Origine SCORTA: il riordino degli articoli sotto scorta. NOX guarda le giacenze che hanno una scorta minima e sono scese fino a quella scorta o sotto, e propone la quantità di riordino dell'articolo oppure quanto manca alla scorta massima, tolta la merce già ordinata e in arrivo. Il fornitore suggerito è il preferito del listino d'acquisto, o il fornitore principale dell'articolo; il valore stimato è quantità × costo medio.
- Origine FABBISOGNO_BOM: le proposte nate dal fabbisogno delle distinte base in Produzione → MRP (ACQUISTO per i materiali, PRODUZIONE per i semilavorati). Si decidono là: vedi il manuale delle distinte base.
- Le proposte di riordino non si ripetono: finché per un articolo c'è già una proposta aperta o approvata, o un ordine nato da una proposta e non ancora arrivato, NOX non ne crea un'altra. La merce ordinata e in arrivo conta come se fosse già in giacenza; quando l'ordine è evaso l'articolo torna a essere valutato.
- Il valore stimato lo vede solo chi ha il permesso di vedere costi e margini; gli altri vedono «—».
Il riordino automatico (riquadro azzurro in cima):
- Spunta Acceso: ogni giorno e scegli l'ora (ora italiana, a quarti d'ora).
- Se vuoi un avviso, scrivi le email (più indirizzi con la virgola) e da quante nuove proposte in su deve partire.
- Premi Salva. Parte spento; spento, le proposte nascono solo con il pulsante qui sotto.
- Una volta al giorno, all'ora scelta, NOX crea le proposte a scorta che mancano; se ne ha create almeno quante hai detto, manda l'email dalla casella di sistema di NOX (la stessa degli avvisi dei ticket).
- Genera proposte fa lo stesso giro subito, e dice quanti articoli sono sotto scorta e quante proposte nuove ha creato.
- Sulle proposte a scorta ancora aperte: ✓ Approva (decisa, ma non ancora ordinata: conta già come merce in arrivo), ✗ Rifiuta (non si ordina; il giro dopo, se l'articolo è ancora sotto scorta, ne propone una nuova), 🛒 Ordina: crea l'ordine a fornitore in bozza, al fornitore suggerito, e la proposta passa a ORDINE_GENERATO. Senza fornitore suggerito NOX lo dice e non crea niente.
- Configurare, generare e decidere è dell'amministratore. Una proposta rifiutata o già ordinata non si decide più.
Import dei movimenti da CSV
Il pulsante Template scarica un file d'esempio con le colonne codice_voce; quantita; costo_unitario; data; lotto; note; tipo_movimento. Scegli il magazzino di destinazione (con un solo magazzino puoi lasciare «Magazzino default») e premi Upload CSV. Importare è dell'amministratore.
Il file accetta i tipi di movimento veri del magazzino (carico da acquisto, carico iniziale, scarico per vendita, rettifiche, omaggi, danneggiati, produzione, inventario); le righe senza tipo diventano carico iniziale. I vecchi RETTIFICA_POSITIVA e RETTIFICA_NEGATIVA si traducono da soli. I trasferimenti invece non si importano: si fanno dalla loro sezione, perché metà trasferimento farebbe sparire o comparire merce.
Ogni riga passa dagli stessi controlli di un movimento scritto a mano. Alla fine NOX dice quante righe ha importato e quante ha scartato, e per ogni riga scartata il numero di riga e il motivo. Con più magazzini, scegli nella pagina quello di destinazione. Sotto resta lo storico degli import.
Listini per magazzino
Un prezzo di listino può valere per un solo magazzino (per esempio un punto vendita con prezzi suoi). Dove non c'è un prezzo specifico vale quello generale.
Con Nuovo prezzo scegli listino, articolo e magazzino (o «globale»), scrivi il prezzo netto e, se serve, l'aliquota IVA: vuota vuol dire quella del catalogo. È dell'amministratore. Lo stesso articolo non può avere due prezzi sullo stesso listino per lo stesso magazzino, e da questa pagina un prezzo non si modifica.
Trasferimenti fra magazzini
Il trasferimento si richiede, si approva, parte e arriva.
- Nuovo trasferimento: magazzino di partenza e di arrivo (diversi), priorità, motivazione e le righe con articolo e quantità. Nasce RICHIESTO, con il numero anno/progressivo.
- ✓ Approva oppure ✗ Rifiuta con il motivo: è dell'amministratore, e si fa solo su un trasferimento RICHIESTO.
- ▶ Avvia: la merce esce dal magazzino di partenza e il trasferimento è IN_TRANSITO.
- ✓✓ Registra l'arrivo: si apre un riquadro con le righe. Per ognuna scrivi quanti pezzi sono arrivati (parte da quanti ne sono partiti); se sono meno, scrivi il motivo della differenza, che è obbligatorio. Premi Registra l'arrivo: la merce arrivata entra nel magazzino di arrivo e il trasferimento è COMPLETATO.
- Quando lo avvii, NOX controlla che nel magazzino di partenza la merce ci sia: se per anche un solo articolo non basta, il trasferimento non parte e NOX dice quale articolo manca, quanto ne serve e quanto ce n'è. La merce viaggia al costo medio che ha nel magazzino di partenza (se lì non ce l'ha, al prezzo d'acquisto dell'articolo).
- All'arrivo non può arrivare più di quanto è partito. La merce che manca (rotta, persa nel viaggio) non entra in nessun magazzino: la differenza e il suo motivo restano scritti sulla riga, e NOX dice quante righe hanno differenze.
- ⊘ Annulla (su un trasferimento richiesto, approvato o in viaggio): NOX chiede il motivo. Se la merce era già partita, rientra nel magazzino di partenza con il suo movimento. Un trasferimento completato, rifiutato o già annullato non si annulla. Annullare è dell'amministratore.
- Richiedere, avviare e registrare l'arrivo chiedono il permesso di registrare movimenti di magazzino.
Regole approvazione
Le regole fermano le rettifiche con causale anche sotto la soglia della causale, e dicono chi le può approvare. Una regola dice: tipo di rettifica (scarico, carico o tutte e due), causale, magazzino, soglia in euro, il ruolo minimo di chi approva, le email da avvisare e una priorità.
- Premi Nuova regola e scrivi il Nome (obbligatorio).
- Scegli il Tipo di rettifica, la Causale e il Magazzino (vuoti = qualunque) e, se vuoi, la Soglia € (vuota = qualunque valore).
- Scegli Chi approva: Utente, Operatore, Amministratore o Super amministratore. Approva chi ha quel ruolo o uno superiore.
- Scrivi la Priorità (parte da 100; il numero più basso vince), se vuoi le Email da avvisare (più indirizzi con la virgola) e la descrizione, poi premi Salva.
- Quando vale: una rettifica con causale cerca la prima regola attiva, in ordine di priorità, i cui campi pieni coincidono con la rettifica e la cui soglia è raggiunta dal valore. Se la trova, la rettifica va in approvazione e la decide il ruolo della regola; se non la trova, conta solo la soglia della causale. Vedi Rettifiche con approvazione.
- Le email ricevono un avviso, dalla casella di sistema di NOX, ogni volta che la regola ferma una rettifica: numero, causale, articolo, quantità, valore e chi la deve decidere.
- ✎ Modifica riapre la regola nel modulo; le rettifiche già in attesa tengono il ruolo che avevano quando sono state chieste. L'interruttore Disattiva / Riattiva la spegne e la riaccende: una regola spenta non ferma niente, ma non si cancella.
- Creare, modificare e disattivare le regole è dell'amministratore.
- Le regole salvate prima con i ruoli UTENTE, OPERATORE o MANAGER valgono come Utente, Operatore e Amministratore (MANAGER non è un ruolo di NOX). Le regole con un tipo che non è una rettifica (per esempio carichi iniziali o trasferimenti) non fermano niente: per usarle, modificale e scegli scarico o carico.
DDT ↔ RMA
Collega a ogni pratica RMA il DDT con cui il cliente ha reso il pezzo e quello con cui gli hai spedito il sostituto.
- Nella riga della pratica premi Scegli nella colonna DDT Reso o DDT Sostituzione.
- Nel riquadro che si apre compaiono gli ultimi DDT; per trovarne un altro scrivi il numero del DDT o il nome del cliente e premi Cerca.
- Premi Scegli sulla riga del DDT giusto.
- Nell'elenco ci sono solo i DDT (di vendita e del fornitore) non cestinati, e NOX lo ricontrolla quando colleghi: un documento che non esiste, che è nel cestino o che non è un DDT non si collega.
- Un DDT già collegato a un'altra pratica non si sceglie (la colonna Già su dice quale); lo stesso DDT non può essere sia di reso sia di sostituzione.
- NOX scrive il collegamento sulla pratica e sul documento. Nella colonna compare il numero del DDT con la sua data, anche nella sezione RMA pratiche.
- ⇄ Cambia DDT sostituisce il collegamento (il DDT di prima si scollega); Togli il collegamento lo toglie dalla pratica e dal documento.
- Il collegamento non muove merce e non cambia lo stato della pratica. La scheda del documento oggi non lo mostra.
- Collegare e togliere è dell'amministratore.
Scarico FEFO
Lo scarico FEFO scala la merce solo dal magazzino indicato: gli altri magazzini non vengono toccati.
Storico prezzi
Lo storico prezzi mostra i carichi con il loro costo (e il fornitore, quando il carico viene da un documento), anche quelli vecchi, senza che le vendite li nascondano.
GET /api/magazzino/inventari/:id/audit-log, oppure osservando il campo utente sui movimenti di rettifica generati alla chiusura.GET /api/magazzino/voce/:id/timeline: restituisce in ordine cronologico decrescente tutti i movimenti dell'articolo (marcati con il flag di storno se applicabile) e le righe di inventario fisico in cui compare (attesa, contata, differenza). E la visione completa per capire carichi, scarichi, storni e rettifiche di inventario.• il pacchetto
MAGAZZINO è compreso nella licenza dell’azienda
• il modulo è acceso nella Aziende & Licenze, per l’azienda e per l’utente
Spento vuol dire bloccato, non solo nascosto. Dettagli in Licenza e Aziende & Licenze.
A partire dalla versione 2.2, il modulo Magazzino 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: Per i movimenti si esegue STORNO contabile (inserimento movimento opposto) invece di cancellazione. La risposta indica N operazioni riuscite / M fallite; i dettagli delle fallite compaiono nella console browser (F12).
Guard periodo IVA chiuso (v 2.2)
La creazione di un movimento di magazzino (POST /api/magazzino/movimenti) con dataMovimento che cade in un periodo IVA chiuso viene bloccata con HTTP 409.
- Il guard verifica la data rispetto alle chiusure attive del registro vendite (tipo DDT)
- Impedisce di alterare giacenze di un periodo già consolidato contabilmente
- Per eventuali correzioni: riapertura periodo (admin + motivazione) oppure movimento di storno nel periodo corrente
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:
| Campo | Esempio originale | Nel log |
|---|---|---|
| IBAN | IT60X0542811101000000123456 | IT60****3456 |
| Codice Fiscale (PF) | RSSMRA80A01H501Z | RSSMRA****501Z |
| Partita IVA | 12345678901 | 123****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.
Integrazione automatica DDT → movimenti magazzino (v 2.2 wave 9)
Trigger automatico che genera i movimenti di magazzino a partire dalle righe di un DDT con il tipo di movimento corretto in funzione della causale. Previene la doppia esecuzione tramite log di tracciamento.
Mapping DDT → tipo movimento
| Scenario DDT | Tipo movimento generato | Segno quantità |
|---|---|---|
| DDT di vendita (causale VENDITA) | SCARICO_VENDITA | negativo (scarica) |
| DDT reso cliente (resoTipo RESO_CLIENTE) | CARICO_RESO_CLIENTE | positivo (carica) |
| DDT reso fornitore (resoTipo RESO_FORNITORE) | SCARICO_RESO_FORN | negativo (scarica) |
Endpoint
POST /api/bollettazione/magazzino-auto/ddt/:docId[ADMIN] body{magazzinoId, forza?}- Scandisce
documento_righe.voceCatalogoIde genera un recordmovimenti_magazzinoper ogni riga con articolo di catalogo - Traccia l'esecuzione in
log_magazzino_autocon arraymovimenti_generati[], esito (OK/ERRORE/SKIP), eventuale errore testuale - Il flag
forza: truepermette di rieseguire il trigger anche se un log OK esiste già (utile dopo correzioni)
voceCatalogoId (es. righe di testo libero, spese accessorie) vengono saltate silenziosamente perché non rappresentano giacenze. Il costo unitario applicato al movimento è il prezzoUnitario della riga, e il valore totale è il totaleRiga.MAGAZZINO v 2.2 — 11ª ondata (ALTA + MEDIA priorità)
Estensione del pacchetto MAGAZZINO con 8 macro-funzionalità avanzate richieste dal mercato enterprise. Tutti gli endpoint sono montati sotto /api/magazzino-v11/* (router magazzino-v22-wave11.routes.js). 8 nuove tabelle DB + estensioni schema.
A. Causali rettifica classificate (14 codici seed)
Sostituisce il campo causale a testo libero con un elenco strutturato e parametrizzabile di causali standard.
| Codice | Tipo | Foto | Soglia approvazione |
|---|---|---|---|
| DANNEGGIATO | SCARICO | ✓ | € 100,00 |
| OBSOLETO | SCARICO | — | € 500,00 |
| FURTO | SCARICO | ✓ | sempre (€ 0,01) |
| FURTO_ASSICURATO | SCARICO | ✓ | sempre |
| SCADUTO | SCARICO | — | € 100,00 |
| SOTTOINVENTARIO | SCARICO | — | € 200,00 |
| SOVRAINVENTARIO | CARICO | — | € 200,00 |
| CAMBIO_LOTTO | CARICO | — | — |
| RESO_CLIENTE | CARICO | — | — |
| OMAGGIO | SCARICO | — | € 50,00 |
| AUTOCONSUMO | SCARICO | — | € 100,00 |
| DISTRUZIONE_CERTIFICATA | SCARICO | ✓ | sempre |
| PRODUZIONE_CARICO/SCARICO | BI | — | — |
GET /api/magazzino-v11/causali-rettifica— elencoPOST /api/magazzino-v11/causali-rettifica[ADMIN] — nuova causale (codice univoco maiuscolo, tipo CARICO/SCARICO, foto/motivazione, soglia €; risposta 409 su codice duplicato). Disponibile anche dal pulsante “Nuova causale” della dashboard v2.2PUT /api/magazzino-v11/causali-rettifica/:id[ADMIN] — modifica soglia/foto/attivoPOST /api/magazzino-v11/movimenti/rettificabody{voceCatalogoId, magazzinoId, quantita, causaleRettificaId, motivazione, costoUnitario}- Se
sogliaApprovazioneEurimpostata evalore ≥ soglia, il movimento nasce in statoIN_ATTESA_APPROVAZIONE - Le 14 causali standard sono seedate automaticamente anche sui workspace di nuova creazione
B. Workflow approvazione movimenti
Stato movimento: BOZZA → IN_ATTESA_APPROVAZIONE → APPROVATO / RIFIUTATO. Ogni movimento in attesa richiede firma ADMIN.
GET /api/magazzino-v11/movimenti/in-approvazione— coda approvazionePOST /api/magazzino-v11/movimenti/:id/approva[ADMIN]POST /api/magazzino-v11/movimenti/:id/rifiuta[ADMIN] body{motivo}- Campi:
statoApprovazione,approvatoDa,approvatoIl,rifiutatoMotivo,richiestaApprovazioneDa
C. Allegati foto/documenti giustificativi
Upload di foto, verbali, certificati di distruzione allegati al singolo movimento. Salvataggio disco con hash SHA-256.
- Tabella
movimento_allegaticon tipo (FOTO/DOCUMENTO/CERTIFICATO_DISTRUZIONE/VERBALE) POST /api/magazzino-v11/movimenti/:id/allegatiform-datafile+tipoAllegato+noteGET /api/magazzino-v11/movimenti/:id/allegati,/allegati/:allegId/download- Cartella riservata sul server (non scaricabile direttamente da indirizzo web), max 15 MB per file
- Dalla dashboard v2.2 (sezione Allegati movimenti): campo “ID movimento” + tipo + pulsante “Carica allegato” per l'upload; download con Bearer token via app (non link diretto)
D. Giacenza retrospettiva a data
Ricostruzione della giacenza a qualunque data storica sommando i movimenti approvati fino a quel giorno. Utile per export periodo d'imposta, confronti storici, analisi stagionalità.
GET /api/magazzino-v11/giacenza-a-data?data=2026-12-31&voceCatalogoId=X&magazzinoId=Y- Per performance su dataset grandi: snapshot giornaliero opzionale con
POST /api/magazzino-v11/giacenza-snapshot/genera - Tabella
giacenze_snapshot: UNIQUE (data, magazzino, voce, ubicazione, numLotto)
E. Valorizzazione FIFO / LIFO / CMP selezionabile
Nuovo campo metodoValorizzazione su voci_catalogo: default CMP (costo medio ponderato), selezionabile FIFO o LIFO per articolo.
PATCH /api/magazzino-v11/valorizzazione/:voceCatalogoIdbody{metodo: 'CMP'|'FIFO'|'LIFO'}GET /api/magazzino-v11/valorizzazione/:voceCatalogoId/preview-scarico?quantita=N— mostra strati (movimenti sorgente) che verranno prelevati e costo medio risultante- FIFO: strati ordinati per data ASC (primi entrati primi usciti)
- LIFO: strati ordinati per data DESC (ultimi entrati primi usciti)
- Se giacenza insufficiente: HTTP 409 con dettaglio strati analizzati
F. Seriali univoci + RMA
Gestione del numero di serie per beni singoli (elettronica, strumenti, beni strumentali) con tracciabilità completa dall'ingresso alla dismissione.
- Tabella
seriali_magazzino: numero, voce, lotto, magazzino, stato (ATTIVO/VENDUTO/IN_RMA/IN_RIPARAZIONE/RESO/SCARTATO/SMARRITO), data garanzia - UNIQUE (voce_catalogo_id, numero_seriale) — stesso numero può esistere per articoli diversi
POST /api/magazzino-v11/seriali[ADMIN],GET /seriali?stato=ATTIVO&voceCatalogoId=XPATCH /seriali/:id/stato[ADMIN] — transizioni di stato con data uscita, cliente, documento vendita
G. RMA (Return Merchandise Authorization)
Workflow completo resi tecnici con link al seriale, documento vendita, diagnosi, soluzione applicata.
- Tabella
rma_pratiche: numero, seriale, voce, cliente, stato (APERTA/IN_ANALISI/IN_RIPARAZIONE/RIPARATA/NON_RIPARABILE/SOSTITUITA/RIMBORSATA/CHIUSA) POST /api/magazzino-v11/rma[ADMIN] body{numeroRma, serialeId?, voceCatalogoId, clienteId?, motivoReso, difettoDescrizione}PATCH /api/magazzino-v11/rma/:id/avanzamento[ADMIN] — aggiorna stato + diagnosi + costo + seriale sostituzione + NC- L'apertura RMA con seriale imposta automaticamente il seriale in stato
IN_RMA
H. MRP — Material Requirements Planning
Generazione automatica di proposte d'ordine per articoli sotto scorta minima, con calcolo quantità suggerita basata su scorta_massima o quantita_riordino.
- Tabella
mrp_proposte_ordine: voce, magazzino, quantità suggerita, giacenza attuale, scorta minima, costo stimato, stato (NUOVA/IN_VALUTAZIONE/ORDINATA/ANNULLATA/IGNORATA) - Tabella
mrp_config: scheduler attivo, cron expression, email destinatario alert, giorni copertura target GET/PUT /api/magazzino-v11/mrp/config[ADMIN PUT] — il PUT crea la riga di configurazione se assente (workspace nuovi)POST /api/magazzino-v11/mrp/genera-proposte[ADMIN] — analizza tutte le giacenze sotto scorta e crea proposte (evita duplicati)GET /api/magazzino-v11/mrp/proposte?stato=NUOVA,PATCH /mrp/proposte/:id[ADMIN] — valuta e transiziona
services/mrp-scheduler.js esegue la generazione proposte per ogni workspace con scheduler_attivo=true all'orario indicato in cron_expression (formato giornaliero M H * * *, es. 0 6 * * * = 06:00 UTC; tick di controllo ogni 15 minuti). Se configurato email_alert_destinatario e le proposte create raggiungono la soglia di urgenza, invia una email di riepilogo. Prima di questa data la configurazione veniva salvata ma nessun processo la eseguiva: il riordino era solo manuale.I. Batch import movimenti CSV
Upload CSV per carichi iniziali, rettifiche massive, importazione da sistemi legacy. Mapping colonne automatico, validazione riga per riga, report dettagliato errori.
- Tabella
movimenti_import_batch: righe totali/importate/scartate, errori JSONB, esito (OK/ERRORE/PARZIALE) POST /api/magazzino-v11/import-movimenti[ADMIN] form-datafile(max 15 MB) + querytipoDefault+magazzinoDefaultId- Colonne accettate (case-insensitive, flessibili):
codice_voce | voce_codice | sku | codice,quantita | qty | qta,costo_unitario | costo | prezzo,data,tipo_movimento | tipo,lotto | numLotto,note - Delimitatori supportati:
,;\t GET /api/magazzino-v11/import-movimenti/batch— storico import
J. Carico da fattura passiva (su scelta)
La fattura del fornitore non carica il magazzino da sola, che sia importata o scritta a mano in Documenti: la merce entra col DDT del fornitore. Il carico dalla fattura è una scelta dell'amministratore, per la sola fattura senza DDT (accompagnatoria o immediata): pulsante 📦 Carica a magazzino nell'elenco delle Fatture passive. Vale anche per la fattura d'acquisto scritta a mano: emetterla non carica più la merce, come quella importata.
POST /api/magazzino-v11/carico-da-fattura-passiva/:id[ADMIN] body{magazzinoId?, forza?}: i movimenti passano dalla generazione dei documenti, come per ogni bolla.- Le righe si abbinano all'articolo col nostro codice o col codice fornitore scritto sull'articolo; quelle senza articolo, o di articoli non gestiti a magazzino, si saltano e vengono elencate col motivo.
- Rifiutato se la fattura è riepilogativa di DDT, è una nota di credito o un'integrazione, è già stata caricata, o se l'ordine collegato ha già le sue bolle (si può forzare, dopo una conferma esplicita).
- Con più magazzini e nessuno indicato sulla fattura, chiede quale.
- Flag
caricoMagazzinoGeneratoIl+ arraycaricoMovimentiIds[]sul documento della fattura di acquisto, per tracciabilità
MAGAZZINO v 2.2 — 12ª ondata (chiusura residui BASSA)
Chiusura dei 4 residui aperti: listini multi-magazzino, workflow trasferimenti inter-magazzino, regole approvazione granulari per ruolo/categoria, link bidirezionale DDT ↔ RMA. Tutti gli endpoint sotto /api/magazzino-v12/*.
A. Listini multi-magazzino (prezzi per ubicazione)
Nuovo campo magazzinoId su voci_listino (NULL = prezzo globale valido per tutti, valore specifico = prezzo solo per quel magazzino). Utile per aziende multi-sede con politiche commerciali differenziate.
GET /api/magazzino-v12/listini-multi?listinoId=X&voceCatalogoId=Y&magazzinoId=Z— lista con fallback globaleGET /api/magazzino-v12/listini-multi/best-price?voceCatalogoId=X&magazzinoId=Y&data=2026-04-19— ritorna il miglior prezzo applicabile: specifico magazzino vince su globale, a parità priorità listino decidePOST /api/magazzino-v12/listini-multi[ADMIN] — crea/duplica prezzo per magazzino specificoPUT /api/magazzino-v12/listini-multi/:id[ADMIN] — modifica prezzo/date/magazzino- Response include
matchType:SPECIFICO_MAGAZZINOoGLOBALE
B. Trasferimenti inter-magazzino con workflow
Gestione strutturata delle richieste di trasferimento merce tra magazzini con approvazione, tracking trasporto e rilevazione differenze in consegna. Sostituisce l'uso diretto dei movimenti TRASFERIMENTO_IN/OUT con un flusso governato.
Workflow stati
| Stato | Evento | Chi può eseguire |
|---|---|---|
| RICHIESTO | Creazione richiesta con righe | qualunque utente |
| APPROVATO | /approva | ADMIN |
| IN_TRANSITO | /avvia — genera TRASFERIMENTO_OUT | operatore |
| COMPLETATO | /completa — genera TRASFERIMENTO_IN + rileva differenze | operatore destinazione |
| RIFIUTATO | /rifiuta con motivo | ADMIN |
| ANNULLATO | /annulla (non da COMPLETATO) | ADMIN |
Tabelle e campi
- Tabella
trasferimenti_magazzino: numero progressivo annuale, magazzino origine/destinazione, priorità (BASSA/NORMALE/ALTA/URGENTE), vettore, tracking number, date approva/avvia/completa, motivi - Tabella
trasferimento_righe: quantità richiesta / inviata / ricevuta, differenza, motivo differenza, lotto, costo unitario - Collegamento automatico ai movimenti generati (
movimento_out_id,movimento_in_id)
Endpoint
POST /api/magazzino-v12/trasferimentibody{magazzinoOrigineId, magazzinoDestinazioneId, priorita, motivazione, righe:[{voceCatalogoId, quantitaRichiesta, costoUnitario, numLotto}]}POST /trasferimenti/:id/approva[ADMIN]POST /trasferimenti/:id/rifiuta[ADMIN] body{motivo}— solo da RICHIESTO (409 altrimenti)POST /trasferimenti/:id/avviabody{trackingNumber?, vettoreId?}— controlla che la merce ci sia nel magazzino di partenza (409 se manca, e non parte niente), poi genera TRASFERIMENTO_OUT (quantità positive: il segno lo dà il tipo)POST /trasferimenti/:id/completabody{righeRicevute:[{rigaId, quantitaRicevuta, motivoDifferenza}]}— genera TRASFERIMENTO_IN con quantità effettivamente ricevute (mai più di quelle partite; una differenza vuole il motivo); conteggio automatico righe con differenzaPOST /trasferimenti/:id/annulla[ADMIN] — da RICHIESTO, APPROVATO o IN_TRANSITO (la merce partita rientra)GET /trasferimenti?stato=IN_TRANSITO&magazzinoOrigineId=XGET /trasferimenti/:id— dettaglio con righe + progress
C. Regole approvazione granulari
Regole configurabili con priorità, accanto alla soglia delle causali rettifica: la regola con priorità minore (match più specifico) vince. Il confronto sta in services/regole-approvazione.service.js e lo usa la rettifica con causale (POST /api/magazzino-v11/movimenti/rettifica): una regola che corrisponde manda la rettifica in approvazione e ne fissa il ruolo minimo di chi la decide (vedi il capitolo 23, Regole approvazione).
Parametri regola
tipoMovimento(opzionale) — SCARICO_RETTIFICA o CARICO_RETTIFICA (vuoto = tutte e due)causaleRettificaId(opzionale) — causale specifica da causali_rettificacategoriaVoceId(opzionale) — articoli di una categoriamagazzinoId(opzionale) — magazzino specificosogliaValoreEur(opzionale) — soglia €ruoloMinimoApprovatore: USER | OPERATOR | ADMIN | SUPERADMIN (i vecchi UTENTE, OPERATORE, MANAGER si leggono come USER, OPERATOR, ADMIN)emailNotificaApprovatori: lista email separata da virgola: ricevono l'avviso dalla casella di sistema quando la regola ferma una rettificapriorita: numero intero — più basso vince (specificità maggiore)
Seed regole default
| Nome | Tipo | Soglia | Ruolo richiesto | Priorità |
|---|---|---|---|---|
| Furti (qualsiasi importo) | SCARICO_RETTIFICA | € 0,01 | ADMIN | 10 |
| Carichi manuali > 5000 € | CARICO_INIZIALE | € 5.000 | ADMIN | 30 |
| Rettifiche > 1000 € | SCARICO_RETTIFICA | € 1.000 | MANAGER (vale ADMIN) | 50 |
La regola sui carichi iniziali non ferma niente: le regole valgono solo per le rettifiche con causale.
Endpoint
GET/POST /api/magazzino-v12/regole-approvazione[ADMIN POST]PUT /api/magazzino-v12/regole-approvazione/:id[ADMIN] — modifica i soli campi mandati;{attivo:true}riattivaDELETE /api/magazzino-v12/regole-approvazione/:id[ADMIN] — soft-delete (attivo = false)POST /api/magazzino-v12/regole-approvazione/checkbody{tipoMovimento, causaleRettificaId, categoriaVoceId, magazzinoId, valoreEur}— verifica se un movimento candidato richiede approvazione e quale ruolo la può concedere
D. DDT reso ↔ RMA link bidirezionale
Collegamento robusto tra pratica RMA (wave 11) e i DDT coinvolti (reso dal cliente + eventuale sostituzione). Navigazione bidirezionale: da RMA ai suoi documenti, da documento alla RMA.
Campi aggiunti
rma_pratiche.ddt_reso_id— DDT con cui il cliente ha restituito il benerma_pratiche.ddt_sostituzione_id— DDT con cui è stato spedito il bene sostitutivodocumenti.rmaPraticaId— riferimento inverso per navigazione rapida
Endpoint
GET /api/magazzino-v12/ddt-rma-link/ddt?q=— i DDT (di vendita e del fornitore, secondotipi-documento.service.js) cercati per numero o intestatarioPOST /api/magazzino-v12/ddt-rma-link[ADMIN] body{rmaId, ddtResoId?, ddtSostituzioneId?}— crea link bidirezionale; 404 se il documento non c'è o è cestinato, 400 se non è un DDT, 409 se è già su un'altra praticaDELETE /api/magazzino-v12/ddt-rma-link/:rmaId/reso|sostituzione[ADMIN] — toglie il collegamento dalla pratica e dal documentoGET /api/magazzino-v12/ddt-rma-link/rma/:rmaId— restituisce RMA + documenti collegati (ddtReso, ddtSostituzione, documentoOrigine, notaCredito) con numero, data, tipo, statoGET /api/magazzino-v12/ddt-rma-link/documento/:docId— dato un documento trova la RMA collegataPOST /api/magazzino-v12/rma/:id/log-transizione— registra transizione di stato inrma_log_transizioniper auditGET /api/magazzino-v12/rma/:id/log— storico transizioni di stato
Dashboard operativa v2.2 (/magazzino-v22)
Le funzioni avanzate si usano dalla dashboard avanzata (sidebar Magazzino → Strumenti di magazzino): 13 sezioni navigabili con tabelle, form e azioni. In sintesi:
- Causali rettifica: il form “Nuova causale” ora crea davvero la causale (tipo CARICO/SCARICO, richiede foto/motivazione, soglia approvazione €)
- Approvazioni rettifiche: “Nuova rettifica” con causale, articolo, magazzino, quantità, costo (vuoto = costo dell'articolo) e foto; foto anche sulle rettifiche in attesa; approva/rifiuta solo per chi può decidere
- Allegati movimenti: il movimento si sceglie da un elenco con ricerca (
GET /api/magazzino-v11/movimenti/da-allegare?q=), poi tipo Foto/Documento + file; download autenticato; cancellazione dell'amministratore (DELETE /movimenti/allegati/:id) - Valutazione: lo stesso conto di
valorizzazione-stock.service.js(Dashboard e Rimanenze), con filtro per articolo e la base del costo riga per riga - Seriali e RMA: cambio di stato del seriale, avanzamento della pratica; seriale unico per articolo e numero RMA unico (indici univoci in
sql/2026-11-23_magazzino_strumenti.sql), numero proposto daGET /rma/prossimo-numero - MRP: interruttore e ora del giro automatico, email di avviso, “Genera proposte”, approva/rifiuta/ordina sulle proposte a scorta
- Trasferimenti: arrivo riga per riga con le quantità arrivate e il motivo delle differenze; annullamento
- Listini multi-magazzino: pulsante “Nuovo prezzo” con selezione listino, voce, magazzino (o globale), prezzo e IVA
- DDT ↔ RMA: il DDT di reso e/o sostituzione si sceglie per numero da un elenco dei soli DDT; il collegamento si cambia e si toglie
- Regole approvazione: ruoli veri (USER, OPERATOR, ADMIN, SUPERADMIN), modifica, disattivazione e riattivazione
- Import CSV: selettore del magazzino di destinazione (prima era fisso sul magazzino n. 1)
- Visibilità sezioni: gli interruttori delle singole funzioni (in Aziende & Licenze) ora nascondono davvero le sezioni disattivate dalla sidebar della dashboard. Logica opt-out: interruttore spento = sezione nascosta, non configurato = visibile
Voce sidebar Magazzino > Back-Order. Pagina dedicata agli articoli in attesa di evasione: quando un DDT esce con quantità minori di quanto richiesto (per scarsa giacenza, conversione parziale ordine, ecc.) le righe non spedite finiscono qui, da consegnare appena disponibili.
In Aziende & Licenze è il modulo Back-Order del pacchetto Magazzino: acceso di partenza per chi ha il Magazzino, si spegne per l'azienda o per il singolo utente come gli altri moduli. Spento, la voce sparisce dal menu, la pagina non si apre e la scheda della Home non compare.
Come si crea un back-order
Modo principale: dal dialog di conversione ORD → DDT con il toggle «Genera back-order per le quantità non spedite» (acceso di default). Per ogni riga con qta non trasferita nel DDT viene creata automaticamente una riga di back-order, collegata al DDT origine.
Pagina Back-Order
Mostra in cima 3 stat card (Pendenti / Parziali / Totale attivi). Di partenza mostra tutti i back-order da evadere (pendenti e parziali), dal più vecchio: chi aspetta da più tempo sta in cima. Il filtro per stato apre anche gli evasi e gli annullati (gli ultimi 500).
Per ogni riga vedi: articolo, cliente, ordine e DDT d'origine, quantità attesa, fornita, residuo, Ora (quanti pezzi si possono spedire adesso con la merce a magazzino, dando la precedenza a chi aspetta da più tempo), stato, data.
Un back-order nato da un ordine è il promemoria del residuo dell'ordine, e si governa dall'ordine:
- 🚚 Apri ordine: si apre l'ordine, e da lì si fa il DDT del residuo. Quando il DDT viene emesso il back-order si aggiorna da solo (PARZIALE o EVASO): fornitura ed «evaso» a mano non ci sono, perché dichiarerebbero consegnata merce che non ha un DDT.
- ✕ Annulla: il cliente non vuole più il resto. Si chiude anche il residuo dell'ordine per quell'articolo (l'ordine passa a EVASO se non resta altro) e la merce non resta più impegnata; il registro modifiche dell'ordine lo dice. Non si torna indietro.
Lo stesso articolo su più righe dello stesso ordine fa un back-order con la somma; il residuo, quando partono i DDT, si conta una volta sola.
I back-order scritti a mano (senza ordine, da integrazioni) restano a mano: matita per la quantità fornita (fra zero e l'attesa), «evaso» e «annulla».
Quando arriva la merce, la Home lo dice con la scheda Back-order evadibili (fra le cose da fare): quanti back-order la merce a magazzino può già servire. Nella pagina, la colonna Ora dice chi e quanto. L'ordine fra i clienti è quello d'arrivo: chi aspetta da più tempo viene prima.
Stati
- PENDENTE: niente ancora consegnato
- PARZIALE: una parte consegnata con un DDT, in attesa del resto
- EVASO: tutto consegnato (chiuso)
- ANNULLATO: il cliente ha rinunciato (o il DDT d'origine è stato annullato)
La pagina si chiama Movimenti & Giacenze, e si apre sui Movimenti: sono la finestra che si guarda tutti i giorni — cos'è entrato e cos'è uscito — mentre le giacenze ne sono il risultato. Le giacenze sono la seconda linguetta.