Deliverable formazione-first (DESIGN_AVATAR_FORMAZIONE / product-demo-complete):
- docs/mappa-logica/01..22_*.md: tutte le viste app V2 mappate (formato canonico standard §2),
selettori VERIFICATI sul DOM reale, endpoint verificati su api.js/script, gate ruolo dai controller
- docs/mappa-logica/SELETTORI_DEMO.md: registry canonico (22 viste, 131 visualizzazione + 89 azioni)
+ worklist consolidata 132 id stabili da aggiungere (modifiche chirurgiche future)
- docs/formazione/TASSONOMIA_CORSO_NIS2.{md,json}: 10 moduli / 28 lezioni / ~7h45, prerequisiti+durate,
esame con soglia 80%, sandbox 'prova tu' org 996002
- fix kb.js: ingest scope=ORG ora invia organization_id (prima 422 KB_ORG_REQUIRED) — bug trovato da A2
Prodotto con 4 trittici di agenti (A1 esecutore -> A2 revisore -> A3 controllore avversariale):
A2: ~14 correzioni (cross-ref, gate ruolo, comportamenti); A3 PASS: 38 selettori campionati 0 rotti,
18 endpoint reali, 0 violazioni normative (Allegati 3/4, IS-4, '1 mese', PII.* interna), 9 claim verificati.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
4.6 KiB
MAPPA-LOGICA · Dashboard
⟦ INIZIO · U-DASHBOARD · Videata "Dashboard" ⟧ File: public/dashboard.html · URL: /dashboard.html · Scopo: panoramica iniziale della compliance NIS2 dell'organizzazione (score, KPI, scadenze, attività) · Profili: tutti gli utenti autenticati con organizzazione (org_admin, compliance_manager, board_member, auditor, employee, consultant; super_admin)
• U-DASHBOARD.1 — Intestazione pagina
Mostra: titolo "Dashboard" e data corrente in italiano (es. "giovedì 12 giugno 2026"), valorizzata da JS.
Azioni: nessuna.
Dati da: data locale del browser (new Date().toLocaleDateString('it-IT')), nessuna API.
Confine: #header-date (riga ~23); header = .content-header (riga ~20).
• U-DASHBOARD.2 — Gauge "Avanzamento implementazione misure Art.21 NIS2"
Mostra: gauge circolare con percentuale di avanzamento implementazione delle misure Art.21 NIS2. Nota sotto il gauge: "Misura l'implementazione tecnica, non la conformita' legale". Il valore preferisce la % controlli implementati (avg_implementation); se assente ripiega sul punteggio assessment (score).
Azioni: nessuna (solo visualizzazione).
Dati da: GET /api/dashboard/overview (campo compliance_score) poi raffinato da GET /api/dashboard/compliance-score (campi avg_implementation, score).
Confine: #compliance-gauge (riga ~33).
• U-DASHBOARD.3 — Card statistiche (4 KPI)
Mostra: 4 stat-card con etichette reali: "Rischi Aperti" (totale rischi), "Incidenti Attivi", "Policy Approvate" (somma policy con status approved/published), "Formazione" (percentuale completamento corsi assegnati).
Azioni: nessuna (solo visualizzazione).
Dati da: GET /api/dashboard/overview — campi risks.total, active_incidents, policies[] (status+count), training.total/training.completed.
Confine: griglia #stats-grid (riga ~43); valori in #stat-risks (riga ~50), #stat-incidents (riga ~59), #stat-policies (riga ~68), #stat-training (riga ~77).
• U-DASHBOARD.4 — Azioni Rapide
Mostra: card "Azioni Rapide" con 3 bottoni: "Nuovo Assessment", "Registra Incidente", "Genera Policy AI".
Azioni: "Nuovo Assessment" → naviga a assessment.html; "Registra Incidente" → naviga a incidents.html; "Genera Policy AI" → apre la modale di generazione policy AI (vedi U-DASHBOARD.7).
Dati da: nessuna API in questa area (solo navigazione/apertura modale).
Confine: card alle righe ~85-105; bottoni con classe .quick-action-btn dentro .quick-actions (riga ~90). Nessun id stabile sui singoli bottoni (vedi sezione ID mancanti).
• U-DASHBOARD.5 — Prossime Scadenze
Mostra: lista delle prossime 5 scadenze con giorno/mese, titolo, categoria; badge "Urgente" se ≤3 giorni, "Prossima" se ≤7 giorni. Empty state: "Nessuna scadenza imminente".
Azioni: nessuna.
Dati da: GET /api/dashboard/upcoming-deadlines (campi due_date, title/description, category/type).
Confine: #deadlines-list (riga ~114).
• U-DASHBOARD.6 — Attività Recenti
Mostra: lista delle ultime 8 attività con descrizione e tempo relativo ("x minuti fa"). Empty state: "Nessuna attivita' recente".
Azioni: nessuna.
Dati da: GET /api/dashboard/recent-activity (campi description/message/action, created_at).
Confine: #activity-list (riga ~124).
• U-DASHBOARD.7 — Modale "Genera Policy con AI" (generata via JS)
Mostra: select "Categoria Policy" con 8 opzioni: Gestione del Rischio, Risposta agli Incidenti, Continuita' Operativa, Sicurezza Supply Chain, Controllo degli Accessi, Crittografia, Sicurezza del Personale, Gestione degli Asset.
Azioni: "Genera" → chiama l'AI, notifica "Generazione policy in corso...", a successo redirige a policies.html; "Annulla" → chiude la modale.
Dati da: POST /api/policies/ai-generate (body {category}).
Confine: modale iniettata da showModal() in #modal-overlay (creato da common.js); select #ai-policy-category (definito nel JS, riga ~310 dello script inline).
⟦ FINE · U-DASHBOARD ⟧
ID STABILI MANCANTI (da aggiungere)
| Elemento | Riga | Id proposto |
|---|---|---|
| Bottone "Nuovo Assessment" (azioni rapide) | ~91 | nis2-dashboard-qa-assessment |
| Bottone "Registra Incidente" (azioni rapide) | ~95 | nis2-dashboard-qa-incidente |
| Bottone "Genera Policy AI" (azioni rapide) | ~99 | nis2-dashboard-qa-policy-ai |
| Card "Azioni Rapide" | ~85 | nis2-dashboard-quick-actions |
Card "Prossime Scadenze" (wrapper card, il body ha già #deadlines-list) |
~110 | nis2-dashboard-card-scadenze |
Card "Attivita' Recenti" (wrapper card, il body ha già #activity-list) |
~120 | nis2-dashboard-card-attivita |