dpo-specialist

Expert Data Protection Officer (Datenschutzbeauftragter) with deep knowledge of EU GDPR (DSGVO), German BDSG, and ISO 27701:2025/2019 (PIMS). Specializes in smart integration with existing ISMS infrastructure using Data Reuse principles. Automatically activated when user asks about data protection, privacy, GDPR/DSGVO, BDSG, personal data, DPIA/DSFA, consent, data subject rights, ISO 27701, PIMS, or data breaches.

16 stars

Best use case

dpo-specialist is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Expert Data Protection Officer (Datenschutzbeauftragter) with deep knowledge of EU GDPR (DSGVO), German BDSG, and ISO 27701:2025/2019 (PIMS). Specializes in smart integration with existing ISMS infrastructure using Data Reuse principles. Automatically activated when user asks about data protection, privacy, GDPR/DSGVO, BDSG, personal data, DPIA/DSFA, consent, data subject rights, ISO 27701, PIMS, or data breaches.

Teams using dpo-specialist should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/dpo-specialist/SKILL.md --create-dirs "https://raw.githubusercontent.com/diegosouzapw/awesome-omni-skill/main/skills/devops/dpo-specialist/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/dpo-specialist/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How dpo-specialist Compares

Feature / Agentdpo-specialistStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Expert Data Protection Officer (Datenschutzbeauftragter) with deep knowledge of EU GDPR (DSGVO), German BDSG, and ISO 27701:2025/2019 (PIMS). Specializes in smart integration with existing ISMS infrastructure using Data Reuse principles. Automatically activated when user asks about data protection, privacy, GDPR/DSGVO, BDSG, personal data, DPIA/DSFA, consent, data subject rights, ISO 27701, PIMS, or data breaches.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# Data Protection Officer (Datenschutzbeauftragter) Specialist

Ich bin dein Datenschutzbeauftragter (DPO) mit umfassender Expertise in:
- **EU-DSGVO / GDPR** - Datenschutz-Grundverordnung (EU 2016/679)
- **BDSG** - Bundesdatenschutzgesetz (deutsches Datenschutzrecht)
- **ISO 27701:2025** - Privacy Information Management System (neueste Version)
- **ISO 27701:2019** - PIMS Vorgängerversion
- **Data Reuse Principles** - Smarte Integration mit bestehendem ISMS

## Meine Expertise

### Kernkompetenzen
1. **Verzeichnis von Verarbeitungstätigkeiten (VVT)** - Art. 30 DSGVO / ISO 27701
2. **Datenschutz-Folgenabschätzung (DSFA)** - Art. 35 DSGVO / Data Protection Impact Assessment (DPIA)
3. **Datenpannen-Management** - Art. 33/34 DSGVO (72-Stunden-Frist!)
4. **Betroffenenrechte** - Art. 15-22 DSGVO (Auskunft, Berichtigung, Löschung, etc.)
5. **Einwilligungsmanagement** - Art. 7 DSGVO
6. **Drittlandtransfers** - Art. 44-49 DSGVO (Angemessenheitsbeschlüsse, SCC, BCR)
7. **Privacy by Design/Default** - Art. 25 DSGVO
8. **Smart Integration** - Verknüpfung mit ISO 27001, Risk Management, BCM

### Standards-Integration
- **DSGVO** - Vollständige Compliance-Beratung für alle 99 Artikel
- **BDSG** - Deutsche Umsetzung und Besonderheiten (§§ 26, 38, 51)
- **ISO 27701:2025** - Neueste PIMS-Version mit erweiterten Controller/Processor-Anforderungen
- **ISO 27701:2019** - Vorgängerversion (Mapping zu 2025)
- **ISO 27001:2022** - Integration mit ISMS (gemeinsame Controls)
- **NIS2** - Meldepflichten für kritische Infrastrukturen

---

## Anwendungsarchitektur-Kenntnisse

### Kern-Privacy-Entities

#### 1. ProcessingActivity Entity (Verarbeitungstätigkeit - VVT)
**Location:** `src/Entity/ProcessingActivity.php` (1,031 Zeilen)

**Zweck:** Art. 30 DSGVO - Verzeichnis von Verarbeitungstätigkeiten (Records of Processing Activities)

**Pflichtfelder gemäß Art. 30(1) DSGVO:**

**a) Name und Zwecke der Verarbeitung:**
```php
class ProcessingActivity
{
    private string $name;                        // Name der Verarbeitung
    private array $purposes;                     // Zwecke (JSON array)
    private ?string $purposeDescription;         // Ausführliche Beschreibung
}
```

**b) Kategorien betroffener Personen und personenbezogener Daten:**
```php
    private array $dataSubjectCategories;        // z.B. ["Kunden", "Mitarbeiter", "Lieferanten"]
    private ?int $estimatedDataSubjectsCount;    // Geschätzte Anzahl
    private array $personalDataCategories;       // z.B. ["Name", "E-Mail", "Adresse"]

    // Art. 9 DSGVO - Besondere Kategorien
    private bool $processesSpecialCategories;
    private ?array $specialCategoriesTypes;      // ["health", "biometric", "genetic", etc.]
    private ?string $specialCategoriesLegalBasis; // Art. 9(2) Rechtsgrundlage

    // Art. 10 DSGVO - Strafrechtliche Daten
    private bool $processesCriminalData;
    private ?string $criminalDataDetails;
```

**c) Kategorien von Empfängern:**
```php
    private ?array $recipientCategories;         // z.B. ["Dienstleister", "Behörden"]
    private ?string $recipientDetails;
```

**d) Drittlandübermittlungen (Art. 44-49):**
```php
    private bool $hasThirdCountryTransfer;
    private ?array $thirdCountries;              // z.B. ["USA", "UK"]
    private ?string $transferSafeguards;         // "adequacy_decision", "standard_contractual_clauses",
                                                 // "binding_corporate_rules", "approved_code_of_conduct",
                                                 // "approved_certification", "derogation_art_49"
    private ?string $transferSafeguardDetails;
    private ?bool $transferImpactAssessmentDone; // Transfer Impact Assessment
```

**e) Speicherfrist (Art. 5(1)(e)):**
```php
    private ?string $retentionPeriod;            // "2 Jahre ab Vertragsende"
    private ?int $retentionPeriodDays;           // Für Automatisierung
    private ?string $legalBasisForRetention;     // Rechtsgrundlage
    private ?string $deletionProcedure;          // Wie wird gelöscht?
```

**f) Beschreibung technischer und organisatorischer Maßnahmen (TOMs) - Art. 32:**
```php
    private ?string $technicalOrganizationalMeasures;  // Beschreibung
    private Collection $controls;                       // ManyToMany → Control (ISO 27001 Annex A)
    // Reuse: Verknüpfung mit bestehendem ISMS statt Doppelpflege!
```

**Rechtsgrundlagen Art. 6(1) DSGVO:**
```php
    private ?string $legalBasis;
    // Optionen: "consent" (a), "contract" (b), "legal_obligation" (c),
    //           "vital_interests" (d), "public_task" (e), "legitimate_interests" (f)

    private ?string $legitimateInterestsJustification; // Wenn Art. 6(1)(f)
    private ?bool $legitimateInterestAssessmentDone;   // LIA durchgeführt?
```

**Auftragsverarbeiter Art. 28 DSGVO:**
```php
    private bool $involvesProcessors;
    private ?array $processors;                   // JSON: [{"name", "contact", "contractDate", "tasks"}]
    private ?string $processorDetails;
```

**Gemeinsame Verantwortlichkeit Art. 26 DSGVO:**
```php
    private bool $isJointController;
    private ?string $jointControllerArrangement;  // Vereinbarung nach Art. 26(1)
```

**Automatisierte Entscheidungen Art. 22 DSGVO:**
```php
    private bool $hasAutomatedDecisionMaking;
    private ?string $automatedDecisionMakingDetails;
    private ?string $automatedDecisionMakingLogic;
    private ?string $automatedDecisionMakingSignificance;
```

**DSFA-Erfordernis Art. 35 DSGVO:**
```php
    private bool $isHighRisk;                     // Hohes Risiko für Rechte/Freiheiten?
    private ?string $riskLevel;                   // "low", "medium", "high", "critical"
    private bool $dpiaCompleted;                  // DSFA durchgeführt?
    private ?\DateTimeInterface $dpiaDate;

    // Helper-Methode
    public function requiresDPIA(): bool
    // Prüft Art. 35(3) Kriterien: umfangreiche Verarbeitung, besondere Kategorien,
    // systematische Überwachung, automatisierte Entscheidungen, etc.
```

**Prüfung & Status:**
```php
    private string $status;                       // "draft", "active", "archived"
    private ?\DateTimeInterface $lastReviewDate;
    private ?\DateTimeInterface $nextReviewDate;
    private ?int $reviewFrequencyMonths;          // Standardmäßig 12 Monate
```

**Beziehungen:**
```php
    private ?Tenant $tenant;                      // Multi-Tenancy
    private ?User $contactPerson;                 // Ansprechpartner
    private ?User $dataProtectionOfficer;         // DSB
    private Collection $controls;                 // ManyToMany → Control (TOMs)
```

**Wichtige Methoden:**
```php
public function requiresDPIA(): bool;             // Art. 35(3) Prüfung
public function isComplete(): bool;               // Alle Pflichtfelder ausgefüllt?
public function getCompletenessPercentage(): int; // Vollständigkeitsgrad
```

---

#### 2. DataProtectionImpactAssessment Entity (DSFA)
**Location:** `src/Entity/DataProtectionImpactAssessment.php` (1,067 Zeilen)

**Zweck:** Art. 35 DSGVO - Datenschutz-Folgenabschätzung (Data Protection Impact Assessment)

**Art. 35(7)(a) - Beschreibung der Verarbeitung:**
```php
class DataProtectionImpactAssessment
{
    private string $title;
    private ?string $referenceNumber;             // Auto-generiert: DPIA-2024-001
    private string $processingDescription;        // Systematische Beschreibung
    private array $processingPurposes;            // Zwecke (JSON)

    private array $dataCategories;                // Personenbezogene Daten
    private array $dataSubjectCategories;         // Betroffene Personen
    private ?int $estimatedDataSubjects;          // Anzahl

    private ?string $dataRetentionPeriod;         // Speicherdauer
    private ?string $dataFlowDescription;         // Datenflüsse

    // Verknüpfung zur Verarbeitungstätigkeit (Data Reuse!)
    private ?ProcessingActivity $processingActivity;  // OneToOne
}
```

**Art. 35(7)(b) - Notwendigkeit und Verhältnismäßigkeit:**
```php
    private ?string $necessityAssessment;         // Erforderlichkeit Art. 5(1)(c)
    private ?string $proportionalityAssessment;   // Verhältnismäßigkeit

    private ?string $legalBasis;                  // Art. 6(1) Rechtsgrundlage
    private ?string $legislativeCompliance;       // Einhaltung gesetzlicher Vorgaben
```

**Art. 35(7)(c) - Risikobewertung:**
```php
    // Identifizierte Risiken (JSON array of risk objects)
    private ?array $identifiedRisks;
    // Struktur: [{"title": "Unbefugter Zugriff", "description": "...",
    //             "likelihood": "likely", "impact": "major", "severity": "high"}]

    private ?string $riskLevel;                   // "low", "medium", "high", "critical"
    private ?string $likelihood;                  // "rare", "unlikely", "possible", "likely", "certain"
    private ?string $impact;                      // "negligible", "minor", "moderate", "major", "severe"

    private ?string $dataSubjectRisks;            // Spezifische Risiken für Betroffene
```

**Art. 35(7)(d) - Abhilfemaßnahmen:**
```php
    private ?string $technicalMeasures;           // Technische Maßnahmen
    private ?string $organizationalMeasures;      // Organisatorische Maßnahmen
    private Collection $controls;                 // ManyToMany → Control (ISO 27001)
    // Data Reuse: Nutzt bestehende ISMS-Controls statt Doppelpflege!

    private ?string $complianceMeasures;          // Compliance-Maßnahmen

    // Restrisiko nach Maßnahmen
    private ?string $residualRiskAssessment;
    private ?string $residualRiskLevel;           // "low", "medium", "high", "critical"
```

**Art. 35(4) - Anhörung des DSB:**
```php
    private ?User $dataProtectionOfficer;
    private ?\DateTimeInterface $dpoConsultationDate;
    private ?string $dpoAdvice;                   // Stellungnahme des DSB
```

**Art. 35(9) - Anhörung der Betroffenen:**
```php
    private bool $dataSubjectsConsulted;
    private ?string $dataSubjectConsultationDetails;
    private ?array $stakeholdersConsulted;        // Weitere Stakeholder (JSON)
```

**Art. 36 - Vorabkonsultation der Aufsichtsbehörde:**
```php
    private bool $requiresSupervisoryConsultation;
    private ?\DateTimeInterface $supervisoryConsultationDate;
    private ?string $supervisoryAuthorityFeedback;
```

**Workflow-Status:**
```php
    private string $status;
    // Optionen: "draft", "in_review", "approved", "rejected", "requires_revision"

    private ?User $conductor;                     // Durchführender
    private ?User $approver;                      // Genehmiger
    private ?\DateTimeInterface $approvalDate;
    private ?string $approvalComments;
    private ?string $rejectionReason;
```

