Files
breakpilot-compliance/docs-src/services/sdk-modules/vvt.md
Benjamin Admin 2a70441eaa feat(sdk): VVT master libraries, process templates, Loeschfristen profiling + document
VVT: Master library tables (7 catalogs), 500+ seed entries, process templates
with instantiation, library API endpoints + 18 tests.
Loeschfristen: Baseline catalog, compliance checks, profiling engine, HTML document
generator, MkDocs documentation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 11:56:25 +01:00

33 KiB

VVT — Verzeichnis von Verarbeitungstaetigkeiten (Art. 30 DSGVO)

Das VVT-Modul implementiert das Verarbeitungsverzeichnis gemaess Art. 30 DSGVO mit einer 3-Schichten-Architektur: Master-Libraries (globale Stammdaten) + Prozess-Templates (vorgefertigte Verarbeitungsvorlagen) + Tenant-Instanzen (individuelle Verarbeitungstaetigkeiten).

Route: /sdk/vvt | Backend: backend-compliance:8002 | Migrationen: 006, 033, 035, 064-067


Uebersicht

Checkpoint Reviewer Rechtsgrundlage Status
CP-VVT (REQUIRED) DSB Art. 30 DSGVO Phase 1 abgeschlossen

Wann ist ein VVT Pflicht?

Jeder Verantwortliche und jeder Auftragsverarbeiter muss ein Verzeichnis aller Verarbeitungstaetigkeiten fuehren (Art. 30 Abs. 1 und Abs. 2 DSGVO). Ausnahmen gelten nur fuer Unternehmen mit weniger als 250 Beschaeftigten — und auch nur dann, wenn die Verarbeitung kein Risiko birgt, nur gelegentlich erfolgt und keine besonderen Datenkategorien (Art. 9/10 DSGVO) betroffen sind. In der Praxis entfaellt die Ausnahme fast nie.


3-Schichten-Architektur

Das VVT-Modul arbeitet mit drei Abstraktionsebenen:

graph TD
    A[Ebene A: Master-Libraries] -->|IDs referenzieren| B[Ebene B: Prozess-Templates]
    B -->|Instanziierung| C[Ebene C: Tenant-Aktivitaeten]
    A -->|Direkte Auswahl| C

Ebene A — Master-Libraries (Global)

8 globale Referenztabellen, die ohne tenant_id arbeiten und allen Mandanten zur Verfuegung stehen:

Library Tabelle Eintraege Beschreibung
Betroffenenkategorien vvt_lib_data_subjects 15 Mitarbeiter, Kunden, Bewerber, ...
Datenkategorien vvt_lib_data_categories 35 Hierarchisch mit Parent/Child (9 Oberkategorien + 26 Unterkategorien)
Empfaenger vvt_lib_recipients 15 Intern, Auftragsverarbeiter, Behoerden
Rechtsgrundlagen vvt_lib_legal_bases 12 Art. 6, Art. 9, BDSG, UWG
Loeschfristen vvt_lib_retention_rules 12 HGB 10J, AO 6J/10J, AGG 6M, ...
Transfermechanismen vvt_lib_transfer_mechanisms 8 Angemessenheit, SCC, BCR, DPF, ...
Verarbeitungszwecke vvt_lib_purposes 20 Personalverwaltung, CRM, Analytics, ...
TOMs vvt_lib_toms 20 RBAC, MFA, Verschluesselung, Backup, ...

Datenkategorien-Hierarchie

Die Datenkategorien sind zweistufig organisiert:

Oberkategorie Unterkategorien Art. 9
Identifikationsdaten Name, Geburtsdatum, Ausweisnummer, SV-Nummer Nein
Kontaktdaten Anschrift, Kontaktinformationen Nein
Finanzdaten Steuer-ID, Bankverbindung, Zahlungsdaten, Gehaltsdaten Nein
Beschaeftigungsdaten Arbeitsvertragsdaten, Ausbildungsdaten Nein
Digitale Identitaet IP-Adresse, Geraete-ID, Zugangsdaten, Nutzungsdaten Nein
Kommunikationsdaten Korrespondenz, Vertragsdaten Nein
Medien- und Standortdaten Bild/Video, Standortdaten Nein
Besondere Kategorien (Art. 9) Gesundheit, Genetik, Biometrie, Ethnische Herkunft, Politische Meinungen, Religion, Gewerkschaft, Sexualleben Ja
Strafrechtliche Daten (Art. 10) Verurteilungen, Straftaten Art. 10

Ebene B — Prozess-Templates (System + Tenant)

18 vorgefertigte Prozess-Templates, die Library-IDs referenzieren und mit einem Klick in eine VVT-Aktivitaet instanziiert werden koennen:

