[FEAT] Epic C / C3 — rimosso modulo 'Analisi GAP ACN' (superato da C1)

Simon C3: l'analisi gap ACN non è un artefatto normativo e va eliminata; la conformità
emerge da C1 (elenco Misure/Requisiti + valutazione per requisito in org_requisito_state).

Ricognizione → migrazione → backup → rimozione (sicuro, 0 perdite):
- Tabelle acn_assessments/acn_assessment_responses VUOTE (0 righe) -> droppate (mig.049,
  guard anti-drop se >0 righe). Ricreabili da 036. Nessun dato utente perso.
- Integrazione lg231: /api/services/gap-analysis legge 'assessments' generale, NON il modulo
  ACN -> intatta. Verificato.
- RaciController ripuntato su cfg_nis2_misure (fonte canonica) al posto di acn_measures.json
  (rimosso); validazione measure_code verificata (/raci/objects?type=measure -> 43 misure).
Rimossi: AcnAssessmentController, public/acn-gap.html, application/data/acn_measures.json,
routing acn-gap, voci sidebar (common.js + common-bi.js), metodi api.js acn*, sezione help 'acn',
chiavi i18n acn.*, mapping demo-selectors. Tour demo step 3 RIPUNTATO su misure-requisiti
(no step rotto, 10 step). Sidebar BI ora mostra 'Misure e Requisiti' (gap di common-bi.js sanato).
Verifiche prod: /acn-gap.html 404, /api/acn-gap/* 404, /misure-requisiti 200, RaciController OK.
Cache-buster ?v=20260624, version 1.18.3, SW v1.18.3.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
DevEnv nis2-agile
2026-06-16 19:24:29 +02:00
co-authored by Claude Opus 4.8
parent 45e6c3599c
commit e281aa4970
50 changed files with 147 additions and 2506 deletions
-9
View File
@@ -194,15 +194,6 @@ class NIS2API {
}
return r.data;
}
acnCatalog() { return this._acn(this.get('/acn-gap/catalog')); }
acnList() { return this._acn(this.get('/acn-gap/list')); }
acnCreate(data) { return this._acn(this.post('/acn-gap/create', data || {})); }
acnGet(id) { return this._acn(this.get(`/acn-gap/${id}`)); }
acnRequirements(id) { return this._acn(this.get(`/acn-gap/${id}/requirements`)); }
acnRespond(id, data) { return this._acn(this.post(`/acn-gap/${id}/respond`, data)); }
acnComplete(id) { return this._acn(this.post(`/acn-gap/${id}/complete`, {})); }
acnReport(id) { return this._acn(this.get(`/acn-gap/${id}/report`)); }
acnAiAnalyze(id) { return this._acn(this.post(`/acn-gap/${id}/aiAnalyze`, {})); }
// ═══════════════════════════════════════════════════════════════════
// Modello Organizzativo SGSI (ISO 27001/27017/27018) — vedi IsmsModelController
+1 -1
View File
@@ -64,7 +64,7 @@
{ name: 'Dashboard', href: 'dashboard.html', icon: iconGrid(), i18nKey: 'nav.dashboard' },
{ name: 'Compliance Journey', href: 'workflow.html', icon: '<svg viewBox="0 0 20 20" fill="currentColor"><path d="M10.707 2.293a1 1 0 00-1.414 0l-7 7a1 1 0 001.414 1.414L4 10.414V17a1 1 0 001 1h2a1 1 0 001-1v-2a1 1 0 011-1h2a1 1 0 011 1v2a1 1 0 001 1h2a1 1 0 001-1v-6.586l.293.293a1 1 0 001.414-1.414l-7-7z"/></svg>' },
{ name: 'Gap Analysis', href: 'assessment.html', icon: iconClipboardCheck(), i18nKey: 'nav.gap_analysis' },
{ name: 'Gap Analysis ACN', href: 'acn-gap.html', icon: iconClipboardCheck(), i18nKey: 'nav.acn_gap' },
{ name: 'Misure e Requisiti', href: 'misure-requisiti.html', icon: '<svg viewBox="0 0 20 20" fill="currentColor"><path fill-rule="evenodd" d="M3 4a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zm0 4a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zm0 4a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zm0 4a1 1 0 011-1h8a1 1 0 110 2H4a1 1 0 01-1-1z" clip-rule="evenodd"/></svg>', i18nKey: 'nav.framework' },
{ name: 'Modello SGSI (ISO 27001)', href: 'isms.html', icon: '<svg viewBox="0 0 20 20" fill="currentColor"><path fill-rule="evenodd" d="M2.166 4.999A11.954 11.954 0 0010 1.944 11.954 11.954 0 0017.834 5c.11.65.166 1.32.166 2.001 0 5.225-3.34 9.67-8 11.317C5.34 16.67 2 12.225 2 7c0-.682.057-1.35.166-2.001zm11.541 3.708a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"/></svg>', i18nKey: 'nav.isms' }
]
},
-1
View File
@@ -188,7 +188,6 @@ function loadSidebar() {
{ name: 'Dashboard', href: 'dashboard.html', icon: iconGrid(), i18nKey: 'nav.dashboard' },
{ name: 'Compliance Journey', href: 'workflow.html', icon: `<svg viewBox="0 0 20 20" fill="currentColor"><path d="M10.707 2.293a1 1 0 00-1.414 0l-7 7a1 1 0 001.414 1.414L4 10.414V17a1 1 0 001 1h2a1 1 0 001-1v-2a1 1 0 011-1h2a1 1 0 011 1v2a1 1 0 001 1h2a1 1 0 001-1v-6.586l.293.293a1 1 0 001.414-1.414l-7-7z"/></svg>` },
{ name: 'Gap Analysis', href: 'assessment.html', icon: iconClipboardCheck(), i18nKey: 'nav.gap_analysis' },
{ name: 'Gap Analysis ACN', href: 'acn-gap.html', icon: iconClipboardCheck(), i18nKey: 'nav.acn_gap' },
{ name: 'Misure e Requisiti', href: 'misure-requisiti.html', icon: `<svg viewBox="0 0 20 20" fill="currentColor"><path fill-rule="evenodd" d="M3 4a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zm0 4a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zm0 4a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zm0 4a1 1 0 011-1h8a1 1 0 110 2H4a1 1 0 01-1-1z" clip-rule="evenodd"/></svg>`, i18nKey: 'nav.framework' },
{ name: 'Modello SGSI (ISO 27001)', href: 'isms.html', icon: `<svg viewBox="0 0 20 20" fill="currentColor"><path fill-rule="evenodd" d="M2.166 4.999A11.954 11.954 0 0010 1.944 11.954 11.954 0 0017.834 5c.11.65.166 1.32.166 2.001 0 5.225-3.34 9.67-8 11.317C5.34 16.67 2 12.225 2 7c0-.682.057-1.35.166-2.001zm11.541 3.708a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"/></svg>`, i18nKey: 'nav.isms' },
]
+1 -1
View File
@@ -17,7 +17,7 @@
var VIEWS = {
'dashboard': '/dashboard.html',
'assessment': '/assessment.html',
'acn-gap': '/acn-gap.html',
'misure-requisiti': '/misure-requisiti.html',
'risks': '/risks.html',
'incidents': '/incidents.html',
'policies': '/policies.html',
-49
View File
@@ -114,51 +114,6 @@ const HelpSystem = (function () {
]
},
'acn': {
title: 'Guida - Gap Analysis ACN (misure di base)',
intro: 'La Gap Analysis ACN valuta la conformita\' rispetto alle misure e ai requisiti PUNTUALI stabiliti dalla Determinazione ACN n. 164179 del 14/04/2025 (Allegati 1 e 2), non le 10 famiglie generiche dell\'art. 24 del D.Lgs. 138/2024 (art. 21 Direttiva). E\' l\'analisi di secondo livello, allineata all\'autovalutazione che i soggetti NIS compilano per l\'ACN.',
sections: [
{
heading: 'Importanti vs Essenziali',
items: [
'Il perimetro dipende dalla classificazione del soggetto: <strong>importante</strong> (Allegato 1) = <strong>37 misure / 92 requisiti</strong>; <strong>essenziale</strong> (Allegato 2) = <strong>43 misure / 116 requisiti</strong>.',
'La codifica dei requisiti e\' <strong>identica</strong> per i due livelli (stessi codici GV/ID/PR/DE/RS/RC): agli essenziali si aggiungono 6 misure e 24 requisiti, oltre a punti aggiuntivi su misure gia\' presenti.',
'L\'app filtra automaticamente i requisiti applicabili in base al livello del soggetto (Impostazioni › Classificazione NIS2).'
]
},
{
heading: 'Struttura per funzione (Framework Nazionale)',
items: [
'I requisiti sono organizzati nelle 6 funzioni del Framework Nazionale: <strong>Governo (GV)</strong>, <strong>Identificazione (ID)</strong>, <strong>Protezione (PR)</strong>, <strong>Rilevamento (DE)</strong>, <strong>Risposta (RS)</strong>, <strong>Ripristino (RC)</strong>.',
'Per ogni requisito indichi lo stato: Attuato (100%), Parziale (50%), Non attuato (0%), Non applicabile (escluso dal calcolo).',
'Le risposte vengono salvate automaticamente. Puoi compilare in piu\' sessioni.'
]
},
{
heading: 'Punteggio e piano d\'azione',
items: [
'Al completamento ottieni un punteggio complessivo 0-100 e un punteggio per ciascuna funzione FW.',
'Il <strong>piano d\'azione</strong> elenca i requisiti non conformi (non attuati prima, poi parziali), pronti per la remediation.',
'L\'<strong>analisi AI</strong> dei gap usa la knowledge base con i 203 requisiti ACN reali (grounding) e cita solo requisiti effettivamente esistenti.'
]
},
{
heading: 'Rapporto con la Gap Analysis Art. 21',
items: [
'La Gap Analysis Art. 21 (le 10 lettere) e\' un\'analisi di <strong>primo livello</strong>, utile per orientarsi.',
'La Gap Analysis ACN e\' l\'analisi di <strong>conformita\' puntuale</strong> richiesta in concreto in Italia: usa questa per prepararti all\'autovalutazione ACN.'
]
}
],
references: [
'Determinazione ACN n. 164179 del 14/04/2025 - Misure di sicurezza di base per i soggetti NIS',
'Allegato 1 - Misure di base per i soggetti IMPORTANTI (37 misure, 92 requisiti)',
'Allegato 2 - Misure di base per i soggetti ESSENZIALI (43 misure, 116 requisiti)',
'Framework Nazionale per la Cybersecurity e la Data Protection - funzioni GV/ID/PR/DE/RS/RC',
'Art. 24 D.Lgs. 138/2024 (recepisce l\'art. 21 della Direttiva (UE) 2022/2555) - base normativa primaria'
]
},
'isms': {
title: 'Guida - Modello Organizzativo SGSI (ISO 27001)',
intro: 'Il modulo Modello Organizzativo ti guida nella costruzione di un Sistema di Gestione della Sicurezza delle Informazioni (SGSI / ISMS) secondo ISO/IEC 27001:2022 (clausole 4-10) + lo Statement of Applicability (SoA) sui controlli Annex A. E\' uno strumento di SUPPORTO e PRE-AUDIT: non sostituisce l\'auditor ne costituisce una certificazione.',
@@ -1280,9 +1235,6 @@ const HelpSystem = (function () {
'dashboard': 'dashboard',
'assessment.html': 'assessment',
'assessment': 'assessment',
'acn-gap.html': 'acn',
'acn-gap': 'acn',
'acn': 'acn',
'isms.html': 'isms',
'isms': 'isms',
'organigramma.html': 'org',
@@ -1537,7 +1489,6 @@ const HelpSystem = (function () {
var _guideAnchor = {
'dashboard': 'cap-4',
'assessment': 'cap-5',
'acn': 'cap-5b',
'risks': 'cap-6',
'incidents': 'cap-7',
'policies': 'cap-8',
-17
View File
@@ -19,24 +19,7 @@ const I18n = (function () {
'nav.main': { it: 'Principale', en: 'Main' },
'nav.dashboard': { it: 'Dashboard', en: 'Dashboard' },
'nav.gap_analysis': { it: 'Gap Analysis', en: 'Gap Analysis' },
'nav.acn_gap': { it: 'Gap Analysis ACN', en: 'ACN Gap Analysis' },
'nav.framework': { it: 'Misure e Requisiti', en: 'Measures & Requirements' },
// Gap Analysis ACN (Determinazione 164179/2025)
'acn.title': { it: 'Gap Analysis ACN (misure di base)', en: 'ACN Gap Analysis (baseline measures)' },
'acn.ai': { it: 'Analisi AI dei gap', en: 'AI gap analysis' },
'acn.intro.title': { it: 'Conformità puntuale alla Determinazione ACN 164179/2025.', en: 'Detailed compliance with ACN Determination 164179/2025.' },
'acn.intro.body': { it: "Questa analisi va oltre le 10 misure generiche dell'Art. 21: valuta le misure e i requisiti puntuali stabiliti dall'ACN per i soggetti NIS. Il perimetro dipende dalla classificazione del soggetto (importante o essenziale).", en: 'This analysis goes beyond the 10 generic Art. 21 measures: it assesses the specific measures and requirements set by ACN for NIS entities. The scope depends on the entity classification (important or essential).' },
'acn.new': { it: 'Nuova Gap Analysis ACN', en: 'New ACN Gap Analysis' },
'acn.catalog.btn': { it: 'Consulta il catalogo dei requisiti', en: 'Browse the requirements catalog' },
'acn.catalog.title': { it: 'Catalogo requisiti ACN applicabili', en: 'Applicable ACN requirements catalog' },
'acn.answered': { it: 'requisiti con risposta', en: 'requirements answered' },
'acn.complete': { it: 'Calcola punteggio e completa', en: 'Calculate score and complete' },
'acn.results.title': { it: 'Esito Gap Analysis ACN', en: 'ACN Gap Analysis result' },
'acn.results.overall': { it: 'Punteggio complessivo di conformità (0-100)', en: 'Overall compliance score (0-100)' },
'acn.results.byfunc': { it: 'Punteggio per funzione (Framework Nazionale)', en: 'Score by function (National Framework)' },
'acn.results.ai': { it: 'Analisi AI dei gap', en: 'AI gap analysis' },
'acn.results.gaps': { it: "Requisiti non conformi (piano d'azione)", en: 'Non-compliant requirements (action plan)' },
'acn.backstart': { it: "Torna all'inizio", en: 'Back to start' },
// ── Modello Organizzativo SGSI (ISO 27001) ──
'nav.isms': { it: 'Modello SGSI (ISO 27001)', en: 'ISMS Model (ISO 27001)' },
'isms.title': { it: 'Modello Organizzativo SGSI (ISO 27001)', en: 'ISMS Organizational Model (ISO 27001)' },
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* NIS2 Agile - Modello Organizzativo SGSI (ISO 27001/27017/27018)
* Wizard 6 step: Contesto → Leadership → Risk → SoA → Documenti → Monitoraggio.
* Pattern coerente con acn-gap.html: client api.* che ritorna `data` e lancia su errore.
* Pattern coerente con le altre pagine: client api.* che ritorna `data` e lancia su errore.
*/
'use strict';