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>
6.2 KiB
MAPPA-LOGICA · Gap Analysis ACN (misure di base)
⟦ INIZIO · U-ACN-GAP · Videata "Gap Analysis ACN (misure di base)" ⟧ File: public/acn-gap.html · URL: /acn-gap.html · Scopo: assessment di secondo livello sulla conformità puntuale alla Determinazione ACN 164179/2025 — misure e requisiti specifici per soggetti NIS importanti o essenziali, organizzati per funzione del Framework Nazionale (GV/ID/PR/DE/RS/RC) · Profili: tutti gli utenti autenticati con organizzazione (org_admin, compliance_manager, board_member, auditor, employee, consultant; super_admin). Richiede che l'organizzazione sia già classificata come importante o essenziale.
• U-ACN-GAP.1 — Intro normativa e bottone "Analisi AI dei gap"
Mostra: box introduttivo "Conformità puntuale alla Determinazione ACN 164179/2025" — spiega che l'analisi va oltre le 10 misure generiche dell'Art. 21 e che il perimetro dipende dalla classificazione (importante o essenziale). Nell'header un bottone "Analisi AI dei gap", visibile solo nella vista risultati.
Azioni: "Analisi AI dei gap" → lancia l'analisi AI dei requisiti non conformi (vedi U-ACN-GAP.6).
Dati da: POST /api/acn-gap/{id}/aiAnalyze.
Confine: intro #acn-intro (riga ~62); bottone #btn-ai-analyze (riga ~56).
• U-ACN-GAP.2 — Schermata START: classificazione, perimetro, assessment esistenti
Mostra: badge "Soggetto IMPORTANTE" (giallo) o "Soggetto ESSENZIALE" (rosso) con il perimetro applicabile "N misure, M requisiti" (importanti: 37 misure/87 requisiti; essenziali: 43/116). Se l'organizzazione non è classificata: messaggio "Classifica prima il soggetto come importante o essenziale (Impostazioni › Classificazione NIS2)" (error_code ENTITY_LEVEL_REQUIRED). Elenco "Assessment esistenti" con badge Completato (con punteggio) / In corso.
Azioni: "Nuova Gap Analysis ACN" → crea l'assessment e apre il wizard; "Consulta il catalogo dei requisiti" → mostra il catalogo read-only (U-ACN-GAP.3); per ogni assessment esistente: "Vedi" (completato) → risultati, "Riprendi" (in corso) → wizard.
Dati da: catalogo+livello: GET /api/acn-gap/catalog (campi entity_level, totals.measures, totals.requirements, functions[]); lista: GET /api/acn-gap/list; creazione: POST /api/acn-gap/create.
Confine: card #acn-start (riga ~68); info livello #acn-level-info (riga ~70); esistenti #acn-existing (riga ~71); bottone #btn-new-acn (riga ~72). Il bottone "Consulta il catalogo" non ha id (vedi ID mancanti).
• U-ACN-GAP.3 — Catalogo requisiti ACN (read-only)
Mostra: card "Catalogo requisiti ACN applicabili": accordion per funzione del Framework Nazionale — Governo (GV), Identificazione (ID), Protezione (PR), Rilevamento (DE), Risposta (RS), Ripristino (RC) — con misure (codice + titolo) e requisiti numerati, testo integrale.
Azioni: click sull'intestazione di una funzione → espande/comprime la sezione.
Dati da: GET /api/acn-gap/catalog (cache in window._acnCatalog).
Confine: card #acn-catalog (riga ~82); contenuto #acn-catalog-body (riga ~84).
• U-ACN-GAP.4 — Wizard di valutazione requisiti
Mostra: barra sticky con titolo "Gap Analysis ACN", badge livello (IMPORTANTE/ESSENZIALE), progress bar, contatore "N / M requisiti con risposta" e hint di salvataggio ("Salvataggio…" / "Salvato HH:MM" / "Salvataggio in sospeso"). Sotto: accordion per funzione con misure (codice + titolo) e per ogni requisito 4 bottoni-pillola: "Attuato" (verde), "Parziale" (giallo), "Non attuato" (rosso), "Non applic." (grigio).
Azioni: click su una pillola → seleziona la risposta e salva in autosave batch con debounce 700ms; "Calcola punteggio e completa" → se mancano risposte mostra alert "Mancano N risposte", altrimenti completa e mostra i risultati.
Dati da: domande: GET /api/acn-gap/{id}/requirements; salvataggio: POST /api/acn-gap/{id}/respond (body {responses:[{requirement_key, response_value}]}); completamento: POST /api/acn-gap/{id}/complete.
Confine: contenitore #acn-wizard (riga ~88); titolo #acn-wizard-title (riga ~92); livello #acn-wizard-level (riga ~93); barra #acn-bar-fill (riga ~95); contatori #acn-answered / #acn-total (riga ~96); hint #acn-savehint (riga ~97); requisiti #acn-functions (riga ~101); messaggio #acn-wizard-msg (riga ~105); bottone #btn-acn-complete (riga ~106). Le pillole risposta sono generate via JS con classe .acn-opt e attributi data-key/data-val.
• U-ACN-GAP.5 — Risultati: punteggio complessivo e per funzione
Mostra: card "Esito Gap Analysis ACN" con punteggio complessivo 0-100 (colore: verde ≥80, lime ≥60, ambra ≥40, rosso <40) e didascalia "Punteggio complessivo di conformità (0-100)"; sezione "Punteggio per funzione (Framework Nazionale)" con pill colorate per GV/ID/PR/DE/RS/RC; card "Requisiti non conformi (piano d'azione)" con codice misura, badge "Non attuato"/"Parziale" e testo del requisito (oppure "Nessun gap: pienamente conforme."); bottone "Torna all'inizio".
Azioni: "Torna all'inizio" → ricarica la pagina (vista START).
Dati da: GET /api/acn-gap/{id}/report (campi assessment.overall_score, assessment.function_scores, gaps[], assessment.ai_summary).
Confine: contenitore #acn-results (riga ~113); punteggio #acn-overall (riga ~118); funzioni #acn-func-scores (riga ~122); gap #acn-gaps (riga ~131). Il bottone "Torna all'inizio" non ha id (vedi ID mancanti).
• U-ACN-GAP.6 — Card "Analisi AI dei gap"
Mostra: testo dell'analisi AI dei requisiti non conformi (ai_summary, pre-formattato). Visibile se l'assessment ha già un riepilogo AI o dopo aver lanciato l'analisi.
Azioni: popolata dal bottone #btn-ai-analyze (header); durante l'analisi il bottone mostra "Analisi in corso…".
Dati da: POST /api/acn-gap/{id}/aiAnalyze (risposta ai_summary); in lettura da GET /api/acn-gap/{id}/report.
Confine: card #acn-ai-card (riga ~125); contenuto #acn-ai-body (riga ~127).
⟦ FINE · U-ACN-GAP ⟧
ID STABILI MANCANTI (da aggiungere)
| Elemento | Riga | Id proposto |
|---|---|---|
| Bottone "Consulta il catalogo dei requisiti" | ~75 | nis2-acn-gap-btn-catalogo |
| Bottone "Torna all'inizio" (vista risultati) | ~134 | nis2-acn-gap-btn-restart |