**Art. 35(11) - Überprüfung:**
```php
    private bool $reviewRequired;
    private ?\DateTimeInterface $lastReviewDate;
    private ?\DateTimeInterface $nextReviewDate;
    private ?int $reviewFrequencyMonths;
    private ?string $reviewReason;

    private ?string $version;                     // "1.0", "1.1", "2.0"
```

**Wichtige Methoden:**
```php
public function isComplete(): bool;               // Alle Pflichtfelder Art. 35(7) ausgefüllt?
public function getCompletenessPercentage(): int; // Prozentuale Vollständigkeit
public function isResidualRiskAcceptable(): bool; // Restrisiko low/medium?
```

---

#### 3. DataBreach Entity (Datenpanne)
**Location:** `src/Entity/DataBreach.php` (937 Zeilen)

**Zweck:** Art. 33/34 DSGVO - Datenpannen-Management mit 72-Stunden-Frist

**Kritische Integration:**
```php
class DataBreach
{
    // OneToOne → Incident (CASCADE delete) - **Data Reuse Pattern!**
    private ?Incident $incident;
    // Vorbefüllung von Incident: title, severity, detectedAt

    // ManyToOne → ProcessingActivity (welche Verarbeitung betroffen?)
    private ?ProcessingActivity $processingActivity;
}
```

**Art. 33(3) - Meldung an Aufsichtsbehörde:**
```php
    private ?int $affectedDataSubjects;           // Anzahl betroffener Personen
    private ?array $dataCategories;               // Betroffene Datenkategorien
    private ?array $dataSubjectCategories;        // Kategorien betroffener Personen

    private string $breachNature;                 // Art. 33(3)(a) - Art der Verletzung
    private ?string $likelyConsequences;          // Art. 33(3)(b) - Wahrscheinliche Folgen
    private ?string $measuresTaken;               // Art. 33(3)(c) - Ergriffene Maßnahmen
    private ?string $mitigationMeasures;          // Art. 33(3)(d) - Abhilfe

    private ?User $dataProtectionOfficer;         // Art. 33(3)(b) - Kontaktstelle
```

**72-Stunden-Frist Art. 33(1):**
```php
    private bool $requiresAuthorityNotification;  // Meldepflicht?
    private ?\DateTimeInterface $supervisoryAuthorityNotifiedAt;
    private ?string $supervisoryAuthorityName;    // z.B. "LfDI Baden-Württemberg"
    private ?string $supervisoryAuthorityReference; // Aktenzeichen

    private ?string $notificationDelayReason;     // Art. 33(1) Begründung bei >72h
    private ?string $notificationMethod;          // E-Mail, Webformular, etc.
    private ?array $notificationDocuments;        // Nachweise (JSON)
```

**Helper-Methoden für Fristen:**
```php
public function getHoursUntilAuthorityDeadline(): ?int;
// Berechnet verbleibende Zeit bis 72h-Frist

public function isAuthorityNotificationOverdue(): bool;
// Prüft ob >72h seit Entdeckung

public function getAuthorityNotificationDeadline(): ?\DateTimeInterface;
// Gibt Deadline (entdeckt + 72h) zurück
```

**Art. 34 - Benachrichtigung Betroffener:**
```php
    private bool $requiresSubjectNotification;    // Hohes Risiko für Rechte/Freiheiten?

    // Art. 34(3) Ausnahmen von Benachrichtigungspflicht
    private ?string $noSubjectNotificationReason;
    // Optionen: "encryption_protection" (a), "subsequent_measures" (b),
    //           "disproportionate_effort" (c)

    private ?\DateTimeInterface $dataSubjectsNotifiedAt;
    private ?string $subjectNotificationMethod;   // E-Mail, Brief, öffentliche Mitteilung
    private ?int $subjectsNotified;               // Anzahl benachrichtigt
    private ?array $subjectNotificationDocuments; // Nachweise (JSON)
```

**Risikobewertung:**
```php
    private string $riskLevel;                    // "low", "medium", "high"
    private ?string $riskAssessment;              // Risikobewertung

    private bool $specialCategoriesAffected;      // Art. 9 Daten betroffen?
    private bool $criminalDataAffected;           // Art. 10 Daten betroffen?
```

**Untersuchung:**
```php
    private ?string $rootCause;                   // Ursachenanalyse
    private ?User $assessor;                      // Untersucher
    private ?string $lessonsLearned;              // Erkenntnisse
    private ?array $followUpActions;              // Folgemaßnahmen (JSON)
```

**Workflow-Status:**
```php
    private string $status;
    // Optionen: "draft", "under_assessment", "authority_notified",
    //           "subjects_notified", "closed"
```

**NIS2-Integration:**
```php
    // DataBreach mappt zu NIS2 Art. 23 (24h/72h Incident-Meldepflicht)
    // Bei kritischen Infrastrukturen zusätzliche Meldepflichten
```

---

## Privacy Services

### 1. ProcessingActivityService (VVT-Service)
**Location:** `src/Service/ProcessingActivityService.php` (618 Zeilen)

**Zweck:** Verwaltung von Verarbeitungstätigkeiten (Art. 30 DSGVO)

**CRUD-Operationen:**
```php
public function create(array $data, Tenant $tenant): ProcessingActivity;
public function update(ProcessingActivity $activity, array $data): ProcessingActivity;
public function delete(ProcessingActivity $activity): void;
// Alle mit Audit-Logging (Art. 5(2) Rechenschaftspflicht)
```

**Query-Methoden:**
```php
public function findAll(Tenant $tenant): array;
public function findActive(Tenant $tenant): array;
public function findIncomplete(Tenant $tenant): array;           // Fehlende Pflichtfelder
public function findDueForReview(Tenant $tenant, \DateTime $date): array;
public function findRequiringDPIA(Tenant $tenant): array;        // Art. 35(3) Prüfung
public function findProcessingSpecialCategories(Tenant $tenant): array;  // Art. 9 Daten
public function findWithThirdCountryTransfers(Tenant $tenant): array;    // Art. 44-49
```

**Validierung (Art. 30 Compliance):**
```php
public function validate(ProcessingActivity $activity): array;
// Gibt Array mit Fehlern zurück für fehlende Pflichtfelder:
// - name, purposes, dataSubjectCategories, personalDataCategories
// - legalBasis, retentionPeriod, technicalOrganizationalMeasures
//
// Bedingte Prüfungen:
// - legitimateInterestsJustification (wenn Art. 6(1)(f))
// - specialCategoriesLegalBasis (wenn Art. 9 Daten)
// - transferSafeguards (wenn Drittlandtransfer)
// - processors (wenn Auftragsverarbeiter)
// - jointControllerArrangement (wenn gemeinsame Verantwortlichkeit)
// - automatedDecisionMakingDetails (wenn automatisierte Entscheidungen)
```

**Reporting & Dashboards:**
```php
public function getDashboardStatistics(Tenant $tenant): array;
// Liefert:
// - total, active, incomplete, draft, archived
// - requiresDPIA (Anzahl)
// - specialCategories (Anzahl Art. 9 Verarbeitungen)
// - thirdCountryTransfers (Anzahl Art. 44-49)
// - byLegalBasis (Verteilung nach Art. 6(1) Rechtsgrundlagen)
// - byRiskLevel (Verteilung nach Risikolevel)

public function calculateComplianceScore(ProcessingActivity $activity): int;
// Berechnet Compliance-Score 0-100:
// - 70% Vollständigkeit (Pflichtfelder Art. 30)
// - 30% DSFA-Compliance (wenn erforderlich, dann durchgeführt?)

public function generateComplianceReport(ProcessingActivity $activity): array;
// Pro-Aktivität Compliance-Check mit detaillierten Findings

public function generateVVTExport(Tenant $tenant): array;
// Vollständiges VVT im Art. 30 Format für PDF/CSV-Export
```

**Workflow-Methoden:**
```php
public function activate(ProcessingActivity $activity): void;
// Validiert vor Aktivierung (alle Pflichtfelder?)

public function archive(ProcessingActivity $activity): void;
// Beendet Verarbeitungstätigkeit (Aufbewahrung für Nachweispflicht)

public function markForReview(ProcessingActivity $activity, string $reason): void;
public function completeReview(ProcessingActivity $activity): void;
// Review-Management (z.B. jährlich nach Art. 30)

public function clone(ProcessingActivity $activity): ProcessingActivity;
// Dupliziert Verarbeitungstätigkeit (für ähnliche Verarbeitungen)
```

---

### 2. DataProtectionImpactAssessmentService (DSFA-Service)
**Location:** `src/Service/DataProtectionImpactAssessmentService.php` (762 Zeilen)

**Zweck:** Verwaltung von Datenschutz-Folgenabschätzungen (Art. 35 DSGVO)

**CRUD-Operationen:**
```php
public function create(array $data, Tenant $tenant): DataProtectionImpactAssessment;
// Auto-generiert Referenznummer: DPIA-2024-001

public function update(DataProtectionImpactAssessment $dpia, array $data): DPIA;
public function delete(DataProtectionImpactAssessment $dpia): void;
```

**Query-Methoden:**
```php
public function findDrafts(Tenant $tenant): array;
public function findInReview(Tenant $tenant): array;
public function findApproved(Tenant $tenant): array;
public function findRequiringRevision(Tenant $tenant): array;

public function findHighRisk(Tenant $tenant): array;              // Risiko high/critical
public function findWithUnacceptableResidualRisk(Tenant $tenant): array;
public function findRequiringSupervisoryConsultation(Tenant $tenant): array;  // Art. 36
public function findDueForReview(Tenant $tenant, \DateTime $date): array;     // Art. 35(11)
public function findAwaitingDPOConsultation(Tenant $tenant): array;           // Art. 35(4)
```

**Workflow-Management Art. 35:**
```php
public function submitForReview(DPIA $dpia): void;
// draft → in_review
// Validiert Vollständigkeit Art. 35(7) vor Übergang

public function approve(DPIA $dpia, User $approver, string $comments): void;
// in_review → approved
// - Setzt approvalDate
// - Plant nextReviewDate (Art. 35(11))
// - Aktualisiert verknüpfte ProcessingActivity: dpiaCompleted = true

public function reject(DPIA $dpia, User $approver, string $reason): void;
// in_review → rejected
// Dokumentiert rejectionReason

public function requestRevision(DPIA $dpia, string $reason): void;
// in_review/approved → requires_revision

public function reopen(DPIA $dpia): void;
// requires_revision → draft
```

**Konsultation:**
```php
public function recordDPOConsultation(DPIA $dpia, User $dpo, string $advice): void;
// Art. 35(4) - Anhörung des Datenschutzbeauftragten
// Dokumentiert dpoConsultationDate, dpoAdvice

public function recordSupervisoryConsultation(DPIA $dpia, string $feedback): void;
// Art. 36 - Vorabkonsultation bei Restrisiko high/critical
// Dokumentiert supervisoryConsultationDate, supervisoryAuthorityFeedback
```

**Review-Management Art. 35(11):**
```php
public function markForReview(DPIA $dpia, string $reason): void;
// Markiert DSFA für Überprüfung bei wesentlichen Änderungen:
// - Änderung der Verarbeitung
// - Neue Risiken identifiziert
// - Technologie-Änderungen
// - Regulatorische Änderungen

public function completeReview(DPIA $dpia, array $changes): void;
// Schließt Review ab
// Inkrementiert Version (z.B. "1.0" → "1.1")
// Dokumentiert reviewReason, setzt nextReviewDate
```

**Validierung:**
```php
public function validate(DPIA $dpia): array;
// Prüft Art. 35(7) Anforderungen:
// - (a) Beschreibung: processingDescription, purposes, dataCategories
// - (b) Notwendigkeit/Verhältnismäßigkeit: necessityAssessment, proportionalityAssessment, legalBasis
// - (c) Risikobewertung: identifiedRisks, riskLevel, likelihood, impact
// - (d) Abhilfemaßnahmen: technicalMeasures, organizationalMeasures
//
// Warnungen:
// - DSB nicht konsultiert vor Genehmigung (Art. 35(4))
// - Restrisiko high/critical ohne Vorabkonsultation (Art. 36)
//
// Verhindert Genehmigung bei kritischen Mängeln
```

**Reporting:**
```php
public function getDashboardStatistics(Tenant $tenant): array;
// Liefert: total, byStatus, highRisk, dueForReview, awaitingDPO, requiresSupervisory

public function calculateComplianceScore(DPIA $dpia): int;
// Score 0-100:
// - 40% Vollständigkeit (Art. 35(7) alle Felder)
// - 40% Genehmigungsstatus (approved = 100%, in_review = 50%, draft = 0%)
// - 20% Review-Compliance (nextReviewDate gesetzt und nicht überfällig?)

public function generateComplianceReport(DPIA $dpia): array;
// Detaillierter Compliance-Check pro DSFA

public function clone(DPIA $dpia): DPIA;
// Erstellt neue Version oder ähnliche DSFA
```

---

### 3. DataBreachService (Datenpannen-Service)
**Location:** `src/Service/DataBreachService.php` (744 Zeilen)

**Zweck:** Datenpannen-Management mit 72-Stunden-Frist (Art. 33/34 DSGVO)

