Magazzino

Giacenze, movimenti, lotti FIFO/FEFO, alert scorte, inventario fisico, analisi ABC e riordino

v 2.8Manuale Utente

Riferimenti normativi

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).

1Panoramica e Tab

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

TabContenuto
GiacenzeQuantità per articolo: totale, disponibile, riservata, scorta min, costo medio, valore
MovimentiRegistro cronologico carico/scarico con 12 tipi
LottiLotti con quantità residua, scadenza, fornitore
AlertSotto scorta + lotti in scadenza 30gg
DashboardKPI avanzati, valorizzazione FIFO/LIFO/Costo Medio, top 10
ABCClassificazione Pareto: A (80%), B (95%), C
RotazioneIndice rotazione, copertura gg, stato (obsoleto/lento/normale/veloce)
RiordinoROP automatico, quantità da ordinare
TrasferimentiMovimenti tra magazzini
Storico PrezziCronologia costi unitari per articolo
ⓘAccessibile da: Magazzino → Giacenze & Movimenti. Footer: + Movimento, Inventario fisico, Stampa etichette, Nuova ubicazione, Ricalcolo, Gestione magazzini.
2Magazzini Multipli

Il sistema supporta più magazzini indipendenti. Il selettore nell'header permette di cambiare.

  1. Premere “Gestione Magazzini” nel footer.
  2. Dialog con elenco magazzini. Compilare: codice, nome, tipo, indirizzo, CAP, provincia. Flag Default per il principale.
  3. Modificare: clic su un magazzino, editare, salvare. Eliminare: solo se vuoto.
⚠Nel modulo Documenti il magazzino è selezionabile in testata o per singola riga, consentendo prelievi da magazzini diversi nella stessa fattura.
3Tab Giacenze
ColonnaDescrizione
Codice / DescrizioneArticolo dal catalogo
TipoFarmaco, Integratore, Articolo, ecc.
QuantitàGiacenza totale
DisponibileTotale − riservata
RiservataImpegnata in documenti non spediti
U.M.Unità di misura
UbicazioneCorridoio-Scaffale-Ripiano-Cella
Scorta min.Soglia alert sotto scorta
Costo medio / ValoreCosto medio ponderato × giacenza
StatoOK (verde), Sotto scorta (rosso), In esaurimento (arancione)

Filtri: ricerca testo, ubicazione, tipo voce, paginazione 50/pagina. Azioni riga: scheda catalogo, soglie, etichetta.

4Tab Movimenti

Registro cronologico. Colonne: data, tipo, articolo, segno (+/−), quantità, costo unit., valore, lotto, ubicazione, documento, giacenza post.

12 tipi di movimento

TipoSegnoDescrizione
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.

5Carico/Scarico Manuale
  1. Premere “+ Movimento” nel footer → dialog modale.
  2. Selezionare tipo (12 opzioni).
  3. Cercare articolo da catalogo (autocomplete).
  4. Selezionare ubicazione (opzionale).
  5. Inserire quantità e costo unitario.
  6. Opzionale: numero lotto, data scadenza, data, note.
  7. 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.

⚠Sul capo non si carica niente. Un modello taglie e colori è un contenitore: la merce sta nelle sue combinazioni. Se provi a caricare sul capo, NOX rifiuta e lo dice — quei pezzi non comparirebbero in nessuna casella, e magazzino e realtà divergerebbero in silenzio.
6Tab Lotti e Scadenze

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.

7Logica FIFO / FEFO

Alla conferma documento, scarico automatico:

MetodoCriterioUso
FEFOFirst Expired, First Out — prima lotti con scadenza vicinaFarmaci, integratori, alimenti
FIFOFirst In, First Out — prima lotti ricevuti primaArticoli 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.

⚠Per i farmaci (D.Lgs. 219/2006) lo scarico FEFO è obbligatorio.
8Tab Alert Scorte

Due sezioni: Sotto scorta minima (card per articolo con giacenza, scorta min, deficit) e Lotti in scadenza 30gg (card con lotto, quantità, scadenza, giorni).

ⓘIl contatore alert è visibile anche nella Dashboard principale come card “Alert magazzino”.
9Tab Dashboard Magazzino

KPI: valore stock, articoli totali, sotto scorta, rotazione media. Metodo valorizzazione (art. 92 TUIR):

