
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-02-17 17:50:18 +01:00
2026-02-17 19:12:46 +01:00
2026-02-18 08:12:57 +01:00
2026-02-18 08:12:57 +01:00
2026-02-20 08:53:30 +01:00
2026-02-20 12:08:44 +01:00
2026-03-07 13:22:08 +01:00
2026-03-07 13:22:08 +01:00
2026-03-07 13:22:08 +01:00
2026-03-07 13:56:53 +01:00
2026-03-07 15:02:11 +01:00
2026-05-29 15:44:13 +02:00
2026-03-07 15:22:25 +01:00
2026-05-29 15:44:13 +02:00
2026-03-07 16:48:53 +01:00
2026-03-10 08:51:52 +01:00
2026-05-29 13:18:35 +02:00
2026-05-29 13:18:35 +02:00
2026-05-29 13:18:35 +02:00
2026-05-29 13:18:35 +02:00
2026-05-29 13:18:35 +02:00
2026-05-29 17:15:13 +02:00
2026-05-29 17:15:13 +02:00
2026-05-29 17:15:13 +02:00
2026-05-30 08:41:57 +02:00
2026-05-30 08:55:26 +02:00
2026-05-30 09:14:12 +02:00
2026-05-30 09:25:46 +02:00
2026-05-30 10:19:01 +02:00
2026-05-30 10:20:59 +02:00
2026-05-30 10:51:44 +02:00
2026-05-30 11:39:38 +02:00
2026-05-31 08:07:38 +02:00
2026-05-31 11:16:43 +02:00
2026-05-31 11:16:43 +02:00
2026-05-31 09:53:07 +02:00
2026-05-31 09:53:07 +02:00
2026-06-01 08:02:59 +02:00
2026-06-11 11:32:42 +02:00
2026-06-11 11:32:42 +02:00
2026-06-14 16:35:41 +02:00
2026-06-12 18:15:37 +02:00
2026-06-15 16:56:56 +02:00
2026-06-15 18:05:56 +02:00
2026-06-15 19:01:32 +02:00
2026-06-15 22:44:08 +02:00
2026-06-15 23:10:28 +02:00
2026-06-15 23:10:28 +02:00
2026-06-16 17:07:12 +02:00
2026-06-16 17:41:16 +02:00
2026-06-16 18:18:28 +02:00
2026-06-16 19:24:29 +02:00
2026-06-16 19:59:35 +02:00
2026-06-16 20:54:57 +02:00
2026-06-16 22:12:11 +02:00
2026-06-16 22:20:14 +02:00
2026-06-16 22:52:31 +02:00
2026-06-17 07:48:49 +02:00
2026-06-17 07:48:49 +02:00
2026-06-17 09:21:03 +02:00
2026-03-07 16:48:53 +01:00
2026-03-09 09:51:40 +01:00
2026-05-29 15:42:05 +02:00