'use client' import React, { useState } from 'react' interface DocumentEntry { doc_type: string label: string url: string } interface Props { onStart: (vendorName: string, documents: DocumentEntry[]) => void } const DOC_TYPES = [ { value: 'auto', label: 'Automatisch erkennen' }, { value: 'avv', label: 'AVV / Auftragsverarbeitungsvertrag' }, { value: 'scc', label: 'SCC / Standardvertragsklauseln' }, { value: 'tom_annex', label: 'TOM-Anlage (Art. 32)' }, { value: 'sub_processor_list', label: 'Sub-Processor-Liste' }, { value: 'agb', label: 'AGB / Nutzungsbedingungen' }, ] export function DocumentUploader({ onStart }: Props) { const [vendorName, setVendorName] = useState('') const [entries, setEntries] = useState([ { doc_type: 'auto', label: '', url: '' }, ]) const [loading, setLoading] = useState(false) const updateEntry = (idx: number, field: keyof DocumentEntry, value: string) => { setEntries(prev => { const copy = [...prev] copy[idx] = { ...copy[idx], [field]: value } return copy }) } const addEntry = () => { setEntries(prev => [...prev, { doc_type: 'auto', label: '', url: '' }]) } const removeEntry = (idx: number) => { if (entries.length <= 1) return setEntries(prev => prev.filter((_, i) => i !== idx)) } const handleSubmit = (e: React.FormEvent) => { e.preventDefault() const valid = entries.filter(d => d.url.trim()) if (!vendorName.trim() || valid.length === 0) return setLoading(true) onStart(vendorName.trim(), valid.map(d => ({ ...d, label: d.label || `${DOC_TYPES.find(t => t.value === d.doc_type)?.label || d.doc_type}: ${vendorName}`, }))) } return (
{/* Vendor Name */}
setVendorName(e.target.value)} placeholder="z.B. SysEleven GmbH, Amazon Web Services, Microsoft" className="w-full px-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent text-sm" required />
{/* Documents */}

Dokumente

Fuegen Sie die URLs der Vertragsdokumente hinzu. Das System erkennt den Dokumenttyp automatisch.

{entries.map((entry, idx) => (
updateEntry(idx, 'url', e.target.value)} placeholder="https://example.com/avv.pdf" className="w-full px-3 py-2 border border-gray-200 rounded-lg text-sm" required />
updateEntry(idx, 'label', e.target.value)} placeholder="Bezeichnung (optional)" className="w-full px-3 py-2 border border-gray-200 rounded-lg text-sm" />
{entries.length > 1 && ( )}
))}
{/* Submit */}

Dokumente werden automatisch gegen Art. 28 DSGVO, Art. 32, Art. 44-49 und weitere Anforderungen geprueft.

) }