# MAPPA-LOGICA · Gestione Organizzazioni (admin) ⟦ INIZIO · U-ADMIN-ORGS · Videata "Gestione Organizzazioni" (admin) ⟧ File: public/admin/organizations.html · URL: /admin/organizations.html · Scopo: elenco paginato in sola lettura di TUTTE le organizzazioni registrate sulla piattaforma con classificazione NIS2, membri, ultimo score, piano e stato · Profili: solo `super_admin` (check `api.getMe()`: se `role !== 'super_admin'` notifica "Accesso non autorizzato." e redirect a /dashboard.html dopo 1,5s, righe 159-171) • U-ADMIN-ORGS.1 — Header pagina e breadcrumb Mostra: titolo "Gestione Organizzazioni" + badge rosso "Super Admin"; breadcrumb "Amministrazione › Organizzazioni" Azioni: click "Amministrazione" → torna a ../admin/index.html Dati da: nessuna Confine: `header.content-header` (riga 110) e `nav.admin-breadcrumb[aria-label="Percorso di navigazione"]` (riga 119), entrambi senza id • U-ADMIN-ORGS.2 — Tabella organizzazioni Mostra: tabella con colonne: Nome, Settore (etichette italiane da mappa `sectorLabels`: Energia, Trasporti, Banche, Sanità, Acqua, Infrastrutture Digitali, Pubblica Amministrazione, Manifatturiero, Servizi Postali, Chimico, Alimentare, Rifiuti, Servizi ICT, Provider Digitali, Spazio, Ricerca, Altro), Tipo Entità (badge "Essenziale" rosso / "Importante" giallo / "N/A" grigio), Membri (conteggio), Ultimo Score (pallino colorato + percentuale arrotondata, "-" se assente), Piano (badge Free/Professional/Enterprise), Stato (pallino "Attiva" verde / "Inattiva" grigio), Data Creazione. Spinner durante il caricamento; stato vuoto "Nessuna organizzazione trovata / Le organizzazioni registrate appariranno qui."; in caso di errore "Errore nel caricamento" o "Errore di connessione". Azioni: nessuna azione per riga (vista in sola lettura, nessun bottone modifica/elimina) Dati da: GET /api/admin/organizations?page={n} (campi per riga: `name`, `sector`, `entity_type`, `member_count`, `last_score`, `subscription_plan`, `is_active`, `created_at`; `pagination`: `total`, `per_page` default 20, `page`) Confine: `#orgs-container` (riga 128); tabella e righe generate dinamicamente da `renderOrganizations` senza id • U-ADMIN-ORGS.3 — Paginazione Mostra: se più pagine: "Visualizzati {start}-{end} di {total} organizzazioni" + bottoni "« Precedente" / "Successivo »" (disabilitati ai bordi); se una sola pagina: "Totale: {n} organizzazione/i" Azioni: "Precedente"/"Successivo" → `loadOrganizations(page±1)` ricarica la tabella Dati da: GET /api/admin/organizations?page={n} (stesso endpoint, parametro `page`) Confine: `.pagination` dentro `#orgs-container` (generata dinamicamente, righe 286-309 del sorgente; senza id) • U-ADMIN-ORGS.4 — Sidebar di navigazione Mostra: sidebar Bootstrap Italia condivisa (iniettata da `loadSidebar()` di ../js/common-bi.js) Azioni: navigazione app Dati da: nessuna Confine: `#sidebar` (riga 107) ⟦ FINE · U-ADMIN-ORGS ⟧ ## ID STABILI MANCANTI (da aggiungere) | Elemento | Riga | Id proposto | |---|---|---| | Header pagina | 110 | `nis2-admin-orgs-header` | | Breadcrumb | 119 | `nis2-admin-orgs-breadcrumb` | | Tabella organizzazioni (generata in JS) | 228-229 | `nis2-admin-orgs-table` | | Bottone paginazione "Precedente" | 293 | `nis2-admin-orgs-prev` | | Bottone paginazione "Successivo" | 296 | `nis2-admin-orgs-next` |