Skip to main content

Motore di forecasting e ricalcolo

Input canonici

Per ogni mese/giorno nell'orizzonte il motore usa:

  • periodo e domanda ore dei progetti;
  • risorse associate e validità dell'associazione;
  • compatibilità tra città della sede del progetto e sede della risorsa valida nel periodo;
  • calendario lavorativo, orario e periodi di impiego;
  • monte ferie e piano ferie, distinguendo ferie possibili e già pianificate/approvate;
  • allocazioni su tutti i progetti dell'organizzazione;
  • limite ore progetto-risorsa (default 1720) e ore contrattuali dei freelancer;
  • costi reali o standard validi nel periodo;
  • consuntivi fino al relativo cursore e mesi consegnati immutabili.

Vincoli hard

  1. Ore assegnate a una risorsa nel periodo ≤ capacità lavorativa disponibile meno ferie pianificate/approvate e altri impegni.
  2. Somma delle allocazioni della risorsa su tutti i progetti ≤ capacità: nessuna over-allocation.
  3. Ore cumulative risorsa-progetto ≤ max_hours_per_resource.
  4. Allocazioni solo dentro periodo progetto, rapporto di lavoro e associazione.
  5. Per un progetto con sede, allocazioni solo a risorse assegnate a una sede della stessa città nel periodo; un progetto senza sede non applica il vincolo geografico.
  6. Mesi consegnati non modificabili.
  7. Per costo standard deve esistere una tariffa univoca ente + macro-livello + data; per costo reale una tariffa dipendente univoca.
  8. Freelancer: usare ore contrattuali, senza applicare il normale calcolo predittivo e consuntivo automatico.

Obiettivi

Ordine consigliato, da confermare con il committente:

  1. massimizzare la copertura della domanda dei progetti;
  2. evitare over-allocation e violazioni dei limiti;
  3. minimizzare scostamenti rispetto al piano precedente per stabilità;
  4. rispettare priorità/scadenze progetto;
  5. distribuire il carico in modo uniforme, preservando una riserva ferie configurabile;
  6. minimizzare sforamenti di budget come obiettivo secondario, senza nascondere domanda non coperta.

Se non esiste una soluzione completa, il motore non deve produrre silenziosamente numeri falsamente validi: salva uno scenario INFEASIBLE/PARTIAL con ore scoperte, risorse sature e vincoli responsabili.

Monte ferie e piano ferie

  • Ferie pianificate/approvate: riducono direttamente la capacità nei periodi indicati.
  • Ferie disponibili ma non pianificate: alimentano una riserva prudenziale distribuita sull'orizzonte secondo policy configurabile.
  • Il forecast mostra capacità lorda, ferie pianificate, riserva ferie, capacità netta e allocazione.
  • Se il piano ferie cambia, si ricalcola dal primo periodo interessato.

Trigger e dirty range

EventoInizio intervallo da ricalcolare
Nuovo/chiuso/modificato progettoPrima data modificata non consegnata
Assunzione/cessazione o cambio orarioData di efficacia
Associazione/rimozione risorsa-progettoInizio/fine associazione modificata
Estensione/riduzione progettoPrima data coinvolta
Costo o tariffa standardvalid_from
Ferie/balance/calendarioPrima giornata interessata
Modifica retroattiva consuntivoMese modificato
Limite ore risorsa-progettoPrimo mese futuro/non consegnato
Cambio sede progetto o sede storica risorsaPrima data in cui cambia la compatibilità città

Gli eventi vengono aggregati nel minimo intervallo dirty. Il job acquisisce un lock per organizzazione/scenario, legge uno snapshot coerente, calcola e pubblica atomicamente una nuova versione. Un evento arrivato durante il calcolo programma una nuova run, senza perdere invalidazioni.

Versionamento e spiegabilità

Ogni forecast_run conserva:

  • versione algoritmo e parametri;
  • intervallo, trigger/eventi e utente correlato;
  • hash/snapshot logico degli input;
  • stato, tempi e metriche;
  • risultati per progetto/risorsa/periodo;
  • warning, vincoli violati e domanda scoperta;
  • riferimento alla versione precedente sostituita.

Sviluppo incrementale

  1. V1 deterministica: capacità mensile, ferie approvate, vincoli hard e ricalcolo manuale/automatico idempotente.
  2. V2 globale: ottimizzazione su tutti i progetti, domanda scoperta e stabilità rispetto al piano precedente.
  3. V3 scenari: simulazioni what-if, priorità, riserva ferie evoluta e confronto/approvazione scenari.

Prima della scelta della libreria/solver creare dataset sintetici “golden” con casi fattibili, impossibili, variazioni retroattive, costi temporali e freelancer.