[FEAT] A4 Fasi 4.4 + 4.5 (A4 COMPLETA 5/5): scadenziario centralizzato review_schedule (mig.044; ReviewScheduleController list/create/update/delete/complete/sync) + stakeholder estesi clienti/partner GV.SC-02 (mig.045 suppliers.stakeholder_type, SupplyChainController::stakeholderMap). Pagine review-schedule.html + stakeholders.html (Bootstrap Italia/AGID). Workflow build+review adversariale (3 major risolti: 045 da DELIMITER -> ALTER bare runner-safe). help GV.SC-04/05 allineati al titolo canonico ACN. Cache-buster ?v=20260620.
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
c7d36c910f
commit
c5b00ccd96
@@ -270,6 +270,33 @@ class NIS2API {
|
||||
raciLink(d) { return this._acn(this.post('/raci/link', d)); }
|
||||
raciUnlink(d) { return this._acn(this.del('/raci/link?link_type=' + encodeURIComponent(d.link_type) + '&a_id=' + encodeURIComponent(d.a_id) + '&b_id=' + encodeURIComponent(d.b_id))); }
|
||||
|
||||
// ═══════════════════════════════════════════════════════════════════
|
||||
// Scadenziario centralizzato (A4 Fase 4.4) — review_schedule. _acn.
|
||||
// Revisioni periodiche (GV.PO-02/GV.SC-07/PR.AT/DE.CM). Status calcolato live.
|
||||
// DELETE per {id} numerico (no body). sync = import idempotente da scadenze esistenti.
|
||||
// Alias rs* === rev* (stessa firma) per compatibilità di naming.
|
||||
// ═══════════════════════════════════════════════════════════════════
|
||||
revList() { return this._acn(this.get('/review-schedule/list')); }
|
||||
revCreate(d) { return this._acn(this.post('/review-schedule/create', d || {})); }
|
||||
revUpdate(id, d) { return this._acn(this.put(`/review-schedule/${id}`, d)); }
|
||||
revDelete(id) { return this._acn(this.del(`/review-schedule/${id}`)); }
|
||||
revComplete(id) { return this._acn(this.post(`/review-schedule/${id}/complete`, {})); }
|
||||
revSync() { return this._acn(this.post('/review-schedule/sync', {})); }
|
||||
rsList() { return this.revList(); }
|
||||
rsCreate(d) { return this.revCreate(d); }
|
||||
rsUpdate(id, d) { return this.revUpdate(id, d); }
|
||||
rsDelete(id) { return this.revDelete(id); }
|
||||
rsComplete(id) { return this.revComplete(id); }
|
||||
rsSync() { return this.revSync(); }
|
||||
|
||||
// ═══════════════════════════════════════════════════════════════════
|
||||
// Stakeholder estesi (A4 Fase 4.5) — riusa suppliers (GV.SC-02).
|
||||
// stakeholderMap = vista di sintesi raggruppata (supplier/customer/partner). _acn.
|
||||
// Per aggiungere/etichettare clienti/partner riusare createSupplier/updateSupplier
|
||||
// passando `stakeholder_type` nel data (NB: NON sono _acn → gestire r.success).
|
||||
// ═══════════════════════════════════════════════════════════════════
|
||||
stakeholderMap() { return this._acn(this.get('/supply-chain/stakeholder-map')); }
|
||||
|
||||
// ═══════════════════════════════════════════════════════════════════
|
||||
// Dashboard
|
||||
// ═══════════════════════════════════════════════════════════════════
|
||||
|
||||
@@ -198,10 +198,12 @@ function loadSidebar() {
|
||||
{ name: 'Organigramma', href: 'organigramma.html', icon: `<svg viewBox="0 0 20 20" fill="currentColor"><path d="M8 2.5h4a.5.5 0 01.5.5v2a.5.5 0 01-.5.5h-1.25v2.5H15a.5.5 0 01.5.5v1.25H17a.5.5 0 01.5.5v3a.5.5 0 01-.5.5h-4a.5.5 0 01-.5-.5v-3a.5.5 0 01.5-.5h1.25V9.5H6v1.25H7.5a.5.5 0 01.5.5v3a.5.5 0 01-.5.5h-4a.5.5 0 01-.5-.5v-3a.5.5 0 01.5-.5H4.5V9.5a.5.5 0 01.5-.5h4.75V6H8a.5.5 0 01-.5-.5V3a.5.5 0 01.5-.5z"/></svg>`, i18nKey: 'nav.org_chart' },
|
||||
{ name: 'Competenze', href: 'competenze.html', icon: `<svg viewBox="0 0 20 20" fill="currentColor"><path d="M5 2a1 1 0 011 1v1h1a1 1 0 010 2H6v1a1 1 0 11-2 0V6H3a1 1 0 010-2h1V3a1 1 0 011-1zm0 10a1 1 0 011 1v1h1a1 1 0 110 2H6v1a1 1 0 11-2 0v-1H3a1 1 0 110-2h1v-1a1 1 0 011-1zM12 2a1 1 0 01.967.744L14.146 7.2 17.5 8.134a1 1 0 010 1.732l-3.354.934-1.18 4.455a1 1 0 01-1.933 0L9.854 10.8 6.5 9.866a1 1 0 010-1.732l3.354-.934 1.179-4.456A1 1 0 0112 2z"/></svg>`, i18nKey: 'nav.competences' },
|
||||
{ name: 'Matrice RACI', href: 'raci.html', icon: `<svg viewBox="0 0 20 20" fill="currentColor"><path fill-rule="evenodd" d="M3 4a1 1 0 011-1h12a1 1 0 011 1v2a1 1 0 01-1 1H4a1 1 0 01-1-1V4zm0 6a1 1 0 011-1h5a1 1 0 011 1v6a1 1 0 01-1 1H4a1 1 0 01-1-1v-6zm9 0a1 1 0 011-1h3a1 1 0 011 1v6a1 1 0 01-1 1h-3a1 1 0 01-1-1v-6z" clip-rule="evenodd"/></svg>`, i18nKey: 'nav.raci' },
|
||||
{ name: 'Scadenziario', href: 'review-schedule.html', icon: `<svg viewBox="0 0 20 20" fill="currentColor"><path fill-rule="evenodd" d="M6 2a1 1 0 00-1 1v1H4a2 2 0 00-2 2v10a2 2 0 002 2h12a2 2 0 002-2V6a2 2 0 00-2-2h-1V3a1 1 0 10-2 0v1H7V3a1 1 0 00-1-1zm0 5a1 1 0 000 2h8a1 1 0 100-2H6z" clip-rule="evenodd"/></svg>`, i18nKey: 'nav.review_schedule' },
|
||||
{ name: 'Rischi', href: 'risks.html', icon: iconShieldExclamation(), i18nKey: 'nav.risks' },
|
||||
{ name: 'Incidenti', href: 'incidents.html', icon: iconBell(), i18nKey: 'nav.incidents' },
|
||||
{ name: 'Policy', href: 'policies.html', icon: iconDocumentText(), i18nKey: 'nav.policies' },
|
||||
{ name: 'Supply Chain', href: 'supply-chain.html', icon: iconLink(), i18nKey: 'nav.supply_chain' },
|
||||
{ name: 'Stakeholder', href: 'stakeholders.html', icon: `<svg viewBox="0 0 20 20" fill="currentColor"><path fill-rule="evenodd" d="M10 9a3 3 0 100-6 3 3 0 000 6zm-7 9a7 7 0 1114 0H3z" clip-rule="evenodd"/><path d="M5.5 7.5a2 2 0 11-2.999.001A2 2 0 015.5 7.5zM17.5 7.5a2 2 0 11-2.999.001A2 2 0 0117.5 7.5z"/></svg>`, i18nKey: 'nav.stakeholders' },
|
||||
{ name: 'Segnalazioni', href: 'whistleblowing.html', icon: `<svg viewBox="0 0 20 20" fill="currentColor"><path fill-rule="evenodd" d="M5 9V7a5 5 0 0110 0v2a2 2 0 012 2v5a2 2 0 01-2 2H5a2 2 0 01-2-2v-5a2 2 0 012-2zm8-2v2H7V7a3 3 0 016 0z" clip-rule="evenodd"/></svg>` },
|
||||
{ name: 'Normative', href: 'normative.html', icon: `<svg viewBox="0 0 20 20" fill="currentColor"><path fill-rule="evenodd" d="M4 4a2 2 0 012-2h4.586A2 2 0 0112 2.586L15.414 6A2 2 0 0116 7.414V16a2 2 0 01-2 2H6a2 2 0 01-2-2V4zm2 6a1 1 0 011-1h6a1 1 0 110 2H7a1 1 0 01-1-1zm1 3a1 1 0 100 2h6a1 1 0 100-2H7z" clip-rule="evenodd"/></svg>` },
|
||||
{ name: 'AI Cross-Analysis', href: 'cross-analysis.html', icon: `<svg viewBox="0 0 20 20" fill="currentColor"><path d="M13 6a3 3 0 11-6 0 3 3 0 016 0zM18 8a2 2 0 11-4 0 2 2 0 014 0zM14 15a4 4 0 00-8 0v3h8v-3zM6 8a2 2 0 11-4 0 2 2 0 014 0zM16 18v-3a5.972 5.972 0 00-.75-2.906A3.005 3.005 0 0119 15v3h-3zM4.75 12.094A5.973 5.973 0 004 15v3H1v-3a3 3 0 013.75-2.906z"/></svg>` },
|
||||
|
||||
@@ -317,6 +317,90 @@ const HelpSystem = (function () {
|
||||
]
|
||||
},
|
||||
|
||||
// ─── Scadenziario centralizzato (A4 Fase 4.4) ─────────────────
|
||||
'review-schedule': {
|
||||
title: 'Guida - Scadenziario',
|
||||
intro: 'Lo Scadenziario raccoglie in un unico posto le revisioni periodiche di policy, controlli, trattamenti del rischio, ruoli, competenze, inventario, fornitori e misure. Per ciascuna voce indica chi è il responsabile (ruolo), ogni quanto va rivista e quando scade la prossima revisione, segnalandone lo stato. È uno strumento di supporto organizzativo, non un parere legale.',
|
||||
sections: [
|
||||
{
|
||||
heading: 'Stati e badge',
|
||||
items: [
|
||||
'<strong>OK (verde)</strong>: la prossima revisione è oltre i 30 giorni.',
|
||||
'<strong>In scadenza (arancione)</strong>: la prossima revisione cade entro 30 giorni.',
|
||||
'<strong>Scaduto (rosso)</strong>: la data di prossima revisione è già passata.',
|
||||
'Lo stato è ricalcolato automaticamente in base alla data odierna: non serve aggiornarlo a mano.'
|
||||
]
|
||||
},
|
||||
{
|
||||
heading: 'Come si usa',
|
||||
items: [
|
||||
'<strong>Nuova scadenza</strong>: crei una voce indicando titolo, tipo di entità, ruolo responsabile, frequenza (in mesi) e data della prossima revisione.',
|
||||
'<strong>Segna revisionato</strong>: registra la revisione di oggi; se è impostata una frequenza, la prossima data avanza automaticamente.',
|
||||
'<strong>Sincronizza scadenze esistenti</strong>: importa (senza duplicare) le scadenze già presenti nel sistema — riesami delle policy, dei controlli e le date dei trattamenti del rischio della tua organizzazione.'
|
||||
]
|
||||
},
|
||||
{
|
||||
heading: 'Riferimenti normativi',
|
||||
items: [
|
||||
'<strong>GV.PO-02</strong>: le politiche di cybersicurezza sono riviste periodicamente e aggiornate.',
|
||||
'<strong>GV.SC-07</strong>: i rischi e i rapporti con i fornitori sono monitorati e rivisti nel tempo.',
|
||||
'<strong>PR.AT</strong>: la formazione e consapevolezza è mantenuta e ripetuta nel tempo.',
|
||||
'<strong>DE.CM</strong>: il monitoraggio continuo presuppone controlli rivisti con regolarità.',
|
||||
'In Italia gli obblighi fanno capo al <strong>D.Lgs. 138/2024</strong> (in particolare l\'art. 24 sulla gestione del rischio). La periodicità puntuale, dove non fissata dalla norma, è buona prassi.'
|
||||
]
|
||||
}
|
||||
],
|
||||
references: [
|
||||
'NIST CSF 2.0 / GV.PO-02 - Politiche riviste e aggiornate periodicamente',
|
||||
'NIST CSF 2.0 / GV.SC-07 - Monitoraggio e revisione dei fornitori',
|
||||
'NIST CSF 2.0 / PR.AT - Formazione e consapevolezza mantenute nel tempo',
|
||||
'NIST CSF 2.0 / DE.CM - Monitoraggio continuo',
|
||||
'Obblighi: art. 24 D.Lgs. 138/2024 (gestione del rischio)',
|
||||
'NOTA: gli obblighi normativi in Italia derivano dal D.Lgs. 138/2024; lo scadenziario e i framework NIST CSF/ACN sono strumenti di supporto. La periodicità puntuale, dove non fissata, è buona prassi, non un parere legale.'
|
||||
]
|
||||
},
|
||||
|
||||
// ─── Stakeholder estesi (A4 Fase 4.5) ─────────────────────────
|
||||
'stakeholders': {
|
||||
title: 'Guida - Stakeholder',
|
||||
intro: 'La Mappa Stakeholder è una vista di sintesi delle parti interessate dell\'organizzazione, raggruppate in fornitori, clienti e partner. Riusa i dati del modulo Supply Chain (nessuna duplicazione): il dettaglio e la valutazione dei fornitori restano lì, mentre qui puoi avere il quadro d\'insieme e aggiungere o etichettare clienti e partner. È uno strumento di supporto organizzativo, non un parere legale.',
|
||||
sections: [
|
||||
{
|
||||
heading: 'I tre gruppi',
|
||||
items: [
|
||||
'<strong>Fornitori</strong>: chi fornisce beni o servizi (inclusi i fornitori ICT). Il loro dettaglio e la valutazione di sicurezza si gestiscono nel modulo Supply Chain.',
|
||||
'<strong>Clienti</strong>: le parti a cui l\'organizzazione eroga servizi rilevanti per la continuità.',
|
||||
'<strong>Partner</strong>: soggetti con cui esistono accordi o collaborazioni rilevanti per la sicurezza.'
|
||||
]
|
||||
},
|
||||
{
|
||||
heading: 'Come si usa',
|
||||
items: [
|
||||
'<strong>Aggiungi stakeholder</strong>: registri nome, tipo (fornitore/cliente/partner), tipo di servizio o relazione, contatto e criticità.',
|
||||
'Per i fornitori, usa il modulo <strong>Supply Chain</strong> per il dettaglio completo, i questionari e la valutazione del rischio (qui niente duplicati).',
|
||||
'La vista raggruppata aiuta a documentare ruoli e responsabilità verso tutte le parti interessate, non solo i fornitori.'
|
||||
]
|
||||
},
|
||||
{
|
||||
heading: 'Riferimenti normativi',
|
||||
items: [
|
||||
'<strong>GV.SC-02</strong>: ruoli e responsabilità per la sicurezza della catena di fornitura sono stabiliti verso fornitori, <strong>clienti</strong> e <strong>partner</strong>.',
|
||||
'<strong>GV.SC-04</strong>: i fornitori sono noti e prioritizzati in base alla criticità (l\'estensione a clienti e partner è coperta da GV.SC-02).',
|
||||
'<strong>GV.SC-05</strong>: i requisiti di sicurezza sono integrati nei contratti e negli accordi con i fornitori e le altre terze parti rilevanti.',
|
||||
'<strong>GV.SC-07</strong>: i rischi e i rapporti con le parti interessate sono monitorati e rivisti nel tempo.'
|
||||
]
|
||||
}
|
||||
],
|
||||
references: [
|
||||
'NIST CSF 2.0 / GV.SC-02 - Ruoli e responsabilità verso fornitori, clienti e partner',
|
||||
'NIST CSF 2.0 / GV.SC-04 - Fornitori noti e prioritizzati per criticità (clienti/partner: GV.SC-02)',
|
||||
'NIST CSF 2.0 / GV.SC-05 - Requisiti di sicurezza negli accordi',
|
||||
'NIST CSF 2.0 / GV.SC-07 - Monitoraggio e revisione delle parti interessate',
|
||||
'Obblighi: la gestione della supply chain è prevista dall\'art. 24 del D.Lgs. 138/2024.',
|
||||
'NOTA: gli obblighi normativi in Italia derivano dal D.Lgs. 138/2024; la mappa stakeholder e i framework NIST CSF/ACN sono strumenti di supporto, non un parere legale.'
|
||||
]
|
||||
},
|
||||
|
||||
// ─── Risk Management ─────────────────────────────────────────
|
||||
'risks': {
|
||||
title: 'Guida - Gestione Rischi',
|
||||
@@ -1161,6 +1245,10 @@ const HelpSystem = (function () {
|
||||
'competenze': 'competences',
|
||||
'raci.html': 'raci',
|
||||
'raci': 'raci',
|
||||
'review-schedule.html': 'review-schedule',
|
||||
'review-schedule': 'review-schedule',
|
||||
'stakeholders.html': 'stakeholders',
|
||||
'stakeholders': 'stakeholders',
|
||||
'risks.html': 'risks',
|
||||
'risks': 'risks',
|
||||
'incidents.html': 'incidents',
|
||||
|
||||
@@ -86,6 +86,10 @@ const I18n = (function () {
|
||||
'org.new_role': { it: 'Nuovo ruolo', en: 'New role' },
|
||||
'comp.title': { it: 'Competenze', en: 'Skills' },
|
||||
'raci.title': { it: 'Matrice RACI', en: 'RACI Matrix' },
|
||||
'nav.review_schedule': { it: 'Scadenziario', en: 'Review schedule' },
|
||||
'nav.stakeholders': { it: 'Stakeholder', en: 'Stakeholders' },
|
||||
'rev.title': { it: 'Scadenziario', en: 'Review Schedule' },
|
||||
'stk.title': { it: 'Stakeholder', en: 'Stakeholders' },
|
||||
'nav.risks': { it: 'Rischi', en: 'Risks' },
|
||||
'nav.incidents': { it: 'Incidenti', en: 'Incidents' },
|
||||
'nav.policies': { it: 'Policy', en: 'Policies' },
|
||||
|
||||
Reference in New Issue
Block a user