[AI+HELP+I18N] Help workflow, traduzioni IT/EN, schema 5 livelli AI

- help.js: aggiunta sezione workflow (Compliance Journey) + pageMap entry
- i18n.js: 16 chiavi IT/EN per workflow (fasi, stati, etichette)
- docs/AI_LEVELS_SCHEMA.md: schema architettura 5 livelli AI con privacy matrix
  L1 Guida (safe), L2 Operativo, L3 Aziendale (anonimizzato), L4 Cross-Org (k-anonymity), L5 Normativo

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
DevEnv nis2-agile 2026-03-09 08:05:36 +01:00
parent 3e8f24eb49
commit 89fd201bc2
3 changed files with 307 additions and 1 deletions

224
docs/AI_LEVELS_SCHEMA.md Normal file
View File

@ -0,0 +1,224 @@
# Schema Livelli AI — NIS2 Agile
> Versione 1.0 — 2026-03-09
> Documento di architettura per l'evoluzione dell'integrazione AI nella piattaforma
---
## Overview
La piattaforma NIS2 Agile prevede 5 livelli progressivi di assistenza AI, ciascuno con un perimetro di conoscenza, accesso ai dati e vincoli di privacy distinti.
```
L1 Guida Piattaforma → Dati: nessuno → Tutti
L2 Assistente Operativo → Dati: sessione corrente → Tutti
L3 Assistente Aziendale → Dati: org corrente → Org-scoped
L4 Analisi Cross-Org → Dati: org multiple → Consultant / Super Admin
L5 Feed Normativo AI → Dati: pubblici/ACN → Tutti
```
---
## L1 — Guida Piattaforma
**"Cosa fa questa funzione?"**
### Scopo
Spiegare le funzionalità del software NIS2 Agile: come usare ogni modulo, cosa significano i campi, come interpretare i risultati.
### Dati in ingresso al modello
- Pagina corrente (es. `risks.html`)
- Domanda dell'utente
- **Nessun dato aziendale** — il prompt non include mai dati dell'organizzazione
### Perimetro risposta AI
- Spiegare interfaccia, workflow, pulsanti, campi
- Spiegare la normativa NIS2 in termini generali
- Non può rispondere su dati specifici dell'organizzazione
### Implementazione attuale
`HelpSystem` in `help.js` — già implementato (modale contestuale per pagina)
**Evoluzione**: aggiungere chat testuale basata su Claude API con contesto solo documentazione piattaforma
### Privacy
**Nessun rischio** — zero dati personali o aziendali nel prompt
---
## L2 — Assistente Operativo
**"Come faccio a...?"**
### Scopo
Guidare l'utente nell'esecuzione di operazioni specifiche: "come compilo l'assessment?", "come classifico questo rischio?", "cosa devo scrivere nel campo X?".
### Dati in ingresso al modello
- Pagina corrente + stato del form (campo attivo, errori)
- Domanda dell'utente
- **Solo dati minimi di contesto** (es. "stai compilando il campo 'impatto' di un rischio")
- **No PII, no dati sensibili** dell'organizzazione
### Perimetro risposta AI
- Istruzioni operative step-by-step
- Suggerimenti contestuali sul campo corrente
- Best practice NIS2 per il dato che si sta inserendo
### Implementazione
**Da costruire**: chat widget flottante attivabile per pagina
→ Prompt di sistema: documentazione operativa + pagina corrente
→ Modello suggerito: `claude-haiku-4-5` (economico, bassa latenza)
### Privacy
**Rischio basso** — includere solo tipo di form/campo, mai i valori inseriti
---
## L3 — Assistente Aziendale
**"Come siamo messi noi?"**
### Scopo
Rispondere a domande sui dati reali dell'organizzazione corrente: "quali sono i nostri rischi critici?", "cosa manca per completare il gap assessment?", "quali policy non sono ancora approvate?".
### Dati in ingresso al modello
- Dati aggregati dell'organizzazione corrente (stesso multi-tenancy JWT)
- Gap assessment: punteggi per categoria
- Risk register: numero e livelli rischi, trattamenti
- Policy: stato approvazione
- Training: % completamento
- **Dati anonimizzati**: nomi persone → ruoli, fatturato → range, nome org → settore+dimensione
### Perimetro risposta AI
- Analisi dello stato di compliance specifico dell'org
- Priorità di intervento personalizzate
- Raccomandazioni basate sui gap reali
- Previsioni di rischio
### Implementazione attuale parziale
`AIService.php``analyzeGapAssessment()`, `suggestRisks()`, `generatePolicy()`, `classifyIncident()` già implementati
**Evoluzione**: aggiungere endpoint conversazionale `/api/ai/chat` con contesto org anonimizzato
### Anonimizzazione applicata (già in AIService.php)
```php
// Già implementato:
- employeeRange(): dipendenti → range (micro/piccola/media/grande)
- settore → codice ATECO, NON nome azienda
- NO nome organizzazione nel prompt
- NO fatturato esatto (solo range)
- NO nomi di persone
```
### Privacy
⚠️ **Attenzione moderata**
- Dati limitati all'org dell'utente autenticato (multi-tenancy garantito da `requireOrgAccess()`)
- Anonimizzazione obbligatoria prima dell'invio ad Anthropic
- Log AI interaction in `ai_interactions` table per audit
- **GDPR**: dati inviati a Anthropic USA → DPA Agreement necessario (verificare contratto)
---
## L4 — Analisi Cross-Organizzazione
**"Come si confrontano i miei clienti?"**
### Scopo
Permettere a consulenti, CISO multi-cliente e super_admin di analizzare pattern, benchmark e confronti **aggregati e anonimi** tra organizzazioni diverse.
**Esempi di query valide:**
- "Qual è il gap medio nel settore sanità tra i miei clienti?"
- "Quali rischi sono più frequenti nelle PMI del settore energia?"
- "Benchmark: come si posiziona questo cliente rispetto agli altri?"
### Ruoli autorizzati
- `consultant` — solo le org di cui è membro (`user_organizations`)
- `super_admin` — tutte le org della piattaforma
### Dati in ingresso al modello
- **AGGREGATI**: medie, percentuali, distribuzioni — mai dati di singola org
- **ANONIMI**: organizzazioni identificate come "Org A", "Org B" — mai nome reale
- Settore e dimensione: consentiti (non identificativi singolarmente)
- **VIETATO**: nome org, P.IVA, referenti, incidenti specifici, dati PII
### Regola fondamentale
> **Un consulente NON deve mai poter ricostruire i dati di un'organizzazione specifica attraverso l'AI. Solo aggregati.**
### Implementazione
**Da costruire**: `AIService::crossOrgAnalysis()` con:
- Query aggregata su DB (GROUP BY settore/dimensione)
- Anonimizzazione labels prima del prompt
- Filtro ruolo in `requireOrgAccess()` — verifica membership consultant
- Endpoint: `POST /api/ai/cross-analysis` (solo `consultant`, `super_admin`)
### Privacy — CRITICO
🔴 **Alto rischio — implementare con cura**
- MAI passare org_id nel prompt
- MAI passare nomi, P.IVA, email nel prompt
- Aggregazione minima: almeno 3 organizzazioni per gruppo (k-anonymity)
- Audit log obbligatorio di ogni query cross-org (chi ha chiesto cosa, quando)
- **Consenso**: verificare se GDPR richiede consenso esplicito per analisi comparativa
- Il modello deve rispondere SOLO in forma aggregata — aggiungere istruzione nel system prompt:
> "Non fornire mai dati riferibili a una singola organizzazione. Rispondi solo con statistiche aggregate."
---
## L5 — Feed Normativo AI
**"Cosa cambia con la nuova circolare ACN?"**
### Scopo
Aggiornamenti normativi automatici e analisi dell'impatto sulle organizzazioni: nuove circolari ACN, aggiornamenti DORA, modifiche D.Lgs. 138/2024, sentenze rilevanti.
### Dati in ingresso al modello
- Testo normativo (fonte pubblica: GU, ACN, EUR-Lex)
- Classificazione dell'organizzazione corrente (Essenziale/Importante/settore)
- **No dati interni** dell'organizzazione
### Perimetro risposta AI
- Riepilogo delle novità normative in linguaggio semplice
- Impatto specifico per tipo di soggetto NIS2 (Essenziale vs Importante)
- Scadenze e obblighi derivanti dall'aggiornamento
- Collegamento ai moduli della piattaforma da aggiornare
### Implementazione attuale
`NormativeController.php` — feed già implementato con ACK tracciato
**Evoluzione**: aggiungere `AIService::analyzeNormativeUpdate()` che:
- Riceve il testo normativo
- Genera riassunto + impatto per la classificazione dell'org
- Suggerisce i controlli/policy da aggiornare
### Privacy
**Nessun rischio significativo** — dati normativi pubblici + solo classificazione org (non identificativa)
---
## Matrice Riepilogativa
| Livello | Chi | Dati AI | Privacy | Stato |
|---------|-----|---------|---------|-------|
| **L1** Guida Piattaforma | Tutti | Nessuno | ✅ Safe | ✅ Implementato (help.js) |
| **L2** Assistente Operativo | Tutti | Contesto UI | ✅ Safe | 🔵 Da costruire |
| **L3** Assistente Aziendale | Utenti org | Dati org anonimizzati | ⚠️ Attenzione | ✅ Parziale (AIService) |
| **L4** Cross-Org Analysis | Consultant / Admin | Aggregati anonimi | 🔴 Alto | 🔵 Da costruire |
| **L5** Feed Normativo | Tutti | Testi pubblici | ✅ Safe | 🔵 Evoluzione normative |
---
## Principi Privacy Trasversali
1. **Data Minimization**: inviare ad Anthropic solo il minimo indispensabile
2. **Anonimizzazione sistematica**: nomi → ruoli, fatturati → range, org → settore+dim
3. **Audit trail**: ogni chiamata AI loggata in `ai_interactions` con timestamp, user, tipo
4. **Scope enforcement**: il layer PHP verifica sempre `requireOrgAccess()` prima di costruire il prompt
5. **No PII in prompt**: vietato nome persona, email, CF, P.IVA nel prompt
6. **K-anonymity per L4**: aggregare su minimo 3 org per evitare identificazione indiretta
7. **DPA Anthropic**: verificare Data Processing Agreement per trattamento dati EU
---
## Prossimi Sprint Suggeriti
| Priorità | Feature | Livello | Effort |
|----------|---------|---------|--------|
| Alta | Chat widget contestuale per pagina | L2 | 3 giorni |
| Alta | `POST /api/ai/chat` con contesto org | L3 | 2 giorni |
| Media | `analyzeNormativeUpdate()` per feed ACN | L5 | 1 giorno |
| Bassa | Cross-org benchmark per consultant | L4 | 5 giorni |
---
*Documento mantenuto da: Claude Code / Team NIS2 Agile*
*Aggiornare a ogni modifica architettura AI o normativa privacy*

