Modulo Produzione
Distinte base multi-livello, versioning, ordini di produzione e integrazione magazzino
Riferimenti normativi
- Art. 2214 Codice Civile — Libri obbligatori dell'imprenditore commerciale: obbligo di tenere il libro giornale, il libro degli inventari e «le altre scritture contabili che siano richieste dalla natura e dalle dimensioni dell'impresa» — tra cui rientrano i registri di produzione e magazzino. Il modulo Produzione, integrato con Magazzino, produce automaticamente i movimenti di scarico materie e carico prodotto finito che alimentano queste scritture.
- Art. 2220 Codice Civile — Conservazione delle scritture contabili: dieci anni dalla data dell'ultima registrazione. Le distinte base versionate, gli ordini di produzione, i movimenti di magazzino derivati e gli ECO sono conservati nel database e replicati nei backup periodici.
- Art. 14 DPR 600/1973 — Scritture contabili obbligatorie: per le imprese in contabilità ordinaria con ricavi superiori a € 5.164.568,99 vige l'obbligo del registro di carico/scarico delle materie prime. La sequenza ordine→avvio→completamento del modulo genera in automatico i movimenti tipizzati (SCARICO_PRODUZIONE, CARICO_PRODUZIONE) che soddisfano questa esigenza.
- Art. 39 DPR 600/1973 — Determinazione del reddito d'impresa: rilevanza fiscale del costo del venduto e delle rimanenze. Il calcolo automatico del costo industriale di ogni ordine (materie prime + manodopera dei centri di lavoro) fornisce la base oggettiva per la valorizzazione delle rimanenze a fine esercizio.
- DPR 633/1972 (Decreto IVA) — Movimentazione interna: i passaggi di lavorazione interni alla stessa impresa (materia prima → semilavorato → prodotto finito) sono operazioni fuori campo IVA, ma devono essere documentati per ricostruire la formazione del costo. Il modulo registra ogni passaggio con data, lotto e operatore.
- Reg. CE 178/2002 art. 18 — Tracciabilità alimentare: obbligo per gli operatori del settore alimentare di garantire la tracciabilità di ingredienti e prodotti in tutte le fasi della produzione e della distribuzione. La gestione FEFO dei lotti, l'associazione lotto→ordine→prodotto finito e il where-used multi-livello permettono il rintracciamento immediato in caso di richiamo.
- Reg. CE 852/2004 (HACCP) — Igiene dei prodotti alimentari: obbligo di documentare le procedure e di conservare la registrazione dei controlli effettuati su ogni lotto. La sezione Quality Control permette di registrare specifiche di controllo per distinta e test eseguiti per ordine, con esito conforme/non conforme e auto-blocco del completamento ordine in caso di test fallito.
- D.Lgs. 219/2006 — Codice Comunitario dei Medicinali (GMP): per i produttori farmaceutici e dei dispositivi medici è obbligatorio mantenere registrazioni complete di lotti, scadenze, controlli qualità ed Engineering Change Order. Il workflow ECO (BOZZA → IN_APPROVAZIONE → APPROVATO → APPLICATO con snapshot della versione precedente) e la firma elettronica sui completamenti soddisfano i requisiti GMP di change-control documentato.
- FDA 21 CFR Part 11 — Electronic Records and Electronic Signatures: per esportatori farmaceutici verso il mercato USA. La firma elettronica con verifica password su completamento ordine e applicazione ECO, abbinata all'audit log strutturato (utente, IP, user-agent, timestamp), fornisce il "non-repudiation" richiesto dallo standard.
- ISO 9001:2015 par. 8.5.2 — Identificazione e tracciabilità: per le imprese certificate è obbligo identificare gli output del processo, lo stato dei prodotti rispetto ai requisiti di monitoraggio, e mantenere la tracciabilità. L'etichetta lotto con QR, la scheda di produzione end-of-job e la storicizzazione delle versioni di distinta soddisfano il requisito.
- Art. 2087 Codice Civile — Sicurezza del lavoro: l'imprenditore deve adottare le misure necessarie a tutelare l'integrità fisica dei lavoratori. La bolla di lavorazione stampabile (con spazi per firma operatore, tempi reali e checkbox sui prelievi) costituisce traccia documentale dell'esecuzione delle fasi e dei controlli previsti dal ciclo di lavorazione.
- D.Lgs. 152/2006 (Testo Unico Ambientale) — Tracciabilità rifiuti: i sottoprodotti e gli scarti di lavorazione devono essere identificati e tracciati. La gestione By-product/Co-product permette di associare a ogni ordine i sottoprodotti generati, con allocazione percentuale dei costi.
- GDPR (Reg. UE 2016/679) art. 5 c.1 lett. f e art. 32 — Integrità e accountability: obbligo di adottare misure tecniche per garantire integrità, riservatezza e dimostrabilità del trattamento. L'audit log strutturato
LogProduzioneregistra ogni evento critico (creazione, avvio, completamento, annullamento, ECO, test qualità) con utente, ruolo, IP, dettaglio JSON e flag firma elettronica. - Separation of Duties — principio di controllo interno (COSO, ISO 27001 A.6.1.2): chi esegue un'operazione critica non deve essere lo stesso che la autorizza. Il modulo blocca a livello di codice l'approvazione di un ECO da parte di chi lo ha proposto (controllo esplicito su
propostoDa ≠ username), con override solo per SUPERADMIN.
A cosa serve questo modulo
Il modulo Produzione permette di:
- Definire distinte base (ricette, formule, kit di assemblaggio) che descrivono come un prodotto finito viene composto a partire da componenti / materie prime.
- Gestire distinte multi-livello: un componente può a sua volta avere una propria distinta (esempio: pre-miscela usata in più prodotti).
- Mantenere lo storico delle versioni di una distinta, per poter riprodurre tra mesi o anni una formula esattamente come era valida in una certa data.
- Pianificare ordini di produzione, avviarli (con scarico automatico delle materie dal magazzino) e completarli (con carico automatico del prodotto finito).
- Annullare ordini con storno automatico dei movimenti se la produzione è stata già avviata.
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.
Una distinta base è la "ricetta" che descrive come si ottiene un prodotto finito. È composta da:
| Campo | Significato |
|---|---|
| Codice | Identificativo univoco (es. DB-PROD-001) |
| Descrizione | Nome operativo della distinta |
| Prodotto finito | Voce di catalogo che si ottiene (FK a Catalogo) |
| Resa prevista | Quanto prodotto si ottiene (es. 1 per "ricetta da 1 unità", 10 per "lotto da 10 kg") |
| UM | Unità di misura della resa (PZ, KG, LT…) |
| Versione corrente | Numero progressivo della formulazione |
| Stato | BOZZA / 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:
| Campo | Significato |
|---|---|
| Componente | Voce di catalogo (può essere materia prima o un altro prodotto con sua distinta) |
| Qty | Quantità di componente per una unità di resa |
| UM | Unità di misura della componente (KG, LT, PZ…) |
| Scarto % | Spreco/calo previsto. Esempio: 5 = il 5% di scarto applicato in fase di scarico |
| Sequenza | Ordine di visualizzazione nella distinta |
- Apri il menu MAGAZZINO → Distinte base.
- Premi + Nuova distinta.
- Compila l'intestazione: codice, descrizione, prodotto finito (selezionato dal catalogo), resa prevista (es.
1per ricetta unitaria), UM. - Premi + Aggiungi riga per ogni componente. Per ogni riga compila il componente (catalogo), la quantità e l'eventuale scarto%.
- Salva. La distinta nasce in stato BOZZA.
- Quando hai verificato la formula, cambia lo stato in ATTIVA e salva. Da questo momento il versioning è attivo.
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).
| Operazione | Comportamento multi-livello |
|---|---|
| Esplosione distinta padre | Esplode anche le sotto-distinte ATTIVE; le quantità vengono moltiplicate e consolidate |
| Avvio ordine di produzione | Scarica 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 diversi | Le quantità vengono sommate nella tabella materie prime piatta |
Quando una distinta è in stato ATTIVA e viene modificata e salvata, il sistema:
- Crea uno snapshot completo della distinta corrente (intestazione + tutte le righe) e lo archivia in storico con la data di validità.
- Incrementa il numero di versione (
v1 → v2). - 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).
L'esplosione (tab "Esplosione" del form distinta) calcola il fabbisogno totale di materie prime per produrre una determinata quantità di prodotto finito:
- Apri la distinta.
- Clicca sul tab Esplosione.
- Inserisci la quantità da produrre (es.
10). - 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:
| Componente | Calcolo | Quantità con scarto |
|---|---|---|
| COMP-A (KG) | 2.5 × 10 = 25 + 5% scarto | 26.25 KG |
| COMP-B (LT) | 0.8 × 10 = 8 + 2% scarto | 8.16 LT |
Un ordine di produzione rappresenta un lotto reale da produrre. Attraversa 4 stati ben definiti:
Creazione di un ordine
- Apri il menu MAGAZZINO → Ordini produzione.
- Premi + Nuovo ordine.
- Seleziona una distinta in stato ATTIVA.
- Specifica la quantità da produrre.
- (Opzionale) Note operative o riferimento lotto.
- Premi Crea ordine. Il numero (es.
PRD-00001) è generato automaticamente.
Premendo "Avvia produzione" sul dettaglio di un ordine PIANIFICATO:
- Il sistema esplode la distinta per la quantità prevista.
- Per ogni materia prima foglia crea un movimento di magazzino di tipo
SCARICO_PRODUZIONEcon causale "Produzione PRD-NNNNN". - Il costo unitario è preso dal campo
prezzoAcquistodel catalogo (se valorizzato). - Il costo materie totale viene calcolato e salvato sull'ordine.
- Lo stato passa a IN_CORSO e viene impostata la data inizio.
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.
Premendo "Completa produzione" sul dettaglio di un ordine IN_CORSO:
- Specifica la quantità effettivamente prodotta (può differire da quella prevista per via di rese effettive diverse).
- Il sistema crea un movimento di magazzino di tipo
CARICO_PRODUZIONEper il prodotto finito. - Il costo unitario del prodotto finito è calcolato come:
costo materie totale / quantità prodotta. - Il costo totale viene salvato sull'ordine; lo stato passa a COMPLETATO e viene impostata la data fine.
L'annullamento è disponibile dal dettaglio ordine. Comportamento differente in base allo stato corrente:
| Stato corrente | Effetto dell'annullamento |
|---|---|
| PIANIFICATO | Stato → ANNULLATO. Nessun movimento di magazzino (non ce n'erano). |
| IN_CORSO | Stato → ANNULLATO. Per ogni PRELIEVO viene creato un movimento di CARICO_RETTIFICA di pari quantità che storna lo scarico originale (giacenze ripristinate). |
| COMPLETATO | Bloccato: 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.
PIANIFICATO o ANNULLATO. Gli ordini IN_CORSO o COMPLETATO non sono mai cancellabili (preservazione audit trail fiscale e operativo).
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.
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.
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
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).
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:
| Campo | Significato |
|---|---|
| Sequenza | Ordine di esecuzione |
| Descrizione | Es. Pesatura, Miscelazione, Confezionamento |
| Centro di lavoro | FK 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 override | Sovrascrive il costo del centro (opzionale) |
| Obbligatoria | Se 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:
- Avvia fase: stato PIANIFICATA → IN_CORSO, registra dataInizio + operatore
- Completa fase: chiede tempo effettivo (default = differenza ora-avvio), calcola costoEffettivo = (tempo / 60) × costoOrario
- 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.
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).
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.
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) oSCARTO(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.
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
- Crea ECO in BOZZA con titolo, descrizione e motivazione (snapshot della distinta corrente memorizzato)
- Submit per richiedere approvazione (BOZZA → IN_APPROVAZIONE)
- Un secondo utente approva o respinge (con motivo)
- 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.
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.
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.
Modalità alternativa al flusso standard, attivata sull'ordine al momento della creazione.
| Modalità | Quando avvia | Quando completa |
|---|---|---|
| STANDARD | Scarica le materie prime | Carica solo prodotto finito |
| BACKFLUSH | Solo 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.
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
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.
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).
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.
Documento di riepilogo completo a chiusura ordine, da archiviare nel fascicolo qualità. Disponibile per ordini COMPLETATO.
Contenuto:
- Materie prime consumate: tutti i prelievi reali con lotto, qty, costo unitario e valore — totale costo materie
- Fasi di lavorazione eseguite: descrizione, centro, operatore, tempo previsto vs effettivo, costo orario, costo effettivo — totale manodopera
- Quality control: tutte le specifiche con valore misurato, esito (CONFORME/NON CONFORME), eseguito da chi
- Carico a magazzino: prodotto finito + eventuali by-product/scarti
- Riepilogo costi finali: materie + manodopera = costo totale → costo unitario prodotto
- Note operative
Spazi firma per responsabile produzione e responsabile qualità. Footer con data/ora di stampa per traccia.
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.
- Ruolo base dell'utente (USER, OPERATOR, ADMIN, SUPERADMIN) — lo strato più ampio, valido per tutta la piattaforma.
- Privilegi Produzione (per singolo utente) —
PRODUCTION_MANAGER,QUALITY_MANAGER,OPERATOR_PROD. - 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.
| Privilegio | Cosa 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.
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:
| Chiave | Ruolo | Effetto se disabilitata |
|---|---|---|
produzione.ordini.completa | ADMIN | Gli ADMIN del workspace non possono completare ordini, neanche con il privilegio. |
produzione.eco.approva | ADMIN | Gli ADMIN non possono approvare/respingere ECO. |
cestino.ripristina | ADMIN | Gli ADMIN non possono ripristinare dal cestino produzione. |
produzione.fasi.avvia_completa | OPERATOR | Gli OPERATOR del workspace non possono più aprire/chiudere fasi. |
produzione.ordini.consulta | OPERATOR | Gli OPERATOR non vedono più gli ordini in consultazione. |
quality.test.registra | OPERATOR | Gli OPERATOR non possono più registrare test qualità. |
picking.gestisci | OPERATOR | Gli 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
- Per il primo obiettivo — assegnare il privilegio
QUALITY_MANAGERsolo all'utente Mario nella sezione lilla. Lasciare il permesso ruoloquality.test.registraabilitato. - 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 USERproduzione.eco.approva.
Operazioni e relativi controlli
| Operazione | Privilegio richiesto | Permesso ruolo richiesto | Firma elettronica |
|---|---|---|---|
| Avviare un ordine | PRODUCTION_MANAGER | produzione.ordini.completa | — |
| Completare un ordine | PRODUCTION_MANAGER | produzione.ordini.completa | Sì (password) |
| Avviare/chiudere una fase | OPERATOR_PROD o PRODUCTION_MANAGER | produzione.fasi.avvia_completa | — |
| Approvare un ECO | QUALITY_MANAGER + utente diverso dal proponente | produzione.eco.approva | — |
| Applicare un ECO | PRODUCTION_MANAGER | — | Sì (password) |
| Registrare un test qualità | QUALITY_MANAGER | quality.test.registra | — |
| Eliminare definitivamente dal cestino | — | — | Sì + 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.
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_morein 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
localStoragecon chiavenote-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_lessin 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
| Operazione | Chi può farla | Note |
|---|---|---|
| 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 creazioneUPDATE_NOTA— alla modifica del testoDELETE_NOTA— al soft-deleteRESTORE_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/notebody{ testo, entita, entitaId }— crea (richiedenote.crea)PUT /api/note/:idbody{ 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.
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.
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.