[FIX] Precisione normativa: relazione finale +1 mese DALLA NOTIFICA + guida allineata

Da test multi-agente (aderenza normativa):
- IncidentController: final_report_due calcolato come detected+72h+1mese (= 1 mese
  dalla notifica, Art.23.4 lett.d), non detected+30gg. Allineato create() e update().
- guida.html: "40+ domande" -> "26 domande GV.SC" (numero reale del template NIS2 base);
  etichetta "Report Finale (30gg)" -> "(1 mese dalla notifica)".

Esito review 10 agenti: app solida (0 SQLi/IDOR/XSS cross-tenant, JWT/refresh ok,
DB integro 032/033 applicate, 0 citazioni normative inventate, Allegato 3/4 corretto).

php -l OK. version 1.10.7.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
DevEnv nis2-agile 2026-05-31 16:13:21 +02:00
parent 8a55194b2f
commit 54a9c0987f
3 changed files with 7 additions and 7 deletions

View File

@ -94,7 +94,7 @@ class IncidentController extends BaseController
$detectedTime = strtotime($detectedAt); $detectedTime = strtotime($detectedAt);
$data['early_warning_due'] = date('Y-m-d H:i:s', $detectedTime + 24 * 3600); // +24h $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['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['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); $incidentId = Database::insert('incidents', $data);
@ -222,7 +222,7 @@ class IncidentController extends BaseController
$detectedTime = strtotime($incident['detected_at']); $detectedTime = strtotime($incident['detected_at']);
$updates['early_warning_due'] = date('Y-m-d H:i:s', $detectedTime + 24 * 3600); $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['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)) { if (!empty($updates)) {

View File

@ -623,7 +623,7 @@
<li>Compila titolo, classificazione, severità, ora di rilevazione.</li> <li>Compila titolo, classificazione, severità, ora di rilevazione.</li>
<li>Il sistema calcola automaticamente le 3 scadenze (24h / 72h / 1 mese).</li> <li>Il sistema calcola automaticamente le 3 scadenze (24h / 72h / 1 mese).</li>
<li>Quando arriva il momento, usa i bottoni <strong>"Invia Early Warning (24h)"</strong>, <li>Quando arriva il momento, usa i bottoni <strong>"Invia Early Warning (24h)"</strong>,
<strong>"Invia Notifica (72h)"</strong> e <strong>"Invia Report Finale (30gg)"</strong>: le email partono verso <strong>"Invia Notifica (72h)"</strong> e <strong>"Invia Report Finale (1 mese dalla notifica)"</strong>: le email partono verso
l'indirizzo CSIRT configurato.</li> l'indirizzo CSIRT configurato.</li>
<li>Aggiorna lo stato dell'incidente (analisi → contenimento → eradicazione → recovery → chiuso).</li> <li>Aggiorna lo stato dell'incidente (analisi → contenimento → eradicazione → recovery → chiuso).</li>
<li>Compila root cause e lezioni apprese alla chiusura.</li> <li>Compila root cause e lezioni apprese alla chiusura.</li>
@ -709,7 +709,7 @@
<ol> <ol>
<li>Inserirlo nell'anagrafica con dati di contratto.</li> <li>Inserirlo nell'anagrafica con dati di contratto.</li>
<li>Classificare la criticità (low/medium/high/critical).</li> <li>Classificare la criticità (low/medium/high/critical).</li>
<li>Inviargli il questionario sicurezza (40+ domande standard).</li> <li>Inviargli il questionario sicurezza (template "NIS2 base": 26 domande mappate alle misure ACN GV.SC, personalizzabile).</li>
<li>Verificare la risposta e assegnare un risk score (010).</li> <li>Verificare la risposta e assegnare un risk score (010).</li>
<li>Rinnovare la valutazione almeno una volta l'anno.</li> <li>Rinnovare la valutazione almeno una volta l'anno.</li>
<li>Inserire clausole NIS2 nel contratto (right to audit, notifica incidenti, etc.).</li> <li>Inserire clausole NIS2 nel contratto (right to audit, notifica incidenti, etc.).</li>

View File

@ -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."}