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>
293 lines
14 KiB
Markdown
293 lines
14 KiB
Markdown
# Loeschfristen — Loeschkonzept (Art. 5/17/30 DSGVO)
|
|
|
|
## Uebersicht
|
|
|
|
Das Loeschfristen-Modul implementiert ein vollstaendiges, auditfaehiges Loeschkonzept gemaess DSGVO Art. 5 Abs. 1 lit. e (Speicherbegrenzung), Art. 17 (Recht auf Loeschung) und Art. 30 (Dokumentation der Loeschfristen im VVT).
|
|
|
|
**Kernfunktionen:**
|
|
|
|
- 3-Level-Loeschlogik (Zweckende → Aufbewahrungspflicht → Legal Hold)
|
|
- 25 vordefinierte Baseline-Templates fuer gaengige Datenobjekte
|
|
- 4-Schritt-Profiling-Wizard zur automatischen Policy-Generierung
|
|
- 11 automatisierte Compliance-Checks
|
|
- Druckfertiges Loeschkonzept-Dokument mit 11 Sektionen
|
|
- JSON/CSV/Markdown-Export
|
|
|
|
## 3-Level Loeschlogik
|
|
|
|
Die Loeschung personenbezogener Daten folgt einer dreistufigen Priorisierung:
|
|
|
|
```mermaid
|
|
graph TD
|
|
A[Daten erhoben] --> B{Zweck erfuellt?}
|
|
B -->|Ja| C{Aufbewahrungspflicht?}
|
|
B -->|Nein| D[Weiter speichern]
|
|
C -->|Ja| E{Frist abgelaufen?}
|
|
C -->|Nein| F{Legal Hold?}
|
|
E -->|Ja| F
|
|
E -->|Nein| G[Aufbewahren bis Fristende]
|
|
F -->|Ja| H[Speichern bis Legal Hold endet]
|
|
F -->|Nein| I[Loeschung durchfuehren]
|
|
```
|
|
|
|
| Level | Trigger | Beschreibung |
|
|
|-------|---------|--------------|
|
|
| 1 | **Zweckende** | Daten werden geloescht, wenn der Verarbeitungszweck entfaellt |
|
|
| 2 | **Aufbewahrungspflicht** | Gesetzliche Aufbewahrungsfristen verlaengern die Speicherung |
|
|
| 3 | **Legal Hold** | Aktive Legal Holds setzen die Loeschung aus |
|
|
|
|
## Frontend — 5-Tab-Aufbau
|
|
|
|
### Tab 1: Uebersicht
|
|
|
|
Statistik-Dashboard mit Filterung und Suche:
|
|
|
|
- Gesamtanzahl Policies, Status-Verteilung, ueberfaellige Pruefungen
|
|
- Suche nach Datenobjekt, Tags und Status
|
|
- Schnellaktionen: Bearbeiten, Klonen, Archivieren
|
|
|
|
### Tab 2: Editor
|
|
|
|
Vollstaendiges Bearbeitungsformular mit 35+ Feldern:
|
|
|
|
- Stammdaten (Datenobjekt, Beschreibung, Betroffenengruppen, Datenkategorien)
|
|
- 3-Level-Loeschlogik (Trigger, Aufbewahrungstreiber, Frist, Startereignis)
|
|
- Loeschmethode und -details
|
|
- Speicherorte (Typ, Provider, Backup-Kennzeichnung)
|
|
- Legal Hold Management (Hinzufuegen, Aktivieren, Aufheben)
|
|
- Verantwortlichkeiten und VVT-Verknuepfung
|
|
- Status-Workflow (Entwurf → Aktiv → Pruefung erforderlich → Archiviert)
|
|
|
|
### Tab 3: Generator
|
|
|
|
4-Schritt-Profiling-Wizard mit 16 Fragen:
|
|
|
|
1. **Organisation** (4 Fragen): Branche, Mitarbeiterzahl, Geschaeftsmodell, Website
|
|
2. **Datenkategorien** (5 Fragen): HR, Buchhaltung, Vertraege, Marketing, Video
|
|
3. **Systeme** (4 Fragen): Cloud, Backup, ERP/CRM, Zutrittskontrolle
|
|
4. **Spezielle Anforderungen** (3 Fragen): Legal Hold, Langzeitarchivierung, Gesundheitsdaten
|
|
|
|
Der Wizard generiert automatisch passende Policies aus dem Baseline-Katalog.
|
|
|
|
### Tab 4: Export & Compliance
|
|
|
|
- **JSON-Export**: Vollstaendiger Policy-Export als JSON
|
|
- **CSV-Export**: Excel-kompatibel mit BOM und Semikolon-Trennung
|
|
- **Compliance-Bericht**: Markdown-formatierter Bericht mit Score und Empfehlungen
|
|
- **11 Compliance-Checks**: Automatisierte Pruefung aller Policies
|
|
|
|
### Tab 5: Loeschkonzept-Dokument
|
|
|
|
Druckfertiges Loeschkonzept mit 11 Sektionen:
|
|
|
|
| # | Sektion | Inhalt |
|
|
|---|---------|--------|
|
|
| 0 | Deckblatt | Organisation, DSB, Version, Datum |
|
|
| — | Inhaltsverzeichnis | Auto-generiert |
|
|
| 1 | Ziel und Zweck | DSGVO Art. 5/17/30 Bezug |
|
|
| 2 | Geltungsbereich | Systeme, Speicherorte |
|
|
| 3 | Grundprinzipien | 5 Kernprinzipien |
|
|
| 4 | Loeschregeln-Uebersicht | Tabelle aller Policies |
|
|
| 5 | Detaillierte Loeschregeln | Pro Policy: Alle Felder |
|
|
| 6 | VVT-Verknuepfung | Cross-Referenz-Tabelle |
|
|
| 7 | Legal Hold Verfahren | Prozedur + aktive Holds |
|
|
| 8 | Verantwortlichkeiten | Rollenmatrix |
|
|
| 9 | Pruef-/Revisionszyklus | Review-Zeitplan |
|
|
| 10 | Compliance-Status | Score, Issues |
|
|
| 11 | Aenderungshistorie | Versionstabelle |
|
|
|
|
**Ausgabe:** HTML-Download oder PDF-Druck via Browser.
|
|
|
|
## Backend API (7 Endpoints)
|
|
|
|
| Methode | Pfad | Beschreibung |
|
|
|---------|------|--------------|
|
|
| `GET` | `/api/v1/compliance/loeschfristen` | Alle Policies abrufen (mit Pagination) |
|
|
| `POST` | `/api/v1/compliance/loeschfristen` | Neue Policy erstellen |
|
|
| `GET` | `/api/v1/compliance/loeschfristen/{id}` | Einzelne Policy abrufen |
|
|
| `PUT` | `/api/v1/compliance/loeschfristen/{id}` | Policy aktualisieren |
|
|
| `DELETE` | `/api/v1/compliance/loeschfristen/{id}` | Policy loeschen |
|
|
| `GET` | `/api/v1/compliance/loeschfristen/stats` | Statistik-Uebersicht |
|
|
| `PATCH` | `/api/v1/compliance/loeschfristen/{id}/status` | Status aendern |
|
|
|
|
## Datenbank-Schema
|
|
|
|
Tabelle: `compliance_loeschfristen`
|
|
|
|
| Spalte | Typ | Beschreibung |
|
|
|--------|-----|--------------|
|
|
| `id` | UUID (PK) | Datenbank-ID |
|
|
| `tenant_id` | UUID | Mandant |
|
|
| `project_id` | UUID | Projekt |
|
|
| `policy_id` | VARCHAR | Display-ID (LF-2026-001) |
|
|
| `data_object_name` | VARCHAR | Datenobjekt |
|
|
| `description` | TEXT | Beschreibung |
|
|
| `affected_groups` | JSONB | Betroffenengruppen |
|
|
| `data_categories` | JSONB | Datenkategorien |
|
|
| `primary_purpose` | TEXT | Verarbeitungszweck |
|
|
| `deletion_trigger` | VARCHAR | Loeschtrigger |
|
|
| `retention_driver` | VARCHAR | Aufbewahrungstreiber |
|
|
| `retention_driver_detail` | TEXT | Detail zum Treiber |
|
|
| `retention_duration` | INTEGER | Aufbewahrungsdauer |
|
|
| `retention_unit` | VARCHAR | Einheit (DAYS/MONTHS/YEARS) |
|
|
| `retention_description` | TEXT | Beschreibung der Frist |
|
|
| `start_event` | VARCHAR | Startereignis |
|
|
| `has_active_legal_hold` | BOOLEAN | Legal Hold aktiv? |
|
|
| `legal_holds` | JSONB | Legal Holds (Array) |
|
|
| `storage_locations` | JSONB | Speicherorte (Array) |
|
|
| `deletion_method` | VARCHAR | Loeschmethode |
|
|
| `deletion_method_detail` | TEXT | Detail zur Methode |
|
|
| `responsible_role` | VARCHAR | Verantwortliche Rolle |
|
|
| `responsible_person` | VARCHAR | Verantwortliche Person |
|
|
| `release_process` | TEXT | Freigabeprozess |
|
|
| `linked_vvt_activity_ids` | JSONB | VVT-Verknuepfungen |
|
|
| `status` | VARCHAR | Status |
|
|
| `last_review_date` | TIMESTAMP | Letzte Pruefung |
|
|
| `next_review_date` | TIMESTAMP | Naechste Pruefung |
|
|
| `review_interval` | VARCHAR | Pruefintervall |
|
|
| `tags` | JSONB | Tags |
|
|
| `created_at` | TIMESTAMP | Erstellt am |
|
|
| `updated_at` | TIMESTAMP | Geaendert am |
|
|
|
|
Migration: `backend-compliance/migrations/017_loeschfristen.sql`
|
|
|
|
## Baseline-Katalog (25 Templates)
|
|
|
|
| # | Template-ID | Datenobjekt | Treiber | Frist | Trigger |
|
|
|---|-------------|-------------|---------|-------|---------|
|
|
| 1 | `personal-akten` | Personalakten | AO 147 | 10 Jahre | Aufbewahrungspflicht |
|
|
| 2 | `buchhaltungsbelege` | Buchhaltungsbelege | HGB 257 | 10 Jahre | Aufbewahrungspflicht |
|
|
| 3 | `rechnungen` | Rechnungen | UStG 14b | 10 Jahre | Aufbewahrungspflicht |
|
|
| 4 | `geschaeftsbriefe` | Geschaeftsbriefe | HGB 257 | 6 Jahre | Aufbewahrungspflicht |
|
|
| 5 | `bewerbungsunterlagen` | Bewerbungsunterlagen | AGG 15 | 6 Monate | Aufbewahrungspflicht |
|
|
| 6 | `kundenstammdaten` | Kundenstammdaten | BGB 195 | 3 Jahre | Aufbewahrungspflicht |
|
|
| 7 | `newsletter-einwilligungen` | Newsletter-Einwilligungen | — | Bis Widerruf | Zweckende |
|
|
| 8 | `webserver-logs` | Webserver-Logs | BSIG | 7 Tage | Aufbewahrungspflicht |
|
|
| 9 | `videoueberwachung` | Videoueberwachung | BDSG 35 | 2 Tage | Aufbewahrungspflicht |
|
|
| 10 | `gehaltsabrechnungen` | Gehaltsabrechnungen | AO 147 | 10 Jahre | Aufbewahrungspflicht |
|
|
| 11 | `vertraege` | Vertraege | HGB 257 | 10 Jahre | Aufbewahrungspflicht |
|
|
| 12 | `zeiterfassung` | Zeiterfassungsdaten | ArbZG 16 | 2 Jahre | Aufbewahrungspflicht |
|
|
| 13 | `krankmeldungen` | Krankmeldungen | BGB 195 | 3 Jahre | Aufbewahrungspflicht |
|
|
| 14 | `steuererklaerungen` | Steuererklaerungen | AO 147 | 10 Jahre | Aufbewahrungspflicht |
|
|
| 15 | `protokolle-gesellschafter` | Gesellschafterprotokolle | HGB 257 | 10 Jahre | Aufbewahrungspflicht |
|
|
| 16 | `crm-kontakthistorie` | CRM-Kontakthistorie | BGB 195 | 3 Jahre | Aufbewahrungspflicht |
|
|
| 17 | `backup-daten` | Backup-Daten | BSIG | 90 Tage | Aufbewahrungspflicht |
|
|
| 18 | `cookie-consent-logs` | Cookie-Consent-Nachweise | BGB 195 | 3 Jahre | Aufbewahrungspflicht |
|
|
| 19 | `email-archivierung` | E-Mail-Archivierung | HGB 257 | 6 Jahre | Aufbewahrungspflicht |
|
|
| 20 | `zutrittsprotokolle` | Zutrittsprotokolle | BSIG | 90 Tage | Aufbewahrungspflicht |
|
|
| 21 | `schulungsnachweise` | Schulungsnachweise | Individuell | 3 Jahre | Aufbewahrungspflicht |
|
|
| 22 | `betriebsarzt-doku` | Betriebsarzt-Dokumentation | Individuell | 40 Jahre | Aufbewahrungspflicht |
|
|
| 23 | `kundenreklamationen` | Kundenreklamationen | BGB 195 | 3 Jahre | Aufbewahrungspflicht |
|
|
| 24 | `lieferantenbewertungen` | Lieferantenbewertungen | HGB 257 | 6 Jahre | Aufbewahrungspflicht |
|
|
| 25 | `social-media-daten` | Social-Media-Marketingdaten | — | Bis Zweckende | Zweckende |
|
|
|
|
## 9 Aufbewahrungstreiber
|
|
|
|
| Treiber | Gesetz | Standard-Frist | Beschreibung |
|
|
|---------|--------|----------------|--------------|
|
|
| `AO_147` | 147 AO | 10 Jahre | Steuerrelevante Unterlagen |
|
|
| `HGB_257` | 257 HGB | 10/6 Jahre | Handelsbuecher, -briefe |
|
|
| `USTG_14B` | 14b UStG | 10 Jahre | Rechnungen |
|
|
| `BGB_195` | 195 BGB | 3 Jahre | Regelmaessige Verjaehrung |
|
|
| `ARBZG_16` | 16 Abs. 2 ArbZG | 2 Jahre | Arbeitszeitaufzeichnungen |
|
|
| `AGG_15` | 15 Abs. 4 AGG | 6 Monate | Entschaedigungsansprueche |
|
|
| `BDSG_35` | 35 BDSG / Art. 17 DSGVO | Unverzueglich | Zweckwegfall |
|
|
| `BSIG` | BSIG / IT-SiG 2.0 | 90 Tage | Sicherheitslogs |
|
|
| `CUSTOM` | Individuell | — | Benutzerdefiniert |
|
|
|
|
## 6 Loeschmethoden
|
|
|
|
| Methode | Beschreibung |
|
|
|---------|--------------|
|
|
| `AUTO_DELETE` | Automatische Loeschung durch System-Job |
|
|
| `MANUAL_REVIEW_DELETE` | Manuelle Pruefung vor Loeschung |
|
|
| `ANONYMIZATION` | Anonymisierung (Statistik bleibt erhalten) |
|
|
| `AGGREGATION` | Statistische Verdichtung |
|
|
| `CRYPTO_ERASE` | Kryptographische Loeschung (Key Destruction) |
|
|
| `PHYSICAL_DESTROY` | Physische Vernichtung (DIN 66399) |
|
|
|
|
## Profiling Wizard (4 Schritte, 16 Fragen)
|
|
|
|
Der Profiling-Wizard generiert automatisch passende Loeschrichtlinien basierend auf dem Unternehmensprofil.
|
|
|
|
| Schritt | Titel | Fragen | Inhalt |
|
|
|---------|-------|--------|--------|
|
|
| 1 | Organisation | 4 | Branche, Groesse, Geschaeftsmodell, Website |
|
|
| 2 | Datenkategorien | 5 | HR, Buchhaltung, Vertraege, Marketing, Video |
|
|
| 3 | Systeme & Infrastruktur | 4 | Cloud, Backup, ERP/CRM, Zutrittskontrolle |
|
|
| 4 | Spezielle Anforderungen | 3 | Legal Hold, Archivierung, Gesundheitsdaten |
|
|
|
|
**Regelbeispiele:**
|
|
|
|
- `data-hr = true` → Personalakten, Gehaltsabrechnungen, Zeiterfassung, Bewerbungen, Krankmeldungen, Schulungsnachweise
|
|
- `data-buchhaltung = true` → Buchhaltungsbelege, Rechnungen, Steuererklaerungen
|
|
- `data-vertraege = true` → Vertraege, Geschaeftsbriefe, Kundenstammdaten, Kundenreklamationen, Lieferantenbewertungen
|
|
- `data-marketing = true` → Newsletter, CRM-Kontakthistorie, Cookie-Consent, Social-Media-Daten
|
|
- `sys-zutritt = true` → Zutrittsprotokolle
|
|
- `sys-cloud = true` → E-Mail-Archivierung
|
|
- `special-gesundheit = true` → Krankmeldungen, Betriebsarzt-Dokumentation
|
|
|
|
## Compliance Checker (11 Pruefungen)
|
|
|
|
| # | Check-Typ | Schweregrad | Ausloeser |
|
|
|---|-----------|-------------|-----------|
|
|
| 1 | `MISSING_TRIGGER` | HIGH | Policy ohne Loeschtrigger |
|
|
| 2 | `MISSING_LEGAL_BASIS` | HIGH | Aufbewahrungspflicht ohne Rechtsgrundlage |
|
|
| 3 | `OVERDUE_REVIEW` | MEDIUM | Ueberfaellige Pruefung |
|
|
| 4 | `NO_RESPONSIBLE` | MEDIUM | Keine Verantwortliche Person/Rolle |
|
|
| 5 | `LEGAL_HOLD_CONFLICT` | CRITICAL | Legal Hold + Auto-Delete aktiv |
|
|
| 6 | `STALE_DRAFT` | LOW | Entwurf aelter als 90 Tage |
|
|
| 7 | `UNCOVERED_VVT_CATEGORY` | MEDIUM | VVT-Datenkategorie ohne Loeschfrist |
|
|
| 8 | `MISSING_DELETION_METHOD` | MEDIUM | Aktive Policy ohne Loeschmethoden-Detail |
|
|
| 9 | `MISSING_STORAGE_LOCATIONS` | MEDIUM | Aktive Policy ohne Speicherorte |
|
|
| 10 | `EXCESSIVE_RETENTION` | HIGH | Frist > 2x gesetzliches Maximum |
|
|
| 11 | `MISSING_DATA_CATEGORIES` | LOW | Nicht-Entwurf ohne Datenkategorien |
|
|
|
|
**Score-Berechnung:** `100 - (CRITICAL*15 + HIGH*10 + MEDIUM*5 + LOW*2)`
|
|
|
|
## Cross-Modul-Integration
|
|
|
|
### VVT-Verknuepfung
|
|
|
|
Jede Loeschregel kann mit Verarbeitungstaetigkeiten aus dem VVT verknuepft werden (`linked_vvt_activity_ids`). Das Loeschkonzept-Dokument generiert automatisch eine Cross-Referenz-Tabelle (Sektion 6).
|
|
|
|
### Scope Engine Prefill
|
|
|
|
Der Profiling-Wizard kann Antworten aus der Compliance Scope Engine uebernehmen. 12 Fragen werden automatisch vorausgefuellt:
|
|
|
|
- `org-branche`, `org-mitarbeiter`, `org-geschaeftsmodell`, `org-website`
|
|
- `data-hr`, `data-buchhaltung`, `data-vertraege`, `data-marketing`, `data-video`
|
|
- `sys-cloud`, `sys-erp`
|
|
|
|
### Document Generator Template
|
|
|
|
Das Loeschkonzept kann als eigenstaendiges Template im Document Generator genutzt werden (Template-Typ: `loeschkonzept`).
|
|
|
|
## Audit-Faehigkeit
|
|
|
|
Das Loeschkonzept erfuellt folgende Audit-Kriterien:
|
|
|
|
1. **Vollstaendigkeit:** Alle Datenobjekte mit Loeschfristen, Rechtsgrundlagen und Methoden dokumentiert
|
|
2. **Nachvollziehbarkeit:** Aenderungshistorie mit Versionsnummern und Autoren
|
|
3. **Aktualitaet:** Definiertes Pruefintervall mit automatischer Ueberfaelligkeits-Erkennung
|
|
4. **Verantwortlichkeit:** Rollenmatrix mit klaren Zustaendigkeiten
|
|
5. **Cross-Referenz:** Verknuepfung mit VVT (Art. 30 DSGVO)
|
|
6. **Compliance-Nachweis:** Automatisierte 11-Punkt-Pruefung mit Score und Befundprotokoll
|
|
7. **Druckfertigkeit:** PDF-taugliches Dokument mit Deckblatt, Inhaltsverzeichnis und rechtlichen Verweisen
|
|
|
|
## Datei-Uebersicht
|
|
|
|
| Datei | Beschreibung |
|
|
|-------|--------------|
|
|
| `admin-compliance/app/sdk/loeschfristen/page.tsx` | Frontend-Seite (5 Tabs) |
|
|
| `admin-compliance/lib/sdk/loeschfristen-types.ts` | TypeScript-Typen und Konstanten |
|
|
| `admin-compliance/lib/sdk/loeschfristen-baseline-catalog.ts` | 25 Baseline-Templates |
|
|
| `admin-compliance/lib/sdk/loeschfristen-profiling.ts` | 4-Schritt-Profiling-Wizard |
|
|
| `admin-compliance/lib/sdk/loeschfristen-compliance.ts` | 11 Compliance-Checks |
|
|
| `admin-compliance/lib/sdk/loeschfristen-export.ts` | JSON/CSV/Markdown-Export |
|
|
| `admin-compliance/lib/sdk/loeschfristen-document.ts` | Loeschkonzept-Dokument-Generator |
|
|
| `backend-compliance/compliance/api/loeschfristen_routes.py` | Backend API-Routen |
|
|
| `backend-compliance/compliance/db/loeschfristen_models.py` | SQLAlchemy-Modelle |
|
|
| `backend-compliance/migrations/017_loeschfristen.sql` | Datenbank-Migration |
|
|
| `backend-compliance/tests/test_loeschfristen_routes.py` | Backend-Tests (58+) |
|