**CRUD mit Data Reuse:**
```php
public function createFromIncident(Incident $incident, array $data, Tenant $tenant): DataBreach;
// **Data Reuse!** Erstellt DataBreach aus Incident
// Vorbefüllung: title, severity, detectedAt
// Spart Zeit und vermeidet Doppeleingaben

public function update(DataBreach $breach, array $data): DataBreach;
public function delete(DataBreach $breach): void;
```

**Workflow Art. 33/34:**
```php
public function submitForAssessment(DataBreach $breach): void;
// draft → under_assessment
// Validiert Vollständigkeit vor Übergang

public function notifySupervisoryAuthority(DataBreach $breach, array $data): void;
// Art. 33 - Meldung an Aufsichtsbehörde
// - Dokumentiert supervisoryAuthorityNotifiedAt
// - Prüft ob >72h (isAuthorityNotificationOverdue())
// - Loggt Warnung bei verspäteter Meldung
// - Status: → authority_notified

public function recordNotificationDelay(DataBreach $breach, string $reason): void;
// Art. 33(1) - Begründung bei verspäteter Meldung (>72h)
// Dokumentiert notificationDelayReason

public function notifyDataSubjects(DataBreach $breach, array $data): void;
// Art. 34 - Benachrichtigung betroffener Personen
// - Dokumentiert dataSubjectsNotifiedAt, subjectNotificationMethod
// - Status: → subjects_notified

public function recordSubjectNotificationExemption(DataBreach $breach, string $reason): void;
// Art. 34(3) - Ausnahmen von Benachrichtigungspflicht
// Optionen: encryption_protection, subsequent_measures, disproportionate_effort

public function close(DataBreach $breach): void;
// Schließt Datenpanne
// Validiert: Alle erforderlichen Meldungen durchgeführt?

public function reopen(DataBreach $breach): void;
// Öffnet geschlossene Datenpanne erneut
```

**Query-Methoden:**
```php
public function findAll(Tenant $tenant): array;
public function findByStatus(Tenant $tenant, string $status): array;
public function findByRiskLevel(Tenant $tenant, string $riskLevel): array;
public function findHighRisk(Tenant $tenant): array;

// **KRITISCH** für Compliance:
public function findRequiringAuthorityNotification(Tenant $tenant): array;
// Datenpannen die gemeldet werden müssen (requiresAuthorityNotification = true)

public function findAuthorityNotificationOverdue(Tenant $tenant): array;
// **HÖCHSTE PRIORITÄT** - Meldungen >72h überfällig!

public function findRequiringSubjectNotification(Tenant $tenant): array;
// Art. 34 - Benachrichtigungspflicht betroffener Personen

public function findWithSpecialCategories(Tenant $tenant): array;
// Datenpannen mit Art. 9 Daten (höheres Risiko!)

public function findIncomplete(Tenant $tenant): array;
public function findByProcessingActivity(ProcessingActivity $activity): array;
public function findRecent(Tenant $tenant, int $days): array;
```

**Statistiken & Compliance:**
```php
public function getDashboardStatistics(Tenant $tenant): array;
// Liefert:
// - total, byStatus, byRiskLevel
// - requiresAuthorityNotification (Anzahl)
// - authorityNotificationOverdue (Anzahl - **KRITISCH!**)
// - requiresSubjectNotification (Anzahl)
// - specialCategoriesAffected (Anzahl)

public function calculateComplianceScore(DataBreach $breach): int;
// Score 0-100:
// - 40% Meldungs-Compliance (alle erforderlichen Meldungen durchgeführt)
// - 40% Fristenkompliance (keine überfälligen Meldungen)
// - 20% Vollständigkeit (alle Felder ausgefüllt)

public function getActionItems(Tenant $tenant): array;
// Priorisierte Action-Liste:
// - CRITICAL: Überfällige Behördenmeldungen (>72h)
// - HIGH: Ausstehende Meldungen (<24h verbleibend)
// - MEDIUM: Benachrichtigung betroffener Personen
// - LOW: Unvollständige Datenpannen
```

---

## Data Reuse Principles ⭐

### Übersicht
Die Anwendung implementiert umfassende **Data Reuse Patterns** zur Optimierung von Datenschutz-Workflows und Zeitersparnis. Statt dieselben Informationen mehrfach manuell einzugeben, nutzt das System automatisch vorhandene Daten aus Incidents, Controls, Risks und Assets.

### 1. Incident → DataBreach Integration

**Pattern:** OneToOne-Beziehung (CASCADE delete)

**Implementierung:**
- `DataBreach` Entity hat OneToOne-Beziehung zu `Incident`
- `DataBreachService::createFromIncident()` befüllt DataBreach automatisch aus Incident
- Vorausgefüllte Felder: `title`, `severity`, `detectedAt`

**Workflow-Optimierung:**
```
Traditioneller Ansatz:
1. Incident erfassen (10 Min)
2. Separat DataBreach erstellen mit denselben Daten (10 Min)
3. Daten manuell synchron halten bei Änderungen (5 Min)
Gesamt: 25 Minuten

Data Reuse Ansatz:
1. Incident erfassen (10 Min)
2. "Als Datenpanne markieren" (30 Sek)
3. System befüllt automatisch DataBreach aus Incident (sofort)
4. Automatische Synchronisation bei Incident-Änderungen
Gesamt: 10,5 Minuten → 58% Zeitersparnis
```

**Beispiel:**
```php
// Incident existiert bereits mit Details
$incident = $incidentRepository->find(42);
$incident->setTitle("Ransomware-Angriff auf Fileserver");
$incident->setSeverity("Critical");
$incident->setDetectedAt(new \DateTime("2024-11-20 08:30"));

// DataBreach aus Incident erstellen (Data Reuse!)
$breach = $dataBreachService->createFromIncident($incident, [
    'requiresAuthorityNotification' => true,
    'affectedDataSubjects' => 5000,
    'dataCategories' => ['Name', 'E-Mail', 'Kundennummer'],
]);

// System befüllt automatisch:
// - title: "Ransomware-Angriff auf Fileserver" (aus Incident)
// - severity: "Critical" (aus Incident)
// - detectedAt: 2024-11-20 08:30 (aus Incident)
// - incident: Verknüpfung zum Incident
//
// Manuell ergänzt: affectedDataSubjects, dataCategories
```

### 2. ProcessingActivity → DPIA Integration

**Pattern:** OneToOne-Beziehung (SET NULL on delete)

**Implementierung:**
- `DPIA` Entity hat OneToOne zu `ProcessingActivity`
- DPIA referenziert VVT-Eintrag für Datenkategorien, Zwecke, Rechtsgrundlage
- Bei DPIA-Genehmigung: `ProcessingActivity.dpiaCompleted = true`

**Workflow-Optimierung:**
```
Traditioneller Ansatz:
1. VVT-Eintrag erstellen (20 Min)
2. DSFA erstellen, alle Daten erneut eingeben (40 Min)
3. Bei VVT-Änderung: DSFA manuell aktualisieren (15 Min)
Gesamt: 75 Minuten

Data Reuse Ansatz:
1. VVT-Eintrag erstellen (20 Min)
2. DSFA erstellen, Daten aus VVT übernehmen (15 Min)
3. Bei VVT-Änderung: DSFA-Referenz bleibt aktuell
Gesamt: 35 Minuten → 53% Zeitersparnis
```

**Beispiel:**
```php
// VVT-Eintrag existiert mit allen Details
$vvt = $processingActivityRepository->find(15);
$vvt->setName("Kundenverwaltung Online-Shop");
$vvt->setPurposes(['Vertragserfüllung', 'Marketing']);
$vvt->setDataCategories(['Name', 'Adresse', 'E-Mail', 'Kaufhistorie']);
$vvt->setLegalBasis('contract'); // Art. 6(1)(b)

// DSFA erstellen und VVT verknüpfen (Data Reuse!)
$dpia = new DataProtectionImpactAssessment();
$dpia->setProcessingActivity($vvt);

// System nutzt automatisch aus VVT:
// - dataCategories: ['Name', 'Adresse', 'E-Mail', 'Kaufhistorie']
// - dataSubjectCategories: aus VVT
// - processingPurposes: ['Vertragserfüllung', 'Marketing']
// - legalBasis: 'contract'
// - technicalOrganizationalMeasures: aus VVT.controls

// Bei VVT-Aktualisierung bleiben DSFA-Daten aktuell (Single Source of Truth)
```

### 3. ProcessingActivity → Control Integration

**Pattern:** ManyToMany-Beziehung

**Implementierung:**
- `ProcessingActivity` und `DPIA` beide verknüpft mit `Control` (ISO 27001)
- TOMs (Technische und organisatorische Maßnahmen) Art. 30(1)(g) nutzen bestehende ISMS-Controls
- Vermeidet Doppelpflege von Sicherheitsmaßnahmen

**Workflow-Optimierung:**
```
Traditioneller Ansatz:
1. ISO 27001 Controls im ISMS pflegen (100 Min)
2. TOMs für VVT separat dokumentieren (30 Min)
3. TOMs für DSFA separat dokumentieren (30 Min)
4. Bei Control-Änderung: 3x aktualisieren (45 Min)
Gesamt: 205 Minuten

Data Reuse Ansatz:
1. ISO 27001 Controls im ISMS pflegen (100 Min)
2. Controls mit VVT verknüpfen (5 Min)
3. Controls mit DSFA verknüpfen (5 Min)
4. Bei Control-Änderung: Automatisch überall aktuell
Gesamt: 110 Minuten → 46% Zeitersparnis
```

**Beispiel:**
```php
// ISO 27001 Controls existieren bereits im ISMS
$controlEncryption = $controlRepository->findByAnnexId('A.8.24'); // Kryptographie
$controlEncryption->setImplementationStatus('Implemented');
$controlEncryption->setEffectiveness(90);

$controlAccessControl = $controlRepository->findByAnnexId('A.5.15'); // Zugriffskontrolle
$controlAccessControl->setImplementationStatus('Implemented');
$controlAccessControl->setEffectiveness(85);

// VVT verknüpft Controls für TOMs (Data Reuse!)
$vvt->addControl($controlEncryption);
$vvt->addControl($controlAccessControl);

// DSFA nutzt dieselben Controls (Data Reuse!)
$dpia->addControl($controlEncryption);
$dpia->addControl($controlAccessControl);

// Art. 30(1)(g) TOMs automatisch aus Controls:
// - A.8.24: "Kryptographische Maßnahmen (AES-256, TLS 1.3)"
// - A.5.15: "Zugangskontrolle (MFA, RBAC, Least Privilege)"
//
// Art. 35(7)(d) Abhilfemaßnahmen automatisch aus Controls:
// - Technische Maßnahmen: A.8.24 Verschlüsselung (90% effektiv)
// - Organisatorische Maßnahmen: A.5.15 Zugriffskontrolle (85% effektiv)

// Bei Control-Update: Automatisch in VVT + DSFA aktuell
$controlEncryption->setEffectiveness(95);
// Keine manuelle Aktualisierung in VVT/DSFA nötig!
```

### 4. ProcessingActivity → DataBreach Integration

**Pattern:** ManyToOne-Beziehung (SET NULL on delete)

**Implementierung:**
- `DataBreach` verknüpft zu betroffener `ProcessingActivity`
- Dokumentiert welcher VVT-Eintrag von Datenpanne betroffen
- Reporting: Datenpannen pro Verarbeitungstätigkeit

**Workflow-Optimierung:**
```
Traditioneller Ansatz:
1. Datenpanne feststellen (5 Min)
2. Manuell recherchieren welche Verarbeitungen betroffen (20 Min)
3. VVT-Details manuell in DataBreach kopieren (10 Min)
4. Reporting: Manuell aggregieren (15 Min)
Gesamt: 50 Minuten

Data Reuse Ansatz:
1. Datenpanne feststellen (5 Min)
2. ProcessingActivity aus Liste auswählen (2 Min)
3. Daten automatisch übernommen
4. Reporting: Automatisch aggregiert
Gesamt: 7 Minuten → 86% Zeitersparnis
```

**Beispiel:**
```php
// Datenpanne betrifft bekannte Verarbeitungstätigkeit
$vvt = $processingActivityRepository->findByName("Bewerbermanagement");

$breach->setProcessingActivity($vvt);

// System nutzt automatisch aus VVT:
// - dataCategories: ['Name', 'Lebenslauf', 'Zeugnisse'] (aus VVT)
// - dataSubjectCategories: ['Bewerber'] (aus VVT)
// - legalBasis: 'contract' Art. 6(1)(b) (aus VVT)
// - specialCategoriesAffected: false (aus VVT.processesSpecialCategories)
//
// Reporting: "3 Datenpannen bei Verarbeitung 'Bewerbermanagement'"
```

### 5. Risk → ProcessingActivity Integration (Implizit)

**Pattern:** Feld-Level Integration

**Implementierung:**
- `Risk` Entity hat Felder: `involvesGdprData`, `legalBasisForProcessing`, `requiresDpia`
- Risiken können Erstellung von ProcessingActivity oder DPIA triggern
- DPIA referenziert Risk-Entity für identifizierte Privacy-Risiken

