-- ============================================================================
-- Migration 031 - Requisiti ACN (specifiche di base, Determina 164179/2025)
-- ----------------------------------------------------------------------------
-- Porta la Gap Analysis dal livello "10 misure Art.21" al livello operativo
-- dei requisiti ACN (Framework Nazionale 2025): 87 per soggetti importanti,
-- 116 per essenziali. Additiva: nuove tabelle, non tocca compliance_controls.
--
--   acn_requirements           = catalogo globale (fonte: Allegati 1-2 ACN)
--   org_acn_requirement_status = stato di implementazione per organizzazione
--
-- Idempotente. mysql -h localhost nis2_agile_db -e "source docs/sql/031_acn_requirements.sql"
-- ============================================================================

CREATE TABLE IF NOT EXISTS acn_requirements (
    id               INT NOT NULL AUTO_INCREMENT,
    entity           ENUM('importante','essenziale') NOT NULL,
    function_name    VARCHAR(40) NOT NULL COMMENT 'Governance/Identificazione/Protezione/Rilevazione/Risposta/Ripristino',
    subcategory      VARCHAR(20) NOT NULL COMMENT 'Codice sottocategoria framework, es. GV.OC-4',
    subcategory_text TEXT NULL,
    req_index        INT NOT NULL COMMENT 'Numero del requisito entro la sottocategoria',
    requirement      TEXT NOT NULL COMMENT 'Testo del requisito (fonte: Allegato ACN)',
    art21_letter     CHAR(1) NULL COMMENT 'Mapping indicativo a Art.21.2 (a..j), opzionale',
    created_at       DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (id),
    UNIQUE KEY uq_acn_req (entity, subcategory, req_index),
    KEY idx_acn_entity (entity),
    KEY idx_acn_func (function_name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
  COMMENT='Catalogo requisiti specifiche di base ACN (Determina 164179/2025, Allegati 1-2)';

CREATE TABLE IF NOT EXISTS org_acn_requirement_status (
    id               INT NOT NULL AUTO_INCREMENT,
    organization_id  INT NOT NULL,
    requirement_id   INT NOT NULL,
    status           ENUM('not_started','in_progress','implemented','not_applicable') NOT NULL DEFAULT 'not_started',
    evidence_note    TEXT NULL,
    updated_by       INT NULL,
    updated_at       DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    created_at       DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (id),
    UNIQUE KEY uq_org_req (organization_id, requirement_id),
    KEY idx_oar_org (organization_id),
    KEY idx_oar_req (requirement_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
  COMMENT='Stato di implementazione dei requisiti ACN per organizzazione';

-- ROLLBACK:
-- DROP TABLE IF EXISTS org_acn_requirement_status;
-- DROP TABLE IF EXISTS acn_requirements;