MetodoFormulaNormativa
Costo Medio(costo acquisti + rimanenze) / quantità totaleArt. 92 c.1 TUIR, OIC 13
FIFORimanenze valutate al costo ultimi acquistiArt. 92 c.2 TUIR
LIFORimanenze valutate al costo primi acquistiArt. 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.

MetodoDa quali strati prende
FIFOI carichi più recenti: quello che resta in magazzino è l'ultimo entrato.
LIFOI carichi più vecchi: quello che resta è il primo entrato.
Costo medioLa media pesata di tutti i carichi.
ⓘLo stesso articolo può valere cifre diverse coi tre metodi: è normale, ed è la ragione per cui il metodo si sceglie una volta e si tiene. Il conto parte dai movimenti di carico, quindi su un magazzino senza carichi registrati il valore resta a zero. Guardando tutti i magazzini insieme, gli arrivi da trasferimento non sono strati: la merce ha già quello del carico con cui è entrata in azienda (guardando un magazzino solo, invece, l'arrivo è il suo strato). È lo stesso conto della sezione Valutazione di Strumenti di magazzino.

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.

10Tab Analisi ABC

Classificazione Pareto:

Classe% ValoreGestione
A0–80%Monitoraggio stretto, riordino frequente, scorte di sicurezza
B80–95%Monitoraggio periodico, riordino a soglia
C95–100%Gestione semplificata, ordini meno frequenti
11Tab Indice di Rotazione

Colonne: articolo, giacenza, mov/mese, indice rotazione, giorni copertura (giacenza / consumo medio), stato:

StatoIndiceSignificato
OBSOLETO< 1Meno di 1 scarico/anno — capitale immobilizzato
LENTO1–3Bassa rotazione, valutare promozioni
NORMALE3–10Rotazione nella norma
VELOCE> 10Alta rotazione, garantire scorte
12Tab Punto di Riordino (ROP)

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.

13Tab Trasferimenti
  1. Aprire dialog Trasferimento.
  2. Selezionare magazzino origine e destinazione.
  3. Selezionare articolo e quantità.
  4. 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.

14Ubicazioni Granulari

Struttura a 4 livelli: Corridoio — Scaffale — Ripiano — Cella + barcode opzionale. Premere “Nuova Ubicazione” nel footer per crearne una.

15Tab Storico Prezzi

Cronologia costi unitari alimentata dai movimenti di carico. Colonne: data, articolo, tipo, costo unit., quantità, fornitore. Utile per monitorare l'andamento prezzi e negoziare.

16Barcode ed Etichette

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.

17Inventario Fisico

Creare un inventario

  1. Premere “+ Nuovo Inventario”.
  2. Descrizione (opzionale), magazzino (vuoto = tutti) e scaffale (vuoto = tutto il magazzino).
  3. Crea: genera l'elenco con la giacenza teorica, una riga per articolo e per posto (magazzino e scaffale): la colonna «Dove» dice quale.
ⓘLa conta non può essere negativa. Zero è legittimo — vuol dire «non ce n'è più nessuno» — ma un numero sotto zero viene rifiutato: alla chiusura diventerebbe una rettifica in meno di pezzi che nessuno ha contato.

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

  1. Aprire l'inventario (stato IN_CORSO).
  2. Per ogni articolo inserire quantità contata.
  3. 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.
  4. 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

  1. Premere “Chiudi e applica rettifiche”.
  2. 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.
  3. 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.
ⓘLe rettifiche non vanno in prima nota, da nessuna strada: chiusura dell'inventario, Scan inventario, rettifiche dalla pagina Giacenze. Muovono solo la merce. In contabilità il magazzino entra a fine anno con le rimanenze (Contabilità › Rimanenze di fine anno), valorizzate al 31/12 col metodo dell'azienda: la variazione delle rimanenze comprende già ammanchi ed eccedenze.
⚠Art. 2217 c.c.: l'inventario va redatto almeno annualmente. Le rettifiche devono essere documentate per la valutazione rimanenze (OIC 13).
18Novità della v2.1 — Audit, Storno, Cestino, Timeline

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 cancellatoIl e cancellatoDa, disattiva automaticamente il record e lo rimuove dalla lista standard. Giacenze e movimenti storici restano intatti.
  • Lista cancellati via GET /api/magazzino/magazzini/_/cestino e GET /api/magazzino/ubicazioni/_/cestino (con counters di giacenze/movimenti collegati).
  • Ripristino via POST /api/magazzino/magazzini/:id/ripristina e POST /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.
19Valorizzazione FIFO / LIFO / CMP

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

  1. Apri Amministrazione → Parametri
  2. Scorri fino alla sezione “📦 Valorizzazione magazzino”
  3. 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)
  4. 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 metodo scelto ha valenza fiscale — una volta adottato, il cambio successivo richiede informativa nella nota integrativa del bilancio e rettifica dell'esercizio precedente. Concordare sempre con il commercialista.
