# 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 "; 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` |