- help.js: aggiunta sezione workflow (Compliance Journey) + pageMap entry - i18n.js: 16 chiavi IT/EN per workflow (fasi, stati, etichette) - docs/AI_LEVELS_SCHEMA.md: schema architettura 5 livelli AI con privacy matrix L1 Guida (safe), L2 Operativo, L3 Aziendale (anonimizzato), L4 Cross-Org (k-anonymity), L5 Normativo Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
947 lines
50 KiB
JavaScript
947 lines
50 KiB
JavaScript
/**
|
|
* NIS2 Agile - Contextual Help System
|
|
*
|
|
* Sistema di guida contestuale per pagina.
|
|
* - Rileva automaticamente la pagina corrente dall'URL
|
|
* - Mostra help contestuale tramite showModal()
|
|
* - Inietta un pulsante "?" nell'header della pagina
|
|
* - Fornisce tooltip inline riutilizzabili
|
|
*/
|
|
|
|
const HelpSystem = (function () {
|
|
'use strict';
|
|
|
|
// ── Icona SVG del punto interrogativo ────────────────────────────
|
|
var HELP_ICON = '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M9.09 9a3 3 0 015.83 1c0 2-3 3-3 3"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg>';
|
|
|
|
var HELP_ICON_SMALL = '<svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M9.09 9a3 3 0 015.83 1c0 2-3 3-3 3"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg>';
|
|
|
|
// ── Contenuti di help per ogni pagina (in italiano) ──────────────
|
|
|
|
var _helpContent = {
|
|
|
|
// ─── Dashboard ───────────────────────────────────────────────
|
|
'dashboard': {
|
|
title: 'Guida - Dashboard',
|
|
intro: 'La Dashboard fornisce una panoramica in tempo reale dello stato di conformita\' NIS2 della tua organizzazione. Da qui puoi monitorare i principali indicatori, le attivita\' recenti e le scadenze imminenti.',
|
|
sections: [
|
|
{
|
|
heading: 'Punteggio di Compliance',
|
|
items: [
|
|
'Il <strong>gauge circolare</strong> mostra il punteggio complessivo di conformita\' NIS2 (0-100%), calcolato sulla base dell\'ultimo assessment completato.',
|
|
'I colori indicano il livello: <span style="color:var(--danger)">rosso</span> (critico, <20%), <span style="color:#f97316">arancione</span> (basso, 20-39%), <span style="color:var(--warning)">giallo</span> (medio, 40-59%), <span style="color:#84cc16">verde chiaro</span> (buono, 60-79%), <span style="color:var(--secondary)">verde</span> (eccellente, ≥80%).',
|
|
'Il punteggio si aggiorna automaticamente ad ogni nuovo assessment.'
|
|
]
|
|
},
|
|
{
|
|
heading: 'Statistiche Principali',
|
|
items: [
|
|
'<strong>Rischi Aperti</strong> - numero di rischi attivi nel registro dei rischi.',
|
|
'<strong>Incidenti Attivi</strong> - incidenti di sicurezza attualmente in gestione.',
|
|
'<strong>Scadenze Superate</strong> - attivita\' o task il cui termine e\' gia\' passato.',
|
|
'Clicca su ciascuna card per accedere direttamente alla sezione corrispondente.'
|
|
]
|
|
},
|
|
{
|
|
heading: 'Attivita\' Recente e Scadenze',
|
|
items: [
|
|
'Il <strong>feed Attivita\' Recente</strong> mostra le ultime operazioni effettuate sulla piattaforma (assessment, rischi, incidenti, policy).',
|
|
'Le <strong>Prossime Scadenze</strong> elencano i task e le attivita\' in scadenza, evidenziando in rosso quelle urgenti.',
|
|
'La <strong>Mappa Rischi</strong> visualizza la distribuzione dei rischi per livello di gravita\'.'
|
|
]
|
|
},
|
|
{
|
|
heading: 'Azioni Rapide',
|
|
items: [
|
|
'Utilizza le <strong>Azioni Rapide</strong> per avviare operazioni comuni senza navigare nel menu.',
|
|
'La funzione <strong>Genera Policy con AI</strong> permette di creare bozze di policy conformi NIS2 tramite intelligenza artificiale.',
|
|
'Puoi avviare un nuovo assessment, registrare un incidente o aggiungere un rischio con un solo clic.'
|
|
]
|
|
}
|
|
],
|
|
references: [
|
|
'Direttiva (UE) 2022/2555 (NIS2) - Considerando generale sulla gestione del rischio',
|
|
'Art. 21 - Misure di gestione dei rischi di cibersicurezza',
|
|
'Art. 23 - Obblighi di segnalazione'
|
|
]
|
|
},
|
|
|
|
// ─── Assessment / Gap Analysis ───────────────────────────────
|
|
'assessment': {
|
|
title: 'Guida - Gap Analysis NIS2',
|
|
intro: 'La Gap Analysis NIS2 ti permette di valutare il livello di conformita\' della tua organizzazione rispetto ai requisiti dell\'Art. 21 della Direttiva NIS2. Il wizard guida l\'utente attraverso 10 categorie di misure di sicurezza.',
|
|
sections: [
|
|
{
|
|
heading: 'Wizard di Assessment',
|
|
items: [
|
|
'L\'assessment e\' strutturato in <strong>10 categorie</strong> derivate dall\'Art. 21.2 della Direttiva NIS2.',
|
|
'Ogni categoria contiene domande specifiche sulle misure di sicurezza implementate.',
|
|
'Puoi compilare l\'assessment in piu\' sessioni: il progresso viene salvato automaticamente.',
|
|
'Utilizza la barra di avanzamento in alto per monitorare il completamento.'
|
|
]
|
|
},
|
|
{
|
|
heading: 'Sistema di Valutazione',
|
|
items: [
|
|
'<strong>Non Implementato</strong> (0%) - la misura non e\' presente.',
|
|
'<strong>Parzialmente Implementato</strong> (50%) - la misura e\' presente ma incompleta o non formalizzata.',
|
|
'<strong>Implementato</strong> (100%) - la misura e\' completamente implementata e documentata.',
|
|
'<strong>Non Applicabile</strong> - la misura non si applica al contesto dell\'organizzazione.'
|
|
]
|
|
},
|
|
{
|
|
heading: 'Analisi AI',
|
|
items: [
|
|
'Al completamento dell\'assessment, puoi richiedere un\'<strong>analisi basata su AI</strong> dei risultati.',
|
|
'L\'AI identifica le aree critiche, suggerisce priorita\' di intervento e fornisce raccomandazioni specifiche.',
|
|
'L\'analisi tiene conto del settore e della classificazione NIS2 dell\'organizzazione.'
|
|
]
|
|
},
|
|
{
|
|
heading: 'Generazione Non Conformita\' (NCR)',
|
|
items: [
|
|
'Dalla pagina dei risultati, puoi <strong>generare automaticamente NCR</strong> (Non Conformity Reports) dai gap individuati.',
|
|
'Ogni NCR viene creata con priorita\', descrizione e suggerimenti di rimedio.',
|
|
'Le NCR generate possono essere esportate o collegate al registro dei rischi.'
|
|
]
|
|
}
|
|
],
|
|
references: [
|
|
'Art. 21.1 - Obbligo di adottare misure tecniche, operative e organizzative adeguate e proporzionate',
|
|
'Art. 21.2 (a-j) - Le 10 categorie di misure di sicurezza minime',
|
|
'Art. 21.3 - Valutazione della proporzionalita\' delle misure',
|
|
'Art. 21.4 - Conformita\' con norme europee e internazionali'
|
|
]
|
|
},
|
|
|
|
// ─── Risk Management ─────────────────────────────────────────
|
|
'risks': {
|
|
title: 'Guida - Gestione Rischi',
|
|
intro: 'Il modulo di Gestione Rischi consente di identificare, valutare e trattare i rischi di sicurezza informatica in conformita\' con l\'Art. 21 della Direttiva NIS2. Include una matrice di rischio interattiva e strumenti per il monitoraggio continuo.',
|
|
sections: [
|
|
{
|
|
heading: 'Matrice di Rischio',
|
|
items: [
|
|
'La <strong>matrice Probabilita\' x Impatto</strong> (5x5) classifica automaticamente i rischi in base alla loro gravita\'.',
|
|
'I livelli di probabilita\' vanno da <em>Molto Bassa</em> a <em>Molto Alta</em>.',
|
|
'I livelli di impatto vanno da <em>Trascurabile</em> a <em>Critico</em>.',
|
|
'Il punteggio di rischio risultante determina il colore e la priorita\' del rischio.'
|
|
]
|
|
},
|
|
{
|
|
heading: 'Livelli di Gravita\'',
|
|
items: [
|
|
'<span style="color:var(--secondary)"><strong>Basso</strong></span> - rischio accettabile, monitoraggio periodico.',
|
|
'<span style="color:var(--warning)"><strong>Medio</strong></span> - richiede attenzione, pianificare azioni di mitigazione.',
|
|
'<span style="color:#f97316"><strong>Alto</strong></span> - richiede intervento prioritario.',
|
|
'<span style="color:var(--danger)"><strong>Critico</strong></span> - richiede intervento immediato, escalation al management.'
|
|
]
|
|
},
|
|
{
|
|
heading: 'Opzioni di Trattamento',
|
|
items: [
|
|
'<strong>Mitigare</strong> - implementare controlli per ridurre probabilita\' o impatto.',
|
|
'<strong>Accettare</strong> - accettare consapevolmente il rischio (documentando la decisione).',
|
|
'<strong>Trasferire</strong> - trasferire il rischio a terzi (es. assicurazione, outsourcing).',
|
|
'<strong>Evitare</strong> - eliminare l\'attivita\' o la condizione che genera il rischio.'
|
|
]
|
|
},
|
|
{
|
|
heading: 'Registro e Monitoraggio',
|
|
items: [
|
|
'Ogni rischio registrato include: descrizione, categoria, asset coinvolti, owner e piano di trattamento.',
|
|
'Lo stato di ogni rischio e\' tracciato nel tempo con lo storico delle modifiche.',
|
|
'I rischi possono essere collegati ad asset, incidenti e controlli di compliance.',
|
|
'La <strong>Matrice Rischi</strong> si aggiorna in tempo reale: eliminando un rischio dalla vista dettaglio, la matrice si ricalcola automaticamente senza richiedere un refresh manuale.'
|
|
]
|
|
}
|
|
],
|
|
references: [
|
|
'Art. 21.1 - Approccio basato sulla valutazione dei rischi (risk-based approach)',
|
|
'Art. 21.2 (a) - Politiche di analisi dei rischi e di sicurezza dei sistemi informatici',
|
|
'Art. 21.2 (f) - Politiche e procedure per valutare l\'efficacia delle misure',
|
|
'Considerando 79 - Proporzionalita\' delle misure rispetto ai rischi'
|
|
]
|
|
},
|
|
|
|
// ─── Incident Management ─────────────────────────────────────
|
|
'incidents': {
|
|
title: 'Guida - Gestione Incidenti',
|
|
intro: 'Il modulo di Gestione Incidenti supporta l\'intero ciclo di vita degli incidenti di sicurezza, dalla rilevazione alla chiusura, nel rispetto dei tempi di notifica previsti dall\'Art. 23 della Direttiva NIS2.',
|
|
sections: [
|
|
{
|
|
heading: 'Timeline di Notifica NIS2',
|
|
items: [
|
|
'<strong>Early Warning (24 ore)</strong> - preallarme al CSIRT/autorita\' competente entro 24 ore dalla conoscenza dell\'incidente significativo.',
|
|
'<strong>Notifica (72 ore)</strong> - notifica completa entro 72 ore con valutazione iniziale, gravita\', impatto e indicatori di compromissione.',
|
|
'<strong>Report Finale (30 giorni)</strong> - relazione finale dettagliata entro un mese dalla notifica, con descrizione, causa, misure adottate e impatto transfrontaliero.',
|
|
'La piattaforma traccia automaticamente le scadenze e invia promemoria per ciascuna fase.'
|
|
]
|
|
},
|
|
{
|
|
heading: 'Livelli di Gravita\'',
|
|
items: [
|
|
'<strong>Bassa</strong> - impatto limitato, nessuna interruzione di servizio significativa.',
|
|
'<strong>Media</strong> - impatto moderato su operazioni o dati, richiede intervento pianificato.',
|
|
'<strong>Alta</strong> - impatto significativo su servizi essenziali o dati sensibili.',
|
|
'<strong>Critica</strong> - interruzione grave di servizi essenziali, compromissione massiva di dati, impatto transfrontaliero.'
|
|
]
|
|
},
|
|
{
|
|
heading: 'Ciclo di Vita dell\'Incidente',
|
|
items: [
|
|
'<strong>Rilevazione</strong> - identificazione e registrazione iniziale dell\'incidente.',
|
|
'<strong>Analisi</strong> - valutazione di gravita\', impatto e perimetro.',
|
|
'<strong>Contenimento</strong> - azioni immediate per limitare il danno.',
|
|
'<strong>Risoluzione</strong> - eliminazione della causa e ripristino dei servizi.',
|
|
'<strong>Chiusura</strong> - documentazione delle lezioni apprese e miglioramenti.'
|
|
]
|
|
},
|
|
{
|
|
heading: 'Funzionalita\' Avanzate',
|
|
items: [
|
|
'Collegamento automatico con il registro dei rischi e gli asset coinvolti.',
|
|
'Timeline visuale con tutti gli aggiornamenti e le comunicazioni.',
|
|
'Esportazione del report per la notifica alle autorita\' competenti.'
|
|
]
|
|
}
|
|
],
|
|
references: [
|
|
'Art. 23.1 - Obbligo di notifica degli incidenti significativi',
|
|
'Art. 23.4 (a) - Early warning entro 24 ore',
|
|
'Art. 23.4 (b) - Notifica entro 72 ore',
|
|
'Art. 23.4 (d) - Relazione finale entro un mese',
|
|
'Art. 23.3 - Definizione di incidente significativo'
|
|
]
|
|
},
|
|
|
|
// ─── Policy Management ───────────────────────────────────────
|
|
'policies': {
|
|
title: 'Guida - Gestione Policy',
|
|
intro: 'Il modulo di Gestione Policy consente di creare, gestire e mantenere aggiornate le policy di sicurezza informatica richieste dalla Direttiva NIS2. Include un generatore di policy basato su intelligenza artificiale.',
|
|
sections: [
|
|
{
|
|
heading: 'Ciclo di Vita delle Policy',
|
|
items: [
|
|
'<strong>Bozza</strong> - la policy e\' in fase di stesura, modificabile liberamente.',
|
|
'<strong>In Revisione</strong> - la policy e\' stata sottoposta a revisione da parte dei responsabili.',
|
|
'<strong>Approvata</strong> - la policy e\' stata approvata dal management.',
|
|
'<strong>Pubblicata</strong> - la policy e\' attiva e comunicata a tutto il personale.'
|
|
]
|
|
},
|
|
{
|
|
heading: 'Generazione con AI',
|
|
items: [
|
|
'La funzione <strong>Genera con AI</strong> crea automaticamente bozze di policy conformi NIS2.',
|
|
'L\'AI utilizza il contesto della tua organizzazione (settore, dimensione, classificazione) per personalizzare il contenuto.',
|
|
'Le policy generate includono: obiettivo, ambito di applicazione, responsabilita\', procedure e riferimenti normativi.',
|
|
'Le bozze AI sono contrassegnate da un <strong>banner arancione di avviso</strong> che ricorda l\'obbligo di revisione prima dell\'approvazione. Il banner puo\' essere chiuso premendo la X.'
|
|
]
|
|
},
|
|
{
|
|
heading: 'Framework di Compliance NIS2',
|
|
items: [
|
|
'Ogni policy e\' collegata a una o piu\' categorie dell\'Art. 21.2 della Direttiva NIS2.',
|
|
'Il sistema tiene traccia della copertura delle policy rispetto ai requisiti normativi.',
|
|
'Le policy scadute o non aggiornate vengono evidenziate automaticamente.'
|
|
]
|
|
},
|
|
{
|
|
heading: 'Gestione Versioni',
|
|
items: [
|
|
'Ogni modifica crea una nuova versione della policy con data e autore.',
|
|
'E\' possibile confrontare versioni e ripristinare versioni precedenti.',
|
|
'Lo storico completo e\' disponibile per finalita\' di audit.'
|
|
]
|
|
}
|
|
],
|
|
references: [
|
|
'Art. 21.2 (a) - Politiche di analisi dei rischi e di sicurezza dei sistemi informatici',
|
|
'Art. 21.2 (e) - Sicurezza nell\'acquisizione, sviluppo e manutenzione dei sistemi',
|
|
'Art. 21.2 (j) - Uso di crittografia e cifratura',
|
|
'Art. 20 - Governance - Responsabilita\' degli organi di gestione'
|
|
]
|
|
},
|
|
|
|
// ─── Supply Chain Security ───────────────────────────────────
|
|
'supply-chain': {
|
|
title: 'Guida - Sicurezza Supply Chain',
|
|
intro: 'Il modulo di Sicurezza della Supply Chain consente di gestire e valutare i rischi legati a fornitori e terze parti, in conformita\' con l\'Art. 21.2 (d) della Direttiva NIS2.',
|
|
sections: [
|
|
{
|
|
heading: 'Registro Fornitori',
|
|
items: [
|
|
'Il <strong>registro fornitori</strong> centralizza tutte le informazioni sui fornitori critici.',
|
|
'Per ogni fornitore sono registrati: servizi forniti, dati di contatto, contratti attivi e livello di criticita\'.',
|
|
'I fornitori possono essere classificati per tipologia (ICT, servizi, consulenza, etc.).'
|
|
]
|
|
},
|
|
{
|
|
heading: 'Valutazione del Rischio Fornitore',
|
|
items: [
|
|
'Ogni fornitore puo\' essere sottoposto a una <strong>valutazione del rischio</strong> strutturata.',
|
|
'La valutazione copre: sicurezza informatica, continuita\' operativa, conformita\' normativa e dipendenza.',
|
|
'Il <strong>punteggio di rischio</strong> viene calcolato automaticamente sulla base delle risposte.',
|
|
'I fornitori ad alto rischio vengono evidenziati per un monitoraggio rafforzato.'
|
|
]
|
|
},
|
|
{
|
|
heading: 'Monitoraggio Continuo',
|
|
items: [
|
|
'La piattaforma traccia scadenze contrattuali e revisioni periodiche.',
|
|
'Le variazioni di rischio vengono segnalate automaticamente.',
|
|
'E\' possibile associare requisiti di sicurezza specifici a ciascun contratto.'
|
|
]
|
|
},
|
|
{
|
|
heading: 'Panoramica Rischi',
|
|
items: [
|
|
'La <strong>Panoramica Rischi</strong> mostra la distribuzione dei fornitori per livello di rischio.',
|
|
'Statistiche aggregate su: numero di fornitori, valutazioni scadute, fornitori ad alto rischio.',
|
|
'Esportazione dei dati per reporting e audit.'
|
|
]
|
|
}
|
|
],
|
|
references: [
|
|
'Art. 21.2 (d) - Sicurezza della catena di approvvigionamento',
|
|
'Art. 21.3 - Valutazione dei rischi specifici per ciascun fornitore diretto',
|
|
'Considerando 85 - Qualita\' e resilienza dei prodotti e servizi ICT',
|
|
'Considerando 86 - Gestione dei rischi della supply chain'
|
|
]
|
|
},
|
|
|
|
// ─── Training & Awareness ────────────────────────────────────
|
|
'training': {
|
|
title: 'Guida - Formazione e Awareness',
|
|
intro: 'Il modulo di Formazione gestisce i programmi di sensibilizzazione e formazione sulla sicurezza informatica, come richiesto dall\'Art. 20.2 della Direttiva NIS2 che impone la formazione obbligatoria per gli organi di gestione.',
|
|
sections: [
|
|
{
|
|
heading: 'Formazione Obbligatoria NIS2',
|
|
items: [
|
|
'L\'Art. 20.2 della Direttiva NIS2 richiede che i <strong>membri degli organi di gestione</strong> seguano una formazione specifica.',
|
|
'La formazione deve consentire di individuare i rischi e valutare le pratiche di gestione del rischio.',
|
|
'La piattaforma traccia la conformita\' a questo obbligo per ciascun membro del management.'
|
|
]
|
|
},
|
|
{
|
|
heading: 'Gestione Corsi',
|
|
items: [
|
|
'Crea e gestisci <strong>corsi di formazione</strong> su tematiche NIS2 e sicurezza informatica.',
|
|
'Ogni corso include: titolo, descrizione, durata stimata, contenuti e materiali.',
|
|
'I corsi possono essere categorizzati per argomento e livello di difficolta\'.',
|
|
'Supporto per corsi interni ed esterni con tracciamento unificato.'
|
|
]
|
|
},
|
|
{
|
|
heading: 'Assegnazione e Tracciamento',
|
|
items: [
|
|
'Assegna corsi a singoli utenti o gruppi con <strong>scadenze personalizzate</strong>.',
|
|
'La dashboard mostra lo stato di completamento per ciascun assegnatario.',
|
|
'I corsi scaduti vengono evidenziati e possono generare notifiche automatiche.',
|
|
'Lo storico di completamento e\' disponibile per audit e compliance.'
|
|
]
|
|
},
|
|
{
|
|
heading: 'Report di Compliance',
|
|
items: [
|
|
'Visualizza il tasso di completamento complessivo della formazione.',
|
|
'Identifica gli utenti con formazione scaduta o mancante.',
|
|
'Genera report per dimostrare la conformita\' all\'Art. 20.2 in sede di audit.'
|
|
]
|
|
}
|
|
],
|
|
references: [
|
|
'Art. 20.2 - Formazione obbligatoria per gli organi di gestione',
|
|
'Art. 20.1 - Responsabilita\' degli organi di gestione nell\'approvazione delle misure',
|
|
'Art. 21.2 (g) - Pratiche di igiene informatica di base e formazione in materia di cibersicurezza',
|
|
'Considerando 89 - Formazione regolare per dipendenti e management'
|
|
]
|
|
},
|
|
|
|
// ─── Asset Inventory ─────────────────────────────────────────
|
|
'assets': {
|
|
title: 'Guida - Inventario Asset',
|
|
intro: 'Il modulo Inventario Asset consente di catalogare e gestire tutti gli asset ICT dell\'organizzazione, fondamentale per la gestione dei rischi e la sicurezza delle reti e dei sistemi informativi ai sensi dell\'Art. 21 della Direttiva NIS2.',
|
|
sections: [
|
|
{
|
|
heading: 'Categorizzazione degli Asset',
|
|
items: [
|
|
'<strong>Hardware</strong> - server, workstation, dispositivi di rete, dispositivi mobili, apparati di sicurezza.',
|
|
'<strong>Software</strong> - applicativi, sistemi operativi, database, middleware, servizi cloud.',
|
|
'<strong>Rete</strong> - reti LAN/WAN, collegamenti internet, VPN, segmenti di rete.',
|
|
'<strong>Dati</strong> - archivi, database, backup, dati personali, dati critici per il business.'
|
|
]
|
|
},
|
|
{
|
|
heading: 'Livelli di Criticita\'',
|
|
items: [
|
|
'Ogni asset ha un <strong>livello di criticita\'</strong> che ne determina la priorita\' nella gestione del rischio.',
|
|
'La criticita\' viene valutata in base a: impatto sulla continuita\' operativa, dati trattati, esposizione esterna.',
|
|
'Gli asset critici sono soggetti a controlli di sicurezza rafforzati.',
|
|
'Il livello di criticita\' influenza la valutazione dei rischi associati.'
|
|
]
|
|
},
|
|
{
|
|
heading: 'Mappa delle Dipendenze',
|
|
items: [
|
|
'La <strong>Mappa Dipendenze</strong> visualizza le relazioni tra gli asset.',
|
|
'Identifica le dipendenze critiche e i singoli punti di guasto (SPOF).',
|
|
'Utile per la valutazione dell\'impatto in caso di incidente o indisponibilita\'.'
|
|
]
|
|
},
|
|
{
|
|
heading: 'Gestione del Ciclo di Vita',
|
|
items: [
|
|
'Tracciamento dello stato dell\'asset: attivo, in manutenzione, dismesso.',
|
|
'Registrazione di proprietario, ubicazione, fornitore e contratti di supporto.',
|
|
'Alert automatici per asset con supporto in scadenza o fine vita.'
|
|
]
|
|
}
|
|
],
|
|
references: [
|
|
'Art. 21.2 (i) - Sicurezza delle risorse umane, politiche di controllo dell\'accesso e gestione degli attivi',
|
|
'Art. 21.2 (a) - Politiche di analisi dei rischi e di sicurezza dei sistemi informatici',
|
|
'Art. 21.2 (c) - Continuita\' operativa, gestione dei backup e ripristino in caso di disastro',
|
|
'Considerando 79 - Adeguatezza delle misure rispetto ai rischi per le reti e i sistemi informativi'
|
|
]
|
|
},
|
|
|
|
// ─── Reports / Audit ─────────────────────────────────────────
|
|
'reports': {
|
|
title: 'Guida - Audit & Report',
|
|
intro: 'Il modulo Audit & Report fornisce strumenti per monitorare lo stato dei controlli di compliance, gestire le evidenze e generare report per le autorita\' competenti e per gli audit interni.',
|
|
sections: [
|
|
{
|
|
heading: 'Controlli di Compliance',
|
|
items: [
|
|
'Ogni controllo rappresenta un requisito specifico della Direttiva NIS2.',
|
|
'Lo stato di ciascun controllo e\' tracciato: <strong>Conforme</strong>, <strong>Parzialmente Conforme</strong>, <strong>Non Conforme</strong>, <strong>Non Valutato</strong>.',
|
|
'I controlli sono organizzati per categoria secondo l\'Art. 21.2.',
|
|
'La percentuale di conformita\' complessiva e\' calcolata automaticamente.'
|
|
]
|
|
},
|
|
{
|
|
heading: 'Gestione Evidenze',
|
|
items: [
|
|
'Per ogni controllo e\' possibile allegare <strong>evidenze</strong> (documenti, screenshot, log).',
|
|
'Le evidenze supportano la dimostrazione di conformita\' in sede di audit.',
|
|
'Il sistema traccia la data di caricamento e la validita\' di ogni evidenza.',
|
|
'Le evidenze scadute o mancanti vengono segnalate automaticamente.'
|
|
]
|
|
},
|
|
{
|
|
heading: 'Log di Audit',
|
|
items: [
|
|
'Il <strong>log di audit</strong> registra automaticamente tutte le operazioni effettuate sulla piattaforma.',
|
|
'Ogni voce include: utente, azione, data/ora, oggetto e dettagli.',
|
|
'I log sono immutabili e disponibili per verifiche ispettive.',
|
|
'Supporto per filtri avanzati e ricerca nei log.'
|
|
]
|
|
},
|
|
{
|
|
heading: 'Esportazione Report',
|
|
items: [
|
|
'Genera report completi in formato esportabile per audit e autorita\'.',
|
|
'Report disponibili: stato di compliance, registro rischi, incidenti, formazione.',
|
|
'I report possono essere personalizzati per periodo e ambito.'
|
|
]
|
|
}
|
|
],
|
|
references: [
|
|
'Art. 21 - Misure di gestione dei rischi di cibersicurezza',
|
|
'Art. 32 - Misure di vigilanza e di esecuzione per i soggetti essenziali',
|
|
'Art. 33 - Misure di vigilanza e di esecuzione per i soggetti importanti',
|
|
'Art. 34 - Condizioni generali per l\'imposizione di sanzioni amministrative pecuniarie'
|
|
]
|
|
},
|
|
|
|
// ─── Settings ────────────────────────────────────────────────
|
|
'settings': {
|
|
title: 'Guida - Impostazioni',
|
|
intro: 'La sezione Impostazioni consente di configurare il profilo dell\'organizzazione, la classificazione NIS2, gestire il team e le impostazioni di sicurezza dell\'account.',
|
|
sections: [
|
|
{
|
|
heading: 'Profilo Organizzazione',
|
|
items: [
|
|
'Configura i dati della tua organizzazione: nome, settore, dimensione, codice fiscale/P.IVA.',
|
|
'Questi dati vengono utilizzati per personalizzare i report e le analisi AI.',
|
|
'Il settore e la dimensione influenzano la classificazione NIS2.'
|
|
]
|
|
},
|
|
{
|
|
heading: 'Classificazione NIS2',
|
|
items: [
|
|
'<strong>Soggetto Essenziale</strong> - organizzazione che rientra nell\'Allegato I della Direttiva e supera le soglie dimensionali (grandi imprese). Soggetta a vigilanza proattiva.',
|
|
'<strong>Soggetto Importante</strong> - organizzazione che rientra nell\'Allegato I o II ma non raggiunge le soglie per "essenziale" (medie imprese). Soggetta a vigilanza reattiva.',
|
|
'<strong>Non Applicabile</strong> - organizzazione che non rientra nell\'ambito di applicazione della Direttiva.',
|
|
'<strong>Adesione Volontaria</strong> - organizzazione non obbligata che sceglie volontariamente di adottare il framework NIS2.'
|
|
]
|
|
},
|
|
{
|
|
heading: 'Gestione Team',
|
|
items: [
|
|
'Aggiungi e gestisci i <strong>membri del team</strong> con ruoli e permessi differenziati.',
|
|
'Ruoli disponibili: Amministratore (accesso completo) e Utente (accesso limitato).',
|
|
'Ogni membro puo\' essere associato a specifiche responsabilita\' (risk owner, incident manager, etc.).'
|
|
]
|
|
},
|
|
{
|
|
heading: 'Sicurezza Account',
|
|
items: [
|
|
'Modifica la password del tuo account in qualsiasi momento.',
|
|
'La piattaforma applica un <strong>timeout di sessione automatico</strong> dopo 30 minuti di inattivita\'. Un avviso con countdown appare 5 minuti prima del logout per permetterti di rimanere connesso.',
|
|
'Il logout automatico protegge le informazioni sensibili in caso di postazione incustodita.',
|
|
'Configura le impostazioni di notifica per scadenze e alert.'
|
|
]
|
|
}
|
|
],
|
|
references: [
|
|
'Art. 2 - Ambito di applicazione',
|
|
'Art. 3 - Soggetti essenziali e soggetti importanti',
|
|
'Allegato I - Settori ad alta criticita\'',
|
|
'Allegato II - Altri settori critici',
|
|
'Art. 20 - Governance'
|
|
]
|
|
},
|
|
|
|
// ─── Compliance Journey / Workflow ───────────────────────────
|
|
'workflow': {
|
|
title: 'Guida - Compliance Journey',
|
|
intro: 'La pagina Compliance Journey visualizza l\'intero percorso di conformita\' NIS2 come una roadmap interattiva a 6 fasi. Mostra lo stato reale di ogni modulo con dati live, guida verso la prossima azione da completare e permette di navigare direttamente a ciascun modulo.',
|
|
sections: [
|
|
{
|
|
heading: 'Roadmap a 6 Fasi',
|
|
items: [
|
|
'<strong>Fase 1 - Preparazione</strong>: onboarding, configurazione organizzazione, definizione team e ruoli.',
|
|
'<strong>Fase 2 - Valutazione</strong>: gap assessment Art.21 (80 domande), inventario asset, valutazione supply chain.',
|
|
'<strong>Fase 3 - Rischi</strong>: risk register, piano di trattamento, suggerimenti AI per settore.',
|
|
'<strong>Fase 4 - Implementazione</strong>: policy approvate, formazione completata, controlli ISO 27001 implementati.',
|
|
'<strong>Fase 5 - Monitoraggio</strong>: gestione incidenti Art.23, NCR/CAPA, aggiornamenti normativi, whistleblowing.',
|
|
'<strong>Fase 6 - Reportistica</strong>: report esecutivo, audit chain SHA-256, export certificato.'
|
|
]
|
|
},
|
|
{
|
|
heading: 'Come Leggere il Percorso',
|
|
items: [
|
|
'<span style="color:var(--secondary)"><strong>Completato</strong></span> - la fase ha raggiunto gli obiettivi minimi di compliance.',
|
|
'<span style="color:var(--warning)"><strong>In corso</strong></span> - la fase e\' stata avviata ma non ancora completata.',
|
|
'<span style="color:var(--primary)"><strong>Attivo</strong></span> - fase di monitoraggio continuo, sempre attiva una volta avviata.',
|
|
'<span style="color:var(--gray-400)"><strong>Da iniziare</strong></span> - fase non ancora avviata.',
|
|
'La <strong>percentuale</strong> su ogni fase mostra il livello di completamento basato sui dati reali della piattaforma.'
|
|
]
|
|
},
|
|
{
|
|
heading: 'Prossima Azione Consigliata',
|
|
items: [
|
|
'Il <strong>banner blu</strong> in cima alla pagina indica sempre la prossima azione piu\' urgente da completare.',
|
|
'Il suggerimento si aggiorna automaticamente in base allo stato reale dei moduli.',
|
|
'Clicca sul link nel banner per navigare direttamente al modulo corrispondente.'
|
|
]
|
|
},
|
|
{
|
|
heading: 'Card di Dettaglio Fase',
|
|
items: [
|
|
'Clicca su una <strong>fase nella roadmap</strong> per espandere il dettaglio degli step.',
|
|
'Ogni card mostra: stato badge (Completato/In corso/Da iniziare), metrica numerica reale, link diretto al modulo.',
|
|
'Le metriche sono calcolate in tempo reale interrogando tutti i moduli della piattaforma.',
|
|
'Clicca direttamente sulla card per accedere al modulo corrispondente.'
|
|
]
|
|
},
|
|
{
|
|
heading: 'Differenza con la Dashboard',
|
|
items: [
|
|
'La <strong>Dashboard</strong> mostra KPI numerici e attivita\' recenti — risponde a "come sto?".',
|
|
'Il <strong>Compliance Journey</strong> mostra il processo sequenziale — risponde a "dove sono nel percorso?" e "cosa devo fare dopo?".',
|
|
'Usa il Journey per pianificare le priorita\' di intervento e comunicare lo stato al board.'
|
|
]
|
|
}
|
|
],
|
|
references: [
|
|
'Art. 21 - Misure di gestione dei rischi di cibersicurezza (10 categorie)',
|
|
'Art. 20 - Governance e responsabilita\' degli organi di gestione',
|
|
'Art. 23 - Obblighi di segnalazione degli incidenti significativi',
|
|
'D.Lgs. 138/2024 - Recepimento NIS2 in Italia',
|
|
'ACN - Linee guida attuative per i soggetti NIS2'
|
|
]
|
|
}
|
|
};
|
|
|
|
// ── Mappa tra filename nell'URL e chiave di help ─────────────────
|
|
|
|
var _pageMap = {
|
|
'dashboard.html': 'dashboard',
|
|
'dashboard': 'dashboard',
|
|
'assessment.html': 'assessment',
|
|
'assessment': 'assessment',
|
|
'risks.html': 'risks',
|
|
'risks': 'risks',
|
|
'incidents.html': 'incidents',
|
|
'incidents': 'incidents',
|
|
'policies.html': 'policies',
|
|
'policies': 'policies',
|
|
'supply-chain.html': 'supply-chain',
|
|
'supply-chain': 'supply-chain',
|
|
'training.html': 'training',
|
|
'training': 'training',
|
|
'assets.html': 'assets',
|
|
'assets': 'assets',
|
|
'reports.html': 'reports',
|
|
'audit.html': 'reports',
|
|
'reports': 'reports',
|
|
'audit': 'reports',
|
|
'settings.html': 'settings',
|
|
'settings': 'settings',
|
|
'workflow.html': 'workflow',
|
|
'workflow': 'workflow'
|
|
};
|
|
|
|
// ── Stili CSS (iniettati una sola volta) ─────────────────────────
|
|
|
|
var _stylesInjected = false;
|
|
|
|
function _injectStyles() {
|
|
if (_stylesInjected) return;
|
|
_stylesInjected = true;
|
|
|
|
var style = document.createElement('style');
|
|
style.textContent = [
|
|
/* Pulsante help nell'header */
|
|
'.help-btn {',
|
|
' display: inline-flex;',
|
|
' align-items: center;',
|
|
' justify-content: center;',
|
|
' width: 36px;',
|
|
' height: 36px;',
|
|
' padding: 0;',
|
|
' background: var(--gray-100);',
|
|
' border: 1px solid var(--gray-300);',
|
|
' border-radius: 50%;',
|
|
' cursor: pointer;',
|
|
' color: var(--gray-500);',
|
|
' transition: all var(--transition-fast);',
|
|
'}',
|
|
'.help-btn:hover {',
|
|
' background: var(--primary-bg);',
|
|
' border-color: var(--primary);',
|
|
' color: var(--primary);',
|
|
'}',
|
|
'.help-btn:focus-visible {',
|
|
' box-shadow: 0 0 0 3px rgba(26, 115, 232, 0.3);',
|
|
' outline: none;',
|
|
'}',
|
|
'.help-btn svg {',
|
|
' width: 18px;',
|
|
' height: 18px;',
|
|
'}',
|
|
|
|
/* Contenuto del modale help */
|
|
'.help-content {',
|
|
' font-size: 0.875rem;',
|
|
' color: var(--gray-700);',
|
|
' line-height: 1.7;',
|
|
'}',
|
|
'.help-content .help-intro {',
|
|
' margin-bottom: 20px;',
|
|
' padding: 14px 18px;',
|
|
' background: var(--primary-bg);',
|
|
' border-radius: var(--border-radius);',
|
|
' border-left: 4px solid var(--primary);',
|
|
' color: var(--gray-700);',
|
|
'}',
|
|
'.help-content h4 {',
|
|
' font-size: 0.9375rem;',
|
|
' font-weight: 700;',
|
|
' color: var(--gray-900);',
|
|
' margin: 20px 0 10px 0;',
|
|
' padding-bottom: 6px;',
|
|
' border-bottom: 1px solid var(--gray-100);',
|
|
'}',
|
|
'.help-content h4:first-of-type {',
|
|
' margin-top: 0;',
|
|
'}',
|
|
'.help-content ul {',
|
|
' list-style: none;',
|
|
' padding: 0;',
|
|
' margin: 0 0 8px 0;',
|
|
'}',
|
|
'.help-content ul li {',
|
|
' position: relative;',
|
|
' padding: 5px 0 5px 20px;',
|
|
' line-height: 1.6;',
|
|
'}',
|
|
'.help-content ul li::before {',
|
|
' content: "";',
|
|
' position: absolute;',
|
|
' left: 0;',
|
|
' top: 13px;',
|
|
' width: 6px;',
|
|
' height: 6px;',
|
|
' background: var(--primary);',
|
|
' border-radius: 50%;',
|
|
'}',
|
|
'.help-content .help-references {',
|
|
' margin-top: 24px;',
|
|
' padding: 14px 18px;',
|
|
' background: var(--gray-50);',
|
|
' border-radius: var(--border-radius);',
|
|
' border: 1px solid var(--gray-200);',
|
|
'}',
|
|
'.help-content .help-references h4 {',
|
|
' font-size: 0.8125rem;',
|
|
' color: var(--gray-600);',
|
|
' text-transform: uppercase;',
|
|
' letter-spacing: 0.04em;',
|
|
' margin: 0 0 10px 0;',
|
|
' padding-bottom: 6px;',
|
|
' border-bottom: 1px solid var(--gray-200);',
|
|
'}',
|
|
'.help-content .help-references ul li {',
|
|
' font-size: 0.8125rem;',
|
|
' color: var(--gray-600);',
|
|
' padding: 3px 0 3px 20px;',
|
|
'}',
|
|
'.help-content .help-references ul li::before {',
|
|
' width: 5px;',
|
|
' height: 5px;',
|
|
' background: var(--gray-400);',
|
|
' top: 11px;',
|
|
'}',
|
|
|
|
/* Inline help tooltip */
|
|
'.inline-help {',
|
|
' display: inline-flex;',
|
|
' align-items: center;',
|
|
' justify-content: center;',
|
|
' width: 16px;',
|
|
' height: 16px;',
|
|
' margin-left: 4px;',
|
|
' vertical-align: middle;',
|
|
' color: var(--gray-400);',
|
|
' cursor: help;',
|
|
' position: relative;',
|
|
'}',
|
|
'.inline-help:hover {',
|
|
' color: var(--primary);',
|
|
'}',
|
|
'.inline-help .inline-help-text {',
|
|
' position: absolute;',
|
|
' bottom: calc(100% + 8px);',
|
|
' left: 50%;',
|
|
' transform: translateX(-50%) scale(0.95);',
|
|
' background: var(--gray-800);',
|
|
' color: #fff;',
|
|
' padding: 8px 12px;',
|
|
' border-radius: var(--border-radius-sm);',
|
|
' font-size: 0.75rem;',
|
|
' font-weight: 500;',
|
|
' line-height: 1.5;',
|
|
' white-space: normal;',
|
|
' width: max-content;',
|
|
' max-width: 260px;',
|
|
' pointer-events: none;',
|
|
' opacity: 0;',
|
|
' transition: opacity var(--transition-fast), transform var(--transition-fast);',
|
|
' z-index: 60;',
|
|
' box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);',
|
|
'}',
|
|
'.inline-help .inline-help-text::after {',
|
|
' content: "";',
|
|
' position: absolute;',
|
|
' top: 100%;',
|
|
' left: 50%;',
|
|
' transform: translateX(-50%);',
|
|
' border: 5px solid transparent;',
|
|
' border-top-color: var(--gray-800);',
|
|
'}',
|
|
'.inline-help:hover .inline-help-text {',
|
|
' opacity: 1;',
|
|
' transform: translateX(-50%) scale(1);',
|
|
'}'
|
|
].join('\n');
|
|
|
|
document.head.appendChild(style);
|
|
}
|
|
|
|
// ── Rilevamento pagina corrente dall'URL ─────────────────────────
|
|
|
|
function _detectPage() {
|
|
var pathname = window.location.pathname;
|
|
var filename = pathname.split('/').pop() || '';
|
|
// Rimuovi eventuale query string
|
|
filename = filename.split('?')[0];
|
|
// Rimuovi eventuale hash
|
|
filename = filename.split('#')[0];
|
|
|
|
// Prova match diretto
|
|
if (_pageMap[filename]) {
|
|
return _pageMap[filename];
|
|
}
|
|
|
|
// Prova senza estensione
|
|
var withoutExt = filename.replace(/\.html?$/, '');
|
|
if (_pageMap[withoutExt]) {
|
|
return _pageMap[withoutExt];
|
|
}
|
|
|
|
// Fallback: prova a cercare nel pathname
|
|
var segments = pathname.replace(/\.html?$/, '').split('/').filter(Boolean);
|
|
for (var i = segments.length - 1; i >= 0; i--) {
|
|
if (_pageMap[segments[i]]) {
|
|
return _pageMap[segments[i]];
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
// ── Rendering del contenuto HTML di help ─────────────────────────
|
|
|
|
function _renderHelpContent(pageId) {
|
|
var data = _helpContent[pageId];
|
|
if (!data) return null;
|
|
|
|
var html = '<div class="help-content">';
|
|
|
|
// Intro
|
|
html += '<div class="help-intro">' + data.intro + '</div>';
|
|
|
|
// Sezioni
|
|
for (var i = 0; i < data.sections.length; i++) {
|
|
var section = data.sections[i];
|
|
html += '<h4>' + section.heading + '</h4>';
|
|
html += '<ul>';
|
|
for (var j = 0; j < section.items.length; j++) {
|
|
html += '<li>' + section.items[j] + '</li>';
|
|
}
|
|
html += '</ul>';
|
|
}
|
|
|
|
// Riferimenti NIS2
|
|
if (data.references && data.references.length > 0) {
|
|
html += '<div class="help-references">';
|
|
html += '<h4>Riferimenti NIS2</h4>';
|
|
html += '<ul>';
|
|
for (var k = 0; k < data.references.length; k++) {
|
|
html += '<li>' + data.references[k] + '</li>';
|
|
}
|
|
html += '</ul>';
|
|
html += '</div>';
|
|
}
|
|
|
|
html += '</div>';
|
|
|
|
return { title: data.title, content: html };
|
|
}
|
|
|
|
// ── API Pubblica ─────────────────────────────────────────────────
|
|
|
|
/**
|
|
* Mostra il modale di help per una pagina specifica.
|
|
* Se pageId non e' fornito, rileva automaticamente la pagina corrente.
|
|
* @param {string} [pageId] - Identificativo della pagina (es. 'dashboard', 'risks')
|
|
*/
|
|
function showHelp(pageId) {
|
|
_injectStyles();
|
|
|
|
if (!pageId) {
|
|
pageId = _detectPage();
|
|
}
|
|
|
|
if (!pageId || !_helpContent[pageId]) {
|
|
if (typeof showNotification === 'function') {
|
|
showNotification('Nessuna guida disponibile per questa pagina.', 'info');
|
|
}
|
|
return;
|
|
}
|
|
|
|
var rendered = _renderHelpContent(pageId);
|
|
if (!rendered) return;
|
|
|
|
var footer = '<button class="btn btn-primary" onclick="closeModal()">Ho capito</button>';
|
|
|
|
showModal(rendered.title, rendered.content, {
|
|
footer: footer,
|
|
size: 'lg'
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Inietta un pulsante "?" nell'header della pagina (.content-header-actions).
|
|
* Se l'header non esiste o il pulsante e' gia' presente, non fa nulla.
|
|
*/
|
|
function addHelpButton() {
|
|
_injectStyles();
|
|
|
|
var pageId = _detectPage();
|
|
if (!pageId || !_helpContent[pageId]) return;
|
|
|
|
var container = document.querySelector('.content-header-actions');
|
|
if (!container) return;
|
|
|
|
// Evita duplicati
|
|
if (container.querySelector('.help-btn')) return;
|
|
|
|
var btn = document.createElement('button');
|
|
btn.className = 'help-btn';
|
|
btn.setAttribute('type', 'button');
|
|
btn.setAttribute('aria-label', 'Apri guida contestuale');
|
|
btn.setAttribute('title', 'Guida');
|
|
btn.innerHTML = HELP_ICON;
|
|
|
|
btn.addEventListener('click', function () {
|
|
showHelp(pageId);
|
|
});
|
|
|
|
container.appendChild(btn);
|
|
}
|
|
|
|
/**
|
|
* Restituisce una stringa HTML per un'icona "?" con tooltip inline.
|
|
* Puo' essere inserita accanto a qualsiasi elemento.
|
|
* @param {string} text - Testo del tooltip
|
|
* @returns {string} HTML string
|
|
*/
|
|
function inlineHelp(text) {
|
|
_injectStyles();
|
|
|
|
// Escape delle virgolette nel testo per sicurezza nell'attributo
|
|
var safeText = text
|
|
.replace(/&/g, '&')
|
|
.replace(/</g, '<')
|
|
.replace(/>/g, '>');
|
|
|
|
return '<span class="inline-help" tabindex="0" role="button" aria-label="Informazione">' +
|
|
HELP_ICON_SMALL +
|
|
'<span class="inline-help-text">' + safeText + '</span>' +
|
|
'</span>';
|
|
}
|
|
|
|
/**
|
|
* Inizializza il sistema di help: inietta gli stili e aggiunge il pulsante help
|
|
* nell'header della pagina corrente (se applicabile).
|
|
*/
|
|
function init() {
|
|
_injectStyles();
|
|
addHelpButton();
|
|
}
|
|
|
|
/**
|
|
* Restituisce la lista degli ID di pagina supportati dal sistema di help.
|
|
* @returns {string[]}
|
|
*/
|
|
function getAvailablePages() {
|
|
return Object.keys(_helpContent);
|
|
}
|
|
|
|
// ── Esposizione API ──────────────────────────────────────────────
|
|
|
|
return {
|
|
init: init,
|
|
showHelp: showHelp,
|
|
addHelpButton: addHelpButton,
|
|
inlineHelp: inlineHelp,
|
|
getAvailablePages: getAvailablePages
|
|
};
|
|
|
|
})();
|