[BACKUP] Sessione 2026-06-14: supervisore autonomo + contesto + mig.039 + UI V2 plan
- Supervisore autonomo ticket: prompt operativo + dry-run (scripts/), DRAFT rimosso; gate normativo gia' committato - docs/CONTEXT_LAST_SESSION.md: sessione 2026-06-14 (supervisore LIVE, run#1/#2, rotazione Anthropic rinviata) - docs/sql/039_integrity_keys.sql: migrazione integrita' DB (PK/UNIQUE/FK) gia' applicata in prod 12/6 - docs/MIGRATION_UI_V2.md: piano migrazione UI V2 - docs/nis2/incidente_r00/: 2 mockup incidente (gateway+dashboard) - .gitignore: versiona public/vendor/ (asset Bootstrap Italia self-hosted) - Fix accumulati: EmailService (kill-switch email), Incident/Onboarding/Organization/Services controllers, questionnaire, ReportService, CLAUDE.md standard Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
489a032658
commit
b80bf2361c
@@ -2,7 +2,7 @@
|
||||
/**
|
||||
* NIS2 Agile - Incident Controller
|
||||
*
|
||||
* Gestione incidenti con workflow NIS2 Art. 23 (24h/72h/30d).
|
||||
* Gestione incidenti con workflow NIS2 Art. 23 (24h/72h/1 mese).
|
||||
*/
|
||||
|
||||
require_once __DIR__ . '/BaseController.php';
|
||||
@@ -330,7 +330,7 @@ class IncidentController extends BaseController
|
||||
|
||||
/**
|
||||
* POST /api/incidents/{id}/final-report
|
||||
* Registra invio report finale (30 giorni)
|
||||
* Registra invio report finale (entro un mese)
|
||||
*/
|
||||
public function sendFinalReport(int $id): void
|
||||
{
|
||||
@@ -343,7 +343,7 @@ class IncidentController extends BaseController
|
||||
Database::insert('incident_timeline', [
|
||||
'incident_id' => $id,
|
||||
'event_type' => 'notification',
|
||||
'description' => 'Report finale (30 giorni) inviato al CSIRT nazionale (ACN)',
|
||||
'description' => 'Report finale (entro un mese) inviato al CSIRT nazionale (ACN)',
|
||||
'created_by' => $this->getCurrentUserId(),
|
||||
]);
|
||||
|
||||
|
||||
@@ -340,7 +340,7 @@ class OnboardingController extends BaseController
|
||||
'description' => "La vostra organizzazione rientra tra i soggetti essenziali ai sensi della Direttiva NIS2 (UE 2022/2555). Operate in un settore ad alta criticità e superate le soglie dimensionali.",
|
||||
'obligations' => [
|
||||
'Misure di sicurezza informatica (Art. 21)',
|
||||
'Notifica incidenti significativi al CSIRT entro 24h/72h/30gg (Art. 23)',
|
||||
'Notifica incidenti significativi al CSIRT entro 24h/72h/1 mese (Art. 23)',
|
||||
'Formazione obbligatoria per gli organi di gestione (Art. 20)',
|
||||
'Vigilanza proattiva (ex ante) da parte delle autorità',
|
||||
'Sanzioni fino a EUR 10M o 2% del fatturato mondiale annuo',
|
||||
@@ -353,7 +353,7 @@ class OnboardingController extends BaseController
|
||||
'description' => "La vostra organizzazione rientra tra i soggetti importanti ai sensi della Direttiva NIS2. Siete tenuti a rispettare gli obblighi di sicurezza e notifica incidenti.",
|
||||
'obligations' => [
|
||||
'Misure di sicurezza informatica (Art. 21)',
|
||||
'Notifica incidenti significativi al CSIRT entro 24h/72h/30gg (Art. 23)',
|
||||
'Notifica incidenti significativi al CSIRT entro 24h/72h/1 mese (Art. 23)',
|
||||
'Formazione obbligatoria per gli organi di gestione (Art. 20)',
|
||||
'Vigilanza reattiva (ex post) da parte delle autorità',
|
||||
'Sanzioni fino a EUR 7M o 1,4% del fatturato mondiale annuo',
|
||||
@@ -388,7 +388,7 @@ class OnboardingController extends BaseController
|
||||
['NIS2-21.2.j', 'nis2', 'Autenticazione multi-fattore e comunicazioni sicure'],
|
||||
['NIS2-20.1', 'nis2', 'Governance: approvazione misure da parte degli organi di gestione'],
|
||||
['NIS2-20.2', 'nis2', 'Formazione obbligatoria per gli organi di gestione'],
|
||||
['NIS2-23.1', 'nis2', 'Notifica incidenti significativi al CSIRT (24h/72h/30gg)'],
|
||||
['NIS2-23.1', 'nis2', 'Notifica incidenti significativi al CSIRT (24h/72h/1 mese)'],
|
||||
];
|
||||
|
||||
foreach ($controls as [$code, $framework, $title]) {
|
||||
|
||||
@@ -394,7 +394,7 @@ class OrganizationController extends BaseController
|
||||
['NIS2-21.2.j', 'nis2', 'Autenticazione multi-fattore e comunicazioni sicure'],
|
||||
['NIS2-20.1', 'nis2', 'Governance: approvazione misure da parte degli organi di gestione'],
|
||||
['NIS2-20.2', 'nis2', 'Formazione obbligatoria per gli organi di gestione'],
|
||||
['NIS2-23.1', 'nis2', 'Notifica incidenti significativi al CSIRT (24h/72h/30gg)'],
|
||||
['NIS2-23.1', 'nis2', 'Notifica incidenti significativi al CSIRT (24h/72h/1 mese)'],
|
||||
];
|
||||
|
||||
foreach ($controls as [$code, $framework, $title]) {
|
||||
|
||||
@@ -1379,7 +1379,7 @@ class ServicesController extends BaseController
|
||||
'/api/services/incidents/feed' => [
|
||||
'get' => [
|
||||
'summary' => 'Incident feed Art.23',
|
||||
'description' => 'Feed incidenti con stato scadenze Art.23 (24h/72h/30d).',
|
||||
'description' => 'Feed incidenti con stato scadenze Art.23 (24h/72h/1 mese).',
|
||||
'parameters' => [
|
||||
['name' => 'status', 'in' => 'query', 'schema' => ['type' => 'string']],
|
||||
['name' => 'severity', 'in' => 'query', 'schema' => ['type' => 'string'], 'example' => 'high,critical'],
|
||||
@@ -2366,7 +2366,7 @@ class ServicesController extends BaseController
|
||||
$t = strtotime($detectedAt);
|
||||
$data['early_warning_due'] = date('Y-m-d H:i:s', $t + 24 * 3600);
|
||||
$data['notification_due'] = date('Y-m-d H:i:s', $t + 72 * 3600);
|
||||
$data['final_report_due'] = date('Y-m-d H:i:s', $t + 30 * 86400);
|
||||
$data['final_report_due'] = date('Y-m-d H:i:s', strtotime('+1 month', $t + 72 * 3600)); // 1 mese (calendario) dalla notifica 72h (Art.23.4 lett.d)
|
||||
}
|
||||
|
||||
// Insert resiliente: retry su collisione incident_code (random 6 cifre),
|
||||
|
||||
Reference in New Issue
Block a user