'use client' import React from 'react' import { AIUseCaseModule, AI_USE_CASE_TYPES, PRIVACY_BY_DESIGN_CATEGORIES, PrivacyByDesignCategory, AIModuleReviewTriggerType, } from '@/lib/sdk/dsfa/ai-use-case-types' import { REVIEW_TRIGGER_TYPES } from './AIUseCaseEditorConstants' type UpdateFn = (updates: Partial) => void // ============================================================================= // TAB 5: Risikoanalyse // ============================================================================= interface Tab5RisksProps { module: AIUseCaseModule update: UpdateFn typeInfo: typeof AI_USE_CASE_TYPES[keyof typeof AI_USE_CASE_TYPES] } export function Tab5Risks({ module, update, typeInfo }: Tab5RisksProps) { return (

Spezifische Risiken für diesen KI-Anwendungsfall. Typische Risiken basierend auf dem gewählten Typ:

{typeInfo.typical_risks.length > 0 && (
Typische Risiken für {typeInfo.label}:
    {typeInfo.typical_risks.map((r, i) => (
  • ⚠️ {r}
  • ))}
)}
{(module.risks || []).map((risk, idx) => (

{risk.description}

W: {risk.likelihood} S: {risk.impact}
))} {(module.risks || []).length === 0 && (

Noch keine Risiken dokumentiert

)}
) } // ============================================================================= // TAB 6: Maßnahmen & Privacy by Design // ============================================================================= interface Tab6PrivacyByDesignProps { module: AIUseCaseModule update: UpdateFn togglePbdMeasure: (category: PrivacyByDesignCategory) => void } export function Tab6PrivacyByDesign({ module, togglePbdMeasure }: Tab6PrivacyByDesignProps) { return (

Privacy by Design Maßnahmen

{(Object.entries(PRIVACY_BY_DESIGN_CATEGORIES) as [PrivacyByDesignCategory, typeof PRIVACY_BY_DESIGN_CATEGORIES[PrivacyByDesignCategory]][]).map(([cat, info]) => { const measure = module.privacy_by_design_measures?.find(m => m.category === cat) return ( ) })}
) } // ============================================================================= // TAB 7: Review-Trigger // ============================================================================= interface Tab7ReviewProps { module: AIUseCaseModule update: UpdateFn toggleReviewTrigger: (type: AIModuleReviewTriggerType) => void } export function Tab7Review({ module, update, toggleReviewTrigger }: Tab7ReviewProps) { return (

Wählen Sie die Ereignisse, die eine erneute Bewertung dieses KI-Anwendungsfalls auslösen sollen.

{REVIEW_TRIGGER_TYPES.map(rt => { const active = module.review_triggers?.some(t => t.type === rt.value) const trigger = module.review_triggers?.find(t => t.type === rt.value) return (
toggleReviewTrigger(rt.value)} className="h-4 w-4 rounded border-gray-300 text-purple-600" /> {rt.icon} {rt.label}
{active && (
{ const updated = (module.review_triggers || []).map(t => t.type === rt.value ? { ...t, threshold: e.target.value } : t ) update({ review_triggers: updated }) }} placeholder="Schwellwert (z.B. Genauigkeit < 80%)" className="w-full px-2 py-1 text-xs border border-purple-200 rounded focus:ring-2 focus:ring-purple-400" /> { const updated = (module.review_triggers || []).map(t => t.type === rt.value ? { ...t, monitoring_interval: e.target.value } : t ) update({ review_triggers: updated }) }} placeholder="Monitoring-Intervall (z.B. wöchentlich)" className="w-full px-2 py-1 text-xs border border-purple-200 rounded focus:ring-2 focus:ring-purple-400" />
)}
) })}