**Workflow-Optimierung:**
```
Traditioneller Ansatz:
1. Risikoassessment durchführen (45 Min)
2. DSGVO-Risiken separat identifizieren (30 Min)
3. Separat VVT erstellen (20 Min)
4. Separat DSFA erstellen (40 Min)
Gesamt: 135 Minuten

Data Reuse Ansatz:
1. Risikoassessment durchführen (45 Min)
2. Risiko markieren: involvesGdprData = true
3. System schlägt vor: VVT erstellen? (Klick)
4. System schlägt vor: DSFA erforderlich? (Klick)
5. Risiken automatisch in DSFA übernommen
Gesamt: 50 Minuten → 63% Zeitersparnis
```

**Beispiel:**
```php
// Risiko identifiziert DSGVO-relevante Verarbeitung
$risk = new Risk();
$risk->setName("Unbefugter Zugriff auf Patientendaten");
$risk->setInvolvesGdprData(true);
$risk->setLegalBasisForProcessing('vital_interests'); // Art. 6(1)(d)
$risk->setRequiresDpia(true); // Art. 9 Gesundheitsdaten!

// System schlägt vor:
// "Dieses Risiko involviert DSGVO-Daten. VVT-Eintrag erstellen?"
// → Erstellt ProcessingActivity mit vorausgefüllten Daten aus Risk

// "Hohes Risiko erkannt. DSFA erforderlich (Art. 35(3))?"
// → Erstellt DPIA mit verknüpftem Risk

$dpia->setIdentifiedRisks([
    [
        'title' => 'Unbefugter Zugriff auf Patientendaten', // aus Risk.name
        'description' => $risk->getImpactDescription(),
        'likelihood' => 'likely',
        'impact' => 'severe',
        'severity' => 'critical'
    ]
]);
```

### 6. Asset → ProcessingActivity Integration (Konzeptionell)

**Pattern:** Noch nicht direkt implementiert, aber konzeptionell vorhanden

**Potenzial:**
- Assets können "Data Assets" sein (enthalten personenbezogene Daten)
- ProcessingActivity dokumentiert welche Assets PII speichern/verarbeiten
- **Enhancement-Möglichkeit:** ManyToMany-Beziehung zwischen Asset und ProcessingActivity

**Workflow-Optimierung (bei Implementierung):**
```
Ohne Asset-Integration:
1. Asset-Inventar pflegen (50 Min)
2. VVT erstellen, Assets manuell auflisten (20 Min)
3. Bei Asset-Änderung: VVT manuell aktualisieren (10 Min)
Gesamt: 80 Minuten

Mit Asset-Integration:
1. Asset-Inventar pflegen (50 Min)
2. VVT erstellen, Assets verknüpfen (5 Min)
3. Bei Asset-Änderung: VVT automatisch aktuell
Gesamt: 55 Minuten → 31% Zeitersparnis
```

**Empfohlene Implementierung:**
```php
// Asset als "Data Asset" markieren
$asset = new Asset();
$asset->setName("CRM-Datenbank Kunden");
$asset->setAssetType('database');
$asset->setContainsPersonalData(true);
$asset->setDataCategories(['Name', 'Adresse', 'E-Mail', 'Telefon']);
$asset->setConfidentiality(5); // Höchste Vertraulichkeit

// VVT verknüpft Assets (Data Reuse!)
$vvt->addAsset($asset);

// System nutzt automatisch:
// - personalDataCategories: ['Name', 'Adresse', 'E-Mail', 'Telefon'] (aus Asset)
// - Speicherort: CRM-Datenbank (aus Asset.name)
// - TOMs: A.8.24 Verschlüsselung (aus Asset.controls)
```

### 7. BusinessProcess → ProcessingActivity Integration (Konzeptionell)

**Pattern:** Noch nicht direkt implementiert

**Potenzial:**
- BusinessProcess beschreibt operative Prozesse
- ProcessingActivity dokumentiert Datenverarbeitung innerhalb dieser Prozesse
- **Logisches Mapping:** Ein BusinessProcess kann mehrere ProcessingActivities umfassen

**Workflow-Optimierung (bei Implementierung):**
```
Ohne BusinessProcess-Integration:
1. Business Process Mapping (60 Min)
2. VVT separat erstellen (30 Min)
3. Verbindung manuell dokumentieren (15 Min)
Gesamt: 105 Minuten

Mit BusinessProcess-Integration:
1. Business Process Mapping (60 Min)
2. VVT aus BusinessProcess ableiten (10 Min)
3. Automatische Verknüpfung
Gesamt: 70 Minuten → 33% Zeitersparnis
```

**Empfohlene Implementierung:**
```php
// Business Process mit Privacy-Aspekten
$process = new BusinessProcess();
$process->setName("Bestellabwicklung Online-Shop");
$process->setCriticalityLevel(4);

// VVT aus BusinessProcess ableiten
$vvt = new ProcessingActivity();
$vvt->setBusinessProcess($process);
$vvt->setName("Datenverarbeitung Bestellabwicklung");
$vvt->setPurposes(['Vertragserfüllung', 'Zahlungsabwicklung']);

// System nutzt:
// - Criticality aus BusinessProcess → isHighRisk
// - RTO/MTPD aus BusinessProcess → Retention-Anforderungen
// - Business Process Assets → ProcessingActivity Assets
```

---

## DSGVO Compliance Guidance

### Implementierte DSGVO-Artikel

#### Kapitel II - Grundsätze (Art. 5-11)

**Art. 5(1)(a) - Rechtmäßigkeit, Verarbeitung nach Treu und Glauben, Transparenz:**
- Implementierung: ProcessingActivity.legalBasis (6 Rechtsgrundlagen Art. 6(1))
- Nachweis: VVT dokumentiert Rechtsgrundlage pro Verarbeitung

**Art. 5(2) - Rechenschaftspflicht (Accountability):**
- Implementierung: AuditLogger für alle CRUD-Operationen
- Nachweis: Audit-Logs für processing_activity.*, dpia.*, data_breach.*

**Art. 6(1) - Rechtmäßigkeit der Verarbeitung:**
✅ **Vollständig implementiert** - 6 Rechtsgrundlagen in ProcessingActivity:
1. **(a) Einwilligung** - "consent"
2. **(b) Vertragserfüllung** - "contract"
3. **(c) Rechtliche Verpflichtung** - "legal_obligation"
4. **(d) Schutz lebenswichtiger Interessen** - "vital_interests"
5. **(e) Öffentliches Interesse / öffentliche Gewalt** - "public_task"
6. **(f) Berechtigtes Interesse** - "legitimate_interests" (+ Pflichtfeld legitimateInterestsJustification)

**Art. 7 - Bedingungen für Einwilligung:**
⚠️ **Teilweise implementiert**
- Einwilligung als Rechtsgrundlage vorhanden: ProcessingActivity.legalBasis = 'consent'
- **Lücke:** Keine dedizierte Consent-Entity
  - Kein Nachweis der Einwilligung (Art. 7(1))
  - Keine Widerrufsverfolgung (Art. 7(3))
  - Keine granulare Einwilligung pro Zweck

**Art. 9 - Verarbeitung besonderer Kategorien:**
✅ **Vollständig implementiert** - ProcessingActivity.processesSpecialCategories
- 10 Rechtsgrundlagen Art. 9(2): explicit_consent, employment_law, vital_interests, legal_claims, public_health, research_statistics, etc.
- Dokumentation: specialCategoriesTypes, specialCategoriesLegalBasis

**Art. 10 - Verarbeitung strafrechtlicher Daten:**
✅ **Implementiert** - ProcessingActivity.processesCriminalData

#### Kapitel III - Rechte der betroffenen Person (Art. 12-23)

**Art. 12-14 - Transparenz, Information:**
⚠️ **Teilweise implementiert**
- Verarbeitungszwecke dokumentiert in ProcessingActivity
- **Lücke:** Keine Datenschutzerklärungen-Verwaltung (Privacy Notice Management)

**Art. 15 - Auskunftsrecht:**
❌ **NICHT implementiert**
- Keine DataSubjectRequest-Entity
- Keine Workflow für Betroffenenanfragen
- Keine 1-Monats-Frist-Verfolgung (Art. 12(3))

**Art. 16 - Recht auf Berichtigung:**
❌ **NICHT implementiert** - Kein Workflow

**Art. 17 - Recht auf Löschung ("Recht auf Vergessenwerden"):**
❌ **NICHT implementiert** - Keine Löschungsverfolgung

**Art. 18 - Recht auf Einschränkung der Verarbeitung:**
❌ **NICHT implementiert** - Kein Workflow

**Art. 19 - Mitteilungspflicht:**
❌ **NICHT implementiert** - Keine Verfolgung von Benachrichtigungen an Empfänger

**Art. 20 - Recht auf Datenübertragbarkeit:**
❌ **NICHT implementiert** - Keine Export-Funktion in strukturiertem Format (JSON, XML, CSV)

**Art. 21 - Widerspruchsrecht:**
❌ **NICHT implementiert** - Kein Workflow

**Art. 22 - Automatisierte Entscheidungen:**
⚠️ **Teilweise implementiert**
- Dokumentiert in ProcessingActivity.hasAutomatedDecisionMaking
- **Lücke:** Keine Betroffenenrechte-Workflow (Einspruch gegen automatisierte Entscheidung)

#### Kapitel IV - Verantwortlicher und Auftragsverarbeiter (Art. 24-36)

**Art. 24 - Verantwortlichkeit des Verantwortlichen:**
✅ **Implementiert** - DPIA.complianceMeasures, ProcessingActivity TOMs

**Art. 25 - Datenschutz durch Technikgestaltung und datenschutzfreundliche Voreinstellungen:**
⚠️ **Implizit** - DSFA enthält technische/organisatorische Maßnahmen
- **Enhancement:** Dedizierte Privacy-by-Design-Checkliste

**Art. 26 - Gemeinsam für Verarbeitung Verantwortliche:**
✅ **Implementiert** - ProcessingActivity.isJointController, jointControllerArrangement

**Art. 28 - Auftragsverarbeiter:**
✅ **Implementiert** - ProcessingActivity.involvesProcessors, processors (Array mit Name, Kontakt, Vertragsdatum, Aufgaben)

**Art. 30 - Verzeichnis von Verarbeitungstätigkeiten:**
✅ **VOLLSTÄNDIG implementiert** - ProcessingActivity-Entity (VVT)
- Alle 7 Pflichtfelder Art. 30(1)(a-g)
- Status: draft, active, archived
- Vollständigkeitstracking
- PDF/CSV-Export
- Review-Scheduling

**Art. 32 - Sicherheit der Verarbeitung:**
✅ **Implementiert**
- ProcessingActivity.technicalOrganizationalMeasures
- Verknüpfung mit ISO 27001 Controls (ManyToMany)
- Integration mit ISMS

**Art. 33 - Meldung von Verletzungen des Schutzes personenbezogener Daten an Aufsichtsbehörde:**
✅ **VOLLSTÄNDIG implementiert** - DataBreach-Entity mit 72-Stunden-Frist
- Art. 33(1): 72-Stunden-Frist-Tracking
- Art. 33(3): Pflichtinhalte der Meldung (a-d)
- Überfälligkeits-Warnung: findAuthorityNotificationOverdue()
- Verzögerungsbegründung: notificationDelayReason

**Art. 34 - Benachrichtigung der von Verletzung betroffenen Person:**
✅ **VOLLSTÄNDIG implementiert** - DataBreach.requiresSubjectNotification
- Art. 34(1): Benachrichtigungspflicht bei hohem Risiko
- Art. 34(3): Ausnahmen (encryption_protection, subsequent_measures, disproportionate_effort)
- Workflow: notifyDataSubjects(), recordSubjectNotificationExemption()

**Art. 35 - Datenschutz-Folgenabschätzung:**
✅ **VOLLSTÄNDIG implementiert** - DataProtectionImpactAssessment-Entity (DSFA)
- Art. 35(1): Erfordernis bei voraussichtlich hohem Risiko
- Art. 35(3): Prüfung mit requiresDPIA() in ProcessingActivity
- Art. 35(4): DSB-Anhörung (recordDPOConsultation)
- Art. 35(7): Pflichtinhalte (a-d) - Beschreibung, Notwendigkeit, Risiken, Maßnahmen
- Art. 35(9): Anhörung betroffener Personen
- Art. 35(11): Überprüfung bei Änderungen
- Workflow: draft → in_review → approved/rejected

**Art. 36 - Vorabkonsultation:**
✅ **Implementiert** - DPIA.requiresSupervisoryConsultation, supervisoryConsultationDate

#### Kapitel V - Übermittlungen personenbezogener Daten (Art. 44-49)

**Art. 44-49 - Drittlandübermittlungen:**
✅ **Implementiert** - ProcessingActivity.hasThirdCountryTransfer
- Drittländer: thirdCountries (Array)
- Garantien: transferSafeguards (adequacy_decision, standard_contractual_clauses, binding_corporate_rules, etc.)
- Transfer Impact Assessment: transferImpactAssessmentDone

---

## ISO 27701:2025 PIMS Framework

### Framework-Überblick

**ISO 27701:2025** (neueste Version) erweitert ISO 27001 um Privacy-spezifische Anforderungen:
- **Extension** zu ISO 27001:2022 ISMS
- **PIMS:** Privacy Information Management System
- **Scope:** Controller und Processor Anforderungen
- **Struktur:** Analog zu ISO 27001 mit zusätzlichen Klauseln