20Tab Lotti — costo, valore residuo e scadenze

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.

21Alert scadenze lotti — badge Dashboard

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.

ⓘPer configurare l'invio email chiedere al tecnico di impostare le variabili SMTP del server (host, porta, user, password). Non richiesto per il funzionamento base: la Dashboard mostra gli alert anche senza mail configurata.
22Disponibilità reale (ATP) e Scarico FEFO

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.
23Strumenti di magazzino: come si comportano

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.

  1. Premi Nuova causale.
  2. 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.
  3. Scegli il Tipo: Scarico (la merce esce) o Carico (la merce entra).
  4. 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».
  5. 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.
  6. 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.
ⓘSoglia, foto obbligatoria e approvazione valgono per le rettifiche registrate con una causale di questo elenco, da Approvazioni rettifiche → Nuova rettifica. Le rettifiche fatte da Movimenti & Giacenze (Rettifica aumento / riduzione), dalla chiusura dell'inventario e da Scan inventario hanno la causale scritta a mano e non passano da qui.

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.

  1. Premi Nuova rettifica.
  2. Scegli la Causale (dice anche se la merce entra o esce), l'Articolo e il Magazzino (con un solo magazzino è già quello).
  3. 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.
  4. Scrivi la Motivazione (obbligatoria se la causale la chiede) e, se vuoi, le note.
  5. Con Foto o documento puoi allegare subito il giustificativo. Se la causale vuole la foto e non la alleghi, la pagina te lo ricorda.
  6. 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).

  1. 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.
  2. Clicca la riga del movimento: diventa blu e compare sotto, in 2. Carica il file.
  3. 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.

  1. Scegli la Data (parte da oggi).
  2. Se vuoi, scegli una sola Voce; altrimenti lascia Tutte.
  3. 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.

  1. Scegli il Metodo: FIFO, LIFO o CMP (costo medio).
  2. Se vuoi, scegli una sola Voce; altrimenti lascia Tutte.
  3. 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à.
MetodoQuale merce considera rimastaCome trova il costo
CMPTutta mescolata, un prezzo soloLa 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ù recentiParte 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ù vecchiParte 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.

MetodoQuali 50 pezzi restanoCosto unitarioValore
CMPMedia dei carichi: (100 × 10 + 100 × 12) ÷ 200 = 1111,00 €550,00 €
FIFO50 del carico di marzo12,00 €600,00 €
LIFO50 del carico di febbraio10,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.

