From e549058c855ed0a363e1a9ff42ab9c53b0d5180b Mon Sep 17 00:00:00 2001 From: Denis Lugowski Date: Thu, 22 Jan 2026 16:37:39 +0100 Subject: [PATCH] feat: Add Eingabeseite 6 (Datenschutz) --- .../seed/initial_application_form.yaml | 340 +++++++ .../initial_application_form_template.yaml | 864 ++++++++++++++++++ .../components/formelements/TheCheckbox.vue | 23 +- .../composables/useFormElementVisibility.ts | 38 + 4 files changed, 1254 insertions(+), 11 deletions(-) diff --git a/legalconsenthub-backend/src/main/resources/seed/initial_application_form.yaml b/legalconsenthub-backend/src/main/resources/seed/initial_application_form.yaml index 478f2ef..061658f 100644 --- a/legalconsenthub-backend/src/main/resources/seed/initial_application_form.yaml +++ b/legalconsenthub-backend/src/main/resources/seed/initial_application_form.yaml @@ -51,6 +51,10 @@ formElementSections: sectionSpawnConditionType: SHOW sectionSpawnExpectedValue: Einführung sectionSpawnOperator: EQUALS + - templateReference: datenschutz_template + sectionSpawnConditionType: SHOW + sectionSpawnExpectedValue: Einführung + sectionSpawnOperator: EQUALS # Einführung: Allgemeine Informationen - title: Allgemeine Informationen @@ -1151,3 +1155,339 @@ formElementSections: label: Bemerkungen processingPurpose: SYSTEM_OPERATION employeeDataCategory: NON_CRITICAL + +# Eingabeseite 6: Datenschutz (Spawned) +- title: Datenschutz + shortTitle: Datenschutz + description: Datenschutzrechtliche Angaben zur Datenverarbeitung + spawnedFromElementReference: art_der_massnahme + formElementSubSections: + + # Datenschutz-Übersicht (nur Anzeige) + - title: Datenschutz-Übersicht (nur Anzeige) + formElements: + - reference: datenschutz_uebersicht_tabelle + title: Datenschutz-Übersicht + description: Übersicht der Verarbeitungsvorgänge mit Datenschutz-relevanten Informationen (automatisch aus vorherigen Seiten befüllt) + type: TABLE + tableRowPreset: + sourceTableReference: umfassende_datenverarbeitung_tabelle + columnMappings: + - sourceColumnIndex: 0 + targetColumnIndex: 0 + - sourceColumnIndex: 1 + targetColumnIndex: 1 + - sourceColumnIndex: 11 + targetColumnIndex: 2 + - sourceColumnIndex: 4 + targetColumnIndex: 3 + canAddRows: false + options: + # Column 0: VV-ID (auto-populated from umfassende_datenverarbeitung_tabelle) + - value: '["V001", "V002", "V003", "V004", "V005"]' + label: VV-ID + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + columnConfig: + sourceTableReference: umfassende_datenverarbeitung_tabelle + sourceColumnIndex: 0 + isReadOnly: true + # Column 1: Bezeichnung (auto-populated) + - value: '["Personalstammdatenpflege", "Zeiterfassung", "Gehaltsabrechnung", "Leistungsbeurteilung", "Produktionsauswertung"]' + label: Bezeichnung + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + columnConfig: + sourceTableReference: umfassende_datenverarbeitung_tabelle + sourceColumnIndex: 1 + isReadOnly: true + # Column 2: Kontrolle? (auto-populated from column 11) + - value: '["false", "true", "false", "true", "true"]' + label: Kontrolle? + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + columnConfig: + sourceTableReference: umfassende_datenverarbeitung_tabelle + sourceColumnIndex: 11 + isReadOnly: true + # Column 3: Datenumfang (auto-populated from column 4) + - value: '["Stammdaten", "Arbeitszeitdaten", "Gehaltsdaten", "Leistungsdaten", "Produktionsdaten"]' + label: Datenumfang (S3) + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + columnConfig: + sourceTableReference: umfassende_datenverarbeitung_tabelle + sourceColumnIndex: 4 + isReadOnly: true + # Column 4: Schnittstellen Count + - value: '["1", "1", "1", "1", "1"]' + label: Schnittstellen (S5) + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + # Column 5: Verbundene IT-Systeme + - value: '["SAP Analytics Cloud", "SAP HR Controlling", "ELSTER", "SAP HR Management Reporting", "SAP Quality Management"]' + label: Verbundene IT-Systeme (Schnittstellen) + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + # Column 6: Retention + - value: '["Ja", "Ja", "Ja", "Ja", "Ja"]' + label: Retention (S4) + processingPurpose: DATA_ANALYSIS + employeeDataCategory: REVIEW_REQUIRED + + # 1. Auftragsdatenverarbeitung / Gemeinsame Verantwortlichkeit / Dritter + - title: Auftragsdatenverarbeitung und Verantwortlichkeit + formElements: + - reference: datenschutz_verantwortlichkeit_art + title: Liegt eine Auftragsdatenverarbeitung nach Art. 28 DSGVO oder eine gemeinsame Verantwortlichkeit im Sinne von Art. 26 DSGVO vor? + description: '' + type: CHECKBOX + options: + - value: 'true' + label: Auftragsdatenverarbeitung + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: 'true' + label: Gemeinsame Verantwortlichkeit + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: 'false' + label: Dritter als eigenständiger Verantwortlicher + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: 'false' + label: Nein + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + + # 1a. Auftragsdatenverarbeitung Table + - title: Auftragsdatenverarbeitung + formElements: + - reference: datenschutz_adv_tabelle + title: Auftragsdatenverarbeitung + description: Angaben zu Auftragsdatenverarbeitern + type: TABLE + visibilityConditions: + - formElementConditionType: SHOW + sourceFormElementReference: datenschutz_verantwortlichkeit_art + formElementExpectedValue: Auftragsdatenverarbeitung + formElementOperator: EQUALS + - formElementConditionType: SHOW + sourceFormElementReference: luv_beabsichtigt + formElementExpectedValue: Ja + formElementOperator: EQUALS + options: + - value: '["SAP SE (Cloud Services)", "Amazon Web Services EMEA SARL"]' + label: Auftragsdatenverarbeiter + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '["V001", "V005"]' + label: Verarbeitungsvorgang-ID + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + columnConfig: + sourceTableReference: umfassende_datenverarbeitung_tabelle + sourceColumnIndex: 0 + - value: '["Hosting", "Hosting"]' + label: Art der Einbindung + processingPurpose: DATA_ANALYSIS + employeeDataCategory: REVIEW_REQUIRED + - value: '["IF001", "IF005"]' + label: Ggf. Schnittstellen + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + columnConfig: + sourceTableReference: schnittstellen_umfassend_tabelle + sourceColumnIndex: 0 + - value: '["Stammdaten", "Produktionsdaten"]' + label: Betroffene Datenkategorien + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '["Name, Adresse, Personalnummer, Bankverbindung", "Stückzahlen, Fehlerquoten, Maschinenzeiten"]' + label: Betroffene Arbeitnehmerdaten + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '["JA", "JA"]' + label: Auftragsdatenverarbeitungsvertrag vorhanden? + processingPurpose: DATA_ANALYSIS + employeeDataCategory: REVIEW_REQUIRED + - value: '["JA", "NEIN"]' + label: Subprozessoren vorhanden? + processingPurpose: DATA_ANALYSIS + employeeDataCategory: REVIEW_REQUIRED + - value: '["Europäische Union", "Europäische Union"]' + label: Hosting / Region + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '["SAP Cloud Platform Deutschland (Frankfurt)", "AWS eu-central-1 (Frankfurt)"]' + label: Bemerkung + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + + # 1b. Gemeinsame Verantwortlichkeit Table + - title: Gemeinsame Verantwortlichkeit + formElements: + - reference: datenschutz_gemeinsam_tabelle + title: Gemeinsame Verantwortlichkeit + description: Angaben zur gemeinsamen Verantwortlichkeit + type: TABLE + visibilityConditions: + - formElementConditionType: SHOW + sourceFormElementReference: datenschutz_verantwortlichkeit_art + formElementExpectedValue: Gemeinsame Verantwortlichkeit + formElementOperator: EQUALS + - formElementConditionType: SHOW + sourceFormElementReference: luv_beabsichtigt + formElementExpectedValue: Ja + formElementOperator: EQUALS + options: + - value: '["Betriebsrat", "Konzern-IT"]' + label: Gemeinsame Verantwortlichkeit mit + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '["V002", "V005"]' + label: Verarbeitungsvorgang-ID + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + columnConfig: + sourceTableReference: umfassende_datenverarbeitung_tabelle + sourceColumnIndex: 0 + - value: '["IF002", "IF005"]' + label: Ggf. Schnittstellen + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + columnConfig: + sourceTableReference: schnittstellen_umfassend_tabelle + sourceColumnIndex: 0 + - value: '["Arbeitszeitdaten", "Produktionsdaten"]' + label: Betroffene Datenkategorien + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '["An-/Abmeldezeiten, Pausenzeiten, Überstunden", "Stückzahlen, Fehlerquoten, Maschinenzeiten"]' + label: Betroffene Arbeitnehmerdaten + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '["Zugriff auf Zeiterfassungsdaten für Arbeitszeitüberwachung", "Zugriff auf Produktionsdaten für Kapazitätsplanung"]' + label: Art der Einbindung + processingPurpose: DATA_ANALYSIS + employeeDataCategory: REVIEW_REQUIRED + - value: '["JA", "JA"]' + label: Vereinbarung nach Art. 26 Abs. 1 S. 2 DSGVO vorhanden? + processingPurpose: DATA_ANALYSIS + employeeDataCategory: REVIEW_REQUIRED + - value: '["Datenschutz, Arbeitszeitrecht", "Betriebliche Mitbestimmung"]' + label: Wesentliche Inhalte + processingPurpose: DATA_ANALYSIS + employeeDataCategory: REVIEW_REQUIRED + - value: '["Datenschutzvereinbarung mit Betriebsrat gemäß § 75 Abs. 2 BetrVG", "Konzern-Datenschutzvereinbarung"]' + label: Bemerkung + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + + # 1c. Aufteilung der Verantwortlichkeiten + - title: Aufteilung der Verantwortlichkeiten + formElements: + - reference: datenschutz_aufteilung_tabelle + title: Aufteilung der Verantwortlichkeiten + description: Aufteilung der Verantwortlichkeiten + type: TABLE + options: + - value: '["Datenerhebung", "Datenverarbeitung", "Datenlöschung", "Betroffenenrechte", "Incident Response"]' + label: Pflichtbereich + processingPurpose: DATA_ANALYSIS + employeeDataCategory: REVIEW_REQUIRED + - value: '["Unternehmen", "Gemeinsam", "Unternehmen", "Unternehmen", "Gemeinsam"]' + label: Verantwortlich (Unternehmen / Partner / Gemeinsam) + processingPurpose: DATA_ANALYSIS + employeeDataCategory: REVIEW_REQUIRED + - value: '["Erfassung durch Mitarbeiter oder automatisiert", "Beide Parteien können Daten verarbeiten im Rahmen ihrer Zuständigkeit", "Automatisierte Löschung durch Unternehmen gemäß Löschkonzept", "Zentrale Stelle beim Unternehmen", "Koordinierte Meldung an Aufsichtsbehörde"]' + label: Beschreibung + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + + # 2. Datenschutz-Folgenabschätzung (DSFA) + - title: Datenschutz-Folgenabschätzung + formElements: + - reference: datenschutz_dsfa_tabelle + title: Ist eine Datenschutz-Folgenabschätzung erforderlich? + description: Angaben zur DSFA + type: TABLE + tableRowPreset: + sourceTableReference: umfassende_datenverarbeitung_tabelle + columnMappings: + - sourceColumnIndex: 0 + targetColumnIndex: 0 + canAddRows: false + options: + - value: '["V001", "V002", "V003", "V004", "V005"]' + label: Verarbeitungsvorgang-ID + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + columnConfig: + sourceTableReference: umfassende_datenverarbeitung_tabelle + sourceColumnIndex: 0 + isReadOnly: true + - value: '["NEIN", "JA", "NEIN", "JA", "JA"]' + label: Kontrolle beabsichtigt? (Auto) + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + columnConfig: + isReadOnly: true + - value: '["NEIN", "JA", "NEIN", "JA", "JA"]' + label: DSFA erforderlich? + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '["N/A", "JA", "N/A", "JA", "JA"]' + label: DSFA durchgeführt? + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '["N/A", "NEIN", "N/A", "NEIN", "NEIN"]' + label: Ergebnis Hohes Risiko verbleibt? + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '["N/A", "NEIN", "N/A", "NEIN", "NEIN"]' + label: Konsultation erforderlich und erfolgt? + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '["Keine Kontrolle, keine DSFA erforderlich", "DSFA durchgeführt, Risiken minimiert durch TOMs", "Nur Finanzdaten, keine Kontrolle", "DSFA durchgeführt, 4-Augen-Prinzip implementiert", "DSFA durchgeführt, nur Team-Level Aggregation"]' + label: Bemerkungen + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + + # 3. Drittstaatenübermittlung + - title: Drittstaatenübermittlung + formElements: + - reference: datenschutz_drittstaaten + title: Ist eine Übermittlung von Arbeitnehmerdaten an Drittstaaten außerhalb der Europäischen Union oder des Europäischen Wirtschaftsraumes geplant? + description: '' + type: RADIOBUTTON + options: + - value: '' + label: Ja + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: 'true' + label: Nein + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + + # 4. Technische und organisatorische Maßnahmen (TOMs) + - title: Technische und organisatorische Maßnahmen + formElements: + - reference: datenschutz_toms_tabelle + title: Welche technischen und organisatorischen Maßnahmen werden vom Unternehmen und ggf. dem Auftragsverarbeiter / gemeinsamen Verantwortlichen zum Schutz von Arbeitnehmerdaten ergriffen? + description: TOMs zum Schutz personenbezogener Daten + type: TABLE + options: + - value: '["Zugriffskontrolle (RBAC)", "Protokollierung/Audit", "Transportverschlüsselung", "Verschlüsselung at Rest", "Berechtigungsreview", "Incident-Handling", "Backup/Recovery", "Löschung/Retention technisch"]' + label: TOM-Baustein + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + - value: '["Ja", "Ja", "Ja", "Ja", "Ja", "Ja", "Ja", "Ja"]' + label: Umgesetzt? + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: REVIEW_REQUIRED + - value: '["SAP Rollenkonzept mit feingranulierten Berechtigungen (siehe Seite 2)", "SAP Security Audit Log (SM20), SIEM-Integration", "TLS 1.3 für alle externen Verbindungen, SAP Secure Network Communications (SNC)", "SAP HANA Native Encryption, Datenbank-Verschlüsselung mit AES-256", "Halbjährliches Berechtigungsreview durch HRBP und IT Security", "Incident Response Plan gemäß ISO 27001, 24/7 SOC", "Tägliche Backups, 30 Tage Aufbewahrung, Disaster Recovery-Test quartalsweise", "Verweis Seite 4 - Automatisierte Löschprozesse gemäß Löschkonzept"]' + label: Kurzbeschreibung / Referenz + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL diff --git a/legalconsenthub-backend/src/main/resources/seed/initial_application_form_template.yaml b/legalconsenthub-backend/src/main/resources/seed/initial_application_form_template.yaml index 9f169f0..562bc04 100644 --- a/legalconsenthub-backend/src/main/resources/seed/initial_application_form_template.yaml +++ b/legalconsenthub-backend/src/main/resources/seed/initial_application_form_template.yaml @@ -51,6 +51,10 @@ formElementSections: sectionSpawnConditionType: SHOW sectionSpawnExpectedValue: Einführung sectionSpawnOperator: EQUALS + - templateReference: datenschutz_template + sectionSpawnConditionType: SHOW + sectionSpawnExpectedValue: Einführung + sectionSpawnOperator: EQUALS # Einführung: Allgemeine Informationen - title: Allgemeine Informationen @@ -2836,3 +2840,863 @@ formElementSections: label: Rechtsgrundlage processingPurpose: DATA_ANALYSIS employeeDataCategory: SENSITIVE + +# Eingabeseite 6: Datenschutz (comprehensive template) +- title: Datenschutz + shortTitle: Datenschutz + description: Datenschutzrechtliche Angaben zur Datenverarbeitung + isTemplate: true + templateReference: datenschutz_template + titleTemplate: Datenschutz + formElementSubSections: + + # Datenschutz-Übersicht (nur Anzeige) - Einfache Darstellung + - title: Datenschutz-Übersicht (nur Anzeige) + formElements: + - reference: datenschutz_uebersicht_einfach_tabelle + title: Datenschutz-Übersicht + description: Übersicht der Verarbeitungsvorgänge mit Datenschutz-relevanten Informationen (automatisch aus vorherigen Seiten befüllt) + type: TABLE + tableRowPreset: + sourceTableReference: einfache_datenverarbeitung_tabelle + columnMappings: + - sourceColumnIndex: 0 + targetColumnIndex: 0 + - sourceColumnIndex: 1 + targetColumnIndex: 1 + - sourceColumnIndex: 4 + targetColumnIndex: 3 + canAddRows: false + options: + # Column 0: VV-ID (from einfache_datenverarbeitung_tabelle, read-only) + - value: '[]' + label: VV-ID + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + columnConfig: + sourceTableReference: einfache_datenverarbeitung_tabelle + sourceColumnIndex: 0 + isReadOnly: true + # Column 1: Bezeichnung (from einfache_datenverarbeitung_tabelle, read-only) + - value: '[]' + label: Bezeichnung + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + columnConfig: + sourceTableReference: einfache_datenverarbeitung_tabelle + sourceColumnIndex: 1 + isReadOnly: true + # Column 2: Kontrolle? (always "Nein" for simple case) + - value: '[]' + label: Kontrolle? + processingPurpose: DATA_ANALYSIS + employeeDataCategory: NON_CRITICAL + columnConfig: + isReadOnly: true + # Column 3: Datenumfang (from einfache_datenverarbeitung_tabelle, read-only) + - value: '[]' + label: Datenumfang (S3) + processingPurpose: DATA_ANALYSIS + employeeDataCategory: REVIEW_REQUIRED + columnConfig: + sourceTableReference: einfache_datenverarbeitung_tabelle + sourceColumnIndex: 4 + isReadOnly: true + # Column 4: Schnittstellen Count (manual entry showing count from S5) + - value: '[]' + label: Schnittstellen (S5) + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + # Column 5: Verbundene IT-Systeme (manual entry based on interfaces) + - value: '[]' + label: Verbundene IT-Systeme (Schnittstellen) + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + # Column 6: Retention (manual entry - Ja/Nein from S4) + - value: '[]' + label: Retention (S4) + processingPurpose: DATA_ANALYSIS + employeeDataCategory: REVIEW_REQUIRED + + # Datenschutz-Übersicht (nur Anzeige) - Umfassende Darstellung + - title: Datenschutz-Übersicht (nur Anzeige) + formElements: + - reference: datenschutz_uebersicht_tabelle + title: Datenschutz-Übersicht + description: Übersicht der Verarbeitungsvorgänge mit Datenschutz-relevanten Informationen (automatisch aus vorherigen Seiten befüllt) + type: TABLE + tableRowPreset: + sourceTableReference: umfassende_datenverarbeitung_tabelle + columnMappings: + - sourceColumnIndex: 0 + targetColumnIndex: 0 + - sourceColumnIndex: 1 + targetColumnIndex: 1 + - sourceColumnIndex: 11 + targetColumnIndex: 2 + - sourceColumnIndex: 4 + targetColumnIndex: 3 + canAddRows: false + visibilityConditions: + - formElementConditionType: SHOW + sourceFormElementReference: personenbezogene_daten_verarbeitet + formElementExpectedValue: Ja + formElementOperator: EQUALS + - formElementConditionType: SHOW + sourceFormElementReference: luv_beabsichtigt + formElementExpectedValue: Ja + formElementOperator: EQUALS + options: + # Column 0: VV-ID (from umfassende_datenverarbeitung_tabelle, read-only) + - value: '[]' + label: VV-ID + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + columnConfig: + sourceTableReference: umfassende_datenverarbeitung_tabelle + sourceColumnIndex: 0 + isReadOnly: true + # Column 1: Bezeichnung (from umfassende_datenverarbeitung_tabelle, read-only) + - value: '[]' + label: Bezeichnung + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + columnConfig: + sourceTableReference: umfassende_datenverarbeitung_tabelle + sourceColumnIndex: 1 + isReadOnly: true + # Column 2: Kontrolle? (from umfassende_datenverarbeitung_tabelle column 11, read-only) + - value: '[]' + label: Kontrolle? + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + columnConfig: + sourceTableReference: umfassende_datenverarbeitung_tabelle + sourceColumnIndex: 11 + isReadOnly: true + # Column 3: Datenumfang (from umfassende_datenverarbeitung_tabelle, read-only) + - value: '[]' + label: Datenumfang (S3) + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + columnConfig: + sourceTableReference: umfassende_datenverarbeitung_tabelle + sourceColumnIndex: 4 + isReadOnly: true + # Column 4: Schnittstellen Count (manual entry showing count from S5) + - value: '[]' + label: Schnittstellen (S5) + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + # Column 5: Verbundene IT-Systeme (manual entry based on interfaces) + - value: '[]' + label: Verbundene IT-Systeme (Schnittstellen) + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + # Column 6: Retention (manual entry - Ja/Nein from S4) + - value: '[]' + label: Retention (S4) + processingPurpose: DATA_ANALYSIS + employeeDataCategory: REVIEW_REQUIRED + + # 1. Auftragsdatenverarbeitung / Gemeinsame Verantwortlichkeit / Dritter + - title: Auftragsdatenverarbeitung und Verantwortlichkeit + formElements: + - reference: datenschutz_verantwortlichkeit_art + title: Liegt eine Auftragsdatenverarbeitung nach Art. 28 DSGVO oder eine gemeinsame Verantwortlichkeit im Sinne von Art. 26 DSGVO vor? + description: '' + type: CHECKBOX + visibilityConditions: + - formElementConditionType: SHOW + sourceFormElementReference: personenbezogene_daten_verarbeitet + formElementExpectedValue: Ja + formElementOperator: EQUALS + options: + - value: 'false' + label: Auftragsdatenverarbeitung + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: 'false' + label: Gemeinsame Verantwortlichkeit + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: 'false' + label: Dritter als eigenständiger Verantwortlicher + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: 'false' + label: Nein + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + + # 1a. Auftragsdatenverarbeitung Table (Einfache Darstellung) + - title: Auftragsdatenverarbeitung + formElements: + - reference: datenschutz_adv_einfach_tabelle + title: Auftragsdatenverarbeitung + description: Angaben zu Auftragsdatenverarbeitern + type: TABLE + visibilityConditions: + - formElementConditionType: SHOW + sourceFormElementReference: datenschutz_verantwortlichkeit_art + formElementExpectedValue: Auftragsdatenverarbeitung + formElementOperator: EQUALS + - formElementConditionType: SHOW + sourceFormElementReference: luv_beabsichtigt + formElementExpectedValue: Nein + formElementOperator: EQUALS + options: + - value: '[]' + label: Auftragsdatenverarbeiter + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '[]' + label: Verarbeitungsvorgang-ID + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + columnConfig: + sourceTableReference: einfache_datenverarbeitung_tabelle + sourceColumnIndex: 0 + - value: '[]' + label: Art der Einbindung + processingPurpose: DATA_ANALYSIS + employeeDataCategory: REVIEW_REQUIRED + - value: '[]' + label: Ggf. Schnittstellen + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + columnConfig: + sourceTableReference: schnittstellen_einfach_tabelle + sourceColumnIndex: 0 + - value: '[]' + label: Betroffene Datenkategorien + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '[]' + label: Betroffene Arbeitnehmerdaten + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '[]' + label: Auftragsdatenverarbeitungsvertrag vorhanden? + processingPurpose: DATA_ANALYSIS + employeeDataCategory: REVIEW_REQUIRED + - value: '[]' + label: Subprozessoren vorhanden? + processingPurpose: DATA_ANALYSIS + employeeDataCategory: REVIEW_REQUIRED + - value: '[]' + label: Hosting / Region + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '[]' + label: Bemerkung + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + + # 1a. Auftragsdatenverarbeitung Table (Umfassende Darstellung) + - title: Auftragsdatenverarbeitung + formElements: + - reference: datenschutz_adv_tabelle + title: Auftragsdatenverarbeitung + description: Angaben zu Auftragsdatenverarbeitern + type: TABLE + visibilityConditions: + - formElementConditionType: SHOW + sourceFormElementReference: datenschutz_verantwortlichkeit_art + formElementExpectedValue: Auftragsdatenverarbeitung + formElementOperator: EQUALS + - formElementConditionType: SHOW + sourceFormElementReference: luv_beabsichtigt + formElementExpectedValue: Ja + formElementOperator: EQUALS + options: + - value: '[]' + label: Auftragsdatenverarbeiter + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '[]' + label: Verarbeitungsvorgang-ID + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + columnConfig: + sourceTableReference: umfassende_datenverarbeitung_tabelle + sourceColumnIndex: 0 + - value: '[]' + label: Art der Einbindung + processingPurpose: DATA_ANALYSIS + employeeDataCategory: REVIEW_REQUIRED + - value: '[]' + label: Ggf. Schnittstellen + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + columnConfig: + sourceTableReference: schnittstellen_umfassend_tabelle + sourceColumnIndex: 0 + - value: '[]' + label: Betroffene Datenkategorien + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '[]' + label: Betroffene Arbeitnehmerdaten + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '[]' + label: Auftragsdatenverarbeitungsvertrag vorhanden? + processingPurpose: DATA_ANALYSIS + employeeDataCategory: REVIEW_REQUIRED + - value: '[]' + label: Subprozessoren vorhanden? + processingPurpose: DATA_ANALYSIS + employeeDataCategory: REVIEW_REQUIRED + - value: '[]' + label: Hosting / Region + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '[]' + label: Bemerkung + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + + # 1b. Gemeinsame Verantwortlichkeit Table (Einfache Darstellung) + - title: Gemeinsame Verantwortlichkeit + formElements: + - reference: datenschutz_gemeinsam_einfach_tabelle + title: Gemeinsame Verantwortlichkeit + description: Angaben zur gemeinsamen Verantwortlichkeit + type: TABLE + visibilityConditions: + - formElementConditionType: SHOW + sourceFormElementReference: datenschutz_verantwortlichkeit_art + formElementExpectedValue: Gemeinsame Verantwortlichkeit + formElementOperator: EQUALS + - formElementConditionType: SHOW + sourceFormElementReference: luv_beabsichtigt + formElementExpectedValue: Nein + formElementOperator: EQUALS + options: + - value: '[]' + label: Gemeinsame Verantwortlichkeit mit + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '[]' + label: Verarbeitungsvorgang-ID + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + columnConfig: + sourceTableReference: einfache_datenverarbeitung_tabelle + sourceColumnIndex: 0 + - value: '[]' + label: Art der Einbindung + processingPurpose: DATA_ANALYSIS + employeeDataCategory: REVIEW_REQUIRED + - value: '[]' + label: Ggf. Schnittstellen + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + columnConfig: + sourceTableReference: schnittstellen_einfach_tabelle + sourceColumnIndex: 0 + - value: '[]' + label: Betroffene Datenkategorien + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '[]' + label: Betroffene Arbeitnehmerdaten + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '[]' + label: Vereinbarung vorhanden? + processingPurpose: DATA_ANALYSIS + employeeDataCategory: REVIEW_REQUIRED + - value: '[]' + label: Hosting / Region + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '[]' + label: Bemerkung + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + + # 1b. Gemeinsame Verantwortlichkeit Table (Umfassende Darstellung) + - title: Gemeinsame Verantwortlichkeit + formElements: + - reference: datenschutz_gemeinsam_tabelle + title: Gemeinsame Verantwortlichkeit + description: Angaben zur gemeinsamen Verantwortlichkeit + type: TABLE + visibilityConditions: + - formElementConditionType: SHOW + sourceFormElementReference: datenschutz_verantwortlichkeit_art + formElementExpectedValue: Gemeinsame Verantwortlichkeit + formElementOperator: EQUALS + - formElementConditionType: SHOW + sourceFormElementReference: luv_beabsichtigt + formElementExpectedValue: Ja + formElementOperator: EQUALS + options: + - value: '[]' + label: Gemeinsame Verantwortlichkeit mit + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '[]' + label: Verarbeitungsvorgang-ID + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + columnConfig: + sourceTableReference: umfassende_datenverarbeitung_tabelle + sourceColumnIndex: 0 + - value: '[]' + label: Art der Einbindung + processingPurpose: DATA_ANALYSIS + employeeDataCategory: REVIEW_REQUIRED + - value: '[]' + label: Ggf. Schnittstellen + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + columnConfig: + sourceTableReference: schnittstellen_umfassend_tabelle + sourceColumnIndex: 0 + - value: '[]' + label: Betroffene Datenkategorien + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '[]' + label: Betroffene Arbeitnehmerdaten + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '[]' + label: Vereinbarung vorhanden? + processingPurpose: DATA_ANALYSIS + employeeDataCategory: REVIEW_REQUIRED + - value: '[]' + label: Hosting / Region + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '[]' + label: Bemerkung + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + + # 1b-aa. Verpflichtungen bei gemeinsamer Verantwortlichkeit + - title: Verpflichtungen gemäß DSGVO + formElements: + - reference: datenschutz_gemeinsam_verpflichtungen_tabelle + title: Wer erfüllt welche Verpflichtungen gemäß der DSGVO? + description: Aufteilung der Verantwortlichkeiten + type: TABLE + visibilityConditions: + - formElementConditionType: SHOW + sourceFormElementReference: datenschutz_verantwortlichkeit_art + formElementExpectedValue: Gemeinsame Verantwortlichkeit + formElementOperator: EQUALS + options: + - value: '[]' + label: Pflichtbereich + processingPurpose: DATA_ANALYSIS + employeeDataCategory: REVIEW_REQUIRED + - value: '[]' + label: Unternehmen + processingPurpose: DATA_ANALYSIS + employeeDataCategory: NON_CRITICAL + columnConfig: + isCheckbox: true + - value: '[]' + label: Gemeinsamer Verantwortlicher + processingPurpose: DATA_ANALYSIS + employeeDataCategory: NON_CRITICAL + columnConfig: + isCheckbox: true + - value: '[]' + label: Gemeinsam + processingPurpose: DATA_ANALYSIS + employeeDataCategory: NON_CRITICAL + columnConfig: + isCheckbox: true + - value: '[]' + label: Kurze Prozessbeschreibung + processingPurpose: DATA_ANALYSIS + employeeDataCategory: REVIEW_REQUIRED + - value: '[]' + label: Kontakt + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + + # 1c. Eigenständig Verantwortlicher Table (Einfache Darstellung) + - title: Eigenständig Verantwortlicher + formElements: + - reference: datenschutz_eigenstaendig_einfach_tabelle + title: Eigenständig Verantwortlicher + description: Angaben zu eigenständigen Verantwortlichen (Dritten) + type: TABLE + visibilityConditions: + - formElementConditionType: SHOW + sourceFormElementReference: datenschutz_verantwortlichkeit_art + formElementExpectedValue: Dritter als eigenständiger Verantwortlicher + formElementOperator: EQUALS + - formElementConditionType: SHOW + sourceFormElementReference: luv_beabsichtigt + formElementExpectedValue: Nein + formElementOperator: EQUALS + options: + - value: '[]' + label: Eigenständig Verantwortlicher + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '[]' + label: Empfängerart + processingPurpose: DATA_ANALYSIS + employeeDataCategory: REVIEW_REQUIRED + - value: '[]' + label: Verarbeitungsvorgang-ID + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + columnConfig: + sourceTableReference: einfache_datenverarbeitung_tabelle + sourceColumnIndex: 0 + - value: '[]' + label: Art der Einbindung + processingPurpose: DATA_ANALYSIS + employeeDataCategory: REVIEW_REQUIRED + - value: '[]' + label: Ggf. Schnittstellen + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + columnConfig: + sourceTableReference: schnittstellen_einfach_tabelle + sourceColumnIndex: 0 + - value: '[]' + label: Betroffene Datenkategorien + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '[]' + label: Betroffene Arbeitnehmerdaten + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '[]' + label: Zweck der Übermittlung? + processingPurpose: DATA_ANALYSIS + employeeDataCategory: REVIEW_REQUIRED + - value: '[]' + label: Rechtliche Grundlage der Übermittlung? + processingPurpose: DATA_ANALYSIS + employeeDataCategory: REVIEW_REQUIRED + - value: '[]' + label: Vereinbarung vorhanden? + processingPurpose: DATA_ANALYSIS + employeeDataCategory: REVIEW_REQUIRED + - value: '[]' + label: Bemerkung + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + + # 1c. Eigenständig Verantwortlicher Table (Umfassende Darstellung) + - title: Eigenständig Verantwortlicher + formElements: + - reference: datenschutz_eigenstaendig_tabelle + title: Eigenständig Verantwortlicher + description: Angaben zu eigenständigen Verantwortlichen (Dritten) + type: TABLE + visibilityConditions: + - formElementConditionType: SHOW + sourceFormElementReference: datenschutz_verantwortlichkeit_art + formElementExpectedValue: Dritter als eigenständiger Verantwortlicher + formElementOperator: EQUALS + - formElementConditionType: SHOW + sourceFormElementReference: luv_beabsichtigt + formElementExpectedValue: Ja + formElementOperator: EQUALS + options: + - value: '[]' + label: Eigenständig Verantwortlicher + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '[]' + label: Empfängerart + processingPurpose: DATA_ANALYSIS + employeeDataCategory: REVIEW_REQUIRED + - value: '[]' + label: Verarbeitungsvorgang-ID + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + columnConfig: + sourceTableReference: umfassende_datenverarbeitung_tabelle + sourceColumnIndex: 0 + - value: '[]' + label: Art der Einbindung + processingPurpose: DATA_ANALYSIS + employeeDataCategory: REVIEW_REQUIRED + - value: '[]' + label: Ggf. Schnittstellen + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + columnConfig: + sourceTableReference: schnittstellen_umfassend_tabelle + sourceColumnIndex: 0 + - value: '[]' + label: Betroffene Datenkategorien + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '[]' + label: Betroffene Arbeitnehmerdaten + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '[]' + label: Zweck der Übermittlung? + processingPurpose: DATA_ANALYSIS + employeeDataCategory: REVIEW_REQUIRED + - value: '[]' + label: Rechtliche Grundlage der Übermittlung? + processingPurpose: DATA_ANALYSIS + employeeDataCategory: REVIEW_REQUIRED + - value: '[]' + label: Vereinbarung vorhanden? + processingPurpose: DATA_ANALYSIS + employeeDataCategory: REVIEW_REQUIRED + - value: '[]' + label: Bemerkung + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + + # 2. Datenschutz-Folgenabschätzung (DSFA) - Einfache Darstellung + - title: Datenschutz-Folgenabschätzung + formElements: + - reference: datenschutz_dsfa_einfach_tabelle + title: Ist eine Datenschutz-Folgenabschätzung erforderlich? + description: Angaben zur DSFA + type: TABLE + tableRowPreset: + sourceTableReference: einfache_datenverarbeitung_tabelle + columnMappings: + - sourceColumnIndex: 0 + targetColumnIndex: 0 + canAddRows: false + visibilityConditions: + - formElementConditionType: SHOW + sourceFormElementReference: personenbezogene_daten_verarbeitet + formElementExpectedValue: Ja + formElementOperator: EQUALS + - formElementConditionType: SHOW + sourceFormElementReference: luv_beabsichtigt + formElementExpectedValue: Nein + formElementOperator: EQUALS + options: + - value: '[]' + label: Verarbeitungsvorgang-ID + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + columnConfig: + sourceTableReference: einfache_datenverarbeitung_tabelle + sourceColumnIndex: 0 + isReadOnly: true + - value: '[]' + label: Kontrolle beabsichtigt? (Auto) + processingPurpose: DATA_ANALYSIS + employeeDataCategory: NON_CRITICAL + columnConfig: + isReadOnly: true + - value: '[]' + label: DSFA erforderlich? + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '[]' + label: DSFA durchgeführt? + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '[]' + label: Ergebnis Hohes Risiko verbleibt? + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '[]' + label: Konsultation erforderlich und erfolgt? + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '[]' + label: Bemerkungen + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + + # 2. Datenschutz-Folgenabschätzung (DSFA) - Umfassende Darstellung + - title: Datenschutz-Folgenabschätzung + formElements: + - reference: datenschutz_dsfa_tabelle + title: Ist eine Datenschutz-Folgenabschätzung erforderlich? + description: Angaben zur DSFA + type: TABLE + tableRowPreset: + sourceTableReference: umfassende_datenverarbeitung_tabelle + columnMappings: + - sourceColumnIndex: 0 + targetColumnIndex: 0 + canAddRows: false + visibilityConditions: + - formElementConditionType: SHOW + sourceFormElementReference: personenbezogene_daten_verarbeitet + formElementExpectedValue: Ja + formElementOperator: EQUALS + - formElementConditionType: SHOW + sourceFormElementReference: luv_beabsichtigt + formElementExpectedValue: Ja + formElementOperator: EQUALS + options: + - value: '[]' + label: Verarbeitungsvorgang-ID + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + columnConfig: + sourceTableReference: umfassende_datenverarbeitung_tabelle + sourceColumnIndex: 0 + isReadOnly: true + - value: '[]' + label: Kontrolle beabsichtigt? (Auto) + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + columnConfig: + isReadOnly: true + - value: '[]' + label: DSFA erforderlich? + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '[]' + label: DSFA durchgeführt? + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '[]' + label: Ergebnis Hohes Risiko verbleibt? + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '[]' + label: Konsultation erforderlich und erfolgt? + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '[]' + label: Bemerkungen + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + + # 3. Drittstaatenübermittlung + - title: Drittstaatenübermittlung + formElements: + - reference: datenschutz_drittstaaten + title: Ist eine Übermittlung von Arbeitnehmerdaten an Drittstaaten außerhalb der Europäischen Union oder des Europäischen Wirtschaftsraumes geplant? + description: '' + type: RADIOBUTTON + visibilityConditions: + - formElementConditionType: SHOW + sourceFormElementReference: personenbezogene_daten_verarbeitet + formElementExpectedValue: Ja + formElementOperator: EQUALS + options: + - value: Ja + label: Ja + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: Nein + label: Nein + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + + - title: Angaben zur Drittlandübermittlung (Einfache Darstellung) + formElements: + - reference: datenschutz_drittstaaten_einfach_tabelle + title: Angaben zur Drittlandübermittlung + description: Details zur Übermittlung in Drittstaaten + type: TABLE + visibilityConditions: + - formElementConditionType: SHOW + sourceFormElementReference: datenschutz_drittstaaten + formElementExpectedValue: Ja + formElementOperator: EQUALS + - formElementConditionType: SHOW + sourceFormElementReference: luv_beabsichtigt + formElementExpectedValue: Nein + formElementOperator: EQUALS + options: + - value: '[]' + label: Verarbeitungsvorgang-ID + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + columnConfig: + sourceTableReference: einfache_datenverarbeitung_tabelle + sourceColumnIndex: 0 + - value: '[]' + label: Länder / Empfänger + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '[]' + label: Rechtliche Grundlage + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '[]' + label: Zusätzliche Maßnahmen + processingPurpose: DATA_ANALYSIS + employeeDataCategory: REVIEW_REQUIRED + - value: '[]' + label: Bemerkung + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + + - title: Angaben zur Drittlandübermittlung (Umfassende Darstellung) + formElements: + - reference: datenschutz_drittstaaten_tabelle + title: Angaben zur Drittlandübermittlung + description: Details zur Übermittlung in Drittstaaten + type: TABLE + visibilityConditions: + - formElementConditionType: SHOW + sourceFormElementReference: datenschutz_drittstaaten + formElementExpectedValue: Ja + formElementOperator: EQUALS + - formElementConditionType: SHOW + sourceFormElementReference: luv_beabsichtigt + formElementExpectedValue: Ja + formElementOperator: EQUALS + options: + - value: '[]' + label: Verarbeitungsvorgang-ID + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + columnConfig: + sourceTableReference: umfassende_datenverarbeitung_tabelle + sourceColumnIndex: 0 + - value: '[]' + label: Länder / Empfänger + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '[]' + label: Rechtliche Grundlage + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '[]' + label: Zusätzliche Maßnahmen + processingPurpose: DATA_ANALYSIS + employeeDataCategory: REVIEW_REQUIRED + - value: '[]' + label: Bemerkung + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + + # 4. Technische und organisatorische Maßnahmen (TOMs) + - title: Technische und organisatorische Maßnahmen + formElements: + - reference: datenschutz_toms_tabelle + title: Welche technischen und organisatorischen Maßnahmen werden vom Unternehmen und ggf. dem Auftragsverarbeiter / gemeinsamen Verantwortlichen zum Schutz von Arbeitnehmerdaten ergriffen? + description: TOMs zum Schutz personenbezogener Daten + type: TABLE + visibilityConditions: + - formElementConditionType: SHOW + sourceFormElementReference: personenbezogene_daten_verarbeitet + formElementExpectedValue: Ja + formElementOperator: EQUALS + options: + - value: '[]' + label: TOM-Baustein + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + - value: '[]' + label: Umgesetzt? + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: REVIEW_REQUIRED + - value: '[]' + label: Kurzbeschreibung / Referenz + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL diff --git a/legalconsenthub/app/components/formelements/TheCheckbox.vue b/legalconsenthub/app/components/formelements/TheCheckbox.vue index ec45510..67bc3b4 100644 --- a/legalconsenthub/app/components/formelements/TheCheckbox.vue +++ b/legalconsenthub/app/components/formelements/TheCheckbox.vue @@ -1,5 +1,5 @@ diff --git a/legalconsenthub/app/composables/useFormElementVisibility.ts b/legalconsenthub/app/composables/useFormElementVisibility.ts index 6e01ed1..05c0099 100644 --- a/legalconsenthub/app/composables/useFormElementVisibility.ts +++ b/legalconsenthub/app/composables/useFormElementVisibility.ts @@ -57,6 +57,13 @@ export function useFormElementVisibility() { return false } + // Special handling for CHECKBOX with multiple options + if (sourceElement.type === FormElementType.Checkbox && sourceElement.options.length > 1) { + const operator = condition.formElementOperator || VCOperator.Equals + const conditionMet = evaluateCheckboxCondition(sourceElement, condition.formElementExpectedValue, operator) + return condition.formElementConditionType === VCType.Show ? conditionMet : !conditionMet + } + const sourceValue = getFormElementValue(sourceElement) const operator = condition.formElementOperator || VCOperator.Equals const conditionMet = evaluateCondition(sourceValue, condition.formElementExpectedValue, operator) @@ -75,6 +82,37 @@ export function useFormElementVisibility() { return selectedOption?.label || '' } + /** + * Evaluates visibility condition for CHECKBOX with multiple options. + * Checks if ANY of the selected checkboxes matches the expected value. + */ + function evaluateCheckboxCondition( + element: FormElementDto, + expectedValue: string, + operator: VisibilityConditionOperator + ): boolean { + const selectedLabels = element.options + .filter((option) => option.value === 'true') + .map((option) => option.label) + + switch (operator) { + case VCOperator.Equals: + // Check if any selected checkbox label matches the expected value + return selectedLabels.some((label) => label.toLowerCase() === expectedValue.toLowerCase()) + case VCOperator.NotEquals: + // Check if no selected checkbox label matches the expected value + return !selectedLabels.some((label) => label.toLowerCase() === expectedValue.toLowerCase()) + case VCOperator.IsEmpty: + // Check if no checkboxes are selected + return selectedLabels.length === 0 + case VCOperator.IsNotEmpty: + // Check if at least one checkbox is selected + return selectedLabels.length > 0 + default: + return false + } + } + function evaluateCondition( actualValue: string, expectedValue: string,