diff --git a/CLAUDE.md b/CLAUDE.md index 54babad..de1e6b1 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -133,13 +133,44 @@ pnpm run api:generate # Frontend --- +## Seed Data Maintenance + +The application automatically seeds initial data on first startup: + +### 1. Template Seeding +**Seeder:** `InitialApplicationFormTemplateSeeder` +**File:** `legalconsenthub-backend/src/main/resources/seed/initial_application_form_template.yaml` +**Condition:** Seeds if no templates exist (`isTemplate = true`) +**Purpose:** Comprehensive IT system approval workflow template + +**IMPORTANT:** Keep this file updated when form structure or validation rules change. + +### 2. Application Form Seeding +**Seeder:** `InitialApplicationFormSeeder` +**File:** `legalconsenthub-backend/src/main/resources/seed/initial_application_form.yaml` +**Condition:** Seeds if no forms exist for empty organizationId (`isTemplate = false`) +**Purpose:** Realistic SAP S/4HANA application form for development and UI testing +**organizationId:** Empty string (global form visible to all organizations) +**Content:** Pre-filled IT system introduction form based on the template structure with realistic SAP S/4HANA values + +**IMPORTANT:** Keep this file synchronized with template changes. When template structure changes, update the demo form accordingly. + +**Note:** +- Forms with empty/null organizationId act as "global" forms and are visible to all organizations +- This allows the demo form to appear regardless of the current organization context +- The demo form is derived from the template structure with values filled for realistic testing +- Demonstrates visibility conditions, section spawning, clonable elements, and GDPR compliance features + +--- + ## Key Files | File | Purpose | |------|---------| | `api/legalconsenthub.yml` | OpenAPI spec (source of truth) | | `legalconsenthub-backend/src/main/resources/templates/application_form_latex_template.tex` | PDF template | -| `legalconsenthub-backend/src/main/resources/seed/initial_application_form_template.yaml` | Initial form template | +| `legalconsenthub-backend/src/main/resources/seed/initial_application_form_template.yaml` | Initial form template (isTemplate=true) | +| `legalconsenthub-backend/src/main/resources/seed/initial_application_form.yaml` | SAP S/4HANA demo application form (global, filled with realistic values) | | `legalconsenthub-backend/src/main/resources/db/changelog/` | Liquibase migrations | | `.github/workflows/pipeline.yaml` | CI/CD workflow | @@ -151,7 +182,7 @@ pnpm run api:generate # Frontend 2. **Use mapper classes** for all DTO↔Entity conversions (never in services/controllers) 3. **No hardcoded UI strings** - Use i18n (`de.json`, `en.json`) 4. **API-first** - Modify OpenAPI spec, then regenerate clients -5. **Organization context** - Always consider `organizationId` for multi-tenancy +5. **Organization context** - Always consider `organizationId` for multi-tenancy. Forms with empty/null organizationId are "global" forms visible to all organizations 6. **Form structure is 3-level** - Section → SubSection → Element 7. **Roles managed in Keycloak** - Not in application database 8. **Nuxt UI 4** - For any UI-related questions, use the Nuxt UI MCP server to get current component docs and examples diff --git a/legalconsenthub-backend/src/main/kotlin/com/betriebsratkanzlei/legalconsenthub/application_form/ApplicationFormFormatService.kt b/legalconsenthub-backend/src/main/kotlin/com/betriebsratkanzlei/legalconsenthub/application_form/ApplicationFormFormatService.kt index 271cdaf..00ee1bd 100644 --- a/legalconsenthub-backend/src/main/kotlin/com/betriebsratkanzlei/legalconsenthub/application_form/ApplicationFormFormatService.kt +++ b/legalconsenthub-backend/src/main/kotlin/com/betriebsratkanzlei/legalconsenthub/application_form/ApplicationFormFormatService.kt @@ -178,27 +178,28 @@ class ApplicationFormFormatService( } } - val latexContent = buildString { - if (isWideTable) { - // Use smaller font and tighter column spacing for wide tables - appendLine("\\footnotesize") - appendLine("\\setlength{\\tabcolsep}{2pt}") + val latexContent = + buildString { + if (isWideTable) { + // Use smaller font and tighter column spacing for wide tables + appendLine("\\footnotesize") + appendLine("\\setlength{\\tabcolsep}{2pt}") + } + appendLine("\\begin{tabularx}{$tableWidth}{$columnSpec}") + appendLine("\\toprule") + appendLine("$headerRow \\\\") + appendLine("\\midrule") + dataRows.forEach { row: String -> + appendLine("$row \\\\") + } + appendLine("\\bottomrule") + appendLine("\\end{tabularx}") + if (isWideTable) { + // Reset to normal settings after the table + appendLine("\\normalsize") + appendLine("\\setlength{\\tabcolsep}{6pt}") + } } - appendLine("\\begin{tabularx}{$tableWidth}{$columnSpec}") - appendLine("\\toprule") - appendLine("$headerRow \\\\") - appendLine("\\midrule") - dataRows.forEach { row: String -> - appendLine("$row \\\\") - } - appendLine("\\bottomrule") - appendLine("\\end{tabularx}") - if (isWideTable) { - // Reset to normal settings after the table - appendLine("\\normalsize") - appendLine("\\setlength{\\tabcolsep}{6pt}") - } - } return latexContent to isWideTable } diff --git a/legalconsenthub-backend/src/main/kotlin/com/betriebsratkanzlei/legalconsenthub/application_form/ApplicationFormRepository.kt b/legalconsenthub-backend/src/main/kotlin/com/betriebsratkanzlei/legalconsenthub/application_form/ApplicationFormRepository.kt index f74c05b..8032291 100644 --- a/legalconsenthub-backend/src/main/kotlin/com/betriebsratkanzlei/legalconsenthub/application_form/ApplicationFormRepository.kt +++ b/legalconsenthub-backend/src/main/kotlin/com/betriebsratkanzlei/legalconsenthub/application_form/ApplicationFormRepository.kt @@ -13,8 +13,10 @@ interface ApplicationFormRepository : JpaRepository { fun existsByIsTemplateTrue(): Boolean + fun existsByIsTemplateFalseAndOrganizationId(organizationId: String): Boolean + @Query( - "SELECT c FROM ApplicationForm c WHERE (c.isTemplate IS false) AND (:organizationId is null or c.organizationId = :organizationId)", + "SELECT c FROM ApplicationForm c WHERE (c.isTemplate IS false) AND (:organizationId is null or c.organizationId = :organizationId or c.organizationId IS NULL or c.organizationId = '')", ) fun findAllByIsTemplateFalseAndOrganizationId( organizationId: String?, diff --git a/legalconsenthub-backend/src/main/kotlin/com/betriebsratkanzlei/legalconsenthub/seed/InitialApplicationFormSeeder.kt b/legalconsenthub-backend/src/main/kotlin/com/betriebsratkanzlei/legalconsenthub/seed/InitialApplicationFormSeeder.kt new file mode 100644 index 0000000..f00e2a2 --- /dev/null +++ b/legalconsenthub-backend/src/main/kotlin/com/betriebsratkanzlei/legalconsenthub/seed/InitialApplicationFormSeeder.kt @@ -0,0 +1,84 @@ +package com.betriebsratkanzlei.legalconsenthub.seed + +import com.betriebsratkanzlei.legalconsenthub.application_form.ApplicationFormMapper +import com.betriebsratkanzlei.legalconsenthub.application_form.ApplicationFormRepository +import com.betriebsratkanzlei.legalconsenthub.application_form_version.ApplicationFormVersionService +import com.betriebsratkanzlei.legalconsenthub.user.User +import com.betriebsratkanzlei.legalconsenthub.user.UserRepository +import com.betriebsratkanzlei.legalconsenthub_api.model.ApplicationFormDto +import com.betriebsratkanzlei.legalconsenthub_api.model.ApplicationFormStatus +import com.fasterxml.jackson.databind.ObjectMapper +import com.fasterxml.jackson.dataformat.yaml.YAMLFactory +import org.slf4j.LoggerFactory +import org.springframework.boot.ApplicationArguments +import org.springframework.boot.ApplicationRunner +import org.springframework.core.annotation.Order +import org.springframework.core.io.ClassPathResource +import org.springframework.stereotype.Component +import org.springframework.transaction.annotation.Transactional + +@Component +@Order(200) +class InitialApplicationFormSeeder( + private val applicationFormRepository: ApplicationFormRepository, + private val applicationFormMapper: ApplicationFormMapper, + private val userRepository: UserRepository, + private val versionService: ApplicationFormVersionService, +) : ApplicationRunner { + private val yamlMapper = ObjectMapper(YAMLFactory()).findAndRegisterModules() + + override fun run(args: ApplicationArguments) { + seedInitialFormIfMissing() + } + + @Transactional + fun seedInitialFormIfMissing() { + if (applicationFormRepository.existsByIsTemplateFalseAndOrganizationId("")) { + log.info( + "At least one application form already present, skipping initial form seed", + ) + return + } + + val seedingUser = getOrCreateSeedingUser() + val dto = loadInitialFormDto() + val applicationForm = + applicationFormMapper.toNewApplicationForm( + dto.copy(isTemplate = false, status = ApplicationFormStatus.DRAFT), + seedingUser, + ) + + val savedApplicationForm = applicationFormRepository.save(applicationForm) + + // Create initial version so PDF export is available + versionService.createVersion(savedApplicationForm, seedingUser) + + log.info("Seeded initial application form with realistic values (name={})", savedApplicationForm.name) + } + + private fun loadInitialFormDto(): ApplicationFormDto = + ClassPathResource(INITIAL_FORM_RESOURCE_PATH).inputStream.use { inputStream -> + yamlMapper.readValue(inputStream, ApplicationFormDto::class.java) + } + + private fun getOrCreateSeedingUser(): User { + val existing = userRepository.findById(SEEDING_USER_ID) + if (existing.isPresent) return existing.get() + + val user = + User( + keycloakId = SEEDING_USER_ID, + name = "System Seeder", + organizationId = null, + email = null, + ) + return userRepository.save(user) + } + + companion object { + private val log = LoggerFactory.getLogger(InitialApplicationFormSeeder::class.java) + + private const val INITIAL_FORM_RESOURCE_PATH = "seed/initial_application_form.yaml" + private const val SEEDING_USER_ID = "system-seeder" + } +} diff --git a/legalconsenthub-backend/src/main/kotlin/com/betriebsratkanzlei/legalconsenthub/seed/InitialApplicationFormTemplateSeeder.kt b/legalconsenthub-backend/src/main/kotlin/com/betriebsratkanzlei/legalconsenthub/seed/InitialApplicationFormTemplateSeeder.kt index 5f98197..9cad8a3 100644 --- a/legalconsenthub-backend/src/main/kotlin/com/betriebsratkanzlei/legalconsenthub/seed/InitialApplicationFormTemplateSeeder.kt +++ b/legalconsenthub-backend/src/main/kotlin/com/betriebsratkanzlei/legalconsenthub/seed/InitialApplicationFormTemplateSeeder.kt @@ -10,11 +10,13 @@ import com.fasterxml.jackson.dataformat.yaml.YAMLFactory import org.slf4j.LoggerFactory import org.springframework.boot.ApplicationArguments import org.springframework.boot.ApplicationRunner +import org.springframework.core.annotation.Order import org.springframework.core.io.ClassPathResource import org.springframework.stereotype.Component import org.springframework.transaction.annotation.Transactional @Component +@Order(100) class InitialApplicationFormTemplateSeeder( private val applicationFormRepository: ApplicationFormRepository, private val applicationFormMapper: ApplicationFormMapper, diff --git a/legalconsenthub-backend/src/main/resources/seed/initial_application_form.yaml b/legalconsenthub-backend/src/main/resources/seed/initial_application_form.yaml new file mode 100644 index 0000000..1a09b6f --- /dev/null +++ b/legalconsenthub-backend/src/main/resources/seed/initial_application_form.yaml @@ -0,0 +1,911 @@ +isTemplate: false +name: SAP S/4HANA + +formElementSections: + +# --- Main Section --- +- title: Angaben zum IT-System + shortTitle: IT-System + description: Alle Angaben zum IT-System + formElementSubSections: + + # Art der Maßnahme (primary branching point) + - title: Art der Maßnahme + subtitle: '' + formElements: + - reference: art_der_massnahme + title: Art der IT-System Maßnahme + description: Handelt es sich um eine Einführung, Änderung, Erweiterung oder Ablösung/Einstellung eines IT-Systems? + options: + - value: 'true' + label: Einführung + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + - value: '' + label: Einführung mit einhergehender Ablösung + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + - value: '' + label: Änderung IT-System + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + - value: '' + label: Einstellung IT-System + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + type: RADIOBUTTON + sectionSpawnTriggers: + - templateReference: rollen_berechtigungen_template + sectionSpawnConditionType: SHOW + sectionSpawnExpectedValue: Einführung + sectionSpawnOperator: EQUALS + - templateReference: verarbeitung_mitarbeiterdaten_template + sectionSpawnConditionType: SHOW + sectionSpawnExpectedValue: Einführung + sectionSpawnOperator: EQUALS + + # Einführung: Allgemeine Informationen + - title: Allgemeine Informationen + subtitle: Grundlegende Informationen zur Einführung + formElements: + - reference: testphase_findet_statt + title: Findet eine Testphase statt? + description: Findet eine Testphase statt? + options: + - value: 'true' + label: Ja + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + - value: '' + label: Nein + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + type: RADIOBUTTON + visibilityConditions: + - formElementConditionType: SHOW + sourceFormElementReference: art_der_massnahme + formElementExpectedValue: Einführung + formElementOperator: EQUALS + - reference: mitarbeiterdaten_nicht_anonymisiert + title: Werden Mitarbeiterdaten in der Testphase nicht-anonymisiert oder pseudonymisiert verarbeitet? + description: Werden Mitarbeiterdaten in der Testphase nicht-anonymisiert oder pseudonymisiert verarbeitet? + options: + - value: 'true' + label: Ja + processingPurpose: DATA_ANALYSIS + employeeDataCategory: REVIEW_REQUIRED + - value: '' + label: Nein + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + type: RADIOBUTTON + visibilityConditions: + - formElementConditionType: SHOW + sourceFormElementReference: testphase_findet_statt + formElementExpectedValue: Ja + formElementOperator: EQUALS + - reference: art_der_mitarbeiterdaten + title: Welche Art von Mitarbeiterdaten werden verarbeitet? + description: Welche Art von Mitarbeiterdaten werden verarbeitet? + options: + - value: 'Stammdaten (Name, Personalnummer, Kostenstelle), Gehalts- und Lohndaten, Arbeitszeitdaten, Abwesenheiten, Leistungsdaten, Berechtigungsstrukturen' + label: Art der Mitarbeiterdaten + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + type: TEXTAREA + visibilityConditions: + - formElementConditionType: SHOW + sourceFormElementReference: mitarbeiterdaten_nicht_anonymisiert + formElementExpectedValue: Ja + formElementOperator: EQUALS + - reference: umfang_der_mitarbeiterdatenverarbeitung + title: In welchem Umfang werden Mitarbeiterdaten verarbeitet? + description: In welchem Umfang werden Mitarbeiterdaten verarbeitet? + options: + - value: 'Alle Arbeitnehmer der Unternehmensgruppe (ca. 8.500 Mitarbeiter weltweit). Tägliche Verarbeitung für Lohn- und Gehaltsabrechnung, wöchentlich für Produktionsplanung und Zeiterfassung, monatlich für Controlling-Reports und Performance-Analysen.' + label: Umfang der Verarbeitung + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + type: TEXTAREA + visibilityConditions: + - formElementConditionType: SHOW + sourceFormElementReference: mitarbeiterdaten_nicht_anonymisiert + formElementExpectedValue: Ja + formElementOperator: EQUALS + - reference: anzahl_betroffener_mitarbeiter + title: Wie viele Mitarbeiter sind von der Testphase betroffen? + description: Wie viele Mitarbeiter sind von der Testphase betroffen? + options: + - value: '250 Mitarbeiter in der Pilotphase (Finance, HR, Supply Chain Teams), danach schrittweiser Rollout auf alle 8.500 Mitarbeiter' + label: Anzahl betroffener Mitarbeiter + processingPurpose: DATA_ANALYSIS + employeeDataCategory: REVIEW_REQUIRED + type: TEXTAREA + visibilityConditions: + - formElementConditionType: SHOW + sourceFormElementReference: testphase_findet_statt + formElementExpectedValue: Ja + formElementOperator: EQUALS + + # Einführung: Betroffene Einheiten + - title: Betroffene Einheiten und Verantwortlichkeiten + subtitle: Informationen zu betroffenen Einheiten und Verantwortlichen + formElements: + - reference: betroffene_unternehmen + title: Für welche Unternehmen soll das IT-System eingeführt werden? + description: Für welche Unternehmen soll das IT-System eingeführt werden? + options: + - value: 'Alle Gesellschaften der Unternehmensgruppe: Holding AG, Produktions GmbH, Services GmbH, International Inc.' + label: Betroffene Unternehmen + processingPurpose: BUSINESS_PROCESS + employeeDataCategory: NON_CRITICAL + type: TEXTAREA + visibilityConditions: + - formElementConditionType: SHOW + sourceFormElementReference: art_der_massnahme + formElementExpectedValue: Einführung + formElementOperator: EQUALS + - reference: betroffene_betriebe + title: Für welche Betriebe/Betriebsteile wird das IT-System eingeführt? + description: Für welche Betriebe/Betriebsteile wird das IT-System eingeführt? + options: + - value: 'Zentrale Verwaltung Frankfurt, Produktionsstandorte München und Stuttgart, Vertriebsniederlassungen Hamburg, Berlin, Köln, Außenstandorte international' + label: Betroffene Betriebe/Betriebsteile + processingPurpose: BUSINESS_PROCESS + employeeDataCategory: REVIEW_REQUIRED + type: TEXTAREA + visibilityConditions: + - formElementConditionType: SHOW + sourceFormElementReference: art_der_massnahme + formElementExpectedValue: Einführung + formElementOperator: EQUALS + - reference: betroffene_bereiche + title: Für welche Bereiche bzw. Abteilungen wird das IT-System zum Einsatz kommen? + description: Für welche Bereiche bzw. Abteilungen wird das IT-System zum Einsatz kommen? + options: + - value: 'Finance & Controlling, Human Resources, Supply Chain Management, Manufacturing & Operations, Sales & Distribution, Procurement, Quality Management' + label: Bereiche/Abteilungen + processingPurpose: BUSINESS_PROCESS + employeeDataCategory: REVIEW_REQUIRED + type: TEXTAREA + visibilityConditions: + - formElementConditionType: SHOW + sourceFormElementReference: art_der_massnahme + formElementExpectedValue: Einführung + formElementOperator: EQUALS + - reference: verantwortlicher_fachbereich + title: Wer ist der verantwortliche Fachbereich und Ansprechpartner? + description: Wer ist der verantwortliche Fachbereich und Ansprechpartner? + options: + - value: 'Group Finance, Projektleiter: Dr. Michael Schmidt (CFO), Stellvertreter: Sarah Müller (Head of IT), Kontakt: m.schmidt@company.de, Tel: +49 69 1234-5678' + label: Fachbereich und Ansprechpartner + processingPurpose: BUSINESS_PROCESS + employeeDataCategory: NON_CRITICAL + type: TEXTAREA + visibilityConditions: + - formElementConditionType: SHOW + sourceFormElementReference: art_der_massnahme + formElementExpectedValue: Einführung + formElementOperator: EQUALS + + # Einführung: Angaben zum IT-System + - title: Angaben zum IT-System + subtitle: Detaillierte Informationen zum IT-System + formElements: + - reference: systembeschreibung + title: Kurze Systembeschreibung + description: Kurze Beschreibung des IT-Systems + options: + - value: 'SAP S/4HANA ist ein modernes, integriertes Enterprise Resource Planning (ERP) System der SAP SE. Es dient der unternehmensweiten Planung und Steuerung von Geschäftsprozessen in Echtzeit. Kernfunktionalitäten umfassen: Finanzwesen und Controlling, Personalwirtschaft, Supply Chain Management, Produktion, Vertrieb, Einkauf und Materialwirtschaft. Das System basiert auf einer In-Memory-Datenbank (SAP HANA) und bietet erweiterte Analytics- und KI-Funktionen für Predictive Analytics und automatisierte Prozessoptimierung.' + label: Systembeschreibung + processingPurpose: BUSINESS_PROCESS + employeeDataCategory: NON_CRITICAL + type: TEXTAREA + visibilityConditions: + - formElementConditionType: SHOW + sourceFormElementReference: art_der_massnahme + formElementExpectedValue: Einführung + formElementOperator: EQUALS + - reference: anbieter + title: Wer ist der Anbieter des IT-Systems? + description: Wer ist der Anbieter des IT-Systems? + options: + - value: 'SAP SE, Dietmar-Hopp-Allee 16, 69190 Walldorf, Deutschland' + label: Anbieter + processingPurpose: BUSINESS_PROCESS + employeeDataCategory: NON_CRITICAL + type: TEXTAREA + visibilityConditions: + - formElementConditionType: SHOW + sourceFormElementReference: art_der_massnahme + formElementExpectedValue: Einführung + formElementOperator: EQUALS + - reference: speicherort + title: Wo werden die Daten gespeichert? + description: Wo werden die Daten gespeichert? + options: + - value: 'true' + label: Rechenzentrum + processingPurpose: BUSINESS_PROCESS + employeeDataCategory: REVIEW_REQUIRED + - value: '' + label: Cloud + processingPurpose: BUSINESS_PROCESS + employeeDataCategory: REVIEW_REQUIRED + - value: '' + label: Hybrid + processingPurpose: BUSINESS_PROCESS + employeeDataCategory: REVIEW_REQUIRED + type: RADIOBUTTON + visibilityConditions: + - formElementConditionType: SHOW + sourceFormElementReference: art_der_massnahme + formElementExpectedValue: Einführung + formElementOperator: EQUALS + - reference: zugriff_art + title: Erfolgt der Zugriff stationär oder mobil? + description: Erfolgt der Zugriff stationär oder mobil? + options: + - value: '' + label: Stationär + processingPurpose: BUSINESS_PROCESS + employeeDataCategory: NON_CRITICAL + - value: '' + label: Mobil + processingPurpose: BUSINESS_PROCESS + employeeDataCategory: REVIEW_REQUIRED + - value: 'true' + label: Beides + processingPurpose: BUSINESS_PROCESS + employeeDataCategory: REVIEW_REQUIRED + type: RADIOBUTTON + visibilityConditions: + - formElementConditionType: SHOW + sourceFormElementReference: art_der_massnahme + formElementExpectedValue: Einführung + formElementOperator: EQUALS + - reference: endgeraetezugriff + title: Erfolgt der Zugriff über dienstliche oder private Endgeräte? + description: Erfolgt der Zugriff über dienstliche oder private Endgeräte? + options: + - value: 'true' + label: Dienstlich + processingPurpose: BUSINESS_PROCESS + employeeDataCategory: NON_CRITICAL + - value: '' + label: Privat + processingPurpose: BUSINESS_PROCESS + employeeDataCategory: SENSITIVE + - value: '' + label: Beides + processingPurpose: BUSINESS_PROCESS + employeeDataCategory: SENSITIVE + type: RADIOBUTTON + visibilityConditions: + - formElementConditionType: SHOW + sourceFormElementReference: art_der_massnahme + formElementExpectedValue: Einführung + formElementOperator: EQUALS + - reference: einfuehrung_module_komponenten + title: Werden Module oder Komponenten eingeführt? + description: Werden Module oder Komponenten eingeführt? + options: + - value: 'true' + label: Module + processingPurpose: BUSINESS_PROCESS + employeeDataCategory: NON_CRITICAL + - value: '' + label: Komponenten + processingPurpose: BUSINESS_PROCESS + employeeDataCategory: NON_CRITICAL + - value: '' + label: Beides + processingPurpose: BUSINESS_PROCESS + employeeDataCategory: NON_CRITICAL + type: RADIOBUTTON + visibilityConditions: + - formElementConditionType: SHOW + sourceFormElementReference: art_der_massnahme + formElementExpectedValue: Einführung + formElementOperator: EQUALS + - reference: modul_1 + title: Modul 1 + description: Name des ersten Moduls + options: + - value: 'SAP Finance and Controlling (FI/CO)' + label: Modulname + processingPurpose: BUSINESS_PROCESS + employeeDataCategory: NON_CRITICAL + type: TEXTFIELD + isClonable: true + visibilityConditions: + - formElementConditionType: SHOW + sourceFormElementReference: einfuehrung_module_komponenten + formElementExpectedValue: Module + formElementOperator: EQUALS + - formElementConditionType: SHOW + sourceFormElementReference: einfuehrung_module_komponenten + formElementExpectedValue: Beides + formElementOperator: EQUALS + sectionSpawnTriggers: + - templateReference: module_details_template + sectionSpawnConditionType: SHOW + sectionSpawnExpectedValue: '' + sectionSpawnOperator: IS_NOT_EMPTY + - reference: modul_2 + title: Modul 2 + description: Name des zweiten Moduls + options: + - value: 'SAP Human Capital Management (HCM)' + label: Modulname + processingPurpose: BUSINESS_PROCESS + employeeDataCategory: SENSITIVE + type: TEXTFIELD + isClonable: true + visibilityConditions: + - formElementConditionType: SHOW + sourceFormElementReference: einfuehrung_module_komponenten + formElementExpectedValue: Module + formElementOperator: EQUALS + - formElementConditionType: SHOW + sourceFormElementReference: einfuehrung_module_komponenten + formElementExpectedValue: Beides + formElementOperator: EQUALS + sectionSpawnTriggers: + - templateReference: module_details_template + sectionSpawnConditionType: SHOW + sectionSpawnExpectedValue: '' + sectionSpawnOperator: IS_NOT_EMPTY + - reference: modul_3 + title: Modul 3 + description: Name des dritten Moduls + options: + - value: 'SAP Supply Chain Management (SCM)' + label: Modulname + processingPurpose: BUSINESS_PROCESS + employeeDataCategory: NON_CRITICAL + type: TEXTFIELD + isClonable: true + visibilityConditions: + - formElementConditionType: SHOW + sourceFormElementReference: einfuehrung_module_komponenten + formElementExpectedValue: Module + formElementOperator: EQUALS + - formElementConditionType: SHOW + sourceFormElementReference: einfuehrung_module_komponenten + formElementExpectedValue: Beides + formElementOperator: EQUALS + sectionSpawnTriggers: + - templateReference: module_details_template + sectionSpawnConditionType: SHOW + sectionSpawnExpectedValue: '' + sectionSpawnOperator: IS_NOT_EMPTY + - reference: ki_einsatz + title: Wird KI eingesetzt? + description: Wird im System künstliche Intelligenz eingesetzt? + options: + - value: 'true' + label: Ja + processingPurpose: DATA_ANALYSIS + employeeDataCategory: REVIEW_REQUIRED + - value: '' + label: Nein + processingPurpose: BUSINESS_PROCESS + employeeDataCategory: NON_CRITICAL + type: RADIOBUTTON + visibilityConditions: + - formElementConditionType: SHOW + sourceFormElementReference: art_der_massnahme + formElementExpectedValue: Einführung + formElementOperator: EQUALS + sectionSpawnTriggers: + - templateReference: ki_details_template + sectionSpawnConditionType: SHOW + sectionSpawnExpectedValue: Ja + sectionSpawnOperator: EQUALS + - reference: wirtschaftliche_auswirkungen + title: Hat das IT-System wirtschaftliche Auswirkungen? + description: Hat das IT-System wirtschaftliche Auswirkungen auf die Organisation? + options: + - value: 'true' + label: Ja + processingPurpose: BUSINESS_PROCESS + employeeDataCategory: NON_CRITICAL + - value: '' + label: Nein + processingPurpose: BUSINESS_PROCESS + employeeDataCategory: NON_CRITICAL + type: RADIOBUTTON + visibilityConditions: + - formElementConditionType: SHOW + sourceFormElementReference: art_der_massnahme + formElementExpectedValue: Einführung + formElementOperator: EQUALS + - reference: beschreibung_wirtschaftliche_auswirkungen + title: Beschreibung der wirtschaftlichen Auswirkungen + description: Bitte beschreiben Sie die wirtschaftlichen Auswirkungen + options: + - value: 'Steigerung der Prozesseffizienz um ca. 25-30% durch Automatisierung und Echtzeitdatenverarbeitung. Reduzierung von Fehlerraten in der Abrechnung um 15-20%. Verbesserte Transparenz in der Finanzplanung und im Controlling ermöglicht schnellere Entscheidungsfindung. Einsparungen bei manuellen Prozessen: ca. 45 FTE-Äquivalente. Geschätzter ROI nach 3 Jahren. Investitionsvolumen: ca. 12 Mio. EUR (Lizenzen, Implementation, Change Management).' + label: Wirtschaftliche Auswirkungen + processingPurpose: BUSINESS_PROCESS + employeeDataCategory: NON_CRITICAL + type: TEXTAREA + visibilityConditions: + - formElementConditionType: SHOW + sourceFormElementReference: wirtschaftliche_auswirkungen + formElementExpectedValue: Ja + formElementOperator: EQUALS + +# --- Eingabeseite 2: Rollen und Berechtigungen (spawned section) --- +- title: Rollen und Berechtigungen + shortTitle: Rollen/Berechtigungen + description: Vollständiges Rollen- und Berechtigungskonzept für das IT-System + spawnedFromElementReference: art_der_massnahme + formElementSubSections: + + # Question: Performance/Behavior monitoring + - title: Leistungs-/Verhaltensüberwachung + formElements: + - reference: luv_beabsichtigt + title: Soll durch das IT-System Leistung und/oder Verhalten von Arbeitnehmern überwacht werden? + description: Wenn JA wird eine ausführliche Rollen- und Berechtigungsmatrix benötigt + type: RADIOBUTTON + options: + - value: 'true' + label: Ja + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '' + label: Nein + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + + # Simple roles table (shown when LuV = Nein) + - title: Einfache Darstellung Rollen/Berechtigungen + formElements: + - reference: einfache_rollen_tabelle + title: Rollen und Berechtigungen + description: Übersicht der Rollen und deren Zugriffsberechtigungen + type: TABLE + visibilityConditions: + - formElementConditionType: SHOW + sourceFormElementReference: luv_beabsichtigt + formElementExpectedValue: Nein + formElementOperator: EQUALS + options: + - value: '[]' + label: Rollen-ID + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + - value: '[]' + label: Fachliche Rolle + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + - value: '[]' + label: Rollenzahl + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + - value: '[]' + label: Beschreibung + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + - value: '[]' + label: Zugriffsberechtigungen + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: REVIEW_REQUIRED + + # Detailed roles matrix (shown when LuV = Ja) + - title: 1. Rollenstamm + formElements: + - reference: rollenstamm_tabelle + title: Rollenstamm + description: Definition der Systemrollen + type: TABLE + visibilityConditions: + - formElementConditionType: SHOW + sourceFormElementReference: luv_beabsichtigt + formElementExpectedValue: Ja + formElementOperator: EQUALS + options: + - value: '["R001", "R002", "R003", "R004", "R005"]' + label: Rollen-ID + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + - value: '["SAP_FI_MANAGER", "SAP_HR_SPECIALIST", "SAP_SCM_PLANNER", "SAP_CONTROLLER", "SAP_ADMIN"]' + label: Rollenname + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + - value: '["Finance Manager mit Vollzugriff auf FI/CO Module", "HR-Spezialist für Personalstammdaten und Abrechnung", "Supply Chain Planner für Produktions- und Bedarfsplanung", "Controller für Reporting und Analysen", "Systemadministrator für technische Konfiguration"]' + label: Beschreibung + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + + - title: 2. Permission-Katalog + formElements: + - reference: permission_katalog_tabelle + title: Permission-Katalog + description: Definition der Systemberechtigungen + type: TABLE + visibilityConditions: + - formElementConditionType: SHOW + sourceFormElementReference: luv_beabsichtigt + formElementExpectedValue: Ja + formElementOperator: EQUALS + options: + - value: '["P001", "P002", "P003", "P004", "P005", "P006"]' + label: Permission-ID + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + - value: '["READ_EMPLOYEE_DATA", "WRITE_EMPLOYEE_DATA", "READ_FINANCIAL_DATA", "WRITE_FINANCIAL_DATA", "READ_REPORTS", "ADMIN_CONFIG"]' + label: Permission-Name + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + - value: '["Lesezugriff auf Mitarbeiterstammdaten", "Schreibzugriff auf Mitarbeiterstammdaten", "Lesezugriff auf Finanzdaten", "Schreibzugriff auf Finanzdaten", "Zugriff auf Reports und Analysen", "Administrative Systemkonfiguration"]' + label: Kurzbeschreibung + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + + - title: 3. Scope-Katalog + formElements: + - reference: scope_katalog_tabelle + title: Scope-Katalog + description: Auf welche Objekte/Organisationseinheiten werden Berechtigungen angewendet? + type: TABLE + visibilityConditions: + - formElementConditionType: SHOW + sourceFormElementReference: luv_beabsichtigt + formElementExpectedValue: Ja + formElementOperator: EQUALS + options: + - value: '["S001", "S002", "S003", "S004"]' + label: Scope-ID + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + - value: '["SCOPE_HOLDING", "SCOPE_PRODUCTION", "SCOPE_SALES", "SCOPE_GLOBAL"]' + label: Scope-Name + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + - value: '["Holding AG - Zentrale Frankfurt", "Produktionsstandorte München und Stuttgart", "Vertriebsniederlassungen Deutschland", "Alle Gesellschaften weltweit"]' + label: Bedeutung + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + + - title: 4. Schranken Rolle → erlaubte Permissions + formElements: + - reference: schranken_rolle_permissions_tabelle + title: Schranken Rolle → erlaubte Permissions (Leitplanken) + description: Zuordnung der Rollen zu den jeweiligen Berechtigungen (Maximalrahmen) + type: TABLE + visibilityConditions: + - formElementConditionType: SHOW + sourceFormElementReference: luv_beabsichtigt + formElementExpectedValue: Ja + formElementOperator: EQUALS + options: + - value: '["R001", "R002", "R003", "R004", "R005"]' + label: Rollen-ID + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + columnConfig: + sourceTableReference: rollenstamm_tabelle + sourceColumnIndex: 0 + - value: '["P003,P004,P005", "P001,P002,P005", "P001,P003,P005", "P001,P003,P005", "P001,P002,P003,P004,P005,P006"]' + label: Permission-ID + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + columnConfig: + sourceTableReference: permission_katalog_tabelle + sourceColumnIndex: 0 + isMultipleAllowed: true + - value: '["Nur eigene Kostenstelle", "Nur zugewiesene Mitarbeiter", "Nur Supply Chain Daten", "Nur lesend für Reporting", "Vollzugriff für Administration"]' + label: Einschränkungen + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: REVIEW_REQUIRED + + - title: 5. Schranke Rolle → Erlaubte Scopes + formElements: + - reference: schranken_rolle_scopes_tabelle + title: Schranke Rolle → Erlaubte Scopes + description: Beschränkung des Zugriffs über die Rollen auf bestimmte Organisationseinheiten + type: TABLE + visibilityConditions: + - formElementConditionType: SHOW + sourceFormElementReference: luv_beabsichtigt + formElementExpectedValue: Ja + formElementOperator: EQUALS + options: + - value: '["R001", "R002", "R003", "R004", "R005"]' + label: Rollen-ID + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + columnConfig: + sourceTableReference: rollenstamm_tabelle + sourceColumnIndex: 0 + - value: '["S001,S004", "S001,S002,S003", "S002", "S004", "S004"]' + label: Scope-ID + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + columnConfig: + sourceTableReference: scope_katalog_tabelle + sourceColumnIndex: 0 + isMultipleAllowed: true + - value: '["Zugriff auf Holding und globale Daten", "Zugriff auf alle deutschen Standorte", "Nur Produktionsstandorte", "Globaler Lesezugriff für Reporting", "Vollzugriff für Administration"]' + label: Einschränkung / Kommentar + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: REVIEW_REQUIRED + +# --- Eingabeseite 3: Verarbeitung Mitarbeiterdaten (spawned section) --- +- title: Verarbeitung von Mitarbeiterdaten + shortTitle: Mitarbeiterdaten + description: Angaben zur Verarbeitung von personenbezogenen Arbeitnehmerdaten + spawnedFromElementReference: art_der_massnahme + formElementSubSections: + + # Question: Personal data processing + - title: Grundlegende Fragen + formElements: + - reference: personenbezogene_daten_verarbeitet + title: Werden durch das IT-System personenbezogene Daten von Arbeitnehmern verarbeitet? + description: '' + type: RADIOBUTTON + options: + - value: 'true' + label: Ja + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '' + label: Nein + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + + # Verarbeitete personenbezogene Daten (Umfassende Darstellung - shown when LuV = Ja) + - title: Verarbeitete personenbezogene Daten (Umfassende Darstellung) + formElements: + - reference: umfassende_datenverarbeitung_tabelle + title: Verarbeitete personenbezogene Daten + description: Umfassende Übersicht der verarbeiteten Daten mit Leistungs-/Verhaltenskontrolle + type: TABLE + visibilityConditions: + - formElementConditionType: SHOW + sourceFormElementReference: personenbezogene_daten_verarbeitet + formElementExpectedValue: Ja + formElementOperator: EQUALS + - formElementConditionType: SHOW + sourceFormElementReference: luv_beabsichtigt + formElementExpectedValue: Ja + formElementOperator: EQUALS + options: + - value: '["V001", "V002", "V003", "V004", "V005"]' + label: Verarbeitungsvorgang-ID + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + - value: '["Personalstammdatenpflege", "Zeiterfassung", "Gehaltsabrechnung", "Leistungsbeurteilung", "Produktionsauswertung"]' + label: Bezeichnung + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + - value: '["HCM Master Data", "CATS Zeiterfassung", "Payroll Processing", "Performance Management", "Shop Floor Control"]' + label: Systemfunktion/Verarbeitungsform + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + - value: '["Anlage und Pflege von Mitarbeiterstammdaten", "Erfassung von Arbeitszeiten und Abwesenheiten", "Berechnung und Auszahlung von Gehältern", "Erfassung und Auswertung von Leistungsdaten", "Analyse von Produktionskennzahlen pro Schicht"]' + label: Kurzbeschreibung + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + - value: '["Stammdaten", "Arbeitszeitdaten", "Gehaltsdaten", "Leistungsdaten", "Produktionsdaten"]' + label: Datenkategorien + processingPurpose: DATA_ANALYSIS + employeeDataCategory: REVIEW_REQUIRED + - value: '["Name, Adresse, Personalnummer, Bankverbindung", "An-/Abmeldezeiten, Pausenzeiten, Überstunden", "Bruttogehalt, Abzüge, Zulagen, Sonderzahlungen", "Zielerreichung, Bewertungen, Entwicklungsgespräche", "Stückzahlen, Fehlerquoten, Maschinenzeiten"]' + label: Verarbeitete Arbeitnehmerdaten + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '["Alle Mitarbeiter", "Alle Mitarbeiter mit Zeiterfassung", "Alle Mitarbeiter", "Führungskräfte und Mitarbeiter mit Zielvereinbarung", "Produktionsmitarbeiter"]' + label: Betroffene Mitarbeiter + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '["Personalverwaltung", "Arbeitszeitdokumentation", "Entgeltabrechnung", "Personalentwicklung", "Produktionssteuerung"]' + label: Allgemeiner Zweck + processingPurpose: DATA_ANALYSIS + employeeDataCategory: REVIEW_REQUIRED + - value: '["Fortlaufend", "Täglich", "Monatlich", "Jährlich/Halbjährlich", "Täglich/Schichtweise"]' + label: Häufigkeit/Anlass + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + - value: '["R002", "R002,R004", "R001,R002", "R002,R004", "R003,R004"]' + label: Rollen-Sichtbarkeit (grob) + processingPurpose: DATA_ANALYSIS + employeeDataCategory: REVIEW_REQUIRED + columnConfig: + sourceTableReference: rollenstamm_tabelle + sourceColumnIndex: 0 + isMultipleAllowed: true + - value: '["Nein", "Ja - an Vorgesetzte", "Nein", "Ja - an Management", "Ja - an Produktionsleitung"]' + label: Export/Weitergabe (Ja/Nein + Ziel) + processingPurpose: DATA_ANALYSIS + employeeDataCategory: REVIEW_REQUIRED + - value: '["false", "true", "false", "true", "true"]' + label: Leistungs-/Verhaltenskontrolle beabsichtigt? + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + columnConfig: + isCheckbox: true + + # Angaben zur Leistungs-/Verhaltenskontrolle + - title: Angaben zur Leistungs-/Verhaltenskontrolle + formElements: + - reference: luv_details_tabelle + title: Angaben zur Leistungs-/Verhaltenskontrolle + description: Detaillierte Angaben zu Verarbeitungsvorgängen mit Leistungs-/Verhaltenskontrolle + type: TABLE + tableRowPreset: + sourceTableReference: umfassende_datenverarbeitung_tabelle + filterCondition: + sourceColumnIndex: 11 + expectedValue: 'true' + operator: EQUALS + 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: '["V002", "V004", "V005"]' + label: Verarbeitungsvorgang-ID + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + columnConfig: + sourceTableReference: umfassende_datenverarbeitung_tabelle + sourceColumnIndex: 0 + isReadOnly: true + - value: '["Überwachung der Einhaltung von Arbeitszeiten", "Bewertung der individuellen Zielerreichung", "Auswertung der Produktivität pro Mitarbeiter/Schicht"]' + label: Konkreter Kontrollzweck + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '["Zeitbasierte Kontrolle", "Ergebniskontrolle", "Leistungskontrolle"]' + label: Kontrollart + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '["Hinweis bei Abweichungen, keine automatischen Konsequenzen", "Einfluss auf Bonuszahlungen und Beförderungen", "Grundlage für Schichtplanung und Personalentscheidungen"]' + label: Entscheidungswirkung + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '["Individuell pro Mitarbeiter", "Individuell pro Mitarbeiter", "Schicht/Team, bei Auffälligkeiten individuell"]' + label: Granularität/Bezugsebene + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '["Ja", "Ja", "Ja, bei begründetem Verdacht"]' + label: Drilldown bis Person möglich? + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '["Nein", "Ja - Ranking im Team", "Ja - Vergleich mit Durchschnitt"]' + label: Ranking/Scoring + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '["N/A", "Min. 5 Personen im Vergleich", "Min. 10 Personen pro Auswertung"]' + label: Mindestgruppe/Schwelle + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '["Automatischer Hinweis bei > 10h Arbeitszeit", "Nein, manuelle Bewertung", "Alert bei Produktivität < 80% des Durchschnitts"]' + label: Automatisierte Alerts/Entscheidungen + processingPurpose: DATA_ANALYSIS + employeeDataCategory: SENSITIVE + - value: '["Benachrichtigung an Mitarbeiter und Vorgesetzten", "4-Augen-Prinzip bei Bewertungen", "Prüfung durch BR vor Einzelauswertungen"]' + label: Schutzmaßnahmen/Governance + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: REVIEW_REQUIRED + - value: '["true", "true", "true"]' + label: Audit-Logging erforderlich + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: REVIEW_REQUIRED + columnConfig: + isCheckbox: true + + # Access rules table + - title: Zugriffsregeln hinsichtlich der Verarbeitungsvorgänge + formElements: + - reference: zugriffsregeln_tabelle + title: Zugriffsregeln hinsichtlich der Verarbeitungsvorgänge + description: Detaillierte Zugriffsregeln pro Verarbeitungsvorgang und Rolle + type: TABLE + visibilityConditions: + - formElementConditionType: SHOW + sourceFormElementReference: personenbezogene_daten_verarbeitet + formElementExpectedValue: Ja + formElementOperator: EQUALS + - formElementConditionType: SHOW + sourceFormElementReference: luv_beabsichtigt + formElementExpectedValue: Ja + formElementOperator: EQUALS + options: + - value: '["V001", "V002", "V003", "V004", "V005"]' + label: Verarbeitungsvorgang-ID + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + columnConfig: + sourceTableReference: umfassende_datenverarbeitung_tabelle + sourceColumnIndex: 0 + - value: '["R002", "R002", "R001", "R002", "R003"]' + label: Rollen-ID + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + columnConfig: + sourceTableReference: rollenstamm_tabelle + sourceColumnIndex: 0 + - value: '["true", "true", "true", "true", "true"]' + label: Sichtbar (Ja/Nein) + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + columnConfig: + isCheckbox: true + - value: '["S001,S002,S003", "S001,S002,S003", "S004", "S001,S002,S003", "S002"]' + label: Scope-ID + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + columnConfig: + sourceTableReference: scope_katalog_tabelle + sourceColumnIndex: 0 + isMultipleAllowed: true + - value: '["Nur eigene Mitarbeiter im Verantwortungsbereich", "Nur direkte Berichte und Teamleiter", "Nur aggregierte Finanzdaten", "Nur bei 4-Augen-Freigabe", "Nur Produktionsbereich"]' + label: Bedingungen/Restriktionen + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: REVIEW_REQUIRED + + # Permissions per processing operation table + - title: Berechtigungen für die jeweiligen Verarbeitungsvorgänge + formElements: + - reference: berechtigungen_verarbeitung_tabelle + title: Berechtigungen für die jeweiligen Verarbeitungsvorgänge + description: Welche Berechtigungen haben welche Rollen für welche Verarbeitungsvorgänge? + type: TABLE + visibilityConditions: + - formElementConditionType: SHOW + sourceFormElementReference: personenbezogene_daten_verarbeitet + formElementExpectedValue: Ja + formElementOperator: EQUALS + - formElementConditionType: SHOW + sourceFormElementReference: luv_beabsichtigt + formElementExpectedValue: Ja + formElementOperator: EQUALS + options: + - value: '["V001", "V002", "V003", "V004", "V005"]' + label: Verarbeitungsvorgang-ID + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + columnConfig: + sourceTableReference: umfassende_datenverarbeitung_tabelle + sourceColumnIndex: 0 + - value: '["R002", "R002", "R001", "R002", "R003"]' + label: Rollen-ID + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + columnConfig: + sourceTableReference: rollenstamm_tabelle + sourceColumnIndex: 0 + - value: '["P001,P002", "P001", "P003,P004", "P001,P005", "P001,P005"]' + label: Permission-ID + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + columnConfig: + sourceTableReference: permission_katalog_tabelle + sourceColumnIndex: 0 + rowConstraint: + constraintTableReference: schranken_rolle_permissions_tabelle + constraintKeyColumnIndex: 0 + constraintValueColumnIndex: 1 + currentRowKeyColumnIndex: 1 + - value: '["Ja", "Ja, bedingt", "Ja", "Ja, bedingt", "Ja, bedingt"]' + label: Erlaubt (Ja/Nein/bedingt) + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: NON_CRITICAL + - value: '["Vollzugriff auf eigene Mitarbeiter", "Nur Lesezugriff auf Zeitdaten", "Schreibzugriff für Gehaltsabrechnung", "Nur mit Freigabe durch Vorgesetzten", "Nur aggregierte Produktionsdaten"]' + label: Bedingungen + processingPurpose: SYSTEM_OPERATION + employeeDataCategory: REVIEW_REQUIRED