
DevEnv nis2-agileandClaude Opus 4.8
4fdeae7cee
[FEAT] Modulo Controlli periodici (control monitoring §9.1/A.8.16) — v1.23.0
Registro controlli ricorrenti (owner/frequenza/metodo/controllo SoA-NIS2 collegato)
+ registro esecuzioni come EVIDENZA (data/esito/note) con avanzamento automatico
della scadenza; da esito non conforme generazione NC o NC+azione correttiva
(riuso non_conformities/capa_actions, nuova source 'monitoring'); report
scheda+storico stampabile; scadenze nel Calendario unico.
mig.057: periodic_controls + periodic_control_executions (FK CASCADE, UNIQUE
(organization_id, code)). PeriodicControlController (slug periodic-controls) +
controlli-periodici.html + CalendarController.srcPeriodicControls.
Fix da flotta di verifica avversariale (9 finding confermati):
- advance(): correzione overflow strtotime '+1 month' (31/01 -> 28/02, no salto
mese) via DateTimeImmutable con clamp all'ultimo giorno valido (mensile/
trimestrale/semestrale/annuale); giornaliero/settimanale/custom invariati.
- create(): retry-on-duplicate del codice CTL-NNN con UNIQUE (org_id, code).
- update(): array_key_exists per azzerare owner_role_id / next_due_date.
- delete(): rimossa cleanup morta su review_schedule (il calendario legge diretto).
- CalendarController.srcReviewSchedule: esclude internal_audit/stakeholder_activity
(gia' con sorgente diretta) -> fix doppia comparsa nel calendario.
- calendario.html: TYPE_META 'periodic_control' (chip filtro + label + colore).
Additivo. Cache-buster ?v= bump (sidebar) + sw cache nis2-shell-v1.23.0.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 09:21:03 +02:00
..
2026-06-17 06:49:48 +02:00
2026-03-07 14:07:10 +01:00
2026-03-07 16:37:14 +01:00
2026-06-13 08:51:17 +02:00
2026-03-07 16:05:18 +01:00
2026-06-12 14:46:37 +02:00
2026-06-12 18:50:19 +02:00
2026-06-15 16:51:53 +02:00
2026-03-10 11:01:13 +01:00
2026-06-16 17:29:08 +02:00
2026-06-17 09:21:03 +02:00
2026-05-29 15:41:54 +02:00
2026-05-31 11:14:33 +02:00
2026-03-09 08:05:36 +01:00
2026-06-01 11:57:37 +02:00
2026-06-17 07:52:28 +02:00
2026-06-17 06:18:18 +02:00
2026-06-13 13:03:01 +02:00
2026-06-17 07:52:28 +02:00
2026-02-18 17:21:57 +01:00
2026-06-12 18:50:19 +02:00
2026-06-11 11:32:42 +02:00
2026-06-15 16:51:53 +02:00
2026-06-15 23:12:24 +02:00
2026-06-17 06:59:29 +02:00
2026-06-17 08:19:15 +02:00
2026-05-31 09:53:07 +02:00
2026-05-30 09:52:21 +02:00
2026-05-29 13:18:35 +02:00
2026-06-16 20:18:51 +02:00
2026-05-30 09:17:17 +02:00
2026-05-31 17:10:34 +02:00
2026-05-31 10:35:37 +02:00
2026-05-31 11:29:06 +02:00
2026-06-13 10:33:59 +02:00
2026-06-13 09:41:22 +02:00
2026-06-14 14:08:19 +02:00
2026-06-16 23:59:28 +02:00
2026-06-11 18:19:54 +02:00
2026-06-14 16:35:41 +02:00
2026-06-15 15:27:07 +02:00
2026-06-17 09:21:03 +02:00
2026-06-13 10:36:09 +02:00
2026-06-16 23:37:40 +02:00
2026-06-12 09:54:14 +02:00
2026-06-12 09:54:14 +02:00
2026-06-12 13:31:53 +02:00
2026-05-29 15:41:54 +02:00
2026-05-29 15:41:54 +02:00
2026-05-29 15:41:54 +02:00
2026-05-29 15:41:54 +02:00
2026-05-29 15:41:54 +02:00
2026-06-11 11:32:42 +02:00
2026-06-11 10:10:22 +02:00
2026-06-12 09:54:14 +02:00