From 58b4bdbe5e7505baa392382fe405153245b931f0 Mon Sep 17 00:00:00 2001 From: DevEnv nis2-agile Date: Sat, 27 Jun 2026 16:38:07 +0200 Subject: [PATCH] =?UTF-8?q?[FIX]=20UI=20V3=20=E2=80=94=20allineamento=20he?= =?UTF-8?q?lp/i18n/KB/ARIA=20al=20menu=20top-nav?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Dopo il revamp V3, allineati i layer che descrivevano ancora la sidebar V2: - topnav-v3.js: aggiunte le pagine orfane in nav (Matrice RACI → Struttura interna, Scadenziario → Monitoraggio, Compliance Journey → Guida) + cablato data-i18n su gruppi e voci del mega-menu (traduzione IT/EN come in V2). - i18n.js: nuove chiavi nav V3 (gruppi mega-menu + connettori/whistleblowing/ normative/cross-analysis/kb/architettura/simulazione/integrazioni/workflow/ audit ACN/registra incidente). - AIService.php navigationMapBlock: riscritta sul menu IN ALTO V3 (9 gruppi + pulsante "Registra incidente"), sync con topnav-v3.js NAV_GROUPS; ARIA non parla più di "barra laterale". - help.js: corrette le 3 menzioni "sidebar" → barra/menu in alto. - KB nis2_kb: nuovo docs/kb/V3_UI_NAVIGAZIONE.md + scripts/ingest-v3-ui-doc.php (ingerito host-side: 3 chunk SYSTEM, rimossi i chunk V2; ARIA RAG ora guida sul top-nav). - Cache-buster ?v=20260627n sui 3 JS modificati su tutte le pagine. Deploy: JS/HTML statici live via bind-mount; php-fpm reload (host + nis2-app) per AIService. Co-Authored-By: Claude Opus 4.8 (1M context) --- application/services/AIService.php | 29 +++--- docs/kb/V3_UI_NAVIGAZIONE.md | 57 +++++++++++ public/admin/index.html | 6 +- public/admin/organizations.html | 6 +- public/admin/users.html | 6 +- public/architecture.html | 6 +- public/assessment.html | 6 +- public/assets.html | 6 +- public/calendario.html | 6 +- public/companies.html | 6 +- public/competenze.html | 6 +- public/connettori-discovery.html | 6 +- public/controlli-periodici.html | 6 +- public/cross-analysis.html | 6 +- public/dashboard.html | 6 +- public/guida.html | 6 +- public/incidents.html | 6 +- public/integrazioniext.html | 6 +- public/internal-audits.html | 6 +- public/isms.html | 6 +- public/js/help.js | 6 +- public/js/i18n.js | 20 ++++ public/js/topnav-v3.js | 28 +++++- public/kb.html | 6 +- public/management-review.html | 6 +- public/misure-requisiti.html | 6 +- public/normative.html | 6 +- public/organigramma.html | 6 +- public/policies.html | 6 +- public/raci.html | 6 +- public/reports.html | 6 +- public/review-schedule.html | 6 +- public/risks.html | 6 +- public/settings.html | 6 +- public/stakeholder-activities.html | 6 +- public/stakeholders.html | 6 +- public/supply-chain.html | 6 +- public/training.html | 6 +- public/whistleblowing.html | 6 +- public/workflow.html | 6 +- scripts/ingest-v3-ui-doc.php | 152 +++++++++++++++++++++++++++++ 41 files changed, 379 insertions(+), 123 deletions(-) create mode 100644 docs/kb/V3_UI_NAVIGAZIONE.md create mode 100644 scripts/ingest-v3-ui-doc.php diff --git a/application/services/AIService.php b/application/services/AIService.php index 2401e89..9f242ae 100644 --- a/application/services/AIService.php +++ b/application/services/AIService.php @@ -61,22 +61,29 @@ class AIService * system prompt dell'assistente ARIA cosi' che le indicazioni di navigazione * usino i nomi ESATTI del menu e non vengano inventati moduli/fasi inesistenti. * - * ⚠️ TENERE SINCRONIZZATA con la fonte di verita' della sidebar: - * public/js/common-bi.js (array navItems). Se aggiungi/rinomini una voce + * ⚠️ TENERE SINCRONIZZATA con la fonte di verita' del menu V3: + * public/js/topnav-v3.js (array NAV_GROUPS). Se aggiungi/rinomini una voce * di menu li', aggiorna anche questo elenco. - * (Ticket #424, 2026-06-23: ARIA citava voci di menu inesistenti.) + * (Ticket #424, 2026-06-23: ARIA citava voci di menu inesistenti. + * Aggiornato 2026-06-27 al menu IN ALTO V3 — prima era la sidebar V2.) */ private function navigationMapBlock(): string { - return "\n## MAPPA DELLA NAVIGAZIONE (barra laterale REALE dell'app)\n" - . "Sezione \"Principale\": Dashboard · Calendario · Compliance Journey · Gap Analysis · Misure e Requisiti · Modello SGSI (ISO 27001).\n" - . "Sezione \"Gestione\": Organigramma · Competenze · Rischi · Incidenti · Policy · Supply Chain · Stakeholder · Attivita' stakeholder · Segnalazioni · Normative · AI Cross-Analysis · Knowledge Base.\n" - . "Sezione \"Operativo\": Formazione · Inventario · Connettori Discovery · Audit interni · Controlli periodici · Riesame di Direzione · Audit & Report.\n" - . "Sezione \"Sistema\": Guida all'uso · Impostazioni · Architettura · Simulazione Demo · Integrazioni Esterne.\n" + return "\n## MAPPA DELLA NAVIGAZIONE (menu IN ALTO dell'app — interfaccia V3)\n" + . "L'app ha una BARRA IN ALTO (non piu' una barra laterale): a sinistra logo e ricerca, a destra il pulsante ROSSO \"Registra incidente\", il menu utente (Impostazioni, Esci) e il selettore lingua IT/EN. Sotto, una barra di NAVIGAZIONE con voci a tendina (mega-menu).\n" + . "Voci dirette: \"Dashboard\" · \"Calendario\".\n" + . "Menu \"Stakeholders\": Stakeholders · Supply-Chain · Attivita' su Stakeholders.\n" + . "Menu \"Struttura interna\": Organigramma · Competenze · GAP Analysis · Matrice RACI · Formazione.\n" + . "Menu \"Rischi\": Mappa dei rischi · Inventario · Policy · Connettori Discovery.\n" + . "Menu \"Monitoraggio\": Segnalazioni ricevute · Audit interni · Audit ACN · Controlli periodici · Riesame di Direzione · Scadenziario.\n" + . "Menu \"Lex e ISO\": Normative · Modello SGSI (ISO 27001) · Misure e requisiti ACN.\n" + . "Menu \"AI\": AI Cross-Analysis · Knowledge Base.\n" + . "Menu \"Guida\": Guida all'uso · Compliance Journey · Integrazioni Esterne · Impostazioni · Architettura · Simulazione Demo.\n" + . "Incidenti: si raggiungono dal pulsante ROSSO \"Registra incidente\" in alto a destra.\n" . "\nREGOLE DI NAVIGAZIONE (vincolanti):\n" - . "1. Quando indichi DOVE cliccare o COME raggiungere una funzione, usa ESCLUSIVAMENTE i nomi delle voci qui sopra, esattamente come scritti, indicando la sezione (es. \"nella sezione Operativo, voce Inventario\").\n" - . "2. NON inventare nomi di menu, \"fasi\", codici (es. \"A4\", \"Fase 4.1\") o moduli che NON compaiono in questo elenco.\n" - . "3. L'inventario degli asset si trova in: sezione Operativo > Inventario. La valutazione del rischio in: sezione Gestione > Rischi. Misure e requisiti in: sezione Principale > Misure e Requisiti.\n" + . "1. Quando indichi DOVE cliccare o COME raggiungere una funzione, usa ESCLUSIVAMENTE i nomi delle voci qui sopra, esattamente come scritti, indicando il menu (es. \"nel menu in alto Rischi, voce Inventario\").\n" + . "2. NON inventare nomi di menu, \"fasi\", codici (es. \"A4\", \"Fase 4.1\") o moduli che NON compaiono in questo elenco. NON parlare di \"barra laterale\"/\"sidebar\": il menu e' IN ALTO.\n" + . "3. L'inventario degli asset si trova in: menu Rischi > Inventario. La valutazione del rischio in: menu Rischi > Mappa dei rischi. Misure e requisiti in: menu Lex e ISO > Misure e requisiti ACN. Per registrare un incidente: pulsante rosso \"Registra incidente\" in alto.\n" . "4. Se l'utente cerca una funzione che non corrisponde ad alcuna voce, dillo chiaramente e suggerisci la voce piu' vicina, senza inventarne una.\n" . "5. NON citare MAI nomi di file (es. \"rischi.html\", \"assets.html\") nE URL interni: l'utente naviga dalle voci di menu qui sopra, non dai file.\n" . "6. NON inventare pulsanti, campi o passaggi che non esistono. Se non sei certo che una funzione/pagina esista, NON darla per scontata: dillo e invita ad aprire la guida \"?\" della pagina; usa solo le funzioni descritte nel contesto/guida della pagina, se forniti.\n"; diff --git a/docs/kb/V3_UI_NAVIGAZIONE.md b/docs/kb/V3_UI_NAVIGAZIONE.md new file mode 100644 index 0000000..746f310 --- /dev/null +++ b/docs/kb/V3_UI_NAVIGAZIONE.md @@ -0,0 +1,57 @@ +FONTE: Documentazione interfaccia prodotto NIS2 Agile (interfaccia "V3" — menu in alto, tema navy/oro, font Inter, icone Lucide). +AUTORITA: Team prodotto NIS2 Agile — descrizione UI/navigazione (NON contenuto normativo). +SCOPO: guida operativa per l'assistente AI ARIA, così da indirizzare l'utente nell'interfaccia dell'app. Descrive SOLO struttura e navigazione; nessuna affermazione normativa. + +> ⚠️ AGGIORNATO 2026-06-27 — questo documento SOSTITUISCE le versioni precedenti che descrivevano la **sidebar a sinistra** (interfaccia "V2" Bootstrap Italia). Dal 27/6 l'interfaccia è la **V3**: il menu è una **barra IN ALTO** (top-nav a mega-menu), NON più una barra laterale. Gli URL delle pagine restano normali (`dashboard.html`, `risks.html`, …). + +# NIS2 Agile — Interfaccia V3: struttura e navigazione + +## Com'è fatta l'interfaccia V3 + +L'app è **multi-pagina** (non SPA): ogni modulo è una pagina a sé. La navigazione avviene da una **barra in alto** (chrome) presente in tutte le pagine applicative; **non esiste più la barra laterale a sinistra**. Tema **navy + oro**, font **Inter**, icone **Lucide**. + +La barra in alto ha due righe: +1. **Riga superiore**: logo "N2" e nome "NIS2 Agile" a sinistra; un **campo di ricerca** al centro; a destra il **selettore lingua IT/EN**, il pulsante **rosso "Registra incidente"**, e il **menu utente** (avatar + nome → apre Impostazioni, versione/changelog, Esci). Per i consulenti multi-organizzazione, a destra compare anche un **selettore azienda** (org-switcher). +2. **Riga di navigazione**: voci con **menu a tendina (mega-menu)**. La voce/gruppo della pagina corrente è evidenziata (bordo oro, `aria-current`). + +In basso a destra restano i **3 pulsanti flottanti (FAB)**: assistente **ARIA** (chat), **segnalazione** bug/supporto, **notifiche** (campana con badge contatore). + +## Voci del menu in alto (mega-menu) + +Voci dirette (senza tendina): +- **Dashboard** → panoramica conformità. +- **Calendario** → scadenze e adempimenti in vista mese/lista. + +Gruppi a tendina: +- **Stakeholders**: *Stakeholders* (soggetti interni/esterni) · *Supply-Chain* (rischio fornitori) · *Attività su Stakeholders* (interazioni e impegni). +- **Struttura interna**: *Organigramma* (ruoli e deleghe) · *Competenze* (skill matrix) · *GAP Analysis* (assessment di conformità) · *Matrice RACI* (responsabilità R/A/C/I) · *Formazione* (piani formativi). +- **Rischi**: *Mappa dei rischi* (registro rischi e trattamenti) · *Inventario* (asset e perimetro tecnico) · *Policy* (politiche) · *Connettori Discovery* (scansione rete/cloud che auto-popola l'Inventario). +- **Monitoraggio**: *Segnalazioni ricevute* (whistleblowing) · *Audit interni* · *Audit ACN* (verifiche/report dell'autorità) · *Controlli periodici* · *Riesame di Direzione* (§9.3) · *Scadenziario* (revisioni ricorrenti). +- **Lex e ISO**: *Normative* (Direttiva e decreto) · *Modello SGSI (ISO 27001)* · *Misure e requisiti ACN* (misure tecniche/organizzative). +- **AI**: *AI Cross-Analysis* (analisi trasversale) · *Knowledge Base* (procedure e linee guida). +- **Guida**: *Guida all'uso* · *Compliance Journey* (percorso guidato) · *Integrazioni Esterne* · *Impostazioni* · *Architettura* · *Simulazione Demo*. + +## Dove trovo… (mappa funzioni → menu) + +- **Registrare un incidente** → pulsante **rosso "Registra incidente"** in alto a destra (porta alla pagina Incidenti). +- **Inventario degli asset** → menu **Rischi → Inventario**. +- **Valutare la rilevanza NIS2 di un asset** → menu Rischi → Inventario, pulsante "Valuta Rilevanza NIS2" sulla riga dell'asset. +- **Valutazione del rischio / matrice** → menu **Rischi → Mappa dei rischi**. +- **Misure e requisiti ACN** → menu **Lex e ISO → Misure e requisiti ACN**. +- **Gap analysis / assessment** → menu **Struttura interna → GAP Analysis**. +- **Modello SGSI / SoA / 111 controlli ISO 27001** → menu **Lex e ISO → Modello SGSI (ISO 27001)**. +- **Fornitori / supply chain** → menu **Stakeholders → Supply-Chain**. +- **Segnalazioni whistleblowing** → menu **Monitoraggio → Segnalazioni ricevute**. +- **Impostazioni, membri, API key, branding** → menu utente (in alto a destra) → **Impostazioni**, oppure menu **Guida → Impostazioni**. +- **Cambiare lingua** → selettore **IT/EN** in alto a destra. +- **Aiuto contestuale** → pulsante **"?"** presente nelle pagine (apre la guida della pagina); chat **ARIA** dal FAB in basso a destra. + +## Pagine pubbliche (senza menu in alto) + +Login, registrazione, onboarding, recupero password, landing e la pagina di **segnalazione anonima** NON hanno la barra di navigazione: sono pagine pubbliche. Le pagine standalone `simulate`/`simulate-b2b` (demo) e i portali esterni (questionario fornitore, portale stakeholder) non usano la chrome dell'app. + +## Regole per l'assistente + +- Indica sempre **il menu in alto** e il gruppo (es. "menu **Rischi → Inventario**"). **Non** dire "barra laterale" o "sidebar": non esiste più. +- Usa **solo** i nomi delle voci elencate qui sopra; non inventare moduli, "fasi" o codici. +- Non citare nomi di file o URL interni: l'utente naviga dalle voci di menu. diff --git a/public/admin/index.html b/public/admin/index.html index 3123d47..a74f0ac 100644 --- a/public/admin/index.html +++ b/public/admin/index.html @@ -165,9 +165,9 @@ - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + +