nis2-agile/CLAUDE.md
Cristiano Benassati ae78a2f7f4 [CORE] Initial project scaffold - NIS2 Agile Compliance Platform
Complete MVP implementation including:
- PHP 8.4 backend with Front Controller pattern (80+ API endpoints)
- Multi-tenant architecture with organization_id isolation
- JWT authentication (HS256, 2h access + 7d refresh tokens)
- 14 controllers: Auth, Organization, Assessment, Dashboard, Risk,
  Incident, Policy, SupplyChain, Training, Asset, Audit, Admin
- AI Service integration (Anthropic Claude API) for gap analysis,
  risk suggestions, policy generation, incident classification
- NIS2 gap analysis questionnaire (~80 questions, 10 categories)
- MySQL schema (20 tables) with NIS2 Art. 21 compliance controls
- NIS2 Art. 23 incident reporting workflow (24h/72h/30d)
- Frontend: login, register, dashboard, assessment wizard, org setup
- Docker configuration (PHP-FPM + Nginx + MySQL)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 17:50:18 +01:00

18 KiB

NIS2 Agile - Documentazione Progetto

PRIMA DI INIZIARE

  • Leggi sempre questo file prima di iniziare qualsiasi lavoro
  • File specializzati per area di lavoro:
    • Assessment/Gap Analysis: docs/prompts/PROMPT_ASSESSMENT.md
    • Risk Management: docs/prompts/PROMPT_RISK.md
    • Incident Management: docs/prompts/PROMPT_INCIDENTS.md

Panoramica

NIS2 Agile è una piattaforma SaaS multi-tenant per supportare le aziende nella compliance alla Direttiva NIS2 (EU 2022/2555) e al D.Lgs. 138/2024 italiano. Include AI integration (Claude API) per gap analysis, generazione policy e suggerimenti.

Target: PMI, Enterprise, Consulenti/CISO.

Stack Tecnologico

  • Backend: PHP 8.4 vanilla (no framework)
  • Database: MySQL 8.x (nis2_agile_db)
  • Frontend: HTML5/CSS3/JavaScript vanilla
  • Auth: JWT HS256 (2h access + 7d refresh)
  • AI: Anthropic Claude API (Sonnet 4.5)
  • Server: Hetzner CPX31 (135.181.149.254)
  • VCS: Gitea (git.certisource.it)
  • Routing: Front Controller pattern (public/index.php)

Regola Fondamentale

Il progetto NIS2 Agile è COMPLETAMENTE ISOLATO dagli altri applicativi (CertiSource, AGILE_DFM). Database dedicato, utente dedicato, path dedicati. Non condividere MAI credenziali tra applicativi.

Struttura Progetto

nis2.agile/
├── CLAUDE.md                          # Questo file - documentazione progetto
├── application/
│   ├── config/
│   │   ├── config.php                 # Costanti app, CORS, JWT, password policy
│   │   ├── database.php               # Classe Database (PDO singleton)
│   │   └── env.php                    # Caricamento variabili ambiente da .env
│   ├── controllers/
│   │   ├── BaseController.php         # Classe base: auth JWT, multi-tenancy, JSON responses
│   │   ├── AdminController.php        # Gestione piattaforma (super_admin)
│   │   ├── AssessmentController.php   # Gap analysis e questionari NIS2
│   │   ├── AssetController.php        # Inventario asset e dipendenze
│   │   ├── AuditController.php        # Controlli compliance, evidenze, report
│   │   ├── AuthController.php         # Login, register, JWT, refresh token
│   │   ├── DashboardController.php    # Overview, score, deadlines, heatmap
│   │   ├── IncidentController.php     # Gestione incidenti (24h/72h/30d)
│   │   ├── OrganizationController.php # CRUD organizzazioni, membri, classificazione
│   │   ├── PolicyController.php       # Gestione policy, approvazione, AI generation
│   │   ├── RiskController.php         # Risk register, trattamenti, matrice rischi
│   │   ├── SupplyChainController.php  # Fornitori, valutazione, risk overview
│   │   └── TrainingController.php     # Corsi, assegnazioni, compliance formativa
│   ├── services/
│   │   └── AIService.php              # Integrazione Anthropic Claude API
│   ├── models/                        # (riservato per modelli futuri)
│   └── data/
│       ├── nis2_questionnaire.json    # Domande questionario gap analysis
│       └── policy_templates/          # Template policy NIS2
├── public/
│   ├── index.php                      # Front Controller / Router
│   ├── api-status.php                 # Health check endpoint
│   ├── css/                           # Fogli di stile
│   ├── js/
│   │   └── api.js                     # Client API JavaScript
│   └── admin/                         # Pannello admin frontend
├── docker/
│   ├── Dockerfile                     # Build PHP-FPM
│   ├── docker-compose.yml             # Orchestrazione servizi
│   ├── nginx.conf                     # Configurazione Nginx
│   └── php.ini                        # Configurazione PHP custom
├── docs/
│   ├── sql/
│   │   └── 001_initial_schema.sql     # Schema database completo
│   ├── context/
│   │   └── CONTEXT_SCHEMA_DB.md       # Schema documentato
│   ├── prompts/                       # Prompt specializzati per AI
│   └── credentials/
│       ├── credentials.md             # Note credenziali
│       └── hetzner_key                # Chiave SSH Hetzner
├── .env                               # Variabili ambiente (NON committare)
└── .gitignore

