diff --git a/application/controllers/IncidentController.php b/application/controllers/IncidentController.php
index 269ca2a..c51a771 100644
--- a/application/controllers/IncidentController.php
+++ b/application/controllers/IncidentController.php
@@ -92,9 +92,9 @@ class IncidentController extends BaseController
// Calcola scadenze NIS2 Art. 23 se significativo
if ($isSignificant) {
$detectedTime = strtotime($detectedAt);
- $data['early_warning_due'] = date('Y-m-d H:i:s', $detectedTime + 24 * 3600); // +24h
- $data['notification_due'] = date('Y-m-d H:i:s', $detectedTime + 72 * 3600); // +72h
- $data['final_report_due'] = date('Y-m-d H:i:s', $detectedTime + 30 * 86400); // +30 giorni
+ $data['early_warning_due'] = date('Y-m-d H:i:s', $detectedTime + 24 * 3600); // +24h
+ $data['notification_due'] = date('Y-m-d H:i:s', $detectedTime + 72 * 3600); // +72h
+ $data['final_report_due'] = date('Y-m-d H:i:s', $detectedTime + 72 * 3600 + 30 * 86400); // 1 mese dalla notifica (Art.23.4 lett.d)
}
$incidentId = Database::insert('incidents', $data);
@@ -222,7 +222,7 @@ class IncidentController extends BaseController
$detectedTime = strtotime($incident['detected_at']);
$updates['early_warning_due'] = date('Y-m-d H:i:s', $detectedTime + 24 * 3600);
$updates['notification_due'] = date('Y-m-d H:i:s', $detectedTime + 72 * 3600);
- $updates['final_report_due'] = date('Y-m-d H:i:s', $detectedTime + 30 * 86400);
+ $updates['final_report_due'] = date('Y-m-d H:i:s', $detectedTime + 72 * 3600 + 30 * 86400); // 1 mese dalla notifica (Art.23.4 lett.d)
}
if (!empty($updates)) {
diff --git a/public/guida.html b/public/guida.html
index c5e9336..9fbd4a5 100644
--- a/public/guida.html
+++ b/public/guida.html
@@ -623,7 +623,7 @@
Compila titolo, classificazione, severità, ora di rilevazione.
Il sistema calcola automaticamente le 3 scadenze (24h / 72h / 1 mese).
Quando arriva il momento, usa i bottoni "Invia Early Warning (24h)",
- "Invia Notifica (72h)" e "Invia Report Finale (30gg)": le email partono verso
+ "Invia Notifica (72h)" e "Invia Report Finale (1 mese dalla notifica)": le email partono verso
l'indirizzo CSIRT configurato.
Aggiorna lo stato dell'incidente (analisi → contenimento → eradicazione → recovery → chiuso).
Compila root cause e lezioni apprese alla chiusura.
@@ -709,7 +709,7 @@
- Inserirlo nell'anagrafica con dati di contratto.
- Classificare la criticità (low/medium/high/critical).
- - Inviargli il questionario sicurezza (40+ domande standard).
+ - Inviargli il questionario sicurezza (template "NIS2 base": 26 domande mappate alle misure ACN GV.SC, personalizzabile).
- Verificare la risposta e assegnare un risk score (0–10).
- Rinnovare la valutazione almeno una volta l'anno.
- Inserire clausole NIS2 nel contratto (right to audit, notifica incidenti, etc.).
diff --git a/public/version.json b/public/version.json
index 9919d67..625e108 100644
--- a/public/version.json
+++ b/public/version.json
@@ -1 +1 @@
-{"version":"1.10.6","build":"2026-05-31-v1.10.6","date":"2026-05-31","changelog":"Fix Knowledge Base da test multi-agente: kb.js usava la chiave token errata (access_token invece di nis2_access_token) -> tutte le chiamate KB tornavano 401, pagina inutilizzabile; kb.html non inizializzava auth gate/sidebar/i18n. Ora la KB e' funzionante e protetta come le altre pagine."}
+{"version":"1.10.7","build":"2026-05-31-v1.10.7","date":"2026-05-31","changelog":"Fix precisione normativa da test multi-agente: relazione finale incidenti calcolata da notifica+1 mese (Art.23.4 lett.d) invece che dalla rilevazione; guida allineata (26 domande GV.SC, etichetta '1 mese dalla notifica'). App verificata da 10 agenti: 0 SQLi/IDOR/XSS, DB integro, normativa senza citazioni inventate."}