Phase 1 — VVT Backend (localStorage → API): - migrations/006_vvt.sql: Neue Tabellen (vvt_organization, vvt_activities, vvt_audit_log) - compliance/db/vvt_models.py: SQLAlchemy-Models für alle VVT-Tabellen - compliance/api/vvt_routes.py: Vollständiger CRUD-Router (10 Endpoints) - compliance/api/__init__.py: VVT-Router registriert - compliance/api/schemas.py: VVT Pydantic-Schemas ergänzt - app/(sdk)/sdk/vvt/page.tsx: API-Client + camelCase↔snake_case Mapping, localStorage durch persistente DB-Calls ersetzt (POST/PUT/DELETE/GET) - tests/test_vvt_routes.py: 18 Tests (alle grün) Phase 3 — Document Generator PDF-Export: - document-generator/page.tsx: "Als PDF exportieren"-Button funktioniert jetzt via window.print() + Print-Window mit korrektem HTML - Fallback-Banner wenn Template-Service (breakpilot-core) nicht erreichbar Phase 4 — Source Policy erweiterte Filter: - SourcesTab.tsx: source_type-Filter (Rechtlich / Leitlinien / Vorlagen / etc.) - PIIRulesTab.tsx: category-Filter (E-Mail / Telefon / IBAN / etc.) - source_policy_router.py: Backend-Endpoints unterstützen jetzt source_type und category als Query-Parameter - requirements.txt: reportlab==4.2.5 ergänzt (fehlende Audit-PDF-Dependency) Phase 2 — Training (Migration-Skripte): - scripts/apply_training_migrations.sh: SSH-Skript für Mac Mini - scripts/apply_vvt_migration.sh: Vollständiges Deploy-Skript für VVT Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
67 lines
2.5 KiB
SQL
67 lines
2.5 KiB
SQL
-- =========================================================
|
|
-- Migration 006: VVT — Verzeichnis von Verarbeitungstaetigkeiten
|
|
-- Art. 30 DSGVO
|
|
-- =========================================================
|
|
|
|
CREATE TABLE IF NOT EXISTS compliance_vvt_organization (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
organization_name VARCHAR(300) NOT NULL,
|
|
industry VARCHAR(100),
|
|
locations JSONB DEFAULT '[]',
|
|
employee_count INT,
|
|
dpo_name VARCHAR(200),
|
|
dpo_contact VARCHAR(200),
|
|
vvt_version VARCHAR(20) DEFAULT '1.0',
|
|
last_review_date DATE,
|
|
next_review_date DATE,
|
|
review_interval VARCHAR(20) DEFAULT 'annual',
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS compliance_vvt_activities (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
vvt_id VARCHAR(50) UNIQUE NOT NULL,
|
|
name VARCHAR(300) NOT NULL,
|
|
description TEXT,
|
|
purposes JSONB DEFAULT '[]',
|
|
legal_bases JSONB DEFAULT '[]',
|
|
data_subject_categories JSONB DEFAULT '[]',
|
|
personal_data_categories JSONB DEFAULT '[]',
|
|
recipient_categories JSONB DEFAULT '[]',
|
|
third_country_transfers JSONB DEFAULT '[]',
|
|
retention_period JSONB DEFAULT '{}',
|
|
tom_description TEXT,
|
|
business_function VARCHAR(50),
|
|
systems JSONB DEFAULT '[]',
|
|
deployment_model VARCHAR(20),
|
|
data_sources JSONB DEFAULT '[]',
|
|
data_flows JSONB DEFAULT '[]',
|
|
protection_level VARCHAR(10) DEFAULT 'MEDIUM',
|
|
dpia_required BOOLEAN DEFAULT FALSE,
|
|
structured_toms JSONB DEFAULT '{}',
|
|
status VARCHAR(20) DEFAULT 'DRAFT',
|
|
responsible VARCHAR(200),
|
|
owner VARCHAR(200),
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_vvt_activities_status ON compliance_vvt_activities(status);
|
|
CREATE INDEX IF NOT EXISTS idx_vvt_activities_business_function ON compliance_vvt_activities(business_function);
|
|
CREATE INDEX IF NOT EXISTS idx_vvt_activities_vvt_id ON compliance_vvt_activities(vvt_id);
|
|
|
|
CREATE TABLE IF NOT EXISTS compliance_vvt_audit_log (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
action VARCHAR(20) NOT NULL,
|
|
entity_type VARCHAR(50) NOT NULL,
|
|
entity_id UUID,
|
|
changed_by VARCHAR(200),
|
|
old_values JSONB,
|
|
new_values JSONB,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_vvt_audit_created ON compliance_vvt_audit_log(created_at);
|
|
CREATE INDEX IF NOT EXISTS idx_vvt_audit_entity ON compliance_vvt_audit_log(entity_type, entity_id);
|