[FEAT] UI frontend gap competitivi + help/i18n + OpenAPI + scorecard EVIX
UI delle 4 feature backend (ora usabili dagli utenti, non solo via API): - risks.html: vista 'Quantitativo (FAIR)' con form + istogramma distribuzione ALE + registro portafoglio; vista 'KRI' con dashboard semafori green/amber/red + CRUD - reports.html: tab 'Monitoraggio Continuo' con semafori freschezza controlli (healthy/warning/stale/failing) + copertura - assets.html: bottone 'Importa' CSV/CMDB con parsing client + anteprima + scoring auto GV.OC-04 - api.js: metodi computeFair/getFairRegister/listKri/createKri/updateKri/importAssets/getControlsMonitoring Trasversale: - help.js: sezioni guida FAIR+KRI (risks), import CMDB (assets), monitoraggio continuo (reports) - i18n.js: chiavi IT/EN (risks.fair_tab, risks.kri_tab, assets.import_btn, audit.monitoring_tab) - ServicesController::openapi esteso con incidents-ingest/evidence-ingest/assets-ingest/controls-monitoring + securityScheme ApiKeyAuth - AuditController::controlsMonitoring (versione JWT per la UI) + route audit/controlsMonitoring - EVIX scorecard: gap P1/P2 marcati chiusi (backend), roadmap aggiornata 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
edf0394616
commit
372ccb5ec1
@@ -200,6 +200,12 @@ class NIS2API {
|
||||
deleteRisk(id) { return this.del(`/risks/${id}`); }
|
||||
getRiskMatrix() { return this.get('/risks/matrix'); }
|
||||
aiSuggestRisks() { return this.post('/risks/ai-suggest', {}); }
|
||||
// FAIR quantitativo + KRI (P2)
|
||||
computeFair(id, data) { return this.post(`/risks/${id}/fair`, data); }
|
||||
getFairRegister() { return this.get('/risks/fairRegister'); }
|
||||
listKri() { return this.get('/risks/kri'); }
|
||||
createKri(data) { return this.post('/risks/kri', data); }
|
||||
updateKri(id, data) { return this.put(`/risks/kri/${id}`, data); }
|
||||
|
||||
// ═══════════════════════════════════════════════════════════════════
|
||||
// Incidents
|
||||
@@ -260,6 +266,8 @@ class NIS2API {
|
||||
getScoringGrid() { return this.get('/assets/scoringGrid'); }
|
||||
scoreAsset(id, criteria) { return this.post(`/assets/${id}/score`, { criteria }); }
|
||||
listRelevantSystems() { return this.get('/assets/relevantSystems'); }
|
||||
importAssets(data) { return this.post('/assets/import', data); } // P2 import CMDB/CSV
|
||||
getControlsMonitoring() { return this.get('/audit/controlsMonitoring'); } // P1 continuous control monitoring (JWT)
|
||||
|
||||
// ═══════════════════════════════════════════════════════════════════
|
||||
// Audit
|
||||
|
||||
@@ -407,6 +407,16 @@ const HelpSystem = (function () {
|
||||
'Registrazione di proprietario, ubicazione, fornitore e contratti di supporto.',
|
||||
'Alert automatici per asset con supporto in scadenza o fine vita.'
|
||||
]
|
||||
},
|
||||
{
|
||||
heading: 'Import da CMDB / Cloud (pulsante "Importa")',
|
||||
items: [
|
||||
'Importa asset in blocco da un file <strong>CSV</strong> o da un export CMDB/cloud, invece di inserirli manualmente.',
|
||||
'Colonne riconosciute: <code>name, asset_type, criticality, data_classification, internet_facing, dependencies_count, regulated, external_ref, vendor, location</code>.',
|
||||
'Lo <strong>scoring di rilevanza NIS2 (GV.OC-04)</strong> viene calcolato automaticamente per ogni asset importato, classificandolo critico/alto/medio/basso.',
|
||||
'Il campo <code>external_ref</code> abilita la deduplica: re-importare lo stesso ID aggiorna l\'asset invece di duplicarlo.',
|
||||
'Gli stessi dati possono arrivare via connettore automatico (API <code>POST /api/services/assets-ingest</code>, scope ingest:assets).'
|
||||
]
|
||||
}
|
||||
],
|
||||
references: [
|
||||
|
||||
Reference in New Issue
Block a user