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

6.4 KiB

MAPPA-LOGICA · Segnalazioni Sicurezza (Whistleblowing)

⟦ INIZIO · U-WB · Videata "Segnalazioni Sicurezza" ⟧ File: public/whistleblowing.html · URL: /whistleblowing.html · Scopo: canale interno di segnalazione violazioni e anomalie di sicurezza ai sensi dell'Art. 32 D.Lgs. 138/2024, con segnalazioni anonime protette, tracking via token e gestione del ciclo di vita (ricevuta → revisione → indagine → risolta/chiusa) · Profili: l'invio (POST submit) non richiede autenticazione lato API (supporta segnalazioni anonime; la pagina però è dietro checkAuth client-side) e il tracking anonimo via token è anch'esso senza auth; lista, statistiche, dettaglio e gestione (cambio stato, assegnazione, chiusura, note di risoluzione) sono riservati a org_admin e compliance_manager (super_admin bypassa) — gate backend requireOrgRole su list/get/update/assign/close/stats in WhistleblowingController; gli altri ruoli ricevono 403 INSUFFICIENT_ROLE su lista e statistiche.

• U-WB.1 — Header pagina + switch viste Mostra: titolo "Segnalazioni Sicurezza", sottotitolo "Canale interno Art.32 NIS2 — Segnala violazioni e anomalie di sicurezza". Azioni: bottone "Traccia Segnalazione Anonima" → switchView('track') (vista U-WB.6); bottone "Nuova Segnalazione" → switchView('submit') (vista U-WB.5). Le 3 viste (list/submit/track) sono mutuamente esclusive. Dati da: nessuno (navigazione client-side). Confine: .page-header (riga 38); bottoni senza id, dentro .page-header-actions (righe 44 e 48).

• U-WB.2 — Banner Art. 32 Mostra: "Art. 32 D.Lgs. 138/2024 — Canale Segnalazioni Interno": le entità NIS2 devono predisporre canali interni; le segnalazioni anonime sono protette e il segnalante non può essere identificato; ogni segnalazione gestita con priorità e tracciabilità. Azioni: nessuna (informativo). Dati da: statico (HTML). Confine: .art32-banner (riga 56) — classe, nessun id.

• U-WB.3 — Statistiche (4 card) Mostra: "Totale Segnalazioni" (total), "Da Gestire" (received + under_review, ambra), "In Indagine" (investigating), "Critiche/Alte" (critical + high, rosso). Azioni: nessuna (lettura); ricaricate dopo ogni update. Dati da: GET /api/whistleblowing/stats (risposta: data.stats) — riservato a org_admin/compliance_manager (403 INSUFFICIENT_ROLE per gli altri ruoli). Confine: #stats-grid (riga 62).

• U-WB.4 — Vista Lista: filtri + tabella segnalazioni Mostra: filtri: stato (Ricevute / In revisione / In indagine / Risolte / Chiuse), priorità (Critica/Alta/Media/Bassa), categoria (Incidente sicurezza, Data breach, Accesso non autorizzato, Violazione policy, Rischio supply chain, Non conformità NIS2, Altro). Tabella con colonne: Codice (report_code), Categoria (badge), Titolo, Priorità (badge colorato), Stato (badge colorato), Anonima (scudo verde "Anonima" con lucchetto, oppure "Firmata"), Assegnata (nome o —), Data, bottone "Gestisci". Azioni: cambio filtro → loadReports() con query status/priority/category; "Gestisci" → viewReport(id) apre la modale di gestione (U-WB.7). Dati da: GET /api/whistleblowing/list?status=&priority=&category= (risposta: data.reports[]) — riservato a org_admin/compliance_manager (403 INSUFFICIENT_ROLE per gli altri ruoli). Confine: #view-list (riga 67); #filter-status (73), #filter-priority (82), #filter-category (90), #reports-container (103).

• U-WB.5 — Vista "Nuova Segnalazione" (form invio) Mostra: checkbox "Segnalazione anonima — La tua identità non verrà registrata" (spuntata di default); form: Categoria* (8 opzioni incl. Corruzione/Frode), Titolo*, Descrizione dettagliata*, Priorità stimata (Media default, Alta, Critica — Azione immediata richiesta, Bassa), Articolo NIS2 violato (opzionale, es. Art.21/Art.23), Email per follow-up (opzionale — lasciare vuoto per anonimato completo). Azioni: "Invia Segnalazione" → submitReport() → POST; in caso di successo mostra modale con il codice segnalazione (report_code) e, se anonima, il token di tracking da conservare (anonymous_token); "Annulla" → torna alla lista. Dati da: POST /api/whistleblowing/submit (body: category, title, description, priority, nis2_article, is_anonymous, contact_email, organization_id da localStorage nis2_org_id). Confine: #view-submit (riga 107); #is-anonymous (117), #submit-form (122), #rep-category (125), #rep-title (139), #rep-description (143), #rep-priority (147), #rep-article (156), #contact-email-group (158), #rep-email (160).

• U-WB.6 — Vista "Traccia Segnalazione Anonima" Mostra: campo "Token Segnalazione"; risultato: codice segnalazione, badge stato, categoria, timeline degli eventi (descrizione + data); messaggio "Token non valido o segnalazione non trovata" se il token non corrisponde. Azioni: "Verifica Stato" → trackReport() → GET con il token; "Annulla" → torna alla lista. Dati da: GET /api/whistleblowing/track-anonymous?token=. Confine: #view-track (riga 173); #track-token (182), #track-result (188).

• U-WB.7 — Modale dettaglio/gestione segnalazione Mostra: titolo "<report_code> — "; badge priorità, stato, eventuale scudo "Anonima"; descrizione completa; griglia: Categoria, Art. NIS2, Assegnata a, Data; Timeline degli eventi (descrizione, data/ora, autore); select "Cambia stato..." (In revisione / In indagine / Risolta / Chiusa / Respinta); textarea "Note di risoluzione...". Azioni: "Salva" → updateReport(id) → PUT con status e/o resolution_notes, poi notifica "Segnalazione aggiornata." e ricarica lista+stats; "Chiudi" → chiude la modale. Dati da: GET /api/whistleblowing/{id} (dettaglio + timeline); PUT /api/whistleblowing/{id} (body: {status?, resolution_notes?}). Confine: modale generata da showModal() di common.js; campi #modal-status (riga 353 script inline) e #modal-notes (riga 360 script inline), esistono solo a modale aperta.

⟦ FINE · U-WB ⟧

ID STABILI MANCANTI (da aggiungere)

Elemento Riga Id proposto
Bottone "Traccia Segnalazione Anonima" header 44 nis2-wb-btn-track
Bottone "Nuova Segnalazione" header 48 nis2-wb-btn-new
Banner Art.32 56 nis2-wb-art32-banner
Bottone "Gestisci" per riga (dinamico) 312 (template JS) data-attribute data-wb-view-id
Bottone "Verifica Stato" vista track 185 nis2-wb-btn-verify
Bottone submit "Invia Segnalazione" 164 nis2-wb-btn-submit