feat: Add application form seed
This commit is contained in:
35
CLAUDE.md
35
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
|
## Key Files
|
||||||
|
|
||||||
| File | Purpose |
|
| File | Purpose |
|
||||||
|------|---------|
|
|------|---------|
|
||||||
| `api/legalconsenthub.yml` | OpenAPI spec (source of truth) |
|
| `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/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 |
|
| `legalconsenthub-backend/src/main/resources/db/changelog/` | Liquibase migrations |
|
||||||
| `.github/workflows/pipeline.yaml` | CI/CD workflow |
|
| `.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)
|
2. **Use mapper classes** for all DTO↔Entity conversions (never in services/controllers)
|
||||||
3. **No hardcoded UI strings** - Use i18n (`de.json`, `en.json`)
|
3. **No hardcoded UI strings** - Use i18n (`de.json`, `en.json`)
|
||||||
4. **API-first** - Modify OpenAPI spec, then regenerate clients
|
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
|
6. **Form structure is 3-level** - Section → SubSection → Element
|
||||||
7. **Roles managed in Keycloak** - Not in application database
|
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
|
8. **Nuxt UI 4** - For any UI-related questions, use the Nuxt UI MCP server to get current component docs and examples
|
||||||
|
|||||||
@@ -178,27 +178,28 @@ class ApplicationFormFormatService(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val latexContent = buildString {
|
val latexContent =
|
||||||
if (isWideTable) {
|
buildString {
|
||||||
// Use smaller font and tighter column spacing for wide tables
|
if (isWideTable) {
|
||||||
appendLine("\\footnotesize")
|
// Use smaller font and tighter column spacing for wide tables
|
||||||
appendLine("\\setlength{\\tabcolsep}{2pt}")
|
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
|
return latexContent to isWideTable
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,8 +13,10 @@ interface ApplicationFormRepository : JpaRepository<ApplicationForm, UUID> {
|
|||||||
|
|
||||||
fun existsByIsTemplateTrue(): Boolean
|
fun existsByIsTemplateTrue(): Boolean
|
||||||
|
|
||||||
|
fun existsByIsTemplateFalseAndOrganizationId(organizationId: String): Boolean
|
||||||
|
|
||||||
@Query(
|
@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(
|
fun findAllByIsTemplateFalseAndOrganizationId(
|
||||||
organizationId: String?,
|
organizationId: String?,
|
||||||
|
|||||||
@@ -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"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -10,11 +10,13 @@ import com.fasterxml.jackson.dataformat.yaml.YAMLFactory
|
|||||||
import org.slf4j.LoggerFactory
|
import org.slf4j.LoggerFactory
|
||||||
import org.springframework.boot.ApplicationArguments
|
import org.springframework.boot.ApplicationArguments
|
||||||
import org.springframework.boot.ApplicationRunner
|
import org.springframework.boot.ApplicationRunner
|
||||||
|
import org.springframework.core.annotation.Order
|
||||||
import org.springframework.core.io.ClassPathResource
|
import org.springframework.core.io.ClassPathResource
|
||||||
import org.springframework.stereotype.Component
|
import org.springframework.stereotype.Component
|
||||||
import org.springframework.transaction.annotation.Transactional
|
import org.springframework.transaction.annotation.Transactional
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
|
@Order(100)
|
||||||
class InitialApplicationFormTemplateSeeder(
|
class InitialApplicationFormTemplateSeeder(
|
||||||
private val applicationFormRepository: ApplicationFormRepository,
|
private val applicationFormRepository: ApplicationFormRepository,
|
||||||
private val applicationFormMapper: ApplicationFormMapper,
|
private val applicationFormMapper: ApplicationFormMapper,
|
||||||
|
|||||||
@@ -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
|
||||||
Reference in New Issue
Block a user