nis2-agile/docs/nis2/incidente_r01/incident-new.html
DevEnv nis2-agile 5c545ea3d0 [FEAT] Integrazione analisi docs/nis2 v1.7.0 — scoring asset, tassonomia incidenti, PIR, NIST CSF, fonti certe
Fase 1 - Asset Relevance Scoring NIS2 (GV.OC-04): metodologia 0-100 a 6 criteri,
  AssetScoringService + endpoint scoringGrid/score/relevantSystems + UI assets.html + registro stampabile.
Fase 2 - Tassonomia incidenti Determina ACN 164179/2025: IS-1..4 + regime essenziale/importante (Allegati 3/4).
Fase 3 - Post-Incident Review (5-Whys) + metriche TTD/TTC/TTR + timestamp di fase.
Fase 4 - Mapping NIST CSF 2.0 (43 controlli) reference-only.
Fonti certe: registry config/nis2_sources.php + grounding AI (vieta riferimenti inventati) +
  citazioni help.js + ingest PDF normativi nella KB RAG (scripts/ingest-nis2-sources.php).
Migrazioni 020/021/022 (additive idempotenti). Fix VectorService IP Qdrant (drift .5->.3).
Analisi concorrenza Evix (docs/EVIX_ANALISI_CONCORRENZA.html, gap-driven).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 17:15:13 +02:00

957 lines
40 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.

