[FIX] Rischi 12 col: titoli gruppo "Rischio Inerente/Residuo" + soglie alert 9-12 (feedback Simon)
Riscontro Simon sulla tabella Gestione Rischi: - Titoli di gruppo sui tripletti Probabilità/Impatto/Valutazione: da "VALUTAZIONE RISCHIO INERENTE/RESIDUO" a "Rischio Inerente"/"Rischio Residuo" (risks.html thead + i18n.js grp_inherent/grp_residual IT+EN). - Ritirata eccezione #3: banda Alert riportata a spec Simon 15-25/9-12/3-8/1-2. Simon ha ragione: con P,I in 1-5 i prodotti 7/11/13/14 non esistono → nessun buco. alertBand resta >=9 (=9-12 in pratica); aggiornati commento, help.js, manuale, KB (9-14 -> 9-12). - Cache-buster help.js/i18n.js -> 20260730b (i18n va bustato o riscrive il titolo). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
7149e762f8
commit
8799620fba
@@ -38,8 +38,8 @@ errore umano) — copre l'approccio multirischio richiesto dall'art. 24 D.Lgs. 1
|
||||
| 11 | **Esito residuo** | *Rivalutare* (9–25) o *Adeguato* (1–8). |
|
||||
| 12 | **Rischio Residuo** | "Valutato" + link per aggiornare **esplicitamente** lo stato di conformità. |
|
||||
|
||||
Le colonne 3-5 sono raggruppate sotto **VALUTAZIONE RISCHIO INERENTE** (prima del trattamento),
|
||||
le 8-10 sotto **VALUTAZIONE RISCHIO RESIDUO** (dopo il trattamento).
|
||||
Le colonne 3-5 sono raggruppate sotto il titolo **Rischio Inerente** (valutazione prima del
|
||||
trattamento), le 8-10 sotto **Rischio Residuo** (valutazione dopo il trattamento).
|
||||
|
||||
## 3. Come valutare un rischio
|
||||
Se sei **Amministratore**, **Compliance Manager** o **super admin**:
|
||||
@@ -54,7 +54,7 @@ In base al punteggio **inerente** compare un pulsante colorato:
|
||||
| Punteggio inerente | Alert | Colore |
|
||||
|--------------------|-------|--------|
|
||||
| 15 – 25 | **Azione Prioritaria** | rosso |
|
||||
| 9 – 14 | **Azione Critica** | rosso tenue |
|
||||
| 9 – 12 | **Azione Critica** | rosso tenue |
|
||||
| 3 – 8 | **Azione Necessaria** | arancione |
|
||||
| 1 – 2 | **Azione Suggerita** | verde |
|
||||
|
||||
@@ -62,7 +62,7 @@ Cliccando l'Alert si apre un pannello con le **azioni già registrate** su quel
|
||||
recente) e una riga in alto con la **data di oggi** e il pulsante **Crea azione** per aggiungerne
|
||||
una nuova. È il primo mattone del futuro **Modulo Azioni** (registro azioni, audit, KPI, budget).
|
||||
|
||||
> Le soglie (15-25, 9-14, …) sono una **scelta metodologica** dell'organizzazione (ISO/IEC 27001
|
||||
> Le soglie (15-25, 9-12, …) sono una **scelta metodologica** dell'organizzazione (ISO/IEC 27001
|
||||
> §6.1.2), non un obbligo di legge.
|
||||
|
||||
## 5. Rischio residuo e conformità: due cose diverse (importante)
|
||||
|
||||
@@ -16,10 +16,10 @@ Ogni rischio ha un codice **RSK-‹misura›Com.‹n›** (es. `RSK-GV.OC-04Com.
|
||||
La tabella dei rischi-da-requisito ha **12 colonne**:
|
||||
1. **Codice rischio** (RSK-…): cliccabile, apre la voce in **Misure e Requisiti**.
|
||||
2. **Descrizione rischio**: il rischio di default associato al requisito nel framework (campo `risk_descr`).
|
||||
3-5. **VALUTAZIONE RISCHIO INERENTE** (prima del trattamento): Probabilità (1-5), Impatto (1-5), Valutazione (= P×I, 1-25).
|
||||
6. **Alert**: dipende dal punteggio inerente — 15-25 *Azione Prioritaria*, 9-14 *Azione Critica*, 3-8 *Azione Necessaria*, 1-2 *Azione Suggerita*. Cliccando si vedono/creano le **azioni** su quel rischio.
|
||||
3-5. Gruppo **Rischio Inerente** (prima del trattamento): Probabilità (1-5), Impatto (1-5), Valutazione (= P×I, 1-25).
|
||||
6. **Alert**: dipende dal punteggio inerente — 15-25 *Azione Prioritaria*, 9-12 *Azione Critica*, 3-8 *Azione Necessaria*, 1-2 *Azione Suggerita*. Cliccando si vedono/creano le **azioni** su quel rischio.
|
||||
7. **Rischio Inerente**: "Valutato" quando inerente è compilato.
|
||||
8-10. **VALUTAZIONE RISCHIO RESIDUO** (dopo il trattamento): Probabilità, Impatto, Valutazione.
|
||||
8-10. Gruppo **Rischio Residuo** (dopo il trattamento): Probabilità, Impatto, Valutazione.
|
||||
11. **Esito residuo**: *Rivalutare* (punteggio residuo 9-25) o *Adeguato* (1-8).
|
||||
12. **Rischio Residuo**: "Valutato" + link per aggiornare **esplicitamente** lo stato di conformità del requisito.
|
||||
|
||||
|
||||
@@ -166,8 +166,8 @@
|
||||
<script src="/js/common.js?v=20260729b"></script>
|
||||
<script src="/vendor/lucide/lucide.min.js"></script>
|
||||
<script src="/js/topnav-v3.js?v=20260729"></script>
|
||||
<script src="/js/i18n.js?v=20260730a"></script>
|
||||
<script src="/js/help.js?v=20260730a"></script>
|
||||
<script src="/js/i18n.js?v=20260730b"></script>
|
||||
<script src="/js/help.js?v=20260730b"></script>
|
||||
<script>
|
||||
// ── Auth check ───────────────────────────────────────────
|
||||
if (!checkAuth()) throw new Error('Not authenticated');
|
||||
|
||||
@@ -89,8 +89,8 @@
|
||||
<script src="/js/common.js?v=20260729b"></script>
|
||||
<script src="/vendor/lucide/lucide.min.js"></script>
|
||||
<script src="/js/topnav-v3.js?v=20260729"></script>
|
||||
<script src="/js/i18n.js?v=20260730a"></script>
|
||||
<script src="/js/help.js?v=20260730a"></script>
|
||||
<script src="/js/i18n.js?v=20260730b"></script>
|
||||
<script src="/js/help.js?v=20260730b"></script>
|
||||
<script>
|
||||
// ── Auth check ───────────────────────────────────────────
|
||||
if (!checkAuth()) throw new Error('Not authenticated');
|
||||
|
||||
@@ -96,8 +96,8 @@
|
||||
<script src="/js/common.js?v=20260729b"></script>
|
||||
<script src="/vendor/lucide/lucide.min.js"></script>
|
||||
<script src="/js/topnav-v3.js?v=20260729"></script>
|
||||
<script src="/js/i18n.js?v=20260730a"></script>
|
||||
<script src="/js/help.js?v=20260730a"></script>
|
||||
<script src="/js/i18n.js?v=20260730b"></script>
|
||||
<script src="/js/help.js?v=20260730b"></script>
|
||||
<script>
|
||||
// ── Auth check ───────────────────────────────────────────
|
||||
if (!checkAuth()) throw new Error('Not authenticated');
|
||||
|
||||
@@ -1126,8 +1126,8 @@
|
||||
<script src="/js/common.js?v=20260729b"></script>
|
||||
<script src="/vendor/lucide/lucide.min.js"></script>
|
||||
<script src="/js/topnav-v3.js?v=20260729"></script>
|
||||
<script src="/js/i18n.js?v=20260730a"></script>
|
||||
<script src="/js/help.js?v=20260730a"></script>
|
||||
<script src="/js/i18n.js?v=20260730b"></script>
|
||||
<script src="/js/help.js?v=20260730b"></script>
|
||||
<script>
|
||||
if (!checkAuth()) throw new Error('Not authenticated');
|
||||
loadSidebar(); // = loadTopnavV3()
|
||||
|
||||
@@ -274,8 +274,8 @@
|
||||
<script src="/js/common.js?v=20260729b"></script>
|
||||
<script src="/vendor/lucide/lucide.min.js"></script>
|
||||
<script src="/js/topnav-v3.js?v=20260729"></script>
|
||||
<script src="/js/i18n.js?v=20260730a"></script>
|
||||
<script src="/js/help.js?v=20260730a"></script>
|
||||
<script src="/js/i18n.js?v=20260730b"></script>
|
||||
<script src="/js/help.js?v=20260730b"></script>
|
||||
<script>
|
||||
// ── Auth check ───────────────────────────────────────────
|
||||
if (!checkAuth()) throw new Error('Not authenticated');
|
||||
|
||||
+2
-2
@@ -381,8 +381,8 @@
|
||||
<script src="/js/common.js?v=20260729b"></script>
|
||||
<script src="/vendor/lucide/lucide.min.js"></script>
|
||||
<script src="/js/topnav-v3.js?v=20260729"></script>
|
||||
<script src="/js/i18n.js?v=20260730a"></script>
|
||||
<script src="/js/help.js?v=20260730a"></script>
|
||||
<script src="/js/i18n.js?v=20260730b"></script>
|
||||
<script src="/js/help.js?v=20260730b"></script>
|
||||
<script>
|
||||
// ── Auth & Init ─────────────────────────────────────────
|
||||
if (!checkAuth()) throw new Error('Not authenticated');
|
||||
|
||||
@@ -194,8 +194,8 @@
|
||||
<script src="/js/common.js?v=20260729b"></script>
|
||||
<script src="/vendor/lucide/lucide.min.js"></script>
|
||||
<script src="/js/topnav-v3.js?v=20260729"></script>
|
||||
<script src="/js/i18n.js?v=20260730a"></script>
|
||||
<script src="/js/help.js?v=20260730a"></script>
|
||||
<script src="/js/i18n.js?v=20260730b"></script>
|
||||
<script src="/js/help.js?v=20260730b"></script>
|
||||
<script>
|
||||
'use strict';
|
||||
/*
|
||||
|
||||
@@ -201,8 +201,8 @@
|
||||
<script src="/js/common.js?v=20260729b"></script>
|
||||
<script src="/vendor/lucide/lucide.min.js"></script>
|
||||
<script src="/js/topnav-v3.js?v=20260729"></script>
|
||||
<script src="/js/i18n.js?v=20260730a"></script>
|
||||
<script src="/js/help.js?v=20260730a"></script>
|
||||
<script src="/js/i18n.js?v=20260730b"></script>
|
||||
<script src="/js/help.js?v=20260730b"></script>
|
||||
<script>
|
||||
if (!checkAuth()) throw new Error('Not authenticated');
|
||||
|
||||
|
||||
@@ -196,8 +196,8 @@
|
||||
<script src="/js/common.js?v=20260729b"></script>
|
||||
<script src="/vendor/lucide/lucide.min.js"></script>
|
||||
<script src="/js/topnav-v3.js?v=20260729"></script>
|
||||
<script src="/js/i18n.js?v=20260730a"></script>
|
||||
<script src="/js/help.js?v=20260730a"></script>
|
||||
<script src="/js/i18n.js?v=20260730b"></script>
|
||||
<script src="/js/help.js?v=20260730b"></script>
|
||||
<script src="/js/competenze.js?v=20260627"></script>
|
||||
<script>
|
||||
function v3Icons() { if (window.lucide && lucide.createIcons) { try { lucide.createIcons(); } catch (e) {} } }
|
||||
|
||||
@@ -102,8 +102,8 @@
|
||||
<script src="/js/common.js?v=20260729b"></script>
|
||||
<script src="/vendor/lucide/lucide.min.js"></script>
|
||||
<script src="/js/topnav-v3.js?v=20260729"></script>
|
||||
<script src="/js/i18n.js?v=20260730a"></script>
|
||||
<script src="/js/help.js?v=20260730a"></script>
|
||||
<script src="/js/i18n.js?v=20260730b"></script>
|
||||
<script src="/js/help.js?v=20260730b"></script>
|
||||
<script src="/js/connettori-discovery.js?v=20260627"></script>
|
||||
<script>
|
||||
if (typeof checkAuth === 'function' && !checkAuth()) {
|
||||
|
||||
@@ -159,8 +159,8 @@
|
||||
<script src="/js/common.js?v=20260729b"></script>
|
||||
<script src="/vendor/lucide/lucide.min.js"></script>
|
||||
<script src="/js/topnav-v3.js?v=20260729"></script>
|
||||
<script src="/js/i18n.js?v=20260730a"></script>
|
||||
<script src="/js/help.js?v=20260730a"></script>
|
||||
<script src="/js/i18n.js?v=20260730b"></script>
|
||||
<script src="/js/help.js?v=20260730b"></script>
|
||||
<script>
|
||||
'use strict';
|
||||
/* Controlli periodici (control monitoring §9.1/A.8.16): controlli ricorrenti + esecuzioni (evidenza) + NC/AC. */
|
||||
|
||||
@@ -226,8 +226,8 @@
|
||||
<script src="/js/common.js?v=20260729b"></script>
|
||||
<script src="/vendor/lucide/lucide.min.js"></script>
|
||||
<script src="/js/topnav-v3.js?v=20260729"></script>
|
||||
<script src="/js/i18n.js?v=20260730a"></script>
|
||||
<script src="/js/help.js?v=20260730a"></script>
|
||||
<script src="/js/i18n.js?v=20260730b"></script>
|
||||
<script src="/js/help.js?v=20260730b"></script>
|
||||
<script>
|
||||
// ── Icone inline (Lucide stroke) usate nelle stringhe HTML generate dal JS.
|
||||
// Renderizzate immediatamente (no createIcons re-run), self-host, niente sprite BI. ──
|
||||
|
||||
@@ -116,8 +116,8 @@
|
||||
<script src="/js/common.js?v=20260729b"></script>
|
||||
<script src="/vendor/lucide/lucide.min.js"></script>
|
||||
<script src="/js/topnav-v3.js?v=20260729"></script>
|
||||
<script src="/js/i18n.js?v=20260730a"></script>
|
||||
<script src="/js/help.js?v=20260730a"></script>
|
||||
<script src="/js/i18n.js?v=20260730b"></script>
|
||||
<script src="/js/help.js?v=20260730b"></script>
|
||||
<script src="/js/dashboard.js?v=20260724a"></script>
|
||||
<script>
|
||||
// ── Auth check ───────────────────────────────────────────
|
||||
|
||||
+2
-2
@@ -1181,8 +1181,8 @@
|
||||
<script src="/js/common.js?v=20260729b"></script>
|
||||
<script src="/vendor/lucide/lucide.min.js"></script>
|
||||
<script src="/js/topnav-v3.js?v=20260729"></script>
|
||||
<script src="/js/i18n.js?v=20260730a"></script>
|
||||
<script src="/js/help.js?v=20260730a"></script>
|
||||
<script src="/js/i18n.js?v=20260730b"></script>
|
||||
<script src="/js/help.js?v=20260730b"></script>
|
||||
<script>
|
||||
// La guida è accessibile anche da non autenticati (utile per onboarding)
|
||||
// ma se sei loggato carichi chrome + i18n normalmente. ZERO modifiche backend.
|
||||
|
||||
@@ -363,8 +363,8 @@
|
||||
<script src="/js/common.js?v=20260729b"></script>
|
||||
<script src="/vendor/lucide/lucide.min.js"></script>
|
||||
<script src="/js/topnav-v3.js?v=20260729"></script>
|
||||
<script src="/js/i18n.js?v=20260730a"></script>
|
||||
<script src="/js/help.js?v=20260730a"></script>
|
||||
<script src="/js/i18n.js?v=20260730b"></script>
|
||||
<script src="/js/help.js?v=20260730b"></script>
|
||||
<script>
|
||||
// ── Auth & Init ──────────────────────────────────────────────
|
||||
if (!checkAuth()) throw new Error('Not authenticated');
|
||||
|
||||
@@ -935,8 +935,8 @@ curl -H <span class="str">"X-API-Key: nis2_TUA_CHIAVE"</span> \
|
||||
<script src="/js/common.js?v=20260729b"></script>
|
||||
<script src="/vendor/lucide/lucide.min.js"></script>
|
||||
<script src="/js/topnav-v3.js?v=20260729"></script>
|
||||
<script src="/js/i18n.js?v=20260730a"></script>
|
||||
<script src="/js/help.js?v=20260730a"></script>
|
||||
<script src="/js/i18n.js?v=20260730b"></script>
|
||||
<script src="/js/help.js?v=20260730b"></script>
|
||||
<script>
|
||||
if (!checkAuth()) throw new Error('Not authenticated');
|
||||
loadSidebar(); // = loadTopnavV3()
|
||||
|
||||
@@ -164,8 +164,8 @@
|
||||
<script src="/js/common.js?v=20260729b"></script>
|
||||
<script src="/vendor/lucide/lucide.min.js"></script>
|
||||
<script src="/js/topnav-v3.js?v=20260729"></script>
|
||||
<script src="/js/i18n.js?v=20260730a"></script>
|
||||
<script src="/js/help.js?v=20260730a"></script>
|
||||
<script src="/js/i18n.js?v=20260730b"></script>
|
||||
<script src="/js/help.js?v=20260730b"></script>
|
||||
<script>
|
||||
'use strict';
|
||||
/*
|
||||
|
||||
+2
-2
@@ -203,8 +203,8 @@
|
||||
<script src="/js/common.js?v=20260729b"></script>
|
||||
<script src="/vendor/lucide/lucide.min.js"></script>
|
||||
<script src="/js/topnav-v3.js?v=20260729"></script>
|
||||
<script src="/js/i18n.js?v=20260730a"></script>
|
||||
<script src="/js/help.js?v=20260730a"></script>
|
||||
<script src="/js/i18n.js?v=20260730b"></script>
|
||||
<script src="/js/help.js?v=20260730b"></script>
|
||||
<script src="/js/isms.js?v=20260627v3"></script>
|
||||
<script>
|
||||
// Icone Lucide della chrome + crumb/page-head statici. L'init dati e il wiring
|
||||
|
||||
+1
-1
@@ -608,7 +608,7 @@ const HelpSystem = (function () {
|
||||
'Il codice <strong>RSK-‹misura›Com.‹n›</strong> e\' una <strong>codifica interna di NIS2 Agile</strong>; ‹misura› (es. GV.OC-04) e\' il codice della misura del Framework Nazionale richiamato dalla Determinazione ACN 164179/2025. <strong>Non</strong> e\' un codice o numero ufficiale ACN.',
|
||||
'La tabella ha <strong>12 colonne</strong>: <strong>Codice rischio</strong> (cliccabile, apre la voce in Misure e Requisiti), <strong>Descrizione rischio</strong> (il rischio di default associato al requisito nel framework), e due valutazioni affiancate — <strong>RISCHIO INERENTE</strong> (prima del trattamento) e <strong>RISCHIO RESIDUO</strong> (dopo il trattamento). Ogni valutazione ha Probabilità, Impatto e Valutazione (= Probabilità × Impatto, scala 1–25).',
|
||||
'I profili <strong>Amministratore</strong>, <strong>Compliance Manager</strong> e <strong>super admin</strong> compilano <strong>direttamente in tabella</strong> Probabilità e Impatto (1–5): la Valutazione si calcola da sola e il salvataggio è automatico. La <strong>Probabilità</strong> è la probabilità che la minaccia sfrutti la carenza del requisito; l\'<strong>Impatto</strong> (scala 1–5, non euro) è la severità della non conformità o del conseguente incidente.',
|
||||
'La colonna <strong>Alert</strong> compare in base al punteggio inerente: <em>Azione Prioritaria</em> (15–25), <em>Azione Critica</em> (9–14), <em>Azione Necessaria</em> (3–8), <em>Azione Suggerita</em> (1–2). Le soglie sono una <strong>scelta metodologica</strong> dell\'organizzazione (rif. ISO/IEC 27001 §6.1.2), <strong>non un obbligo di legge</strong>. Cliccando l\'Alert si apre l\'elenco delle azioni passate su quel rischio e si può <strong>creare una nuova azione</strong>.',
|
||||
'La colonna <strong>Alert</strong> compare in base al punteggio inerente: <em>Azione Prioritaria</em> (15–25), <em>Azione Critica</em> (9–12), <em>Azione Necessaria</em> (3–8), <em>Azione Suggerita</em> (1–2). Le soglie sono una <strong>scelta metodologica</strong> dell\'organizzazione (rif. ISO/IEC 27001 §6.1.2), <strong>non un obbligo di legge</strong>. Cliccando l\'Alert si apre l\'elenco delle azioni passate su quel rischio e si può <strong>creare una nuova azione</strong>.',
|
||||
'La colonna <strong>Esito residuo</strong> segnala se il rischio residuo va <strong>rivalutato</strong> (punteggio 9–25) o è <strong>adeguato</strong> (1–8). <strong>Importante</strong>: il punteggio di rischio residuo <strong>non</strong> determina automaticamente lo <em>stato di conformità</em> del requisito. La <strong>conformità</strong> dipende dall\'attuazione della misura e dalle evidenze e si aggiorna in modo esplicito dal link "stato" nella colonna Rischio Residuo. Sono due piani distinti (punteggio di rischio ≠ conformità al requisito).',
|
||||
'La tabella elenca <strong>solo i requisiti applicabili alla tua classe</strong> (importante → Allegato 1, essenziale → Allegato 2 della Determinazione ACN 164179/2025). Se l\'elenco e\' lungo, il riquadro <strong>scorre verticalmente</strong> con l\'intestazione fissa.',
|
||||
'La seconda tabella, <strong>Rischi aggiuntivi (approccio multirischio / all-hazard)</strong>, permette ai <strong>profili amministrativi</strong> di aggiungere rischi non coperti da un singolo requisito (minacce fisiche, catena di fornitura, eventi naturali): copre l\'approccio multirischio richiesto dall\'art. 24 D.Lgs. 138/2024.'
|
||||
|
||||
+2
-2
@@ -173,8 +173,8 @@ const I18n = (function () {
|
||||
'risks.derived_code_legend': { it: 'RSK-‹misura›Com.‹n› è una codifica interna di NIS2 Agile; ‹misura› (es. GV.OC-04) è il codice della misura del Framework Nazionale richiamato dalla Determinazione ACN 164179/2025. Elenco in sola lettura.', en: 'RSK-‹measure›Com.‹n› is an internal NIS2 Agile code; ‹measure› (e.g. GV.OC-04) is the National Framework measure code referenced by ACN Determination 164179/2025. Read-only list.' },
|
||||
'risks.col_code': { it: 'Codice rischio', en: 'Risk code' },
|
||||
'risks.col_risk': { it: 'Descrizione rischio', en: 'Risk description' },
|
||||
'risks.grp_inherent': { it: 'VALUTAZIONE RISCHIO INERENTE', en: 'INHERENT RISK ASSESSMENT' },
|
||||
'risks.grp_residual': { it: 'VALUTAZIONE RISCHIO RESIDUO', en: 'RESIDUAL RISK ASSESSMENT' },
|
||||
'risks.grp_inherent': { it: 'Rischio Inerente', en: 'Inherent Risk' },
|
||||
'risks.grp_residual': { it: 'Rischio Residuo', en: 'Residual Risk' },
|
||||
'risks.col_alert': { it: 'Alert', en: 'Alert' },
|
||||
'risks.col_inherent': { it: 'Rischio Inerente', en: 'Inherent risk' },
|
||||
'risks.col_res_outcome': { it: 'Esito residuo', en: 'Residual outcome' },
|
||||
|
||||
+2
-2
@@ -179,8 +179,8 @@
|
||||
<script src="/js/common.js?v=20260729b"></script>
|
||||
<script src="/vendor/lucide/lucide.min.js"></script>
|
||||
<script src="/js/topnav-v3.js?v=20260729"></script>
|
||||
<script src="/js/i18n.js?v=20260730a"></script>
|
||||
<script src="/js/help.js?v=20260730a"></script>
|
||||
<script src="/js/i18n.js?v=20260730b"></script>
|
||||
<script src="/js/help.js?v=20260730b"></script>
|
||||
<script src="/js/kb.js"></script>
|
||||
<script>
|
||||
// Gate auth + chrome come le altre pagine V3.
|
||||
|
||||
@@ -151,8 +151,8 @@
|
||||
<script src="/js/common.js?v=20260729b"></script>
|
||||
<script src="/vendor/lucide/lucide.min.js"></script>
|
||||
<script src="/js/topnav-v3.js?v=20260729"></script>
|
||||
<script src="/js/i18n.js?v=20260730a"></script>
|
||||
<script src="/js/help.js?v=20260730a"></script>
|
||||
<script src="/js/i18n.js?v=20260730b"></script>
|
||||
<script src="/js/help.js?v=20260730b"></script>
|
||||
<script>
|
||||
'use strict';
|
||||
/*
|
||||
|
||||
@@ -179,8 +179,8 @@
|
||||
<script src="/js/common.js?v=20260729b"></script>
|
||||
<script src="/vendor/lucide/lucide.min.js"></script>
|
||||
<script src="/js/topnav-v3.js?v=20260729"></script>
|
||||
<script src="/js/i18n.js?v=20260730a"></script>
|
||||
<script src="/js/help.js?v=20260730a"></script>
|
||||
<script src="/js/i18n.js?v=20260730b"></script>
|
||||
<script src="/js/help.js?v=20260730b"></script>
|
||||
<script>
|
||||
'use strict';
|
||||
/*
|
||||
|
||||
@@ -141,8 +141,8 @@
|
||||
<script src="/js/common.js?v=20260729b"></script>
|
||||
<script src="/vendor/lucide/lucide.min.js"></script>
|
||||
<script src="/js/topnav-v3.js?v=20260729"></script>
|
||||
<script src="/js/i18n.js?v=20260730a"></script>
|
||||
<script src="/js/help.js?v=20260730a"></script>
|
||||
<script src="/js/i18n.js?v=20260730b"></script>
|
||||
<script src="/js/help.js?v=20260730b"></script>
|
||||
<script>
|
||||
// ── Auth + chrome + i18n + help ──────────────────────────
|
||||
if (!checkAuth()) throw new Error('Not authenticated');
|
||||
|
||||
@@ -155,8 +155,8 @@
|
||||
<script src="/js/common.js?v=20260729b"></script>
|
||||
<script src="/vendor/lucide/lucide.min.js"></script>
|
||||
<script src="/js/topnav-v3.js?v=20260729"></script>
|
||||
<script src="/js/i18n.js?v=20260730a"></script>
|
||||
<script src="/js/help.js?v=20260730a"></script>
|
||||
<script src="/js/i18n.js?v=20260730b"></script>
|
||||
<script src="/js/help.js?v=20260730b"></script>
|
||||
<script src="/js/organigramma.js?v=20260627"></script>
|
||||
<script>
|
||||
// Render icone Lucide (chrome + crumb + bottoni). organigramma.js fa render albero
|
||||
|
||||
@@ -344,8 +344,8 @@
|
||||
<script src="/js/common.js?v=20260729b"></script>
|
||||
<script src="/vendor/lucide/lucide.min.js"></script>
|
||||
<script src="/js/topnav-v3.js?v=20260729"></script>
|
||||
<script src="/js/i18n.js?v=20260730a"></script>
|
||||
<script src="/js/help.js?v=20260730a"></script>
|
||||
<script src="/js/i18n.js?v=20260730b"></script>
|
||||
<script src="/js/help.js?v=20260730b"></script>
|
||||
<script>
|
||||
// ── Auth & Init ─────────────────────────────────────────
|
||||
if (!checkAuth()) throw new Error('Not authenticated');
|
||||
|
||||
+2
-2
@@ -145,8 +145,8 @@
|
||||
<script src="/js/common.js?v=20260729b"></script>
|
||||
<script src="/vendor/lucide/lucide.min.js"></script>
|
||||
<script src="/js/topnav-v3.js?v=20260729"></script>
|
||||
<script src="/js/i18n.js?v=20260730a"></script>
|
||||
<script src="/js/help.js?v=20260730a"></script>
|
||||
<script src="/js/i18n.js?v=20260730b"></script>
|
||||
<script src="/js/help.js?v=20260730b"></script>
|
||||
<script src="/js/raci.js?v=20260627"></script>
|
||||
<script>
|
||||
function v3Icons() { if (window.lucide && lucide.createIcons) { try { lucide.createIcons(); } catch (e) {} } }
|
||||
|
||||
+2
-2
@@ -236,8 +236,8 @@
|
||||
<script src="/js/common.js?v=20260729b"></script>
|
||||
<script src="/vendor/lucide/lucide.min.js"></script>
|
||||
<script src="/js/topnav-v3.js?v=20260729"></script>
|
||||
<script src="/js/i18n.js?v=20260730a"></script>
|
||||
<script src="/js/help.js?v=20260730a"></script>
|
||||
<script src="/js/i18n.js?v=20260730b"></script>
|
||||
<script src="/js/help.js?v=20260730b"></script>
|
||||
<script>
|
||||
// ── Auth & Init ─────────────────────────────────────────
|
||||
if (!checkAuth()) throw new Error('Not authenticated');
|
||||
|
||||
@@ -161,8 +161,8 @@
|
||||
<script src="/js/common.js?v=20260729b"></script>
|
||||
<script src="/vendor/lucide/lucide.min.js"></script>
|
||||
<script src="/js/topnav-v3.js?v=20260729"></script>
|
||||
<script src="/js/i18n.js?v=20260730a"></script>
|
||||
<script src="/js/help.js?v=20260730a"></script>
|
||||
<script src="/js/i18n.js?v=20260730b"></script>
|
||||
<script src="/js/help.js?v=20260730b"></script>
|
||||
<script>
|
||||
'use strict';
|
||||
/*
|
||||
|
||||
+7
-6
@@ -406,10 +406,10 @@
|
||||
<tr>
|
||||
<th scope="col" rowspan="2" data-i18n="risks.col_code">Codice rischio</th>
|
||||
<th scope="col" rowspan="2" data-i18n="risks.col_risk">Descrizione rischio</th>
|
||||
<th scope="colgroup" colspan="3" class="grp grp-inh" data-i18n="risks.grp_inherent">VALUTAZIONE RISCHIO INERENTE</th>
|
||||
<th scope="colgroup" colspan="3" class="grp grp-inh" data-i18n="risks.grp_inherent">Rischio Inerente</th>
|
||||
<th scope="col" rowspan="2" data-i18n="risks.col_alert">Alert</th>
|
||||
<th scope="col" rowspan="2" data-i18n="risks.col_inherent">Rischio Inerente</th>
|
||||
<th scope="colgroup" colspan="3" class="grp grp-res" data-i18n="risks.grp_residual">VALUTAZIONE RISCHIO RESIDUO</th>
|
||||
<th scope="colgroup" colspan="3" class="grp grp-res" data-i18n="risks.grp_residual">Rischio Residuo</th>
|
||||
<th scope="col" rowspan="2" data-i18n="risks.col_res_outcome">Esito residuo</th>
|
||||
<th scope="col" rowspan="2" data-i18n="risks.col_residual">Rischio Residuo</th>
|
||||
</tr>
|
||||
@@ -544,8 +544,8 @@
|
||||
<script src="/js/common.js?v=20260729b"></script>
|
||||
<script src="/vendor/lucide/lucide.min.js"></script>
|
||||
<script src="/js/topnav-v3.js?v=20260729"></script>
|
||||
<script src="/js/i18n.js?v=20260730a"></script>
|
||||
<script src="/js/help.js?v=20260730a"></script>
|
||||
<script src="/js/i18n.js?v=20260730b"></script>
|
||||
<script src="/js/help.js?v=20260730b"></script>
|
||||
<script>
|
||||
// ── Auth & Init ──────────────────────────────────────────────
|
||||
if (!checkAuth()) throw new Error('Not authenticated');
|
||||
@@ -682,8 +682,9 @@
|
||||
if (p >= 3) return 'rk-med';
|
||||
return 'rk-low';
|
||||
}
|
||||
// ── Banda ALERT sul punteggio INERENTE (prodotto P×I). Eccezione #3: la banda
|
||||
// 13-14 (scoperta nella spec) è inclusa in "Critica" → 9-14 Critica, 15-25 Prioritaria. ──
|
||||
// ── Banda ALERT sul punteggio INERENTE (prodotto P×I). Soglie da spec Simon:
|
||||
// 15-25 Prioritaria, 9-12 Critica, 3-8 Necessaria, 1-2 Suggerita.
|
||||
// NB: con P,I in 1-5 i prodotti 7/11/13/14 NON esistono → nessun buco (conferma Simon). ──
|
||||
function alertBand(p) {
|
||||
if (p == null) return null;
|
||||
if (p >= 15) return { cls: 'alert-pri', label: 'Azione Prioritaria' };
|
||||
|
||||
@@ -739,8 +739,8 @@
|
||||
<script src="/js/common.js?v=20260729b"></script>
|
||||
<script src="/vendor/lucide/lucide.min.js"></script>
|
||||
<script src="/js/topnav-v3.js?v=20260729"></script>
|
||||
<script src="/js/i18n.js?v=20260730a"></script>
|
||||
<script src="/js/help.js?v=20260730a"></script>
|
||||
<script src="/js/i18n.js?v=20260730b"></script>
|
||||
<script src="/js/help.js?v=20260730b"></script>
|
||||
<script>
|
||||
// ── Auth check ───────────────────────────────────────────
|
||||
if (!checkAuth()) throw new Error('Not authenticated');
|
||||
|
||||
@@ -219,8 +219,8 @@
|
||||
<script src="/js/common.js?v=20260729b"></script>
|
||||
<script src="/vendor/lucide/lucide.min.js"></script>
|
||||
<script src="/js/topnav-v3.js?v=20260729"></script>
|
||||
<script src="/js/i18n.js?v=20260730a"></script>
|
||||
<script src="/js/help.js?v=20260730a"></script>
|
||||
<script src="/js/i18n.js?v=20260730b"></script>
|
||||
<script src="/js/help.js?v=20260730b"></script>
|
||||
<script>
|
||||
'use strict';
|
||||
/*
|
||||
|
||||
@@ -214,8 +214,8 @@
|
||||
<script src="/js/common.js?v=20260729b"></script>
|
||||
<script src="/vendor/lucide/lucide.min.js"></script>
|
||||
<script src="/js/topnav-v3.js?v=20260729"></script>
|
||||
<script src="/js/i18n.js?v=20260730a"></script>
|
||||
<script src="/js/help.js?v=20260730a"></script>
|
||||
<script src="/js/i18n.js?v=20260730b"></script>
|
||||
<script src="/js/help.js?v=20260730b"></script>
|
||||
<script>
|
||||
'use strict';
|
||||
/*
|
||||
|
||||
@@ -546,8 +546,8 @@
|
||||
<script src="/js/common.js?v=20260729b"></script>
|
||||
<script src="/vendor/lucide/lucide.min.js"></script>
|
||||
<script src="/js/topnav-v3.js?v=20260729"></script>
|
||||
<script src="/js/i18n.js?v=20260730a"></script>
|
||||
<script src="/js/help.js?v=20260730a"></script>
|
||||
<script src="/js/i18n.js?v=20260730b"></script>
|
||||
<script src="/js/help.js?v=20260730b"></script>
|
||||
<script>
|
||||
// ── Auth & Init ─────────────────────────────────────────
|
||||
if (!checkAuth()) throw new Error('Not authenticated');
|
||||
|
||||
@@ -194,8 +194,8 @@
|
||||
<script src="/js/common.js?v=20260729b"></script>
|
||||
<script src="/vendor/lucide/lucide.min.js"></script>
|
||||
<script src="/js/topnav-v3.js?v=20260729"></script>
|
||||
<script src="/js/i18n.js?v=20260730a"></script>
|
||||
<script src="/js/help.js?v=20260730a"></script>
|
||||
<script src="/js/i18n.js?v=20260730b"></script>
|
||||
<script src="/js/help.js?v=20260730b"></script>
|
||||
<script>
|
||||
// ── Auth & Init (ordine V3) ─────────────────────────────
|
||||
if (!checkAuth()) throw new Error('Not authenticated');
|
||||
|
||||
@@ -262,8 +262,8 @@
|
||||
<script src="/js/common.js?v=20260729b"></script>
|
||||
<script src="/vendor/lucide/lucide.min.js"></script>
|
||||
<script src="/js/topnav-v3.js?v=20260729"></script>
|
||||
<script src="/js/i18n.js?v=20260730a"></script>
|
||||
<script src="/js/help.js?v=20260730a"></script>
|
||||
<script src="/js/i18n.js?v=20260730b"></script>
|
||||
<script src="/js/help.js?v=20260730b"></script>
|
||||
<script>
|
||||
if (!checkAuth()) throw new Error('Not authenticated');
|
||||
loadSidebar();
|
||||
|
||||
@@ -147,8 +147,8 @@
|
||||
<script src="/js/common.js?v=20260729b"></script>
|
||||
<script src="/vendor/lucide/lucide.min.js"></script>
|
||||
<script src="/js/topnav-v3.js?v=20260729"></script>
|
||||
<script src="/js/i18n.js?v=20260730a"></script>
|
||||
<script src="/js/help.js?v=20260730a"></script>
|
||||
<script src="/js/i18n.js?v=20260730b"></script>
|
||||
<script src="/js/help.js?v=20260730b"></script>
|
||||
<script>
|
||||
// ── Auth + chrome + i18n + help ──────────────────────────────
|
||||
if (!checkAuth()) throw new Error('Not authenticated');
|
||||
|
||||
Reference in New Issue
Block a user