# UCCA Gap-Mapping v1.0 # Deterministische Zuordnung: Facts → Gaps → Controls → Escalation # Keine LLM-Abhängigkeit in der Entscheidungslogik version: "1.0" description: "Gap-Mapping für Use-Case Compliance Assessment" last_updated: "2026-01-29" # ============================================================================= # GAP DEFINITIONS # Jeder Gap wird durch Fakten ausgelöst und führt zu Controls + Escalation # ============================================================================= gaps: # --------------------------------------------------------------------------- # VERTRAGSBASIERTE GAPS # --------------------------------------------------------------------------- GAP_AVV_MISSING: name: "Auftragsverarbeitungsvertrag fehlt" description: "Kein AVV mit dem KI-Anbieter vorhanden oder Status unbekannt" severity: critical trigger_conditions: # Wird ausgelöst wenn EINER dieser Conditions true ist - field: "contracts.avv.present" operator: "equals" value: false - field: "contracts.avv.present" operator: "equals" value: "unknown" required_controls: - CTRL_AVV escalation: level: E2 reason: "Verarbeitung ohne AVV ist DSGVO-Verstoß (Art. 28)" auto_assign_to: "dpo" legal_refs: - "DSGVO Art. 28" - "DSGVO Art. 82 Abs. 1" GAP_AVV_INCOMPLETE: name: "AVV unvollständig" description: "AVV vorhanden, aber ohne erforderliche Klauseln" severity: high trigger_conditions: - field: "contracts.avv.present" operator: "equals" value: true - field: "contracts.avv.complete" operator: "equals" value: false required_controls: - CTRL_AVV escalation: level: E1 reason: "AVV muss Art. 28 Abs. 3 DSGVO Mindestinhalte enthalten" auto_assign_to: "legal" legal_refs: - "DSGVO Art. 28 Abs. 3" # --------------------------------------------------------------------------- # DRITTLAND-TRANSFER GAPS # --------------------------------------------------------------------------- GAP_TRANSFER_NO_SCC: name: "Drittlandtransfer ohne SCC" description: "Datenübermittlung in Drittland ohne Standardvertragsklauseln" severity: critical trigger_conditions: - field: "provider.location" operator: "in" value: ["us", "non_eu", "unknown"] - field: "contracts.scc.present" operator: "equals" value: false required_controls: - CTRL_SCC - CTRL_TIA escalation: level: E2 reason: "Drittlandtransfer ohne Garantien ist unzulässig (Schrems II)" auto_assign_to: "dpo" legal_refs: - "DSGVO Art. 44-49" - "EuGH Schrems II (C-311/18)" GAP_TRANSFER_NO_TIA: name: "Drittlandtransfer ohne TIA" description: "SCC vorhanden, aber kein Transfer Impact Assessment" severity: high trigger_conditions: - field: "provider.location" operator: "in" value: ["us", "non_eu"] - field: "contracts.scc.present" operator: "equals" value: true - field: "contracts.tia.present" operator: "equals" value: false required_controls: - CTRL_TIA escalation: level: E1 reason: "TIA erforderlich zur Bewertung des Schutzniveaus" auto_assign_to: "legal" legal_refs: - "EDPB Recommendations 01/2020" - "DSGVO Art. 46" GAP_SUBPROCESSORS_UNKNOWN: name: "Unterauftragsverarbeiter unbekannt" description: "Liste der Subprocessors nicht bekannt oder nicht dokumentiert" severity: high trigger_conditions: - field: "provider.subprocessors.known" operator: "equals" value: false required_controls: - CTRL_SUBPROCESSOR_LIST - CTRL_AVV escalation: level: E1 reason: "Unterauftragsverarbeiter müssen gem. Art. 28 Abs. 2 DSGVO genehmigt werden" auto_assign_to: "legal" legal_refs: - "DSGVO Art. 28 Abs. 2" - "DSGVO Art. 28 Abs. 4" GAP_SCC_OUTDATED: name: "Veraltete SCC-Version" description: "Standardvertragsklauseln sind nicht die aktuelle Version (2021)" severity: high trigger_conditions: - field: "contracts.scc.present" operator: "equals" value: true - field: "contracts.scc.version" operator: "not_equals" value: "new_scc_2021" required_controls: - CTRL_SCC_UPDATE escalation: level: E1 reason: "Alte SCC-Versionen sind seit Ende 2022 nicht mehr gültig" auto_assign_to: "legal" legal_refs: - "EU 2021/914" - "CNIL Transition Guidance" GAP_US_NO_DPF: name: "US-Provider ohne DPF-Zertifizierung" description: "US-Anbieter ist nicht unter Data Privacy Framework zertifiziert" severity: high trigger_conditions: - field: "provider.location" operator: "equals" value: "us" - field: "provider.dpf_certified" operator: "equals" value: false required_controls: - CTRL_SCC - CTRL_TIA - CTRL_DPF_CHECK escalation: level: E2 reason: "US-Transfer ohne DPF erfordert SCC + TIA + ergänzende Maßnahmen" auto_assign_to: "dpo" legal_refs: - "DSGVO Art. 44ff" - "EuGH Schrems II (C-311/18)" - "EU-US DPF Beschluss 2023" GAP_SUPPORT_THIRD_COUNTRY: name: "Support-Zugriff aus Drittland" description: "Provider-Support kann von außerhalb des EWR auf Daten zugreifen" severity: medium trigger_conditions: - field: "provider.support_location" operator: "in" value: ["us", "non_eu", "global", "unknown"] - field: "data.contains_personal" operator: "equals" value: true required_controls: - CTRL_SCC - CTRL_ACCESS_LOGGING escalation: level: E1 reason: "Remote-Zugriff aus Drittland = Datenübermittlung" auto_assign_to: "legal" legal_refs: - "DSGVO Art. 44" - "EDPB Guidelines on Data Transfers" GAP_SUBPROCESSOR_THIRD_COUNTRY: name: "Unterauftragsverarbeiter im Drittland" description: "Provider nutzt Subprozessoren außerhalb des EWR" severity: high trigger_conditions: - field: "provider.subprocessors.third_country" operator: "equals" value: true required_controls: - CTRL_SUBPROCESSOR_SCC - CTRL_TIA escalation: level: E1 reason: "SCC-Kette zu Drittland-Subprozessoren erforderlich" auto_assign_to: "legal" legal_refs: - "DSGVO Art. 28 Abs. 4" - "DSGVO Art. 46" GAP_TIA_INADEQUATE: name: "TIA zeigt unzureichendes Schutzniveau" description: "Transfer Impact Assessment ergibt Defizite im Datenschutzniveau" severity: critical trigger_conditions: - field: "contracts.tia.result" operator: "equals" value: "inadequate" required_controls: - CTRL_TECHNICAL_SUPPLEMENTARY - CTRL_ENCRYPTION_E2E escalation: level: E2 reason: "Zusätzliche technische Maßnahmen erforderlich um Transfer zu legitimieren" auto_assign_to: "dpo" legal_refs: - "EDPB Recommendations 01/2020" - "DSGVO Art. 32" GAP_TIA_NOT_FEASIBLE: name: "Transfer nicht möglich" description: "TIA ergibt: angemessenes Schutzniveau nicht erreichbar" severity: critical trigger_conditions: - field: "contracts.tia.result" operator: "equals" value: "not_feasible" required_controls: [] escalation: level: E3 reason: "Transfer muss unterbleiben - kein angemessenes Schutzniveau erreichbar" auto_assign_to: "dpo" requires_board_decision: true blocks_processing: true legal_refs: - "DSGVO Art. 44" - "EuGH Schrems II" GAP_LOCAL_HOSTING_NOT_VERIFIED: name: "Lokales Hosting nicht verifiziert" description: "Behauptung lokales Hosting, aber keine Verifizierung" severity: medium trigger_conditions: - field: "hosting.type" operator: "equals" value: "on_premises" - field: "hosting.verified" operator: "equals" value: false required_controls: - CTRL_HOSTING_VERIFICATION escalation: level: E0 reason: "Hosting-Konfiguration sollte dokumentiert werden" auto_assign_to: null legal_refs: - "DSGVO Art. 5 Abs. 2 (Rechenschaftspflicht)" # --------------------------------------------------------------------------- # DATENMINIMIERUNG GAPS # --------------------------------------------------------------------------- GAP_NO_TRAINING_CLAUSE: name: "Keine Opt-Out-Klausel für KI-Training" description: "Provider kann Daten für Modelltraining verwenden" severity: high trigger_conditions: - field: "provider.uses_data_for_training" operator: "equals" value: true - field: "contracts.no_training_clause" operator: "equals" value: false required_controls: - CTRL_NO_TRAINING_CLAUSE escalation: level: E1 reason: "Zweckbindung verletzt wenn Daten für Training verwendet werden" auto_assign_to: "legal" legal_refs: - "DSGVO Art. 5 Abs. 1 lit. b" GAP_RETENTION_UNKNOWN: name: "Speicherdauer beim Provider unbekannt" description: "Prompt/Response Retention Policy nicht dokumentiert" severity: medium trigger_conditions: - field: "provider.prompt_retention.known" operator: "equals" value: false required_controls: - CTRL_RETENTION_POLICY escalation: level: E0 reason: "Speicherdauer muss dokumentiert werden" auto_assign_to: null legal_refs: - "DSGVO Art. 5 Abs. 1 lit. e" - "DSGVO Art. 13 Abs. 2 lit. a" GAP_CHAT_LOGS_RAW: name: "Chat-Logs im Klartext gespeichert" description: "Benutzerfragen werden ohne Anonymisierung gespeichert" severity: high trigger_conditions: - field: "logs.store_user_questions" operator: "equals" value: true - field: "logs.anonymization" operator: "equals" value: false required_controls: - CTRL_PII_REDACTION_GATEWAY - CTRL_RETENTION_POLICY escalation: level: E1 reason: "Klartext-Logs mit PII erfordern besondere Schutzmaßnahmen" auto_assign_to: "security" legal_refs: - "DSGVO Art. 5 Abs. 1 lit. c" - "DSGVO Art. 32" GAP_NO_PII_FILTER: name: "Kein PII-Filter vor LLM" description: "Personenbezogene Daten werden ungefiltert an LLM gesendet" severity: high trigger_conditions: - field: "data.contains_pii" operator: "equals" value: true - field: "technical.pii_filter.enabled" operator: "equals" value: false required_controls: - CTRL_PII_REDACTION_GATEWAY escalation: level: E1 reason: "PII-Minimierung vor LLM-Verarbeitung erforderlich" auto_assign_to: "security" legal_refs: - "DSGVO Art. 5 Abs. 1 lit. c" - "DSGVO Art. 25" # --------------------------------------------------------------------------- # CCTV / VIDEO GAPS # --------------------------------------------------------------------------- GAP_CCTV_PUBLIC_NO_SIGN: name: "CCTV im öffentlichen Bereich ohne Hinweisschild" description: "Videoüberwachung ohne transparente Information" severity: critical trigger_conditions: - field: "cctv.public_area" operator: "equals" value: true - field: "cctv.signage_present" operator: "equals" value: false required_controls: - CTRL_CCTV_SIGNAGE escalation: level: E2 reason: "Verstoß gegen Informationspflichten (Art. 13 DSGVO)" auto_assign_to: "dpo" legal_refs: - "DSGVO Art. 13" - "EDPB Guidelines 3/2019" GAP_CCTV_FACES_STORED: name: "Gesichtserkennung mit Speicherung" description: "CCTV erfasst Gesichter und speichert diese" severity: critical trigger_conditions: - field: "cctv.contains_faces" operator: "equals" value: true - field: "cctv.storage" operator: "in" value: ["local_7d", "local_30d", "cloud"] required_controls: - CTRL_FACE_BLURRING - CTRL_DSFA - CTRL_CCTV_POLICY escalation: level: E3 reason: "Biometrische Daten erfordern DSFA und besondere Rechtsgrundlage" auto_assign_to: "dpo" requires_board_decision: true legal_refs: - "DSGVO Art. 9" - "DSGVO Art. 35" - "EDPB Guidelines 3/2019" GAP_CCTV_LICENSE_PLATES: name: "Kennzeichenerfassung ohne Rechtsgrundlage" description: "CCTV erfasst KFZ-Kennzeichen" severity: high trigger_conditions: - field: "cctv.contains_license_plates" operator: "equals" value: true - field: "cctv.license_plate_purpose" operator: "equals" value: "unknown" required_controls: - CTRL_ANPR_BLURRING - CTRL_CCTV_POLICY escalation: level: E2 reason: "Kennzeichenerfassung erfordert spezifische Rechtsgrundlage" auto_assign_to: "dpo" legal_refs: - "DSGVO Art. 6" - "BDSG §4" GAP_CCTV_CLOUD_STORAGE: name: "CCTV-Aufnahmen in Cloud gespeichert" description: "Videoaufnahmen werden bei Cloud-Anbieter gespeichert" severity: high trigger_conditions: - field: "cctv.storage" operator: "equals" value: "cloud" required_controls: - CTRL_AVV - CTRL_ENCRYPTION_TRANSIT - CTRL_ENCRYPTION_REST escalation: level: E1 reason: "Cloud-Speicherung von Videoaufnahmen erfordert zusätzliche Garantien" auto_assign_to: "security" legal_refs: - "DSGVO Art. 28" - "DSGVO Art. 32" # --------------------------------------------------------------------------- # AI ACT GAPS # --------------------------------------------------------------------------- GAP_AIACT_HIGHRISK_NO_CONFORMITY: name: "Hochrisiko-KI ohne Konformitätsbewertung" description: "KI-System fällt unter Hochrisiko-Kategorie ohne CE-Kennzeichnung" severity: critical trigger_conditions: - field: "aiact.risk_category" operator: "equals" value: "high" - field: "aiact.conformity_assessment" operator: "equals" value: false required_controls: - CTRL_AI_CONFORMITY - CTRL_AI_DOCUMENTATION - CTRL_HITL_ENFORCED escalation: level: E3 reason: "Hochrisiko-KI erfordert Konformitätsbewertung gem. AI Act" auto_assign_to: "dpo" requires_board_decision: true legal_refs: - "AI Act Art. 6" - "AI Act Annex III" GAP_AIACT_NO_HITL: name: "Hochrisiko-KI ohne Human Oversight" description: "Kein menschlicher Eingriff bei automatisierten Entscheidungen" severity: critical trigger_conditions: - field: "outputs.decision_with_legal_effect" operator: "equals" value: true - field: "processing.human_oversight" operator: "equals" value: false required_controls: - CTRL_HITL_ENFORCED escalation: level: E2 reason: "Automatisierte Entscheidungen mit rechtlicher Wirkung erfordern menschliche Aufsicht" auto_assign_to: "dpo" legal_refs: - "DSGVO Art. 22" - "AI Act Art. 14" GAP_AIACT_SYSTEMATIC_MONITORING: name: "Systematische Überwachung ohne Transparenz" description: "KI-System führt systematische Überwachung durch" severity: critical trigger_conditions: - field: "processing.systematic_monitoring" operator: "equals" value: true - field: "transparency.monitoring_disclosed" operator: "equals" value: false required_controls: - CTRL_DSFA - CTRL_AI_TRANSPARENCY escalation: level: E3 reason: "Systematische Überwachung ist hochriskant und muss offengelegt werden" auto_assign_to: "dpo" requires_board_decision: true legal_refs: - "DSGVO Art. 35 Abs. 3 lit. c" - "AI Act Art. 5" # --------------------------------------------------------------------------- # TRAINING / IMPROVEMENT GAPS # --------------------------------------------------------------------------- GAP_TRAINING_NO_CONSENT: name: "Nutzerdaten für Training ohne Einwilligung" description: "Chat-Logs werden für Modellverbesserung genutzt ohne explizite Zustimmung" severity: high trigger_conditions: - field: "improvement.strategy" operator: "in" value: ["finetune", "curated_samples"] - field: "improvement.user_consent" operator: "equals" value: false required_controls: - CTRL_TRAINING_CONSENT - CTRL_DATA_SAMPLING_POLICY escalation: level: E2 reason: "Training auf Nutzerdaten erfordert informierte Einwilligung" auto_assign_to: "dpo" legal_refs: - "DSGVO Art. 6 Abs. 1 lit. a" - "DSGVO Art. 7" GAP_TRAINING_NO_ANONYMIZATION: name: "Training ohne Anonymisierung" description: "Trainingsdaten enthalten personenbezogene Daten" severity: high trigger_conditions: - field: "improvement.strategy" operator: "in" value: ["finetune", "curated_samples"] - field: "improvement.anonymization" operator: "equals" value: false required_controls: - CTRL_PII_REDACTION_GATEWAY - CTRL_SYNTHETIC_DATA escalation: level: E1 reason: "Trainingsdaten sollten anonymisiert oder synthetisch sein" auto_assign_to: "security" legal_refs: - "DSGVO Art. 5 Abs. 1 lit. c" - "DSGVO Art. 89" # --------------------------------------------------------------------------- # GOVERNANCE GAPS # --------------------------------------------------------------------------- GAP_NO_DSFA: name: "Fehlende Datenschutz-Folgenabschätzung" description: "Hohes Risiko für Betroffene ohne DSFA" severity: critical trigger_conditions: - field: "risk.dsfa_required" operator: "equals" value: true - field: "governance.dsfa_completed" operator: "equals" value: false required_controls: - CTRL_DSFA escalation: level: E2 reason: "DSFA ist gesetzlich vorgeschrieben bei hohem Risiko" auto_assign_to: "dpo" legal_refs: - "DSGVO Art. 35" - "DSK Blacklist" GAP_NO_VVT_ENTRY: name: "Kein Eintrag im Verarbeitungsverzeichnis" description: "KI-Verarbeitung nicht im VVT dokumentiert" severity: medium trigger_conditions: - field: "governance.vvt_entry" operator: "equals" value: false required_controls: - CTRL_VVT_ENTRY escalation: level: E0 reason: "VVT-Pflicht gem. Art. 30 DSGVO" auto_assign_to: null legal_refs: - "DSGVO Art. 30" # ============================================================================= # ESCALATION LEVEL DEFINITIONS # ============================================================================= escalation_levels: E0: name: "Self-Service" description: "Keine manuelle Prüfung erforderlich" sla_hours: null requires_approval: false E1: name: "Expert Review" description: "Fachliche Prüfung durch Legal/Security" sla_hours: 72 requires_approval: true E2: name: "DPO Review" description: "Prüfung durch Datenschutzbeauftragten" sla_hours: 48 requires_approval: true E3: name: "Advisory Board" description: "Entscheidung durch Datenschutz-Gremium" sla_hours: 120 requires_approval: true requires_board_decision: true # ============================================================================= # ROLE ASSIGNMENTS # ============================================================================= role_assignments: dpo: name: "Datenschutzbeauftragter" can_approve: [E1, E2, E3] notification_channels: [email, webhook] legal: name: "Rechtsabteilung" can_approve: [E1] notification_channels: [email] security: name: "IT-Sicherheit" can_approve: [E1] notification_channels: [email, webhook] # ============================================================================= # GAP AGGREGATION RULES # ============================================================================= aggregation_rules: # Wenn mehrere Gaps vorliegen, wie wird das Gesamtrisiko berechnet? severity_order: [critical, high, medium, low] escalation_promotion: # Mehrere high-severity Gaps → höhere Escalation - condition: "count(severity=critical) >= 2" promote_to: E3 reason: "Mehrere kritische Gaps erfordern Gremiumsentscheidung" - condition: "count(severity=high) >= 3" promote_to: E2 reason: "Kumulation von Risiken erfordert DPO-Prüfung" control_deduplication: # Wenn derselbe Control von mehreren Gaps gefordert wird strategy: "unique" # Nur einmal in der finalen Liste aufführen