/** * DSFA Draft Prompt - Datenschutz-Folgenabschaetzung (Art. 35 DSGVO) */ import type { DraftContext } from '../types' export interface DSFADraftInput { context: DraftContext processingDescription?: string instructions?: string } export function buildDSFADraftPrompt(input: DSFADraftInput): string { const { context, processingDescription, instructions } = input const level = context.decisions.level const depthItems = context.constraints.depthRequirements.detailItems const hardTriggers = context.decisions.hardTriggers return `## Aufgabe: DSFA entwerfen (Art. 35 DSGVO) ### Unternehmensprofil - Name: ${context.companyProfile.name} - Branche: ${context.companyProfile.industry} - Mitarbeiter: ${context.companyProfile.employeeCount} ### Compliance-Level: ${level} Tiefe: ${context.constraints.depthRequirements.depth} ### Hard Triggers (Gruende fuer DSFA-Pflicht): ${hardTriggers.length > 0 ? hardTriggers.map(t => `- ${t.id}: ${t.label} (${t.legalReference})`).join('\n') : '- Keine Hard Triggers (DSFA auf Wunsch)'} ### Erforderliche Inhalte: ${depthItems.map((item, i) => `${i + 1}. ${item}`).join('\n')} ${processingDescription ? `### Beschreibung der Verarbeitung: ${processingDescription}` : ''} ${instructions ? `### Zusaetzliche Anweisungen: ${instructions}` : ''} ### Antwort-Format Antworte als JSON: { "sections": [ { "id": "beschreibung", "title": "Systematische Beschreibung der Verarbeitung", "content": "...", "schemaField": "processingDescription" }, { "id": "notwendigkeit", "title": "Notwendigkeit und Verhaeltnismaessigkeit", "content": "...", "schemaField": "necessityAssessment" }, { "id": "risikobewertung", "title": "Bewertung der Risiken fuer die Rechte und Freiheiten", "content": "...", "schemaField": "riskAssessment" }, { "id": "massnahmen", "title": "Massnahmen zur Eindaemmung der Risiken", "content": "...", "schemaField": "mitigationMeasures" }, { "id": "stellungnahme_dsb", "title": "Stellungnahme des Datenschutzbeauftragten", "content": "...", "schemaField": "dpoOpinion" }, { "id": "standpunkt_betroffene", "title": "Standpunkt der betroffenen Personen", "content": "...", "schemaField": "dataSubjectView" }, { "id": "ergebnis", "title": "Ergebnis und Empfehlung", "content": "...", "schemaField": "conclusion" } ] } Halte die Tiefe exakt auf Level ${level}. Nutze WP248-Kriterien als Leitfaden fuer die Risikobewertung.` }