'use client' /** * DSFA - Datenschutz-Folgenabschaetzung * * Art. 35 DSGVO - Datenschutz-Folgenabschaetzung */ import { useState } from 'react' import { PagePurpose } from '@/components/common/PagePurpose' interface DSFAProject { id: string name: string description: string status: 'draft' | 'in_progress' | 'completed' | 'review_needed' riskLevel: 'low' | 'medium' | 'high' | 'critical' createdAt: string lastUpdated: string dpoApproval?: boolean phases: { description: boolean necessity: boolean risks: boolean measures: boolean consultation: boolean } } interface RiskAssessment { id: string category: string risk: string likelihood: 'rare' | 'unlikely' | 'possible' | 'likely' | 'certain' impact: 'negligible' | 'minor' | 'moderate' | 'major' | 'severe' riskScore: number mitigations: string[] residualRisk: 'acceptable' | 'tolerable' | 'unacceptable' } export default function DSFAPage() { const [activeTab, setActiveTab] = useState<'overview' | 'projects' | 'methodology' | 'templates'>('overview') const [expandedProject, setExpandedProject] = useState('ai_processing') const dsfaProjects: DSFAProject[] = [ { id: 'ai_processing', name: 'KI-gestuetzte Korrektur und Bewertung', description: 'Automatische Korrektur von Schuelerarbeiten mittels KI (Ollama/OpenAI)', status: 'in_progress', riskLevel: 'high', createdAt: '2024-10-01', lastUpdated: '2024-12-01', dpoApproval: false, phases: { description: true, necessity: true, risks: true, measures: false, consultation: false } }, { id: 'learning_analytics', name: 'Lernfortschrittsanalyse', description: 'Systematische Analyse des Lernverhaltens zur Personalisierung', status: 'completed', riskLevel: 'medium', createdAt: '2024-06-15', lastUpdated: '2024-11-15', dpoApproval: true, phases: { description: true, necessity: true, risks: true, measures: true, consultation: true } }, { id: 'biometric_voice', name: 'Voice-Service Spracherkennung', description: 'Sprachbasierte Interaktion mit potentieller Stimmerkennung', status: 'draft', riskLevel: 'high', createdAt: '2024-11-01', lastUpdated: '2024-11-01', dpoApproval: false, phases: { description: true, necessity: false, risks: false, measures: false, consultation: false } }, ] const riskAssessments: RiskAssessment[] = [ { id: 'r1', category: 'Vertraulichkeit', risk: 'Unbefugter Zugriff auf Schuelerdaten durch Drittanbieter-KI', likelihood: 'unlikely', impact: 'major', riskScore: 12, mitigations: [ 'Lokale Verarbeitung mit Ollama priorisieren', 'Anonymisierung vor Cloud-Verarbeitung', 'Standardvertragsklauseln mit OpenAI' ], residualRisk: 'tolerable' }, { id: 'r2', category: 'Integritaet', risk: 'Fehlerhafte KI-Bewertungen fuehren zu falschen Noten', likelihood: 'possible', impact: 'moderate', riskScore: 9, mitigations: [ 'Menschliche Ueberpruefung aller KI-Bewertungen', 'Transparente Darstellung als "Vorschlag"', 'Feedback-Mechanismus fuer Korrekturen' ], residualRisk: 'acceptable' }, { id: 'r3', category: 'Verfuegbarkeit', risk: 'Systemausfall verhindert Zugriff auf Lernmaterialien', likelihood: 'rare', impact: 'minor', riskScore: 2, mitigations: [ 'Offline-Faehigkeit der App', 'Redundante Datenhaltung', 'Automatische Backups' ], residualRisk: 'acceptable' }, { id: 'r4', category: 'Rechte der Betroffenen', risk: 'Automatisierte Entscheidungen ohne menschliche Intervention', likelihood: 'possible', impact: 'major', riskScore: 12, mitigations: [ 'KI nur als Unterstuetzung, finale Entscheidung beim Lehrer', 'Recht auf menschliche Ueberpruefung dokumentiert', 'Transparente Information ueber KI-Einsatz' ], residualRisk: 'tolerable' }, ] const getStatusBadge = (status: string) => { switch (status) { case 'completed': return Abgeschlossen case 'in_progress': return In Bearbeitung case 'draft': return Entwurf case 'review_needed': return Pruefung erforderlich default: return null } } const getRiskBadge = (level: string) => { switch (level) { case 'critical': return Kritisch case 'high': return Hoch case 'medium': return Mittel case 'low': return Niedrig default: return null } } const getResidualRiskBadge = (risk: string) => { switch (risk) { case 'acceptable': return Akzeptabel case 'tolerable': return Tolerierbar case 'unacceptable': return Nicht akzeptabel default: return null } } const calculatePhaseProgress = (phases: DSFAProject['phases']) => { const total = Object.keys(phases).length const completed = Object.values(phases).filter(Boolean).length return Math.round((completed / total) * 100) } return (
{/* Tabs */}
{[ { id: 'overview', label: 'Uebersicht' }, { id: 'projects', label: 'DSFA-Projekte' }, { id: 'methodology', label: 'Methodik' }, { id: 'templates', label: 'Vorlagen' }, ].map(tab => ( ))}
{/* Overview Tab */} {activeTab === 'overview' && (
{/* Statistics */}
{dsfaProjects.length}
DSFA-Projekte
{dsfaProjects.filter(p => p.status === 'completed').length}
Abgeschlossen
{dsfaProjects.filter(p => p.status === 'in_progress').length}
In Bearbeitung
{dsfaProjects.filter(p => p.riskLevel === 'high' || p.riskLevel === 'critical').length}
Hohes Risiko
{/* When is DSFA required */}

Wann ist eine DSFA erforderlich?

Art. 35 Abs. 3 - Pflichtfaelle:

  • Systematische Bewertung persoenlicher Aspekte (Profiling)
  • Umfangreiche Verarbeitung besonderer Kategorien (Art. 9)
  • Systematische Ueberwachung oeffentlicher Bereiche

Zusaetzliche Kriterien (DSK-Liste):

  • Verarbeitung von Daten Minderjaehriger
  • Einsatz neuer Technologien (z.B. KI)
  • Zusammenfuehrung von Datensaetzen
  • Automatisierte Entscheidungsfindung
{/* Risk Matrix */}

Risiko-Matrix (KI-Verarbeitung)

{riskAssessments.map(risk => ( ))}
Kategorie Risiko Score Massnahmen Restrisiko
{risk.category} {risk.risk} = 12 ? 'bg-red-100 text-red-800' : risk.riskScore >= 6 ? 'bg-yellow-100 text-yellow-800' : 'bg-green-100 text-green-800' }`}> {risk.riskScore}
    {risk.mitigations.slice(0, 2).map((m, i) => (
  • • {m}
  • ))} {risk.mitigations.length > 2 && (
  • +{risk.mitigations.length - 2} weitere
  • )}
{getResidualRiskBadge(risk.residualRisk)}
)} {/* Projects Tab */} {activeTab === 'projects' && (

DSFA-Projekte

{dsfaProjects.length} dokumentierte Folgenabschaetzungen

{dsfaProjects.map(project => (
{expandedProject === project.id && (
{/* Phases */}

DSFA-Phasen

{[ { key: 'description', label: 'Beschreibung der Verarbeitung' }, { key: 'necessity', label: 'Notwendigkeit & Verhaeltnismaessigkeit' }, { key: 'risks', label: 'Risikobewertung' }, { key: 'measures', label: 'Abhilfemassnahmen' }, { key: 'consultation', label: 'DSB-Konsultation' }, ].map(phase => (
{project.phases[phase.key as keyof typeof project.phases] ? ( ) : ( )}
{phase.label}
))}
{/* Meta Info */}

Erstellt

{project.createdAt}

Letzte Aktualisierung

{project.lastUpdated}

DSB-Freigabe

{project.dpoApproval ? 'Erteilt' : 'Ausstehend'}

{!project.dpoApproval && ( )}
)}
))}
)} {/* Methodology Tab */} {activeTab === 'methodology' && (

DSFA-Prozess nach Art. 35 DSGVO

{[ { step: 1, title: 'Schwellwertanalyse', description: 'Pruefung ob eine DSFA erforderlich ist anhand der Kriterien aus Art. 35 Abs. 3 und der DSK-Positivliste.', details: [ 'Verarbeitung besonderer Kategorien (Art. 9)?', 'Systematisches Profiling?', 'Neue Technologien im Einsatz?', 'Daten von Minderjaehrigen?' ] }, { step: 2, title: 'Beschreibung der Verarbeitung', description: 'Systematische Beschreibung der geplanten Verarbeitungsvorgaenge und Zwecke.', details: [ 'Art, Umfang, Umstaende der Verarbeitung', 'Zweck der Verarbeitung', 'Betroffene Personengruppen', 'Verantwortlichkeiten' ] }, { step: 3, title: 'Notwendigkeit & Verhaeltnismaessigkeit', description: 'Bewertung ob die Verarbeitung notwendig und verhaeltnismaessig ist.', details: [ 'Rechtsgrundlage vorhanden?', 'Zweckbindung eingehalten?', 'Datenminimierung beachtet?', 'Speicherbegrenzung definiert?' ] }, { step: 4, title: 'Risikobewertung', description: 'Systematische Bewertung der Risiken fuer Rechte und Freiheiten der Betroffenen.', details: [ 'Risiken identifizieren', 'Eintrittswahrscheinlichkeit bewerten', 'Schwere der Auswirkungen bewerten', 'Risiko-Score berechnen' ] }, { step: 5, title: 'Abhilfemassnahmen', description: 'Definition von Massnahmen zur Eindaemmung der identifizierten Risiken.', details: [ 'Technische Massnahmen (TOMs)', 'Organisatorische Massnahmen', 'Restrisiko-Bewertung', 'Implementierungsplan' ] }, { step: 6, title: 'DSB-Konsultation', description: 'Einholung der Stellungnahme des Datenschutzbeauftragten.', details: [ 'DSFA dem DSB vorlegen', 'Stellungnahme dokumentieren', 'Ggf. Anpassungen vornehmen', 'Freigabe erteilen' ] }, { step: 7, title: 'Vorherige Konsultation (Art. 36)', description: 'Bei verbleibendem hohen Risiko: Konsultation der Aufsichtsbehoerde.', details: [ 'Nur bei hohem Restrisiko erforderlich', 'Aufsichtsbehoerde hat 8 Wochen zur Pruefung', 'Dokumentation der Konsultation', 'Umsetzung der Auflagen' ] } ].map(item => (
{item.step}

{item.title}

{item.description}

    {item.details.map((detail, idx) => (
  • {detail}
  • ))}
))}
)} {/* Templates Tab */} {activeTab === 'templates' && (

DSFA-Vorlagen

{[ { name: 'Standard DSFA-Vorlage', description: 'Vollstaendige Vorlage nach Art. 35 DSGVO', format: 'DOCX', size: '45 KB' }, { name: 'KI-Verarbeitung Template', description: 'Spezialvorlage fuer KI/ML-Anwendungen', format: 'DOCX', size: '52 KB' }, { name: 'Risikobewertungs-Matrix', description: 'Excel-Vorlage fuer systematische Risikobewertung', format: 'XLSX', size: '28 KB' }, { name: 'Schwellwert-Checkliste', description: 'Checkliste zur Pruefung ob DSFA erforderlich', format: 'PDF', size: '120 KB' }, { name: 'DSB-Konsultationsformular', description: 'Formular zur internen DSB-Freigabe', format: 'DOCX', size: '32 KB' }, { name: 'Aufsichtsbehoerden-Vorlage', description: 'Vorlage fuer Art. 36 Konsultation', format: 'DOCX', size: '38 KB' } ].map(template => (

{template.name}

{template.description}

{template.format}
{template.size}
))}
)} {/* Info */}

Wichtiger Hinweis

Eine DSFA ist vor Beginn der Verarbeitung durchzufuehren. Bei wesentlichen Aenderungen an bestehenden Verarbeitungen muss die DSFA aktualisiert werden. Die Dokumentation muss der Aufsichtsbehoerde auf Anfrage vorgelegt werden koennen.

) }