Multi-Tenancy

  • Ogni tabella dati ha organization_id
  • Header X-Organization-Id per selezionare org attiva
  • Ruoli: super_admin, org_admin, compliance_manager, board_member, auditor, employee, consultant
  • requireOrgAccess() in BaseController verifica membership
  • Super admin bypassa tutti i controlli di membership

API Endpoints

Tutti gli endpoint seguono il pattern: /nis2/api/{controller}/{action}/{id?}

AuthController (/api/auth/)

Metodo Endpoint Azione Descrizione
POST /api/auth/register register Registrazione nuovo utente
POST /api/auth/login login Login con email/password
POST /api/auth/logout logout Logout e invalidazione token
POST /api/auth/refresh refresh Refresh JWT token
GET /api/auth/me me Profilo utente corrente
PUT /api/auth/profile updateProfile Aggiorna profilo
POST /api/auth/change-password changePassword Cambio password

OrganizationController (/api/organizations/)

Metodo Endpoint Azione Descrizione
POST /api/organizations/create create Crea organizzazione
GET /api/organizations/current getCurrent Org corrente dell'utente
GET /api/organizations/list list Lista organizzazioni accessibili
PUT /api/organizations/{id} update Aggiorna organizzazione
GET /api/organizations/{id}/members listMembers Lista membri organizzazione
POST /api/organizations/{id}/invite inviteMember Invita membro
DELETE /api/organizations/{id}/members/{sid} removeMember Rimuovi membro
POST /api/organizations/classify classifyEntity Classifica entità NIS2

AssessmentController (/api/assessments/)

Metodo Endpoint Azione Descrizione
GET /api/assessments/list list Lista assessment
POST /api/assessments/create create Crea nuovo assessment
GET /api/assessments/{id} get Dettaglio assessment
PUT /api/assessments/{id} update Aggiorna assessment
GET /api/assessments/{id}/questions getQuestions Domande questionario
POST /api/assessments/{id}/respond saveResponse Salva risposta
POST /api/assessments/{id}/complete complete Completa assessment
GET /api/assessments/{id}/report getReport Report assessment
POST /api/assessments/{id}/ai-analyze aiAnalyze Analisi AI del gap

DashboardController (/api/dashboard/)

Metodo Endpoint Azione Descrizione
GET /api/dashboard/overview overview Overview compliance
GET /api/dashboard/compliance-score complianceScore Score compliance
GET /api/dashboard/upcoming-deadlines deadlines Scadenze imminenti
GET /api/dashboard/recent-activity recentActivity Attività recenti
GET /api/dashboard/risk-heatmap riskHeatmap Heatmap rischi

RiskController (/api/risks/)

Metodo Endpoint Azione Descrizione
GET /api/risks/list list Lista rischi
POST /api/risks/create create Crea rischio
GET /api/risks/{id} get Dettaglio rischio
PUT /api/risks/{id} update Aggiorna rischio
DELETE /api/risks/{id} delete Elimina rischio
POST /api/risks/{id}/treatments addTreatment Aggiungi trattamento
PUT /api/risks/treatments/{sid} updateTreatment Aggiorna trattamento
GET /api/risks/matrix getRiskMatrix Matrice dei rischi
POST /api/risks/ai-suggest aiSuggestRisks Suggerimenti AI rischi

IncidentController (/api/incidents/)

Metodo Endpoint Azione Descrizione
GET /api/incidents/list list Lista incidenti
POST /api/incidents/create create Crea incidente
GET /api/incidents/{id} get Dettaglio incidente
PUT /api/incidents/{id} update Aggiorna incidente
POST /api/incidents/{id}/timeline addTimelineEvent Aggiungi evento timeline
POST /api/incidents/{id}/early-warning sendEarlyWarning Early warning (24h)
POST /api/incidents/{id}/notification sendNotification Notifica (72h)
POST /api/incidents/{id}/final-report sendFinalReport Report finale (30d)
POST /api/incidents/{id}/ai-classify aiClassify Classificazione AI incidente

PolicyController (/api/policies/)

Metodo Endpoint Azione Descrizione
GET /api/policies/list list Lista policy
POST /api/policies/create create Crea policy
GET /api/policies/{id} get Dettaglio policy
PUT /api/policies/{id} update Aggiorna policy
DELETE /api/policies/{id} delete Elimina policy
POST /api/policies/{id}/approve approve Approva policy
POST /api/policies/ai-generate aiGeneratePolicy Genera policy con AI
GET /api/policies/templates getTemplates Lista template policy

SupplyChainController (/api/supply-chain/)

