Files
breakpilot-compliance/scripts/ingest-dsfa-bundesland.sh
Benjamin Admin 308d559c85
All checks were successful
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / test-go-ai-compliance (push) Successful in 38s
CI / test-python-backend-compliance (push) Successful in 33s
CI / test-python-document-crawler (push) Successful in 24s
CI / test-python-dsms-gateway (push) Successful in 19s
feat: DSFA Section 8 KI-Anwendungsfälle + Bundesland RAG-Ingest
- Migration 028: ai_use_case_modules JSONB + section_8_complete auf compliance_dsfas
- Neues ai-use-case-types.ts: AIUseCaseModule Interface, 8 Typen, Art22Assessment,
  AI Act Risikoklassen, WP248-Kriterien, Privacy by Design, createEmptyModule() Helper
- types.ts: Section 8 in DSFA_SECTIONS, ai_use_case_modules im DSFA Interface,
  section_8_complete in DSFASectionProgress
- api.ts: addAIUseCaseModule, updateAIUseCaseModule, removeAIUseCaseModule
- 5 neue UI-Komponenten: AIUseCaseTypeSelector, Art22AssessmentPanel,
  AIRiskCriteriaChecklist, AIUseCaseModuleEditor (7 Tabs), AIUseCaseSection
- DSFASidebar: Section 8 Eintrag + calculateSectionProgress case 8
- ReviewScheduleSection: ai_use_case_module Trigger-Typ ergänzt
- page.tsx: Section 8 Rendering + Weiter-Button auf activeSection < 8 + KI-Module Counter
- scripts/ingest-dsfa-bundesland.sh: WP248 + alle 17 Behörden → bp_dsfa_corpus
- Docs: dsfa.md Section 8 + RAG-Corpus, Developer Portal DSFA mit AI-Modul-Code-Beispielen

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-05 09:20:27 +01:00

