6.9 KiB
6.9 KiB
Analisi Funzionale e Piano di Implementazione: Modulo Formazione Obbligatoria
1. Introduzione e Obiettivi
La presente analisi definisce le specifiche per l'estensione del sistema Zentral (progetto "OBIS" nel contesto cliente) con un modulo dedicato alla Gestione della Formazione Obbligatoria. L'obiettivo è integrare nativamente la gestione di aziende, lavoratori, corsi, scadenze e attestati, automatizzando il calcolo delle validità e il workflow di notifica ai referenti aziendali.
2. Requisiti Funzionali
2.1 Gestione Anagrafiche
Il sistema deve sfruttare le entità esistenti estendendone la logica di presentazione e filtraggio.
- Aziende e Sedi: Mapping su
Cliente.- Funzionalità: Attivazione/disattivazione (campo
Attivo), storicizzazione (implicita nel non cancellare i dati), gestione sedi (già presente o gestibile tramite indirizzi multipli/destinazioni o clienti gerarchici. Decisione: UsareClientestandard. Se necessario "Sede", si useranno i campi indirizzo o clienti collegati).
- Funzionalità: Attivazione/disattivazione (campo
- Lavoratori: Mapping su
ClienteContatto.- Funzionalità: Ricerca trasversale (Global Search), filtri per Azienda, Ruolo, Stato Formativo.
- Dati: Nome, Cognome, Ruolo (es. "Saldatore", "Impiegato"), Email, Telefono.
2.2 Catalogo Corsi
Il catalogo corsi è il "motore" delle regole di scadenza.
- Mapping:
Articolocon Categoria "Formazione". - Configurazione:
- Tipologia: Definita tramite sottocategorie merceologiche (es. Sicurezza > Basso Rischio).
- Validità: Campo
GiorniValidita(già implementato) per calcolo automatico scadenza. - Logica Aggiornamento: Definizione se un corso è aggiornamento di un altro (facoltativo, logica avanzata).
2.3 Registro Formazione ed Eventi
Centralizzazione dello storico formativo.
- Mapping:
TrainingRecord. - Funzionalità:
- Registrazione partecipazione lavoratore a corso.
- Calcolo Stati:
- Valido: Corso effettuato e non scaduto.
- In Pre-scadenza: Meno di X giorni alla scadenza (configurabile, es. 30 o 60 gg).
- Scaduto: Data odierna > Data Scadenza.
- Attestati: Upload PDF/JPG, anteprima, download, archiviazione.
2.4 Scadenzario Interattivo (Dashboard)
Strumento principale per l'operatore.
- Visualizzazione: Tabellare avanzata (Data Grid).
- Colonne Chiave: Lavoratore, Azienda, Corso, Data Esecuzione, Data Scadenza, Stato, Azioni.
- Filtri:
- Per Azienda/Sede.
- Per Tipologia Corso.
- Range Date Scadenza.
- Stato (Mostra solo Scaduti/In Scadenza).
- Export: Funzione diretta "Esporta in Excel" della vista filtrata.
2.5 Sistema di Notifiche (Workflow Approvativo)
Il sistema non deve inviare email "a pioggia" ai lavoratori, ma notifiche controllate ai referenti.
- Target: Referente Aziendale (identificato nel
Clienteo unClienteContattospecifico marcato come "Referente Formazione"). - Tipologie:
- Pre-scadenza: Avviso X giorni prima.
- Scadenza: Avviso il giorno stesso o settimana stessa.
- Post-scadenza: Sollecito.
- Coda di Invio (Queue):
- Le email non partono subito. Vengono generate in stato
Pendingin una tabella dedicata (TrainingNotificationQueue). - Interfaccia di Review: L'operatore vede le email pronte, può selezionarle, modificarle (opzionale) e approvarne l'invio.
- Le email non partono subito. Vengono generate in stato
- Template:
- Supporto per template standard (Oggetto e Corpo configurabili con placeholder
{Azienda},{Lavoratore},{Corso},{Scadenza}).
- Supporto per template standard (Oggetto e Corpo configurabili con placeholder
2.6 Import/Export Anagrafiche
- Import Massivo: Upload file Excel per popolare/aggiornare
ClienteContatto(Lavoratori) e storicoTrainingRecord. - Export E-learning: Esportazione CSV/XLS su tracciati specifici (da definire, genericamente "Campi Anagrafici Base") per import su piattaforme esterne.
3. Piano di Implementazione Tecnico
Phase 1: Backend Extension & Data Model
- Entities:
- Verificare
TrainingRecord(già esistente). - Creare
TrainingNotification(Queue):Id,TrainingRecordId,RecipientEmail,Subject,Body,ScheduledDate,SentDate,Status(Pending, Approved, Sent, Error).
- Creare
ImportJob(opzionale, o gestione diretta API).
- Verificare
- API Controllers:
TrainingController:- Endpoint
GetDeadlines: Query complessa con filtri, paginazione ordinamento. - Endpoint
ExportDeadlines: Generazione Excel. - Endpoint
ImportData: Parsing Excel e bulk insert. - Endpoint
GenerateNotifications: Job (o trigger) per popolare la coda notifiche in base alle scadenze. - Endpoint
SendNotifications: Invio massivo delle notifiche approvate.
- Endpoint
Phase 2: Frontend Implementation (App training)
- Views (Pagine):
- Scadenzario (
TrainingDeadlinesPage):- Datagrid avanzata (libreria UI o custom table con filtri).
- Bottone "Esporta Excel".
- Code Notifiche (
NotificationCenterPage):- Lista email in attesa.
- Checkbox selezione multipla -> Azione "Approva e Invia".
- Preview email side-by-side.
- Registro Lavoratori (
WorkersRegistryPage):- Vista incentrata sui
ClienteContattocon focus formazione (colonne: Ultimi corsi, Stato generale).
- Vista incentrata sui
- Import/Export Utility (
DataExchangePage):- Upload file Excel, mapping colonne (semplificato), log risultati import.
- Scadenzario (
Phase 3: Integration & Logic
- Notification Logic:
- Service che scansiona
TrainingRecordogni notte (o on-demand), calcola scadenze, controlla se notifica già generata, crea record inTrainingNotification. - Logica di raggruppamento: Se un'azienda ha 10 lavoratori in scadenza, inviare 1 email cumulativa al referente o 10 email separate? Specifiche attuali: "email... indirizzate ai referenti... non ai singoli lavoratori".
- Decisione Progettuale: Email Raggruppata per Referente. Il sistema deve raggruppare le scadenze per Azienda e generare una sola notifica con la lista dei lavoratori in scadenza.
- Service che scansiona
4. Nuove Rotte e Struttura File (Preview)
Backend
src/backend/Zentral.Domain/Entities/Training/TrainingNotification.cssrc/backend/Zentral.API/Modules/Training/Controllers/TrainingNotificationsController.cssrc/backend/Zentral.API/Modules/Training/Services/NotificationGeneratorService.cssrc/backend/Zentral.API/Modules/Training/Services/ExcelImportService.cs
Frontend
src/frontend/src/apps/training/pages/TrainingDeadlinesPage.tsxsrc/frontend/src/apps/training/pages/NotificationCenterPage.tsxsrc/frontend/src/apps/training/pages/WorkersRegistryPage.tsxsrc/frontend/src/apps/training/pages/DataExchangePage.tsx
5. Note Operative
- Utilizzare libreria
EPPlusoClosedXMLlato server per Excel, oSheetJSlato client se l'export è puramente visivo (preferibile server-side per grandi moli di dati). - Per le Importazioni: Validazione rigorosa Codici Fiscali o Email univoche per evitare duplicati anagrafiche.