# DSR — Betroffenenrechte (Art. 15–21 DSGVO) Das DSR-Modul verwaltet **Data Subject Requests** (Betroffenenanfragen) gemaess DSGVO Art. 15–21. Es ersetzt den bisherigen Proxy zum consent-service durch eine native Python/FastAPI-Implementierung mit eigenem Datenmodell, Status-Workflow, Fristen-Management und Kommunikations-Tracking. --- ## Uebersicht | Eigenschaft | Wert | |-------------|------| | **SDK-Route** | `/sdk/dsr` | | **Backend** | `backend-compliance:8002` | | **Router-Prefix** | `/api/compliance/dsr` | | **Rechtsgrundlage** | Art. 15–21, Art. 12 Abs. 3 DSGVO | | **DB-Migration** | 026_dsr.sql | | **Tests** | 50 Tests (`test_dsr_routes.py`) | | **Status** | 100% — native Implementierung | --- ## Anfragetypen | Typ | DSGVO-Artikel | Beschreibung | |-----|--------------|--------------| | `access` | Art. 15 | Auskunftsrecht | | `rectification` | Art. 16 | Berichtigungsrecht | | `erasure` | Art. 17 | Recht auf Loeschung | | `restriction` | Art. 18 | Recht auf Einschraenkung | | `portability` | Art. 20 | Recht auf Datenuebertragbarkeit | | `objection` | Art. 21 | Widerspruchsrecht | --- ## Status-Workflow ```mermaid graph LR A[new] --> B[in_review] B --> C[identity_verification] C --> D[processing] D --> E[completed] D --> F[rejected] B --> F A --> G[cancelled] D --> H[extended] H --> D ``` - **Frist:** 30 Tage ab Eingang (Art. 12 Abs. 3) - **Verlaengerung:** Einmalig um weitere 60 Tage moeglich (mit Begruendung) - **Identitaetspruefung:** Pflicht vor Bearbeitung (Art. 12 Abs. 6) --- ## API-Endpoints ### DSR-Verwaltung | Methode | Pfad | Beschreibung | |---------|------|--------------| | `POST` | `/dsr` | DSR erstellen (auto request_number, 30-Tage Deadline) | | `GET` | `/dsr` | DSRs auflisten (Filter: status, type, assigned_to, priority, overdue, search, date-range) | | `GET` | `/dsr/stats` | Dashboard-Statistiken (offen, ueberfaellig, avg. Bearbeitungszeit) | | `GET` | `/dsr/{id}` | DSR-Detail | | `PUT` | `/dsr/{id}` | DSR aktualisieren | | `DELETE` | `/dsr/{id}` | DSR loeschen | ### Status-Aktionen | Methode | Pfad | Beschreibung | |---------|------|--------------| | `POST` | `/dsr/{id}/status` | Status aendern (mit Kommentar) | | `POST` | `/dsr/{id}/verify-identity` | Identitaet verifizieren (method + verified_by) | | `POST` | `/dsr/{id}/assign` | Bearbeiter zuweisen | | `POST` | `/dsr/{id}/extend` | Frist verlaengern (+60 Tage, mit Begruendung) | | `POST` | `/dsr/{id}/complete` | Abschliessen (mit Zusammenfassung) | | `POST` | `/dsr/{id}/reject` | Ablehnen (mit Begruendung) | ### Kommunikation & History | Methode | Pfad | Beschreibung | |---------|------|--------------| | `GET` | `/dsr/{id}/history` | Status-Audit-Trail | | `GET` | `/dsr/{id}/communications` | Kommunikations-Log | | `POST` | `/dsr/{id}/communicate` | Nachricht senden (email/portal/phone) | ### Art. 17(3) Ausnahmen-Pruefung | Methode | Pfad | Beschreibung | |---------|------|--------------| | `GET` | `/dsr/{id}/exception-checks` | Ausnahmen-Checks abrufen | | `POST` | `/dsr/{id}/exception-checks/init` | 6 Standard-Checks initialisieren | | `PUT` | `/dsr/{id}/exception-checks/{checkId}` | Einzelnen Check aktualisieren | Die 6 Standard-Ausnahmen (Art. 17 Abs. 3 DSGVO): 1. Ausuebung der Meinungs- und Informationsfreiheit 2. Erfuellung rechtlicher Verpflichtungen 3. Gruende des oeffentlichen Interesses (Gesundheit) 4. Archivzwecke im oeffentlichen Interesse 5. Geltendmachung/Ausuebung/Verteidigung von Rechtsanspruechen 6. Statistische Zwecke (§ 27 BDSG) ### Template-Verwaltung | Methode | Pfad | Beschreibung | |---------|------|--------------| | `GET` | `/dsr/templates` | Alle Kommunikationsvorlagen | | `GET` | `/dsr/templates/published` | Publizierte Vorlagen (Filter: request_type, language) | | `GET` | `/dsr/templates/{id}/versions` | Versionen einer Vorlage | | `POST` | `/dsr/templates/{id}/versions` | Neue Version erstellen | | `PUT` | `/dsr/template-versions/{id}/publish` | Version publizieren | ### Fristen-Verarbeitung | Methode | Pfad | Beschreibung | |---------|------|--------------| | `POST` | `/dsr/deadlines/process` | Ueberfaellige DSRs markieren (Batch-Job) | --- ## DB-Tabellen (Migration 026) | Tabelle | Beschreibung | |---------|--------------| | `compliance_dsr_requests` | Haupttabelle (26+ Spalten, inkl. request_number Sequence) | | `compliance_dsr_status_history` | Immutabler Status-Audit-Trail | | `compliance_dsr_communications` | E-Mail/Portal-Kommunikation | | `compliance_dsr_templates` | Kommunikationsvorlagen | | `compliance_dsr_template_versions` | Versionierte Template-Inhalte | | `compliance_dsr_exception_checks` | Art. 17(3) Ausnahmen-Pruefungen | **Sequence:** `compliance_dsr_request_number_seq` — Generiert fortlaufende Antragsnummern (`DSR-2026-000001`). --- ## Datenmodell (DSR-Anfrage) ```json { "id": "uuid", "tenant_id": "uuid", "request_number": "DSR-2026-000001", "request_type": "erasure", "status": "processing", "priority": "high", "subject_name": "Max Mustermann", "subject_email": "max@beispiel.de", "description": "Bitte alle personenbezogenen Daten loeschen", "assigned_to": "dsb@firma.de", "deadline": "2026-04-04T00:00:00Z", "identity_verified": true, "identity_verification_method": "id_card", "created_at": "2026-03-05T10:00:00Z" } ``` --- ## Frontend-Proxy Das DSR-Frontend nutzt den bestehenden Compliance-Catch-All-Proxy: | Frontend-Route | Ziel | |----------------|------| | `/api/sdk/v1/compliance/dsr/*` | `backend:8002/api/compliance/dsr/*` | !!! info "Migration vom consent-service" Vor der Migration wurden DSR-Anfragen ueber `dsr_api.py` und `dsr_admin_api.py` als Proxy an den Go consent-service weitergeleitet. Diese Proxy-Dateien wurden entfernt. Alle DSR-Daten liegen jetzt nativ in der Compliance-Datenbank.