Files
breakpilot-compliance/ai-compliance-sdk/policies/gap_mapping.yaml
Benjamin Boenisch 4435e7ea0a Initial commit: breakpilot-compliance - Compliance SDK Platform
Services: Admin-Compliance, Backend-Compliance,
AI-Compliance-SDK, Consent-SDK, Developer-Portal,
PCA-Platform, DSMS

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 23:47:28 +01:00

795 lines
21 KiB
YAML

# 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