⚠I tre metodi sono quelli ammessi per i beni fungibili dall'art. 2426 n. 10 del Codice civile (OIC 13) e dall'art. 92 del TUIR. Questa tabella però valuta solo al costo: non lo confronta con il valore di realizzo desumibile dal mercato, che vince quando è più basso (art. 2426 n. 9, OIC 13). E il suo LIFO prende i singoli carichi, non gli strati anno per anno del LIFO «a scatti» dell'art. 92. Il valore che entra in contabilità è quello delle Rimanenze di fine anno, al 31/12 e con il metodo dell'azienda.

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.

  1. Premi Nuovo seriale.
  2. Scrivi il Numero seriale e scegli la Voce catalogo: servono tutti e due.
  3. Se vuoi, scegli il Magazzino, la Data ingresso (parte da oggi), la Fine garanzia e scrivi le note.
  4. 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.

  1. Premi Nuova RMA.
  2. 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.
  3. Scegli l'Articolo (obbligatorio). La tendina Seriale si riempie con i seriali di quell'articolo; se non ne ha, resta spenta.
  4. Scegli il Cliente, scrivi il Motivo del reso (parte da «Guasto in garanzia») e il Difetto riscontrato.
  5. 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):

  1. Spunta Acceso: ogni giorno e scegli l'ora (ora italiana, a quarti d'ora).
  2. Se vuoi un avviso, scrivi le email (più indirizzi con la virgola) e da quante nuove proposte in su deve partire.
  3. 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.

  1. 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.
  2. ✓ Approva oppure ✗ Rifiuta con il motivo: è dell'amministratore, e si fa solo su un trasferimento RICHIESTO.
  3. ▶ Avvia: la merce esce dal magazzino di partenza e il trasferimento è IN_TRANSITO.
  4. ✓✓ 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à.

  1. Premi Nuova regola e scrivi il Nome (obbligatorio).
  2. Scegli il Tipo di rettifica, la Causale e il Magazzino (vuoti = qualunque) e, se vuoi, la Soglia € (vuota = qualunque valore).
  3. Scegli Chi approva: Utente, Operatore, Amministratore o Super amministratore. Approva chi ha quel ruolo o uno superiore.
  4. 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.

  1. Nella riga della pratica premi Scegli nella colonna DDT Reso o DDT Sostituzione.
  2. 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.
  3. 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.

?Domande Frequenti (FAQ)
Lo scarico è automatico alla conferma del documento?
Sì. Al passaggio a CONFERMATO/EMESSO, il sistema genera movimenti di scarico con logica FEFO/FIFO. All'annullamento, storno automatico.
Cosa succede se la giacenza è insufficiente?
Il documento viene salvato comunque. Il sistema segnala l'insufficienza ma non blocca l'operazione.
Differenza tra FIFO e FEFO?
FIFO: prima i lotti ricevuti prima (per data ricevimento). FEFO: prima i lotti con scadenza più vicina. FEFO per deperibili, FIFO per gli altri.
Come imposto la scorta minima?
Tab Giacenze → icona ⚙ Soglie sulla riga. Compilare “Scorta minima”. Sotto la soglia scatta l'alert.
Posso avere costi diversi per lo stesso articolo?
Sì. Ogni carico registra il proprio costo. Tab Storico Prezzi mostra la cronologia. La dashboard offre valorizzazione FIFO/LIFO/Costo Medio.
Come funziona il ricalcolo automatico?
Rifà le giacenze dal registro dei movimenti, articolo per articolo e magazzino per magazzino, con costo medio, lotti e impegnato. Prima mostra cosa cambierebbe e scrive solo dopo la conferma; nessun movimento viene cancellato. Con la spunta «Riallinea anche i documenti», i documenti i cui movimenti non tornano con l’emissione vengono stornati e rigenerati. Le giacenze nate dalla scheda articolo o da un import, senza movimenti, restano come sono: la finestra le elenca con la quantità che manca al registro, da regolarizzare con un carico iniziale.
Posso eliminare un movimento automatico?
No. Solo i movimenti manuali sono eliminabili. Per annullare quelli automatici, annullare il documento che li ha generati.
Quale metodo di valorizzazione per il bilancio?
Art. 92 TUIR ammette FIFO, LIFO e Costo Medio. Il metodo deve essere coerente tra gli esercizi (OIC 13). Costo Medio è il più usato nelle PMI.
Quanto spesso fare l'inventario?
Art. 2217 c.c.: almeno annualmente. Per molti articoli, consigliato inventario a rotazione (una categoria/mese).
Cosa significa “OBSOLETO” nella rotazione?
Indice < 1: l'articolo è stato scaricato meno di una volta nell'anno. Capitale immobilizzato: valutare promozioni, svalutazione (OIC 13) o rimozione.
L'analisi ABC si aggiorna automaticamente?
Sì, si ricalcola ogni volta che si apre il tab in base a giacenze e valori correnti.
Come gestisco i trasferimenti tra magazzini?
Tab Trasferimenti: selezionare origine, destinazione, articolo, quantità. Il sistema genera due movimenti (scarico + carico) automaticamente.
Ho sbagliato la quantita di un carico: elimino o storno?
Storna. Seleziona il movimento errato, premi “↵ Storna”: il sistema crea un movimento di rettifica di segno opposto che azzera l'effetto sulla giacenza. Il movimento originale resta tracciato. Poi registra il movimento corretto. Questo preserva la cronologia ed e il metodo contabilmente corretto. L'eliminazione e consentita solo sui movimenti manuali (non da documenti) e va usata per errori di inserimento immediati.
Posso eliminare un magazzino che ha giacenze?
Si, ma diventa un soft-delete: il magazzino viene nascosto dalle liste e disattivato, le giacenze e i movimenti storici restano intatti nel database. Se vuoi l'eliminazione fisica (definitiva), devi prima svuotarlo (le giacenze vanno trasferite altrove e i movimenti collegati eliminati/stornati); solo allora il bottone “Definitivo” nel cestino riuscira ad eliminarlo.
Chi ha chiuso l'inventario del mese scorso?
L'audit log degli inventari traccia la chiusura (transizione IN_CORSO → COMPLETATO) con utente e timestamp. Via API GET /api/magazzino/inventari/:id/audit-log, oppure osservando il campo utente sui movimenti di rettifica generati alla chiusura.
Come ricostruisco la storia di un articolo dal punto di vista del magazzino?
Nuovo endpoint 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.
Selezione multipla: posso stornare 50 movimenti di un colpo?
Si. Nel tab Movimenti spunta le righe (o usa la casella in testa per tutti i visibili), compare una barra blu con Storna e Elimina manuali. Lo storno genera 50 movimenti inversi in una sola operazione; i movimenti gia stornati vengono bloccati e riportati come tali. L'elimina-manuali cancella solo i movimenti senza documento collegato (gli altri restano intatti).
✓Certificazione v 2.2 — Presidi di compliance
🔑 Visibilità — Questo modulo è accessibile solo se:
• 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
⚠Riferimento: art. 2220 c.c. — le scritture ausiliarie di magazzino concorrono alla determinazione del reddito e soggiacciono agli stessi obblighi di conservazione.

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-magazzino.docx (cartella manuali).

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 DDTTipo movimento generatoSegno quantità
DDT di vendita (causale VENDITA)SCARICO_VENDITAnegativo (scarica)
DDT reso cliente (resoTipo RESO_CLIENTE)CARICO_RESO_CLIENTEpositivo (carica)
DDT reso fornitore (resoTipo RESO_FORNITORE)SCARICO_RESO_FORNnegativo (scarica)