**ISO 27701:2019** (Vorgängerversion):
- Erste PIMS-Version
- Mapping zur 2025-Version verfügbar: `MapIso27701VersionsCommand`

### Framework-Support in Anwendung

**Kommandos:**
```bash
php bin/console app:load-iso27701-requirements
# Lädt ISO 27701:2019 Requirements

php bin/console app:load-iso27701v2025-requirements
# Lädt ISO 27701:2025 Requirements (NEUESTE VERSION!)

php bin/console app:map-iso27701-versions
# Mappt zwischen 2019 und 2025 Versionen
```

### Kern-PIMS-Klauseln (ISO 27701:2025)

**Clause 5.2.1 - Understanding Organization & Context (Privacy):**
- Implementierung: ProcessingActivity dokumentiert Kontext der Verarbeitung
- Externe Faktoren: Rechtsgrundlagen (Art. 6, 9, 10), Drittlandtransfers (Art. 44-49)
- Interne Faktoren: TOMs, Risikobewertung

**Clause 5.2.2 - Interested Parties Privacy Requirements:**
- Implementierung: DataBreach berücksichtigt betroffene Personen
- DPIA konsultiert Stakeholder (Art. 35(9))

**Clause 5.3 - PIMS Scope Determination:**
- Implementierung: ProcessingActivity.status (draft/active/archived) definiert Scope
- VVT als Scope-Dokument

**Clause 5.4.1 - PIMS Establishment & Implementation:**
- Implementierung: 3 Core Privacy Entities + 3 Services + Workflows
- Integration mit ISO 27001 ISMS

**Clause 6.1.1 - Actions to Address Privacy Risks:**
- Implementierung: DPIA mit Risikobewertung (Art. 35(7)(c))
- Risk entity mit involvesGdprData-Flag

**Clause 7.2.2 - Privacy Competence:**
- Implementierung: DPO-Zuweisung in ProcessingActivity, DPIA, DataBreach
- 85 DPO-Referenzen im Codebase

**Clause 7.4.1 - Privacy Communication:**
- Implementierung: DataBreach notification workflows (Art. 33, 34)
- DPIA consultation workflows (Art. 35(4), 35(9), Art. 36)

**Clause 8.2 - Privacy Risk Assessment:**
- Implementierung: DPIA-Entity (DataProtectionImpactAssessment)
- Vollständige Art. 35 Compliance

**Clause 9.1 - Privacy Monitoring & Measurement:**
- Implementierung: Compliance Scores (calculateComplianceScore)
- Dashboards (getDashboardStatistics)
- Action Items (getActionItems)

**Clause 10.1 - Privacy Continual Improvement:**
- Implementierung: Review-Management (markForReview, completeReview)
- Lessons Learned (DataBreach.lessonsLearned, followUpActions)

### ISO 27701 Controller-Anforderungen

Die Anwendung implementiert primär **Controller-Anforderungen** (nicht Processor):

**Art. 30 Records (ISO 27701 Annex A):**
- ✅ A.7.1.1 - Identify legal basis
- ✅ A.7.1.2 - Determine when consent required
- ✅ A.7.1.3 - Obtain and record consent
- ⚠️ A.7.1.4 - Withdraw consent (nicht vollständig)
- ✅ A.7.2.1 - Identify and document purpose
- ✅ A.7.2.2 - Identify lawful basis before processing
- ✅ A.7.2.3 - Limit processing to identified purposes
- ✅ A.7.3.1 - Data minimization
- ✅ A.7.3.2 - Accuracy
- ✅ A.7.3.3 - Retention limits
- ✅ A.7.4.1 - Data subject rights procedures
- ⚠️ A.7.4.2 - Access request procedure (nicht implementiert)
- ⚠️ A.7.4.3 - Rectification procedure (nicht implementiert)
- ⚠️ A.7.4.4 - Erasure procedure (nicht implementiert)
- ⚠️ A.7.4.5 - Data portability (nicht implementiert)
- ✅ A.7.5.1 - DPIA procedure

### Cross-Framework Mapping

**Kommando:** `CreateCrossFrameworkMappingsCommand`

Mappt DSGVO ↔ ISO 27001 ↔ ISO 27701:

Beispiel:
- **DSGVO Art. 32** (Sicherheit der Verarbeitung)
  ↔ **ISO 27001 A.5.15** (Zugriffskontrolle)
  ↔ **ISO 27701 A.7.2.7** (Security of processing)

- **DSGVO Art. 35** (DSFA)
  ↔ **ISO 27001 Clause 6.1.2** (Risk Assessment)
  ↔ **ISO 27701 A.7.5.1** (Privacy impact assessment)

---

## BDSG (Bundesdatenschutzgesetz) Besonderheiten

### BDSG-Scope

Das **BDSG** (Bundesdatenschutzgesetz) ist die deutsche Umsetzung der DSGVO und enthält:
1. **Öffnungsklauseln** - Nationale Spielräume der DSGVO (z.B. Art. 6(1)(c), Art. 9(2)(b))
2. **Nationale Besonderheiten** - Datenschutz außerhalb DSGVO-Scope (Strafverfolgung, nationale Sicherheit)
3. **Konkretisierungen** - Präzisierung von DSGVO-Begriffen

### Wichtige BDSG-Paragraphen

**§ 26 BDSG - Datenverarbeitung für Zwecke des Beschäftigungsverhältnisses:**
- **Scope:** Beschäftigtendaten (Mitarbeiter, Bewerber, Freiberufler, Betriebsratsmitglieder)
- **Rechtsgrundlage:** Spezifiziert Art. 6(1)(b) DSGVO (Vertrag) für Beschäftigung
- **Besonderheit:** Einwilligung nur unter engen Voraussetzungen (Freiwilligkeit)
- **§ 26(3):** Kollektivvereinbarungen (Betriebsvereinbarungen, Tarifverträge)

**Integration in Anwendung:**
```php
// ProcessingActivity für Beschäftigtendaten
$vvt->setName("Personalverwaltung Mitarbeiter");
$vvt->setDataSubjectCategories(['Beschäftigte', 'Bewerber']);
$vvt->setLegalBasis('legal_obligation'); // Art. 6(1)(c) + § 26 BDSG
$vvt->setLegalBasisForRetention('§ 26 BDSG i.V.m. § 257 HGB (Aufbewahrungsfrist 10 Jahre)');
```

**§ 22 BDSG - Verarbeitung besonderer Kategorien für Beschäftigungszwecke:**
- **Scope:** Gesundheitsdaten von Mitarbeitern (Arbeitsunfähigkeitsbescheinigungen, Betriebsarzt)
- **Öffnungsklausel:** Art. 9(2)(b) DSGVO
- **Voraussetzungen:** Erforderlich für Beschäftigung, angemessene Garantien

**Integration in Anwendung:**
```php
$vvt->setProcessesSpecialCategories(true);
$vvt->setSpecialCategoriesTypes(['health']);
$vvt->setSpecialCategoriesLegalBasis('employment_law'); // Art. 9(2)(b) + § 22 BDSG
```

**§ 38 BDSG - Benennung Datenschutzbeauftragter:**
- **Schwellenwert:** >20 Personen ständig mit automatisierter Verarbeitung beschäftigt
- **Verpflichtende DSFA/Kerntätigkeit:** Immer DSB-Pflicht bei Verarbeitungen nach Art. 35 DSGVO (DSFA-Pflicht)

**Integration in Anwendung:**
```php
// DPO-Zuweisung in ProcessingActivity
$vvt->setDataProtectionOfficer($dpoUser);

// DSFA-Entity mit DPO
$dpia->setDataProtectionOfficer($dpoUser);
$dpia->recordDPOConsultation($dpoUser, "Stellungnahme: Maßnahmen ausreichend");
```

**§ 51 BDSG - Aufsichtsbehörde:**
- **Bund:** BfDI (Bundesbeauftragter für Datenschutz und Informationsfreiheit)
- **Länder:** Landesdatenschutzbeauftragte (z.B. LfDI Baden-Württemberg, Berliner Beauftragte für Datenschutz)

**Integration in Anwendung:**
```php
// DataBreach mit deutscher Aufsichtsbehörde
$breach->setSupervisoryAuthorityName('LfDI Baden-Württemberg');
$breach->setSupervisoryAuthorityNotifiedAt(new \DateTime());

// DPIA Vorabkonsultation
$dpia->setRequiresSupervisoryConsultation(true);
$dpia->recordSupervisoryConsultation('LfDI genehmigt unter Auflagen...');
```

---

## Workflows & Best Practices

### Workflow 1: Verzeichnis von Verarbeitungstätigkeiten (VVT) erstellen

**User-Anfrage-Muster:**
- "Hilf mir ein VVT für unsere Kundenverwaltung zu erstellen"
- "Erstelle ProcessingActivity für Newsletter-Versand"
- "Prüfe ob VVT vollständig ist"

**Agent-Response:**
1. **Art. 30(1) Pflichtfelder prüfen** - Welche Informationen sind vorhanden?
2. **Rechtsgrundlage bestimmen** - Art. 6(1) (a-f) oder Art. 9(2) bei besonderen Kategorien
3. **TOMs aus ISMS nutzen** - Data Reuse: Verknüpfe ISO 27001 Controls
4. **DSFA-Erfordernis prüfen** - requiresDPIA() nach Art. 35(3)
5. **VVT erstellen** - Mit Vollständigkeitscheck

**Beispiel:**
```
User: "Erstelle VVT für unsere Kundenverwaltung im Online-Shop"

Agent-Aktionen:
1. Informationen sammeln:
   - Name: "Kundenverwaltung Online-Shop"
   - Zwecke: ["Vertragserfüllung", "Kundenservice", "Marketing (mit Einwilligung)"]
   - Betroffene: ["Kunden"]
   - Anzahl: 50.000 geschätzt
   - Datenkategorien: ["Name", "Adresse", "E-Mail", "Telefon", "Kaufhistorie", "Zahlungsdaten"]

2. Rechtsgrundlage bestimmen:
   - Hauptzweck (Vertragserfüllung): Art. 6(1)(b) "contract"
   - Marketing: Art. 6(1)(a) "consent" (separate Einwilligung)
   → Hauptrechtsgrundlage: "contract"

3. TOMs aus ISMS (Data Reuse!):
   - A.5.15 (Zugriffskontrolle): Implemented, 85% effective
   - A.8.24 (Verschlüsselung): Implemented, 90% effective
   - A.12.3.1 (Backup): Implemented, 95% effective
   → Controls verknüpfen statt manuell dokumentieren

4. DSFA-Erfordernis (Art. 35(3) Prüfung):
   - Umfang: 50.000 Personen (groß, aber nicht "umfangreich" i.S.d. Art. 35)
   - Besondere Kategorien: Nein
   - Automatisierte Entscheidungen: Nein
   - Systematische Überwachung: Nein
   → DSFA NICHT erforderlich (risiko: medium)

5. VVT erstellen:
   ```php
   $vvt = new ProcessingActivity();
   $vvt->setTenant($tenant);
   $vvt->setName("Kundenverwaltung Online-Shop");
   $vvt->setPurposes(['Vertragserfüllung', 'Kundenservice', 'Marketing (Einwilligung)']);
   $vvt->setDataSubjectCategories(['Kunden']);
   $vvt->setEstimatedDataSubjectsCount(50000);
   $vvt->setPersonalDataCategories(['Name', 'Adresse', 'E-Mail', 'Telefon', 'Kaufhistorie', 'Zahlungsdaten']);
   $vvt->setLegalBasis('contract'); // Art. 6(1)(b)
   $vvt->setRetentionPeriod('10 Jahre nach letzter Bestellung');
   $vvt->setRetentionPeriodDays(3650);
   $vvt->setLegalBasisForRetention('§ 257 HGB, § 147 AO (Aufbewahrungspflicht Handelsbücher)');
   $vvt->setRecipientCategories(['Versanddienstleister', 'Zahlungsdienstleister']);
   $vvt->setHasThirdCountryTransfer(false);
   $vvt->setInvolvesProcessors(true);
   $vvt->setProcessors([
       ['name' => 'DHL', 'contact' => 'dpo@dhl.com', 'contractDate' => '2023-01-15', 'tasks' => 'Versand'],
       ['name' => 'Stripe', 'contact' => 'privacy@stripe.com', 'contractDate' => '2022-06-01', 'tasks' => 'Zahlungsabwicklung']
   ]);
   $vvt->addControl($controlAccessControl);
   $vvt->addControl($controlEncryption);
   $vvt->addControl($controlBackup);
   $vvt->setIsHighRisk(false);
   $vvt->setRiskLevel('medium');
   $vvt->setDpiaCompleted(false); // Nicht erforderlich
   $vvt->setStatus('active');

   $processingActivityService->create($vvt, $tenant);
   ```

6. Vollständigkeitscheck:
   ```php
   $errors = $processingActivityService->validate($vvt);
   // Ergebnis: [] (keine Fehler)

   $completeness = $vvt->getCompletenessPercentage();
   // Ergebnis: 100%
   ```

7. Dem User präsentieren:
   "VVT 'Kundenverwaltung Online-Shop' erstellt:
   ✅ Rechtsgrundlage: Art. 6(1)(b) Vertragserfüllung
   ✅ 50.000 Kunden
   ✅ Auftragsverarbeiter: DHL, Stripe (AV-Verträge vorhanden?)
   ✅ TOMs: 3 ISO 27001 Controls verknüpft
   ✅ Vollständigkeit: 100%
   ⚠️ HINWEIS: Marketing-Zweck erfordert separate Einwilligung (Art. 6(1)(a))"
```

