feat: DSFA Section 8 KI-Anwendungsfälle + Bundesland RAG-Ingest
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

- 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>
This commit is contained in:
Benjamin Admin
2026-03-05 09:20:27 +01:00
parent 274dc68e24
commit 308d559c85
17 changed files with 2541 additions and 3 deletions

450
scripts/ingest-dsfa-bundesland.sh Executable file
View File

@@ -0,0 +1,450 @@
#!/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 "$@"