nis2-agile/scripts/seed_acn_requirements.php
DevEnv nis2-agile 59205d05fb [FEAT] Gap Analysis estesa ai requisiti ACN (specifiche di base 164179/2025)
Allinea il PRODOTTO alla guida/normativa portando la compliance dal livello 10 misure Art.21
al livello operativo dei requisiti ACN (Framework Nazionale 2025).
- Migrazione 031: acn_requirements (catalogo) + org_acn_requirement_status (stato per-org)
- Seed da Allegati 1-2 ACN (fonte certa, parsing verificato): 87 importanti + 116 essenziali = 203 requisiti reali
- AuditController: acnRequirements (GET, per entity_type org: importanti 87 / essenziali 116, summary per funzione GV/ID/PR/DE/RS/RC, % compliance) + updateAcnRequirement (PUT stato+evidenza)
- Route audit/acnRequirements GET/PUT
- guida.html: fix refuso cap-5 (residuo 'otto categorie...no' -> '10 categorie x 8, quattro modalita')
E2E prod: org importante -> 87 req; PUT implemented -> compliance aggiornata.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-31 08:07:38 +02:00

26 lines
1.3 KiB
PHP

<?php
// Seeder catalogo requisiti ACN da docs/nis2/allegati_acn/acn_requirements.json (fonte: Allegati 1-2 ACN).
// Idempotente: ON DUPLICATE KEY UPDATE sul vincolo (entity, subcategory, req_index).
chdir(dirname(__DIR__));
require_once 'application/config/config.php';
require_once 'application/config/database.php';
$json = json_decode(file_get_contents('docs/nis2/allegati_acn/acn_requirements.json'), true);
if (!$json) { fwrite(STDERR, "JSON non leggibile\n"); exit(1); }
$n = 0;
foreach (['importante','essenziale'] as $entity) {
foreach ($json[$entity] as $r) {
Database::query(
'INSERT INTO acn_requirements (entity, function_name, subcategory, subcategory_text, req_index, requirement)
VALUES (?,?,?,?,?,?)
ON DUPLICATE KEY UPDATE function_name=VALUES(function_name), subcategory_text=VALUES(subcategory_text), requirement=VALUES(requirement)',
[$entity, $r['function'], $r['subcategory'], $r['subcategory_text'] ?? null, $r['req_index'], $r['requirement']]
);
$n++;
}
}
$imp = Database::fetchOne("SELECT COUNT(*) c FROM acn_requirements WHERE entity='importante'")['c'];
$ess = Database::fetchOne("SELECT COUNT(*) c FROM acn_requirements WHERE entity='essenziale'")['c'];
echo "Seed completato: processati $n | DB importanti=$imp essenziali=$ess\n";