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>
75 lines
8.7 KiB
Markdown
75 lines
8.7 KiB
Markdown
# 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` |
|