[DOCS] Contesto sessione: modulo Controlli periodici v1.23.0 (mig.057) + sync ticket

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
DevEnv nis2-agile
2026-06-17 09:26:06 +02:00
co-authored by Claude Opus 4.8
parent 4fdeae7cee
commit 1758074a06
2 changed files with 25 additions and 1 deletions
+24
View File
@@ -2,6 +2,30 @@
> Il 2026-05-29 ci sono state DUE sessioni: **pomeriggio** e **mattina** (TRPG). Il 2026-05-30 sessione lunga: gap competitivi P1/P2/P3 + connettori + review multi-agente + fix.
## 2026-06-17 (seguito) — 🟢 Modulo CONTROLLI PERIODICI (4° modulo ISO-readiness, §9.1/A.8.16) — v1.23.0, mig.057, commit `4fdeae7`
Richiesta utente: *"oltre al modulo audit un modulo controlli con frequenza e generazione nc o ac"* + *"fai analisi anche di questo modulo / documentati con altri esempi"* → analisi CCM (Continuous Control Monitoring, pattern Eramba/Drata/Vanta) in `docs/DESIGN_CONTROLLI_PERIODICI.md`. Memoria: [[project-iso-readiness-modules]] (punto D).
**Cosa fa**: registro dei controlli RICORRENTI (owner=ruolo organigramma, frequenza giornaliero..annuale o personalizzata in giorni, metodo, controllo SoA/NIS2 collegato) + **registro esecuzioni = EVIDENZA** (data/esito/note). La scadenza avanza ad ogni esecuzione; da esito **non conforme/parziale → genera NC o NC+azione correttiva** (riuso NCR/CAPA, nuova `source`='monitoring'). Scheda+storico stampabile; scadenze nel Calendario unico.
- **mig.057**: `periodic_controls` + `periodic_control_executions` (FK CASCADE, **UNIQUE (organization_id, code)**); ALTER `non_conformities.source` += 'monitoring'. **DDL autoritativa = seeder** `application/cli/seed_periodic_controls.php` (idempotente; il `.sql` è solo doc-record e NON ha lo UNIQUE).
- `PeriodicControlController` (slug `periodic-controls`) + `controlli-periodici.html` + `CalendarController::srcPeriodicControls` (type `periodic_control`).
**Costruito + verificato con FLOTTE** (richiesta "agenti al massimo"): build + **flotta di verifica avversariale (18 agenti, 5 dimensioni → skeptics per finding)** → 9 finding confermati, TUTTI corretti:
- **HIGH advance() overflow**: `strtotime('+1 month')` saltava febbraio (31/01→03/03) → riscritto con `DateTimeImmutable` + clamp ultimo giorno valido (mensile/trim/sem/annuale; gg/sett/custom invariati). Verificato in prod: 31/01→28/02, 30/11 trim→28/02, 29/02 bisestile annuale→28/02.
- **HIGH review_schedule sync mai implementato** → rimossa la cleanup morta in `delete()` (il calendario legge `periodic_controls` diretto, non usa review_schedule).
- **Pre-esistente sanato**: `CalendarController::srcReviewSchedule` faceva **doppia comparsa** di internal_audit/stakeholder_activity (già con sorgente diretta) → `entity_type NOT IN ('internal_audit','stakeholder_activity')`.
- Minori: retry-on-1062 sul codice CTL-NNN; `array_key_exists` per azzerare owner_role_id/next_due_date; TYPE_META `periodic_control` nel calendario (chip/label/colore).
- ⚠️ Residuo NON corretto (follow-up): `ManagementReviewController::nextCode()` stesso pattern MAX+1 senza UNIQUE (race low-sev).
**Smoke prod OK** (org 151, poi ripulita 0 residui): CRUD, esecuzione+avanzamento, NC/NC+AC, report 200, calendario; overflow date verificato; UNIQUE `uk_pctl_code` presente; azzeramento next_due via update.
**Routine di chiusura completata**: help.js + i18n IT/EN (già in build) + **KB SYSTEM uuid `70e850da`** + **email tester** (stile prodotto). Cache-buster `?v=20260631`, SW `nis2-shell-v1.23.0`. Deploy: seeder via SSH→`docker exec nis2-app php`, **reload `systemctl reload php8.4-fpm` host** (PROD = php-fpm host) + USR2 container. Commit+push diretto dal devenv. **Prossima mig = 058.**
> Inoltre 17/6: inviata a **Simon** mail di riepilogo chiusura Epic C (C1–C5 tutti LIVE; chiede conferma 92↔87 requisiti importanti + data esatta Det.ACN 333017/2025).
---
## 2026-06-17 — 🟢 ISO-readiness: 3 moduli LIVE (Audit interni §9.2 + Riesame Direzione §9.3 + Calendario scadenze) — v1.22.0, mig.055-056, commit `79ca72f`
Nati dalla **valutazione ISO 27001** per l'audit di Agile (checklist in `docs/Agile 27000/`, valutazione `docs/Agile 27000/VALUTAZIONE_COPERTURA_NIS2AGILE_vs_ISO27001.md`): mancavano gli output gestionali 9.2 e 9.3. Design: `docs/DESIGN_AUDIT_INTERNI_RIESAME_DIREZIONE.md`. Memoria: [[project-iso-readiness-modules]].