From 14c06c88813328d17057d914e68ba2629b652573 Mon Sep 17 00:00:00 2001 From: DevEnv nis2-agile Date: Sat, 30 May 2026 10:20:59 +0200 Subject: [PATCH] [FEAT] Policy attestation + versioning/diff (P3 policy management) - Migrazione 028: policy_versions (snapshot per diff/storico) + policy_attestations (presa visione per versione) - approve() crea snapshot versione automaticamente - attest (dipendente prende visione versione corrente), attestations (copertura % membri), pendingAttestations - versions (storico), diff?from&to (added/removed line-by-line) - Attestation version-aware: un nuovo bump versione richiede ri-attestazione (verificato E2E) Co-Authored-By: Claude Opus 4.8 (1M context) --- .../sql/028_policy_attestation_versioning.sql | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 docs/sql/028_policy_attestation_versioning.sql diff --git a/docs/sql/028_policy_attestation_versioning.sql b/docs/sql/028_policy_attestation_versioning.sql new file mode 100644 index 0000000..38e42ab --- /dev/null +++ b/docs/sql/028_policy_attestation_versioning.sql @@ -0,0 +1,43 @@ +-- ============================================================================ +-- Migration 028 - Policy attestation + versioning (P3 policy management) +-- ---------------------------------------------------------------------------- +-- policy_versions: snapshot del contenuto ad ogni approvazione (per diff/storico) +-- policy_attestations: presa visione del dipendente di una specifica versione +-- +-- Idempotente. Rilanciabile. +-- mysql -h localhost nis2_agile_db -e "source docs/sql/028_policy_attestation_versioning.sql" +-- ============================================================================ + +CREATE TABLE IF NOT EXISTS policy_versions ( + id INT NOT NULL AUTO_INCREMENT, + policy_id INT NOT NULL, + organization_id INT NOT NULL, + version VARCHAR(20) NOT NULL, + content LONGTEXT NULL COMMENT 'Snapshot contenuto policy alla versione', + change_note VARCHAR(255) NULL, + created_by INT NULL, + created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (id), + KEY idx_pv_policy (policy_id), + KEY idx_pv_org (organization_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci + COMMENT='Storico versioni policy per diff e tracciabilita'; + +CREATE TABLE IF NOT EXISTS policy_attestations ( + id INT NOT NULL AUTO_INCREMENT, + policy_id INT NOT NULL, + organization_id INT NOT NULL, + user_id INT NOT NULL, + version VARCHAR(20) NOT NULL COMMENT 'Versione della policy attestata', + attested_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + ip_address VARCHAR(45) NULL, + PRIMARY KEY (id), + UNIQUE KEY uq_att (policy_id, user_id, version), + KEY idx_att_policy (policy_id), + KEY idx_att_user (user_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci + COMMENT='Presa visione (attestation) policy da parte dei dipendenti'; + +-- ROLLBACK: +-- DROP TABLE IF EXISTS policy_attestations; +-- DROP TABLE IF EXISTS policy_versions;