43 lines
1.8 KiB
SQL
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);
|