'use client' import { useState } from 'react' import { CompanyProfile } from '@/lib/sdk/types' import { AISystem, AISystemTemplate } from './types' import { AI_SYSTEM_TEMPLATES } from './ai-system-data' export function StepAISystems({ data, onChange, }: { data: Partial & { aiSystems?: AISystem[] } onChange: (updates: Record) => void }) { const aiSystems: AISystem[] = (data as any).aiSystems || [] const [expandedSystem, setExpandedSystem] = useState(null) const [collapsedCategories, setCollapsedCategories] = useState>(new Set()) const activeIds = new Set(aiSystems.map(a => a.id)) const toggleTemplateSystem = (template: AISystemTemplate) => { if (activeIds.has(template.id)) { onChange({ aiSystems: aiSystems.filter(a => a.id !== template.id) }) if (expandedSystem === template.id) setExpandedSystem(null) } else { const newSystem: AISystem = { id: template.id, name: template.name, vendor: template.vendor, purpose: template.typicalPurposes.join(', '), purposes: [], processes_personal_data: template.processes_personal_data_likely, isCustom: false, } onChange({ aiSystems: [...aiSystems, newSystem] }) setExpandedSystem(template.id) } } const updateAISystem = (id: string, updates: Partial) => { onChange({ aiSystems: aiSystems.map(a => a.id === id ? { ...a, ...updates } : a) }) } const togglePurpose = (systemId: string, purpose: string) => { const system = aiSystems.find(a => a.id === systemId) if (!system) return const purposes = system.purposes || [] const updated = purposes.includes(purpose) ? purposes.filter(p => p !== purpose) : [...purposes, purpose] updateAISystem(systemId, { purposes: updated, purpose: updated.join(', ') }) } const addCustomSystem = () => { const id = `custom_ai_${Date.now()}` onChange({ aiSystems: [...aiSystems, { id, name: '', vendor: '', purpose: '', processes_personal_data: false, isCustom: true }] }) setExpandedSystem(id) } const removeSystem = (id: string) => { onChange({ aiSystems: aiSystems.filter(a => a.id !== id) }) if (expandedSystem === id) setExpandedSystem(null) } const toggleCategoryCollapse = (category: string) => { setCollapsedCategories(prev => { const next = new Set(prev); if (next.has(category)) next.delete(category); else next.add(category); return next }) } const categoryActiveCount = (systems: AISystemTemplate[]) => systems.filter(s => activeIds.has(s.id)).length return (

KI-Systeme im Einsatz

Waehlen Sie die KI-Systeme aus, die in Ihrem Unternehmen eingesetzt werden. Dies dient der Erfassung fuer den EU AI Act und die DSGVO-Dokumentation.

{AI_SYSTEM_TEMPLATES.map(group => { const isCollapsed = collapsedCategories.has(group.category) const activeCount = categoryActiveCount(group.systems) return (
{!isCollapsed && (
{group.systems.map(template => { const isActive = activeIds.has(template.id) const system = aiSystems.find(a => a.id === template.id) const isExpanded = expandedSystem === template.id return (
{ if (!isActive) { toggleTemplateSystem(template) } else { setExpandedSystem(isExpanded ? null : template.id) } }} > { e.stopPropagation(); toggleTemplateSystem(template) }} className="w-4 h-4 text-purple-600 rounded focus:ring-purple-500 flex-shrink-0" />
{template.name}

{template.vendor}

{isActive && ( )}
{isActive && isExpanded && system && (
{template.typicalPurposes.map(purpose => ( ))}
updateAISystem(template.id, { notes: e.target.value })} placeholder="Weitere Einsatzzwecke / Anmerkungen..." className="mt-2 w-full px-3 py-2 border border-gray-300 rounded-lg text-sm focus:ring-2 focus:ring-purple-500 focus:border-transparent" />
{template.dataWarning && (
{template.dataWarning.includes('EU') || template.dataWarning.includes('Deutscher Anbieter') ? '\u2139\uFE0F' : '\u26A0\uFE0F'} {template.dataWarning}
)}
)}
) })}
)}
) })}
{aiSystems.filter(a => a.isCustom).map(system => (
setExpandedSystem(expandedSystem === system.id ? null : system.id)}> +
{system.name || 'Neues KI-System'} {system.vendor && ({system.vendor})}
{expandedSystem === system.id && (
updateAISystem(system.id, { name: e.target.value })} placeholder="Name (z.B. ChatGPT, Copilot)" className="px-3 py-2 border border-gray-300 rounded-lg text-sm focus:ring-2 focus:ring-purple-500 focus:border-transparent" /> updateAISystem(system.id, { vendor: e.target.value })} placeholder="Anbieter (z.B. OpenAI, Microsoft)" className="px-3 py-2 border border-gray-300 rounded-lg text-sm focus:ring-2 focus:ring-purple-500 focus:border-transparent" />
updateAISystem(system.id, { purpose: e.target.value })} placeholder="Einsatzzweck (z.B. Kundensupport, Code-Assistenz)" className="w-full px-3 py-2 border border-gray-300 rounded-lg text-sm focus:ring-2 focus:ring-purple-500 focus:border-transparent" />
)}
))}
{'\u2139\uFE0F'}

AI Act Risikoeinstufung

Die detaillierte Risikoeinstufung Ihrer KI-Systeme nach EU AI Act (verboten / hochriskant / begrenzt / minimal) erfolgt automatisch im AI-Act-Modul.

Zum AI-Act-Modul
) }