Modulo Produzione

Distinte base multi-livello, versioning, ordini di produzione e integrazione magazzino

v 2.2 Aprile 2026 Manuale Utente

Riferimenti normativi

A cosa serve questo modulo

Il modulo Produzione permette di:

1Panoramica del modulo

Il modulo si compone di due aree, accessibili dal gruppo MAGAZZINO della sidebar:

  • Distinte base — archivio delle ricette / formule / liste componenti.
  • Ordini produzione — lotti di produzione effettivi che consumano materie prime e generano prodotti finiti.

Le voci di catalogo coinvolte (prodotto finito, componenti, materie prime) sono quelle stesse usate in fatturazione, magazzino e DDT: nessun catalogo separato.

Integrazione HARD con magazzino: avviare un ordine di produzione genera realmente movimenti di magazzino (scarico materie). Completarlo genera realmente il carico del prodotto finito. Le giacenze sono sempre coerenti.
2Distinte base — concetti chiave

Una distinta base è la "ricetta" che descrive come si ottiene un prodotto finito. È composta da:

CampoSignificato
CodiceIdentificativo univoco (es. DB-PROD-001)
DescrizioneNome operativo della distinta
Prodotto finitoVoce di catalogo che si ottiene (FK a Catalogo)
Resa previstaQuanto prodotto si ottiene (es. 1 per "ricetta da 1 unità", 10 per "lotto da 10 kg")
UMUnità di misura della resa (PZ, KG, LT…)
Versione correnteNumero progressivo della formulazione
StatoBOZZA / ATTIVA / OBSOLETA

Stati di una distinta

  • BOZZA: in costruzione, non utilizzabile per generare ordini di produzione. Modifiche libere senza versioning.
  • ATTIVA: pronta all'uso. Solo le distinte attive possono essere usate in un ordine. Ogni modifica genera automaticamente uno snapshot della versione precedente.
  • OBSOLETA: dismessa, conservata per sola consultazione storica.

Componenti (righe della distinta)

Ogni riga rappresenta una materia prima o un sotto-componente:

CampoSignificato
ComponenteVoce di catalogo (può essere materia prima o un altro prodotto con sua distinta)
QtyQuantità di componente per una unità di resa
UMUnità di misura della componente (KG, LT, PZ…)
Scarto %Spreco/calo previsto. Esempio: 5 = il 5% di scarto applicato in fase di scarico
SequenzaOrdine di visualizzazione nella distinta
3Creare una distinta base
  1. Apri il menu MAGAZZINO → Distinte base.
  2. Premi + Nuova distinta.
  3. Compila l'intestazione: codice, descrizione, prodotto finito (selezionato dal catalogo), resa prevista (es. 1 per ricetta unitaria), UM.
  4. Premi + Aggiungi riga per ogni componente. Per ogni riga compila il componente (catalogo), la quantità e l'eventuale scarto%.
  5. Salva. La distinta nasce in stato BOZZA.
  6. Quando hai verificato la formula, cambia lo stato in ATTIVA e salva. Da questo momento il versioning è attivo.
Le frecce su/giù accanto a ogni riga permettono di riordinare i componenti in fase di stampa o di esplosione.
4Distinte multi-livello

Un componente di una distinta può a sua volta essere il prodotto finito di un'altra distinta ATTIVA. In questo caso si parla di distinta multi-livello.

Esempio: una crema cosmetica usa una "base oleosa" come componente. La base oleosa è essa stessa un prodotto con la sua distinta (olio + emulsionante + conservante). Quando si esplode la distinta della crema, il sistema scende ricorsivamente nelle sotto-distinte fino ad arrivare alle materie prime foglia (quelle senza distinta).

OperazioneComportamento multi-livello
Esplosione distinta padreEsplode anche le sotto-distinte ATTIVE; le quantità vengono moltiplicate e consolidate
Avvio ordine di produzioneScarica solo le materie prime foglia (sotto-componenti che hanno distinta non vengono scaricati: il loro consumo viene risolto al livello più basso)
Componente con stessa qty richiesta da rami diversiLe quantità vengono sommate nella tabella materie prime piatta
Anti-ciclo: il sistema rileva eventuali cicli (distinta A include B, B include A) e blocca l'esplosione segnalando l'errore. Mai eseguire un ordine se l'esplosione segnala "ciclo rilevato".
5Versioning automatico

Quando una distinta è in stato ATTIVA e viene modificata e salvata, il sistema:

  1. Crea uno snapshot completo della distinta corrente (intestazione + tutte le righe) e lo archivia in storico con la data di validità.
  2. Incrementa il numero di versione (v1 → v2).
  3. Applica le modifiche alla distinta corrente.

