"""Obligation template generator — creates standard DSGVO obligations.""" _DSGVO_OBLIGATIONS = [ { "title": "Verzeichnis der Verarbeitungstätigkeiten führen", "regulation": "DSGVO", "article": "Art. 30", "description": "Das Verzeichnis muss alle Verarbeitungstätigkeiten mit personenbezogenen Daten dokumentieren.", "category": "documentation", "priority": "high", }, { "title": "Datenschutz-Folgenabschätzung durchführen", "regulation": "DSGVO", "article": "Art. 35", "description": "Für Verarbeitungen mit hohem Risiko muss eine DSFA vor Beginn der Verarbeitung durchgeführt werden.", "category": "risk_assessment", "priority": "high", }, { "title": "Technisch-organisatorische Maßnahmen implementieren", "regulation": "DSGVO", "article": "Art. 32", "description": "Angemessene TOMs zum Schutz personenbezogener Daten unter Berücksichtigung des Stands der Technik.", "category": "technical", "priority": "high", }, { "title": "Betroffenenrechte sicherstellen", "regulation": "DSGVO", "article": "Art. 12-22", "description": "Auskunft, Berichtigung, Löschung, Datenportabilität, Widerspruch — alle Rechte müssen binnen eines Monats erfüllt werden.", "category": "data_subject_rights", "priority": "high", }, { "title": "Datenschutzverletzungen melden", "regulation": "DSGVO", "article": "Art. 33-34", "description": "Meldung an die Aufsichtsbehörde binnen 72 Stunden; Benachrichtigung Betroffener bei hohem Risiko.", "category": "incident_response", "priority": "critical", }, { "title": "Auftragsverarbeitungsverträge abschließen", "regulation": "DSGVO", "article": "Art. 28", "description": "Schriftliche AV-Verträge mit allen Dienstleistern, die personenbezogene Daten verarbeiten.", "category": "vendor_management", "priority": "high", }, { "title": "Datenschutzbeauftragten benennen", "regulation": "DSGVO", "article": "Art. 37", "description": "Pflicht bei ≥20 Mitarbeitern in der automatisierten Verarbeitung oder bei Verarbeitung besonderer Kategorien.", "category": "governance", "priority": "medium", }, { "title": "Löschkonzept implementieren", "regulation": "DSGVO", "article": "Art. 17", "description": "Recht auf Löschung — systematisches Löschkonzept mit definierten Fristen pro Datenkategorie.", "category": "data_lifecycle", "priority": "high", }, ] _AI_ACT_OBLIGATIONS = [ { "title": "KI-System-Register führen", "regulation": "EU AI Act", "article": "Art. 49", "description": "Alle KI-Systeme müssen in der EU-Datenbank registriert werden (Hochrisiko).", "category": "documentation", "priority": "high", }, { "title": "KI-Risikomanagement einrichten", "regulation": "EU AI Act", "article": "Art. 9", "description": "Risikomanagementsystem für den gesamten Lebenszyklus von Hochrisiko-KI-Systemen.", "category": "risk_assessment", "priority": "critical", }, { "title": "KI-Transparenzpflichten erfüllen", "regulation": "EU AI Act", "article": "Art. 52", "description": "Nutzer müssen über die Interaktion mit KI-Systemen informiert werden.", "category": "transparency", "priority": "high", }, ] _NIS2_OBLIGATIONS = [ { "title": "Cybersicherheits-Risikomanagement", "regulation": "NIS2", "article": "Art. 21", "description": "Angemessene und verhältnismäßige technische, betriebliche und organisatorische Maßnahmen.", "category": "cybersecurity", "priority": "critical", }, { "title": "Meldepflichten NIS2", "regulation": "NIS2", "article": "Art. 23", "description": "Frühwarnung binnen 24h, Vorfallmeldung binnen 72h, Abschlussbericht binnen 1 Monat.", "category": "incident_response", "priority": "critical", }, ] def generate_obligation_drafts(ctx: dict) -> list[dict]: """Generate obligation drafts based on regulatory flags. Args: ctx: Flat dict from company-profile/template-context Returns: List of obligation dicts ready for creation """ obligations = list(_DSGVO_OBLIGATIONS) if ctx.get("subject_to_ai_act") or ctx.get("has_ai_systems"): obligations.extend(_AI_ACT_OBLIGATIONS) if ctx.get("subject_to_nis2"): obligations.extend(_NIS2_OBLIGATIONS) # Enrich with company context for i, o in enumerate(obligations, 1): o["obligation_id"] = f"OBL-AUTO-{i:03d}" o["status"] = "open" o["responsible"] = ctx.get("dpo_name", "") o["review_cycle_months"] = ctx.get("review_cycle_months", 12) return obligations