diff --git a/public/docs/testing-simulazione.html b/public/docs/testing-simulazione.html
new file mode 100644
index 0000000..8c891eb
--- /dev/null
+++ b/public/docs/testing-simulazione.html
@@ -0,0 +1,789 @@
+
+
+
+
+
+
+
+ 🧭 Panoramica
+
+ NIS2 Agile dispone di due strumenti distinti ma complementari per la verifica della qualità e la dimostrazione delle funzionalità:
+
+
+
+
🧪 Test Runner
+
Suite di test automatizzati a 6 livelli che verifica ogni endpoint API con asserzioni precise. Accesso protetto da token, output streaming in tempo reale, reset dati integrato.
+
+
+
+
🎬 Simulazione Demo
+
Costruisce dati realistici attraverso le API reali (nessun INSERT SQL diretto) simulando 3 aziende con settori e complessità diversi su 6 scenari NIS2 reali.
+
+
+
+
+
+
ℹ️
+
I due sistemi sono progettati per lavorare in sequenza: prima si esegue la simulazione per creare i dati demo, poi il test runner per verificare che tutto funzioni correttamente. Il pulsante "Reset + Simula + Testa Tutto" li esegue entrambi in automatico.
+
+
+
+
+
+ 🧪 Test Runner
+
+ Il Test Runner è un'applicazione PHP (public/test-runner.php) che espone una UI web dark-theme con streaming SSE dei risultati in tempo reale. I test sono organizzati in 6 livelli funzionali più un livello infrastrutturale.
+
+
+
+ Livelli di Test
+
+
+
+
+ | Livello |
+ Nome |
+ Cosa verifica |
+ Dipendenze |
+
+
+
+
+ | INFRA |
+ Health & Smoke |
+ API status, endpoint rapidi, connettività DB |
+ — |
+
+
+ | L1 |
+ Auth & JWT |
+ Login, register, JWT access/refresh, change-password, rate limiting |
+ — |
+
+
+ | L2 |
+ Multi-Tenant Isolation |
+ Isolamento dati tra organizzazioni diverse, cross-org protection |
+ SIM-01 |
+
+
+ | L3 |
+ Compliance Core |
+ Assessment, rischi, incidenti, policy, supply chain, asset, training, NCR/CAPA |
+ SIM-01 |
+
+
+ | L4 |
+ B2B & Services API |
+ X-API-Key auth, scopes (read:all, admin:licenses), invite lifecycle, webhook delivery |
+ SIM-01, SIM-06 |
+
+
+ | L5 |
+ Export & Reports |
+ CSV export (rischi/incidenti/asset/controlli), report HTML, audit executive |
+ SIM-01 |
+
+
+ | L6 |
+ AI Features |
+ Cross-org portfolio analysis, AI classify incident, AI suggest risk, normative feed |
+ SIM-01, consultant user |
+
+
+ | SIM |
+ Simulazioni |
+ Esecuzione completa SIM-01→06 con output dettagliato |
+ Demo users nel DB |
+
+
+
+
+
+ Accesso e autenticazione
+ Il Test Runner è protetto da un token di sessione configurato come costante PHP:
+
+
+https://nis2.agile.software/test-runner.php?t=Nis2Test2026
+
+
+https://nis2.agile.software/test-runner.php
+
+
+ Output streaming (SSE)
+ I test vengono eseguiti come comandi bash su server. I risultati vengono trasmessi in tempo reale tramite Server-Sent Events al browser. Ogni test mostra:
+
+
✓ PASS
Il comando ha restituito exit code 0 e l'output atteso.
+
✗ FAIL
Il comando ha restituito errore o output non corrispondente.
+
⚠ SKIP
Dipendenza mancante (utente demo non creato, SIM non eseguita).
+
⚡ WARN
Il test è passato ma con avvertimenti non bloccanti.
+
+
+ Comandi speciali
+
+
+ | Comando | Funzione |
+
+ | Verifica Hash Chain | Esegue simulate-nis2.php --sim=SIM05 per verificare integrità SHA-256 del audit trail |
+ | Reset Dati Demo | Esegue reset-demo.sql — cancella org/utenti con id>4 e email %.demo% |
+ | Full Suite L1→L6 | Esegue tutti i 6 livelli in sequenza, con output cumulativo |
+ | Reset + Simula + Testa | Pipeline completa: reset → SIM-01→06 → Full Suite L1→L6 |
+ | DB Stats | Conta record per tabella via endpoint JSON |
+
+
+
+
+
+
+
+ 🎬 Sistema di Simulazione
+
+ Il simulatore (simulate-nis2.php) costruisce dati demo realistici esclusivamente attraverso le API REST, come farebbe un utente reale. Nessun INSERT SQL diretto: ogni operazione testa sia la logica di business che la persistenza dati.
+
+
+
⚠️
+
Idempotenza: se un'organizzazione demo esiste già (stessa P.IVA), lo step viene saltato silenziosamente (SKIP idempotent) senza errore. Per ripartire da zero usare prima il Reset Dati Demo.
+
+
+ Utilizzo
+
+
+https://nis2.agile.software/simulate.html
+
+
+php simulate-nis2.php
+php simulate-nis2.php --sim=SIM02
+php simulate-nis2.php --sim=SIM06
+
+
+NIS2_SIM=SIM06 php simulate-nis2.php
+NIS2_API_BASE=https://... php simulate-nis2.php
+NIS2_DEMO_EMAIL=test@... php simulate-nis2.php
+
+
+ I 6 Scenari
+
+
+
+
SIM-01
+
Onboarding + Gap Assessment
+
Registra 3 aziende, completa l'onboarding multi-step, esegue il gap assessment completo con tutte le 80 domande Art.21 NIS2 per ogni organizzazione.
+
+
→ Registrazione + email welcome
+
→ Setup org (settore, dipendenti, entity type)
+
→ 80 domande × 3 aziende (categorizzate per Art.21)
+
→ Completamento assessment + score compliance
+
+
+
+
+
SIM-02
+
Incidente Ransomware Art.23
+
Simula un attacco ransomware critico su DataCore S.r.l. con attivazione della timeline obbligatoria NIS2 (early warning 24h, notification 72h, final report 30d).
+
+
→ Creazione incidente severity=critical
+
→ AI classify: categoria, suggerimenti, severity
+
→ Early warning CSIRT (24h)
+
→ Notification formale (72h) + final report (30d)
+
+
+
+
+
SIM-03
+
Data Breach Supply Chain
+
Fornitore IT di MedClinic compromesso: aggiunta fornitore critico, assessment sicurezza, attivazione incidente Art.23 parallelo con gestione supply chain.
+
+
→ Aggiunta fornitore risk=critical
+
→ Security assessment fornitore
+
→ Data breach incident con AI classification
+
→ Risk register aggiornato automaticamente
+
+
+
+
+
SIM-04
+
Whistleblowing Anonimo SCADA
+
Segnalazione anonima Art.32 NIS2 per accesso non autorizzato ai sistemi SCADA di EnerNet. Assegnazione investigatore, tracciamento timeline, chiusura con esito.
+
+
→ Submit anonimo (no auth, solo token tracking)
+
→ Assegnazione a compliance manager
+
→ Timeline investigazione (3 eventi)
+
→ Chiusura con esito e verifica tracking anonimo
+
+
+
+
+
SIM-05
+
Audit Trail Hash Chain
+
Verifica l'integrità della catena SHA-256 dell'audit trail per tutte e 3 le organizzazioni. Rileva eventuali record manomessi e genera export certificato.
+
+
→ Fetch audit log con prev_hash + entry_hash
+
→ Verifica catena SHA-256 record per record
+
→ Report integrità: verified/tampered/gaps
+
→ Export certificato JSON (con hash contenuto)
+
+
+
+
+
SIM-06
+
B2B License Provisioning
+
Provisioning automatico di una nuova organizzazione tramite invite token B2B. SSO federato, token exchange, creazione org + utente + API key in un'unica chiamata.
+
+
→ Creazione invite token (admin:licenses)
+
→ POST /api/services/provision con X-Provision-Secret
+
→ Org + user + api_key creati atomicamente
+
→ Verifica scadenza licenza + SSO JWT exchange
+
+
+
+
+ Architettura del simulatore
+ Il simulatore mantiene uno stato globale $S durante l'esecuzione per tracciare JWT, org IDs e statistiche:
+
+
+$S = [
+ 'jwt' => [],
+ 'orgs' => [],
+ 'users' => [],
+ 'stats' => ['pass' => 0, 'skip' => 0, 'fail' => 0, 'warn' => 0],
+];
+
+
+
+
+
+ 🏢 Aziende Demo
+
+ Le simulazioni creano 3 organizzazioni demo con caratteristiche diversificate per coprire i principali settori NIS2 e i diversi livelli di obblighi normativi:
+
+
+
+
+
+
Settore: IT / Cloud & Data Center
+
Tipo: Essential Entity
+
Dipendenti: 320
+
Sede: Milano
+
Scenari: SIM-01, SIM-02 (Ransomware)
+
+
+
+
+
+
MedClinic Italia S.p.A.
+
+
+
Settore: Sanità
+
Tipo: Important Entity
+
Dipendenti: 750
+
Sede: Roma
+
Scenari: SIM-01, SIM-03 (Supply Chain)
+
+
+
+
+
+
EnerNet Distribuzione S.r.l.
+
+
+
Settore: Energia
+
Tipo: Essential / Critical
+
Dipendenti: 1.800
+
Sede: Torino
+
Scenari: SIM-01, SIM-04 (SCADA)
+
+
+
+
+
+
✅
+
Tutti gli utenti demo usano la password NIS2Demo2026!. Le email vengono reindirizzate all'indirizzo configurato in NIS2_DEMO_EMAIL (default: demo@nis2agile.it).
+
+
+
+
+
+ 🤖 Worker Feedback AI
+
+ Oltre ai test e alle simulazioni, la piattaforma include un worker autonomo per la risoluzione automatica delle segnalazioni utente tramite Claude AI.
+
+
+
+
🕐
+
Ogni 30 min
+
cron root
+
+
+
🔍
+
Fetch ticket
+
status=in_lavorazione
+
+
+
🤖
+
Claude Code CLI
+
docker exec nis2-agile-devenv
+
+
+
✅
+
POST /resolve
+
con password gate
+
+
+
📧
+
Email broadcast
+
tutti i membri org
+
+
+
+ Configurazione
+
+
+
Script
+
scripts/feedback-worker.php
+
+
+
Crontab
+
*/30 * * * * /usr/bin/php8.4 /var/www/nis2-agile/scripts/feedback-worker.php
+
+
+
Log
+
/var/log/nis2/feedback-worker.log
+
+
+
Account worker
+
worker@nis2.agile.software (super_admin, dedicato)
+
+
+
+ Test del worker
+
+
+php8.4 /var/www/nis2-agile/scripts/feedback-worker.php
+
+
+tail -f /var/log/nis2/feedback-worker.log
+
+
+[2026-03-10 09:16:27] === Feedback Worker avviato ===
+[2026-03-10 09:16:27] Nessun ticket in lavorazione. Worker terminato.
+
+
+
+
+
+ 🔗 URL di Accesso
+
+
+
+ Reset dati demo
+
+
⚠️
+
Il reset cancella tutte le organizzazioni e gli utenti con id > 4 e email che contengono .demo. Le 4 org base e i super admin vengono preservati.
+
+
+
+
+mysql -u nis2_user -p nis2_agile_db < /var/www/nis2-agile/docs/sql/reset-demo.sql
+
+
+
+
+
+ 🔑 Credenziali
+
+ Test Runner
+
+
+
Token accesso
+
Nis2Test2026
+
+
+
URL
+
https://nis2.agile.software/test-runner.php?t=Nis2Test2026
+
+
+
+ Utenti demo (creati da SIM-01)
+
+
+
Password comune
+
NIS2Demo2026!
+
+
+
DataCore admin
+
admin@datacore-srl.demo
+
+
+
MedClinic admin
+
admin@medclinic.demo
+
+
+
EnerNet admin
+
admin@enernet.demo
+
+
+
Consultant
+
consultant@nis2agile.demo
+
+
+
+ API Key demo (DataCore — read:all)
+
+
+
Chiave
+
nis2_152c1d87f8e6613d18a0510fd907c082
+
+
+
+
Header
+
X-API-Key: nis2_152c1d87f8e6613d18a0510fd907c082
+
+
+
+ Sistema Feedback
+
+
+
Password resolve
+
Nis2Feedback2026!
+
+
+
Worker account
+
worker@nis2.agile.software
+
+
+
+
+
🔒
+
Queste credenziali sono per uso esclusivo in ambiente di test/demo. Non usarle in produzione reale. La pagina non è indicizzata dai motori di ricerca.
+
+
+
+
+
+