Endpoint

  • POST /api/bollettazione/magazzino-auto/ddt/:docId [ADMIN] body {magazzinoId, forza?}
  • Scandisce documento_righe.voceCatalogoId e genera un record movimenti_magazzino per ogni riga con articolo di catalogo
  • Traccia l'esecuzione in log_magazzino_auto con array movimenti_generati[], esito (OK/ERRORE/SKIP), eventuale errore testuale
  • Il flag forza: true permette di rieseguire il trigger anche se un log OK esiste già (utile dopo correzioni)
ⓘLe righe senza 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.

CodiceTipoFotoSoglia approvazione
DANNEGGIATOSCARICO✓€ 100,00
OBSOLETOSCARICO—€ 500,00
FURTOSCARICO✓sempre (€ 0,01)
FURTO_ASSICURATOSCARICO✓sempre
SCADUTOSCARICO—€ 100,00
SOTTOINVENTARIOSCARICO—€ 200,00
SOVRAINVENTARIOCARICO—€ 200,00
CAMBIO_LOTTOCARICO——
RESO_CLIENTECARICO——
OMAGGIOSCARICO—€ 50,00
AUTOCONSUMOSCARICO—€ 100,00
DISTRUZIONE_CERTIFICATASCARICO✓sempre
PRODUZIONE_CARICO/SCARICOBI——
  • GET /api/magazzino-v11/causali-rettifica — elenco
  • POST /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.2
  • PUT /api/magazzino-v11/causali-rettifica/:id [ADMIN] — modifica soglia/foto/attivo
  • POST /api/magazzino-v11/movimenti/rettifica body {voceCatalogoId, magazzinoId, quantita, causaleRettificaId, motivazione, costoUnitario}
  • Se sogliaApprovazioneEur impostata e valore ≥ soglia, il movimento nasce in stato IN_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 approvazione
  • POST /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_allegati con tipo (FOTO/DOCUMENTO/CERTIFICATO_DISTRUZIONE/VERBALE)
  • POST /api/magazzino-v11/movimenti/:id/allegati form-data file + tipoAllegato + note
  • GET /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/:voceCatalogoId body {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=X
  • PATCH /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
ⓘRiordino davvero automatico: lo scheduler 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-data file (max 15 MB) + query tipoDefault + 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 + array caricoMovimentiIds[] sul documento della fattura di acquisto, per tracciabilità
ⓘIl pacchetto MAGAZZINO è ora completo sul fronte ALTA + MEDIA priorità. I residui BASSA sono stati chiusi nella 12ª ondata (vedere sezione sottostante).

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 globale
  • GET /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 decide
  • POST /api/magazzino-v12/listini-multi [ADMIN] — crea/duplica prezzo per magazzino specifico
  • PUT /api/magazzino-v12/listini-multi/:id [ADMIN] — modifica prezzo/date/magazzino
  • Response include matchType: SPECIFICO_MAGAZZINO o GLOBALE

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
StatoEventoChi può eseguire
RICHIESTOCreazione richiesta con righequalunque utente
APPROVATO/approvaADMIN
IN_TRANSITO/avvia — genera TRASFERIMENTO_OUToperatore
COMPLETATO/completa — genera TRASFERIMENTO_IN + rileva differenzeoperatore destinazione
RIFIUTATO/rifiuta con motivoADMIN
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/trasferimenti body {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/avvia body {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/completa body {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 differenza
  • POST /trasferimenti/:id/annulla [ADMIN] — da RICHIESTO, APPROVATO o IN_TRANSITO (la merce partita rientra)
  • GET /trasferimenti?stato=IN_TRANSITO&magazzinoOrigineId=X
  • GET /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_rettifica
  • categoriaVoceId (opzionale) — articoli di una categoria
  • magazzinoId (opzionale) — magazzino specifico
  • sogliaValoreEur (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 rettifica
  • priorita: numero intero — più basso vince (specificità maggiore)
Seed regole default
NomeTipoSogliaRuolo richiestoPriorità
Furti (qualsiasi importo)SCARICO_RETTIFICA€ 0,01ADMIN10
Carichi manuali > 5000 €CARICO_INIZIALE€ 5.000ADMIN30
Rettifiche > 1000 €SCARICO_RETTIFICA€ 1.000MANAGER (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} riattiva
  • DELETE /api/magazzino-v12/regole-approvazione/:id [ADMIN] — soft-delete (attivo = false)
  • POST /api/magazzino-v12/regole-approvazione/check body {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 bene
  • rma_pratiche.ddt_sostituzione_id — DDT con cui è stato spedito il bene sostitutivo
  • documenti.rmaPraticaId — riferimento inverso per navigazione rapida
Endpoint
  • GET /api/magazzino-v12/ddt-rma-link/ddt?q= — i DDT (di vendita e del fornitore, secondo tipi-documento.service.js) cercati per numero o intestatario
  • POST /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 pratica
  • DELETE /api/magazzino-v12/ddt-rma-link/:rmaId/reso|sostituzione [ADMIN] — toglie il collegamento dalla pratica e dal documento
  • GET /api/magazzino-v12/ddt-rma-link/rma/:rmaId — restituisce RMA + documenti collegati (ddtReso, ddtSostituzione, documentoOrigine, notaCredito) con numero, data, tipo, stato
  • GET /api/magazzino-v12/ddt-rma-link/documento/:docId — dato un documento trova la RMA collegata
  • POST /api/magazzino-v12/rma/:id/log-transizione — registra transizione di stato in rma_log_transizioni per audit
  • GET /api/magazzino-v12/rma/:id/log — storico transizioni di stato
ⓘIl pacchetto MAGAZZINO è ora completo end-to-end (ALTA + MEDIA + BASSA). I residui rimasti sono solo integrazioni esterne tipicamente facoltative: MES (Manufacturing Execution System) per produzione, WMS (Warehouse Management System) dedicato per grandi magazzini, scanner RFID fisici. Tutte le funzionalità applicative richieste dalla normativa italiana e dagli scenari commerciali standard sono coperte.

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 da GET /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
★Back-Order

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.