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>
52 lines
3.5 KiB
Markdown
52 lines
3.5 KiB
Markdown
# MAPPA-LOGICA · Pannello Amministrazione
|
|
|
|
⟦ INIZIO · U-ADMIN-INDEX · Videata "Pannello Amministrazione" ⟧
|
|
File: public/admin/index.html · URL: /admin/index.html · Scopo: dashboard di amministrazione piattaforma — KPI globali su organizzazioni, utenti, assessment, incidenti, rischi e AI, distribuzione piani di abbonamento, collegamenti rapidi alle gestioni · Profili: solo `super_admin` (check `api.getMe()`: se `role !== 'super_admin'` notifica "Accesso non autorizzato..." e redirect a /dashboard.html dopo 1,5s, righe 327-339)
|
|
|
|
• U-ADMIN-INDEX.1 — Header pagina
|
|
Mostra: titolo "Pannello Amministrazione" + badge rosso "Super Admin"
|
|
Azioni: nessuna
|
|
Dati da: nessuna
|
|
Confine: `header.content-header` (riga 191, senza id)
|
|
|
|
• U-ADMIN-INDEX.2 — Riga statistiche 1 (organizzazioni e utenti)
|
|
Mostra: 4 card KPI: "Totale Organizzazioni", "Organizzazioni Attive", "Totale Utenti", "Utenti Attivi" (valori "--" finché non caricati)
|
|
Azioni: nessuna (solo lettura)
|
|
Dati da: GET /api/admin/stats (campi `total_organizations`, `active_organizations`, `total_users`, `active_users`)
|
|
Confine: `#stats-row-1` (riga 200); valori `#stat-total-orgs`, `#stat-active-orgs`, `#stat-total-users`, `#stat-active-users`; etichette `#lbl-total-orgs`, `#lbl-active-orgs`, `#lbl-total-users`, `#lbl-active-users`
|
|
|
|
• U-ADMIN-INDEX.3 — Riga statistiche 2 (attività compliance)
|
|
Mostra: 4 card KPI: "Assessment Completati", "Incidenti Aperti", "Totale Rischi", "Interazioni AI"
|
|
Azioni: nessuna
|
|
Dati da: GET /api/admin/stats (campi `completed_assessments`, `open_incidents`, `total_risks`, `ai_interactions`)
|
|
Confine: `#stats-row-2` (riga 232); valori `#stat-assessments`, `#stat-incidents`, `#stat-risks`, `#stat-ai`; etichette `#lbl-assessments`, `#lbl-incidents`, `#lbl-risks`, `#lbl-ai`
|
|
|
|
• U-ADMIN-INDEX.4 — Card "Distribuzione Piani"
|
|
Mostra: grafico a barre verticali con conteggio organizzazioni per piano: Free (grigio), Professional (blu), Enterprise (viola); spinner durante il caricamento; `aria-label` descrittivo per accessibilità
|
|
Azioni: nessuna (grafico statico renderizzato da `renderPlansChart`)
|
|
Dati da: GET /api/admin/stats (campo `plans_distribution`: array di `{subscription_plan, count}`)
|
|
Confine: `#plans-chart` (riga 269)
|
|
|
|
• U-ADMIN-INDEX.5 — Card "Gestione Piattaforma" (collegamenti rapidi)
|
|
Mostra: 2 card-link: "Gestisci Organizzazioni" ("Visualizza e gestisci tutte le organizzazioni registrate sulla piattaforma.") e "Gestisci Utenti" ("Visualizza e gestisci tutti gli utenti registrati sulla piattaforma.")
|
|
Azioni: click → naviga a /admin/organizations.html oppure /admin/users.html
|
|
Dati da: nessuna
|
|
Confine: `nav.quick-links-grid[aria-label="Collegamenti rapidi gestione piattaforma"]` (riga 281, senza id); singole card `a.quick-link-card` (righe 282 e 291, senza id)
|
|
|
|
• U-ADMIN-INDEX.6 — Sidebar di navigazione
|
|
Mostra: sidebar Bootstrap Italia condivisa dell'app (iniettata da `loadSidebar()` di /js/common-bi.js)
|
|
Azioni: navigazione app
|
|
Dati da: nessuna
|
|
Confine: `#sidebar` (riga 188)
|
|
|
|
⟦ FINE · U-ADMIN-INDEX ⟧
|
|
|
|
## ID STABILI MANCANTI (da aggiungere)
|
|
| Elemento | Riga | Id proposto |
|
|
|---|---|---|
|
|
| Header pagina con badge Super Admin | 191 | `nis2-admin-header` |
|
|
| Nav collegamenti rapidi | 281 | `nis2-admin-quick-links` |
|
|
| Card-link "Gestisci Organizzazioni" | 282 | `nis2-admin-link-organizations` |
|
|
| Card-link "Gestisci Utenti" | 291 | `nis2-admin-link-users` |
|
|
| Card "Distribuzione Piani" (contenitore card) | 264 | `nis2-admin-plans-card` |
|