Ci sono file Excel che registrano il passato.
E poi ci sono file Excel che ti evitano problemi tra tre mesi.
La differenza non è nella formula.
È nel modo in cui colleghi i numeri alle decisioni.
Se lavori nella Supply Chain Pharma, sai già cosa succede:
lo stock sembra “ok”… finché improvvisamente non lo è più.
Lotti che scadono, forecast troppo ottimistici, dati che non tornano.
Questo tutorial nasce proprio qui.
Non per spiegarti una funzione di Excel.
Ma per costruire un sistema che ti dica:
👉 “Questo SKU tra 4 mesi diventa un problema. Ecco cosa fare adesso.”
Useremo due leve:
-
un forecast statistico reale (PREVISIONE.ETS)
-
un framework decisionale (S.R.V.™)
E alla fine aggiungiamo l’ultimo pezzo:
👉 far partire automaticamente le mail prima che qualcuno ti chieda spiegazioni.
Parte 1: Creare il Forecast Predittivo (Funzione PREVISIONE.ETS)
Un caso reale (che succede più spesso di quanto pensi)
È lunedì mattina.
Il Sales ti scrive:
“Abbiamo bisogno urgente di stock per PH-202, il cliente spinge.”
Apri Excel.
Controlli.
Stock: 9.800 unità
Forecast mese: 1.200
Sembra tutto sotto controllo.
Poi guardi meglio.
-
Shelf life residua: 7 mesi
-
Target cliente: 12 mesi
-
Disallineamento ERP vs 3PL: -15%
E lì cambia tutto.
👉 Quello stock non è una sicurezza. È un problema in ritardo.
Nel giro di 6 settimane succedono tre cose:
-
il cliente rifiuta i lotti
-
il magazzino resta pieno
-
il finance inizia a parlare di write-off
E la domanda che arriva è sempre la stessa:
👉 “Perché non l’abbiamo visto prima?”
Il “perché ora”
Nel 2026, con shelf life più corte e forecast più volatili, un sistema reattivo non basta più.
Aspettare che il problema emerga significa quasi sempre arrivare tardi.
Serve un sistema che faccia una cosa molto semplice:
👉 trasformare segnali deboli in decisioni operative.
Ed è esattamente quello che costruiamo in questo tutorial.
Non un file Excel.
Ma un sistema che ti permette di dire, con anticipo:
👉 “Questo SKU sta diventando un rischio. Ecco cosa facciamo prima che lo diventi davvero.”
1. Preparazione dei Dati Storici
Organizza i tuoi dati di vendita in due colonne:
-
Colonna A (Data): Almeno 24 mesi di dati storici (es. Gennaio 2024 – Dicembre 2025).
-
Colonna B (Vendite Reali): Le unità vendute per ogni mese.
2. Calcolo della Previsione
Excel offre una funzione potente chiamata PREVISIONE.ETS (Exponential Triple Smoothing), che rileva automaticamente stagionalità e trend.
Per prevedere il valore di Gennaio 2026, usa questa formula:
=PREVISIONE.ETS(A26; $B$2:$B$25; $A$2:$A$25; 1; 1)
-
Argomento 1 (A26): La data futura che vuoi prevedere.
-
Argomento 2 (B2:B25): L’intervallo delle vendite storiche.
-
Argomento 3 (A2:A25): L’intervallo delle date storiche.
-
Argomento 4 (1): Stagionalità (1 indica che Excel la rileva automaticamente).
Nota tecnica: Il quarto argomento “1” (stagionalità) è il punto di forza. Excel usa l’algoritmo AAA (Additive Holt-Winters). È perfetto per il Pharma dove spesso ci sono picchi stagionali (es. antinfluenzali).
-
Argomento 5 (1): Completamento dati (1 riempie eventuali mesi mancanti con la media).
Cosa sta succedendo:
-
Excel analizza il comportamento storico
-
Identifica cicli stagionali (anche senza dirglielo)
-
Restituisce un valore coerente con quel pattern
👉 Questo numero non è “la verità”. Ma è molto meglio di un’intuizione.
Il limite del forecast (ed è qui che molti sbagliano)
Il forecast ti dice quanto venderai.
Ma non ti dice se lo stock che hai:
-
è coerente
-
è vendibile
-
è affidabile
E qui nasce il vero problema.
👉 Puoi avere un forecast perfetto… e comunque perdere soldi.
Per questo serve un secondo livello di analisi.
Parte 2: Il Framework S.R.V.™
Il Framework S.R.V.™ trasforma un semplice forecast in una decisione strategica. Non si limita a guardare la domanda, ma analizza se lo stock è in grado di sopravvivere a quella domanda attraverso tre dimensioni critiche.
S – Shelf Life Integrity™
Nel Pharma, la scadenza legale è solo metà della storia. Conta la Residual Shelf Life (RSL) accettata dal mercato. Se il cliente esige 12 mesi residui e tu ne hai 8, quel prodotto è già “commercialmente morto”.
Formula: (Mesi alla Scadenza / Target RSL Mercato)
Esempio: 8 mesi residui / 12 mesi target = S: 0.67 (Sotto 1.0 = Zona di Rischio)
R – Rotation Reality™
Qui colleghiamo il forecast allo stock fisico. Non conta quanto vendi in assoluto, ma quanto velocemente smaltisci ciò che hai accumulato in magazzino.
Formula: (Forecast 3 Mesi / Stock Totale)
Esempio: Forecast 1.200 / Stock 6.000 = R: 0.2 (Hai 5 volte più stock del necessario)
V – Visibility Alignment™
La credibilità del dato. Se l’ERP e il magazzino fisico (3PL) non coincidono, il rischio operativo aumenta esponenzialmente.
Formula: 1 – (ASS(Stock ERP – Stock 3PL) / Stock ERP)
Esempio: ERP 100, 3PL 90 = V: 0.90 (Più scende, più devi essere prudente)
Parte 3: SRV Score™
Lo score finale non è una media, è un prodotto matematico:
SRV Score = S * R * V
Questa è una scelta metodologica fondamentale: il sistema è punitivo. Se anche uno solo dei fattori è debole, l’intero score crolla. Non puoi compensare una scadenza imminente (S bassa) con una buona visibilità (V alta).
Analisi Comparativa
| SKU | S | R | V | SRV Score | Stato |
|---|---|---|---|---|---|
| PH-101 | 1.10 | 0.90 | 0.98 | 0.97 | Healthy |
| PH-202 | 0.70 | 0.50 | 0.95 | 0.33 | High Risk |
💡 L’intuizione dell’Analyst: Il secondo SKU (PH-202) è già un problema finanziario, anche se il sistema ERP non ha ancora generato alert di scadenza. Il framework S.R.V.™ ti permette di vedere il “disastro” mesi prima che appaia nel bilancio di fine anno.
Parte 4: Visualizzazione “Insight” (Grafico a Bolle)
Un file Excel senza visualizzazione resta un file.
Un grafico giusto diventa una decisione.
Usa un grafico a bolle:
-
Asse X → Shelf Life (S)
-
Asse Y → Rotation (R)
-
Dimensione → Valore stock €
-
Colore → Visibility (V)
Questo grafico mostra istantaneamente dove si concentrano i soldi: le bolle grandi in basso a sinistra (bassa vita residua, bassa rotazione) sono i tuoi “incendi” da spegnere subito.
Esempio:

