'use client' import React, { useState } from 'react' import { DSFA, DSFAStakeholderConsultation } from '@/lib/sdk/dsfa/types' interface StakeholderConsultationSectionProps { dsfa: DSFA onUpdate: (data: Record) => Promise isSubmitting: boolean } const STAKEHOLDER_TYPES = [ { value: 'data_subjects', label: 'Betroffene Personen', description: 'Direkt von der Verarbeitung betroffene Personen' }, { value: 'representatives', label: 'Vertreter der Betroffenen', description: 'Z.B. Verbraucherorganisationen, Patientenvertreter' }, { value: 'works_council', label: 'Betriebsrat / Personalrat', description: 'Bei Arbeitnehmer-Datenverarbeitung' }, { value: 'other', label: 'Sonstige Stakeholder', description: 'Andere relevante Interessengruppen' }, ] const CONSULTATION_METHODS = [ { value: 'survey', label: 'Umfrage', description: 'Schriftliche oder Online-Befragung' }, { value: 'interview', label: 'Interview', description: 'Persoenliche oder telefonische Gespraeche' }, { value: 'workshop', label: 'Workshop', description: 'Gemeinsame Erarbeitung in Gruppensitzung' }, { value: 'written', label: 'Schriftliche Stellungnahme', description: 'Formelle schriftliche Anfrage' }, { value: 'other', label: 'Andere Methode', description: 'Sonstige Konsultationsform' }, ] export function StakeholderConsultationSection({ dsfa, onUpdate, isSubmitting }: StakeholderConsultationSectionProps) { const [consultations, setConsultations] = useState( dsfa.stakeholder_consultations || [] ) const [notAppropriate, setNotAppropriate] = useState( dsfa.stakeholder_consultation_not_appropriate || false ) const [notAppropriateReason, setNotAppropriateReason] = useState( dsfa.stakeholder_consultation_not_appropriate_reason || '' ) const [showAddForm, setShowAddForm] = useState(false) // New consultation form state const [newConsultation, setNewConsultation] = useState>({ stakeholder_type: 'data_subjects', stakeholder_description: '', consultation_method: 'survey', consultation_date: '', summary: '', concerns_raised: [], addressed_in_dsfa: false, }) const [newConcern, setNewConcern] = useState('') const addConsultation = () => { if (!newConsultation.stakeholder_description || !newConsultation.summary) return const consultation: DSFAStakeholderConsultation = { id: crypto.randomUUID(), stakeholder_type: newConsultation.stakeholder_type as DSFAStakeholderConsultation['stakeholder_type'], stakeholder_description: newConsultation.stakeholder_description || '', consultation_method: newConsultation.consultation_method as DSFAStakeholderConsultation['consultation_method'], consultation_date: newConsultation.consultation_date || undefined, summary: newConsultation.summary || '', concerns_raised: newConsultation.concerns_raised || [], addressed_in_dsfa: newConsultation.addressed_in_dsfa || false, } setConsultations([...consultations, consultation]) setNewConsultation({ stakeholder_type: 'data_subjects', stakeholder_description: '', consultation_method: 'survey', consultation_date: '', summary: '', concerns_raised: [], addressed_in_dsfa: false, }) setShowAddForm(false) } const removeConsultation = (id: string) => { setConsultations(consultations.filter(c => c.id !== id)) } const addConcern = () => { if (newConcern.trim()) { setNewConsultation({ ...newConsultation, concerns_raised: [...(newConsultation.concerns_raised || []), newConcern.trim()], }) setNewConcern('') } } const removeConcern = (index: number) => { setNewConsultation({ ...newConsultation, concerns_raised: (newConsultation.concerns_raised || []).filter((_, i) => i !== index), }) } const handleSave = async () => { await onUpdate({ stakeholder_consultations: notAppropriate ? [] : consultations, stakeholder_consultation_not_appropriate: notAppropriate, stakeholder_consultation_not_appropriate_reason: notAppropriate ? notAppropriateReason : undefined, }) } return (
{/* Info Banner */}

Art. 35 Abs. 9 DSGVO

"Der Verantwortliche holt gegebenenfalls den Standpunkt der betroffenen Personen oder ihrer Vertreter zu der beabsichtigten Verarbeitung ein, ohne dass dadurch der Schutz gewerblicher oder oeffentlicher Interessen oder die Sicherheit der Verarbeitungsvorgaenge beeintraechtigt wird."

{/* Not Appropriate Option */}
{notAppropriate && (