View File

@ -502,6 +502,67 @@ const HelpSystem = (function () {
'Allegato II - Altri settori critici',
'Art. 20 - Governance'
]
},
// ─── Compliance Journey / Workflow ───────────────────────────
'workflow': {
title: 'Guida - Compliance Journey',
intro: 'La pagina Compliance Journey visualizza l\'intero percorso di conformita\' NIS2 come una roadmap interattiva a 6 fasi. Mostra lo stato reale di ogni modulo con dati live, guida verso la prossima azione da completare e permette di navigare direttamente a ciascun modulo.',
sections: [
{
heading: 'Roadmap a 6 Fasi',
items: [
'<strong>Fase 1 - Preparazione</strong>: onboarding, configurazione organizzazione, definizione team e ruoli.',
'<strong>Fase 2 - Valutazione</strong>: gap assessment Art.21 (80 domande), inventario asset, valutazione supply chain.',
'<strong>Fase 3 - Rischi</strong>: risk register, piano di trattamento, suggerimenti AI per settore.',
'<strong>Fase 4 - Implementazione</strong>: policy approvate, formazione completata, controlli ISO 27001 implementati.',
'<strong>Fase 5 - Monitoraggio</strong>: gestione incidenti Art.23, NCR/CAPA, aggiornamenti normativi, whistleblowing.',
'<strong>Fase 6 - Reportistica</strong>: report esecutivo, audit chain SHA-256, export certificato.'
]
},
{
heading: 'Come Leggere il Percorso',
items: [
'<span style="color:var(--secondary)"><strong>Completato</strong></span> - la fase ha raggiunto gli obiettivi minimi di compliance.',
'<span style="color:var(--warning)"><strong>In corso</strong></span> - la fase e\' stata avviata ma non ancora completata.',
'<span style="color:var(--primary)"><strong>Attivo</strong></span> - fase di monitoraggio continuo, sempre attiva una volta avviata.',
'<span style="color:var(--gray-400)"><strong>Da iniziare</strong></span> - fase non ancora avviata.',
'La <strong>percentuale</strong> su ogni fase mostra il livello di completamento basato sui dati reali della piattaforma.'
]
},
{
heading: 'Prossima Azione Consigliata',
items: [
'Il <strong>banner blu</strong> in cima alla pagina indica sempre la prossima azione piu\' urgente da completare.',
'Il suggerimento si aggiorna automaticamente in base allo stato reale dei moduli.',
'Clicca sul link nel banner per navigare direttamente al modulo corrispondente.'
]
},
{
heading: 'Card di Dettaglio Fase',
items: [
'Clicca su una <strong>fase nella roadmap</strong> per espandere il dettaglio degli step.',
'Ogni card mostra: stato badge (Completato/In corso/Da iniziare), metrica numerica reale, link diretto al modulo.',
'Le metriche sono calcolate in tempo reale interrogando tutti i moduli della piattaforma.',
'Clicca direttamente sulla card per accedere al modulo corrispondente.'
]
},
{
heading: 'Differenza con la Dashboard',
items: [
'La <strong>Dashboard</strong> mostra KPI numerici e attivita\' recenti — risponde a "come sto?".',
'Il <strong>Compliance Journey</strong> mostra il processo sequenziale — risponde a "dove sono nel percorso?" e "cosa devo fare dopo?".',
'Usa il Journey per pianificare le priorita\' di intervento e comunicare lo stato al board.'
]
}
],
references: [
'Art. 21 - Misure di gestione dei rischi di cibersicurezza (10 categorie)',
'Art. 20 - Governance e responsabilita\' degli organi di gestione',
'Art. 23 - Obblighi di segnalazione degli incidenti significativi',
'D.Lgs. 138/2024 - Recepimento NIS2 in Italia',
'ACN - Linee guida attuative per i soggetti NIS2'
]
}
};
@ -529,7 +590,9 @@ const HelpSystem = (function () {
'reports': 'reports',
'audit': 'reports',
'settings.html': 'settings',
'settings': 'settings'
'settings': 'settings',
'workflow.html': 'workflow',
'workflow': 'workflow'
};
// ── Stili CSS (iniettati una sola volta) ─────────────────────────

View File

@ -181,6 +181,25 @@ const I18n = (function () {
'time.hours_ago': { it: 'ore fa', en: 'hours ago' },
'time.yesterday': { it: 'Ieri', en: 'Yesterday' },
'time.days_ago': { it: 'giorni fa', en: 'days ago' },
// ── Compliance Journey / Workflow ──────────────
'workflow.title': { it: 'Compliance Journey', en: 'Compliance Journey' },
'workflow.progress': { it: 'Progresso Art.21 NIS2', en: 'NIS2 Art.21 Progress' },
'workflow.implementation': { it: 'implementazione misure', en: 'measures implementation' },
'workflow.next_action': { it: 'Prossima azione consigliata', en: 'Recommended next action' },
'workflow.phase': { it: 'Fase', en: 'Phase' },
'workflow.go_to_module': { it: 'Vai al modulo', en: 'Go to module' },
'workflow.ph1': { it: 'Preparazione', en: 'Preparation' },
'workflow.ph2': { it: 'Valutazione', en: 'Assessment' },
'workflow.ph3': { it: 'Rischi', en: 'Risks' },
'workflow.ph4': { it: 'Implementazione', en: 'Implementation' },
'workflow.ph5': { it: 'Monitoraggio', en: 'Monitoring' },
'workflow.ph6': { it: 'Reportistica', en: 'Reporting' },
'workflow.status_done': { it: 'Completato', en: 'Completed' },
'workflow.status_partial': { it: 'In corso', en: 'In progress' },
'workflow.status_active': { it: 'Attivo', en: 'Active' },
'workflow.status_todo': { it: 'Da iniziare', en: 'To do' },
'nav.workflow': { it: 'Compliance Journey', en: 'Compliance Journey' },
};
// ── API Pubblica ──────────────────────────────────────────────────