Nel form distinta, il tab "Storico versioni" mostra tutte le versioni precedenti con motivo, data e composizione esatta delle righe. È possibile aggiungere un "Motivo" testuale al salvataggio (campo nel banner giallo del tab Definizione).

Tracciabilità storica: ogni ordine di produzione registra la versione esatta della distinta usata al momento dell'avvio. Anche se la distinta viene poi modificata, l'ordine resta legato alla versione di riferimento per l'audit trail.
6Esplosione distinta

L'esplosione (tab "Esplosione" del form distinta) calcola il fabbisogno totale di materie prime per produrre una determinata quantità di prodotto finito:

  1. Apri la distinta.
  2. Clicca sul tab Esplosione.
  3. Inserisci la quantità da produrre (es. 10).
  4. Premi Esplodi distinta.

Vengono mostrati due output:

  • Tabella materie prime totali: lista piatta consolidata di quanto serve di ogni materia prima foglia, con scarto già applicato.
  • Albero completo: visualizzazione gerarchica con indentazione, utile per capire il percorso multi-livello.

Esempio: distinta DB-001 con 2 righe (2.5 KG di COMP-A scarto 5% + 0.8 LT di COMP-B scarto 2%) ed esplosione con quantità 10 produce:

ComponenteCalcoloQuantità con scarto
COMP-A (KG)2.5 × 10 = 25 + 5% scarto26.25 KG
COMP-B (LT)0.8 × 10 = 8 + 2% scarto8.16 LT
7Ordini di produzione — workflow

Un ordine di produzione rappresenta un lotto reale da produrre. Attraversa 4 stati ben definiti:

Step 1
PIANIFICATO
Ordine creato, materie ancora a magazzino. Modificabile.
Step 2
IN_CORSO
Avviato. Materie scaricate. Non modificabile.
Step 3
COMPLETATO
Prodotto finito caricato. Costo consolidato.
Alt
ANNULLATO
Cancellato. Storni automatici se IN_CORSO.

Creazione di un ordine

  1. Apri il menu MAGAZZINO → Ordini produzione.
  2. Premi + Nuovo ordine.
  3. Seleziona una distinta in stato ATTIVA.
  4. Specifica la quantità da produrre.
  5. (Opzionale) Note operative o riferimento lotto.
  6. Premi Crea ordine. Il numero (es. PRD-00001) è generato automaticamente.
8Avvio: scarico HARD materie

Premendo "Avvia produzione" sul dettaglio di un ordine PIANIFICATO:

  1. Il sistema esplode la distinta per la quantità prevista.
  2. Per ogni materia prima foglia crea un movimento di magazzino di tipo SCARICO_PRODUZIONE con causale "Produzione PRD-NNNNN".
  3. Il costo unitario è preso dal campo prezzoAcquisto del catalogo (se valorizzato).
  4. Il costo materie totale viene calcolato e salvato sull'ordine.
  5. Lo stato passa a IN_CORSO e viene impostata la data inizio.
Attenzione: l'avvio comporta movimenti di magazzino reali. Se le giacenze non sono sufficienti, dipendentemente dalla configurazione magazzino il movimento potrebbe portare giacenza negativa. Verifica le giacenze prima di avviare un ordine importante.

Tutti i movimenti generati sono visibili nel tab Movimenti del dettaglio ordine, con badge rosso "PRELIEVO" e link al numero del movimento di magazzino corrispondente.

9Completamento: carico HARD prodotto finito

Premendo "Completa produzione" sul dettaglio di un ordine IN_CORSO:

  1. Specifica la quantità effettivamente prodotta (può differire da quella prevista per via di rese effettive diverse).
  2. Il sistema crea un movimento di magazzino di tipo CARICO_PRODUZIONE per il prodotto finito.
  3. Il costo unitario del prodotto finito è calcolato come: costo materie totale / quantità prodotta.
  4. Il costo totale viene salvato sull'ordine; lo stato passa a COMPLETATO e viene impostata la data fine.
Se la resa effettiva è inferiore al previsto, il costo unitario del prodotto finito risulterà più alto. È normale e riflette correttamente il consumo reale di materie.
10Annullamento e storni

L'annullamento è disponibile dal dettaglio ordine. Comportamento differente in base allo stato corrente:

