Files
DevEnv nis2-agileandClaude Opus 4.8 4dfab2a391 [FORMAZIONE] Avatar di prodotto — mappa-logica COMPLETA (22 viste) + SELETTORI_DEMO + tassonomia corso + fix kb.js
Deliverable formazione-first (DESIGN_AVATAR_FORMAZIONE / product-demo-complete):
- docs/mappa-logica/01..22_*.md: tutte le viste app V2 mappate (formato canonico standard §2),
  selettori VERIFICATI sul DOM reale, endpoint verificati su api.js/script, gate ruolo dai controller
- docs/mappa-logica/SELETTORI_DEMO.md: registry canonico (22 viste, 131 visualizzazione + 89 azioni)
  + worklist consolidata 132 id stabili da aggiungere (modifiche chirurgiche future)
- docs/formazione/TASSONOMIA_CORSO_NIS2.{md,json}: 10 moduli / 28 lezioni / ~7h45, prerequisiti+durate,
  esame con soglia 80%, sandbox 'prova tu' org 996002
- fix kb.js: ingest scope=ORG ora invia organization_id (prima 422 KB_ORG_REQUIRED) — bug trovato da A2

Prodotto con 4 trittici di agenti (A1 esecutore -> A2 revisore -> A3 controllore avversariale):
A2: ~14 correzioni (cross-ref, gate ruolo, comportamenti); A3 PASS: 38 selettori campionati 0 rotti,
18 endpoint reali, 0 violazioni normative (Allegati 3/4, IS-4, '1 mese', PII.* interna), 9 claim verificati.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-12 18:50:19 +02:00

