'use client'
import React, { useState } from 'react'
import Link from 'next/link'
import { useSDK, UseCaseAssessment } from '@/lib/sdk'
// =============================================================================
// WIZARD STEPS
// =============================================================================
const WIZARD_STEPS = [
{ id: 1, name: 'Grunddaten', description: 'Name und Beschreibung des Use Cases' },
{ id: 2, name: 'Datenkategorien', description: 'Welche Daten werden verarbeitet?' },
{ id: 3, name: 'Technologie', description: 'Eingesetzte KI-Technologien' },
{ id: 4, name: 'Risikobewertung', description: 'Erste Risikoeinschätzung' },
{ id: 5, name: 'Zusammenfassung', description: 'Überprüfung und Abschluss' },
]
// =============================================================================
// USE CASE CARD
// =============================================================================
function UseCaseCard({
useCase,
isActive,
onSelect,
onDelete,
}: {
useCase: UseCaseAssessment
isActive: boolean
onSelect: () => void
onDelete: () => void
}) {
const completionPercent = Math.round((useCase.stepsCompleted / 5) * 100)
return (
{/* Delete Button */}
{completionPercent === 100 ? (
) : (
)}
{useCase.name}
{useCase.description}
Fortschritt
{completionPercent}%
{useCase.assessmentResult && (
Risiko: {useCase.assessmentResult.riskLevel}
{useCase.assessmentResult.dsfaRequired && (
DSFA erforderlich
)}
)}
)
}
// =============================================================================
// WIZARD
// =============================================================================
interface WizardFormData {
name: string
description: string
category: string
dataCategories: string[]
processesPersonalData: boolean
specialCategories: boolean
aiTechnologies: string[]
dataVolume: string
riskLevel: string
notes: string
}
function UseCaseWizard({
onComplete,
onCancel,
}: {
onComplete: (useCase: UseCaseAssessment) => void
onCancel: () => void
}) {
const [currentStep, setCurrentStep] = useState(1)
const [formData, setFormData] = useState({
name: '',
description: '',
category: '',
dataCategories: [],
processesPersonalData: false,
specialCategories: false,
aiTechnologies: [],
dataVolume: 'medium',
riskLevel: 'medium',
notes: '',
})
const updateFormData = (updates: Partial) => {
setFormData(prev => ({ ...prev, ...updates }))
}
const handleNext = () => {
if (currentStep < 5) {
setCurrentStep(prev => prev + 1)
} else {
// Create use case
const newUseCase: UseCaseAssessment = {
id: `uc-${Date.now()}`,
name: formData.name,
description: formData.description,
category: formData.category,
stepsCompleted: 5,
steps: WIZARD_STEPS.map(s => ({
id: `step-${s.id}`,
name: s.name,
completed: true,
data: {},
})),
assessmentResult: {
riskLevel: formData.riskLevel as 'LOW' | 'MEDIUM' | 'HIGH' | 'CRITICAL',
applicableRegulations: ['DSGVO', 'AI Act'],
recommendedControls: ['Datenschutz-Folgenabschätzung', 'Technische Maßnahmen'],
dsfaRequired: formData.specialCategories || formData.riskLevel === 'HIGH',
aiActClassification: formData.aiTechnologies.length > 0 ? 'LIMITED' : 'MINIMAL',
},
createdAt: new Date(),
updatedAt: new Date(),
}
onComplete(newUseCase)
}
}
const handleBack = () => {
if (currentStep > 1) {
setCurrentStep(prev => prev - 1)
}
}
return (
{/* Header */}
{/* Progress */}
{WIZARD_STEPS.map((step, index) => (
{step.id < currentStep ? (
) : (
step.id
)}
{index < WIZARD_STEPS.length - 1 && (
)}
))}
Schritt {currentStep}: {WIZARD_STEPS[currentStep - 1].description}
{/* Content */}
{currentStep === 1 && (
updateFormData({ name: e.target.value })}
placeholder="z.B. Marketing-KI für Kundensegmentierung"
className="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500 focus:border-transparent"
/>
)}
{currentStep === 2 && (
{formData.processesPersonalData && (
<>
{formData.specialCategories && (
Bei besonderen Kategorien ist eine DSFA in der Regel erforderlich!
)}
>
)}
)}
{currentStep === 3 && (
{[
'Machine Learning',
'Deep Learning',
'Natural Language Processing',
'Computer Vision',
'Generative AI (LLM)',
'Empfehlungssysteme',
'Predictive Analytics',
'Chatbots/Assistenten',
].map(tech => (
))}
)}
{currentStep === 4 && (
{[
{ value: 'low', label: 'Niedrig', description: 'Keine personenbezogenen Daten, kein kritischer Einsatz' },
{ value: 'medium', label: 'Mittel', description: 'Personenbezogene Daten, aber kein kritischer Einsatz' },
{ value: 'high', label: 'Hoch', description: 'Besondere Kategorien oder automatisierte Entscheidungen' },
{ value: 'critical', label: 'Kritisch', description: 'Hochrisiko-KI nach AI Act' },
].map(option => (
))}
)}
{currentStep === 5 && (
Zusammenfassung
- Name:
- {formData.name || '-'}
- Kategorie:
- {formData.category || '-'}
- Personenbezogene Daten:
-
{formData.processesPersonalData ? 'Ja' : 'Nein'}
{formData.processesPersonalData && (
- Datenkategorien:
- {formData.dataCategories.join(', ') || '-'}
)}
- KI-Technologien:
- {formData.aiTechnologies.join(', ') || '-'}
- Risikostufe:
-
{formData.riskLevel.toUpperCase()}
{(formData.specialCategories || formData.riskLevel === 'high' || formData.riskLevel === 'critical') && (
DSFA erforderlich
Basierend auf Ihrer Eingabe wird eine Datenschutz-Folgenabschätzung empfohlen.
)}
)}
{/* Footer */}
)
}
// =============================================================================
// MAIN PAGE
// =============================================================================
export default function AdvisoryBoardPage() {
const { state, dispatch } = useSDK()
const [showWizard, setShowWizard] = useState(false)
const handleCreateUseCase = (useCase: UseCaseAssessment) => {
dispatch({ type: 'ADD_USE_CASE', payload: useCase })
dispatch({ type: 'SET_ACTIVE_USE_CASE', payload: useCase.id })
setShowWizard(false)
}
const handleDeleteUseCase = (id: string) => {
if (confirm('Möchten Sie diesen Use Case wirklich löschen?')) {
dispatch({ type: 'DELETE_USE_CASE', payload: id })
}
}
return (
{/* Header */}
Use Case Workshop
Erfassen Sie Ihre KI-Anwendungsfälle und erhalten Sie eine erste Compliance-Bewertung
UCCA-System Dokumentation ansehen
{!showWizard && (
)}
{/* Wizard or List */}
{showWizard ? (
setShowWizard(false)} />
) : state.useCases.length === 0 ? (
Noch keine Use Cases
Erstellen Sie Ihren ersten Use Case, um mit dem Compliance Assessment zu beginnen.
) : (
{state.useCases.map(useCase => (
dispatch({ type: 'SET_ACTIVE_USE_CASE', payload: useCase.id })}
onDelete={() => handleDeleteUseCase(useCase.id)}
/>
))}
)}
)
}