+ {/* Tab 1: Systembeschreibung */}
+ {activeTab === 1 && (
+
+
+
+ update({ name: e.target.value })}
+ placeholder={`z.B. ${typeInfo.label} für Kundenservice`}
+ className="w-full px-3 py-2 text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500 focus:border-purple-500"
+ />
+
+
+
+
+
+
+
+
+
+ update({ third_country_transfer: e.target.checked })}
+ className="h-4 w-4 rounded border-gray-300 text-purple-600"
+ />
+
+ {module.third_country_transfer && (
+ update({ provider_country: e.target.value })}
+ placeholder="Land (z.B. USA)"
+ className="ml-2 px-2 py-1 text-sm border border-orange-300 rounded focus:ring-2 focus:ring-orange-500"
+ />
+ )}
+
+
+ )}
+
+ {/* Tab 2: Daten & Betroffene */}
+ {activeTab === 2 && (
+
+ {/* Input Data Categories */}
+
+
+
+ setNewCategory(e.target.value)}
+ onKeyDown={e => e.key === 'Enter' && addToList('input_data_categories', newCategory, setNewCategory)}
+ placeholder="Datenkategorie hinzufügen..."
+ className="flex-1 px-3 py-2 text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500"
+ />
+
+
+
+ {(module.input_data_categories || []).map((cat, i) => (
+
+ {cat}
+
+
+ ))}
+
+
+
+ {/* Output Data Categories */}
+
+
+
+ setNewOutputCategory(e.target.value)}
+ onKeyDown={e => e.key === 'Enter' && addToList('output_data_categories', newOutputCategory, setNewOutputCategory)}
+ placeholder="Output-Kategorie (z.B. Bewertung, Empfehlung)..."
+ className="flex-1 px-3 py-2 text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500"
+ />
+
+
+
+ {(module.output_data_categories || []).map((cat, i) => (
+
+ {cat}
+
+
+ ))}
+
+
+
+ {/* Special Categories */}
+
+
update({ involves_special_categories: e.target.checked })}
+ className="mt-1 h-4 w-4 rounded border-gray-300 text-purple-600"
+ />
+
+
+
+ {/* Data Subjects */}
+
+
+
+ setNewSubject(e.target.value)}
+ onKeyDown={e => e.key === 'Enter' && addToList('data_subjects', newSubject, setNewSubject)}
+ placeholder="z.B. Kunden, Mitarbeiter, Nutzer..."
+ className="flex-1 px-3 py-2 text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500"
+ />
+
+
+
+ {(module.data_subjects || []).map((s, i) => (
+
+ {s}
+
+
+ ))}
+
+
+
+
+
+ )}
+
+ {/* Tab 3: Zweck & Art. 22 */}
+ {activeTab === 3 && (
+
+
+
+
+
+
+
+
+ {module.legal_basis && (
+
+
+
+ )}
+ {/* Art. 22 Panel */}
+
+
+ Art. 22 DSGVO – Automatisierte Einzelentscheidung
+ {art22Required && (
+
+ Wahrscheinlich anwendbar
+
+ )}
+
+
update({ art22_assessment: a22 })}
+ />
+
+
+ )}
+
+ {/* Tab 4: KI-Kriterien & AI Act */}
+ {activeTab === 4 && (
+
+
+
WP248-Risikokriterien
+
update({ risk_criteria: criteria })}
+ />
+
+
+
EU AI Act – Risikoklasse
+
+ {(Object.entries(AI_ACT_RISK_CLASSES) as [AIActRiskClass, typeof AI_ACT_RISK_CLASSES[AIActRiskClass]][]).map(([cls, info]) => (
+
+ ))}
+
+ {module.ai_act_risk_class && (
+
+
+
+ )}
+ {module.ai_act_risk_class && AI_ACT_RISK_CLASSES[module.ai_act_risk_class].requirements.length > 0 && (
+
+
Anforderungen dieser Klasse:
+
+ {AI_ACT_RISK_CLASSES[module.ai_act_risk_class].requirements.map((req, i) => (
+ -
+ •
+ {req}
+
+ ))}
+
+
+ )}
+
+
+ )}
+
+ {/* Tab 5: Risikoanalyse */}
+ {activeTab === 5 && (
+
+
+ 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
+ )}
+
+ {/* Add Risk */}
+
+
+ )}
+
+ {/* Tab 6: Maßnahmen & Privacy by Design */}
+ {activeTab === 6 && (
+
+
+
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 */}
+ {activeTab === 7 && (
+
+
+ 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 (
+
+ )
+ })}
+
+
+
+
+
+
+ update({ next_review_date: e.target.value })}
+ className="px-3 py-2 text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500"
+ />
+
+
+ )}
+
+
+ {activeTab > 1 && (
+
+ )}
+ {activeTab < 7 && (
+
+ )}
+
+
+
+
+
+