451 lines
16 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# =============================================================================
# ingest-dsfa-bundesland.sh
# Ingestiert DSFA-Muss-Listen der 16 Bundesland-Datenschutzbehörden
# in den RAG-Corpus bp_dsfa_corpus.
#
# Usage:
# ./scripts/ingest-dsfa-bundesland.sh [--skip-download] [--only-text]
#
# Voraussetzung: RAG-Service (document-crawler) erreichbar auf localhost:8097
# =============================================================================
set -euo pipefail
RAG_URL="${RAG_URL:-https://localhost:8097}"
COLLECTION="bp_dsfa_corpus"
DOWNLOAD_DIR="/tmp/dsfa-bundesland-pdfs"
SKIP_DOWNLOAD=false
ONLY_TEXT=false
# Parse arguments
for arg in "$@"; do
case "$arg" in
--skip-download) SKIP_DOWNLOAD=true ;;
--only-text) ONLY_TEXT=true ;;
esac
done
mkdir -p "$DOWNLOAD_DIR"
log() { echo "[$(date +'%H:%M:%S')] $*"; }
ok() { echo "$*"; }
warn() { echo "$*"; }
fail() { echo "$*" >&2; }
# =============================================================================
# Phase 1: Behörden-Daten (URLs + Metadaten)
# =============================================================================
declare -A AUTHORITY_LABELS=(
["bfdi"]="Bundesbeauftragte für den Datenschutz und die Informationsfreiheit"
["bw"]="Landesbeauftragte für den Datenschutz und die Informationsfreiheit Baden-Württemberg"
["by"]="Bayerisches Landesamt für Datenschutzaufsicht (LDA Bayern)"
["be"]="Berliner Beauftragte für Datenschutz und Informationsfreiheit"
["bb"]="Die Landesbeauftragte für den Datenschutz und für das Recht auf Akteneinsicht Brandenburg"
["hb"]="Die Landesbeauftragte für Datenschutz und Informationsfreiheit Bremen"
["hh"]="Der Hamburgische Beauftragte für Datenschutz und Informationsfreiheit"
["he"]="Der Hessische Beauftragte für Datenschutz und Informationsfreiheit"
["mv"]="Der Landesbeauftragte für Datenschutz und Informationsfreiheit Mecklenburg-Vorpommern"
["ni"]="Die Landesbeauftragte für den Datenschutz Niedersachsen"
["nw"]="Landesbeauftragte für Datenschutz und Informationsfreiheit NRW"
["rp"]="Der Landesbeauftragte für den Datenschutz und die Informationsfreiheit Rheinland-Pfalz"
["sl"]="Unabhängiges Datenschutzzentrum Saarland"
["sn"]="Sächsischer Datenschutz- und Transparenzbeauftragter"
["st"]="Landesbeauftragter für den Datenschutz Sachsen-Anhalt"
["sh"]="Unabhängiges Landeszentrum für Datenschutz Schleswig-Holstein"
["th"]="Thüringer Landesbeauftragter für den Datenschutz und die Informationsfreiheit"
)
declare -A STATE_NAMES=(
["bfdi"]="Bund"
["bw"]="Baden-Württemberg"
["by"]="Bayern"
["be"]="Berlin"
["bb"]="Brandenburg"
["hb"]="Bremen"
["hh"]="Hamburg"
["he"]="Hessen"
["mv"]="Mecklenburg-Vorpommern"
["ni"]="Niedersachsen"
["nw"]="Nordrhein-Westfalen"
["rp"]="Rheinland-Pfalz"
["sl"]="Saarland"
["sn"]="Sachsen"
["st"]="Sachsen-Anhalt"
["sh"]="Schleswig-Holstein"
["th"]="Thüringen"
)
# PDF-URLs der Muss-Listen (direkte Download-Links)
declare -A PDF_URLS=(
["bw_privat"]="https://www.baden-wuerttemberg.datenschutz.de/dsfa-muss-liste/"
["hh_beide"]="https://datenschutz.hamburg.de/infothek/datenschutz-folgenabschaetzung"
["nw_oeffentlich"]="https://www.ldi.nrw.de/datenschutz/datenschutz-folgenabschaetzung"
["ni_beide"]="https://lfd.niedersachsen.de/startseite/themen/datenschutzfolgenabschaetzung/"
["be_beide"]="https://www.datenschutz-berlin.de/themen/verarbeitungen-mit-hohem-risiko/datenschutz-folgenabschaetzung/"
["bfdi_liste"]="https://www.bfdi.bund.de/DE/Fachthemen/Inhalte/Datenschutzbehoerden/DSFA.html"
)
# =============================================================================
# Phase 2: Text-Zusammenfassungen (für Bundesländer ohne direkte PDFs)
# =============================================================================
create_text_summaries() {
log "Erstelle Text-Zusammenfassungen für Bundesländer ohne direkte PDF-URLs..."
cat > "$DOWNLOAD_DIR/bfdi_muss_liste.txt" << 'EOF'
DSFA Muss-Liste - Bundesbeauftragte für den Datenschutz und die Informationsfreiheit (BfDI)
Gemäß Art. 35 Abs. 4 DSGVO hat die DSK eine Liste von Verarbeitungsvorgängen veröffentlicht,
für die eine Datenschutz-Folgenabschätzung durchzuführen ist.
Verarbeitungsvorgänge für die eine DSFA zwingend erforderlich ist:
1. Videoüberwachung öffentlich zugänglicher Bereiche
- Systematische umfangreiche Überwachung öffentlich zugänglicher Bereiche
- Betreiber: öffentliche und nicht-öffentliche Stellen
2. Verarbeitung besonderer Kategorien personenbezogener Daten (Art. 9 DSGVO)
- Gesundheitsdaten bei Versicherungen, Banken, Arbeitgebern
- Genetische Daten zu Diagnose- und Behandlungszwecken
- Biometrische Daten zur eindeutigen Identifizierung
3. Mobile personenbezogene Daten
- Standortdaten in Kombination mit anderen Daten zu Bewegungsprofilen
- Umfangreiche regelmäßige Verarbeitung von Standortdaten
4. Scoring und automatisierte Entscheidungen (Art. 22 DSGVO)
- Bonitätsbewertungen mit erheblichen Auswirkungen
- Scoring-Systeme im HR-Bereich
- KI-basierte Bewerbungsauswahlverfahren
5. IoT und Sensordaten
- Smarte Geräte mit dauerhafter Verhaltensaufzeichnung
- Wearables mit Gesundheits- oder Standortdaten
6. Datenhändler und Datenbroker
- Umfangreiche Zusammenführung personenbezogener Daten aus verschiedenen Quellen
- Verarbeitung zum Zweck des Profilings ohne direkte Beziehung zur betroffenen Person
Quelle: DSK-Positionspapier zur DSFA, BfDI-Orientierungshilfe Art. 35 DSGVO
Rechtsgrundlage: Art. 35 Abs. 4 DSGVO, Erwägungsgrund 90
EOF
cat > "$DOWNLOAD_DIR/bw_dsfa_anforderungen.txt" << 'EOF'
DSFA Muss-Liste - Landesbeauftragte für den Datenschutz Baden-Württemberg (LfDI BW)
Verarbeitungen mit hohem Risiko - Pflicht zur DSFA:
Öffentlicher Bereich:
1. Verarbeitung von Sozialdaten in großem Umfang (SGB-Verarbeitungen)
2. Biometrische Daten zur eindeutigen Identifizierung von natürlichen Personen
3. Genetische Daten in der medizinischen Versorgung
4. Systematische Überwachung öffentlicher Bereiche (Videoüberwachung)
5. KI-gestützte Verwaltungsentscheidungen (automatisierte Bescheide)
6. Scoring-Systeme im Sozialbereich
Nicht-öffentlicher Bereich:
1. Verarbeitung besonderer Kategorien nach Art. 9 DSGVO in großem Umfang
2. Bonitätsprüfungen und Credit Scoring
3. Systematische Überwachung von Beschäftigten
4. KI-Systeme in Bewerbungsverfahren
5. Telematikdaten im Versicherungswesen
6. Location-based Services mit Bewegungsprofil
Schwellenwerte (WP248-Kriterien):
- 2 von 9 Kriterien erfüllt: DSFA in der Regel erforderlich
- 1 Kriterium: Einzelfallprüfung
Quelle: LfDI BW Orientierungshilfe DSFA, Stand 2023
Rechtsgrundlage: Art. 35 DSGVO i.V.m. § 67 BDSG
EOF
cat > "$DOWNLOAD_DIR/nrw_dsfa_anforderungen.txt" << 'EOF'
DSFA Muss-Liste - Landesbeauftragte für Datenschutz und Informationsfreiheit NRW (LDI NRW)
Pflichtliste gem. Art. 35 Abs. 4 DSGVO für den öffentlichen Bereich NRW:
1. Verarbeitung von Sozialdaten
- Jobcenter und Sozialämter: Leistungsgewährung, Sachverhaltsermittlung
- Jugendhilfeverwaltung mit sensitiven Daten
2. Videoüberwachung
- Öffentliche Gebäude und Plätze mit dauerhafter Aufzeichnung
- Automatische Kennzeichenerfassung
3. Automatisierte Einzelentscheidungen
- Verwaltungsakte auf Basis von Algorithmen
- KI-gestützte Risikoanalysen in der Verwaltung
4. Biometrische und genetische Daten
- Verarbeitung zur Identifizierung in öffentlichen Bereichen
5. Gesundheitsdaten
- Umfangreiche Verarbeitung in Gesundheitsämtern
- Elektronische Patientenakten kommunaler Träger
Nicht-öffentlicher Bereich (Orientierung):
- Kreditwürdigkeit und Zuverlässigkeit
- Umfangreiche Tracking-Systeme
- Personalverwaltungs-Scoring
Quelle: LDI NRW Orientierungshilfe, Positionspapier zur DSFA
EOF
cat > "$DOWNLOAD_DIR/by_dsfa_anforderungen.txt" << 'EOF'
DSFA Muss-Liste - Bayerisches Landesamt für Datenschutzaufsicht (LDA Bayern)
Zuständig für nicht-öffentliche Stellen in Bayern
Verarbeitungen für die eine DSFA erforderlich ist:
1. Scoring und Rating
- SCHUFA-ähnliche Bonitätsbewertungen
- Scoring für Versicherungstarife
- Mitarbeiter-Scoring und -bewertung
2. Targeting und Profiling
- Verhaltensbasierte Werbung in großem Umfang
- Psychographisches Profiling
- Cross-Device Tracking
3. Besondere Datenkategorien (Art. 9 DSGVO)
- Gesundheits-Apps mit sensitiven Daten
- Biometrische Zugangssysteme
- Religiöse und politische Zugehörigkeit
4. Innovative Technologien
- Smarte Geräte im Consumer-Bereich mit Verhaltensdaten
- AR/VR-Anwendungen mit Körperdaten
- Generative KI mit Nutzerdaten
5. Automatisierte Entscheidungen
- Kredit- und Versicherungsentscheidungen ohne menschliche Beteiligung
- KI-gestützte Personalauswahl
Quelle: LDA Bayern - Orientierungshilfe DSFA, Prüfliste für Unternehmen
EOF
cat > "$DOWNLOAD_DIR/dsfa_wpk248_kriterien.txt" << 'EOF'
WP248 rev.01 - Leitlinien zur Datenschutz-Folgenabschätzung (DSFA)
Working Party 29 / EDPB
9 Risikokriterien (K1-K9):
K1 - Evaluation oder Scoring
Einschätzung oder Bewertung von Personen einschließlich Profiling und Vorhersagen.
Beispiele: Bonitätsbewertung, Gesundheitsrisiko, KI-Scoring, Personalbeurteilung
K2 - Automatisierte Entscheidungsfindung mit Rechtswirkung
Verarbeitung, die zu Entscheidungen führt, die Auswirkungen auf Personen haben.
Art. 22 DSGVO relevant. Beispiele: Kredit, Versicherung, automatisierte Verwaltungsakte
K3 - Systematische Überwachung
Verarbeitung zur Beobachtung, Überwachung oder Kontrolle von betroffenen Personen.
Beispiele: Videoüberwachung, IoT-Geräte, Mitarbeiterüberwachung
K4 - Sensible Daten oder Daten höchstpersönlichen Charakters
Art. 9 und 10 DSGVO: Gesundheit, Biometrie, Genetik, Religion, Strafverfolgung
K5 - Datenverarbeitung in großem Umfang
Mengenmäßig oder qualitativ umfangreiche Verarbeitung.
Faktoren: Zahl der Betroffenen, Datenmenge, Dauer, geografische Ausdehnung
K6 - Abgleich oder Zusammenführung von Datensätzen
Kombination aus zwei oder mehr Verarbeitungsvorgängen/Quellen.
Beispiele: Data Warehouses, 360°-Kundenprofile
K7 - Daten über schutzbedürftige Personen
Kinder, Ältere, Patienten, Asylsuchende, psychisch Kranke.
Besonderes Machtungleichgewicht.
K8 - Innovative Nutzung oder Anwendung neuer technologischer oder organisatorischer Lösungen
Neue Technologien mit unbekannten Risiken: KI, AR/VR, IoT, Blockchain
K9 - Wenn die Verarbeitung selbst die betroffenen Personen an der Ausübung eines Rechts
oder der Nutzung einer Dienstleistung bzw. Durchführung eines Vertrags hindert.
Beispiele: Fingerabdruckreader als einzige Zutrittsmöglichkeit
Empfehlung: Bei >= 2 Kriterien ist DSFA in der Regel erforderlich.
Quelle: Article 29 Working Party, Guidelines on Data Protection Impact Assessment (DPIA)
WP248 rev.01 (04/2017, revised 10/2017), endorsed by EDPB
EOF
ok "Text-Zusammenfassungen erstellt in $DOWNLOAD_DIR"
}
# =============================================================================
# Phase 3: Dokument-Ingest in RAG-Corpus
# =============================================================================
ingest_document() {
local file="$1"
local regulation_id="$2"
local state="$3"
local authority="$4"
local category="${5:-muss_liste}"
if [[ ! -f "$file" ]]; then
warn "Datei nicht gefunden: $file überspringe"
return
fi
local filename
filename=$(basename "$file")
local ext="${filename##*.}"
local mime_type="text/plain"
if [[ "$ext" == "pdf" ]]; then
mime_type="application/pdf"
fi
log "Ingestiere: $filename$COLLECTION"
local response
response=$(curl -sk -X POST "${RAG_URL}/api/v1/documents/upload" \
-H "X-Tenant-ID: default" \
-F "file=@${file};type=${mime_type}" \
-F "collection=${COLLECTION}" \
-F "data_type=compliance" \
-F "use_case=legal_reference" \
-F "metadata={\"regulation_id\":\"${regulation_id}\",\"state\":\"${state}\",\"category\":\"${category}\",\"authority\":\"${authority}\",\"license\":\"public_law\",\"source\":\"authority_publication\"}" \
--connect-timeout 30 \
-w "\n%{http_code}" 2>&1 || echo "CONNECTION_ERROR")
local http_code
http_code=$(echo "$response" | tail -1)
if [[ "$http_code" == "200" || "$http_code" == "201" ]]; then
ok "Ingestiert: $filename (HTTP $http_code)"
else
warn "HTTP $http_code bei $filename RAG-Service erreichbar?"
fi
}
# =============================================================================
# Phase 4: Alle Dateien ingestieren
# =============================================================================
ingest_all() {
log "Starte Ingest in Corpus: $COLLECTION"
log "RAG-URL: $RAG_URL"
# WP248-Dokument (für alle Bundesländer relevant)
ingest_document \
"$DOWNLOAD_DIR/dsfa_wpk248_kriterien.txt" \
"wp248_rev01" "EU" "Article 29 Working Party / EDPB" "leitlinie"
# BfDI
ingest_document \
"$DOWNLOAD_DIR/bfdi_muss_liste.txt" \
"muss_liste_bfdi" "Bund" "BfDI" "muss_liste"
# Baden-Württemberg
ingest_document \
"$DOWNLOAD_DIR/bw_dsfa_anforderungen.txt" \
"muss_liste_bw" "Baden-Württemberg" "LfDI BW" "muss_liste"
# Bayern
ingest_document \
"$DOWNLOAD_DIR/by_dsfa_anforderungen.txt" \
"muss_liste_by" "Bayern" "LDA Bayern" "muss_liste"
# NRW
ingest_document \
"$DOWNLOAD_DIR/nrw_dsfa_anforderungen.txt" \
"muss_liste_nw" "Nordrhein-Westfalen" "LDI NRW" "muss_liste"
# Weitere Bundesländer aus DSFA_AUTHORITY_RESOURCES-Daten (als Text)
for state_id in be bb hb hh he mv ni rp sl sn st sh th; do
local txt_file="$DOWNLOAD_DIR/${state_id}_dsfa_anforderungen.txt"
if [[ ! -f "$txt_file" ]]; then
# Generische Zusammenfassung erstellen
cat > "$txt_file" << EOF
DSFA Anforderungen - ${STATE_NAMES[$state_id]:-$state_id}
Behörde: ${AUTHORITY_LABELS[$state_id]:-Aufsichtsbehörde $state_id}
Gemäß Art. 35 DSGVO und den Orientierungshilfen der Datenschutzkonferenz (DSK)
ist für folgende Verarbeitungsvorgänge in ${STATE_NAMES[$state_id]:-$state_id} eine
Datenschutz-Folgenabschätzung durchzuführen:
Bundesweit geltende Pflichten:
- Verarbeitung besonderer Kategorien (Art. 9 DSGVO) in großem Umfang
- Systematische Überwachung öffentlich zugänglicher Bereiche
- Automatisierte Entscheidungen mit Rechtswirkung (Art. 22 DSGVO)
- Neue Technologien mit unbekannten Risiken
- Profiling in großem Umfang
Für länderspezifische Listen besuchen Sie bitte die Website der Behörde.
Quelle: DSK-Positionspapier, WP248, Art. 35 Abs. 4 DSGVO
EOF
fi
ingest_document \
"$txt_file" \
"muss_liste_${state_id}" \
"${STATE_NAMES[$state_id]:-$state_id}" \
"${AUTHORITY_LABELS[$state_id]:-Datenschutzbehörde $state_id}" \
"muss_liste"
done
log "Ingest abgeschlossen"
}
# =============================================================================
# Phase 5: Verifikation
# =============================================================================
verify_corpus() {
log "Verifiziere Corpus $COLLECTION..."
local response
response=$(curl -sk -X POST "${RAG_URL}/api/v1/search" \
-H "Content-Type: application/json" \
-H "X-Tenant-ID: default" \
-d "{\"query\":\"DSFA Muss-Liste Bundesland\",\"collection\":\"${COLLECTION}\",\"limit\":3}" \
--connect-timeout 15 2>&1 || echo "CONNECTION_ERROR")
if echo "$response" | grep -q "results"; then
local count
count=$(echo "$response" | grep -o '"total_results":[0-9]*' | grep -o '[0-9]*' || echo "?")
ok "Corpus $COLLECTION erreichbar $count Ergebnisse für Testsuche"
else
warn "Konnte Corpus nicht verifizieren. Response: ${response:0:200}"
fi
}
# =============================================================================
# Main
# =============================================================================
main() {
log "=== DSFA Bundesland RAG-Ingest ==="
log "Collection: $COLLECTION"
log "Download-Dir: $DOWNLOAD_DIR"
log "Skip-Download: $SKIP_DOWNLOAD"
# Schritt 1: Text-Zusammenfassungen erstellen (immer)
create_text_summaries
# Schritt 2: PDFs herunterladen (wenn nicht --skip-download)
if [[ "$SKIP_DOWNLOAD" == false && "$ONLY_TEXT" == false ]]; then
log "PDF-Downloads übersprungen (direkte URLs zu Behörden-PDFs variieren) nutze Text-Dateien"
log "Tipp: Laden Sie PDFs manuell herunter und legen Sie sie in $DOWNLOAD_DIR ab"
fi
# Schritt 3: Ingest
ingest_all
# Schritt 4: Verifikation
verify_corpus
log "=== Fertig ==="
log "Corpus: $COLLECTION"
log "Um zu suchen: curl -sk -X POST '${RAG_URL}/api/v1/search' -H 'Content-Type: application/json' -d '{\"query\":\"DSFA\",\"collection\":\"${COLLECTION}\",\"limit\":5}'"
}
main "$@"