# 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+) |