Template-ID Name Business Function Loeschfrist
hr-mitarbeiterverwaltung Mitarbeiterverwaltung Personal 10 Jahre (HGB)
hr-gehaltsabrechnung Gehaltsabrechnung Personal 10 Jahre (AO)
hr-bewerbermanagement Bewerbermanagement Personal 6 Monate (AGG)
hr-zeiterfassung Zeiterfassung Personal 2 Jahre (ArbZG)
finance-buchhaltung Buchhaltung Finanzen 10 Jahre (HGB)
finance-zahlungsverkehr Zahlungsverkehr Finanzen 10 Jahre (HGB)
sales-kundenverwaltung Kundenverwaltung Vertrieb 3 Jahre (BGB)
sales-vertriebssteuerung Vertriebssteuerung Vertrieb 3 Jahre (BGB)
marketing-newsletter Newsletter-Versand Marketing Bis Widerruf
marketing-website-analytics Website-Analyse Marketing 14 Monate
marketing-social-media Social-Media-Marketing Marketing Bis Zweckerfuellung
support-ticketsystem Ticketsystem Support 3 Jahre (BGB)
it-systemadministration IT-Systemadministration IT 90 Tage
it-backup Datensicherung IT 90 Tage
it-logging Logging und Ueberwachung IT 90 Tage
it-iam Identitaetsmanagement IT 6 Monate (AGG)
other-videokonferenz Videokonferenz Sonstiges Bis Zweckerfuellung
other-besuchermanagement Besuchermanagement Sonstiges 30 Tage

Ebene C — Tenant-Aktivitaeten

Individuelle Verarbeitungstaetigkeiten pro Mandant. Jede Aktivitaet kann sowohl Freitext-Felder (bestehendes Schema) als auch Library-Referenzen (neue *_refs-Felder) enthalten. Beide existieren parallel — die Library-Referenzen ergaenzen die Freitext-Felder fuer strukturierte Auswertungen und Cross-Modul-Verknuepfungen.


Funktionen

  • CRUD-Operationen: Anlegen, Lesen, Aktualisieren, Loeschen von VVT-Aktivitaeten
  • Organisations-Header: DSB-Kontakt, VVT-Version, Pruefintervall
  • Template-Instanziierung: Neue Aktivitaet aus Prozess-Template erstellen (inkl. automatischer Freitext-Befuellung)
  • Library-Referenzen: Strukturierte Auswahl aus 8 Master-Libraries (parallel zu Freitext)
  • Art. 30 Completeness-Check: Automatische Bewertung der Pflichtfelder-Vollstaendigkeit
  • Scope-basierte Generierung: Automatische Erstellung von Aktivitaeten aus Compliance-Scope-Antworten
  • Status-Workflow: DRAFT -> REVIEW -> APPROVED / ARCHIVED
  • Export: JSON und CSV (Excel-kompatibel mit BOM, Semikolon-getrennt)
  • Audit-Log: Protokollierung aller Aktionen (CREATE / UPDATE / DELETE / EXPORT)
  • Statistiken: Zaehler nach Status, Geschaeftsbereich, DSFA-Pflicht, Drittlandtransfers
  • Cross-Modul-Links: Verknuepfung zu Loeschfristen und TOM-Massnahmen (Phase 2)

API-Endpoints

Aktivitaeten (CRUD)

Methode Pfad Beschreibung
GET /vvt/activities Liste (Filter: status, business_function, search, review_overdue)
POST /vvt/activities Neue Aktivitaet anlegen -> HTTP 201
GET /vvt/activities/{id} Einzelne Aktivitaet abrufen
PUT /vvt/activities/{id} Aktivitaet aktualisieren
DELETE /vvt/activities/{id} Aktivitaet loeschen
GET /vvt/activities/{id}/completeness Art. 30 Vollstaendigkeits-Check
GET /vvt/activities/{id}/versions Versionshistorie

Organisation

Methode Pfad Beschreibung
GET /vvt/organization Organisations-Header laden
PUT /vvt/organization Organisations-Header speichern (Upsert)

Export & Statistik

Methode Pfad Beschreibung
GET /vvt/export?format=json JSON-Export aller Aktivitaeten
GET /vvt/export?format=csv CSV-Export (Semikolon, UTF-8 BOM)
GET /vvt/stats Statistik-Zusammenfassung
GET /vvt/audit-log Audit-Trail (limit, offset)

Master-Libraries (read-only, global)

Methode Pfad Beschreibung
GET /vvt/libraries Uebersicht: alle 8 Library-Typen mit Anzahl
GET /vvt/libraries/data-subjects Betroffenenkategorien (Filter: typical_for)
GET /vvt/libraries/data-categories Datenkategorien — hierarchisch oder ?flat=true (Filter: parent_id, is_art9)
GET /vvt/libraries/recipients Empfaenger (Filter: type)
GET /vvt/libraries/legal-bases Rechtsgrundlagen (Filter: is_art9, type)
GET /vvt/libraries/retention-rules Loeschfristen mit Dauer, Einheit, Rechtsgrundlage
GET /vvt/libraries/transfer-mechanisms Uebermittlungsmechanismen
GET /vvt/libraries/purposes Verarbeitungszwecke (Filter: typical_for)
GET /vvt/libraries/toms Technisch-Organisatorische Massnahmen (Filter: category)

