[FEAT] #384 p.1 — terminologia Policy unificata

Colonna 'Procedura (default)' -> 'Policy (default)' in misure-requisiti.html;
colonna/dettaglio/campo modale 'Art./Articolo NIS2' -> 'Requisito NIS2' in policies.html;
testi descrittivi pagina Misure e Requisiti + guida help.js allineati al lessico 'policy'.
Cache-buster help.js?v= 20260631 -> 20260618p1 su 28 pagine. version.json 1.23.2 -> 1.23.3.
Punti 2/3/5/6 del ticket restano in lavorazione a fasi.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
DevEnv nis2-agile
2026-06-18 18:18:25 +02:00
co-authored by Claude Opus 4.8
parent 5e6e6f6617
commit 6496c9655d
30 changed files with 39 additions and 39 deletions
+1 -1
View File
@@ -1091,7 +1091,7 @@
<script src="js/api.js?v=20260631"></script>
<script src="js/common.js?v=20260631"></script>
<script src="js/i18n.js?v=20260631"></script>
<script src="js/help.js?v=20260631"></script>
<script src="js/help.js?v=20260618p1"></script>
<script>
if (!checkAuth()) throw new Error('Not authenticated');
loadSidebar();
+1 -1
View File
@@ -167,7 +167,7 @@
</script>
<script src="/js/common-bi.js?v=20260631"></script>
<script src="/js/i18n.js?v=20260631"></script>
<script src="/js/help.js?v=20260631"></script>
<script src="/js/help.js?v=20260618p1"></script>
<script>
// ── Auth check ───────────────────────────────────────────
if (!checkAuth()) throw new Error('Not authenticated');
+1 -1
View File
@@ -374,7 +374,7 @@
</script>
<script src="/js/common-bi.js?v=20260631"></script>
<script src="/js/i18n.js?v=20260631"></script>
<script src="/js/help.js?v=20260631"></script>
<script src="/js/help.js?v=20260618p1"></script>
<script>
// ── Auth & Init ─────────────────────────────────────────
if (!checkAuth()) throw new Error('Not authenticated');
+1 -1
View File
@@ -156,7 +156,7 @@
<script src="/vendor/bootstrap-italia/dist/js/bootstrap-italia.bundle.min.js"></script>
<script src="/js/common-bi.js?v=20260631"></script>
<script src="/js/i18n.js?v=20260631"></script>
<script src="/js/help.js?v=20260631"></script>
<script src="/js/help.js?v=20260618p1"></script>
<script>
'use strict';
/*
+1 -1
View File
@@ -356,7 +356,7 @@
<script>if (window.bootstrap && bootstrap.loadFonts) { bootstrap.loadFonts('vendor/bootstrap-italia/dist/fonts'); }</script>
<script src="js/common-bi.js?v=20260631"></script>
<script src="js/i18n.js?v=20260631"></script>
<script src="js/help.js?v=20260631"></script>
<script src="js/help.js?v=20260618p1"></script>
<script>
if (!checkAuth()) throw new Error('Not authenticated');
+1 -1
View File
@@ -188,7 +188,7 @@
<script src="/vendor/bootstrap-italia/dist/js/bootstrap-italia.bundle.min.js"></script>
<script src="/js/common-bi.js?v=20260631"></script>
<script src="/js/i18n.js?v=20260631"></script>
<script src="/js/help.js?v=20260631"></script>
<script src="/js/help.js?v=20260618p1"></script>
<script src="/js/competenze.js?v=20260617"></script>
</body>
</html>
+1 -1
View File
@@ -141,7 +141,7 @@
<script src="/vendor/bootstrap-italia/dist/js/bootstrap-italia.bundle.min.js"></script>
<script src="/js/common-bi.js?v=20260631"></script>
<script src="/js/i18n.js?v=20260631"></script>
<script src="/js/help.js?v=20260631"></script>
<script src="/js/help.js?v=20260618p1"></script>
<script>
'use strict';
/* Controlli periodici (control monitoring §9.1/A.8.16): controlli ricorrenti + esecuzioni (evidenza) + NC/AC. */
+1 -1
View File
@@ -156,7 +156,7 @@
</script>
<script src="/js/common-bi.js?v=20260631"></script>
<script src="/js/i18n.js?v=20260631"></script>
<script src="/js/help.js?v=20260631"></script>
<script src="/js/help.js?v=20260618p1"></script>
<script>
// ── Auth check ───────────────────────────────────────────
if (!checkAuth()) throw new Error('Not authenticated');
+1 -1
View File
@@ -1154,7 +1154,7 @@
</script>
<script src="/js/common-bi.js?v=20260631"></script>
<script src="/js/i18n.js?v=20260631"></script>
<script src="/js/help.js?v=20260631"></script>
<script src="/js/help.js?v=20260618p1"></script>
<script>
// La guida è accessibile anche da non autenticati (utile per onboarding)
// ma se sei loggato carichi sidebar + i18n normalmente. Stessa logica
+1 -1
View File
@@ -364,7 +364,7 @@
</script>
<script src="/js/common-bi.js?v=20260631"></script>
<script src="/js/i18n.js?v=20260631"></script>
<script src="/js/help.js?v=20260631"></script>
<script src="/js/help.js?v=20260618p1"></script>
<script>
// ── Auth & Init ──────────────────────────────────────────────
if (!checkAuth()) throw new Error('Not authenticated');
+1 -1
View File
@@ -144,7 +144,7 @@
<script src="/vendor/bootstrap-italia/dist/js/bootstrap-italia.bundle.min.js"></script>
<script src="/js/common-bi.js?v=20260631"></script>
<script src="/js/i18n.js?v=20260631"></script>
<script src="/js/help.js?v=20260631"></script>
<script src="/js/help.js?v=20260618p1"></script>
<script>
'use strict';
/*
+1 -1
View File
@@ -197,7 +197,7 @@
</script>
<script src="/js/common-bi.js?v=20260631"></script>
<script src="/js/i18n.js?v=20260631"></script>
<script src="/js/help.js?v=20260631"></script>
<script src="/js/help.js?v=20260618p1"></script>
<script src="/js/isms.js"></script>
</body>
</html>
+3 -3
View File
@@ -318,13 +318,13 @@ const HelpSystem = (function () {
// ─── Misure e Requisiti — elenco canonico (Epic C / C1) ───────
'misure-requisiti': {
title: 'Guida - Misure e Requisiti',
intro: 'Questa pagina mostra l\'elenco canonico delle misure di sicurezza di base e dei relativi requisiti previsti dalla Determinazione ACN n. 164179 del 14 aprile 2025. Per ogni requisito sono indicati la procedura di default che lo soddisfa e il rischio di default associato. È un elenco di riferimento in sola lettura: la codifica e l\'ordine non sono modificabili. È uno strumento di supporto, non un parere legale.',
intro: 'Questa pagina mostra l\'elenco canonico delle misure di sicurezza di base e dei relativi requisiti previsti dalla Determinazione ACN n. 164179 del 14 aprile 2025. Per ogni requisito sono indicati la policy di default che lo soddisfa e il rischio di default associato. È un elenco di riferimento in sola lettura: la codifica e l\'ordine non sono modificabili. È uno strumento di supporto, non un parere legale.',
sections: [
{
heading: 'Come è organizzato',
items: [
'Le <strong>misure</strong> sono 43 in totale; ogni misura è descritta da uno o più <strong>requisiti</strong> (i singoli punti/commi).',
'A ogni requisito è abbinata una <strong>procedura di default</strong> (che lo risolve) e un <strong>rischio di default</strong>: queste alimentano, come contenuto iniziale modificabile, i moduli Procedure e Rischi.',
'A ogni requisito è abbinata una <strong>policy di default</strong> (che lo risolve) e un <strong>rischio di default</strong>: queste alimentano, come contenuto iniziale modificabile, i moduli Policy e Rischi.',
'La <strong>valutazione del rischio</strong> parte vuota: la compili tu nel modulo Rischi. È da lì, e dall\'analisi degli stakeholder, che emerge lo stato di conformità dell\'azienda.'
]
},
@@ -342,7 +342,7 @@ const HelpSystem = (function () {
'Quando lavori nel contesto di un\'organizzazione, ogni requisito mostra una colonna <strong>Stato / Valutazione</strong>: ci clicchi sopra per registrare lo <strong>stato</strong> (da valutare, non applicabile, non conforme, parziale, conforme) e la <strong>valutazione del rischio</strong> (che parte vuota).',
'È da questa valutazione, requisito per requisito, e dall\'analisi degli stakeholder che <strong>emerge lo stato di conformità</strong> dell\'azienda: non serve un modulo "gap analysis" separato.',
'La valutazione è un dato della tua organizzazione (modificabile); la codifica del requisito, invece, resta intatta.',
'Le <strong>procedure di default</strong> associate ai requisiti vengono caricate automaticamente, al primo accesso, nel modulo <strong>Policy/Procedure</strong>, dove puoi personalizzarle o eliminarle.'
'Le <strong>policy di default</strong> associate ai requisiti vengono caricate automaticamente, al primo accesso, nel modulo <strong>Policy</strong>, dove puoi personalizzarle o eliminarle.'
]
},
{
+1 -1
View File
@@ -163,7 +163,7 @@
</script>
<script src="/js/common-bi.js?v=20260631"></script>
<script src="/js/i18n.js?v=20260631"></script>
<script src="/js/help.js?v=20260631"></script>
<script src="/js/help.js?v=20260618p1"></script>
<script src="/js/kb.js"></script>
<script>
// Gate auth + chrome come le altre pagine -bi.
+1 -1
View File
@@ -131,7 +131,7 @@
<script src="/vendor/bootstrap-italia/dist/js/bootstrap-italia.bundle.min.js"></script>
<script src="/js/common-bi.js?v=20260631"></script>
<script src="/js/i18n.js?v=20260631"></script>
<script src="/js/help.js?v=20260631"></script>
<script src="/js/help.js?v=20260618p1"></script>
<script>
'use strict';
/*
+4 -4
View File
@@ -90,10 +90,10 @@
<div class="content-body">
<div class="mr-intro">
<strong>L'elenco canonico delle misure di sicurezza di base e dei relativi requisiti.</strong>
Ogni requisito riporta la <strong>procedura di default</strong> che lo soddisfa e il <strong>rischio di default</strong> associato. È la base su cui si costruiscono procedure, rischi e attività: le righe si "spengono" quando non sono applicabili alla classe del tuo soggetto.
Ogni requisito riporta la <strong>policy di default</strong> che lo soddisfa e il <strong>rischio di default</strong> associato. È la base su cui si costruiscono policy, rischi e attività: le righe si "spengono" quando non sono applicabili alla classe del tuo soggetto.
</div>
<div class="mr-ro">
🔒 <span>Elenco di riferimento, <strong>sola lettura</strong>: la codifica (misure, requisiti, ordine) non è modificabile. Procedure e rischi qui elencati vengono proposti come <em>default</em> nei rispettivi moduli, dove potrai personalizzarli.</span>
🔒 <span>Elenco di riferimento, <strong>sola lettura</strong>: la codifica (misure, requisiti, ordine) non è modificabile. Policy e rischi qui elencati vengono proposti come <em>default</em> nei rispettivi moduli, dove potrai personalizzarli.</span>
</div>
<div class="mr-note">
Fonte: <strong>Determinazione ACN n. 164179 del 14 aprile 2025</strong> (misure di base, Allegati 1–2). Le misure applicabili dipendono dalla classe del soggetto: <strong>importanti</strong> 37 misure / 92 requisiti, <strong>essenziali</strong> 43 / 116. Strumento di supporto, non un parere legale.
@@ -167,7 +167,7 @@
<script src="/vendor/bootstrap-italia/dist/js/bootstrap-italia.bundle.min.js"></script>
<script src="/js/common-bi.js?v=20260631"></script>
<script src="/js/i18n.js?v=20260631"></script>
<script src="/js/help.js?v=20260631"></script>
<script src="/js/help.js?v=20260618p1"></script>
<script>
'use strict';
/*
@@ -283,7 +283,7 @@
if (g.descr) html += '<div class="descr">' + esc(g.descr) + '</div>';
html += '</div>';
html += '<table class="mr-table"><thead><tr>' +
'<th>Requisito</th><th>Descrizione</th><th>Procedura (default)</th><th>Rischio (default)</th>' +
'<th>Requisito</th><th>Descrizione</th><th>Policy (default)</th><th>Rischio (default)</th>' +
'<th style="text-align:center">Imp.</th><th style="text-align:center">Ess.</th>' +
(MR.has_org ? '<th>Stato / Valutazione</th>' : '') + '</tr></thead><tbody>';
g.rows.forEach(function (r) {
+1 -1
View File
@@ -125,7 +125,7 @@
</script>
<script src="/js/common-bi.js?v=20260631"></script>
<script src="/js/i18n.js?v=20260631"></script>
<script src="/js/help.js?v=20260631"></script>
<script src="/js/help.js?v=20260618p1"></script>
<script>
if (!checkAuth()) throw new Error('Not authenticated');
loadSidebar();
+1 -1
View File
@@ -143,7 +143,7 @@
<script src="/vendor/bootstrap-italia/dist/js/bootstrap-italia.bundle.min.js"></script>
<script src="/js/common-bi.js?v=20260631"></script>
<script src="/js/i18n.js?v=20260631"></script>
<script src="/js/help.js?v=20260631"></script>
<script src="/js/help.js?v=20260618p1"></script>
<script src="/js/organigramma.js?v=20260617"></script>
</body>
</html>
+5 -5
View File
@@ -346,7 +346,7 @@
</script>
<script src="/js/common-bi.js?v=20260631"></script>
<script src="/js/i18n.js?v=20260631"></script>
<script src="/js/help.js?v=20260631"></script>
<script src="/js/help.js?v=20260618p1"></script>
<script>
// ── Auth & Init ─────────────────────────────────────────
if (!checkAuth()) throw new Error('Not authenticated');
@@ -455,7 +455,7 @@
<tr>
<th>Titolo</th>
<th>Categoria</th>
<th>Art. NIS2</th>
<th>Requisito NIS2</th>
<th>Versione</th>
<th>Stato</th>
<th>Prossima Revisione</th>
@@ -592,7 +592,7 @@
<span class="meta-value">${escapeHtml(catLabel)}</span>
</div>
<div class="meta-row">
<span class="meta-label">Art. NIS2</span>
<span class="meta-label">Requisito NIS2</span>
<span class="meta-value">${escapeHtml(policy.nis2_article || '-')}</span>
</div>
<div class="meta-row">
@@ -678,8 +678,8 @@
</select>
</div>
<div class="form-group">
<label for="form-nis2-article" class="form-label">Articolo NIS2</label>
<input type="text" class="form-input" id="form-nis2-article" value="${isEdit && policy.nis2_article ? escapeHtml(policy.nis2_article) : ''}" placeholder="es. 21.2.a">
<label for="form-nis2-article" class="form-label">Requisito NIS2</label>
<input type="text" class="form-input" id="form-nis2-article" value="${isEdit && policy.nis2_article ? escapeHtml(policy.nis2_article) : ''}" placeholder="es. PR.PS-01">
</div>
</div>
<div class="form-row" style="display:grid;grid-template-columns:1fr 1fr;gap:16px;">
+1 -1
View File
@@ -136,7 +136,7 @@
<script src="/vendor/bootstrap-italia/dist/js/bootstrap-italia.bundle.min.js"></script>
<script src="/js/common-bi.js?v=20260631"></script>
<script src="/js/i18n.js?v=20260631"></script>
<script src="/js/help.js?v=20260631"></script>
<script src="/js/help.js?v=20260618p1"></script>
<script src="/js/raci.js?v=20260619"></script>
</body>
</html>
+1 -1
View File
@@ -456,7 +456,7 @@
</script>
<script src="/js/common-bi.js?v=20260631"></script>
<script src="/js/i18n.js?v=20260631"></script>
<script src="/js/help.js?v=20260631"></script>
<script src="/js/help.js?v=20260618p1"></script>
<script>
// ── Auth & Init ─────────────────────────────────────────
if (!checkAuth()) throw new Error('Not authenticated');
+1 -1
View File
@@ -146,7 +146,7 @@
<script src="/vendor/bootstrap-italia/dist/js/bootstrap-italia.bundle.min.js"></script>
<script src="/js/common-bi.js?v=20260631"></script>
<script src="/js/i18n.js?v=20260631"></script>
<script src="/js/help.js?v=20260631"></script>
<script src="/js/help.js?v=20260618p1"></script>
<script>
'use strict';
/*
+1 -1
View File
@@ -507,7 +507,7 @@
</script>
<script src="/js/common-bi.js?v=20260631"></script>
<script src="/js/i18n.js?v=20260631"></script>
<script src="/js/help.js?v=20260631"></script>
<script src="/js/help.js?v=20260618p1"></script>
<script>
// ── Auth & Init ──────────────────────────────────────────────
if (!checkAuth()) throw new Error('Not authenticated');
+1 -1
View File
@@ -685,7 +685,7 @@
</script>
<script src="/js/common-bi.js?v=20260631"></script>
<script src="/js/i18n.js?v=20260631"></script>
<script src="/js/help.js?v=20260631"></script>
<script src="/js/help.js?v=20260618p1"></script>
<script>
// ── Auth check ───────────────────────────────────────────
if (!checkAuth()) throw new Error('Not authenticated');
+1 -1
View File
@@ -199,7 +199,7 @@
<script src="/vendor/bootstrap-italia/dist/js/bootstrap-italia.bundle.min.js"></script>
<script src="/js/common-bi.js?v=20260631"></script>
<script src="/js/i18n.js?v=20260631"></script>
<script src="/js/help.js?v=20260631"></script>
<script src="/js/help.js?v=20260618p1"></script>
<script>
'use strict';
/*
+1 -1
View File
@@ -196,7 +196,7 @@
<script src="/vendor/bootstrap-italia/dist/js/bootstrap-italia.bundle.min.js"></script>
<script src="/js/common-bi.js?v=20260631"></script>
<script src="/js/i18n.js?v=20260631"></script>
<script src="/js/help.js?v=20260631"></script>
<script src="/js/help.js?v=20260618p1"></script>
<script>
'use strict';
/*
+1 -1
View File
@@ -490,7 +490,7 @@
</script>
<script src="/js/common-bi.js?v=20260631"></script>
<script src="/js/i18n.js?v=20260631"></script>
<script src="/js/help.js?v=20260631"></script>
<script src="/js/help.js?v=20260618p1"></script>
<script>
// ── Auth & Init ─────────────────────────────────────────
if (!checkAuth()) throw new Error('Not authenticated');
+1 -1
View File
@@ -305,7 +305,7 @@
</script>
<script src="/js/common-bi.js?v=20260631"></script>
<script src="/js/i18n.js?v=20260631"></script>
<script src="/js/help.js?v=20260631"></script>
<script src="/js/help.js?v=20260618p1"></script>
<script>
// ── Auth & Init ─────────────────────────────────────────
if (!checkAuth()) throw new Error('Not authenticated');
+1 -1
View File
@@ -1 +1 @@
{"version": "1.23.2", "build": "2026-06-18-v1.23.2", "date": "2026-06-18", "changelog": "Fix allineamento etichette/campi nella modale 'Modifica Policy' (ticket #384 punto 4): override del floating-label di Bootstrap Italia che, su tutte le modali con form legacy (.form-label), sovrapponeva l'etichetta al valore del campo. Le etichette tornano sopra il campo. Cache-buster style.css -> 20260618 su 38 pagine. NB: l'unificazione degli archivi Policy/Procedure, i link M:N requisito<->policy, gli allegati e la matrice RACI per policy (restanti punti del ticket #384) sono in lavorazione a fasi."}
{"version": "1.23.3", "build": "2026-06-18-v1.23.3", "date": "2026-06-18", "changelog": "Ticket #384 punto 1 (terminologia): unificazione lessicale Policy/Procedura. In 'Misure e Requisiti' la colonna 'Procedura (default)' diventa 'Policy (default)'; in 'Policy' la colonna/campo 'Art./Articolo NIS2' diventa 'Requisito NIS2'. Aggiornati anche i testi descrittivi della pagina Misure e Requisiti e la relativa guida (help.js, cache-buster ->20260618p1 su 28 pagine). Restano in lavorazione a fasi: unificazione archivi M:N requisito<->policy con ricodifica Proc.->Policy (punto 2), link attivi tra i due menu (punto 3), allegati (punto 5), matrice RACI per policy (punto 6)."}
+1 -1
View File
@@ -220,7 +220,7 @@
</script>
<script src="/js/common-bi.js?v=20260631"></script>
<script src="/js/i18n.js?v=20260631"></script>
<script src="/js/help.js?v=20260631"></script>
<script src="/js/help.js?v=20260618p1"></script>
<script>
if (!checkAuth()) throw new Error('Not authenticated');
loadSidebar();