Come leggere il grafico
Questo grafico a bolle non è solo una visualizzazione: è una mappa decisionale per il tuo Direttore Supply Chain. Ecco l’analisi dei quattro quadranti che emergono:
🔴 In Basso a Sinistra: “Gli Incendi” (Zona Critica)
Qui si concentrano le bolle grandi, rosse o arancioni. Significa che abbiamo:
-
S < 1: Prodotti che scadono presto e che i distributori non accetteranno più.
-
R < 0.5: Prodotti che si muovono lentamente rispetto al forecast.
-
V Bassa: Dati ERP/3PL non allineati.
-
Azione: Write-off (svalutazione) immediato per i lotti già scaduti, promozioni “last minute” aggressive per gli altri, e inventario fisico urgente per allineare i dati.
🟡 In Basso a Destra: “Il Magazzino Statico”
Prodotti con buona vita residua (S > 1) ma che non ruotano (R < 0.5).
-
Rischio: Stiamo immobilizzando capitale che non genera valore. Se il forecast è troppo ottimista, questi prodotti diventeranno “Incendi” tra 6 mesi.
-
Azione: Rivedere il Demand Plan nel meeting S&OP e rallentare le produzioni/acquisti.
🟡 In Alto a Sinistra: “La Corsa contro il Tempo”
Prodotti che ruotano velocemente (R > 0.5) ma hanno una vita residua limitata (S < 1).
-
Rischio: Rottura di stock (Out of Stock) imminente perché non riusciremo a rifornire in tempo, o obsolescenza se il forecast non viene rispettato perfettamente.
-
Azione: Monitoraggio settimanale delle vendite e accelerazione dei controlli qualità per i nuovi lotti in arrivo.
🟢 In Alto a Destra: “La Safe Zone” (Zona Sana)
Qui si trovano le bolle verdi con S > 1 e R > 0.5. È dove ogni SKU Pharma dovrebbe stare.
-
Significato: Prodotti freschi, che si muovono velocemente e con dati affidabili.
-
Azione: Monitoraggio standard.
Combinando la funzione
PREVISIONE.ETScon il framework S.R.V.™, smetti di essere un analista passivo che “registra” gli scarti. Diventi un analista proattivo che dice: “In base al trend statistico e al framework SRV, lo SKU PH-202 genererà una perdita di 40k € tra 4 mesi. Ecco il piano per evitarlo”.
Parte 5: Automazione – quando il sistema lavora per te
A questo punto hai:
-
forecast
-
rischio
-
priorità
Manca solo una cosa:
👉 far partire l’azione automaticamente
Lo script Python che vedremo è perfetto per questo.
Cosa fa:
-
legge Excel
-
filtra SRV < 0.40
-
raggruppa per Sales
-
invia email con tabella + allegato
👉 Questo è il vero salto di livello.
Non aspetti più la domanda.
Arrivi con la risposta prima.
1. Preparazione dell’ambiente
Assicurati di avere installate le librerie necessarie:
pip install pandas openpyxl
2. Lo Script Python: “The S.R.V.™ Alerter”
Questo script presuppone che tu abbia una colonna chiamata Email_Sales nel tuo Excel (per sapere a chi inviare cosa) e la colonna SRV_Score che abbiamo calcolato.