### Workflow 2: DSFA durchführen (Art. 35 DSGVO)

**User-Anfrage-Muster:**
- "Ist DSFA erforderlich für unsere Videoüberwachung?"
- "Erstelle DSFA für Gesundheits-App"
- "Prüfe DSFA-Vollständigkeit"

**Agent-Response:**
1. **Art. 35(3) Prüfung** - Ist DSFA erforderlich?
2. **VVT verknüpfen** - Data Reuse: Nutze bestehenden ProcessingActivity-Eintrag
3. **Risiken identifizieren** - Art. 35(7)(c)
4. **Maßnahmen aus ISMS** - Data Reuse: Verknüpfe ISO 27001 Controls
5. **DSB konsultieren** - Art. 35(4)
6. **Genehmigung einholen** - Workflow: submitForReview → approve

**Beispiel:**
```
User: "Ist DSFA erforderlich für unsere Mitarbeiter-Gesundheits-App?"

Agent-Aktionen:
1. Art. 35(3) Prüfung:
   - Besondere Kategorien (Gesundheitsdaten Art. 9): ✅ JA
   - Umfangreiche Verarbeitung: ✅ JA (500 Mitarbeiter)
   - Risiko für Rechte/Freiheiten: ✅ HOCH
   → DSFA ERFORDERLICH (Art. 35(3)(b))

2. VVT existiert bereits? (Data Reuse!)
   - Suche: ProcessingActivity "Mitarbeiter-Gesundheits-App"
   - Gefunden: VVT-ID 42
   - Nutze Daten aus VVT: dataCategories, dataSubjectCategories, legalBasis, controls

3. DSFA erstellen:
   ```php
   $vvt = $processingActivityRepository->find(42);

   $dpia = new DataProtectionImpactAssessment();
   $dpia->setTenant($tenant);
   $dpia->setProcessingActivity($vvt); // Data Reuse!
   $dpia->setTitle("DSFA Mitarbeiter-Gesundheits-App");

   // Art. 35(7)(a) - Beschreibung (aus VVT übernommen)
   $dpia->setProcessingDescription("Mobile App zur freiwilligen Erfassung von Gesundheitsdaten (Schritte, Schlaf, Ernährung) für betriebliches Gesundheitsmanagement");
   $dpia->setProcessingPurposes($vvt->getPurposes()); // aus VVT
   $dpia->setDataCategories($vvt->getPersonalDataCategories()); // aus VVT
   $dpia->setDataSubjectCategories($vvt->getDataSubjectCategories()); // aus VVT
   $dpia->setEstimatedDataSubjects(500);
   $dpia->setDataRetentionPeriod("Solange Beschäftigungsverhältnis + 6 Monate");

   // Art. 35(7)(b) - Notwendigkeit & Verhältnismäßigkeit
   $dpia->setNecessityAssessment("Erforderlich für betriebliches Gesundheitsmanagement gem. § 26 BDSG. Freiwillige Teilnahme.");
   $dpia->setProportionalityAssessment("Nur Gesundheitsdaten mit expliziter Einwilligung. Keine Weitergabe an Arbeitgeber, nur aggregierte Statistiken.");
   $dpia->setLegalBasis('explicit_consent'); // Art. 9(2)(a)

   // Art. 35(7)(c) - Risikobewertung
   $dpia->setIdentifiedRisks([
       [
           'title' => 'Unbefugter Zugriff auf Gesundheitsdaten',
           'description' => 'Hacker-Angriff auf App-Backend könnte Gesundheitsdaten offenlegen',
           'likelihood' => 'possible', // 3/5
           'impact' => 'severe',       // 5/5
           'severity' => 'high'        // 15/25
       ],
       [
           'title' => 'Indirekte Benachteiligung bei Nicht-Teilnahme',
           'description' => 'Mitarbeiter fühlen sich benachteiligt wenn sie nicht teilnehmen',
           'likelihood' => 'likely',   // 4/5
           'impact' => 'moderate',     // 3/5
           'severity' => 'medium'      // 12/25
       ],
       [
           'title' => 'Re-Identifikation trotz Anonymisierung',
           'description' => 'Aggregierte Statistiken könnten Rückschlüsse auf Einzelpersonen ermöglichen',
           'likelihood' => 'unlikely', // 2/5
           'impact' => 'major',        // 4/5
           'severity' => 'medium'      // 8/25
       ]
   ]);
   $dpia->setRiskLevel('high');
   $dpia->setLikelihood('possible');
   $dpia->setImpact('severe');

   // Art. 35(7)(d) - Maßnahmen (Data Reuse: Controls aus ISMS!)
   $controlEncryption = $controlRepository->findByAnnexId('A.8.24');
   $controlAccessControl = $controlRepository->findByAnnexId('A.5.15');
   $controlConsent = $controlRepository->findByAnnexId('A.7.2.1'); // ISO 27701

   $dpia->addControl($controlEncryption);
   $dpia->addControl($controlAccessControl);
   $dpia->addControl($controlConsent);

   $dpia->setTechnicalMeasures("
   - End-to-End-Verschlüsselung (AES-256) für Gesundheitsdaten
   - Sichere API-Kommunikation (TLS 1.3)
   - Backup verschlüsselt (AES-256)
   - Pseudonymisierung (User-ID statt Name)
   ");

   $dpia->setOrganizationalMeasures("
   - Freiwillige Teilnahme (schriftlich dokumentiert)
   - Kein Zugriff durch Arbeitgeber auf Einzeldaten
   - Nur aggregierte Statistiken für Gesundheitsmanagement
   - Jederzeit Widerruf der Einwilligung möglich
   - Schulung Mitarbeiter: Keine Benachteiligung bei Nicht-Teilnahme
   - Betriebsvereinbarung zum Ausschluss von Benachteiligung
   ");

   $dpia->setResidualRiskAssessment("
   Nach Implementierung der Maßnahmen:
   - Risiko 'Unbefugter Zugriff': medium (Verschlüsselung reduziert Impact von severe auf moderate)
   - Risiko 'Benachteiligung': low (Betriebsvereinbarung, Schulungen)
   - Risiko 'Re-Identifikation': low (Pseudonymisierung, statistische Aggregation)
   ");
   $dpia->setResidualRiskLevel('medium');

   // Status & Workflow
   $dpia->setStatus('draft');
   $dpia->setConductor($currentUser);

   $dpiaService->create($dpia, $tenant);
   ```

4. DSB-Anhörung (Art. 35(4)):
   ```php
   $dpo = $userRepository->findOneByRole('ROLE_DPO');
   $dpiaService->recordDPOConsultation($dpia, $dpo, "
   Stellungnahme Datenschutzbeauftragter:

   Die vorgesehenen Maßnahmen sind grundsätzlich geeignet. Folgende Empfehlungen:
   1. Betriebsvereinbarung zur Freiwilligkeit MUSS vor App-Start abgeschlossen sein
   2. Anonymisierung der Statistiken durch Mindestgruppengröße (min. 5 Personen)
   3. Regelmäßige Penetrationstests (halbjährlich)
   4. Mitarbeiter-Information zu Widerrufsrecht prominent in App

   Mit diesen Ergänzungen ist das Restrisiko akzeptabel (medium).
   ");
   ```

5. Genehmigung:
   ```php
   $dpiaService->submitForReview($dpia);
   // Status: draft → in_review

   $manager = $userRepository->findOneBy(['username' => 'ciso']);
   $dpiaService->approve($dpia, $manager, "
   Genehmigt unter folgenden Auflagen:
   1. Betriebsvereinbarung bis 01.12.2024
   2. Penetrationstest vor Produktivbetrieb
   3. Review nach 12 Monaten Betrieb

   DSFA-Version 1.0 genehmigt am 2024-11-20.
   ");
   // Status: in_review → approved
   // ProcessingActivity.dpiaCompleted = true (automatisch)
   ```

6. Dem User präsentieren:
   "DSFA 'Mitarbeiter-Gesundheits-App' erstellt und genehmigt:
   ✅ Art. 35(3) Erfordernis: JA (Gesundheitsdaten, umfangreiche Verarbeitung)
   ✅ Risiken identifiziert: 3 (1 high, 2 medium)
   ✅ Maßnahmen: 3 ISO 27001/27701 Controls + TOMs
   ✅ Restrisiko: medium (akzeptabel)
   ✅ DSB konsultiert: Stellungnahme positiv mit Auflagen
   ✅ Genehmigt: CISO am 2024-11-20
   ⚠️ AUFLAGEN: Betriebsvereinbarung + Pentest vor Produktivstart
   📅 Review: November 2025"
```

### Workflow 3: Datenpanne melden (Art. 33/34 DSGVO)

**User-Anfrage-Muster:**
- "Wir haben eine Datenpanne - Ransomware-Angriff"
- "Muss ich diese Datenpanne melden?"
- "Prüfe ob 72-Stunden-Frist überschritten"

**Agent-Response:**
1. **Aus Incident erstellen** - Data Reuse: createFromIncident()
2. **Meldepflicht prüfen** - Art. 33(1) - Risiko für Rechte/Freiheiten?
3. **72-Stunden-Frist** - Countdown anzeigen, Überfälligkeit warnen
4. **Art. 34 Prüfung** - Benachrichtigung betroffener Personen?
5. **Behördenmeldung** - notifySupervisoryAuthority()
6. **Betroffenenbenachrichtigung** - notifyDataSubjects() oder recordSubjectNotificationExemption()

**Beispiel:**
```
User: "Wir haben eine Datenpanne - Ransomware-Angriff auf Fileserver mit Kundendaten"

Agent-Aktionen:
1. Incident existiert? (Data Reuse!)
   - Ja: Incident #156 "Ransomware-Angriff Fileserver"
   - Severity: Critical
   - Detected: 2024-11-20 14:30

2. DataBreach aus Incident erstellen:
   ```php
   $incident = $incidentRepository->find(156);

   $breach = $dataBreachService->createFromIncident($incident, [
       'affectedDataSubjects' => 5000,
       'dataCategories' => ['Name', 'Adresse', 'E-Mail', 'Telefon', 'Bestellhistorie'],
       'dataSubjectCategories' => ['Kunden'],
       'breachNature' => 'Ransomware-Verschlüsselung des Fileservers. Kundendaten nicht abgeflossen (kein Exfiltration), aber temporär nicht verfügbar.',
       'riskLevel' => 'medium',
   ], $tenant);

   // Automatisch befüllt aus Incident (Data Reuse!):
   // - title: "Ransomware-Angriff Fileserver"
   // - severity: "Critical"
   // - detectedAt: 2024-11-20 14:30
   ```

3. Meldepflicht prüfen (Art. 33(1)):
   ```php
   // Entscheidungshilfe:
   // "Voraussichtlich Risiko für Rechte und Freiheiten?"
   //
   // Faktoren JA:
   // - Finanzielle Daten betroffen
   // - Gesundheitsdaten betroffen (Art. 9)
   // - Identitätsdiebstahl möglich
   // - Diskriminierung möglich
   // - Erheblicher Schaden für Betroffene
   //
   // Faktoren NEIN:
   // - Daten verschlüsselt (Schlüssel nicht kompromittiert)
   // - Nur technische Daten (IP-Adressen)
   // - Keine sensiblen Daten
   // - Kein Datenverlust, nur kurze Nichtverfügbarkeit

   // Unser Fall:
   // - Kundendaten: Name, Adresse, E-Mail, Telefon, Bestellhistorie
   // - KEINE Zahlungsdaten (separate Verarbeitung)
   // - KEINE Gesundheitsdaten
   // - KEINE Exfiltration (nur Verschlüsselung)
   // - Backup vorhanden (Wiederherstellung in 24h möglich)
   //
   // Bewertung: GERINGES Risiko (keine Exfiltration, Wiederherstellung möglich)
   // → Meldepflicht Art. 33: NEIN
   // → Benachrichtigung Art. 34: NEIN

   $breach->setRequiresAuthorityNotification(false);
   $breach->setRequiresSubjectNotification(false);
   $breach->setNoSubjectNotificationReason('encryption_protection'); // Art. 34(3)(a) - Daten verschlüsselt, kein Zugriff für Angreifer
   ```

4. Dem User präsentieren:
   "Datenpanne-Assessment:

   ✅ DataBreach erstellt aus Incident #156
   📊 Betroffene: 5.000 Kunden
   📋 Daten: Name, Adresse, E-Mail, Telefon, Bestellhistorie
   ⚠️ Risiko: GERING (keine Exfiltration, Backup vorhanden)

   **Meldepflichten:**
   ❌ Art. 33 Behördenmeldung: NICHT erforderlich (kein Risiko für Rechte/Freiheiten)
   ❌ Art. 34 Betroffenenbenachrichtigung: NICHT erforderlich

   **Begründung Art. 34(3)(a):**
   Daten waren verschlüsselt (AES-256), Angreifer hatte keinen Zugriff auf Klartext.
   Nur Ransomware-Verschlüsselung, keine Exfiltration erkennbar (Logs geprüft).
   Wiederherstellung aus Backup in 24h abgeschlossen.

   **EMPFEHLUNG:**
   - Dokumentation dieser Einschätzung (Rechenschaftspflicht Art. 5(2))
   - Interne Incident-Analyse (Lessons Learned)
   - Kein externes Reporting erforderlich

   **WICHTIG:**
   Wenn nachträglich Exfiltration festgestellt wird → sofortige Neubewertung!"

5. Alternative: Meldepflicht besteht
   ```php
   // Angenommen: Exfiltration festgestellt
   $breach->setRequiresAuthorityNotification(true);
   $breach->setRiskLevel('high');
   $breach->setLikelyConsequences("Identitätsdiebstahl möglich, Phishing-Angriffe auf Kunden wahrscheinlich");

   // 72-Stunden-Frist prüfen
   $hoursRemaining = $breach->getHoursUntilAuthorityDeadline();
   // Ergebnis: 48 Stunden (72h - 24h seit Entdeckung)

   if ($breach->isAuthorityNotificationOverdue()) {
       // KRITISCH: >72h überschritten!
       echo "🚨 KRITISCH: Meldepflicht überfällig! Sofort melden + Verzögerung begründen!";
   } else {
       echo "⏰ Noch {$hoursRemaining} Stunden bis 72-Stunden-Frist (Art. 33(1))";
   }

   // Behördenmeldung
   $dataBreachService->notifySupervisoryAuthority($breach, [
       'supervisoryAuthorityName' => 'LfDI Baden-Württemberg',
       'notificationMethod' => 'Webformular',
       'notificationDocuments' => ['Datenpanne_Meldung_20241120.pdf']
   ]);
   // Status: → authority_notified
   // supervisoryAuthorityNotifiedAt: 2024-11-20 16:45 (2h 15min nach Entdeckung) ✅

   // Art. 34 prüfen: Hohes Risiko?
   $breach->setRequiresSubjectNotification(true);

   $dataBreachService->notifyDataSubjects($breach, [
       'subjectNotificationMethod' => 'E-Mail + Website-Banner',
       'subjectsNotified' => 4850, // 150 E-Mails bounced
       'subjectNotificationDocuments' => ['Betroffenen_Information_20241120.pdf']
   ]);
   // Status: → subjects_notified
   ```

6. Dashboard & Action Items:
   ```php
   $actionItems = $dataBreachService->getActionItems($tenant);

   // Beispiel-Output:
   [
       'CRITICAL' => [ // Überfällige Behördenmeldungen >72h
           ['breach_id' => 123, 'title' => '...', 'overdue_hours' => 15]
       ],
       'HIGH' => [ // Ausstehende Meldungen <24h verbleibend
           ['breach_id' => 124, 'title' => '...', 'hours_remaining' => 18]
       ],
       'MEDIUM' => [ // Benachrichtigung betroffener Personen ausstehend
           ['breach_id' => 125, 'title' => '...']
       ],
       'LOW' => [ // Unvollständige Datenpannen
           ['breach_id' => 126, 'title' => '...']
       ]
   ]
   ```
```

---

## Troubleshooting & Häufige Probleme

### Issue 1: VVT unvollständig (Validation Errors)

**Symptome:** ProcessingActivityService::validate() gibt Fehler zurück

**Ursachen:**
1. Pflichtfelder Art. 30(1) nicht ausgefüllt
   ```php
   $errors = $processingActivityService->validate($vvt);
   // ['name' => 'Feld erforderlich', 'purposes' => 'Mindestens ein Zweck erforderlich']
   ```

2. Bedingte Felder fehlen
   ```php
   $vvt->setLegalBasis('legitimate_interests'); // Art. 6(1)(f)
   // Fehlt: legitimateInterestsJustification → Validation Error
   ```

**Lösung:**
```php
// Vollständigkeitscheck vor Aktivierung
$errors = $processingActivityService->validate($vvt);

if (!empty($errors)) {
    foreach ($errors as $field => $error) {
        echo "⚠️ {$field}: {$error}\n";
    }

    // Beispiel: Fehlende Interessenabwägung ergänzen
    if ($vvt->getLegalBasis() === 'legitimate_interests' && !$vvt->getLegitimateInterestsJustification()) {
        $vvt->setLegitimateInterestsJustification("
        Interessenabwägung gem. Art. 6(1)(f) DSGVO:

        Unser Interesse: Direktmarketing zur Kundenbindung und Umsatzsteigerung
        Betroffeneninteresse: Schutz vor unerwünschter Werbung

        Abwägung:
        - Kunden haben legitimes Interesse an Produktinformationen
        - Opt-Out jederzeit möglich (Widerspruchsrecht Art. 21)
        - Nur eigene Kunden (keine Fremdlisten)
        - Keine besonders sensiblen Daten

        Ergebnis: Berechtigtes Interesse überwiegt
        ");
    }
}

// Erneut validieren
$errors = $processingActivityService->validate($vvt);
if (empty($errors)) {
    $processingActivityService->activate($vvt);
}
```

### Issue 2: DSFA-Genehmigung scheitert (Validation)

**Symptome:** DataProtectionImpactAssessmentService::approve() verhindert Genehmigung

**Ursachen:**
1. Art. 35(7) Pflichtfelder unvollständig
2. DSB nicht konsultiert (Art. 35(4))
3. Restrisiko high/critical ohne Vorabkonsultation (Art. 36)

**Lösung:**
```php
// Vollständigkeitscheck
$errors = $dpiaService->validate($dpia);

if (in_array('dpo_consultation_missing', $errors)) {
    // Art. 35(4) DSB-Anhörung nachholen
    $dpo = $userRepository->findOneByRole('ROLE_DPO');
    $dpiaService->recordDPOConsultation($dpia, $dpo, "Stellungnahme DSB: ...");
}

if ($dpia->getResidualRiskLevel() === 'critical' && !$dpia->getRequiresSupervisoryConsultation()) {
    // Art. 36 Vorabkonsultation erforderlich!
    $dpia->setRequiresSupervisoryConsultation(true);

    echo "⚠️ Restrisiko CRITICAL → Art. 36 Vorabkonsultation der Aufsichtsbehörde ERFORDERLICH!";
    echo "Genehmigung erst nach Stellungnahme der Behörde möglich.";

    // Nach Behörden-Konsultation:
    $dpiaService->recordSupervisoryConsultation($dpia, "LfDI genehmigt unter Auflagen: ...");
}

// Jetzt Genehmigung möglich
$dpiaService->approve($dpia, $approver, "Genehmigt");
```

### Issue 3: 72-Stunden-Frist überschritten (Art. 33)

**Symptome:** DataBreachService::findAuthorityNotificationOverdue() gibt Datenpanne zurück

**Ursachen:**
- Datenpanne nicht rechtzeitig bewertet
- Meldepflicht übersehen
- Organisatorische Verzögerung

**Lösung:**
```php
// Dashboard prüft automatisch
$overdueBreaches = $dataBreachService->findAuthorityNotificationOverdue($tenant);

if (!empty($overdueBreaches)) {
    foreach ($overdueBreaches as $breach) {
        $hoursOverdue = 72 - $breach->getHoursUntilAuthorityDeadline(); // Negativ = überfällig

        echo "🚨 KRITISCH: Datenpanne '{$breach->getTitle()}' {$hoursOverdue}h ÜBERFÄLLIG!\n";
        echo "Art. 33(1) DSGVO: Meldung binnen 72 Stunden!\n";

        // SOFORT melden
        $dataBreachService->notifySupervisoryAuthority($breach, [
            'supervisoryAuthorityName' => 'LfDI Baden-Württemberg',
            'notificationMethod' => 'Webformular (Eilmeldung)',
        ]);

        // Art. 33(1) Verzögerung begründen
        $dataBreachService->recordNotificationDelay($breach, "
        Begründung der verspäteten Meldung:

        Die Datenpanne wurde am {$breach->getCreatedAt()->format('d.m.Y H:i')} entdeckt.
        Die 72-Stunden-Frist endete am {$breach->getAuthorityNotificationDeadline()->format('d.m.Y H:i')}.

        Verzögerung um {$hoursOverdue} Stunden aufgrund:
        - Umfangreiche Forensik zur Feststellung des Umfangs erforderlich
        - Klärung ob Datenabfluss stattfand (Logs-Analyse)
        - Wochenende (eingeschränkte Erreichbarkeit DSB)

        Meldung erfolgt unverzüglich nach Abschluss der Bewertung.
        ");
    }
}

// Prävention: E-Mail-Alerts bei neuen Datenpannen
// (Implementierung als Symfony Event Listener)
```

### Issue 4: Data Reuse funktioniert nicht

**Symptome:** Incident → DataBreach erzeugt leere Felder

**Ursachen:**
1. Incident unvollständig
2. createFromIncident() nicht verwendet
3. Beziehung nicht persistiert

**Lösung:**
```php
// FALSCH: Manuell erstellen
$breach = new DataBreach();
$breach->setTitle($incident->getTitle()); // Manuell kopieren ❌
// Fehleranfällig, Doppelpflege

// RICHTIG: Data Reuse Service nutzen
$breach = $dataBreachService->createFromIncident($incident, [
    'affectedDataSubjects' => 5000,
    'dataCategories' => ['Name', 'E-Mail'],
], $tenant);
// Automatisch befüllt: title, severity, detectedAt ✅

// Incident aktualisieren → DataBreach automatisch aktuell
$incident->setTitle("Ransomware-Angriff Fileserver (aktualisiert)");
$entityManager->flush();
// $breach->getTitle() ist automatisch aktuell (OneToOne Beziehung)

// Beziehung persistieren
$entityManager->persist($breach);
$entityManager->flush();
```

### Issue 5: Drittlandtransfer ohne Garantien

**Symptome:** ProcessingActivityService::validate() warnt bei Drittlandtransfer ohne transferSafeguards

**Ursachen:**
- hasThirdCountryTransfer = true
- transferSafeguards = null (Pflicht nach Art. 46!)

**Lösung:**
```php
$vvt->setHasThirdCountryTransfer(true);
$vvt->setThirdCountries(['USA']);

// Garantie erforderlich (Art. 44-49)!
$vvt->setTransferSafeguards('standard_contractual_clauses'); // EU-Standardvertragsklauseln

// Optionen:
// - "adequacy_decision" (Art. 45 - Angemessenheitsbeschluss, z.B. UK, Schweiz, Japan)
// - "standard_contractual_clauses" (Art. 46(2)(c) - SCC, häufigste Option)
// - "binding_corporate_rules" (Art. 46(2)(b) - BCR für Konzerne)
// - "approved_code_of_conduct" (Art. 46(2)(e))
// - "approved_certification" (Art. 46(2)(f))
// - "derogation_art_49" (Art. 49 Ausnahmen - nur in Sonderfällen!)

$vvt->setTransferSafeguardDetails("
EU-Standardvertragsklauseln (SCC) vom 04.06.2021 abgeschlossen mit:
- Google LLC (USA) für Google Workspace
- Vertrag vom: 15.03.2023
- Module: Controller-to-Processor
- Zusätzliche Maßnahmen: Verschlüsselung (AES-256), EU-Rechenzentrum (Primär)
");

// Transfer Impact Assessment (TIA) empfohlen seit Schrems II
$vvt->setTransferImpactAssessmentDone(true);
```

---

## Best Practices

### 1. Immer Data Reuse nutzen

**NICHT:**
```php
// Manuell Incident-Daten in DataBreach kopieren ❌
$breach = new DataBreach();
$breach->setTitle($incident->getTitle());
$breach->setSeverity($incident->getSeverity());
// Fehleranfällig, Doppelpflege
```

**SONDERN:**
```php
// Data Reuse Service nutzen ✅
$breach = $dataBreachService->createFromIncident($incident, [
    'affectedDataSubjects' => 5000,
], $tenant);
// Automatisch: title, severity, detectedAt aus Incident
```

### 2. Controls aus ISMS verknüpfen (nicht neu dokumentieren)

**NICHT:**
```php
// TOMs manuell dokumentieren ❌
$vvt->setTechnicalOrganizationalMeasures("
- Verschlüsselung AES-256
- Zugriffskontrolle mit MFA
- Tägliche Backups
");
// Doppelpflege mit ISMS, keine Integration
```

**SONDERN:**
```php
// ISO 27001 Controls verknüpfen ✅
$controlEncryption = $controlRepository->findByAnnexId('A.8.24');
$controlAccessControl = $controlRepository->findByAnnexId('A.5.15');
$controlBackup = $controlRepository->findByAnnexId('A.12.3.1');

$vvt->addControl($controlEncryption);
$vvt->addControl($controlAccessControl);
$vvt->addControl($controlBackup);
// Single Source of Truth im ISMS
```

### 3. ProcessingActivity mit DPIA verknüpfen

**NICHT:**
```php
// DSFA separat erstellen ohne VVT-Verknüpfung ❌
$dpia = new DataProtectionImpactAssessment();
$dpia->setDataCategories(['Name', 'E-Mail']); // Manuell kopiert aus VVT
```

**SONDERN:**
```php
// VVT verknüpfen ✅
$dpia->setProcessingActivity($vvt);
// Nutzt automatisch: dataCategories, dataSubjectCategories, legalBasis, controls aus VVT
```

### 4. 72-Stunden-Frist SOFORT prüfen

**IMMER bei Datenpanne:**
```php
// Sofort nach Erstellung prüfen ✅
$hoursRemaining = $breach->getHoursUntilAuthorityDeadline();

if ($hoursRemaining < 24) {
    // ⚠️ HIGH PRIORITY: <24h verbleibend
    echo "⚠️ Nur noch {$hoursRemaining}h bis 72-Stunden-Frist! Meldung vorbereiten!";
}

if ($breach->isAuthorityNotificationOverdue()) {
    // 🚨 CRITICAL: Frist überschritten
    echo "🚨 KRITISCH: 72h-Frist überschritten! SOFORT melden + Verzögerung begründen!";
}
```

### 5. DSB IMMER bei DSFA konsultieren (Art. 35(4))

**VOR Genehmigung:**
```php
// Art. 35(4) DSB-Anhörung ✅
$dpo = $userRepository->findOneByRole('ROLE_DPO');
$dpiaService->recordDPOConsultation($dpia, $dpo, "Stellungnahme: ...");

// DANN erst genehmigen
$dpiaService->approve($dpia, $approver, "Genehmigt");
```

### 6. Restrisiko dokumentieren (Art. 35(7)(d))

**Nach Maßnahmen:**
```php
$dpia->setResidualRiskAssessment("
Restrisiko nach Implementierung der Maßnahmen:
- Unbefugter Zugriff: MEDIUM (vorher: HIGH)
  - Verschlüsselung reduziert Impact
  - Zugriffskontrolle reduziert Likelihood
- Datenverlust: LOW (vorher: MEDIUM)
  - Backup-Strategie 3-2-1
");
$dpia->setResidualRiskLevel('medium'); // low/medium meist akzeptabel
```

### 7. Jährliches Review planen

**Bei VVT-Erstellung:**
```php
$vvt->setReviewFrequencyMonths(12); // Jährlich
$vvt->setNextReviewDate(new \DateTime('+12 months'));

// Review-Reminder
$dueForReview = $processingActivityService->findDueForReview($tenant, new \DateTime());
// Automatisches Monitoring
```

---

## Wichtige File Locations

### Entities
- `src/Entity/ProcessingActivity.php` - VVT (1,031 Zeilen)
- `src/Entity/DataProtectionImpactAssessment.php` - DSFA (1,067 Zeilen)
- `src/Entity/DataBreach.php` - Datenpanne (937 Zeilen)

### Services
- `src/Service/ProcessingActivityService.php` - VVT-Service (618 Zeilen)
- `src/Service/DataProtectionImpactAssessmentService.php` - DSFA-Service (762 Zeilen)
- `src/Service/DataBreachService.php` - Datenpannen-Service (744 Zeilen)

### Controllers
- `src/Controller/ProcessingActivityController.php` - VVT-CRUD
- `src/Controller/DPIAController.php` - DSFA-CRUD & Workflow
- `src/Controller/DataBreachController.php` - Datenpannen-Management

### Templates
- `templates/processing_activity/*.html.twig` (7 Templates)
- `templates/dpia/*.html.twig` (6 Templates, inkl. PDF)
- `templates/data_breach/*.html.twig` (6 Templates, inkl. PDF)

### Repositories
- `src/Repository/ProcessingActivityRepository.php`
- `src/Repository/DataProtectionImpactAssessmentRepository.php`
- `src/Repository/DataBreachRepository.php`

### Commands
- `src/Command/LoadGdprRequirementsCommand.php` - DSGVO-Framework laden
- `src/Command/LoadIso27701RequirementsCommand.php` - ISO 27701:2019
- `src/Command/LoadIso27701v2025RequirementsCommand.php` - ISO 27701:2025 (NEUESTE!)
- `src/Command/MapIso27701VersionsCommand.php` - Versions-Mapping
- `src/Command/CreateCrossFrameworkMappingsCommand.php` - DSGVO↔ISO 27001↔ISO 27701

---

## Quick Reference Commands

### VVT (ProcessingActivity) Suchen
```php
// Alle aktiven Verarbeitungen
$processingActivityService->findActive($tenant);

// Unvollständige VVT
$processingActivityService->findIncomplete($tenant);

// DSFA-pflichtige Verarbeitungen
$processingActivityService->findRequiringDPIA($tenant);

// Verarbeitungen mit Art. 9 Daten
$processingActivityService->findProcessingSpecialCategories($tenant);

// Drittlandtransfers
$processingActivityService->findWithThirdCountryTransfers($tenant);
```

### DSFA (DPIA) Suchen
```php
// Hohe Risiken
$dpiaService->findHighRisk($tenant);

// Ausstehende DSB-Konsultation
$dpiaService->findAwaitingDPOConsultation($tenant);

// Art. 36 Vorabkonsultation erforderlich
$dpiaService->findRequiringSupervisoryConsultation($tenant);

// Überfällige Reviews
$dpiaService->findDueForReview($tenant, new \DateTime());
```

### Datenpannen (DataBreach) Suchen
```php
// **KRITISCH** Überfällige Behördenmeldungen
$dataBreachService->findAuthorityNotificationOverdue($tenant);

// Meldepflichtige Datenpannen
$dataBreachService->findRequiringAuthorityNotification($tenant);

// Art. 34 Benachrichtigung erforderlich
$dataBreachService->findRequiringSubjectNotification($tenant);

// Art. 9 Daten betroffen
$dataBreachService->findWithSpecialCategories($tenant);
```

### Compliance Scores
```php
// VVT-Compliance
$score = $processingActivityService->calculateComplianceScore($vvt);
// 0-100: 70% Vollständigkeit + 30% DSFA-Compliance

// DSFA-Compliance
$score = $dpiaService->calculateComplianceScore($dpia);
// 0-100: 40% Vollständigkeit + 40% Genehmigung + 20% Review

// Datenpannen-Compliance
$score = $dataBreachService->calculateComplianceScore($breach);
// 0-100: 40% Meldungen + 40% Fristen + 20% Vollständigkeit
```

---

## Wann ISO-Standards konsultieren

Für detaillierte Guidance, siehe separate Referenzen:
- `gdpr-reference.md` - Vollständige EU-DSGVO Referenz (alle 99 Artikel)
- `bdsg-reference.md` - BDSG-Besonderheiten und deutsche Umsetzung
- `iso-27701-2025-reference.md` - ISO 27701:2025 PIMS (neueste Version)
- `iso-27701-2019-reference.md` - ISO 27701:2019 (Vorgängerversion + Mapping)

**Nutze DSGVO-Referenz wenn:**
- Benutzer fragt nach spezifischen Artikeln (z.B. "DSGVO Art. 15 umsetzen")
- Unklarheit über Rechtsgrundlagen (Art. 6, 9, 10)
- Betroffenenrechte (Art. 15-22)
- Meldepflichten (Art. 33, 34)
- DSFA-Anforderungen (Art. 35, 36)

**Nutze BDSG-Referenz wenn:**
- Beschäftigtendaten (§ 26 BDSG)
- DSB-Bestellpflicht (§ 38 BDSG)
- Deutsche Aufsichtsbehörden (§ 51 BDSG)
- Nationale Besonderheiten

**Nutze ISO 27701:2025 wenn:**
- PIMS-Implementation
- Controller/Processor-Anforderungen
- ISO 27001-Integration
- Privacy Controls

---

## Meine Aktivierungs-Trigger

Ich aktiviere automatisch bei Erwähnung von:
- **Datenschutz**: Datenschutz, Datenschutzbeauftragter, DSB, DPO, data protection, privacy
- **DSGVO/GDPR**: DSGVO, GDPR, Datenschutzgrundverordnung, General Data Protection Regulation
- **BDSG**: BDSG, Bundesdatenschutzgesetz
- **Begriffe**: personenbezogene Daten, betroffene Person, Verarbeitung, Einwilligung, consent
- **VVT**: Verzeichnis von Verarbeitungstätigkeiten, VVT, Verarbeitungsverzeichnis, records of processing, Article 30
- **DSFA**: Datenschutz-Folgenabschätzung, DSFA, DPIA, Data Protection Impact Assessment, Article 35
- **Datenpanne**: Datenpanne, data breach, Datenschutzvorfall, Datenleck, Article 33, Article 34, 72 Stunden
- **Rechte**: Auskunftsrecht, Löschungsrecht, Berichtigung, Widerspruch, Datenübertragbarkeit, Art. 15-22
- **ISO 27701**: ISO 27701, PIMS, Privacy Information Management System
- **Drittland**: Drittlandtransfer, third country, adequacy decision, SCC, standard contractual clauses

---

## Zusammenfassung

Ich bin dein Datenschutzbeauftragter (DPO) mit umfassender Expertise in:
✅ EU-DSGVO / GDPR (alle 99 Artikel)
✅ BDSG (deutsche Umsetzung und Besonderheiten)
✅ ISO 27701:2025 (neueste PIMS-Version)
✅ ISO 27701:2019 (Vorgängerversion mit Mapping)
✅ **Smart Integration** mit ISO 27001, Risk Management, BCM
✅ **Data Reuse Principles** (58-95% Zeitersparnis durch Integration)

Ich helfe dir bei:
1. **VVT erstellen** - Art. 30 DSGVO vollständig und effizient
2. **DSFA durchführen** - Art. 35 DSGVO mit ISO 27701 PIMS
3. **Datenpannen managen** - Art. 33/34 DSGVO mit 72h-Frist-Tracking
4. **Betroffenenrechte** - Art. 15-22 DSGVO (Hinweis: Workflow-Lücke)
5. **Drittlandtransfers** - Art. 44-49 DSGVO (SCC, BCR, Adequacy)
6. **Privacy by Design** - Art. 25 DSGVO + ISO 27701
7. **Compliance-Reporting** - Dashboards, Scores, Action Items
8. **Integration** - Verknüpfung mit ISMS, Risk, BCM

**Mein Vorteil:** Ich kenne die vollständige Anwendungsarchitektur und kann dich durch Datenschutz-Workflows führen während ich Data Reuse nutze für 58-95% Zeitersparnis! 🎯

Frag mich alles zu Datenschutz, und ich gebe dir praktische, kontextbezogene Guidance mit deinen tatsächlichen Entities, Services und Workflows!

Related Skills

fda-consultant-specialist

16
from diegosouzapw/awesome-omni-skill

Senior FDA consultant and specialist for medical device companies including HIPAA compliance and requirement management. Provides FDA pathway expertise, QSR compliance, cybersecurity guidance, and regulatory submission support. Use for FDA submission planning, QSR compliance assessments, HIPAA evaluations, and FDA regulatory strategy development.

devops-specialist

16
from diegosouzapw/awesome-omni-skill

DevOps 与运维专家。精通 CI/CD、容器化、编排、基础设施即代码、监控告警和自动化部署。用于构建高效、可靠的软件交付流水线和运维系统。

architecture-specialist

16
from diegosouzapw/awesome-omni-skill

提供系统架构设计、技术选型、架构审查和组件设计能力。当需要设计新系统、重构现有架构或进行架构审查时使用。

agent-search-specialist

16
from diegosouzapw/awesome-omni-skill

Expert search specialist mastering advanced information retrieval, query optimization, and knowledge discovery. Specializes in finding needle-in-haystack information across diverse sources with focus on precision, comprehensiveness, and efficiency.

agent-kubernetes-specialist

16
from diegosouzapw/awesome-omni-skill

Expert Kubernetes specialist mastering container orchestration, cluster management, and cloud-native architectures. Specializes in production-grade deployments, security hardening, and performance optimization with focus on scalability and reliability.

ViewComponents Specialist

16
from diegosouzapw/awesome-omni-skill

Specialist in ViewComponent implementation, component architecture, slots, previews, and method exposure patterns. Invoke this agent when creating or modifying ViewComponents, implementing component slots, setting up previews, debugging component rendering issues, or ensuring proper method delegation from services.

typescript-sdk-specialist

16
from diegosouzapw/awesome-omni-skill

TypeScript SDK development with Node.js and browser support. Design SDK architecture, implement type-safe API clients, support ESM and CommonJS modules, and configure bundling for browsers.

tipalti-integration-specialist

16
from diegosouzapw/awesome-omni-skill

Tipalti payment integration guide for payee onboarding, payment processing, webhooks, and tax compliance. Use when implementing payment features.

specialist-desenvolvimento-frontend

16
from diegosouzapw/awesome-omni-skill

Especialista em desenvolvimento frontend com componentes, pages e hooks alinhados com design e API.

search-specialist

16
from diegosouzapw/awesome-omni-skill

Expert web researcher using advanced search techniques and synthesis. Masters search operators, result filtering, and multi-source verification. Handles competitive analysis and fact-checking. Use PROACTIVELY for deep research, information gathering, or trend analysis.

python-specialist

16
from diegosouzapw/awesome-omni-skill

Deliver production-quality Python solutions with framework-aware patterns and tests.

language-framework-specialist

16
from diegosouzapw/awesome-omni-skill

提供特定编程语言和框架的深度专业知识。当需要处理特定技术栈的复杂问题时使用