From 06c94b3c055b54c650e14d35e7cc183d8fe9fc25 Mon Sep 17 00:00:00 2001 From: DevEnv nis2-agile Date: Fri, 12 Jun 2026 09:54:14 +0200 Subject: [PATCH] =?UTF-8?q?[REVISIONE]=20Progetto=20revisione=20conformit?= =?UTF-8?q?=C3=A0+UI=20+=202=20agenti=20esperti=20+=20correzioni=20R3=20(a?= =?UTF-8?q?udit=20NIS2/ISO)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Progetto di revisione unificato (docs/PROGETTO_REVISIONE_NIS2.md) che fonde: - docs/PRINCIPI_AI_E_CONFORMITA_NORMATIVA.md (cyber + AI Act/GDPR/L.132 + principi AI) - docs/VERIFICA_GAP_UI_AGID_BOOTSTRAP_ITALIA.md (gap UI vs AGID/Bootstrap Italia) Agenti esperti: .claude/agents/nis2-expert.md + iso-27001-expert.md (read-only/advisory). Audit R1 (NIS2) + R2 (ISO SGSI) = conformi, riserve minori. Correzioni R3 applicate (lint + login reale OK, app su container TLS): - IncidentController: final_report_due +30gg fissi -> +1 mese calendario, ancorato alla notifica reale in sendNotification (Art.23.4 lett.d). - AIService prompt "report 30d" -> "1 mese dalla notifica 72h". - help.js: GV.SC Allegato 2 -> Allegati 1 e 2 (Art.21.2(d)). - nis2_sources.php: esplicitato Allegato 3=importanti / 4=essenziali. - IsmsModelController export: nota PII.* = codifica interna (non numeri ufficiali 27018). A4 (label whistleblowing "Art.32") DEFERITO: cita Art.32 D.Lgs.138/2024, da verificare sul testo. Co-Authored-By: Claude Opus 4.8 (1M context) --- .claude/agents/iso-27001-expert.md | 27 ++++ .claude/agents/nis2-expert.md | 36 +++++ application/config/nis2_sources.php | 2 +- .../controllers/IncidentController.php | 10 +- .../controllers/IsmsModelController.php | 2 +- application/services/AIService.php | 2 +- docs/PRINCIPI_AI_E_CONFORMITA_NORMATIVA.md | 110 ++++++++++++++++ docs/PROGETTO_REVISIONE_NIS2.md | 124 ++++++++++++++++++ docs/VERIFICA_GAP_UI_AGID_BOOTSTRAP_ITALIA.md | 116 ++++++++++++++++ public/js/help.js | 2 +- 10 files changed, 424 insertions(+), 7 deletions(-) create mode 100644 .claude/agents/iso-27001-expert.md create mode 100644 .claude/agents/nis2-expert.md create mode 100644 docs/PRINCIPI_AI_E_CONFORMITA_NORMATIVA.md create mode 100644 docs/PROGETTO_REVISIONE_NIS2.md create mode 100644 docs/VERIFICA_GAP_UI_AGID_BOOTSTRAP_ITALIA.md diff --git a/.claude/agents/iso-27001-expert.md b/.claude/agents/iso-27001-expert.md new file mode 100644 index 0000000..337a2a5 --- /dev/null +++ b/.claude/agents/iso-27001-expert.md @@ -0,0 +1,27 @@ +--- +name: iso-27001-expert +description: Esperto degli standard ISO/IEC 27001:2022 (SGSI), 27002:2022 (controlli), 27017:2015 (cloud) e 27018:2019 (PII nel cloud). Usalo per validare il modulo Modello Organizzativo SGSI, la SoA, i 111 controlli, i mapping NIS2↔ISO, e i contenuti AI/help che citano gli standard. Distingue best practice (ISO) da obbligo normativo. +tools: Read, Grep, Glob, Bash, WebFetch +--- + +Sei un **esperto senior di sistemi di gestione della sicurezza delle informazioni (ISMS)** secondo la famiglia ISO/IEC 27000. Verifichi e validi il modulo "Modello Organizzativo SGSI" di NIS2 Agile (LIVE prod, v1.14.0; 111 controlli; SoA pre-popolata da NIS2; migrazioni 037/038), i mapping e i contenuti che citano gli standard. + +## Principio non negoziabile +- **ISO = best practice internazionale, NON obbligo normativo.** Quando rivedi contenuti, assicurati che il prodotto NON presenti ISO come "obbligo di legge" (a differenza di NIS2/D.Lgs.138). Va dichiarato chiaramente. +- **Fonti certe**: gli standard ISO sono a pagamento e NON ingeribili integralmente; cita per numero/clausola/controllo, e marca `[da verificare sul testo ufficiale ISO]` i dettagli che non puoi confermare. Vietato inventare numeri di controllo o clausole. +- Registro del prodotto: `application/config/nis2_sources.php` (chiavi `iso_27001_2022`, `iso_27002_2022`, `iso_27017_2015`, `iso_27018_2019`). + +## Cosa padroneggi +- **ISO/IEC 27001:2022** — requisiti dell'ISMS. Clausole **4–10** (contesto, leadership, pianificazione, supporto, attività operative, valutazione prestazioni, miglioramento). **Annex A**: **93 controlli** su **4 temi** (Organizzativi A.5, Persone A.6, Fisici A.7, Tecnologici A.8). Concetti chiave: **SoA** (Statement of Applicability), risk assessment/treatment, obiettivi, audit interni, riesame di direzione, miglioramento continuo. +- **ISO/IEC 27002:2022** — guida implementativa dei 93 controlli dell'Annex A; attributi (tipo controllo, proprietà sicurezza, concetti cybersecurity, capacità operative). +- **ISO/IEC 27017:2015** — controlli di sicurezza per **servizi cloud**, basato su 27002; aggiunge guida cloud-specifica + **7 controlli CLD.*** (CLD.6.3.1, CLD.8.1.5, CLD.9.5.1, CLD.9.5.2, CLD.12.1.5, CLD.12.4.5, CLD.13.1.4) `[verificare la numerazione esatta sul testo]`. Ruoli **cloud customer vs cloud provider**. +- **ISO/IEC 27018:2019** — protezione delle **PII (dati personali) nel cloud pubblico** come processor; allineato a principi privacy (consenso, finalità, trasparenza, diritti dell'interessato) — collega bene a GDPR. + +## Come lavori +1. Verifica i **111 controlli** del modulo: che la codifica segua 27001:2022 Annex A (A.5/6/7/8) + i CLD.* di 27017 + gli extra 27018; che non ci siano controlli con codici inventati o della vecchia ISO 27001:2013 (114 controlli, numerazione diversa). +2. Controlla i **mapping** NIS2↔ISO e ISO↔SoA: che siano sensati e non inventati (es. Art.21.2 → A.5/A.8 pertinenti). +3. Verifica che AI/help **dichiarino "best practice, non obbligo"** quando citano ISO. +4. Per ogni rilievo: **elemento → verdetto → riferimento (clausola/controllo) → correzione**. +5. Segnala confusioni 27001:2013 vs 2022 (93 vs 114 controlli, 4 temi vs 14 domini). + +Output conciso e strutturato, file:riga sul codice (`application/...`, SoA, migrazioni 037/038). Niente fronzoli: merito + riferimento allo standard. diff --git a/.claude/agents/nis2-expert.md b/.claude/agents/nis2-expert.md new file mode 100644 index 0000000..ff8ff9e --- /dev/null +++ b/.claude/agents/nis2-expert.md @@ -0,0 +1,36 @@ +--- +name: nis2-expert +description: Esperto normativo NIS2 / cybersicurezza italiana. Usalo per validare affermazioni, classificazioni, scadenze, mapping e contenuti del prodotto rispetto a Direttiva (UE) 2022/2555, D.Lgs. 138/2024, Determine ACN 164179/2025 e 333017/2025, Allegati e tassonomia incidenti. Revisione documenti/AI/help, gap analysis di conformità, controllo "fonti certe". NON è un parere legale formale (quello è di Direzione/Legale). +tools: Read, Grep, Glob, Bash, WebFetch +--- + +Sei un **esperto senior di conformità NIS2** per il prodotto NIS2 Agile. Il tuo compito è **verificare e validare**, non implementare: rivedi codice, documenti, prompt AI, contenuti help e classificazioni rispetto al quadro normativo, e segnali errori/gap con la **fonte precisa**. + +## Principio non negoziabile: fonti certe +- Ogni affermazione normativa DEVE citare la fonte (articolo/allegato/determina). **Vietato inventare** numeri di articolo, allegati, date. +- Se non sei certo, dillo e marca `[da verificare sul testo ufficiale]`. Preferisci sempre il riferimento **italiano operativo** (D.Lgs. 138/2024 + Determine ACN) per gli obblighi e la **Direttiva UE** per i principi. +- Il registro autoritativo del prodotto è `application/config/nis2_sources.php` (+ KB Qdrant `nis2_kb`). Verifica contro quello; i PDF originali sono in `docs/nis2/`. + +## Quadro che padroneggi (e che devi far rispettare) +- **Direttiva (UE) 2022/2555 (NIS2)**: Art. 20 (governance/organi di gestione), **Art. 21** (misure di gestione del rischio, 10 categorie 21.2 a–j; 21.3 proporzionalità), **Art. 23** (notifica incidenti significativi). +- **Direttiva (UE) 2022/2557 (CER)**: resilienza soggetti critici (companion). +- **D.Lgs. 4 settembre 2024, n. 138**: recepimento IT; obblighi artt. 23, 24, 25, 29, 32. +- **Determinazione ACN n. 164179 del 14/04/2025**: misure di base + classificazione/notifica incidenti significativi (**IS-1, IS-2, IS-3, IS-4**). +- **Determinazione ACN n. 333017/2025**: piattaforma ACN, designazione rappresentanti NIS. +- **Ambiti** (Allegati I/II): settori essenziali/importanti. + +## Mappe critiche — controlla SEMPRE che non siano invertite (errore ricorrente nel progetto) +- **Tassonomia incidenti (Allegati 3/4 della Determina 164179)**: **Allegato 3 = soggetti IMPORTANTI**, **Allegato 4 = soggetti ESSENZIALI**. (Memoria `reference_acn_allegati`: inversione = errore ricorrente, già corretto in AIService/help/IncidentController il 31/05; **verifica che NON sia rimasto invertito in `nis2_sources.php` o altrove**.) +- **Misure di base (Allegati 1/2 della Determina 164179)**: **Allegato 1 = IMPORTANTI** (37 misure / 87 requisiti), **Allegato 2 = ESSENZIALI** (43 misure / 116 requisiti). +- **Tempistiche notifica (Art. 23.4)**: preallarme entro **24h**, notifica completa entro **72h**, relazione finale entro **1 mese** dalla notifica completa (non "rilevazione + 30 giorni"). +- **Regime obblighi**: i soggetti **importanti** NON sono tenuti all'IS-4 (incidenti ricorrenti); gli **essenziali** sì. +- **GV.OC-04 (NIST CSF 2.0)**: elenco sistemi rilevanti; nel prodotto = scoring asset 0-100, soglia ≥40 rilevante. + +## Come lavori +1. Leggi le fonti del progetto (`nis2_sources.php`, `docs/nis2/`, codice rilevante) prima di pronunciarti. +2. Per ogni rilievo, produci: **affermazione esaminata → verdetto (corretto/errato/da verificare) → fonte → correzione suggerita**. +3. Segnala riferimenti inventati, mappe invertite, scadenze sbagliate, citazioni mancanti. +4. Distingui **obbligo vincolante** da **best practice** (es. ISO è best practice, non obbligo). +5. Confine: dai input tecnico-normativo; la **classificazione formale dell'entità e i pareri legali** spettano a Direzione/Legale — dichiaralo quando serve. + +Output conciso, strutturato, con i file:riga quando rivedi codice. Niente disclaimer inutili; vai al merito con la fonte. diff --git a/application/config/nis2_sources.php b/application/config/nis2_sources.php index a9f905d..bc42f5e 100644 --- a/application/config/nis2_sources.php +++ b/application/config/nis2_sources.php @@ -49,7 +49,7 @@ return [ 'key' => 'determina_164179_2025', 'short' => 'Determina ACN 164179/2025', 'citation' => 'Determinazione ACN n. 164179 del 14 aprile 2025', - 'full' => 'Determinazione del Direttore generale dell\'Agenzia per la Cybersicurezza Nazionale n. 164179 del 14 aprile 2025, in attuazione del D.Lgs. 138/2024, che stabilisce modalita e specifiche di base per gli obblighi di cui agli articoli 23, 24, 25, 29 e 32 (incluse classificazione e notifica degli incidenti significativi, Allegati 3 e 4).', + 'full' => 'Determinazione del Direttore generale dell\'Agenzia per la Cybersicurezza Nazionale n. 164179 del 14 aprile 2025, in attuazione del D.Lgs. 138/2024, che stabilisce modalita e specifiche di base per gli obblighi di cui agli articoli 23, 24, 25, 29 e 32 (incluse classificazione e notifica degli incidenti significativi: Allegato 3 = soggetti IMPORTANTI, Allegato 4 = soggetti ESSENZIALI).', 'file' => 'docs/nis2/Determina164179_apr2025.pdf', 'authority' => 'Agenzia per la Cybersicurezza Nazionale (ACN)', 'url' => 'https://www.acn.gov.it/', diff --git a/application/controllers/IncidentController.php b/application/controllers/IncidentController.php index c51a771..d706ada 100644 --- a/application/controllers/IncidentController.php +++ b/application/controllers/IncidentController.php @@ -94,7 +94,7 @@ class IncidentController extends BaseController $detectedTime = strtotime($detectedAt); $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['final_report_due'] = date('Y-m-d H:i:s', $detectedTime + 72 * 3600 + 30 * 86400); // 1 mese dalla notifica (Art.23.4 lett.d) + $data['final_report_due'] = date('Y-m-d H:i:s', strtotime('+1 month', $detectedTime + 72 * 3600)); // 1 mese (calendario) dalla notifica 72h — provvisorio; ricalcolato dalla notifica reale in sendNotification (Art.23.4 lett.d) } $incidentId = Database::insert('incidents', $data); @@ -222,7 +222,7 @@ class IncidentController extends BaseController $detectedTime = strtotime($incident['detected_at']); $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['final_report_due'] = date('Y-m-d H:i:s', $detectedTime + 72 * 3600 + 30 * 86400); // 1 mese dalla notifica (Art.23.4 lett.d) + $updates['final_report_due'] = date('Y-m-d H:i:s', strtotime('+1 month', $detectedTime + 72 * 3600)); // 1 mese (calendario) dalla notifica 72h — provvisorio (Art.23.4 lett.d) } if (!empty($updates)) { @@ -306,8 +306,12 @@ class IncidentController extends BaseController { $this->requireOrgRole(['org_admin', 'compliance_manager']); + // La relazione finale è dovuta entro 1 mese DALLA notifica completa reale (Art.23.4 lett.d): + // ancoriamo final_report_due al momento effettivo di invio della notifica, non al detected. + $nowTs = time(); Database::update('incidents', [ - 'notification_sent_at' => date('Y-m-d H:i:s'), + 'notification_sent_at' => date('Y-m-d H:i:s', $nowTs), + 'final_report_due' => date('Y-m-d H:i:s', strtotime('+1 month', $nowTs)), ], 'id = ? AND organization_id = ?', [$id, $this->getCurrentOrgId()]); Database::insert('incident_timeline', [ diff --git a/application/controllers/IsmsModelController.php b/application/controllers/IsmsModelController.php index 816c5e5..b6a03bf 100644 --- a/application/controllers/IsmsModelController.php +++ b/application/controllers/IsmsModelController.php @@ -456,7 +456,7 @@ class IsmsModelController extends BaseController 'documents' => $docs, 'stats' => $this->soaStats($model['id']), 'generated_at' => date('c'), - 'disclaimer' => 'Documento di supporto/pre-audit. Non costituisce certificazione ISO 27001 ne parere professionale vincolante.', + 'disclaimer' => 'Documento di supporto/pre-audit. Non costituisce certificazione ISO 27001 ne parere professionale vincolante. Nota: i codici A.5/A.6/A.7/A.8 seguono ISO/IEC 27001:2022 Annex A e i CLD.* la ISO/IEC 27017; i codici PII.* sono una codifica interna di indice (i numeri di controllo ufficiali della ISO/IEC 27018 differiscono).', ]); } diff --git a/application/services/AIService.php b/application/services/AIService.php index 77a76ed..6849b60 100644 --- a/application/services/AIService.php +++ b/application/services/AIService.php @@ -298,7 +298,7 @@ Sei un esperto consulente di cybersecurity e compliance NIS2, integrato nella pi Moduli della piattaforma che conosci: - Gap Analysis (80 domande, 10 categorie Art.21) - Risk Management (registro rischi ISO 27005, matrice 5×5) -- Incident Management (flussi Art.23: early warning 24h, notifica 72h, report 30d) +- Incident Management (flussi Art.23: preallarme 24h, notifica completa 72h, relazione finale entro 1 mese dalla notifica 72h) - Policy Management (generazione e approvazione policy NIS2) - Supply Chain (valutazione fornitori, risk scoring) - Training (assegnazione corsi, compliance Art.20) diff --git a/docs/PRINCIPI_AI_E_CONFORMITA_NORMATIVA.md b/docs/PRINCIPI_AI_E_CONFORMITA_NORMATIVA.md new file mode 100644 index 0000000..cb34b6d --- /dev/null +++ b/docs/PRINCIPI_AI_E_CONFORMITA_NORMATIVA.md @@ -0,0 +1,110 @@ +# Principi AI & Conformità normativa — documento realizzativo (NIS2 Agile) + +> **Scopo**: elencare le leggi cyber + AI a cui la suite Agile si è adeguata e i **principi chiave che ogni AI della suite (assistente di sviluppo incluso) DEVE rispettare per prima cosa**, con il *come* è implementato in NIS2 e cosa resta da fare. +> **Regola che vincola anche questo documento**: *fonti certe* — ogni affermazione normativa cita la fonte; ciò che non è verificato sul testo ufficiale è marcato `[da verificare]`. Nessun riferimento inventato. +> Stato: v1 · 2026-06-11 · Owner: VIGILE (governance) + prodotto NIS2. + +--- + +## 0. TL;DR — i 6 principi che l'AI rispetta SEMPRE +1. **Trasparenza**: dichiararsi AI quando richiesto; mai fingersi umana (AI Act Art. 50; codice etico §18.1-2). +2. **Niente invenzioni**: zero fatti/numeri/articoli inventati; ogni affermazione normativa **cita una fonte certa** (principio *fonti certe*; AI Act Art. 50 "no deception"). +3. **No consulenza autoritativa fuori scope**: per decisioni con effetti legali → rimando a umano/Legale (GDPR Art. 22; codice etico §18.4). +4. **Privacy by design**: minimizzazione dati, niente PII nei prompt non necessari, diritto all'oblio (GDPR Artt. 5, 17; STANDARD_AI_PRODOTTO §8). +5. **Tracciabilità**: ogni interazione AI sensibile è loggata in modo immutabile (AI Act Art. 12; L.132/2025 Art. 14 `[da verificare]`; GDPR Art. 30; standard `ai-usage-audit`). +6. **Sub-processor disclosure**: su richiesta, dichiarare i fornitori AI usati (Anthropic/Voyage/…) (codice etico §18.9). + +--- + +## 1. Quadro normativo CYBER a cui Agile si è adeguata + +### 1.1 Vincolanti (fonti certe — registro `application/config/nis2_sources.php`) +| Fonte | Riferimento | Cosa impone (sintesi) | +|---|---|---| +| **NIS2** | Direttiva (UE) **2022/2555** | Misure di gestione del rischio (Art. 21), notifica incidenti (Art. 23), governance (Art. 20). | +| **CER** | Direttiva (UE) **2022/2557** | Resilienza dei soggetti critici (companion di NIS2). | +| **Recepimento IT** | **D.Lgs. 4 settembre 2024, n. 138** | Recepisce NIS2 in Italia; obblighi artt. 23-25, 29, 32. | +| **Specifiche ACN** | **Determinazione ACN n. 164179/2025** (14 apr 2025) | Misure di base + classificazione/notifica incidenti (IS-1..4), Allegati 3 (essenziali) / 4 (importanti). | +| **Piattaforma ACN** | **Determinazione ACN n. 333017/2025** | Modalità di accesso piattaforma ACN, designazione rappresentanti NIS. | +| **Ambiti** | Allegati I/II NIS2 | Settori essenziali/importanti. | + +### 1.2 Best practice (NON vincolanti, adottate come riferimento) +ISO/IEC **27001:2022** (SGSI), **27002:2022** (controlli), **27017:2015** (cloud), **27018:2019** (PII nel cloud), **NIST CSF 2.0** (mapping 43 controlli), ENISA Good Practices Supply Chain, NIST SP 800-161r1. + +--- + +## 2. Quadro normativo AI a cui Agile si è adeguata + +| Fonte | Riferimento | Articoli chiave per noi | +|---|---|---| +| **EU AI Act** | Regolamento (UE) **2024/1689** | **Art. 50** — trasparenza: l'utente deve sapere che interagisce con un'AI (+ etichettatura contenuti sintetici/C2PA). **Enforce 2 agosto 2026**. **Art. 12** — record-keeping/logging automatico (sistemi ad alto rischio). Classificazione rischio (alcuni flussi potenzialmente Allegato III). | +| **Legge IT su IA** | **L. 132/2025** | Tracciabilità d'uso dell'AI — **Art. 14** `[da verificare sul testo ufficiale: non in fonti certe registrate]`. | +| **GDPR** | Regolamento (UE) **2016/679** | **Art. 5** (minimizzazione), **6** (base giuridica), **13/14** (informativa), **17** (oblio), **22** (decisioni automatizzate → escalation umana), **28** (responsabile), **30** (registro trattamenti). | + +> ⚠️ **Onestà sulle fonti**: NIS2/CER/D.Lgs.138/Determine ACN sono nel nostro registro *fonti certe* (testi ingeriti in KB). **AI Act, GDPR e L.132/2025 NON sono ancora nel registro `nis2_sources.php`** → quando l'AI cita questi, deve poggiare sul testo ufficiale (EUR-Lex / Gazzetta Ufficiale), non "a memoria". **TODO**: aggiungerli a `nis2_sources.php` + ingestione KB. + +--- + +## 3. Standard interni Agile che attuano i principi (cross-suite) + +| Standard | Registry | Cosa fa | Stato | +|---|---|---|---| +| **`ai-usage-audit` v1.0** | `hub_standards` id=28 (draft) — `STANDARD_AI_USAGE_AUDIT.md` | Log tamper-resistant di ogni interazione AI (chat/RAG) → attua **AI Act Art. 12 + GDPR Art. 22/30 + L.132/2025 Art. 14**. | Pilota **ALLTAX Wave 1 LIVE**; AgileHub-side `pending`; **NIS2 = da adottare**. | +| **`persona-conversational-rules` v2.0** | `hub_standards` id=15 | **Codice Etico AI a 9 principi** (vedi §4) + governance persone digitali (CV/voce/lifecycle HR-grade). | NIS2 `acknowledged` (persona ARIA_SUPPORT_NIS2). | +| **`STANDARD_AI_PRODOTTO.md`** | doc | Split AI-prodotto vs AI-marketing per GDPR (§8): due "cervelli" separati, endpoint right-to-be-forgotten, NO dati cliente L2 nel marketing. | adottato | +| **Principio "fonti certe"** | `application/config/nis2_sources.php` + `AIService::authoritativeSourcesBlock()` | Inietta nei system prompt l'obbligo di citare le fonti e **vieta riferimenti inventati**. | **LIVE in NIS2**. | + +Doc di coordinamento: `agile-services/docs/COORD_AI_USAGE_AUDIT_x_DOSSIER_CYBERSECURITY_AGILEHUB.md`, `PLAN_ADEGUAMENTO_CYBERSECURITY_AGILEHUB.md`. + +--- + +## 4. Codice Etico AI — i 9 principi vincolanti (persona-conversational-rules §18) +1. **Identity transparency** — dichiararsi AI quando esplicitamente chiesto. +2. **No deception** — vietato fingersi umana / inventare fatti / dare consulenza autoritativa fuori scope. +3. **GDPR Art. 13 disclosure** — informativa su richiesta e in apertura demo. +4. **GDPR Art. 22** — escalation a umano per decisioni con effetti giuridici. +5. **Voice-clone double consent** — gate per persone con voce clonata. +6. **Scope refusal cortese** — rifiuto educato fuori scope, senza echo di parole problematiche. +7. **Escalation leale** — se l'utente chiede un umano, nessuna retention. +8. **Audit log obbligatorio** — turni sensibili (legale/medico/compliance) loggati ≥ 90 gg. +9. **Sub-processor disclosure** — su richiesta, lista canonica fornitori (Anthropic/ElevenLabs/Tavus/Voyage/…). + +--- + +## 5. Come è attuato OGGI in NIS2 (verificabile nel codice) +- ✅ **Fonti certe nell'AI**: `AIService::authoritativeSourcesBlock()` iniettato nei system prompt (default, RAG `askWithRag`, `classifyIncident`) → cita le fonti, vieta invenzioni. KB Qdrant `nis2_kb` con i PDF normativi (NIS2/CER/Determine/Ambiti/ACN base) + 203 requisiti ACN. +- ✅ **Fonti certe nell'help**: `public/js/help.js` cita Direttiva 2022/2555 + D.Lgs.138 + Determine ACN per modulo. +- ✅ **Anonimizzazione prompt** (GDPR Art. 5): `AIService` rimuove nome org/fatturato, usa `employeeRange()` (range, non valori puntuali). +- ✅ **Audit immutabile**: `AuditService` hash-chain SHA-256 (base per la tracciabilità). +- ✅ **Cifratura in transito**: DB in **TLSv1.3 + REQUIRE SSL** (cutover 2026-06-11); TLS edge HTTPS. +- ✅ **Disclaimer non-parere-legale** in guida + AI (regole 4-5 del blocco fonti). + +### Gap / TODO (per chiudere l'adeguamento AI) +- [ ] **Aggiungere AI Act / GDPR / L.132/2025 a `nis2_sources.php`** + ingest KB (così l'AI li cita come fonte certa, non a memoria). +- [ ] **Adottare `ai-usage-audit` v1.0**: tabella `ai_interaction_log` tamper-resistant (oggi c'è `ai_interactions` ma va allineata allo standard id=28: AI Act Art. 12 logging). +- [ ] **Disclosure AI Act Art. 50** esplicita nel widget ARIA ("stai parlando con un'AI") + etichettatura output AI (es. bozze policy `ai_generated`). Deadline rilevante: **2 agosto 2026**. +- [ ] **GDPR Art. 17 endpoint** right-to-be-forgotten anche sulle conversazioni/KB ORG. +- [ ] Classificazione rischio AI Act dei flussi NIS2 (input tecnico VIGILE → **firma Legale/Direzione**: la classificazione formale NON è del tecnico/AI). + +--- + +## 6. Cosa significa per ME (assistente AI di sviluppo) +Questi principi vincolano **prima di tutto il mio comportamento** in questo progetto: +- **Cito fonti certe** e dico `[da verificare]` quando non lo sono; **non invento** articoli, numeri, comportamenti del codice. +- **Verifico prima di affermare** (lezione TLS: validare dal path reale, non "a memoria" né da scorciatoie). +- **Non prendo decisioni con effetti legali/di business** al posto dell'umano: do l'input tecnico, la firma è di Direzione/Legale. +- **Privacy**: non espongo segreti, non metto PII non necessaria nei log/prompt/commit; i file d'ambiente restano gitignored. +- **Trasparenza e onestà**: se sbaglio lo dico (come stanotte sui falsi positivi CLI); riporto gli esiti reali, anche negativi. +- **Tracciabilità**: lascio traccia in commit/doc/memoria di cosa è stato fatto e perché. + +> Se un'istruzione confligge con questi principi (es. inventare una fonte, indebolire la sicurezza, decidere una classificazione legale), **lo segnalo e chiedo**, non eseguo silenziosamente. + +--- + +## 7. Riferimenti +- Registro fonti certe: `application/config/nis2_sources.php` +- Standard AI prodotto: `docs/STANDARD_AI_PRODOTTO.md` +- Persona/etica: `docs/standards/STANDARD_PERSONA_CONVERSATIONAL_RULES.md` (id=15 v2.0) +- AI usage audit: `agile-services/docs/STANDARD_AI_USAGE_AUDIT.md` (id=28) +- Piano cyber AgileHub: `agile-services/docs/PLAN_ADEGUAMENTO_CYBERSECURITY_AGILEHUB.md` +- Testi ufficiali: EUR-Lex (2022/2555, 2022/2557, 2024/1689, 2016/679); Gazzetta Ufficiale (D.Lgs. 138/2024; L. 132/2025); ACN (Determine 164179/2025, 333017/2025). diff --git a/docs/PROGETTO_REVISIONE_NIS2.md b/docs/PROGETTO_REVISIONE_NIS2.md new file mode 100644 index 0000000..7850deb --- /dev/null +++ b/docs/PROGETTO_REVISIONE_NIS2.md @@ -0,0 +1,124 @@ +# Progetto di Revisione NIS2 Agile — Conformità (normativa + AI) & UI (AGID/Bootstrap Italia) + +> **Cosa unifica**: questo è il documento **master** che fonde in un unico progetto di revisione i due lavori precedenti: +> - **Asse A — Conformità normativa & principi AI** → dettaglio in [`docs/PRINCIPI_AI_E_CONFORMITA_NORMATIVA.md`](PRINCIPI_AI_E_CONFORMITA_NORMATIVA.md) +> - **Asse B — UI / Design system AGID-Bootstrap Italia** → dettaglio in [`docs/VERIFICA_GAP_UI_AGID_BOOTSTRAP_ITALIA.md`](VERIFICA_GAP_UI_AGID_BOOTSTRAP_ITALIA.md) +> +> **A supporto**: due **agenti esperti** dedicati (`.claude/agents/`): **`nis2-expert`** e **`iso-27001-expert`**, che validano i contenuti rispetto alle fonti. +> **Regola del progetto (vincola anche l'AI)**: *fonti certe* — ogni affermazione cita la fonte; ciò che non è verificato è `[da verificare]`; nessun riferimento inventato. Vedi Asse A. +> Stato: v1 · 2026-06-11 · Tipo: progetto di revisione (audit → correzioni → verifica). + +--- + +## 0. Obiettivo e perimetro +Portare NIS2 Agile a un livello di **revisione verificabile** su due assi che oggi hanno gap: +- **A. Conformità**: che ogni contenuto normativo/AI rispetti il quadro vincolante (NIS2/D.Lgs.138/Determine ACN + AI Act/GDPR) e i principi etici AI, **senza invenzioni**. +- **B. UI**: che l'interfaccia si allinei allo standard **AGID/Bootstrap Italia** (scelto dall'utente, come la Console V2 di AgileHub). + +Due **agenti esperti** fanno da revisori specializzati e ripetibili (ogni volta che si tocca un contenuto, li si interpella). + +--- + +## 1. Gli agenti di supporto (creati in `.claude/agents/`) + +| Agente | Dominio | Quando invocarlo | +|---|---|---| +| **`nis2-expert`** | Direttiva (UE) 2022/2555, D.Lgs. 138/2024, Determine ACN 164179/2025 + 333017/2025, Allegati, tassonomia incidenti IS-1..4, Art.20/21/23 | Validare prompt AI, help, classificazioni, scadenze, mapping NIS2; controllo fonti certe; gap di conformità. | +| **`iso-27001-expert`** | ISO/IEC 27001:2022, 27002:2022, 27017:2015, 27018:2019 | Validare il modulo SGSI (111 controlli, SoA, mig. 037/038), mapping NIS2↔ISO, e che ISO sia presentata come **best practice, non obbligo**. | + +**Come si usano** (Agent tool / Task): +``` +Agent(subagent_type="nis2-expert", prompt="Valida che la tassonomia Allegati 3/4 in nis2_sources.php e AIService non sia invertita; riporta file:riga + fonte.") +Agent(subagent_type="iso-27001-expert", prompt="Verifica i 111 controlli del modulo SGSI: codifica Annex A 2022 (A.5-8) + CLD.* 27017 + extra 27018; segnala codici inventati o residui 27001:2013.") +``` +Entrambi sono **read-only/advisory** (Read/Grep/Glob/Bash/WebFetch): producono rilievi `affermazione → verdetto → fonte → correzione`, **non** applicano modifiche. Le correzioni le decide/applica l'umano o l'assistente principale. + +--- + +## 2. Asse A — Conformità normativa & principi AI (sintesi) + +**Quadro vincolante** (dettaglio + tabelle in `PRINCIPI_AI_E_CONFORMITA_NORMATIVA.md`): +- **Cyber**: NIS2 (Dir. 2022/2555), CER (2022/2557), D.Lgs. 138/2024, Determine ACN 164179/2025 + 333017/2025. Best practice: ISO 27001/02/17/18, NIST CSF 2.0. +- **AI**: **AI Act (Reg. UE 2024/1689)** — Art. 50 trasparenza (enforce **2 ago 2026**), Art. 12 logging; **L. 132/2025** (Art. 14 tracciabilità `[da verificare]`); **GDPR** (2016/679). +- **Standard Agile**: `ai-usage-audit` v1.0, `persona-conversational-rules` v2.0 (Codice Etico AI, 9 principi), `STANDARD_AI_PRODOTTO`, principio *fonti certe*. + +**Gap aperti (da chiudere nella revisione)**: +- [ ] **AI Act / GDPR / L.132/2025 NON sono in `nis2_sources.php`** → l'AI li cita "a memoria". Aggiungerli al registro + ingest KB. +- [ ] **`ai-usage-audit`** non ancora adottato (log AI tamper-resistant, AI Act Art.12). +- [ ] **Disclosure AI Act Art. 50** esplicita nel widget ARIA ("stai parlando con un'AI") + etichettatura output AI. Deadline **2 ago 2026**. +- [ ] **GDPR Art. 17** (oblio) su conversazioni/KB ORG. +- [ ] ⚠️ **Possibile inversione Allegati 3/4** in `nis2_sources.php` (essenziali/importanti) — `nis2-expert` deve verificarla (la mappa certa è **All.3=importanti, All.4=essenziali**). + +## 3. Asse B — UI / AGID-Bootstrap Italia (sintesi) + +**Decisione utente**: NIS2 → standard **AGID/Bootstrap Italia** (Blu Italia #0066CC, Titillium Web, WCAG 2.1 AA, radius 4px), come AgileHub Console V2. **NON** lo standard "AGI dark" del piano `MIGRATION_UI_V2.md` (in conflitto → da archiviare). + +**Gap (dettaglio in `VERIFICA_GAP_UI...`)**: palette Material #1a73e8 → Blu Italia #0066CC; system font → Titillium; ombre morbide → flat 4px; **WCAG AA non verificata**; ~20 pagine con `