veylant/migrations/000007_compliance.up.sql
2026-02-23 13:35:04 +01:00

43 lines
1.8 KiB
SQL

-- Sprint 9 — Module Conformité RGPD / AI Act
-- E9-01: Processing registry (registre des traitements Art. 30 RGPD)
CREATE TABLE IF NOT EXISTS processing_registry (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
tenant_id TEXT NOT NULL,
use_case_name TEXT NOT NULL,
legal_basis TEXT NOT NULL
CHECK (legal_basis IN (
'consent', 'contract', 'legal_obligation',
'vital_interests', 'public_task', 'legitimate_interest'
)),
purpose TEXT NOT NULL,
data_categories JSONB NOT NULL DEFAULT '[]',
recipients JSONB NOT NULL DEFAULT '[]',
processors JSONB NOT NULL DEFAULT '[]',
retention_period TEXT NOT NULL,
security_measures TEXT,
controller_name TEXT,
risk_level TEXT CHECK (risk_level IN ('minimal', 'limited', 'high', 'forbidden')),
ai_act_answers JSONB,
is_active BOOLEAN NOT NULL DEFAULT TRUE,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_processing_registry_tenant
ON processing_registry (tenant_id, is_active);
-- E9-06: GDPR Art. 17 erasure audit log (immutable)
CREATE TABLE IF NOT EXISTS gdpr_erasure_log (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
tenant_id TEXT NOT NULL,
target_user TEXT NOT NULL,
requested_by TEXT NOT NULL,
reason TEXT,
records_deleted INT NOT NULL DEFAULT 0,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_erasure_log_tenant
ON gdpr_erasure_log (tenant_id, target_user);