[FORMAZIONE] Avatar di prodotto — mappa-logica COMPLETA (22 viste) + SELETTORI_DEMO + tassonomia corso + fix kb.js
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>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
e1ab0b3ea0
commit
4dfab2a391
@@ -0,0 +1,71 @@
|
||||
# MAPPA-LOGICA · Gestione Rischi
|
||||
|
||||
⟦ INIZIO · U-RISKS · Videata "Gestione Rischi" ⟧
|
||||
File: public/risks.html · URL: /risks.html · Scopo: risk register NIS2 — censimento rischi (probabilità x impatto), matrice 5x5, analisi quantitativa FAIR (ALE/Monte Carlo), dashboard KRI, trattamenti e suggerimenti AI · Profili: tutti gli utenti autenticati con organizzazione (org_admin, compliance_manager, board_member, auditor, employee, consultant; super_admin)
|
||||
|
||||
• U-RISKS.1 — Intestazione: toggle viste + azioni globali
|
||||
Mostra: titolo "Gestione Rischi"; toggle a 4 viste: "Tabella", "Matrice", "Quantitativo (FAIR)", "KRI"; bottoni "AI Suggerisci" e "+ Nuovo Rischio".
|
||||
Azioni: click sul toggle → `switchView()` mostra la vista corrispondente; "AI Suggerisci" → modale con rischi suggeriti dall'AI (U-RISKS.9); "+ Nuovo Rischio" → modale creazione rischio (U-RISKS.7).
|
||||
Dati da: "AI Suggerisci": `POST /api/risks/ai-suggest`.
|
||||
Confine: toggle `#view-toggle` (riga ~310); bottone `#btn-ai-suggest` (riga ~316). I singoli bottoni del toggle e "+ Nuovo Rischio" non hanno id (vedi ID mancanti).
|
||||
|
||||
• U-RISKS.2 — Vista Tabella: filtri + registro rischi
|
||||
Mostra: filtri "Tutte le categorie" (Cyber, Operativo, Compliance, Supply Chain, Fisico, Umano) e "Tutti gli stati" (Identificato, In Analisi, In Trattamento, Monitorato, Chiuso); tabella con colonne Codice, Titolo, Categoria, Probabilita' (n/5), Impatto (n/5), Score (badge circolare colorato: low<10, medium 10-14, high 15-19, critical ≥20), Stato, Azioni (matita=Modifica, cestino=Elimina). Righe cliccabili.
|
||||
Azioni: cambio filtro → ricarica lista; click riga → dettaglio rischio (U-RISKS.6); matita → modale modifica (U-RISKS.7); cestino → modale conferma eliminazione (U-RISKS.8).
|
||||
Dati da: `GET /api/risks/list?category=&status=` (risposta `data.items`).
|
||||
Confine: contenitore `#view-table` (riga ~326); filtri `#filter-category` (riga ~328) e `#filter-status` (riga ~337); corpo tabella `#risks-table-body` (riga ~362).
|
||||
|
||||
• U-RISKS.3 — Vista Matrice di Rischio 5x5
|
||||
Mostra: card "Matrice di Rischio 5x5" (sottotitolo "Rischi inerenti (esclusi chiusi)"): griglia Probabilita' (asse Y, 5→1) x Impatto (asse X, 1→5), celle colorate dal verde al rosso secondo score P×I; dot bianco con il numero di rischi nella cella (tooltip con i titoli). Legenda: Basso (1-4), Medio (5-9), Alto (10-14), Elevato (15-19), Critico (20-25).
|
||||
Azioni: hover sulle celle (tooltip); nessun click.
|
||||
Dati da: `GET /api/risks/matrix` (risposta `data.risks` con `likelihood`, `impact`, `title`).
|
||||
Confine: contenitore `#view-matrix` (riga ~375); griglia `#risk-matrix-grid` (riga ~386).
|
||||
|
||||
• U-RISKS.4 — Vista Quantitativo (FAIR): simulatore ALE + registro
|
||||
Mostra: card "Analisi Quantitativa del Rischio (FAIR)" — "Perdita Annua Attesa (ALE) in EUR — simulazione Monte Carlo". Form: select Rischio, TEF min/probabile/max (eventi/anno), Vulnerabilita (0-1), Perdita min/probabile/max (EUR). Risultati: 4 stat-box "ALE P10 (ottimistico)", "ALE Mediana (P50)", "ALE P90 (pessimistico)", "ALE Media", LEF medio e istogramma della distribuzione delle perdite simulate. Seconda card "Registro Quantitativo" con "ALE di portafoglio" e tabella (Codice, Titolo, Categoria, ALE Min/Mediana/Max/Media).
|
||||
Azioni: "Calcola ALE" → esegue la simulazione FAIR sul rischio selezionato e aggiorna il registro.
|
||||
Dati da: select rischi: `GET /api/risks/list?per_page=200`; calcolo: `POST /api/risks/{id}/fair` (body `tef_min, tef_ml, tef_max, vuln, lm_min, lm_ml, lm_max`); registro: `GET /api/risks/fairRegister` (campi `portfolio_ale_mean`, `risks[]`).
|
||||
Confine: contenitore `#view-fair` (riga ~420); select `#fair-risk-select` (riga ~429); input `#fair-tef-min` (~430), `#fair-tef-ml` (~431), `#fair-tef-max` (~432), `#fair-vuln` (~433), `#fair-lm-min` (~434), `#fair-lm-ml` (~435), `#fair-lm-max` (~436); bottone `#btn-run-fair` (riga ~438); risultati `#fair-result` (~439) con `#fair-p10`/`#fair-p50`/`#fair-p90`/`#fair-mean` (~441-444), `#fair-lef` (~446), `#fair-histogram` (~447), `#fair-histogram-labels` (~448); portafoglio `#fair-portfolio` (~454); registro `#fair-register-body` (~458).
|
||||
|
||||
• U-RISKS.5 — Vista KRI: indicatori chiave di rischio
|
||||
Mostra: 4 stat-box riepilogo per stato (Critico/rosso, Attenzione/ambra, OK/verde, N/D/grigio); tabella KRI con colonne Stato (semaforo), Indicatore (nome + descrizione), Categoria, Valore (con unità), Soglia Warning, Soglia Critica, Azioni (Modifica).
|
||||
Azioni: "+ Nuovo KRI" → modale creazione (U-RISKS.8); "Modifica" su riga → stessa modale precompilata.
|
||||
Dati da: `GET /api/risks/kri` (campi `summary{red,amber,green,unknown}`, `kris[]`).
|
||||
Confine: contenitore `#view-kri` (riga ~464); riepilogo `#kri-summary` (riga ~466); corpo tabella `#kri-table-body` (riga ~473). Il bottone "+ Nuovo KRI" non ha id (vedi ID mancanti).
|
||||
|
||||
• U-RISKS.6 — Vista Dettaglio rischio (generata via JS)
|
||||
Mostra: bottone "Torna alla lista"; card principale con codice + titolo, blocco score "Probabilita' x Impatto = Rischio Inerente" (+ "Rischio Residuo" se presente), Descrizione, Categoria, Stato, Trattamento (Mitigare/Accettare/Trasferire/Evitare), Sorgente Minaccia, Vulnerabilita', Responsabile, Data Revisione, Articolo NIS2; card "Trattamenti" con elenco azioni (descrizione, stato, responsabile, scadenza, note); card laterale "Riepilogo" (Codice, Creato il, Aggiornato il, numero Trattamenti).
|
||||
Azioni: "Torna alla lista" → ripristina la vista precedente; "Modifica" → modale modifica; "Elimina" → modale conferma; "+ Aggiungi" trattamento → modale trattamento (U-RISKS.8).
|
||||
Dati da: `GET /api/risks/{id}` (include `treatments[]`).
|
||||
Confine: contenitore `#view-detail` (riga ~479); contenuto interno generato via JS senza id propri (bottone back con classe `.detail-back`).
|
||||
|
||||
• U-RISKS.7 — Modale "Nuovo Rischio" / "Modifica Rischio" (generata via JS)
|
||||
Mostra: campi Titolo*, Descrizione, Categoria, Trattamento, Sorgente Minaccia, Vulnerabilita', slider Probabilita' 1-5 (con scala ISO 27005: da "1 - Remota: <1% probabilità annua" a "5 - Quasi Certa: >70%"), slider Impatto 1-5 (da "1 - Minimo: <€10k danno" a "5 - Catastrofico: >€10M"), anteprima live "Rischio Inerente" (P×I, colore dinamico), Responsabile (ID utente), Data Revisione, Articolo NIS2 di riferimento.
|
||||
Azioni: "Crea Rischio"/"Salva Modifiche" → crea o aggiorna il rischio e ricarica lista/dettaglio; "Annulla" → chiude.
|
||||
Dati da: creazione: `POST /api/risks/create`; modifica: `PUT /api/risks/{id}`; precompilazione: `GET /api/risks/{id}`.
|
||||
Confine: modale in `#modal-overlay` (common.js); campi JS: `#risk-title`, `#risk-description`, `#risk-category`, `#risk-treatment`, `#risk-threat-source`, `#risk-vulnerability`, `#risk-likelihood`, `#risk-impact`, `#likelihood-value`, `#impact-value`, `#likelihood-detail`, `#impact-detail`, `#score-preview-value`, `#risk-owner`, `#risk-review-date`, `#risk-nis2-article` (script righe ~1080-1156).
|
||||
|
||||
• U-RISKS.8 — Modali secondarie: KRI, Trattamento, Eliminazione (generate via JS)
|
||||
Mostra: (a) Modale "Nuovo KRI"/"Modifica KRI": Nome indicatore*, Descrizione, Categoria, Unita (%, count, EUR...), Valore corrente, Obiettivo, Soglia Warning, Soglia Critica, Direzione (Valori alti = peggio / Valori bassi = peggio). (b) Modale "Aggiungi Trattamento": Descrizione Azione*, Responsabile (ID utente), Data Scadenza, Stato (Pianificato/In Corso/Completato), Note. (c) Modale "Conferma Eliminazione": testo con titolo del rischio.
|
||||
Azioni: (a) "Salva" → crea/aggiorna KRI; (b) "Aggiungi" → crea trattamento e ricarica il dettaglio; (c) "Elimina" → cancella il rischio.
|
||||
Dati da: KRI: `POST /api/risks/kri` (create) e `PUT /api/risks/kri/{id}` (update); trattamento: `POST /api/risks/{id}/treatments`; eliminazione: `DELETE /api/risks/{id}`.
|
||||
Confine: tutte in `#modal-overlay`; campi KRI: `#kri-name`, `#kri-desc`, `#kri-cat`, `#kri-unit`, `#kri-cur`, `#kri-target`, `#kri-warn`, `#kri-crit`, `#kri-dir` (script righe ~764-777); campi trattamento: `#treatment-description`, `#treatment-responsible`, `#treatment-due-date`, `#treatment-status`, `#treatment-notes` (script righe ~1264-1291).
|
||||
|
||||
• U-RISKS.9 — Modale "Rischi Suggeriti dall'AI" (generata via JS)
|
||||
Mostra: elenco scrollabile di rischi suggeriti dall'AI in base al settore/asset dell'organizzazione: titolo, descrizione, tag categoria, badge "P:n" e "I:n".
|
||||
Azioni: "Chiudi" → chiude la modale (i suggerimenti non vengono inseriti automaticamente nel registro).
|
||||
Dati da: `POST /api/risks/ai-suggest` (risposta array o `data.suggestions[]`).
|
||||
Confine: modale in `#modal-overlay`; trigger `#btn-ai-suggest` (riga ~316).
|
||||
|
||||
⟦ FINE · U-RISKS ⟧
|
||||
|
||||
## ID STABILI MANCANTI (da aggiungere)
|
||||
| Elemento | Riga | Id proposto |
|
||||
|---|---|---|
|
||||
| Bottone toggle "Tabella" | ~311 | `nis2-risks-toggle-tabella` |
|
||||
| Bottone toggle "Matrice" | ~312 | `nis2-risks-toggle-matrice` |
|
||||
| Bottone toggle "Quantitativo (FAIR)" | ~313 | `nis2-risks-toggle-fair` |
|
||||
| Bottone toggle "KRI" | ~314 | `nis2-risks-toggle-kri` |
|
||||
| Bottone "+ Nuovo Rischio" (header) | ~320 | `nis2-risks-btn-nuovo` |
|
||||
| Bottone "+ Nuovo KRI" (vista KRI) | ~467 | `nis2-risks-btn-nuovo-kri` |
|
||||
| Bottone "Torna alla lista" nel dettaglio (classe `.detail-back`, generato via JS) | script ~918 | `nis2-risks-btn-back` |
|
||||
Reference in New Issue
Block a user