Le giacenze non tornavano mai. Non di tanto: due pezzi qui, cinque là, un bancale che a sistema c'era e nello scaffale no. Ogni lunedì la stessa scena. Il titolare guardava il magazziniere. Il magazziniere guardava il pavimento.
Sbagliavano entrambi persona. La colpa non era di nessuno dei due. La colpa aveva un orario preciso: le 3:00 di notte.
Il sospettato sbagliato
Quando i numeri non tornano, il primo che paga è chi ha le mani sulla merce. È istinto, non logica. Il magazziniere tocca i pezzi, quindi il magazziniere sbaglia. Semplice, sbagliato.
In questa PMI, una ditta di ricambi industriali del nord Italia, quaranta dipendenti, il magazziniere lavorava dalle 7 alle 16. Turno unico. Nessuno rientrava di notte. Il cancello si chiudeva alle 18.
Eppure i movimenti a sistema continuavano.
Mi hanno chiamato dopo tre mesi di litigi interni e un inventario fisico che aveva bruciato un sabato intero a sei persone. La domanda del titolare era una: "Chi mi ruba i numeri?".
Domanda giusta. Verbo sbagliato. Non "chi ruba". Chi agisce.
Il timestamp è un testimone che non mente
Ogni gestionale registra i movimenti di magazzino con una marca temporale. Carico, scarico, rettifica: ognuno porta con sé data, ora, minuto, spesso secondo. E porta un utente.
Quel campo è l'indizio più sottovalutato che esista. Tutti guardano cosa è successo. Quasi nessuno guarda quando.
Ho esportato lo storico movimenti degli ultimi sessanta giorni. Un file grezzo, migliaia di righe. Poi ho fatto una sola cosa: ho ordinato per ora, non per data.
E il grafico ha parlato.
C'era un picco. Ogni notte, tra le 2:58 e le 3:04, partiva una raffica di scarichi. Sempre gli stessi codici articolo. Sempre lo stesso utente: un account di servizio chiamato SYS_INT. Un utente che non era una persona.
Cosa faceva il fantasma delle 3
SYS_INT era il ponte tra il gestionale e il portale ordini di un fornitore. Un'integrazione installata due anni prima da un consulente che non lavorava più con l'azienda. Documentazione: zero. Memoria aziendale: zero.
Il job notturno faceva questo: leggeva le giacenze sotto scorta minima e generava un riordino automatico. Fin qui, sano. Il problema era un altro.
L'integrazione, per "prenotare" la merce in arrivo, registrava un movimento di scarico provvisorio sui codici in riordino. Un impegno contabile. Doveva essere annullato al ricevimento merce. Ma un aggiornamento del portale fornitore, mesi prima, aveva cambiato il formato della conferma d'ordine. Il job non riconosceva più la risposta, quindi non chiudeva mai il ciclo.
Risultato: scaricava di notte, non ricaricava mai. Ogni notte il magazzino perdeva pezzi a sistema che nella realtà erano fermi sullo scaffale.
Il magazziniere aveva ragione da tre mesi. I pezzi c'erano. Erano i numeri a mentire, alle 3 di notte, quando l'ufficio era vuoto e nessuno poteva vedere.
Perché l'orario di un errore vale più dell'errore
Un errore isolato ti dice cosa è rotto. L'orario di un errore ti dice chi lo ha rotto.
Ragiona così. In una PMI ci sono due categorie di azioni:
- Quelle umane, che seguono l'orario di lavoro. Concentrate tra le 8 e le 18, cadono nel weekend, sparaggiono a Ferragosto.
- Quelle automatiche, che seguono l'orologio della macchina. Precise al secondo, ripetitive, indifferenti ai festivi.
Quando ordini i movimenti per ora e vedi attività alle 3 di notte, in un'azienda a turno unico, hai già la risposta metà scritta. Non è una persona. È un processo. E un processo che nessuno ricorda di aver acceso è un processo che nessuno controlla.
Da builder ti dico la regola che uso sempre: la firma temporale di un evento rivela la sua natura prima ancora del suo contenuto. Un errore alle 14:30 di martedì è quasi sempre un dito umano. Lo stesso errore alle 3:00 spaccate, ogni notte, è codice.
Come leggere i timestamp senza essere programmatore
Non serve saper scrivere una riga. Serve saper guardare. Quattro mosse concrete, fattibili da chiunque in una PMI abbia accesso all'export del gestionale.
1. Esporta lo storico, non la fotografia. La giacenza attuale non ti dice niente. Ti serve il registro dei movimenti, riga per riga, con data e ora. Almeno due mesi.
2. Ordina per ora del giorno, non per data. Ignora il calendario. Guarda solo l'orologio. Crea una colonna con la sola ora, poi ordina. Gli eventi automatici si ammucchiano in fasce precise. Salteranno fuori da soli.
3. Isola gli utenti. Metti in colonna chi ha fatto il movimento. Se vedi nomi