Prozess-Templates

Methode Pfad Beschreibung
GET /vvt/templates Alle Templates (Filter: business_function, search)
GET /vvt/templates/{id} Einzelnes Template mit aufgeloesten Library-Labels
POST /vvt/templates/{id}/instantiate VVT-Aktivitaet aus Template erstellen -> HTTP 201

!!! info "Proxy-Route (Frontend)" Das Admin-Frontend ruft die Endpoints ueber den Next.js-Proxy auf: /api/sdk/v1/compliance/vvt/** -> backend-compliance:8002/api/compliance/vvt/**


Datenfluss: Template-Instanziierung

sequenceDiagram
    participant F as Frontend
    participant B as Backend
    participant DB as PostgreSQL

    F->>B: POST /vvt/templates/hr-mitarbeiterverwaltung/instantiate
    B->>DB: SELECT FROM vvt_process_templates WHERE id = 'hr-mitarbeiterverwaltung'
    DB-->>B: Template mit Library-Referenzen

    Note over B: Fuer jeden ref-Typ:<br/>Library-IDs -> Labels aufloesen

    B->>DB: SELECT FROM vvt_lib_purposes WHERE id IN ('EMPLOYMENT_ADMIN', 'PAYROLL')
    DB-->>B: Labels: "Personalverwaltung", "Gehaltsabrechnung"

    B->>DB: SELECT FROM vvt_lib_retention_rules WHERE id = 'HGB_257_10Y'
    DB-->>B: "10 Jahre (HGB § 257)"

    Note over B: Neue VVT-Aktivitaet erstellen:<br/>- Freitext-Felder mit Labels befuellt<br/>- *_refs-Felder mit Library-IDs

    B->>DB: INSERT INTO compliance_vvt_activities (...)
    B->>DB: INSERT INTO compliance_vvt_audit_log (action='CREATE', ...)
    DB-->>B: Neue Aktivitaet mit UUID

    B-->>F: 201 Created + VVTActivityResponse
    F->>F: Wechsel zu Editor-Tab

Datenmodell

VVT-Aktivitaet (Response) — vollstaendig

{
  "id": "uuid",
  "vvt_id": "VVT-0001",
  "name": "Mitarbeiterverwaltung",
  "description": "Verwaltung des Beschaeftigungsverhaeltnisses",
  "status": "DRAFT",
  "business_function": "hr",

  "purposes": ["Personalverwaltung", "Gehaltsabrechnung"],
  "legal_bases": [{"type": "BDSG_26", "description": "Beschaeftigtenverhaeltnis"}],
  "data_subject_categories": ["Beschaeftigte"],
  "personal_data_categories": ["Name", "Geburtsdatum", "Bankverbindung"],
  "recipient_categories": [{"type": "INTERNAL", "name": "Personalabteilung"}],
  "third_country_transfers": [],
  "retention_period": {
    "description": "10 Jahre (HGB § 257)",
    "legalBasis": "HGB § 257",
    "deletionProcedure": "Vernichtung",
    "duration": 10,
    "durationUnit": "YEARS"
  },
  "tom_description": "Rollenbasierte Zugriffskontrolle, Verschluesselung",
  "structured_toms": {
    "accessControl": ["RBAC", "Need-to-Know"],
    "confidentiality": ["Verschluesselung ruhender Daten"],
    "integrity": ["Audit-Logging"],
    "availability": [],
    "separation": ["Mandantentrennung"]
  },

  "systems": [{"systemId": "HR-Software", "name": "HR-Software"}],
  "deployment_model": "cloud",
  "protection_level": "HIGH",
  "dpia_required": true,
  "responsible": "Max Mustermann",
  "owner": "Personalabteilung",

  "purpose_refs": ["EMPLOYMENT_ADMIN", "PAYROLL"],
  "legal_basis_refs": ["BDSG_26", "ART6_1B"],
  "data_subject_refs": ["EMPLOYEES"],
  "data_category_refs": ["NAME", "DOB", "ADDRESS", "BANK_ACCOUNT", "EMPLOYMENT_DATA"],
  "recipient_refs": ["INTERNAL_HR", "INTERNAL_FINANCE", "PROCESSOR_PAYROLL"],
  "retention_rule_ref": "HGB_257_10Y",
  "transfer_mechanism_refs": null,
  "tom_refs": ["AC_RBAC", "AC_NEED_TO_KNOW", "CONF_ENCRYPTION_REST", "INT_AUDIT_LOG"],
  "source_template_id": "hr-mitarbeiterverwaltung",
  "risk_score": 3,
  "linked_loeschfristen_ids": null,
  "linked_tom_measure_ids": null,
  "art30_completeness": {
    "score": 90,
    "missing": ["responsible"],
    "warnings": [],
    "passed": 9,
    "total": 10
  },

  "created_at": "2026-03-19T10:00:00Z",
  "updated_at": "2026-03-19T12:30:00Z"
}

!!! warning "Dual-Schema: Freitext + Library-Referenzen" Jede Aktivitaet hat zwei parallele Repraesentationen fuer Datenkategorien, Betroffene, Zwecke etc.: Die bestehenden Freitext-Felder (purposes, legal_bases, ...) und die neuen Library-Referenz-Felder (purpose_refs, legal_basis_refs, ...). Beide existieren parallel. Bei Template-Instanziierung werden beide automatisch befuellt. Bestehende Aktivitaeten ohne *_refs bleiben voll funktionsfaehig.

Art. 30 Completeness-Check

Der Completeness-Endpoint prueft 10 Pflichtfelder nach Art. 30 Abs. 1 DSGVO:

Nr. Pruefung Quelle
1 Name der Verarbeitung name
2 Verarbeitungszweck(e) purposes ODER purpose_refs
3 Rechtsgrundlage legal_bases ODER legal_basis_refs
4 Betroffenenkategorien data_subject_categories ODER data_subject_refs
5 Datenkategorien personal_data_categories ODER data_category_refs
6 Empfaenger recipient_categories ODER recipient_refs
7 Drittland-Uebermittlung Immer bestanden (kein Transfer ist valide)
8 Loeschfristen retention_period.description ODER retention_rule_ref
9 TOM-Beschreibung tom_description ODER tom_refs ODER structured_toms
10 Verantwortlicher responsible

Warnings (nicht im Score, aber angezeigt):

  • dpia_required_but_no_dsfa_linked — DSFA erforderlich, aber keine DSFA verknuepft
  • third_country_transfer_without_mechanism — Drittlandtransfer ohne Transfermechanismus
{
  "score": 80,
  "missing": ["retention_period", "responsible"],
  "warnings": ["dpia_required_but_no_dsfa_linked"],
  "passed": 8,
  "total": 10
}

Library-Datenmodell

Master-Library-Eintrag (allgemein)

{
  "id": "EMPLOYEES",
  "label_de": "Beschaeftigte",
  "description_de": "Aktuelle Mitarbeiterinnen und Mitarbeiter",
  "sort_order": 1
}

Datenkategorie (hierarchisch)

{
  "id": "IDENTIFICATION",
  "label_de": "Identifikationsdaten",
  "children": [
    {
      "id": "NAME",
      "parent_id": "IDENTIFICATION",
      "label_de": "Name",
      "is_art9": false,
      "risk_weight": 1
    },
    {
      "id": "DOB",
      "parent_id": "IDENTIFICATION",
      "label_de": "Geburtsdatum",
      "is_art9": false,
      "risk_weight": 2
    }
  ]
}

Loeschfrist (Retention Rule)

{
  "id": "HGB_257_10Y",
  "label_de": "10 Jahre (HGB § 257)",
  "legal_basis": "HGB § 257",
  "duration": 10,
  "duration_unit": "YEARS",
  "start_event": "Ende des Kalenderjahres",
  "deletion_procedure": "Vernichtung nach Ablauf der Aufbewahrungsfrist"
}

Prozess-Template

{
  "id": "hr-mitarbeiterverwaltung",
  "name": "Mitarbeiterverwaltung",
  "business_function": "hr",
  "purpose_refs": ["EMPLOYMENT_ADMIN", "PAYROLL"],
  "legal_basis_refs": ["BDSG_26", "ART6_1B"],
  "data_subject_refs": ["EMPLOYEES"],
  "data_category_refs": ["NAME", "DOB", "ADDRESS", "CONTACT", "SOCIAL_SECURITY", "BANK_ACCOUNT", "EMPLOYMENT_DATA", "HEALTH_DATA"],
  "recipient_refs": ["INTERNAL_HR", "INTERNAL_FINANCE", "PROCESSOR_PAYROLL"],
  "tom_refs": ["AC_RBAC", "AC_NEED_TO_KNOW", "CONF_ENCRYPTION_REST", "INT_AUDIT_LOG"],
  "retention_rule_ref": "HGB_257_10Y",
  "typical_systems": ["HR-Software", "Personalakte (digital)"],
  "protection_level": "HIGH",
  "dpia_required": true,
  "risk_score": 3,
  "tags": ["personal", "pflicht"]
}

Status-Workflow

stateDiagram-v2
    [*] --> DRAFT : Neue Aktivitaet
    DRAFT --> REVIEW : Zur Pruefung
    REVIEW --> APPROVED : Genehmigt
    REVIEW --> DRAFT : Zurueck zu Entwurf
    APPROVED --> REVIEW : Erneute Pruefung
    APPROVED --> ARCHIVED : Archivieren
    ARCHIVED --> DRAFT : Reaktivieren

DB-Tabellen

Migrationshistorie

Migration Datei Inhalt
006 006_vvt.sql Initiale VVT-Tabellen (organization, activities, audit_log)
033 033_vvt_consolidation.sql Schema-Konsolidierung
035 035_vvt_tenant_isolation.sql Tenant-Isolation
064 064_vvt_master_libraries.sql 8 Library-Tabellen (global)
065 065_vvt_library_seed.sql Seed-Daten (~150 Eintraege)
066 066_vvt_process_templates.sql Template-Tabelle + 13 neue Spalten auf compliance_vvt_activities
067 067_vvt_process_templates_seed.sql 18 Prozess-Templates

Tabellen-Uebersicht

Tabelle Typ Tenant-scoped Eintraege
compliance_vvt_organization Daten Ja 1 pro Tenant
compliance_vvt_activities Daten Ja n pro Tenant
compliance_vvt_audit_log Audit Ja Unbegrenzt
vvt_lib_data_subjects Library Nein (global) 15
vvt_lib_data_categories Library Nein (global) 35
vvt_lib_recipients Library Nein (global) 15
vvt_lib_legal_bases Library Nein (global) 12
vvt_lib_retention_rules Library Nein (global) 12
vvt_lib_transfer_mechanisms Library Nein (global) 8
vvt_lib_purposes Library Nein (global) 20
vvt_lib_toms Library Nein (global) 20
vvt_process_templates Hybrid System + Tenant 18 (System)

Datei-Uebersicht

Backend

Datei Beschreibung
compliance/db/vvt_models.py SQLAlchemy Models: Organization, Activity, AuditLog
compliance/db/vvt_library_models.py SQLAlchemy Models: 8 Libraries + ProcessTemplate
compliance/api/vvt_routes.py Activity CRUD, Export, Stats, Completeness
compliance/api/vvt_library_routes.py Library GET-Endpoints, Template CRUD + Instantiate
compliance/api/schemas.py Pydantic Schemas (VVTActivityCreate/Update/Response)

Frontend

Datei Beschreibung
admin-compliance/app/sdk/vvt/page.tsx VVT-Seite (3 Tabs: Verzeichnis, Editor, Export)
admin-compliance/lib/sdk/vvt-types.ts TypeScript-Typen, Library-Interfaces, Helper
admin-compliance/lib/sdk/vvt-profiling.ts Scope-basierte Generierung

Migrationen

Datei Beschreibung
migrations/064_vvt_master_libraries.sql 8 Library-Tabellen
migrations/065_vvt_library_seed.sql Seed: ~150 Eintraege
migrations/066_vvt_process_templates.sql Template-Tabelle + 13 Spalten auf Activities
migrations/067_vvt_process_templates_seed.sql Seed: 18 Prozess-Templates

Tests

# Backend: Alle VVT-Tests (Library + Routes)
cd backend-compliance && python3 -m pytest tests/test_vvt_library_routes.py tests/test_vvt_routes.py -v

# Backend: Nur Library-Tests (54 Tests)
python3 -m pytest tests/test_vvt_library_routes.py -v

# Backend: Nur bestehende VVT-Tests (49 Tests)
python3 -m pytest tests/test_vvt_routes.py -v

# Frontend: Scope → VVT Integration (35 Tests)
cd admin-compliance && npx vitest run lib/sdk/__tests__/vvt-scope-integration.test.ts

Testabdeckung

Testdatei Tests Abdeckung
test_vvt_library_routes.py 54 Models, Helpers, Endpoints, Completeness, Schema-Compat
test_vvt_routes.py 49 CRUD, Export, Stats, Audit, Organization
vvt-scope-integration.test.ts 35 Profile→Scope Prefill, Scope→VVT Export, Generator, Full Pipeline, Dept. Data Categories, Block 9 Mapping
Gesamt 138

Frontend: 5-Tab-Aufbau

Tab 1: Verzeichnis

  • Statistik-Kacheln: Gesamt, Genehmigt, Entwurf, Drittland, Art. 9
  • Filter: Status, Drittland, Art. 9
  • Suche: VVT-ID, Name, Beschreibung
  • Sortierung: Name, Datum, Status
  • "Aus Vorlage erstellen": Template-Picker-Modal mit 18 Templates, filterbar nach Geschaeftsbereich
  • "Neue Verarbeitung": Leere Aktivitaet erstellen
  • "Aus Scope generieren": Automatische Generierung aus Compliance-Scope-Antworten

Tab 2: Editor

  • Formular-Sections: Grunddaten, Zwecke, Rechtsgrundlagen, Betroffene, Datenkategorien, Empfaenger, Drittlandtransfers, Loeschfristen, TOMs, Systeme, Datenquellen, Datenfluesse
  • Library-Unterstuetzung: Dropdown-Auswahl aus Master-Libraries fuer alle strukturierten Felder
  • Freitext-Fallback: Manuelle Eingabe bleibt immer moeglich

Tab 3: Export & Compliance

  • Compliance-Check: Pruefung aller Pflichtfelder nach Art. 30 DSGVO
  • Art. 30 Vollstaendigkeit: Pro-Aktivitaet-Fortschrittsbalken
  • Organisations-Header: DSB-Kontakt, Version, Pruefintervall
  • JSON-Export: Vollstaendiger Export aller Aktivitaeten + Metadaten
  • CSV-Export: Excel-kompatibel (Semikolon, UTF-8 BOM)
  • Statistik: Zaehler nach Geschaeftsbereichen und Datenkategorien

Tab 4: VVT-Dokument (Druckansicht)

Generiert ein vollstaendiges, druckbares VVT-Dokument gemaess Art. 30 Abs. 1 DSGVO:

  • Deckblatt: Organisation, DSB-Kontakt, Versionierung, Pruefintervall, Erstellungsdatum
  • Inhaltsverzeichnis: Automatisch nummerierte Eintraege aller Verarbeitungstaetigkeiten
  • Aktivitaeten-Tabellen: Pro Aktivitaet eine zweispaltige Tabelle mit allen Pflichtfeldern:
    • Zweck der Verarbeitung, Rechtsgrundlagen, Betroffene Personen
    • Datenkategorien (mit Art. 9/10 Kennzeichnung), Empfaengerkategorien
    • Drittlandtransfers mit Transfermechanismus
    • Loeschfristen, TOMs, Systeme, Schutzbedarfsstufe
  • Library-Aufloesung: IDs werden automatisch zu deutschen Labels aufgeloest (DATA_SUBJECT_CATEGORY_META, PERSONAL_DATA_CATEGORY_META, LEGAL_BASIS_META, TRANSFER_MECHANISM_META)
  • PDF-Druck: Via window.open() + window.print() — eigenstaendiges HTML mit Inline-CSS und @media print-Regeln fuer Seitenumbrueche
  • HTML-Download: Vollstaendiges Dokument als HTML-Datei speicherbar

Tab 5: Auftragsverarbeiter (Art. 30 Abs. 2)

Eigenstaendiges Verzeichnis fuer Auftragsverarbeiter-Taetigkeiten gemaess Art. 30 Abs. 2 DSGVO:

  • Pflichtfelder (Art. 30 Abs. 2):
    • Name und Kontakt des Auftragsverarbeiters
    • Kategorien der Verarbeitungen (fuer jeden Verantwortlichen)
    • Unterauftragsverarbeiter-Kette (Name, Zweck, Land, Drittland-Kennzeichnung)
    • Drittlandtransfers mit Transfermechanismen
    • Technisch-Organisatorische Massnahmen (TOMs)
  • Editor: Vollstaendiges Formular mit FormSection/FormField-Komponenten
  • Listenansicht: Karten mit Auftraggeber, Anzahl Kategorien, Unterauftragnehmer, Status-Badge
  • Status-Workflow: DRAFT → REVIEW → APPROVED → ARCHIVED
  • PDF-Druck: Eigene Druckfunktion fuer das Auftragsverarbeiter-Verzeichnis
  • Rechtshinweis: Infobox mit Erlaeuterung der Art. 30 Abs. 2 Anforderungen

!!! note "Datenhaltung" Auftragsverarbeiter-Eintraege werden aktuell im Frontend-State verwaltet. Backend-Persistenz (eigene DB-Tabelle + API-Endpoints) ist fuer Phase 2 geplant.


Compliance-Kontext

Verknuepftes Modul Beziehung
Company Profile Stammdaten (DSB, Branche, Mitarbeiter, Angebote) fliessen via Scope in VVT
Compliance Scope Scope-Antworten (Block 8+9) generieren VVT-Aktivitaeten per Knopfdruck
DSFA (Art. 35) VVT-Aktivitaet referenziert DSFA ueber dsfa_id
Loeschfristen Cross-Modul-Link ueber linked_loeschfristen_ids (Phase 2)
TOM (Art. 32) Cross-Modul-Link ueber linked_tom_measure_ids (Phase 2)

Datenfluss: Company Profile → Compliance Scope → VVT Generator

Das VVT-Modul bezieht seine Daten aus einer 3-stufigen Pipeline, in der keine Daten doppelt abgefragt werden. Das Company Profile (/sdk/company-profile) dient als Single Source of Truth fuer Stammdaten. Der Compliance Scope (/sdk/compliance-scope) fungiert als impliziter Daten-Verteilungs-Agent — jede Scope-Frage deklariert per mapsToVVTQuestion-Eigenschaft, welche VVT-Frage sie befuellt.

Gesamtablauf

sequenceDiagram
    participant CP as Company Profile
    participant SE as Compliance Scope<br/>(Block 1-9)
    participant VG as VVT Generator
    participant DB as PostgreSQL

    Note over CP: Stammdaten:<br/>DSB, Branche, Mitarbeiter,<br/>Angebote, Geschaeftsmodell

    CP->>SE: prefillFromCompanyProfile(profile)<br/>+ getAutoFilledScoringAnswers(profile)
    Note over SE: Auto-Prefill:<br/>dpoName → org_has_dsb<br/>offerings → prod_type<br/>employeeCount → org_employee_count

    SE->>SE: Block 8: Abteilungswahl<br/>(personal, finanzen, marketing, ...)
    SE->>SE: Block 9: Datenkategorien pro Abteilung<br/>(dk_dept_hr → NAME, SALARY_DATA, ...)

    SE->>VG: exportToVVTAnswers(scopeAnswers)<br/>→ mapsToVVTQuestion-Mapping
    Note over VG: prefillFromScopeAnswers():<br/>Scope-Antworten → ProfilingAnswers

    VG->>VG: generateActivities(profilingAnswers)<br/>→ Template-Triggering + Enrichment

    VG->>DB: POST /vvt/activities (je Aktivitaet)
    Note over DB: VVT-Aktivitaeten gespeichert<br/>mit Library-Refs + Freitext

Stufe 1: Company Profile → Scope (automatisches Prefill)

Beim Oeffnen des Compliance-Scope-Moduls werden Stammdaten aus dem Company Profile automatisch in Scope-Antworten ueberfuehrt — der Nutzer muss diese Daten nicht erneut eingeben.

Funktion: prefillFromCompanyProfile() (compliance-scope-profiling.ts:764)

Company Profile Feld Scope-Frage Mapping
dpoName (nicht leer) org_has_dsb true
offerings (WebApp) prod_type ['webapp']
offerings (SaaS) prod_type ['saas']
offerings (Webshop) prod_webshop true

Funktion: getAutoFilledScoringAnswers() (compliance-scope-profiling.ts:844)

Company Profile Feld Scope-Frage Zweck
employeeCount org_employee_count Scoring + Art. 30 Abs. 5 Pruefung
annualRevenue org_annual_revenue Scoring
industry org_industry Scoring + Branchenkontext
businessModel org_business_model Scoring

Stufe 2: Compliance Scope — Block 8 + Block 9

Block 8: Verarbeitungstaetigkeiten (Abteilungswahl)

Die Frage vvt_departments (Multi-Choice) bestimmt, welche Abteilungen personenbezogene Daten verarbeiten:

Auswahl-Wert Department-Key(s) Beschreibung
personal dept_hr, dept_recruiting Personal + Bewerbermanagement
finanzen dept_finance Finanzen & Buchhaltung
vertrieb dept_sales Vertrieb & CRM
marketing dept_marketing Marketing
it dept_it IT / Administration
recht dept_recht Recht / Compliance
kundenservice dept_support Kundenservice / Support
produktion dept_produktion Produktion / Fertigung
logistik dept_logistik Logistik / Versand
einkauf dept_einkauf Einkauf / Beschaffung
facility dept_facility Facility Management

Das Mapping erfolgt in ScopeWizardTab.tsx ueber DEPT_VALUE_TO_KEY.

Block 9: Datenkategorien pro Abteilung

Fuer jede in Block 8 gewaehlte Abteilung wird eine eigene Frage mit spezifischen Datenkategorien angezeigt. Die Datenkategorien stammen aus DEPARTMENT_DATA_CATEGORIES (vvt-profiling.ts:306).

12 Abteilungen mit insgesamt ~80 Datenkategorien:

Abteilung Scope-Frage VVT-Mapping Kategorien (Auswahl) Art. 9
Personal (HR) dk_dept_hr dept_hr_categories Stammdaten, Gehalt, SV-Nr., Bankverbindung, Gesundheit, Religion Gesundheit, Religion
Recruiting dk_dept_recruiting dept_recruiting_categories Bewerberstammdaten, Bewerbungsunterlagen, Qualifikationen Gesundheit
Finanzen dk_dept_finance dept_finance_categories Kunden-/Lieferantendaten, Bankverbindungen, Steuer-IDs, Rechnungen
Vertrieb dk_dept_sales dept_sales_categories Kontaktdaten, CRM-Daten, Kommunikation, Vertragsdaten
Marketing dk_dept_marketing dept_marketing_categories E-Mail, Tracking, Consent, Social-Media, Interessenprofil
Support dk_dept_support dept_support_categories Kundenstammdaten, Tickets, Kommunikation, Vertragsdaten
IT dk_dept_it dept_it_categories Benutzerkonten, Logs, Geraete, Netzwerk, E-Mail, Backups
Recht dk_dept_recht dept_recht_categories Vertraege, Compliance-Daten, Vorfaelle, Strafrechtliche Daten Strafrechtlich
Produktion dk_dept_produktion dept_produktion_categories Schichtplaene, Mitarbeiterdaten, Arbeitsschutz, Zugang Gesundheit
Logistik dk_dept_logistik dept_logistik_categories Empfaenger, Versandadressen, Sendungsverfolgung, Fahrer
Einkauf dk_dept_einkauf dept_einkauf_categories Lieferantenkontakte, Vertraege, Bankverbindungen
Facility dk_dept_facility dept_facility_categories Zutrittsdaten, Dienstleister, Videoueberwachung, Besucher Gesundheit

Smart Auto-Prefill: Beim erstmaligen Aufklappen einer Abteilungskarte werden automatisch alle Kategorien mit isTypical: true vorausgewaehlt. Art.-9-Kategorien werden orange hervorgehoben.

Stufe 3: Scope → VVT Generator

Funktion: exportToVVTAnswers() (compliance-scope-profiling.ts:987)

Jede Scope-Frage, die ein mapsToVVTQuestion-Attribut traegt, wird in das VVT-Antwort-Format ueberfuehrt. Das Mapping ist deklarativ — kein imperativer Verteilungscode.

Funktion: generateActivities() (vvt-profiling.ts:459)

  1. Template-Triggering: Jede VVT-Profiling-Frage hat ein triggersTemplates-Array. Wird eine Boolean-Frage mit true beantwortet, werden alle referenzierten Templates aktiviert.
  2. IT-Baseline: Die 4 IT-Templates (Systemadministration, Backup, Logging, IAM) werden immer generiert.
  3. Enrichment: enrichActivityFromAnswers() reichert Aktivitaeten an:
    • transfer_cloud_us = true → US-Drittlandtransfer mit SCC + TIA auf jede Aktivitaet
    • data_health = trueHEALTH_DATA + Art. 9 Rechtsgrundlage auf HR-Aktivitaeten
    • data_minors = trueMINORS als Betroffenenkategorie auf Support/Engineering
    • special_ai / special_video_surveillancedpiaRequired = true
  4. Art. 30 Abs. 5 Pruefung: < 250 Mitarbeiter UND keine besonderen Kategorien → Ausnahme moeglich

16 vorbefuellte Fragen (SCOPE_PREFILLED_VVT_QUESTIONS)

Diese VVT-Profiling-Fragen werden automatisch aus Scope-Antworten befuellt, sodass der Nutzer sie nicht doppelt beantworten muss:

VVT-Frage Quelle (Scope-Block)
org_industry Block 1 (Organisation)
org_employees Company Profile
org_b2b_b2c Block 1
dept_hr Block 2/8 (Abteilungen)
dept_finance Block 2/8
dept_marketing Block 2/8
data_health Block 2/4 (Datenkategorien)
data_minors Block 2/4
data_biometric Block 2/4
data_criminal Block 2/4
special_ai Block 3/7 (Besondere Verarbeitungen)
special_video_surveillance Block 3/4
special_tracking Block 3/4
transfer_cloud_us Block 4 (Drittland)
transfer_subprocessor Block 4
transfer_support_non_eu Block 4

Cross-Modul-Datenverteilung

Dasselbe deklarative Muster wird auch fuer andere Module verwendet:

Modul Export-Funktion Mapping-Attribut
VVT exportToVVTAnswers() mapsToVVTQuestion
Loeschfristen exportToLoeschfristenAnswers() mapsToLFQuestion
TOM Generator exportToTOMProfile() (direkte Ableitung)

Bidirektionale Mappings: prefillFromVVTAnswers() und prefillFromLoeschfristenAnswers() ermoeglichen auch den Rueckfluss: Wenn ein Nutzer zuerst das VVT-Modul verwendet, koennen diese Antworten in den Scope uebernommen werden.


Datei-Uebersicht: Scope-Integration

Datei Beschreibung
lib/sdk/compliance-scope-profiling.ts Scope Engine: 9 Bloecke, Export-Funktionen, Company-Profile-Prefill
lib/sdk/vvt-profiling.ts VVT-Profiling: 25 Fragen, 12 Abteilungs-Datenkategorien, Generator
lib/sdk/vvt-baseline-catalog.ts 18 Baseline-Templates mit Freitext-Feldern
components/sdk/compliance-scope/ScopeWizardTab.tsx Block-9-UI: Accordion, Auto-Prefill, Art.-9-Badges
lib/sdk/__tests__/vvt-scope-integration.test.ts 35 Integrationstests fuer die gesamte Pipeline

Phase 2 — Geplante Erweiterungen

Feature Beschreibung
Processor Records Backend DB-Tabelle + API-Endpoints fuer Art. 30 Abs. 2 Auftragsverarbeiter
Link-Tabellen M:N-Verknuepfungen VVT <-> Loeschfristen und VVT <-> TOM
Bidirektionaler Sync Link-Operation aktualisiert auch Ziel-Modul
VVT Generator Service Backend-basierte Auto-Fill Engine mit Company Profile + Templates
LibraryAutocomplete-Komponente Wiederverwendbare Frontend-Komponente fuer alle Library-Felder
Word/DOCX-Export Ergaenzung des PDF-Drucks um nativen Word-Export