Files
nis2-agile/docs/mappa-logica/02_assessment.md
T
DevEnv nis2-agileandClaude Opus 4.8 4dfab2a391 [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>
2026-06-12 18:50:19 +02:00

55 lines
5.6 KiB
Markdown

# 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. <articolo NIS2>" 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` |