+
+
+
+
+
+
+
+ {local.vvtId}
+
{local.name || 'Neue Verarbeitung'}
+
+
+
+ update({ status: e.target.value as VVTActivity['status'] })}
+ className="px-3 py-1.5 border border-gray-300 rounded-lg text-sm"
+ >
+ Entwurf
+ In Pruefung
+ Genehmigt
+ Archiviert
+
+
+ Speichern
+
+
+
+ {/* Bezeichnung + Beschreibung */}
+
+
+ update({ name: e.target.value })}
+ className="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500 focus:border-transparent"
+ placeholder="z.B. Mitarbeiterverwaltung" />
+
+
+
+
+
+ update({ responsible: e.target.value })}
+ className="w-full px-3 py-2 border border-gray-300 rounded-lg" placeholder="z.B. HR-Abteilung" />
+
+
+ update({ businessFunction: e.target.value as BusinessFunction })}
+ className="w-full px-3 py-2 border border-gray-300 rounded-lg">
+ {Object.entries(BUSINESS_FUNCTION_LABELS).map(([k, v]) => (
+ {v}
+ ))}
+
+
+
+
+
+ {/* Zwecke */}
+
+ update({ purposes })}
+ placeholder="Zweck eingeben und Enter druecken"
+ />
+
+
+ {/* Rechtsgrundlagen */}
+
+
+ {local.legalBases.map((lb, i) => (
+
+
{
+ const copy = [...local.legalBases]
+ copy[i] = { ...copy[i], type: e.target.value }
+ update({ legalBases: copy })
+ }}
+ className="flex-1 px-3 py-2 border border-gray-300 rounded-lg text-sm"
+ >
+ -- Rechtsgrundlage waehlen --
+ {Object.entries(LEGAL_BASIS_META).map(([k, v]) => (
+ {v.label.de} ({v.article})
+ ))}
+
+
{
+ const copy = [...local.legalBases]
+ copy[i] = { ...copy[i], reference: e.target.value }
+ update({ legalBases: copy })
+ }}
+ className="w-48 px-3 py-2 border border-gray-300 rounded-lg text-sm"
+ placeholder="Referenz"
+ />
+
update({ legalBases: local.legalBases.filter((_, j) => j !== i) })}
+ className="p-2 text-gray-400 hover:text-red-500">
+
+
+
+
+
+ ))}
+
update({ legalBases: [...local.legalBases, { type: '', description: '', reference: '' }] })}
+ className="text-sm text-purple-600 hover:text-purple-700">
+ + Rechtsgrundlage hinzufuegen
+
+
+
+
+ {/* Betroffenenkategorien */}
+
+ ({ value: k, label: v.de }))}
+ selected={local.dataSubjectCategories}
+ onChange={(dataSubjectCategories) => update({ dataSubjectCategories })}
+ />
+
+
+ {/* Datenkategorien */}
+
+ ({
+ value: k,
+ label: v.label.de,
+ highlight: v.isSpecial,
+ }))}
+ selected={local.personalDataCategories}
+ onChange={(personalDataCategories) => update({ personalDataCategories })}
+ />
+ {local.personalDataCategories.some(c => ART9_CATEGORIES.includes(c)) && (
+
+ Hinweis: Sie verarbeiten besondere Datenkategorien nach Art. 9 DSGVO. Stellen Sie sicher, dass eine Art.-9-Rechtsgrundlage vorliegt.
+
+ )}
+
+
+ {/* Empfaenger */}
+
+
+ {local.recipientCategories.map((rc, i) => (
+
+
{
+ const copy = [...local.recipientCategories]
+ copy[i] = { ...copy[i], type: e.target.value }
+ update({ recipientCategories: copy })
+ }}
+ className="w-40 px-3 py-2 border border-gray-300 rounded-lg text-sm"
+ >
+ Intern
+ Auftragsverarbeiter
+ Verantwortlicher
+ Behoerde
+ Konzern
+ Sonstige
+
+
{
+ const copy = [...local.recipientCategories]
+ copy[i] = { ...copy[i], name: e.target.value }
+ update({ recipientCategories: copy })
+ }}
+ className="flex-1 px-3 py-2 border border-gray-300 rounded-lg text-sm" placeholder="Name des Empfaengers" />
+
update({ recipientCategories: local.recipientCategories.filter((_, j) => j !== i) })}
+ className="p-2 text-gray-400 hover:text-red-500">
+
+
+
+
+
+ ))}
+
update({ recipientCategories: [...local.recipientCategories, { type: 'INTERNAL', name: '' }] })}
+ className="text-sm text-purple-600 hover:text-purple-700">
+ + Empfaenger hinzufuegen
+
+
+
+
+ {/* Drittlandtransfers */}
+
+
+ {local.thirdCountryTransfers.map((tc, i) => (
+
+ ))}
+
update({ thirdCountryTransfers: [...local.thirdCountryTransfers, { country: '', recipient: '', transferMechanism: '' }] })}
+ className="text-sm text-purple-600 hover:text-purple-700">
+ + Drittlandtransfer hinzufuegen
+
+
+
+
+ {/* Aufbewahrungsfristen */}
+
+
+
+ update({ retentionPeriod: { ...local.retentionPeriod, description: e.target.value } })}
+ className="w-full px-3 py-2 border border-gray-300 rounded-lg" placeholder="Freitextbeschreibung der Aufbewahrungsfrist" />
+
+
+
+ {/* TOM-Beschreibung */}
+
+
+
+ {/* Advanced (collapsible) */}
+
+
setShowAdvanced(!showAdvanced)}
+ className="flex items-center gap-2 text-sm text-gray-600 hover:text-gray-900"
+ >
+
+
+
+ Generator-Felder (Schutzniveau, Systeme, DSFA)
+
+
+ {showAdvanced && (
+
+
+
+ update({ protectionLevel: e.target.value as VVTActivity['protectionLevel'] })}
+ className="w-full px-3 py-2 border border-gray-300 rounded-lg">
+ {Object.entries(PROTECTION_LEVEL_LABELS).map(([k, v]) => (
+ {v}
+ ))}
+
+
+
+ update({ deploymentModel: e.target.value as VVTActivity['deploymentModel'] })}
+ className="w-full px-3 py-2 border border-gray-300 rounded-lg">
+ {Object.entries(DEPLOYMENT_LABELS).map(([k, v]) => (
+ {v}
+ ))}
+
+
+
+
+ update({ dpiaRequired: e.target.checked })}
+ className="w-4 h-4 text-purple-600 rounded" />
+ Ja, DSFA nach Art. 35 DSGVO erforderlich
+
+
+
+
+ )}
+
+