75 lines
8.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# MAPPA-LOGICA · Modello Organizzativo SGSI (ISO 27001)
⟦ INIZIO · U-ISMS · Videata "Modello Organizzativo SGSI (ISO 27001)" ⟧
File: public/isms.html · URL: /isms.html · Scopo: costruzione guidata del Sistema di Gestione della Sicurezza delle Informazioni secondo ISO/IEC 27001:2022 (clausole 4-10) con Statement of Applicability pre-popolato dalla Gap Analysis NIS2 ed estensioni cloud ISO 27017/27018 · Profili: lettura (modello, SoA, ruoli, documenti, readiness, export) per tutti i membri dell'organizzazione; scrittura (salvataggio step, ri-derivazione SoA, aggiunta/cancellazione ruoli, creazione/generazione AI documenti) riservata a org_admin e compliance_manager (super_admin bypassa); l'aggiornamento del singolo controllo SoA (stato/applicabilità/motivazione) è consentito anche ad auditor — gate backend `requireOrgRole` in IsmsModelController. Disclaimer in pagina: strumento di supporto e pre-audit, non costituisce certificazione ISO 27001.
• U-ISMS.1 — Header pagina + Esporta SGSI
Mostra: titolo "Modello Organizzativo SGSI (ISO 27001)"; indicatore di salvataggio live ("Salvato"/"Salvataggio…"/"Salvataggio in sospeso"); bottone "Esporta SGSI".
Azioni: click "Esporta SGSI" → `ismsExportView()` apre una finestra stampabile con: nome organizzazione, data generazione, disclaimer, Ambito, Metodologia di risk assessment, tabella Statement of Applicability (Controllo / Titolo / Applicabile / Stato / %).
Dati da: GET /api/isms/export (via api.ismsExport()).
Confine: `#isms-savehint` (riga 58); bottone export senza id, dentro `.content-header-actions` (riga 59).
• U-ISMS.2 — Intro + disclaimer normativo
Mostra: box introduttivo "Costruisci il tuo Sistema di Gestione della Sicurezza delle Informazioni" (procedura guidata ISO/IEC 27001:2022, SoA pre-popolato dalla Gap Analysis NIS2, estensioni cloud 27017/27018); disclaimer ambra: gli obblighi normativi derivano da NIS2 / D.Lgs. 138/2024 / Determinazioni ACN, ISO 27001/27017/27018 sono best practice.
Azioni: nessuna (solo informativo).
Dati da: statico (HTML).
Confine: `.isms-intro` (riga 67) e `.isms-disclaimer` (riga 71) — classi, nessun id.
• U-ISMS.3 — Barra step del wizard (6 step)
Mostra: 6 card-step cliccabili numerate: 1 Contesto, 2 Leadership, 3 Risk, 4 SoA, 5 Documenti, 6 Monitoraggio. Step attivo evidenziato (classe `active`), step completati con bordo verde (classe `done`, calcolata da `markDone()` in base allo stato del modello).
Azioni: click su uno step → `goStep(i)` mostra il pannello corrispondente e carica i dati lazy (step 2 ruoli, step 4 SoA, step 5 documenti, step 6 readiness).
Dati da: GET /api/isms/model (via api.ismsGetModel(), al caricamento pagina) per pre-compilare e marcare gli step done.
Confine: `#isms-steps` (riga 73); singoli step generati via JS con id `#step-0` … `#step-5` (isms.js riga 39).
• U-ISMS.4 — Step 1: Contesto e Ambito (cl. 4)
Mostra: textarea "Ambito del SGSI (scope statement)", "Contesto interno", "Contesto esterno", "Parti interessate (una per riga)", "Confini del SGSI", "Esclusioni motivate"; 3 checkbox estensioni cloud: "Usiamo servizi cloud pubblici → ISO 27017", "Siamo fornitori di servizi cloud → ISO 27017 (lato provider)", "Trattiamo dati personali (PII) in cloud pubblico → ISO 27018". I flag cloud attivano i controlli condizionali nel SoA.
Azioni: bottone "Salva e continua" → `saveStep1()` → salva e passa allo step 2; invalida la cache SoA (i flag cloud cambiano il perimetro dei controlli applicabili).
Dati da: POST /api/isms/model (campi: scope_statement, context_internal, context_external, interested_parties[], boundaries, exclusions, uses_public_cloud, is_cloud_provider, processes_pii_in_cloud).
Confine: `#panel-0` (riga 76); campi `#f-scope` (79), `#f-ctx-int` (80), `#f-ctx-ext` (81), `#f-parties` (82), `#f-boundaries` (83), `#f-exclusions` (84), `#f-uses-cloud` (87), `#f-cloud-provider` (88), `#f-pii-cloud` (89).
• U-ISMS.5 — Step 2: Leadership, ruoli e responsabilità (cl. 5)
Mostra: lista dei ruoli SGSI definiti con matrice RACI (badge RACI + nome ruolo + responsabilità); form di inserimento: campo "Ruolo (es. CISO)", campo "Responsabilità", select RACI (R/A/C/I).
Azioni: "Aggiungi ruolo" → `addRole()` → POST; "×" su un ruolo → `delRole(id)` → DELETE; "Continua" → step 3.
Dati da: GET /api/isms/roles (lista); POST /api/isms/roles (role_name, responsibility, raci); DELETE /api/isms/roles/{id}.
Confine: `#panel-1` (riga 96); `#roles-list` (100), `#r-name` (102), `#r-resp` (103), `#r-raci` (104).
• U-ISMS.6 — Step 3: Risk, metodologia e obiettivi (cl. 6)
Mostra: textarea "Metodologia di risk assessment" (es. ISO 27005 / NIST SP 800-30, scala 5×5 del modulo Rischi) e "Obiettivi del SGSI (uno per riga)"; nota: il registro dei rischi vive nel modulo Rischi (link a risks.html), questo step ne dichiara la metodologia.
Azioni: "Salva e continua" → `saveStep3()` → salva e passa allo step 4 (SoA).
Dati da: POST /api/isms/model (campi: risk_methodology, isms_objectives[]).
Confine: `#panel-2` (riga 112); `#f-method` (115), `#f-objectives` (116).
• U-ISMS.7 — Step 4: Statement of Applicability (SoA)
Mostra: controlli ISO raggruppati per standard (gruppi collassabili 27001/27017/27018) e per tema (Organizzativi, Persone, Fisici, Tecnologici, Privacy PII); per ogni controllo: codice (es. badge `soa-code`), titolo IT/EN, badge verde "da NIS2" se pre-popolato dalla Gap Analysis (con tooltip della risposta sorgente), checkbox "Applicabile", 4 stati di attuazione (Da iniziare / In corso / Attuato / Verificato), textarea "Motivazione (inclusione/esclusione)". Riga statistiche: "Applicabili: N · impl. media: X%".
Azioni: bottone "Ri-deriva dal NIS2" → `deriveSoa()` ricalcola il pre-popolamento; click su uno stato → autosave con debounce 600ms (% implementazione: not_started=0, in_progress=50, implemented/verified=100); toggle Applicabile → autosave + ricarica dell'intera SoA dopo 400ms (`setSoaApplicable` invalida la cache e richiama `loadSoa()`, i gruppi tornano collassati tranne il primo); modifica motivazione → autosave.
Dati da: GET /api/isms/soa (gruppi+controlli+stats); POST /api/isms/soa/derive (ri-derivazione da NIS2); PUT /api/isms/soa (payload per controllo: control_code, applicable | implementation_status+implementation_pct | justification_inclusion/justification_exclusion).
Confine: `#panel-3` (riga 123); `#soa-stats` (129), `#soa-groups` (131); singoli controlli renderizzati via JS come `.soa-ctrl[data-code="<control_code>"]` (isms.js riga 187).
• U-ISMS.8 — Step 5: Documented Information (cl. 7-8) + generazione AI
Mostra: select "Tipo di documento" con 6 tipi: Policy SGSI, Dichiarazione di Applicabilità, Politica controllo accessi, Procedura gestione incidenti, Procedura continuità operativa, Politica sicurezza fornitori; hint di generazione ("Generazione bozza in corso…" / "Bozza creata (revisione obbligatoria)."); lista documenti esistenti con titolo, badge "AI" se generato dall'AI, tipo documento, badge stato (approved=verde, altrimenti warning).
Azioni: "Genera bozza con AI" → `aiGenDoc()` → POST con doc_type; "Continua" → step 6.
Dati da: GET /api/isms/documents (lista); POST /api/isms/documents/ai-generate ({doc_type}).
Confine: `#panel-4` (riga 137); `#d-type` (142), `#btn-aigen` (150), `#aigen-hint` (152), `#docs-list` (153).
• U-ISMS.9 — Step 6: Monitoraggio e Miglioramento (cl. 9-10) + readiness
Mostra: nota che audit interni e non conformità si gestiscono nei moduli esistenti (Audit & Report, NCR/CAPA); percentuale grande di "Completamento del SGSI" (es. "62%"); checklist per clausola (badge clausola + etichetta + ✓ verde se completata, — grigio se no).
Azioni: nessuna azione diretta (lettura); la checklist si aggiorna al variare del modello.
Dati da: GET /api/isms/readiness (overall_pct + checklist[{clause, label, done}]).
Confine: `#panel-5` (riga 159); `#readiness-pct` (165), `#readiness-checklist` (167).
⟦ FINE · U-ISMS ⟧
## ID STABILI MANCANTI (da aggiungere)
| Elemento | Riga | Id proposto |
|---|---|---|
| Bottone "Esporta SGSI" nell'header | 59 | `nis2-isms-btn-export` |
| Bottone "Salva e continua" Step 1 | 91 | `nis2-isms-btn-save-step1` |
| Bottone "Aggiungi ruolo" Step 2 | 105 | `nis2-isms-btn-add-role` |
| Bottone "Continua" Step 2 | 107 | `nis2-isms-btn-next-step2` |
| Bottone "Salva e continua" Step 3 | 118 | `nis2-isms-btn-save-step3` |
| Bottone "Ri-deriva dal NIS2" Step 4 | 128 | `nis2-isms-btn-derive-soa` |
| Bottone "Continua" Step 4 | 132 | `nis2-isms-btn-next-step4` |
| Bottone "Continua" Step 5 | 154 | `nis2-isms-btn-next-step5` |
| Box intro | 67 | `nis2-isms-intro` |
| Box disclaimer | 71 | `nis2-isms-disclaimer` |