Stato correnteEffetto dell'annullamento
PIANIFICATOStato → ANNULLATO. Nessun movimento di magazzino (non ce n'erano).
IN_CORSOStato → ANNULLATO. Per ogni PRELIEVO viene creato un movimento di CARICO_RETTIFICA di pari quantità che storna lo scarico originale (giacenze ripristinate).
COMPLETATOBloccato: non è consentito annullare via UI un ordine già chiuso. È necessario lo storno manuale dal modulo magazzino.

Al momento dell'annullamento è richiesto un motivo testuale (es. "errore nei dosaggi", "cliente ha cancellato l'ordine") che viene aggiunto alle note dell'ordine per audit trail.

Eliminazione: un ordine può essere cancellato definitivamente dal database solo se è in stato PIANIFICATO o ANNULLATO. Gli ordini IN_CORSO o COMPLETATO non sono mai cancellabili (preservazione audit trail fiscale e operativo).
11Tracciabilità lotti FEFO

Il sistema gestisce tracciabilità completa dei lotti dal componente al prodotto finito.

Logica FEFO (First Expired First Out)

Quando un ordine viene avviato, per ogni materia prima il sistema cerca i lotti attivi e li consuma in ordine di scadenza (i più vicini a scadere per primi). Se un lotto non basta a coprire la quantità richiesta, il prelievo passa al lotto successivo. Ogni movimento di scarico è collegato al lotto specifico.

Lotto del prodotto finito

Al completamento di un ordine viene generato automaticamente un nuovo lotto per il prodotto finito, con:

  • Numero lotto: di default uguale al numero ordine (PRD-NNNNN), modificabile
  • Data produzione: data/ora del completamento
  • Data scadenza: opzionale, inseribile dall'operatore
  • Costo unitario: calcolato dividendo il costo totale per la quantità prodotta

Annullamento con ripristino lotti

Annullare un ordine in stato IN_CORSO ripristina automaticamente la quantitaResidua dei lotti scaricati, generando movimenti di CARICO_RETTIFICA di storno legati ai movimenti originali.

12Where-used (esplosione inversa)

Il tab "Dove usato" del form distinta mostra in quali altre distinte è impiegato il prodotto finito di quella corrente.

Si distingue tra:

  • Uso diretto (livello 1): distinte che hanno il prodotto come componente di una riga
  • Uso indiretto multi-livello (livello 2+): catena di sub-distinte fino al prodotto finale

Utile per analisi impatto di una modifica formula, sostituzione componente, eliminazione voce.

13Pick list stampabile

Per ogni ordine PIANIFICATO è disponibile la lista di prelievo stampabile (icona "Stampa pick list" nelle azioni del dettaglio).

La pick list:

  • Simula il FEFO senza eseguire scarico
  • Indica per ogni materia prima i lotti suggeriti con qty da prelevare
  • Segnala in rosso eventuali scoperti (giacenza insufficiente)
  • Layout print-friendly (CSS @media print) con spazi firma magazziniere + responsabile
14Verifica giacenze pre-avvio

Aprendo un ordine PIANIFICATO il sistema esegue automaticamente un controllo disponibilità di tutte le materie prime previste.

Il banner sopra le azioni mostra:

  • Verde: tutte le giacenze sufficienti
  • Rosso: tabella dettaglio con qty richiesta, disponibile, scoperto per ogni materia mancante

Se l'utente preme "Avvia produzione" con scoperto, il sistema mostra un dialog di conferma con il dettaglio degli scoperti prima di procedere (le giacenze diventerebbero negative).

15Centri di lavoro & cicli di lavorazione

Il modulo Centri di lavoro (sidebar MAGAZZINO → Centri di lavoro) permette di configurare le risorse di produzione: macchine, reparti, operatori, fornitori esterni.

Parametri di un centro di lavoro

  • Codice/descrizione/tipo: identificativi
  • Capacità giornaliera: ore disponibili al giorno
  • Costo orario macchina + Costo orario manodopera: usati per valorizzare la produzione
  • Efficienza %: per stime di tempi reali (default 100%)
  • Calendario eccezioni: chiusure, ferie, manutenzione, turni extra

Cicli di lavorazione sulla distinta

Il tab "Cicli di lavorazione" della distinta permette di definire le fasi:

CampoSignificato
SequenzaOrdine di esecuzione
DescrizioneEs. Pesatura, Miscelazione, Confezionamento
Centro di lavoroFK al centro che esegue la fase
Tempo setup (min)Tempo fisso di preparazione macchina
Tempo unitario (min/u)Tempo per ogni unità prodotta
Costo orario overrideSovrascrive il costo del centro (opzionale)
ObbligatoriaSe può essere saltata o no

Workflow per fase nell'ordine

Quando si crea un ordine, le fasi della distinta vengono fotografate insieme al centro di lavoro associato e ai costi orari del momento. Per ogni fase:

  1. Avvia fase: stato PIANIFICATA → IN_CORSO, registra dataInizio + operatore
  2. Completa fase: chiede tempo effettivo (default = differenza ora-avvio), calcola costoEffettivo = (tempo / 60) × costoOrario
  3. I tempi e i costi sono visibili nella sezione "Fasi di lavorazione" del dettaglio ordine

Al completamento dell'ordine, il costo manodopera totale sommato delle fasi viene aggiunto al costo materie per costituire il costo totale.

16Componenti alternativi (sostituzioni)

Per ogni riga distinta è possibile definire una lista di componenti alternativi con un fattore di conversione.

Esempio: la riga prevede 2.5 KG di COMP-A. Se al magazzino non ce n'è abbastanza, il sistema può prelevare:

  • COMP-A2 con fattore 1.0 (equivalente uno-a-uno)
  • COMP-A3 con fattore 1.2 (servono 3 KG di A3 per equivalere a 2.5 KG di A)

Gli alternativi sono provati in ordine di sequenza solo dopo che il FEFO sulla materia principale ha esaurito le giacenze. La logica funziona per le righe DIRETTE della distinta dell'ordine (non per livelli sub-distinta).

17Quality control (Quality gate)

Il tab "Qualità" della distinta permette di definire specifiche di qualità che devono essere verificate prima del completamento di un ordine.

Tipi di specifica

  • NUMERICO: valore numerico, esito conforme se compreso tra Min e Max
  • RANGE: come NUMERICO, con range obbligatorio
  • BOOLEAN: true/false, conforme se valore atteso
  • TESTO: stringa, conforme se identica al valore atteso

Test sull'ordine

Nel dettaglio ordine in stato IN_CORSO appare la sezione "Quality control": per ogni specifica si registra il valore misurato. L'esito può essere automatico (per NUMERICO/RANGE) o forzato dall'operatore.

Quality gate al completamento

Il completamento dell'ordine è bloccato se una o più specifiche obbligatorie non hanno test conforme. Il sistema risponde con HTTP 409 + lista delle specifiche mancanti.

18By-product / Co-product

La distinta può prevedere output secondari (oltre al prodotto principale): co-prodotti valorizzabili o scarti.

Per ogni by-product si definisce:

  • Voce catalogo: il prodotto secondario
  • Quantità per unità: quanto se ne ottiene per ogni unità di prodotto principale
  • UM: unità di misura del by-product
  • % costo allocato: percentuale del costo totale allocata al by-product (per coproduzioni)
  • Tipo: CO_PRODUCT (con valore) o SCARTO (tipicamente 0%)

Al completamento dell'ordine, oltre al carico del prodotto principale, vengono generati carichi separati per ogni by-product attivo. Il valore del prodotto principale viene scalato della percentuale totale allocata ai by-product.

19ECO workflow (Engineering Change Order)

Per modifiche distinta soggette ad approvazione formale (es. cambio formula in industria regolamentata), si usa il workflow ECO.

Stati ECO

BOZZA → IN_APPROVAZIONE → APPROVATO o RESPINTO → APPLICATO

Flusso operativo

  1. Crea ECO in BOZZA con titolo, descrizione e motivazione (snapshot della distinta corrente memorizzato)
  2. Submit per richiedere approvazione (BOZZA → IN_APPROVAZIONE)
  3. Un secondo utente approva o respinge (con motivo)
  4. Se APPROVATO, "Applica": le modifiche entrano in produzione, viene creato uno snapshot della versione precedente, l'ECO passa a APPLICATO

Gli ECO RESPINTI restano in storico per audit. Gli ECO BOZZA o RESPINTI possono essere eliminati definitivamente.

20Allegati distinta

Il tab "Allegati" permette di registrare riferimenti a documenti collegati alla distinta:

  • Disegni tecnici CAD
  • Schede di sicurezza materiali
  • Certificati di analisi (COA)
  • Procedure operative standard (SOP)
  • Fotografie del prodotto finito

Per ogni allegato si registra: nome, tipo, URL/path, descrizione. Per ora gli allegati sono link a risorse esterne o path locali; l'upload diretto del file dal browser è una funzionalità futura.

21Effectivity dating (validità temporale per riga)

Ogni riga della distinta può avere date di validità "Valido dal" e "Valido al".

L'esplosione della distinta filtra automaticamente le righe attive alla data di riferimento (default = oggi). Permette transizioni progressive di formula:

  • Vecchia versione di un componente: valido al = data di transizione
  • Nuova versione del componente: valido dal = data di transizione

Più granulare del versioning ECO globale: lavora a livello di singola riga con effetto temporale.

22Backflushing (scarico al completamento)

Modalità alternativa al flusso standard, attivata sull'ordine al momento della creazione.

ModalitàQuando avviaQuando completa
STANDARDScarica le materie primeCarica solo prodotto finito
BACKFLUSHSolo cambio stato (no scarico)Scarica materie + carica prodotto finito (in unica transazione)

BACKFLUSH è utile in linee di produzione veloci dove non c'è tempo per gestire i prelievi all'avvio: il sistema deduce a posteriori cosa è stato consumato sulla base della distinta + qty effettivamente prodotta.

23KPI dashboard produzione

La pagina "KPI Produzione" (sidebar MAGAZZINO) mostra metriche aggregate per il periodo selezionato (default: ultimi 30 giorni).

Indicatori

  • Ordini per stato: totale, completati, in corso, pianificati, annullati
  • Success rate: % completati su totale
  • Annullamento rate: % annullati su totale
  • Lead time medio: giorni medi tra dataInizio e dataFine per ordini completati
  • Costo unitario medio: costo per unità prodotta (tutti gli ordini completati)
  • Throughput giornaliero: numero ordini completati per giorno (grafico a barre)
  • Top 5 prodotti: per quantità totale prodotta nel periodo
  • Conformità qualità: % test qualità conformi su tutti i test eseguiti
24Pick list materie prime

Documento operativo per il magazziniere che effettua il prelievo. Disponibile per ordini in stato PIANIFICATO dal pulsante "Stampa pick list" nelle azioni del dettaglio ordine.

Contenuto:

  • Testata ordine (numero, distinta, prodotto finito, qty)
  • Per ogni materia prima: codice, descrizione, qty totale, lotto FEFO suggerito (con scadenza), qty da prelevare
  • Sotto-righe se servono più lotti per coprire la qty
  • Avviso "scoperto" in rosso se giacenza insufficiente
  • Spazi per firma magazziniere e responsabile produzione

La stampa simula il FEFO senza eseguire scarico (read-only) — i lotti effettivi verranno scaricati al momento dell'avvio dell'ordine.

25Bolla di lavorazione

Documento cartaceo da consegnare al reparto produzione. Disponibile per ordini in PIANIFICATO e IN_CORSO.

Contenuto:

  • Intestazione con numero ordine, distinta, prodotto finito, qty prevista, data inizio prevista
  • Sezione 1: tabella componenti da prelevare con qty per ordine, UM, spazio per scrivere il numero lotto consumato e checkbox di conferma
  • Sezione 2: tabella fasi di lavorazione con tempo previsto, spazi per registrare orario inizio reale, orario fine reale, operatore e firma
  • Spazi per firma magazziniere, capo turno, responsabile produzione

L'operatore compila a mano la bolla durante la produzione; i dati possono essere poi inseriti nel sistema (avvia/completa fasi).

26Etichetta lotto prodotto finito (QR)

Etichetta adesiva formato 100×60 mm da applicare al pallet/scatola del prodotto finito. Disponibile dopo il completamento dell'ordine (richiede numeroLottoFinito valorizzato).

Contenuto:

  • Header con cliente "NOX Enterprise" + numero ordine
  • Codice prodotto + descrizione
  • Numero lotto, quantità, data produzione, scadenza (in rosso)
  • QR code 26×26 mm con payload: LOTTO=…|PROD=…|QTA=…|ORDINE=…|SCAD=…
  • Riga di payload testuale leggibile sotto al QR

Selettore "Copie": stampa più etichette identiche (1-20) sul foglio A4 (5 etichette per foglio in layout 2 colonne).

Il QR è generato tramite servizio esterno api.qrserver.com: è necessaria connessione internet al momento della stampa. La connessione fra QR e i dati del sistema permette tracciabilità rapida con scanner.

27Scheda di produzione (audit trail end-of-job)

Documento di riepilogo completo a chiusura ordine, da archiviare nel fascicolo qualità. Disponibile per ordini COMPLETATO.

Contenuto:

  1. Materie prime consumate: tutti i prelievi reali con lotto, qty, costo unitario e valore — totale costo materie
  2. Fasi di lavorazione eseguite: descrizione, centro, operatore, tempo previsto vs effettivo, costo orario, costo effettivo — totale manodopera
  3. Quality control: tutte le specifiche con valore misurato, esito (CONFORME/NON CONFORME), eseguito da chi
  4. Carico a magazzino: prodotto finito + eventuali by-product/scarti
  5. Riepilogo costi finali: materie + manodopera = costo totale → costo unitario prodotto
  6. Note operative

Spazi firma per responsabile produzione e responsabile qualità. Footer con data/ora di stampa per traccia.

28Sicurezza, ruoli e privilegi (chi può fare cosa)

Il modulo Produzione è protetto da un sistema di controllo a tre strati che il sistema valuta in AND per ogni operazione critica. Tutti e tre devono passare perché l'azione vada a buon fine.

  1. Ruolo base dell'utente (USER, OPERATOR, ADMIN, SUPERADMIN) — lo strato più ampio, valido per tutta la piattaforma.
  2. Privilegi Produzione (per singolo utente) — PRODUCTION_MANAGER, QUALITY_MANAGER, OPERATOR_PROD.
  3. Permessi del ruolo nel workspace (per coppia ruolo+azienda) — configurabili dal SUPERADMIN.

Strato 2: Privilegi Produzione (per singolo utente)

Riquadro lilla in Modifica Utente. Implementa la Separation of Duties tipica delle linee industriali: persone diverse svolgono compiti diversi, e nessuno può auto-autorizzare la propria operazione.

PrivilegioCosa abilita in Produzione
PRODUCTION_MANAGER Creazione/modifica distinte; avvio, completamento, annullamento ordini; applicazione ECO; ripristino dal cestino produzione.
QUALITY_MANAGER Approvazione e respingimento ECO (su utenti diversi dal proponente); registrazione e forzatura dell'esito dei test qualità.
OPERATOR_PROD Avvio e chiusura delle singole fasi sui propri ordini.

I privilegi sono per singolo utente: in uno stesso workspace puoi avere Mario USER con QUALITY_MANAGER, Luigi USER con OPERATOR_PROD e Giovanni ADMIN con PRODUCTION_MANAGER. Senza il privilegio appropriato un USER non può toccare nulla in produzione. ADMIN e SUPERADMIN bypassano sempre i controlli di privilegio.

Il default per ogni utente nuovo è nessun privilegio attivo. Vanno assegnati esplicitamente da chi ha il diritto di modificare la scheda utente.

Strato 3: Permessi del ruolo nel workspace

Riquadro arancio in Modifica Utente. Permette al SUPERADMIN di vietare un'intera azione a tutti gli utenti dello stesso ruolo nello stesso workspace, indipendentemente dai privilegi che possiedono individualmente.

Le chiavi che riguardano la produzione:

ChiaveRuoloEffetto se disabilitata
produzione.ordini.completaADMINGli ADMIN del workspace non possono completare ordini, neanche con il privilegio.
produzione.eco.approvaADMINGli ADMIN non possono approvare/respingere ECO.
cestino.ripristinaADMINGli ADMIN non possono ripristinare dal cestino produzione.
produzione.fasi.avvia_completaOPERATORGli OPERATOR del workspace non possono più aprire/chiudere fasi.
produzione.ordini.consultaOPERATORGli OPERATOR non vedono più gli ordini in consultazione.
quality.test.registraOPERATORGli OPERATOR non possono più registrare test qualità.
picking.gestisciOPERATORGli OPERATOR non possono più gestire pick list e prelievi.

Il default per ogni nuovo workspace è tutto abilitato: il SUPERADMIN deve intervenire esplicitamente per restringere i compiti di un ruolo. Le modifiche valgono per tutti gli utenti del ruolo nello stesso workspace.

Differenza pratica con un esempio

Scenario: il workspace "Studio Bianchi" ha 3 USER. Il responsabile vuole che solo Mario possa registrare i test qualità, e che nessun USER possa applicare ECO.
  • Per il primo obiettivo — assegnare il privilegio QUALITY_MANAGER solo all'utente Mario nella sezione lilla. Lasciare il permesso ruolo quality.test.registra abilitato.
  • Per il secondo obiettivo — non c'è bisogno di toccare i privilegi: gli USER non hanno comunque PRODUCTION_MANAGER. Per blindare ulteriormente, il SUPERADMIN può disabilitare il permesso ruolo USER produzione.eco.approva.
Risultato: Mario può registrare test, gli altri due USER no. Nessun USER può applicare ECO.

Operazioni e relativi controlli

OperazionePrivilegio richiestoPermesso ruolo richiestoFirma elettronica
Avviare un ordinePRODUCTION_MANAGERproduzione.ordini.completa
Completare un ordinePRODUCTION_MANAGERproduzione.ordini.completaSì (password)
Avviare/chiudere una faseOPERATOR_PROD o PRODUCTION_MANAGERproduzione.fasi.avvia_completa
Approvare un ECOQUALITY_MANAGER + utente diverso dal proponenteproduzione.eco.approva
Applicare un ECOPRODUCTION_MANAGERSì (password)
Registrare un test qualitàQUALITY_MANAGERquality.test.registra
Eliminare definitivamente dal cestinoSì + solo SUPERADMIN

Audit log strutturato

Ogni transizione di stato critica viene registrata nella tabella LogProduzione con timestamp, utente, ruolo, IP, user-agent, evento, entità coinvolta, ID, dettaglio JSON specifico dell'evento e flag firmaElettronica. Il log non è cancellabile dall'interfaccia ed è consultabile dal SUPERADMIN nella pagina Cestino & Audit Produzione (tab "Log audit").

Come accedere al Cestino & Audit Produzione

La pagina del cestino unificato di produzione (route /produzione/cestino) raggruppa in un'unica vista i record soft-cancellati di distinte base, ordini di produzione, centri di lavoro e ECO, oltre al log degli eventi di produzione. Da aprile 2026 non è più presente come voce nella sidebar: si accede tramite il bottone secondario "🗑 Cestino & Audit" presente in alto a destra delle 3 liste:

  • Sidebar » Distinta Base Industriale » Distinte base » bottone "🗑 Cestino & Audit"
  • Sidebar » Distinta Base Industriale » Ordini produzione » bottone "🗑 Cestino & Audit"
  • Sidebar » Distinta Base Industriale » Centri di lavoro » bottone "🗑 Cestino & Audit"

Tutti e tre i bottoni puntano alla stessa pagina; al suo interno trovi i tab per ciascuna entità e per il log audit. Questo design contestuale evita che utenti senza interesse alla governance vedano la voce nel menu, e consente al gestore di aprire il cestino dal modulo di partenza.

L'eliminazione definitiva dal cestino di produzione è riservata al SUPERADMIN, richiede firma elettronica e non può essere delegata via privilegi o permessi del ruolo. ADMIN e PRODUCTION_MANAGER possono ripristinare dal cestino, mai eliminare in modo definitivo.
29Note operative (modulo Note trasversale)

Da aprile 2026 ogni ordine di produzione, distinta base, documento, soggetto e voce di catalogo ha un pannello Note floating ancorato all'entità corrente, utile per tracciare osservazioni, comunicazioni interne, promemoria operativi, anomalie riscontrate. Il pannello si presenta come un "post-it giallo" interattivo che galleggia sopra la pagina, ridimensionabile e trascinabile.

Dove si trova

  • Ordine di produzione — nella scheda dettaglio (entità ORDINE_PRODUZIONE)
  • Distinta base — nel form distinta (entità DISTINTA_BASE, solo dopo il primo salvataggio)
  • Documento — nel form di modifica documento (entità DOCUMENTO)
  • Soggetto — nella scheda soggetto (entità SOGGETTO, solo dopo il primo salvataggio)
  • Voce di catalogo — nel modale di modifica voce (entità CATALOGO)

Come si presenta e si usa

All'apertura della scheda il pannello appare minimizzato come fascia gialla 240×42 px ancorata alla topbar dell'app, centrata orizzontalmente. Per la modale Documento, la fascia si centra invece sulla barra blu della topbar del modale (a 4 mm dal bordo superiore della barra blu), affianco al numero documento. Al suo interno: icona post-it, titolo, contatore delle note esistenti, freccia expand_more.

Per espanderlo, clicca:

  • sulla freccia expand_more in alto a destra del pannello, oppure
  • su qualsiasi punto della fascia (titolo, area libera dell'header).

Espanso, il pannello si posiziona floating al centro del viewport (460×70vh di default, ridimensionabile). Mostra l'elenco note ordinato dalle più recenti, ciascuna con autore, data, eventuale flag "(modif.)", e icone modifica/elimina visibili solo al proprietario o ad amministratori.

Per scrivere una nota nuova: testo nel box giallino in alto + bottone + Aggiungi (sempre cliccabile, validazione testo non vuoto via snackbar) oppure scorciatoia Cmd/Ctrl + Invio.

Trascinare, ridimensionare, minimizzare, memoria posizione

  • Trascinare (espanso): afferra il pannello da qualsiasi punto della cornice gialla (header, area lista, sfondo) e spostalo dove preferisci nel viewport. Il cursore diventa grab/grabbing.
  • Trascinare (minimizzato): la fascia gialla è trascinabile come il pannello espanso. Spostandola, la posizione viene memorizzata in localStorage con chiave note-panel-pos:<ENTITA>:<ID>. Riaprendo lo stesso documento/ordine la fascia ricompare nella posizione che avevi scelto. Posizioni separate per ogni record (es. ordine #42 e ordine #43 hanno posizioni indipendenti).
  • Ridimensionare: handle nativo del browser in basso a destra del pannello espanso (clicca e trascina) per cambiare larghezza e altezza. Min 280×160 px, max larghezza 100% del viewport, max altezza 70% del viewport.
  • Minimizzare: freccia expand_less in alto a destra del pannello espanso, oppure click su area libera dell'header (titolo o sfondo). Il pannello torna fascia. Click "fantasma" dopo drag (entro 280 ms) automaticamente ignorato per non scatenare toggle accidentali al rilascio del trascinamento.

Cestino note (ADMIN/SUPERADMIN)

A pannello espanso, gli amministratori vedono un'icona delete_outline nell'header che apre la vista cestino: elenco delle note soft-cancellate (con sfondo rosa pallido, testo barrato e badge "🗑 cancellata gg/mm/aa"). Da qui è possibile ripristinarle con il bottone verde restore_from_trash. Si torna alle note attive con il bottone arrow_back.

Permessi di scrittura, modifica e cancellazione

OperazioneChi può farlaNote
Vedere le note Chiunque abbia accesso al workspace Le note sono filtrate per workspace dell'utente loggato.
Creare una nota Chi ha il permesso del ruolo note.crea attivo Configurabile per ogni (workspace, ruolo) dal SUPERADMIN. Default acceso per OPERATOR; ADMIN/USER fanno passthrough (default true).
Modificare una nota Solo il proprietario o un ADMIN/SUPERADMIN L'icona "matita" appare solo se hai diritto.
Eliminare una nota Solo il proprietario o un ADMIN/SUPERADMIN Soft-delete: la nota resta in DB con cancellatoIl valorizzato e va nel cestino note (vista ADMIN).
Vedere e ripristinare il cestino Solo ADMIN/SUPERADMIN Toggle nell'header del pannello (delete_outline).

Audit log dei CRUD note

Ogni operazione sul modulo Note è tracciata in audit_log con utente, ruolo, IP, user-agent e snapshot prima/dopo. Azioni registrate:

  • CREATE_NOTA — alla creazione
  • UPDATE_NOTA — alla modifica del testo
  • DELETE_NOTA — al soft-delete
  • RESTORE_NOTA — al ripristino dal cestino

Consultabile dalla pagina Amministrazione di Sistema » Audit Log (/admin/audit-log) filtrando l'entità Note.

Endpoint REST

  • GET /api/note?entita=ORDINE_PRODUZIONE&entitaId=42 — lista note ancorate a una specifica entità
  • GET /api/note/_/cestino — lista note soft-cancellate (solo ADMIN+)
  • POST /api/note body { testo, entita, entitaId } — crea (richiede note.crea)
  • PUT /api/note/:id body { testo } — modifica (proprietario o ADMIN+)
  • DELETE /api/note/:id — soft-delete (proprietario o ADMIN+)
  • POST /api/note/:id/ripristina — ripristino dal cestino (solo ADMIN+)

Schema dati

Tabella Note presente in tutti gli 8 DB workspace, con campi: id, testo, entita, entitaId, autoreId, autoreUsername, workspaceId, cancellatoIl, createdAt, updatedAt. Indici su (entita, entitaId), autoreId, workspaceId e indice parziale WHERE cancellatoIl IS NULL per le note attive. Entità supportate: DOCUMENTO, ORDINE_PRODUZIONE, SOGGETTO, DISTINTA_BASE, CATALOGO, GENERICO.

Le note non sostituiscono l'audit log automatico (audit_log o LogProduzione) che registra eventi di sistema; sono pensate come annotazioni libere di tipo "post-it" che gli utenti scrivono e leggono spontaneamente.
FFAQ
Posso usare una distinta in stato BOZZA per creare un ordine?
No. Solo le distinte ATTIVE possono generare ordini di produzione. Cambia lo stato a ATTIVA quando la formula è verificata e pronta.
Cosa succede se modifico una distinta dopo aver creato ordini con la versione precedente?
Nulla di problematico. Ogni ordine memorizza il numero di versione usato al momento della creazione. La versione precedente resta archiviata in "Storico versioni" e l'ordine continua a fare riferimento ai dati corretti.
Posso modificare le righe di un ordine già creato?
No, le righe (componenti) non sono modificabili sull'ordine: vengono "fotografate" dalla distinta al momento dell'avvio. Puoi modificare la testata (qty prevista, data inizio, note) solo finché lo stato è PIANIFICATO. Per cambiare i componenti devi annullare l'ordine, modificare la distinta, e creare un nuovo ordine.
Cosa succede se le giacenze di una materia prima sono insufficienti?
Il movimento di scarico viene comunque creato (la giacenza diventa negativa). Verifica preventivamente le disponibilità con l'esplosione distinta: confronta le quantità della tabella "Materie prime totali" con le giacenze attuali nel modulo Magazzino.
Posso eliminare definitivamente un ordine annullato?
Sì, gli ordini in stato PIANIFICATO o ANNULLATO possono essere cancellati con il pulsante "cestino" nella lista. I movimenti di storno restano comunque in magazzino per audit trail.
Come si calcola il costo del prodotto finito?
All'avvio l'ordine somma i costi delle materie prime (qty con scarto × prezzoAcquisto del catalogo). Al completamento il costo unitario del prodotto finito è: costo materie totale ÷ quantità effettivamente prodotta. Questo è il costo memorizzato nel movimento di carico.
L'esplosione distinta vede gli ordini di produzione futuri?
No, l'esplosione è puramente sulla distinta (formula). Per pianificazione MRP / fabbisogno totale tenendo conto degli ordini futuri usa il modulo MRP (Magazzino → MRP — Riordino auto).
Posso fare partial-completion (completare solo metà dell'ordine)?
Non in questa versione. Un ordine si completa con un'unica operazione. Se serve frazionare la produzione di un grosso lotto, crea più ordini distinti con quantità minori.