Metodo Endpoint Azione Descrizione
GET /api/supply-chain/list list Lista fornitori
POST /api/supply-chain/create create Aggiungi fornitore
GET /api/supply-chain/{id} get Dettaglio fornitore
PUT /api/supply-chain/{id} update Aggiorna fornitore
DELETE /api/supply-chain/{id} delete Elimina fornitore
POST /api/supply-chain/{id}/assess assessSupplier Valuta fornitore
GET /api/supply-chain/risk-overview riskOverview Overview rischio supply chain

TrainingController (/api/training/)

Metodo Endpoint Azione Descrizione
GET /api/training/courses listCourses Lista corsi
POST /api/training/courses createCourse Crea corso
GET /api/training/assignments myAssignments Le mie assegnazioni
POST /api/training/assign assignCourse Assegna corso
PUT /api/training/assignments/{sid} updateAssignment Aggiorna assegnazione
GET /api/training/compliance-status complianceStatus Status compliance formativa

AssetController (/api/assets/)

Metodo Endpoint Azione Descrizione
GET /api/assets/list list Lista asset
POST /api/assets/create create Crea asset
GET /api/assets/{id} get Dettaglio asset
PUT /api/assets/{id} update Aggiorna asset
DELETE /api/assets/{id} delete Elimina asset
GET /api/assets/dependency-map dependencyMap Mappa dipendenze

AuditController (/api/audit/)

Metodo Endpoint Azione Descrizione
GET /api/audit/controls listControls Lista controlli compliance
PUT /api/audit/controls/{sid} updateControl Aggiorna controllo
POST /api/audit/evidence/upload uploadEvidence Carica evidenza
GET /api/audit/evidence/list listEvidence Lista evidenze
GET /api/audit/report generateReport Genera report audit
GET /api/audit/logs getAuditLogs Log audit
GET /api/audit/iso27001-mapping getIsoMapping Mapping ISO 27001

AdminController (/api/admin/)

Metodo Endpoint Azione Descrizione
GET /api/admin/organizations listOrganizations Lista tutte le organizzazioni
GET /api/admin/users listUsers Lista tutti gli utenti
GET /api/admin/stats platformStats Statistiche piattaforma

Database Schema

  • Tabelle: organizations, users, user_organizations, refresh_tokens, assessments, assessment_responses, risks, risk_treatments, incidents, incident_timeline, policies, suppliers, training_courses, training_assignments, assets, compliance_controls, evidence_files, audit_logs, ai_interactions, rate_limits
  • Schema completo: docs/sql/001_initial_schema.sql
  • Schema documentato: docs/context/CONTEXT_SCHEMA_DB.md

AI Integration

  • Servizio: application/services/AIService.php
  • Funzionalità: gap analysis, risk suggestions, policy generation, incident classification
  • Modello: claude-sonnet-4-5-20250929
  • API Key: da .env (ANTHROPIC_API_KEY)
  • Rate limiting: tabella rate_limits, controllo per utente/organizzazione
  • Logging: tabella ai_interactions per tracciare tutte le chiamate AI

Moduli NIS2 (Art. 21)

  1. Gap Analysis & Assessment (Art. 21) - Questionario strutturato con analisi AI
  2. Risk Management (Art. 21.2.a) - Risk register, matrice, trattamenti
  3. Incident Management (Art. 23) - Timeline 24h/72h/30d, early warning, notifiche
  4. Policy Management (Art. 21) - CRUD policy, approvazione, generazione AI
  5. Supply Chain Security (Art. 21.2.d) - Valutazione fornitori, risk overview
  6. Training & Awareness (Art. 20) - Corsi, assegnazioni, compliance formativa
  7. Asset Management (Art. 21.2.i) - Inventario, classificazione, mappa dipendenze
  8. Audit & Compliance (Art. 21.2.f) - Controlli, evidenze, report, mapping ISO 27001

Deploy

  • SSH: ssh -i docs/credentials/hetzner_key root@135.181.149.254
  • Path server: /var/www/nis2-agile/
  • Deploy: scp via SSH (manuale)
  • Docker: docker-compose up -d

Git

  • Repository: https://git.certisource.it/AdminGit2026/nis2-agile
  • Branch: main
  • Commit format: [AREA] Descrizione
  • Aree: [CORE], [AUTH], [ASSESSMENT], [RISK], [INCIDENT], [POLICY], [SUPPLY], [TRAINING], [ASSET], [AUDIT], [FRONTEND], [AI], [DOCS], [DOCKER]

Comandi Utili

# Sviluppo locale
php -S localhost:8080 -t public/

# Applicare schema database
mysql -u nis2_user -p nis2_agile_db < docs/sql/001_initial_schema.sql

# Docker
cd docker && docker-compose up -d

# SSH al server
ssh -i docs/credentials/hetzner_key root@135.181.149.254

# Deploy manuale
scp -i docs/credentials/hetzner_key -r application/ root@135.181.149.254:/var/www/nis2-agile/
scp -i docs/credentials/hetzner_key -r public/ root@135.181.149.254:/var/www/nis2-agile/

Ultimo aggiornamento: 2026-02-17