import pandas as pd import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.application import MIMEApplication import os # ========================== # CONFIGURAZIONE E DATI # ========================== FILE_REPORT_NAME = "Report_SRV_Pharma.xlsx" SMTP_SERVER = "smtp.office365.com" # Cambia in base al tuo provider SMTP_PORT = 587 EMAIL_MITTENTE = "[email protected]" EMAIL_PASSWORD = "tua_password_sicura" # 1. Caricamento Dati if not os.path.exists(FILE_REPORT_NAME): print(f"Errore: Il file {FILE_REPORT_NAME} non esiste.") exit() df = pd.read_excel(FILE_REPORT_NAME) # 2. Filtro Criticità (SRV Score < 0.40) criticità = df[df['SRV_Score'] < 0.40].copy() def send_srv_alert(sales_email, data_subset): # Creazione del contenitore della mail msg = MIMEMultipart() msg['From'] = EMAIL_MITTENTE msg['To'] = sales_email msg['Subject'] = f"⚠️ ALERT S.R.V.™: Azione Urgente Stock Pharma - {pd.Timestamp.now().strftime('%d/%m/%Y')}" # Generazione tabella HTML per il corpo mail table_html = data_subset[['SKU', 'SRV_Score', 'Azione_Suggerita', 'Valore_Euro']].to_html(index=False, border=1) body = f"""
⚠️ Rischio Obsolescenza Rilevato
Ciao Team Sales,
In base all’analisi S.R.V.™ (Shelf Risk Velocity), i seguenti prodotti nel tuo portafoglio sono in ZONA CRITICA.
Nota: In allegato trovi il report completo per l’analisi dei lotti specifici.
Si prega di definire le azioni di clearance entro il prossimo meeting S&OP.
Report generato automaticamente dal Supply Chain Analytics System.
"""
msg.attach(MIMEText(body, 'html'))
# ==========================
# ALLEGA FILE EXCEL (Il tuo blocco di codice)
# ==========================
try:
with open(FILE_REPORT_NAME, "rb") as f:
file_data = f.read()
part = MIMEApplication(file_data, Name=FILE_REPORT_NAME)
part['Content-Disposition'] = f'attachment; filename="{FILE_REPORT_NAME}"'
msg.attach(part)
# ==========================
# INVIO EMAIL
# ==========================
with smtplib.SMTP(SMTP_SERVER, SMTP_PORT) as server:
server.starttls()
server.login(EMAIL_MITTENTE, EMAIL_PASSWORD)
server.send_message(msg)
print(f"📧 Report inviato con successo a {sales_email}!")
except Exception as e:
print(f"❌ Errore durante l'invio a {sales_email}: {e}")
# 3. Esecuzione per ogni Sales Manager che ha criticità
if not criticità.empty:
for email in criticità['Email_Sales'].unique():
subset = criticità[criticità['Email_Sales'] == email]
send_srv_alert(email, subset)
else:
print("✅ Nessun rischio SRV rilevato questa settimana. Nessun invio necessario.")
Ecco la spiegazione di come funziona la logica e come configurarlo per l’invio reale:
1. Spiegazione Passo-Passo del Codice
A. Importazione Librerie e Caricamento
Lo script inizia caricando pandas (per leggere l’Excel) e i moduli email.mime e smtplib.
Questi ultimi sono i protocolli standard di Python per “costruire” una mail (MIME) e “spedirla” (SMTP).
Il codice legge il file Report_SRV_Pharma.xlsx e crea un sottoinsieme (criticità) contenente solo le righe dove lo SRV Score è inferiore a 0.40. Se non ci sono rischi, lo script si ferma subito.
B. Costruzione della Mail (L’oggetto msg)
Per ogni Sales Manager che ha prodotti a rischio, lo script crea un oggetto MIMEMultipart. È come una busta vuota dove andremo a inserire:
-
Mittente, Destinatario e Oggetto: Definiti nelle intestazioni.
-
Il Corpo (HTML): Qui usiamo
.to_html()di Pandas. Questa funzione trasforma la tua tabella Excel in codice HTML che Outlook o Gmail possono visualizzare direttamente nel testo della mail.
C. Allegato del File (Il blocco rb)
Il comando with open(..., "rb") apre il tuo Excel in modalità “Read Binary” (lettura binaria). È fondamentale perché un file Excel non è semplice testo, ma un archivio complesso. Lo script lo “impacchetta” in un formato che i server di posta riconoscono come allegato.
D. Invio tramite SMTP
Il blocco finale apre una connessione sicura (starttls) con il server della tua azienda, effettua il login e “spinge” la mail verso il destinatario.
2. Come impostarlo per l’invio reale
Per far sì che le mail partano davvero, devi configurare le credenziali del server.
Se usi Outlook / Office 365 (Il più comune in azienda):
-
SMTP_SERVER:
smtp.office365.com -
SMTP_PORT:
587 -
Sicurezza: Se la tua azienda ha l’autenticazione a due fattori (2FA), non puoi usare la tua password normale. Devi generare una “Password per l’app” dalle impostazioni di sicurezza del tuo account Microsoft.
Se usi Gmail:
-
SMTP_SERVER:
smtp.gmail.com -
SMTP_PORT:
587 -
Sicurezza: Anche qui, devi attivare la 2FA e generare una “Password per l’app”.
3. Checklist operativa per il primo invio
-
Test Personale: Prima di inviare ai Sales, cambia temporaneamente la riga
msg['To'] = sales_emailconmsg['To'] = "[email protected]". Così vedrai esattamente cosa ricevono loro. -
Preparazione Excel: Assicurati che nella colonna
Email_Salesdel tuo file Excel ci siano indirizzi validi (es.[email protected]). Lo script raggrupperà automaticamente i prodotti: se Mario Rossi ha 5 prodotti a rischio, riceverà una sola mail con una tabella da 5 righe. -
Cartella di Lavoro: Assicurati che lo script
.pye il file.xlsxsiano nella stessa cartella, altrimenti Python non troverà il report.
Il valore aggiunto
Impostare questo automatismo ti toglie l’onere di dover “convincere” i Sales ogni volta. La mail arriva con un tono oggettivo, basato sul framework S.R.V.™, e l’allegato permette loro di non avere scuse: i dati per agire sono lì.
Analisi Applicativa:
L’aspetto più interessante di questo tutorial non è lo strumento, ma il passaggio dalla statistica all’etica operativa.
-
L’algoritmo ETS non è una scatola nera: A differenza di modelli di AI complessi,
PREVISIONE.ETSè trasparente. Se un Sales ti chiede “perché questo numero?”, puoi mostrargli il pattern stagionale. -
La natura moltiplicativa dello Score: In Supply Chain, i problemi sono spesso interdipendenti. Se sommi i rischi (media), un rischio 0 viene mitigato da un 1. Moltiplicandoli, il rischio 0 “uccide” il risultato. Questo riflette la realtà: uno stock non vendibile (S=0) è inutile anche se la domanda è infinita (R=1).
-
L’automazione come barriera psicologica: Spesso l’analista non segnala il problema per timore del conflitto con i Sales. Automatizzare la mail sposta la responsabilità sul “sistema”, rendendo l’alert un dato di fatto oggettivo e non un’opinione personale.
Data, Supply Chain & Automazione: strumenti e strategie operative



