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

54 lines
7.0 KiB
Markdown

# MAPPA-LOGICA · Onboarding — Configurazione Iniziale
⟦ INIZIO · U-ONBOARDING · Videata "Onboarding — Configurazione Iniziale" (wizard) ⟧
File: public/onboarding.html · URL: /onboarding.html · Scopo: wizard di configurazione iniziale dell'organizzazione dopo la registrazione — ricerca azienda per Partita IVA, completamento dati aziendali, profilo utente e classificazione NIS2 automatica · Profili: qualsiasi utente autenticato senza organizzazione configurata (richiede solo `checkAuth()`; nessun vincolo di ruolo). NOTA: nella UI V2 Bootstrap Italia il wizard ha 4 step (lo storico "5 step" con scelta metodo/visura è stato compattato: l'upload visura resta solo come funzione legacy `analyzeVisura()` nel JS, righe 587-613, senza UI dedicata).
• U-ONBOARDING.1 — Header e stepper di avanzamento
Mostra: logo scudo + titolo "NIS2 Agile" / sottotitolo "Configurazione Iniziale"; stepper orizzontale a 4 passi con etichette "Partita IVA", "Dati Aziendali", "Il Tuo Profilo", "Classificazione"; il passo corrente è evidenziato in blu, i completati in verde con segno di spunta
Azioni: nessuna diretta (lo stepper riflette `goToStep(n)` / `updateStepper`)
Dati da: nessuna
Confine: `#stepper` (riga 122); singoli passi `.stepper-step[data-step="1..4"]`; connettori `.stepper-connector[data-after]`
• U-ONBOARDING.2 — Step 1 "Inserisci la Partita IVA dell'azienda"
Mostra: card con campo "Partita IVA *" (prefisso fisso "IT", 11 cifre numeriche, hint "11 cifre numeriche senza prefisso IT"), bottone "Cerca Azienda", area risultato (alert verde "✓ {ragione sociale}" con indirizzo, oppure alert giallo "Azienda non trovata. Puoi inserire i dati manualmente."), spinner "Ricerca in corso... / Interrogazione registro imprese", link "Non trovi l'azienda? Inserisci manualmente", bottone "Continua" (appare solo dopo ricerca riuscita o scelta manuale)
Azioni: "Cerca Azienda" (anche tasto Invio nel campo) → `step1FetchCompany()`: valida 11 cifre, chiama l'API e precompila lo stato del wizard (name, fiscal_code, address, city, website, email/pec, phone, suggested_sector, employees_range) marcando i campi auto-compilati; "Inserisci manualmente" → `step1ManualEntry()`: salva solo la P.IVA e abilita "Continua"; "Continua" → `goToStep(2)`
Dati da: POST /api/onboarding/fetch-company con body `{vat_number}` (sorgente backend: CertiSource); fonte dati mostrata poi come "Dati precompilati da CertiSource"
Confine: `#step-1` (riga 150); input `#s1-vat`, risultato `#s1-result`, bottone `#s1-fetch-btn`, spinner `#s1-loading`, bottone continua `#s1-continue-btn`
• U-ONBOARDING.3 — Step 2 "Verifica e Completa i Dati Aziendali"
Mostra: banner verde con la fonte dati (es. "Dati precompilati da CertiSource", visibile solo se auto-fill); form a 2 colonne: Ragione Sociale* (`#company-name`), Partita IVA (`#vat-number`), Codice Fiscale (`#fiscal-code`), Indirizzo (`#address`), Città (`#city`), Sito Web (`#website`), Email Aziendale (`#company-email`), Telefono Aziendale (`#company-phone`), Settore NIS2* (`#sector`, select con optgroup "Settori ad Alta Criticità (Allegato I)" 18 voci e "Altri Settori Critici (Allegato II)" 12 voci + "Altro"), Numero Dipendenti* (`#employee-count`), Fatturato Annuo EUR* (`#annual-turnover`). I campi auto-compilati hanno bordo verde e badge "auto-compilato".
Azioni: "Indietro" → `goToStep(1)`; "Continua" → `submitStep3()`: valida ragione sociale, settore, dipendenti > 0, fatturato ≥ 0 e salva nello stato wizard, poi `goToStep(3)`
Dati da: nessuna chiamata diretta (usa i dati raccolti allo step 1; validazione client-side)
Confine: `#step-2` (riga 199); banner `#data-source-banner` + testo `#data-source-text`
• U-ONBOARDING.4 — Step 3 "Completa il tuo profilo"
Mostra: card con Nome Completo (`#full-name`, precompilato dal profilo se vuoto), Ruolo in Azienda* (`#role`, select: CEO/Amministratore Delegato, CTO/Direttore Tecnico, CISO/Responsabile Sicurezza, DPO/Data Protection Officer, Compliance Manager, IT Manager, Responsabile Legale, Membro CDA, Consulente Esterno, Altro), Telefono (`#user-phone`)
Azioni: "Indietro" → `goToStep(2)`; "Continua" → `submitStep4()`: ruolo obbligatorio, salva profilo e `goToStep(4)`
Dati da: GET /api/auth/me (all'ingresso nello step, `loadUserProfile()` precompila `full_name`)
Confine: `#step-3` (riga 312)
• U-ONBOARDING.5 — Step 4 "Classificazione NIS2" (risultato + riepilogo)
Mostra: riquadro risultato classificazione con icona scudo, etichetta e descrizione. Esiti possibili calcolati da `classifyLocally()` (logica interamente client-side: Allegato I + grande impresa ≥250 dip. o ≥50M€ → "Soggetto Essenziale"; Allegato I/II + media impresa ≥50 dip. o ≥10M€ → "Soggetto Importante"; settore non coperto → "Non Applicabile"; settore coperto sotto soglia → "Sotto le Soglie"). Se non applicabile compare la card "Adesione Volontaria alla NIS2" con checkbox. Sotto, card "Riepilogo Dati Aziendali" con: Ragione Sociale, Partita IVA, Settore, Tipologia Soggetto, Dipendenti, Fatturato Annuo.
Azioni: checkbox adesione volontaria → `onVoluntaryChange()`: cambia il riquadro in "Adesione Volontaria" e aggiorna il riepilogo; "Indietro" → `goToStep(3)`; "Completa e Vai alla Dashboard" → `completeOnboarding()` (U-ONBOARDING.6)
Dati da: nessuna chiamata per la classificazione (calcolo locale `classifyLocally(sector, employees, turnover)`, righe 731-762)
Confine: `#step-4` (riga 362); risultato `#classification-result` con `#classification-icon`, `#classification-label`, `#classification-desc`; sezione volontaria `#voluntary-section`, card `#voluntary-card`, checkbox `#voluntary-checkbox`; riepilogo `#sum-company`, `#sum-vat`, `#sum-sector`, `#sum-entity-type`, `#sum-employees`, `#sum-turnover`
• U-ONBOARDING.6 — Completamento onboarding
Mostra: il bottone diventa "Completamento in corso..."; al successo notifica "Configurazione completata con successo!" e redirect dopo 1s (consulente → companies.html, altrimenti → dashboard.html)
Azioni: invio payload `{name, vat_number, fiscal_code, address, city, website, contact_email, contact_phone, sector, employee_count, annual_turnover_eur, voluntary_compliance, full_name, phone, country:'IT'}`; al successo imposta l'org attiva con `api.setOrganization(orgId)`
Dati da: POST /api/onboarding/complete; (legacy, senza UI in V2: POST /api/onboarding/upload-visura via `api.uploadVisura()` per la visura camerale PDF)
Confine: `#complete-btn` (riga 409)
⟦ FINE · U-ONBOARDING ⟧
## ID STABILI MANCANTI (da aggiungere)
| Elemento | Riga | Id proposto |
|---|---|---|
| Bottone "Non trovi l'azienda? Inserisci manualmente" (step 1) | 182 | `nis2-onboarding-manual-btn` |
| Bottone "Indietro" step 2 | 298 | `nis2-onboarding-back-2` |
| Bottone "Continua" step 2 | 303 | `nis2-onboarding-next-2` |
| Bottone "Indietro" step 3 | 348 | `nis2-onboarding-back-3` |
| Bottone "Continua" step 3 | 353 | `nis2-onboarding-next-3` |
| Bottone "Indietro" step 4 | 404 | `nis2-onboarding-back-4` |
| Select settore: nessun id mancante (ha `#sector`) | — | — |