From 7a23789b0f9ea2b2e530a1938c65ab7bb437f3a4 Mon Sep 17 00:00:00 2001 From: DevEnv nis2-agile Date: Sun, 31 May 2026 08:51:30 +0200 Subject: [PATCH] [FIX] ri-review guida: 2 fix guida + 2 fix prodotto UI orfane cap-5: sei->quattro modalita + chiosa adeguatezza-ruolo sotto GV.RR-04 (non GV.PO-01) cap-7: nomi bottoni allineati alla UI (Invia Report Finale 30gg) assets.html: bottone Importa (openImportModal era orfana) reports.html: tab Requisiti ACN (loadAcnRequirements -> endpoint esistente, 87/116 per entity_type) Co-Authored-By: Claude Opus 4.8 (1M context) --- public/assets.html | 1 + public/guida.html | 11 ++++---- public/reports.html | 65 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 72 insertions(+), 5 deletions(-) diff --git a/public/assets.html b/public/assets.html index 70e3464..e54d72e 100644 --- a/public/assets.html +++ b/public/assets.html @@ -264,6 +264,7 @@

Inventario Asset

Art. 21.2.i NIS2 +
diff --git a/public/guida.html b/public/guida.html index 87a72dd..32db68c 100644 --- a/public/guida.html +++ b/public/guida.html @@ -425,7 +425,7 @@

Come si fa nella piattaforma

  1. Vai su Gap Analysis e clicca "Nuovo Assessment".
  2. -
  3. Rispondi alle 80 domande (sei modalità: implementato / parziale / non implementato / non applicabile).
  4. +
  5. Rispondi alle 80 domande (quattro modalità: implementato / parziale / non implementato / non applicabile).
  6. Per ogni risposta, indica il livello di maturità (0–5).
  7. Salva: puoi continuare in più sessioni.
  8. Quando finisci, clicca "Analisi AI" per ricevere raccomandazioni prioritarie.
  9. @@ -449,9 +449,10 @@
    Esempio (requisiti di governance). GV.RR-04 richiede che la cybersicurezza sia integrata nella gestione delle risorse umane: chi accede ai sistemi (utenti e amministratori) deve - avere competenze e affidabilità adeguate al ruolo, valutate e documentate. + avere competenze e affidabilità adeguate al ruolo, valutate e documentate — è il + "controllo di adeguatezza al ruolo" delle figure chiave dell'organigramma. GV.PO-01 richiede una policy di gestione del rischio cyber formalizzata, - comunicata e applicata. È il "controllo di adeguatezza al ruolo" delle figure chiave dell'organigramma. + comunicata e applicata.
    Come si collega alla piattaforma. Le 80 domande della Gap Analysis @@ -612,8 +613,8 @@
  10. Vai su Incidenti e clicca "+ Nuovo Incidente".
  11. Compila titolo, classificazione, severità, ora di rilevazione.
  12. Il sistema calcola automaticamente le 3 scadenze (24h / 72h / 1 mese).
  13. -
  14. Quando arriva il momento, usa i bottoni "Invia Early Warning", - "Invia Notifica" e "Invia Final Report": le email partono verso +
  15. Quando arriva il momento, usa i bottoni "Invia Early Warning (24h)", + "Invia Notifica (72h)" e "Invia Report Finale (30gg)": le email partono verso l'indirizzo CSIRT configurato.
  16. Aggiorna lo stato dell'incidente (analisi → contenimento → eradicazione → recovery → chiuso).
  17. Compila root cause e lezioni apprese alla chiusura.
  18. diff --git a/public/reports.html b/public/reports.html index 7a98735..cbc24e6 100644 --- a/public/reports.html +++ b/public/reports.html @@ -360,6 +360,7 @@ +
    @@ -412,6 +413,15 @@ + +
    +
    +
    +
    +

    Caricamento requisiti ACN...

    +
    +
    +
    @@ -479,6 +489,61 @@ if (tabId === 'audit') { auditPage = 1; loadAuditLogs(); } if (tabId === 'iso') loadIsoMapping(); if (tabId === 'monitoring') loadMonitoring(); + if (tabId === 'acn') loadAcnRequirements(); + } + + // ── Requisiti ACN (specifiche di base, Determina 164179/2025) ────────── + const ACN_ST = { + not_started: ['Da iniziare', '#9ca3af'], + in_progress: ['In corso', '#eab308'], + implemented: ['Implementato', '#22c55e'], + not_applicable:['Non applicabile', '#64748b'] + }; + async function loadAcnRequirements() { + const c = document.getElementById('acn-container'); + if (!c) return; + c.innerHTML = '

    Caricamento...

    '; + let res; + try { res = await api.getAcnRequirements(); } + catch (e) { c.innerHTML = '

    Errore di connessione

    '; return; } + if (!res.success) { c.innerHTML = '

    ' + escapeHtml(res.message || 'Errore') + '

    '; return; } + const d = res.data; + const s = d.summary || {}; + const cards = ['implemented','in_progress','not_started','not_applicable'].map(k => + `
    +
    ${s[k]||0}
    ${ACN_ST[k][0]}
    `).join(''); + const groups = {}; + (d.requirements||[]).forEach(r => { (groups[r.function_name] = groups[r.function_name] || []).push(r); }); + let body = ''; + Object.keys(groups).forEach(fn => { + const reqs = groups[fn]; + body += `

    ${escapeHtml(fn)} (${reqs.length})

    `; + body += ''; + reqs.forEach(r => { + const st = ACN_ST[r.status] || ACN_ST.not_started; + const opts = Object.keys(ACN_ST).map(k => ``).join(''); + body += ` + + + `; + }); + body += '
    Sottocat.RequisitoStato
    ${escapeHtml(r.subcategory)}${escapeHtml(r.requirement)} +
    '; + }); + c.innerHTML = ` +

    + Requisiti operativi specifiche di base ACN (Determina 164179/2025, Framework Nazionale 2025) + per questa organizzazione (${escapeHtml(d.entity)}: ${d.total} requisiti). + Compliance: ${d.compliance_percent}%. ${escapeHtml(d.source||'')}

    +
    ${cards}
    + ${body}`; + } + async function updateAcn(id, status) { + try { + const res = await api.updateAcnRequirement(id, status, null); + if (res.success) { if (typeof showNotification==='function') showNotification('Stato aggiornato', 'success'); loadAcnRequirements(); } + else if (typeof showNotification==='function') showNotification(res.message || 'Errore', 'error'); + } catch (e) { if (typeof showNotification==='function') showNotification('Errore di connessione', 'error'); } } // ── Continuous Control Monitoring (P1) ───────────────────────