[FEAT] Epic C / C3 — rimosso modulo 'Analisi GAP ACN' (superato da C1)
Simon C3: l'analisi gap ACN non è un artefatto normativo e va eliminata; la conformità emerge da C1 (elenco Misure/Requisiti + valutazione per requisito in org_requisito_state). Ricognizione → migrazione → backup → rimozione (sicuro, 0 perdite): - Tabelle acn_assessments/acn_assessment_responses VUOTE (0 righe) -> droppate (mig.049, guard anti-drop se >0 righe). Ricreabili da 036. Nessun dato utente perso. - Integrazione lg231: /api/services/gap-analysis legge 'assessments' generale, NON il modulo ACN -> intatta. Verificato. - RaciController ripuntato su cfg_nis2_misure (fonte canonica) al posto di acn_measures.json (rimosso); validazione measure_code verificata (/raci/objects?type=measure -> 43 misure). Rimossi: AcnAssessmentController, public/acn-gap.html, application/data/acn_measures.json, routing acn-gap, voci sidebar (common.js + common-bi.js), metodi api.js acn*, sezione help 'acn', chiavi i18n acn.*, mapping demo-selectors. Tour demo step 3 RIPUNTATO su misure-requisiti (no step rotto, 10 step). Sidebar BI ora mostra 'Misure e Requisiti' (gap di common-bi.js sanato). Verifiche prod: /acn-gap.html 404, /api/acn-gap/* 404, /misure-requisiti 200, RaciController OK. Cache-buster ?v=20260624, version 1.18.3, SW v1.18.3. 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
45e6c3599c
commit
e281aa4970
@@ -22,8 +22,8 @@
|
||||
* - 'inventario' = `assets`; 'procedure' = `policies`; rischi = `risks`;
|
||||
* fornitori = `suppliers`. Label: assets.name, policies.title, risks.title,
|
||||
* suppliers.name, org_roles.role_name.
|
||||
* - misure ACN = application/data/acn_measures.json (campo 'code'); NON e una
|
||||
* tabella DB -> risk_measure.measure_code e una stringa validata sul JSON.
|
||||
* - misure = tabella canonica cfg_nis2_misure (campo misura_code); risk_measure.measure_code
|
||||
* e una stringa validata su quella tabella (Epic C / C1; ex acn_measures.json, rimosso con C3).
|
||||
* - raci_assignments.object_id e POLIMORFICO -> niente FK; esistenza verificata
|
||||
* in PHP. I nomi tabella/colonna provengono SEMPRE dalle const-map qui sotto
|
||||
* dopo validazione enum (mai da stringhe grezze della request).
|
||||
@@ -461,15 +461,18 @@ class RaciController extends BaseController
|
||||
return $lt;
|
||||
}
|
||||
|
||||
/** Carica e memoizza il catalogo misure ACN dal JSON. */
|
||||
/**
|
||||
* Carica e memoizza il catalogo misure dalla tabella canonica cfg_nis2_misure
|
||||
* (Epic C / C1). Forma di ritorno invariata (['code','title']) per compatibilità
|
||||
* con assertMeasureExists/measureLabel. Sostituisce il vecchio acn_measures.json.
|
||||
*/
|
||||
private function loadMeasures(): array
|
||||
{
|
||||
if (self::$measuresCache === null) {
|
||||
$path = APP_PATH . '/data/acn_measures.json';
|
||||
$raw = is_readable($path) ? file_get_contents($path) : false;
|
||||
$data = $raw !== false ? json_decode($raw, true) : null;
|
||||
self::$measuresCache = is_array($data) && isset($data['measures']) && is_array($data['measures'])
|
||||
? $data['measures'] : [];
|
||||
$rows = Database::fetchAll('SELECT misura_code, misura_descr FROM cfg_nis2_misure ORDER BY ord ASC');
|
||||
self::$measuresCache = array_map(static function ($r) {
|
||||
return ['code' => $r['misura_code'], 'title' => $r['misura_descr']];
|
||||
}, $rows);
|
||||
}
|
||||
return self::$measuresCache;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user