<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Nuovo Incidente - NIS2 Management System</title>
<style>
:root {
--bg-primary: #0d1117;
--bg-secondary: #161b22;
--bg-tertiary: #1c2128;
--border-color: #30363d;
--text-primary: #c9d1d9;
--text-secondary: #8b949e;
--accent-primary: #58a6ff;
--accent-secondary: #1f6feb;
--success: #3fb950;
--warning: #d29922;
--danger: #f85149;
--essential-bg: #fef3c7;
--essential-text: #92400e;
--essential-border: #f59e0b;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Noto Sans', Helvetica, Arial, sans-serif;
background-color: var(--bg-primary);
color: var(--text-primary);
line-height: 1.6;
overflow-y: auto;
}
.container {
max-width: 1200px;
margin: 0 auto;
padding: 20px;
}
.header {
background-color: var(--bg-secondary);
border-bottom: 1px solid var(--border-color);
padding: 24px 0;
margin-bottom: 32px;
position: sticky;
top: 0;
z-index: 100;
}
.header-content {
max-width: 1200px;
margin: 0 auto;
padding: 0 20px;
display: flex;
justify-content: space-between;
align-items: center;
}
.header h1 {
font-size: 24px;
font-weight: 600;
color: var(--text-primary);
}
.breadcrumb {
font-size: 13px;
color: var(--text-secondary);
margin-top: 4px;
}
.breadcrumb a {
color: var(--accent-primary);
text-decoration: none;
}
.btn {
padding: 8px 16px;
background-color: var(--bg-tertiary);
border: 1px solid var(--border-color);
border-radius: 6px;
color: var(--text-primary);
font-size: 13px;
font-weight: 500;
cursor: pointer;
transition: all 0.2s;
text-decoration: none;
}
.btn:hover {
border-color: var(--accent-primary);
color: var(--accent-primary);
}
.form-section {
background-color: var(--bg-secondary);
border: 1px solid var(--border-color);
border-radius: 6px;
padding: 24px;
margin-bottom: 24px;
}
.form-section-title {
font-size: 18px;
font-weight: 600;
color: var(--text-primary);
margin-bottom: 20px;
padding-bottom: 12px;
border-bottom: 1px solid var(--border-color);
display: flex;
align-items: center;
gap: 8px;
}
.help-icon {
display: inline-flex;
align-items: center;
justify-content: center;
width: 22px;
height: 22px;
background-color: rgba(167, 139, 250, 0.2);
border: 2px solid #a78bfa;
border-radius: 50%;
font-size: 13px;
font-weight: 700;
color: #a78bfa;
cursor: help;
position: relative;
}
.help-icon:hover {
background-color: rgba(167, 139, 250, 0.3);
transform: scale(1.1);
}
.tooltip {
visibility: hidden;
position: absolute;
z-index: 1000;
background-color: var(--bg-tertiary);
color: var(--text-primary);
padding: 12px;
border-radius: 6px;
border: 1px solid var(--border-color);
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.5);
width: 320px;
top: 28px;
left: 50%;
transform: translateX(-50%);
font-size: 12px;
line-height: 1.5;
opacity: 0;
transition: opacity 0.2s;
white-space: normal;
}
.tooltip::before {
content: '';
position: absolute;
top: -6px;
left: 50%;
transform: translateX(-50%);
border-left: 6px solid transparent;
border-right: 6px solid transparent;
border-bottom: 6px solid var(--border-color);
}
.tooltip-title {
color: var(--accent-primary);
font-weight: 600;
margin-bottom: 8px;
font-size: 11px;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.help-icon:hover .tooltip {
visibility: visible;
opacity: 1;
}
.form-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 20px;
}
.form-group {
margin-bottom: 20px;
}
.form-group.full-width {
grid-column: 1 / -1;
}
.form-label {
display: block;
font-size: 13px;
font-weight: 600;
color: var(--text-primary);
margin-bottom: 8px;
}
.form-label .required {
color: var(--danger);
margin-left: 4px;
}
.form-input, .form-select, .form-textarea {
width: 100%;
padding: 10px 12px;
background-color: var(--bg-tertiary);
border: 1px solid var(--border-color);
border-radius: 6px;
color: var(--text-primary);
font-size: 14px;
font-family: inherit;
}
.form-input:focus, .form-select:focus, .form-textarea:focus {
outline: none;
border-color: var(--accent-primary);
box-shadow: 0 0 0 3px rgba(88, 166, 255, 0.1);
}
.form-textarea {
resize: vertical;
min-height: 100px;
}
.form-help {
font-size: 12px;
color: var(--text-secondary);
margin-top: 6px;
line-height: 1.4;
}
.severity-selector {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
gap: 12px;
}
.severity-option {
padding: 16px;
background-color: var(--bg-tertiary);
border: 2px solid var(--border-color);
border-radius: 6px;
cursor: pointer;
text-align: center;
transition: all 0.2s;
}
.severity-option:hover {
border-color: var(--accent-primary);
}
.severity-option.selected {
border-color: var(--accent-primary);
background-color: rgba(88, 166, 255, 0.1);
}
.severity-option.sev-1 {
border-color: var(--danger);
}
.severity-option.sev-1.selected {
background-color: rgba(248, 81, 73, 0.1);
}
.severity-option.sev-2 {
border-color: var(--warning);
}
.severity-option.sev-2.selected {
background-color: rgba(210, 153, 34, 0.1);
}
.severity-label {
font-weight: 700;
font-size: 14px;
margin-bottom: 4px;
}
.severity-desc {
font-size: 11px;
color: var(--text-secondary);
}
.alert-box {
background-color: rgba(88, 166, 255, 0.1);
border: 1px solid var(--accent-primary);
border-left: 4px solid var(--accent-primary);
border-radius: 6px;
padding: 16px;
margin-bottom: 20px;
}
.alert-box.warning {
background-color: rgba(210, 153, 34, 0.1);
border-color: var(--warning);
border-left-color: var(--warning);
}
.alert-box.danger {
background-color: rgba(248, 81, 73, 0.1);
border-color: var(--danger);
border-left-color: var(--danger);
}
.alert-title {
font-weight: 600;
margin-bottom: 8px;
font-size: 14px;
}
.alert-content {
font-size: 13px;
color: var(--text-secondary);
line-height: 1.5;
}
.form-actions {
display: flex;
gap: 12px;
justify-content: flex-end;
padding-top: 24px;
border-top: 1px solid var(--border-color);
}
.btn-primary {
background-color: var(--accent-primary);
border-color: var(--accent-primary);
color: white;
}
.btn-primary:hover {
background-color: var(--accent-secondary);
border-color: var(--accent-secondary);
color: white;
}
.btn-danger {
background-color: var(--danger);
border-color: var(--danger);
color: white;
}
.btn-danger:hover {
background-color: #dc2626;
border-color: #dc2626;
}
.checklist {
list-style: none;
}
.checklist li {
padding: 10px;
background-color: var(--bg-tertiary);
border: 1px solid var(--border-color);
border-radius: 4px;
margin-bottom: 8px;
display: flex;
align-items: center;
gap: 12px;
}
.checklist input[type="checkbox"] {
width: 18px;
height: 18px;
cursor: pointer;
}
.essential-badge {
display: inline-block;
background-color: var(--essential-bg);
color: var(--essential-text);
padding: 4px 8px;
border-radius: 3px;
font-size: 10px;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.5px;
border: 1px solid var(--essential-border);
margin-left: 8px;
}
@media (max-width: 768px) {
.form-grid {
grid-template-columns: 1fr;
}
.severity-selector {
grid-template-columns: 1fr 1fr;
}
}
</style>
</head>
<body>
<div class="header">
<div class="header-content">
<div>
<h1>🚨 Segnalazione Nuovo Incidente</h1>
<div class="breadcrumb">
<a href="dashboard.html">Dashboard NIS2</a> /
<a href="incident-dashboard.html">Gestione Incidenti</a> /
Nuovo Incidente
</div>
</div>
<a href="incident-dashboard.html" class="btn">← Annulla</a>
</div>
</div>
<div class="container">
<div class="alert-box danger">
<div class="alert-title">⚠️ Procedura di Emergenza</div>
<div class="alert-content">
Per incidenti <strong>SEV-1 (Critici)</strong>: attivare immediatamente il Crisis Team e il CISO.
La notifica al CSIRT Italia (preallarme) deve essere effettuata entro <strong>24 ore</strong> dalla conoscenza dell'incidente significativo.
</div>
</div>
<form id="incidentForm">
<!-- Sezione 1: Rilevazione -->
<div class="form-section">
<div class="form-section-title">
Fase 1: Rilevazione e Segnalazione
<span class="help-icon">?
<div class="tooltip">
<div class="tooltip-title">HELP DELLA SEZIONE</div>
Registrazione iniziale dell'incidente. Compilare entro 15 minuti dalla rilevazione per incidenti critici. Tutte le informazioni possono essere aggiornate durante la gestione.
</div>
</span>
</div>
<div class="form-grid">
<div class="form-group">
<label class="form-label">
Data/Ora Rilevazione <span class="required">*</span>
</label>
<input type="datetime-local" class="form-input" id="detectionTime" required>
<div class="form-help">Momento in cui l'incidente è stato rilevato</div>
</div>
<div class="form-group">
<label class="form-label">
Fonte di Rilevazione <span class="required">*</span>
</label>
<select class="form-select" id="detectionSource" required>
<option value="">Seleziona...</option>
<option value="siem">Alert SIEM/SOC</option>
<option value="edr">Alert EDR/Antimalware</option>
<option value="user">Segnalazione Utente</option>
<option value="supplier">Notifica Fornitore/Partner</option>
<option value="csirt">Notifica CSIRT Italia</option>
<option value="threat-intel">Threat Intelligence</option>
<option value="external">Segnalazione Esterna</option>
<option value="monitoring">Monitoraggio Infrastruttura</option>
</select>
</div>
<div class="form-group">
<label class="form-label">
Analista Assegnato <span class="required">*</span>
</label>
<select class="form-select" id="analyst" required>
<option value="">Seleziona...</option>
<option value="ciso">CISO</option>
<option value="soc-lead">SOC Lead</option>
<option value="analyst1">Analista Sicurezza 1</option>
<option value="analyst2">Analista Sicurezza 2</option>
<option value="sysadmin">System Administrator</option>
<option value="netadmin">Network Administrator</option>
</select>
</div>
<div class="form-group full-width">
<label class="form-label">
Descrizione Preliminare <span class="required">*</span>
</label>
<textarea class="form-textarea" id="description" required placeholder="Descrizione dettagliata dell'incidente rilevato..."></textarea>
<div class="form-help">Fornire tutti i dettagli disponibili: cosa è stato rilevato, su quali sistemi, sintomi osservati</div>
</div>
<div class="form-group full-width">
<label class="form-label">
Sistemi Potenzialmente Impattati
</label>
<input type="text" class="form-input" id="affectedSystems" placeholder="es. HW-SRV-001, SW-ERP-001, CLD-IAAS-001">
<div class="form-help">Codici asset da inventario (Org.01). Separare con virgola se multipli</div>
</div>
</div>
</div>
<!-- Sezione 2: Triage e Classificazione -->
<div class="form-section">
<div class="form-section-title">
Fase 2: Triage e Classificazione
<span class="help-icon">?
<div class="tooltip">
<div class="tooltip-title">HELP DELLA SEZIONE</div>
Determinazione della severità e classificazione secondo NIS2. Completare entro 1 ora per SEV-1/SEV-2. La classificazione determina gli obblighi di notifica al CSIRT.
</div>
</span>
</div>
<div class="form-group full-width">
<label class="form-label">
Severità Incidente <span class="required">*</span>
</label>
<div class="severity-selector">
<div class="severity-option sev-1" onclick="selectSeverity('sev-1')">
<div class="severity-label" style="color: var(--danger);">SEV-1</div>
<div class="severity-desc">CRITICO</div>
</div>
<div class="severity-option sev-2" onclick="selectSeverity('sev-2')">
<div class="severity-label" style="color: var(--warning);">SEV-2</div>
<div class="severity-desc">ALTO</div>
</div>
<div class="severity-option" onclick="selectSeverity('sev-3')">
<div class="severity-label" style="color: var(--accent-primary);">SEV-3</div>
<div class="severity-desc">MEDIO</div>
</div>
<div class="severity-option" onclick="selectSeverity('sev-4')">
<div class="severity-label" style="color: var(--text-secondary);">SEV-4</div>
<div class="severity-desc">BASSO</div>
</div>
</div>
<input type="hidden" id="severity" required>
<div class="form-help" id="severityHelp" style="margin-top: 12px;"></div>
</div>
<div class="alert-box warning" id="sev1Alert" style="display: none;">
<div class="alert-title">🚨 Incidente SEV-1 - Azioni Immediate Richieste</div>
<div class="alert-content">
<ul style="margin-left: 20px; margin-top: 8px;">
<li>Attivare immediatamente Crisis Team</li>
<li>Notificare CISO e Direzione</li>
<li>Contenimento entro 30 minuti</li>
<li>Preallarme CSIRT entro 24h (se significativo)</li>
</ul>
</div>
</div>
<div class="form-grid">
<div class="form-group">
<label class="form-label">
Classificazione NIS2 <span class="required">*</span>
</label>
<select class="form-select" id="classification" required onchange="updateClassificationHelp()">
<option value="">Seleziona...</option>
<option value="is-1">IS-1 - Impatto su servizi rilevanti</option>
<option value="is-2">IS-2 - Impatto su integrità/riservatezza dati</option>
<option value="is-3">IS-3 - Impatto su altri soggetti/supply chain</option>
<option value="is-4" id="is4ClassOption">IS-4 - Incidente ricorrente (SOLO ESSENZIALI)</option>
<option value="not-significant">Non Significativo</option>
</select>
<div class="form-help" id="classificationHelp"></div>
</div>
<div class="form-group">
<label class="form-label">
Impatto
</label>
<select class="form-select" id="impact" multiple size="4">
<option value="availability">Disponibilità</option>
<option value="integrity">Integrità</option>
<option value="confidentiality">Riservatezza</option>
<option value="authenticity">Autenticità</option>
</select>
<div class="form-help">Tenere premuto Ctrl/Cmd per selezione multipla</div>
</div>
<div class="form-group">
<label class="form-label">
Categoria MITRE ATT&CK
</label>
<select class="form-select" id="mitreCategory">
<option value="">Non determinata</option>
<option value="initial-access">Initial Access</option>
<option value="execution">Execution</option>
<option value="persistence">Persistence</option>
<option value="privilege-escalation">Privilege Escalation</option>
<option value="defense-evasion">Defense Evasion</option>
<option value="credential-access">Credential Access</option>
<option value="discovery">Discovery</option>
<option value="lateral-movement">Lateral Movement</option>
<option value="collection">Collection</option>
<option value="exfiltration">Exfiltration</option>
<option value="impact">Impact</option>
</select>
</div>
<div class="form-group">
<label class="form-label">
Vettore di Attacco
</label>
<select class="form-select" id="attackVector">
<option value="">Non determinato</option>
<option value="phishing">Phishing/Spear Phishing</option>
<option value="malware">Malware</option>
<option value="ransomware">Ransomware</option>
<option value="vulnerability">Exploit Vulnerabilità</option>
<option value="brute-force">Brute Force</option>
<option value="credential-stuffing">Credential Stuffing</option>
<option value="supply-chain">Supply Chain Attack</option>
<option value="ddos">DDoS</option>
<option value="insider">Insider Threat</option>
<option value="physical">Accesso Fisico</option>
<option value="social-engineering">Social Engineering</option>
</select>
</div>
</div>
<div class="alert-box" id="csirtAlert" style="display: none;">
<div class="alert-title">📡 Notifica CSIRT Obbligatoria</div>
<div class="alert-content">
Questo incidente rientra nella classificazione di incidente significativo secondo NIS2.
È obbligatorio inviare il <strong>preallarme al CSIRT Italia entro 24 ore</strong> dalla conoscenza dell'incidente.
<br><br>
Dopo la creazione dell'incidente, procedere alla sezione "Notifiche CSIRT" per gestire le comunicazioni obbligatorie.
</div>
</div>
</div>
<!-- Sezione 3: Dati Impattati -->
<div class="form-section">
<div class="form-section-title">
Dati e Servizi Impattati
<span class="help-icon">?
<div class="tooltip">
<div class="tooltip-title">HELP DELLA SEZIONE</div>
Identificazione dei dati e servizi coinvolti nell'incidente. Fondamentale per valutare obblighi GDPR e impatto operativo.
</div>
</span>
</div>
<div class="form-grid">
<div class="form-group">
<label class="form-label">
Dati Personali Coinvolti?
</label>
<select class="form-select" id="personalData" onchange="toggleGDPR()">
<option value="no">No</option>
<option value="yes"></option>
<option value="unknown">Da verificare</option>
</select>
</div>
<div class="form-group" id="gdprGroup" style="display: none;">
<label class="form-label">
Notifica Garante Privacy
</label>
<select class="form-select" id="gdprNotification">
<option value="not-required">Non richiesta</option>
<option value="required">Richiesta (entro 72h)</option>
<option value="sent">Già inviata</option>
</select>
<div class="form-help">Art. 33 GDPR - coordinare con DPO</div>
</div>
<div class="form-group full-width">
<label class="form-label">
Servizi Rilevanti NIS2 Impattati
</label>
<input type="text" class="form-input" id="affectedServices" placeholder="Codici servizi da catalogo (ID.AM-04)">
<div class="form-help">Elencare i servizi rilevanti NIS2 che hanno subito interruzione o degrado</div>
</div>
<div class="form-group">
<label class="form-label">
Numero Utenti Impattati (stima)
</label>
<input type="number" class="form-input" id="usersImpacted" min="0">
</div>
<div class="form-group">
<label class="form-label">
Impatto Economico Stimato (€)
</label>
<input type="number" class="form-input" id="financialImpact" min="0" step="100">
<div class="form-help">Stima preliminare (diretto + indiretto)</div>
</div>
</div>
</div>
<!-- Sezione 4: Azioni Immediate -->
<div class="form-section">
<div class="form-section-title">
Azioni Immediate di Contenimento
<span class="help-icon">?
<div class="tooltip">
<div class="tooltip-title">HELP DELLA SEZIONE</div>
Checklist delle azioni di contenimento immediato. Per SEV-1: contenimento entro 30 minuti. Documentare ogni azione con timestamp.
</div>
</span>
</div>
<ul class="checklist">
<li>
<input type="checkbox" id="action1">
<label for="action1">Sistema compromesso isolato dalla rete</label>
</li>
<li>
<input type="checkbox" id="action2">
<label for="action2">Account compromessi bloccati</label>
</li>
<li>
<input type="checkbox" id="action3">
<label for="action3">IP/domini malevoli bloccati su firewall</label>
</li>
<li>
<input type="checkbox" id="action4">
<label for="action4">Evidenze preservate (snapshot, log, memoria)</label>
</li>
<li>
<input type="checkbox" id="action5">
<label for="action5">Monitoraggio intensivo attivato su sistemi correlati</label>
</li>
<li>
<input type="checkbox" id="action6">
<label for="action6">Crisis Team / IRT notificato</label>
</li>
<li>
<input type="checkbox" id="action7">
<label for="action7">Direzione informata (per SEV-1/SEV-2)</label>
</li>
</ul>
<div class="form-group" style="margin-top: 20px;">
<label class="form-label">
Note Azioni di Contenimento
</label>
<textarea class="form-textarea" id="containmentNotes" placeholder="Descrivere in dettaglio le azioni di contenimento effettuate con timestamp..."></textarea>
</div>
</div>
<!-- Sezione 5: Collegamento Risk -->
<div class="form-section">
<div class="form-section-title">
Collegamento Risk Assessment
<span class="help-icon">?
<div class="tooltip">
<div class="tooltip-title">HELP DELLA SEZIONE</div>
Collegare l'incidente a rischi già identificati nel risk assessment (Org.05). Se l'incidente evidenzia un nuovo rischio, verrà creato automaticamente.
</div>
</span>
</div>
<div class="form-group">
<label class="form-label">
Collegamento N°RISK
</label>
<input type="text" class="form-input" id="riskId" placeholder="es. RISK-2024-015">
<div class="form-help">Codice rischio da Org.05 - Risk Assessment. Lasciare vuoto se nuovo rischio</div>
</div>
<div class="form-group">
<label class="form-label">
Root Cause Preliminare
</label>
<select class="form-select" id="rootCause">
<option value="">Da determinare</option>
<option value="vulnerability">Vulnerabilità non patchata</option>
<option value="misconfiguration">Errore di configurazione</option>
<option value="weak-credentials">Credenziali deboli/compromesse</option>
<option value="missing-controls">Controlli di sicurezza mancanti</option>
<option value="human-error">Errore umano</option>
<option value="third-party">Compromissione terza parte</option>
<option value="zero-day">Zero-day exploit</option>
<option value="insider">Insider threat</option>
</select>
</div>
</div>
<!-- Form Actions -->
<div class="form-section">
<div class="form-actions">
<a href="incident-dashboard.html" class="btn">Annulla</a>
<button type="button" class="btn" onclick="saveDraft()">Salva Bozza</button>
<button type="submit" class="btn btn-danger">🚨 Crea Incidente e Attiva Gestione</button>
</div>
</div>
</form>
</div>
<script>
// Verifica tipo soggetto
function checkSubjectType() {
const subjectType = sessionStorage.getItem('nis2_subject_type');
if (!subjectType) {
window.location.href = 'incident-gate.html';
return;
}
// Nascondi IS-4 per soggetti importanti
if (subjectType === 'important') {
const is4Option = document.getElementById('is4ClassOption');
if (is4Option) is4Option.style.display = 'none';
}
}
// Imposta data/ora corrente
function setCurrentDateTime() {
const now = new Date();
const year = now.getFullYear();
const month = String(now.getMonth() + 1).padStart(2, '0');
const day = String(now.getDate()).padStart(2, '0');
const hours = String(now.getHours()).padStart(2, '0');
const minutes = String(now.getMinutes()).padStart(2, '0');
document.getElementById('detectionTime').value = `${year}-${month}-${day}T${hours}:${minutes}`;
}
// Selezione severità
function selectSeverity(severity) {
// Rimuovi selezione precedente
document.querySelectorAll('.severity-option').forEach(opt => {
opt.classList.remove('selected');
});
// Seleziona nuovo
event.target.closest('.severity-option').classList.add('selected');
document.getElementById('severity').value = severity;
// Mostra help specifico
const helpTexts = {
'sev-1': '🚨 <strong>CRITICO:</strong> Interruzione totale servizio critico, ransomware attivo, esfiltrazione massiva dati, compromissione infrastruttura core. <strong>Attivazione immediata Crisis Team.</strong>',
'sev-2': '⚠️ <strong>ALTO:</strong> Interruzione parziale servizio rilevante, compromissione account privilegiato, malware attivo non contenuto, accesso non autorizzato a dati riservati.',
'sev-3': ' <strong>MEDIO:</strong> Degrado prestazioni servizio rilevante, malware contenuto automaticamente, tentativo intrusione bloccato ma significativo.',
'sev-4': '📝 <strong>BASSO:</strong> Anomalia senza impatto operativo, tentativo attacco bloccato (routine), violazione policy minore.'
};
document.getElementById('severityHelp').innerHTML = helpTexts[severity];
// Mostra alert per SEV-1
const sev1Alert = document.getElementById('sev1Alert');
if (severity === 'sev-1') {
sev1Alert.style.display = 'block';
} else {
sev1Alert.style.display = 'none';
}
}
// Aggiorna help classificazione
function updateClassificationHelp() {
const classification = document.getElementById('classification').value;
const helpTexts = {
'is-1': 'Interruzione operativa o degrado significativo di un servizio rilevante NIS2. <strong>Notifica CSIRT obbligatoria.</strong>',
'is-2': 'Accesso non autorizzato, modifica, esfiltrazione o violazione riservatezza dati. <strong>Notifica CSIRT obbligatoria.</strong> Verificare anche obbligo GDPR.',
'is-3': 'Incidente che si propaga a soggetti terzi o impatta la catena di fornitura. <strong>Notifica CSIRT obbligatoria.</strong>',
'is-4': 'Serie di incidenti correlati con impatto cumulativo significativo. <strong>Notifica CSIRT obbligatoria SOLO per soggetti ESSENZIALI.</strong>',
'not-significant': 'Incidente gestito internamente, senza obbligo di notifica CSIRT. Documentare comunque nel registro incidenti.'
};
const helpElement = document.getElementById('classificationHelp');
helpElement.innerHTML = helpTexts[classification] || '';
// Mostra/nascondi alert CSIRT
const csirtAlert = document.getElementById('csirtAlert');
if (['is-1', 'is-2', 'is-3', 'is-4'].includes(classification)) {
csirtAlert.style.display = 'block';
} else {
csirtAlert.style.display = 'none';
}
}
// Toggle GDPR
function toggleGDPR() {
const personalData = document.getElementById('personalData').value;
const gdprGroup = document.getElementById('gdprGroup');
if (personalData === 'yes') {
gdprGroup.style.display = 'block';
} else {
gdprGroup.style.display = 'none';
}
}
// Salva bozza
function saveDraft() {
alert('Bozza salvata con successo. Puoi continuare la compilazione in seguito.');
}
// Submit form
document.getElementById('incidentForm').addEventListener('submit', function(e) {
e.preventDefault();
// Validazione
const severity = document.getElementById('severity').value;
if (!severity) {
alert('Seleziona la severità dell\'incidente');
return;
}
// Genera codice incidente
const year = new Date().getFullYear();
const progressive = Math.floor(Math.random() * 900) + 100; // Simulato
const incidentCode = `INC-${year}-${progressive}`;
// Simula creazione incidente
const tooltip = document.createElement('div');
tooltip.style.cssText = `
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background: var(--bg-secondary);
border: 2px solid var(--success);
border-radius: 8px;
padding: 32px;
box-shadow: 0 8px 24px rgba(0,0,0,0.5);
z-index: 10000;
max-width: 500px;
text-align: center;
`;
tooltip.innerHTML = `
<div style="font-size: 48px; margin-bottom: 16px;">✅</div>
<h2 style="color: var(--success); margin-bottom: 16px;">Incidente Creato con Successo</h2>
<p style="color: var(--text-secondary); margin-bottom: 8px;">Codice incidente:</p>
<p style="font-size: 24px; font-weight: 700; color: var(--text-primary); margin-bottom: 24px; font-family: monospace;">${incidentCode}</p>
<div style="background: var(--bg-tertiary); padding: 16px; border-radius: 6px; margin-bottom: 24px; text-align: left;">
<p style="font-size: 13px; color: var(--text-secondary); margin-bottom: 12px;"><strong>Prossime azioni:</strong></p>
<ul style="font-size: 13px; color: var(--text-secondary); margin-left: 20px;">
<li>Incident Response Team notificato</li>
<li>Timeline di gestione avviata</li>
${severity === 'sev-1' ? '<li style="color: var(--danger); font-weight: 600;">Crisis Team attivato</li>' : ''}
${['is-1', 'is-2', 'is-3'].includes(document.getElementById('classification').value) ? '<li style="color: var(--warning); font-weight: 600;">Preallarme CSIRT da inviare entro 24h</li>' : ''}
</ul>
</div>
<button onclick="window.location.href='incident-detail.html?id=${incidentCode}'"
style="padding: 12px 24px; background: var(--accent-primary); border: none; border-radius: 6px; color: white; font-weight: 600; cursor: pointer; margin-right: 12px;">
Vai all'Incidente
</button>
<button onclick="window.location.href='incident-dashboard.html'"
style="padding: 12px 24px; background: var(--bg-tertiary); border: 1px solid var(--border-color); border-radius: 6px; color: var(--text-primary); font-weight: 600; cursor: pointer;">
Torna alla Dashboard
</button>
`;
document.body.appendChild(tooltip);
});
// Inizializza
window.addEventListener('DOMContentLoaded', function() {
checkSubjectType();
setCurrentDateTime();
});
</script>
</body>
</html>