Roadmap POC → MVP avanzato → Release 1
Le durate sono da stimare dopo refinement e sizing del team. L'ordine rappresenta dipendenze e gate, non sprint già impegnati.
Fase 0 — Baseline e tenant foundation
Obiettivo: condivisione sicura per organizzazione.
- Congelare contratti AS-IS, dataset di prova e regression suite.
- Scrivere ADR tenant e matrice ruoli/permessi.
- Implementare
OrganizationContextserver-side usando identità/membership di piattaforma. - Migrare schema, unicità, indici e stato operativo con expand/backfill/enforce.
- Rendere tenant-aware data-service, rendicontazione-service, repository, import, export, job, cache e audit.
- Aggiungere test a due tenant e penetration test IDOR di base.
- Pilotare con due utenti della stessa organizzazione.
Exit gate: tutti i criteri P0 della pagina visibilità per organizzazione superati.
Fase 1 — Fondazioni di dominio e HR
Obiettivo: anagrafiche affidabili su cui basare pianificazione e costi.
- Riorganizzare il service nei moduli
workforce,projects,actuals,forecasting,data-exchange,reportingsenza cambiare deployment. - Introdurre società/sotto-aziende e storico di appartenenza.
- Introdurre catalogo sedi tenant-aware, pagina di gestione e storico sede di assegnazione del dipendente.
- Separare ruolo, macro-livello e job level; migrare valori esistenti.
- Storicizzare reporting line e validare stesso tenant, anti self-reference e anti-ciclo.
- Consolidare storico costo dipendente e intervalli non sovrapposti.
- Collegare opzionalmente dipendente e account utente.
- Aggiungere tipo risorsa e flusso freelancer con ore contrattuali.
- Completare UI Dipendenti con tab profilo, organizzazione/ruolo, sede, reporting, costi e audit.
Exit gate: CRUD, migrazioni, import/export e UI coprono il nuovo modello senza regressioni.
Fase 2 — Ferie
Obiettivo: rendere più preciso il forecast. Non è un modulo HR — la fase è stata ridimensionata dal committente, e la decisione è registrata in Stato e decisioni.
Le due tabelle — saldo annuale e piano mensile — con il decremento dei giorni goduti dall'import presenze, riconosciuti daFatto il 17 agosto 2026, migrazione8FE.108:employee_leave_balances(leave_year,entitled_days,consumed_days) eemployee_monthly_leave_plan(plan_month,planned_days). I giorni goduti si ricalcolano a ogni import e a ogni annullamento, non si decrementano.L'interfaccia che mostra ferie prese e residue, e con cui Admin/HR inserisce i giorni previsti per dipendente e anno.Fatta il 18 agosto 2026: sotto-scheda Ferie dentro Storico nella scheda dipendente — form dei previsti sopra, anni sotto con previsti, goduti e residui. Resta un attributo del singolo: nessun default di organizzazione, nessuna derivazione dal contratto, nessuna ereditarietà fra anni.Il self-service per inserire i giorni pianificati, per mese e non per giorno.Fatto il 18 agosto 2026: dodici mesi in «I miei dati», solo i futuri modificabili, e il tetto dei giorni disponibili imposto dal servizio.Solo dopo, l'uso del piano nel forecast: il monte ore del mese cala dei giorni pianificati.Fatto il 18 agosto 2026: inricalcolaTuttiil monte ore smette di essere una costante e diventa una funzione di persona e mese. Solo le ferie pianificate; quelle non ancora collocate restano fuori per decisione esplicita.
Fuori perimetro per decisione esplicita: workflow di approvazione e stati, carry-over, calendari di festività, unità in ore, viste manager, permessi (<n>PR), part-time e assunzioni infra-annuali. Il modello di capacità dipendente/progetti — quello che servirebbe al residuo ferie non ancora pianificato — si sviluppa più avanti.
Exit gate: un dipendente inserisce i giorni per mese, la scheda mostra prese e residue, e il monte ore del forecast cala di conseguenza.
Fase 3 — Progetti, enti e tariffe
Obiettivo: valorizzazione economica corretta e temporalmente stabile.
- Completare enti finanziatori e tariffe storiche per macro-livello.
- Rendere esplicita su progetto la strategia
REAL/STANDARD. - Aggiungere
max_hours_per_resourcecon default 1720 e override. - Aggiungere la sede opzionale al progetto e validare la compatibilità città con le sedi storiche delle risorse associate.
- Validare tariffe mancanti/sovrapposte e associazioni cross-tenant.
- Applicare la tariffa valida alla data a forecast, consuntivo ed export.
- Aggiungere schermate/configurazioni e report di qualità dati.
Exit gate: golden test economici riproducono costi reali e standard attraverso cambi tariffa.
Fase 4 — Data exchange estendibile
Obiettivo: aggiungere nuovi formati senza modificare il dominio.
Definire modelli canonici employee/project/actual/leave.Fatto il 19 agosto 2026 — con una scoperta: tre dei quattro esistevano già senza nome dentroimportPayloads.js. Il quarto, le assenze, mancava davvero: uscivano solo dentro le giornate di presenza, e un formato che portasse le ferie senza le presenze non aveva modo di consegnarle.Creare interfacce e registry adapter.Scritto e provato,modules/data-exchange/registroAdapter.js— ma non ancora collegato alle rotte, che chiamano i lettori dritti. È il debito più visibile della fase.- Incapsulare i formati attuali come adapter v1 senza regressioni.
- Implementare i nuovi formati del committente come adapter separati.
- Mantenere staging, diff, approvazione, idempotenza, rollback e report errori.
- Aggiungere contract test per adapter e fixture anonimizzate/versionate.
Exit gate: un formato nuovo viene aggiunto senza cambiare repository o regole di business.
Fase 5 — Consuntivo, consegna e correzioni
Obiettivo: gestione mensile controllata e ricalcolo retroattivo.
Separare cursore consuntivo e cursore consegna.Fatto il 18 agosto 2026, migrazione117— con una correzione del disegno decisa dal committente: il cursore di consegna non è per organizzazione ma per progetto (projects.delivered_through_month), perché ogni progetto si rendiconta al suo ente con i suoi tempi. Sostituiscefreeze_config, rimosso. Fra i due cursori resta la finestra in cui persone e ore si possono ancora spostare. Vedi Stato e decisioni.- Implementare comando
deliver monthcon snapshot, firma/hash e permesso dedicato. - Bloccare DB/API/UI per periodi consegnati.
- Implementare correzione retroattiva per periodi aperti, dirty range e ricalcolo cronologico.
- Conservare versioni, motivazione, attore e confronto prima/dopo.
- Rigenerare report interessati, evitando la modifica degli snapshot consegnati.
Exit gate: correzione di X aggiorna X..N; la stessa operazione su un mese consegnato fallisce senza scritture parziali.
Fase 6 — Forecasting vincolato (MVP avanzato)
Obiettivo: copertura progetti senza over-allocation.
- Formalizzare priorità, funzione obiettivo e semantica “progetto coperto” col committente.
- Implementare capacità netta, ferie e limite ore. È qui che atterra il modello di capacità dipendente/progetti rimandato dalla Fase 2, quello che serve al residuo ferie non ancora pianificato.
- Calcolare globalmente per organizzazione, non progetto per progetto in isolamento.
- Integrare tutti i trigger tramite outbox/job idempotenti.
- Mostrare stato, domanda scoperta, over-capacity, motivazioni e confronto versioni.
- Gestire freelancer con ore contrattuali e strategia dedicata.
- Eseguire UAT su scenari reali anonimizzati.
Exit gate MVP avanzato: flusso end-to-end HR → progetto → forecast → consuntivo → correzione → consegna → report validato dal committente.
Fase 7 — Hardening Release 1
Obiettivo: prodotto vendibile e operabile.
- Performance/load test su volumi attesi e ricalcoli concorrenti.
- SLO, dashboard, alert, tracing e runbook per import/forecast/report.
- Backup/restore e disaster recovery testati.
- Security review, dependency scan, audit accessi e retention/privacy.
- Migrazione onboarding per nuova organizzazione e import iniziale verificabile.
- Manuale utente, amministrazione, supporto e changelog.
- Feature flag, rollback applicativo/dati e canary/pilot.
- UAT formale, criteri di go-live e sign-off.
Exit gate Release 1: checklist qualità completa, nessun finding critico, restore provato e prima organizzazione onboarding tramite procedura documentata.
Backlog successivo
- scenari what-if e approvazione del forecast;
- notifiche manager/dipendente;
- API pubbliche/connettori HR;
- workflow ferie avanzato se richiesto;
- ottimizzazione multi-obiettivo configurabile;
- estrazione del forecasting worker se giustificata dalle metriche.