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>
5.6 KiB
MAPPA-LOGICA · Gap Analysis NIS2 (Assessment)
⟦ INIZIO · U-ASSESSMENT · Videata "Gap Analysis NIS2" ⟧ File: public/assessment.html · URL: /assessment.html · Scopo: condurre l'assessment di conformità NIS2 (80 domande, 10 categorie Art.21), vedere i risultati per categoria, lanciare l'analisi AI e generare NCR dai gap · Profili: tutti gli utenti autenticati con organizzazione (org_admin, compliance_manager, board_member, auditor, employee, consultant; super_admin)
• U-ASSESSMENT.1 — Intestazione con bottone "Analisi AI"
Mostra: titolo "Gap Analysis NIS2"; bottone "Analisi AI" nascosto finché non si è nella vista risultati.
Azioni: "Analisi AI" → lancia l'analisi AI sull'assessment corrente (vedi U-ASSESSMENT.6).
Dati da: POST /api/assessments/{id}/ai-analyze.
Confine: #btn-ai-analyze (riga ~23).
• U-ASSESSMENT.2 — Schermata iniziale "Assessment di Conformita' NIS2"
Mostra: card introduttiva con testo "Valuta il livello di conformita' della tua organizzazione rispetto ai requisiti della direttiva NIS2"; tabella "Assessment Esistenti" (colonne: Data, Stato, Punteggio, Azioni) con badge "Completato"/"In Corso"; bottone primario "Nuovo Assessment".
Azioni: "Nuovo Assessment" → crea un assessment e apre il wizard; per riga esistente: "Risultati" (se completato) → vista risultati; "Riprendi" (se in corso) → riapre il wizard.
Dati da: lista: GET /api/assessments/list; creazione: POST /api/assessments/create (body {title}).
Confine: #assessment-start (riga ~32); tabella in #existing-assessments (riga ~37); bottone #btn-new-assessment (riga ~39).
• U-ASSESSMENT.3 — Wizard: indicatore step e barra avanzamento
Mostra: step cliccabili numerati per categoria (10 categorie Art.21, generati via JS con classe .step); barra "Avanzamento risposta domande" con percentuale e contatore "N di M domande con risposta".
Azioni: click su uno step → salta alla categoria (consentito solo verso categorie già visitate o la successiva).
Dati da: GET /api/assessments/{id}/questions (struttura: array di {category_id, category_title, questions[]}).
Confine: wizard #assessment-wizard (riga ~47); step #steps-indicator (riga ~49); barra #progress-bar-fill (riga ~58), percentuale #progress-pct (riga ~55), contatori #progress-answered / #progress-total (riga ~61).
• U-ASSESSMENT.4 — Wizard: card domanda corrente
Mostra: titolo categoria, contatore "n/totale"; testo domanda con eventuale guida (guidance_it) e tag "Art. " e "ISO <controllo 27001>"; 4 radio "Livello di Conformita'": Non Implementato, Parziale, Implementato, Non Applicabile; slider "Livello di Maturita' (0-5)" da "0 - Inesistente" a "5 - Ottimizzato"; campo "Note"; campo "Descrizione Evidenza".
Azioni: "Precedente" → domanda precedente; "Salva Progresso" → salva la risposta corrente con notifica; "Successiva" → salva in background e avanza; sull'ultima domanda il bottone diventa "Completa Assessment" e chiude l'assessment.
Dati da: salvataggio risposta: POST /api/assessments/{id}/respond (body {question_code, response_value, maturity_level, notes, evidence_description}); completamento: POST /api/assessments/{id}/complete.
Confine: header categoria #category-title (riga ~68), contatore #question-counter (riga ~69), area domanda #question-area (riga ~71); bottoni #btn-prev (riga ~76) e #btn-next (riga ~83). Campi generati via JS dentro #question-area: #maturity-slider, #maturity-value, #question-notes, #question-evidence. Il bottone "Salva Progresso" non ha id (vedi ID mancanti).
• U-ASSESSMENT.5 — Risultati: punteggio complessivo e per categoria
Mostra: gauge con punteggio complessivo (overall_score); sezione "Punteggio per Categoria" con barre percentuali colorate (verde ≥60%, giallo ≥40%, rosso <40%) per ciascuna delle categorie Art.21.
Azioni: bottone "Analisi AI" nell'header della card (stesso flusso di U-ASSESSMENT.6).
Dati da: GET /api/assessments/{id}/report (campi overall_score, category_scores).
Confine: contenitore #assessment-results (riga ~93); gauge #results-gauge (riga ~104); barre #category-scores (riga ~108).
• U-ASSESSMENT.6 — Card "Analisi AI"
Mostra: (visibile dopo l'analisi) sezioni Riepilogo, Punti di Forza, Aree di Miglioramento, Raccomandazioni generate dall'AI; badge "Intelligenza Artificiale".
Azioni: nessuna interna; viene popolata dai bottoni "Analisi AI".
Dati da: POST /api/assessments/{id}/ai-analyze (risposta con summary, strengths[], weaknesses[], recommendations[]).
Confine: card #ai-analysis-card (riga ~113); contenuto #ai-analysis-content (riga ~118).
• U-ASSESSMENT.7 — Card "Non Conformita'" (generazione NCR dai gap)
Mostra: testo esplicativo: i controlli "Non Implementato" generano NCR major, quelli "Parzialmente Implementato" generano NCR minor; dopo la generazione mostra il riepilogo "N non conformita' generate" con conteggio major/minor.
Azioni: "Genera Non Conformita' dai Gap" → crea le NCR dall'assessment; il bottone si nasconde a successo.
Dati da: POST /api/ncr/from-assessment (body {assessment_id}).
Confine: card #ncr-generation-card (riga ~122); bottone #btn-generate-ncr (riga ~132); esito #ncr-generation-result (riga ~136).
⟦ FINE · U-ASSESSMENT ⟧
ID STABILI MANCANTI (da aggiungere)
| Elemento | Riga | Id proposto |
|---|---|---|
| Bottone "Salva Progresso" (footer card domanda) | ~80 | nis2-assessment-btn-salva |
| Bottone "Analisi AI" nell'header della card Risultati (duplicato di #btn-ai-analyze, senza id) | ~97 | nis2-assessment-btn-ai-risultati |