Files
nis2-agile/docs/mappa-logica/03_acn-gap.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

49 lines
6.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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` |