feat(#28): Initialize backend with application form template
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package com.betriebsratkanzlei.legalconsenthub.application_form
|
||||
|
||||
import com.betriebsratkanzlei.legalconsenthub.form_element.FormElementSectionMapper
|
||||
import com.betriebsratkanzlei.legalconsenthub.user.User
|
||||
import com.betriebsratkanzlei.legalconsenthub.user.UserMapper
|
||||
import com.betriebsratkanzlei.legalconsenthub.user.UserService
|
||||
import com.betriebsratkanzlei.legalconsenthub_api.model.ApplicationFormDto
|
||||
@@ -37,6 +38,13 @@ class ApplicationFormMapper(
|
||||
fun toNewApplicationForm(applicationFormDto: ApplicationFormDto): ApplicationForm {
|
||||
val currentUser = userService.getCurrentUser()
|
||||
|
||||
return toNewApplicationForm(applicationFormDto, currentUser)
|
||||
}
|
||||
|
||||
fun toNewApplicationForm(
|
||||
applicationFormDto: ApplicationFormDto,
|
||||
user: User,
|
||||
): ApplicationForm {
|
||||
val applicationForm =
|
||||
ApplicationForm(
|
||||
id = null,
|
||||
@@ -46,8 +54,8 @@ class ApplicationFormMapper(
|
||||
status =
|
||||
applicationFormDto.status
|
||||
?: com.betriebsratkanzlei.legalconsenthub_api.model.ApplicationFormStatus.DRAFT,
|
||||
createdBy = currentUser,
|
||||
lastModifiedBy = currentUser,
|
||||
createdBy = user,
|
||||
lastModifiedBy = user,
|
||||
)
|
||||
applicationForm.formElementSections =
|
||||
applicationFormDto.formElementSections
|
||||
|
||||
@@ -11,6 +11,8 @@ import java.util.UUID
|
||||
interface ApplicationFormRepository : JpaRepository<ApplicationForm, UUID> {
|
||||
fun findAllByIsTemplateTrue(page: Pageable): Page<ApplicationForm>
|
||||
|
||||
fun existsByIsTemplateTrue(): Boolean
|
||||
|
||||
@Query(
|
||||
"SELECT c FROM ApplicationForm c WHERE (c.isTemplate IS false) AND (:organizationId is null or c.organizationId = :organizationId)",
|
||||
)
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
package com.betriebsratkanzlei.legalconsenthub.seed
|
||||
|
||||
import com.betriebsratkanzlei.legalconsenthub.application_form.ApplicationFormMapper
|
||||
import com.betriebsratkanzlei.legalconsenthub.application_form.ApplicationFormRepository
|
||||
import com.betriebsratkanzlei.legalconsenthub.user.User
|
||||
import com.betriebsratkanzlei.legalconsenthub.user.UserRepository
|
||||
import com.betriebsratkanzlei.legalconsenthub_api.model.ApplicationFormDto
|
||||
import com.fasterxml.jackson.databind.ObjectMapper
|
||||
import org.slf4j.LoggerFactory
|
||||
import org.springframework.boot.ApplicationArguments
|
||||
import org.springframework.boot.ApplicationRunner
|
||||
import org.springframework.core.io.ClassPathResource
|
||||
import org.springframework.stereotype.Component
|
||||
import org.springframework.transaction.annotation.Transactional
|
||||
|
||||
@Component
|
||||
class InitialApplicationFormTemplateSeeder(
|
||||
private val applicationFormRepository: ApplicationFormRepository,
|
||||
private val applicationFormMapper: ApplicationFormMapper,
|
||||
private val userRepository: UserRepository,
|
||||
private val objectMapper: ObjectMapper,
|
||||
) : ApplicationRunner {
|
||||
override fun run(args: ApplicationArguments) {
|
||||
seedInitialTemplateIfMissing()
|
||||
}
|
||||
|
||||
@Transactional
|
||||
fun seedInitialTemplateIfMissing() {
|
||||
if (applicationFormRepository.existsByIsTemplateTrue()) {
|
||||
log.info(
|
||||
"At least one application form template already present, skipping initial template seed",
|
||||
)
|
||||
return
|
||||
}
|
||||
|
||||
val seedingUser = getOrCreateSeedingUser()
|
||||
val dto = loadInitialTemplateDto()
|
||||
val applicationForm = applicationFormMapper.toNewApplicationForm(dto.copy(isTemplate = true), seedingUser)
|
||||
|
||||
applicationFormRepository.save(applicationForm)
|
||||
log.info("Seeded initial application form template (name={})", applicationForm.name)
|
||||
}
|
||||
|
||||
private fun loadInitialTemplateDto(): ApplicationFormDto =
|
||||
ClassPathResource(INITIAL_TEMPLATE_RESOURCE_PATH).inputStream.use { inputStream ->
|
||||
objectMapper.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(InitialApplicationFormTemplateSeeder::class.java)
|
||||
|
||||
private const val INITIAL_TEMPLATE_RESOURCE_PATH = "seed/initial_application_form_template.json"
|
||||
private const val SEEDING_USER_ID = "system-seeder"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,765 @@
|
||||
{
|
||||
"isTemplate": true,
|
||||
"name": "Name des IT-Systems",
|
||||
"formElementSections": [
|
||||
{
|
||||
"title": "Angaben zum IT-System",
|
||||
"shortTitle": "IT-System",
|
||||
"description": "Alle Angaben zum IT-System",
|
||||
"formElementSubSections": [
|
||||
{
|
||||
"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": "Einführung",
|
||||
"label": "Einführung",
|
||||
"processingPurpose": "SYSTEM_OPERATION",
|
||||
"employeeDataCategory": "NON_CRITICAL"
|
||||
},
|
||||
{
|
||||
"value": "Änderung IT-System",
|
||||
"label": "Änderung IT-System",
|
||||
"processingPurpose": "SYSTEM_OPERATION",
|
||||
"employeeDataCategory": "NON_CRITICAL"
|
||||
},
|
||||
{
|
||||
"value": "Erweiterung",
|
||||
"label": "Erweiterung",
|
||||
"processingPurpose": "SYSTEM_OPERATION",
|
||||
"employeeDataCategory": "NON_CRITICAL"
|
||||
},
|
||||
{
|
||||
"value": "Ablösung/Einstellung IT-System",
|
||||
"label": "Ablösung/Einstellung IT-System",
|
||||
"processingPurpose": "SYSTEM_OPERATION",
|
||||
"employeeDataCategory": "NON_CRITICAL"
|
||||
}
|
||||
],
|
||||
"type": "RADIOBUTTON"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Allgemeine Information",
|
||||
"subtitle": "Grundlegende Informationen zum IT-System",
|
||||
"formElements": [
|
||||
{
|
||||
"reference": "einfuehrungszeitpunkt",
|
||||
"title": "Einführungszeitpunkt",
|
||||
"description": "Geplanter Termin Going Live",
|
||||
"options": [
|
||||
{
|
||||
"value": "",
|
||||
"label": "Einführungszeitpunkt",
|
||||
"processingPurpose": "SYSTEM_OPERATION",
|
||||
"employeeDataCategory": "NON_CRITICAL"
|
||||
}
|
||||
],
|
||||
"type": "DATE",
|
||||
"visibilityCondition": {
|
||||
"formElementConditionType": "SHOW",
|
||||
"sourceFormElementReference": "art_der_massnahme",
|
||||
"formElementExpectedValue": "Einführung",
|
||||
"formElementOperator": "EQUALS"
|
||||
}
|
||||
},
|
||||
{
|
||||
"reference": "testphase_findet_statt",
|
||||
"title": "Testphase findet statt",
|
||||
"description": "Findet eine Testphase statt?",
|
||||
"options": [
|
||||
{
|
||||
"value": "Ja",
|
||||
"label": "Ja",
|
||||
"processingPurpose": "SYSTEM_OPERATION",
|
||||
"employeeDataCategory": "NON_CRITICAL"
|
||||
},
|
||||
{
|
||||
"value": "Nein",
|
||||
"label": "Nein",
|
||||
"processingPurpose": "SYSTEM_OPERATION",
|
||||
"employeeDataCategory": "NON_CRITICAL"
|
||||
}
|
||||
],
|
||||
"type": "RADIOBUTTON",
|
||||
"visibilityCondition": {
|
||||
"formElementConditionType": "HIDE",
|
||||
"sourceFormElementReference": "art_der_massnahme",
|
||||
"formElementExpectedValue": "Ablösung/Einstellung IT-System",
|
||||
"formElementOperator": "EQUALS"
|
||||
}
|
||||
},
|
||||
{
|
||||
"reference": "testphase_zeitraum",
|
||||
"title": "Testphase Zeitraum",
|
||||
"description": "Zeitraum der Testphase (von ... bis)",
|
||||
"options": [
|
||||
{
|
||||
"value": "",
|
||||
"label": "Testphase Zeitraum",
|
||||
"processingPurpose": "SYSTEM_OPERATION",
|
||||
"employeeDataCategory": "NON_CRITICAL"
|
||||
}
|
||||
],
|
||||
"type": "TEXTAREA",
|
||||
"visibilityCondition": {
|
||||
"formElementConditionType": "SHOW",
|
||||
"sourceFormElementReference": "testphase_findet_statt",
|
||||
"formElementExpectedValue": "Ja",
|
||||
"formElementOperator": "EQUALS"
|
||||
}
|
||||
},
|
||||
{
|
||||
"reference": "verwendung_anonymisierter_daten",
|
||||
"title": "Verwendung anonymisierter/fiktiver Daten",
|
||||
"description": "Während der Testphase/n wird mit anonymisierten bzw. fiktiven Daten gearbeitet",
|
||||
"options": [
|
||||
{
|
||||
"value": "Ja",
|
||||
"label": "Ja",
|
||||
"processingPurpose": "SYSTEM_OPERATION",
|
||||
"employeeDataCategory": "NON_CRITICAL"
|
||||
},
|
||||
{
|
||||
"value": "Nein",
|
||||
"label": "Nein",
|
||||
"processingPurpose": "DATA_ANALYSIS",
|
||||
"employeeDataCategory": "REVIEW_REQUIRED"
|
||||
}
|
||||
],
|
||||
"type": "RADIOBUTTON",
|
||||
"visibilityCondition": {
|
||||
"formElementConditionType": "SHOW",
|
||||
"sourceFormElementReference": "testphase_findet_statt",
|
||||
"formElementExpectedValue": "Ja",
|
||||
"formElementOperator": "EQUALS"
|
||||
}
|
||||
},
|
||||
{
|
||||
"reference": "art_der_mitarbeiterdaten",
|
||||
"title": "Art der Mitarbeiterdaten (falls Echtdaten)",
|
||||
"description": "Welche Art von Mitarbeiterdaten werden verwendet?",
|
||||
"options": [
|
||||
{
|
||||
"value": "",
|
||||
"label": "Art der Mitarbeiterdaten",
|
||||
"processingPurpose": "DATA_ANALYSIS",
|
||||
"employeeDataCategory": "SENSITIVE"
|
||||
}
|
||||
],
|
||||
"type": "TEXTAREA",
|
||||
"visibilityCondition": {
|
||||
"formElementConditionType": "SHOW",
|
||||
"sourceFormElementReference": "verwendung_anonymisierter_daten",
|
||||
"formElementExpectedValue": "Nein",
|
||||
"formElementOperator": "EQUALS"
|
||||
}
|
||||
},
|
||||
{
|
||||
"reference": "anzahl_betroffener_mitarbeiter",
|
||||
"title": "Anzahl betroffener Mitarbeiter (Testphase)",
|
||||
"description": "Wie viele Mitarbeiter sind von der Testphase betroffen?",
|
||||
"options": [
|
||||
{
|
||||
"value": "",
|
||||
"label": "Anzahl betroffener Mitarbeiter",
|
||||
"processingPurpose": "DATA_ANALYSIS",
|
||||
"employeeDataCategory": "REVIEW_REQUIRED"
|
||||
}
|
||||
],
|
||||
"type": "TEXTAREA",
|
||||
"visibilityCondition": {
|
||||
"formElementConditionType": "SHOW",
|
||||
"sourceFormElementReference": "verwendung_anonymisierter_daten",
|
||||
"formElementExpectedValue": "Nein",
|
||||
"formElementOperator": "EQUALS"
|
||||
}
|
||||
},
|
||||
{
|
||||
"reference": "umfang_der_mitarbeiterdatenverarbeitung",
|
||||
"title": "Umfang der Mitarbeiterdatenverarbeitung",
|
||||
"description": "In welchem Umfang werden Mitarbeiterdaten verarbeitet?",
|
||||
"options": [
|
||||
{
|
||||
"value": "",
|
||||
"label": "Umfang der Verarbeitung",
|
||||
"processingPurpose": "DATA_ANALYSIS",
|
||||
"employeeDataCategory": "SENSITIVE"
|
||||
}
|
||||
],
|
||||
"type": "TEXTAREA",
|
||||
"visibilityCondition": {
|
||||
"formElementConditionType": "SHOW",
|
||||
"sourceFormElementReference": "verwendung_anonymisierter_daten",
|
||||
"formElementExpectedValue": "Nein",
|
||||
"formElementOperator": "EQUALS"
|
||||
}
|
||||
},
|
||||
{
|
||||
"reference": "name_des_abgeloesten_systems",
|
||||
"title": "Name des abgelösten Systems",
|
||||
"description": "Bezeichnung des abgelösten Systems",
|
||||
"options": [
|
||||
{
|
||||
"value": "",
|
||||
"label": "Name des abgelösten Systems",
|
||||
"processingPurpose": "SYSTEM_OPERATION",
|
||||
"employeeDataCategory": "NON_CRITICAL"
|
||||
}
|
||||
],
|
||||
"type": "TEXTAREA",
|
||||
"visibilityCondition": {
|
||||
"formElementConditionType": "SHOW",
|
||||
"sourceFormElementReference": "art_der_massnahme",
|
||||
"formElementExpectedValue": "Ablösung/Einstellung IT-System",
|
||||
"formElementOperator": "EQUALS"
|
||||
}
|
||||
},
|
||||
{
|
||||
"reference": "name_des_geaenderten_systems",
|
||||
"title": "Name des geänderten Systems",
|
||||
"description": "Bezeichnung des geänderten Systems",
|
||||
"options": [
|
||||
{
|
||||
"value": "",
|
||||
"label": "Name des geänderten Systems",
|
||||
"processingPurpose": "SYSTEM_OPERATION",
|
||||
"employeeDataCategory": "NON_CRITICAL"
|
||||
}
|
||||
],
|
||||
"type": "TEXTAREA",
|
||||
"visibilityCondition": {
|
||||
"formElementConditionType": "SHOW",
|
||||
"sourceFormElementReference": "art_der_massnahme",
|
||||
"formElementExpectedValue": "Änderung IT-System",
|
||||
"formElementOperator": "EQUALS"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Verantwortlicher und betroffene Betriebe / Betriebsteile",
|
||||
"subtitle": "Informationen zu Verantwortlichen und betroffenen Bereichen",
|
||||
"formElements": [
|
||||
{
|
||||
"reference": "verantwortlicher_fachbereich",
|
||||
"title": "Verantwortlicher Fachbereich und Ansprechpartner",
|
||||
"description": "Bitte geben Sie den verantwortlichen Fachbereich und Ansprechpartner an",
|
||||
"options": [
|
||||
{
|
||||
"value": "",
|
||||
"label": "Fachbereich und Ansprechpartner",
|
||||
"processingPurpose": "BUSINESS_PROCESS",
|
||||
"employeeDataCategory": "NON_CRITICAL"
|
||||
}
|
||||
],
|
||||
"type": "TEXTAREA",
|
||||
"visibilityCondition": {
|
||||
"formElementConditionType": "HIDE",
|
||||
"sourceFormElementReference": "art_der_massnahme",
|
||||
"formElementExpectedValue": "Ablösung/Einstellung IT-System",
|
||||
"formElementOperator": "EQUALS"
|
||||
}
|
||||
},
|
||||
{
|
||||
"reference": "betroffene_betriebe",
|
||||
"title": "Betroffene Betriebe/Betriebsteile",
|
||||
"description": "Für welche Betriebe/Betriebsteile wird das IT-System eingeführt?",
|
||||
"options": [
|
||||
{
|
||||
"value": "",
|
||||
"label": "Betroffene Betriebe/Betriebsteile",
|
||||
"processingPurpose": "BUSINESS_PROCESS",
|
||||
"employeeDataCategory": "REVIEW_REQUIRED"
|
||||
}
|
||||
],
|
||||
"type": "TEXTAREA",
|
||||
"visibilityCondition": {
|
||||
"formElementConditionType": "HIDE",
|
||||
"sourceFormElementReference": "art_der_massnahme",
|
||||
"formElementExpectedValue": "Ablösung/Einstellung IT-System",
|
||||
"formElementOperator": "EQUALS"
|
||||
}
|
||||
},
|
||||
{
|
||||
"reference": "betroffene_bereiche",
|
||||
"title": "Betroffene Bereiche/Abteilungen",
|
||||
"description": "Für welche Bereiche bzw. Abteilungen soll das IT-System zum Einsatz kommen?",
|
||||
"options": [
|
||||
{
|
||||
"value": "",
|
||||
"label": "Bereiche/Abteilungen",
|
||||
"processingPurpose": "BUSINESS_PROCESS",
|
||||
"employeeDataCategory": "REVIEW_REQUIRED"
|
||||
}
|
||||
],
|
||||
"type": "TEXTAREA",
|
||||
"visibilityCondition": {
|
||||
"formElementConditionType": "HIDE",
|
||||
"sourceFormElementReference": "art_der_massnahme",
|
||||
"formElementExpectedValue": "Ablösung/Einstellung IT-System",
|
||||
"formElementOperator": "EQUALS"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Angaben zum IT-System",
|
||||
"subtitle": "Detaillierte Informationen zum IT-System",
|
||||
"formElements": [
|
||||
{
|
||||
"reference": "systembeschreibung",
|
||||
"title": "Systembeschreibung",
|
||||
"description": "Beschreibung des IT-Systems",
|
||||
"options": [
|
||||
{
|
||||
"value": "",
|
||||
"label": "Systembeschreibung",
|
||||
"processingPurpose": "SYSTEM_OPERATION",
|
||||
"employeeDataCategory": "NON_CRITICAL"
|
||||
}
|
||||
],
|
||||
"type": "TEXTAREA",
|
||||
"visibilityCondition": {
|
||||
"formElementConditionType": "HIDE",
|
||||
"sourceFormElementReference": "art_der_massnahme",
|
||||
"formElementExpectedValue": "Ablösung/Einstellung IT-System",
|
||||
"formElementOperator": "EQUALS"
|
||||
}
|
||||
},
|
||||
{
|
||||
"reference": "zielsetzung",
|
||||
"title": "Zielsetzung des Systemeinsatzes",
|
||||
"description": "Zielsetzung und Zweck des IT-Systems",
|
||||
"options": [
|
||||
{
|
||||
"value": "",
|
||||
"label": "Zielsetzung",
|
||||
"processingPurpose": "SYSTEM_OPERATION",
|
||||
"employeeDataCategory": "NON_CRITICAL"
|
||||
}
|
||||
],
|
||||
"type": "TEXTAREA",
|
||||
"visibilityCondition": {
|
||||
"formElementConditionType": "HIDE",
|
||||
"sourceFormElementReference": "art_der_massnahme",
|
||||
"formElementExpectedValue": "Ablösung/Einstellung IT-System",
|
||||
"formElementOperator": "EQUALS"
|
||||
}
|
||||
},
|
||||
{
|
||||
"reference": "hersteller",
|
||||
"title": "Hersteller/Anbieter",
|
||||
"description": "Hersteller oder Anbieter des IT-Systems",
|
||||
"options": [
|
||||
{
|
||||
"value": "",
|
||||
"label": "Hersteller/Anbieter",
|
||||
"processingPurpose": "SYSTEM_OPERATION",
|
||||
"employeeDataCategory": "NON_CRITICAL"
|
||||
}
|
||||
],
|
||||
"type": "TEXTAREA",
|
||||
"visibilityCondition": {
|
||||
"formElementConditionType": "HIDE",
|
||||
"sourceFormElementReference": "art_der_massnahme",
|
||||
"formElementExpectedValue": "Ablösung/Einstellung IT-System",
|
||||
"formElementOperator": "EQUALS"
|
||||
}
|
||||
},
|
||||
{
|
||||
"reference": "speicherort",
|
||||
"title": "Speicherort",
|
||||
"description": "Wo werden die Daten gespeichert?",
|
||||
"options": [
|
||||
{
|
||||
"value": "Server im Rechenzentrum",
|
||||
"label": "Server im Rechenzentrum",
|
||||
"processingPurpose": "SYSTEM_OPERATION",
|
||||
"employeeDataCategory": "REVIEW_REQUIRED"
|
||||
},
|
||||
{
|
||||
"value": "Cloud",
|
||||
"label": "Cloud",
|
||||
"processingPurpose": "SYSTEM_OPERATION",
|
||||
"employeeDataCategory": "SENSITIVE"
|
||||
}
|
||||
],
|
||||
"type": "RADIOBUTTON",
|
||||
"visibilityCondition": {
|
||||
"formElementConditionType": "HIDE",
|
||||
"sourceFormElementReference": "art_der_massnahme",
|
||||
"formElementExpectedValue": "Ablösung/Einstellung IT-System",
|
||||
"formElementOperator": "EQUALS"
|
||||
}
|
||||
},
|
||||
{
|
||||
"reference": "geraeteart",
|
||||
"title": "Zugriff auf die Daten erfolgt über (Geräteart)",
|
||||
"description": "Über welche Art von Gerät erfolgt der Zugriff?",
|
||||
"options": [
|
||||
{
|
||||
"value": "stationäres Endgerät",
|
||||
"label": "stationäres Endgerät",
|
||||
"processingPurpose": "SYSTEM_OPERATION",
|
||||
"employeeDataCategory": "NON_CRITICAL"
|
||||
},
|
||||
{
|
||||
"value": "mobile App",
|
||||
"label": "mobile App",
|
||||
"processingPurpose": "SYSTEM_OPERATION",
|
||||
"employeeDataCategory": "REVIEW_REQUIRED"
|
||||
},
|
||||
{
|
||||
"value": "Browser",
|
||||
"label": "Browser",
|
||||
"processingPurpose": "SYSTEM_OPERATION",
|
||||
"employeeDataCategory": "NON_CRITICAL"
|
||||
}
|
||||
],
|
||||
"type": "SELECT",
|
||||
"visibilityCondition": {
|
||||
"formElementConditionType": "HIDE",
|
||||
"sourceFormElementReference": "art_der_massnahme",
|
||||
"formElementExpectedValue": "Ablösung/Einstellung IT-System",
|
||||
"formElementOperator": "EQUALS"
|
||||
}
|
||||
},
|
||||
{
|
||||
"reference": "geraetebesitz",
|
||||
"title": "Zugriff auf die Daten erfolgt über (Gerätebesitz)",
|
||||
"description": "Mit welchen Geräten wird auf die Daten zugegriffen?",
|
||||
"options": [
|
||||
{
|
||||
"value": "dienstliche Endgeräte",
|
||||
"label": "dienstliche Endgeräte",
|
||||
"processingPurpose": "SYSTEM_OPERATION",
|
||||
"employeeDataCategory": "NON_CRITICAL"
|
||||
},
|
||||
{
|
||||
"value": "private Endgeräte",
|
||||
"label": "private Endgeräte",
|
||||
"processingPurpose": "SYSTEM_OPERATION",
|
||||
"employeeDataCategory": "SENSITIVE"
|
||||
}
|
||||
],
|
||||
"type": "RADIOBUTTON",
|
||||
"visibilityCondition": {
|
||||
"formElementConditionType": "HIDE",
|
||||
"sourceFormElementReference": "art_der_massnahme",
|
||||
"formElementExpectedValue": "Ablösung/Einstellung IT-System",
|
||||
"formElementOperator": "EQUALS"
|
||||
}
|
||||
},
|
||||
{
|
||||
"reference": "modulbasiertes_system",
|
||||
"title": "Modulbasiertes System",
|
||||
"description": "Ist das IT-System modulbasiert?",
|
||||
"options": [
|
||||
{
|
||||
"value": "Ja",
|
||||
"label": "Ja",
|
||||
"processingPurpose": "SYSTEM_OPERATION",
|
||||
"employeeDataCategory": "NON_CRITICAL"
|
||||
},
|
||||
{
|
||||
"value": "Nein",
|
||||
"label": "Nein",
|
||||
"processingPurpose": "SYSTEM_OPERATION",
|
||||
"employeeDataCategory": "NON_CRITICAL"
|
||||
}
|
||||
],
|
||||
"type": "RADIOBUTTON",
|
||||
"visibilityCondition": {
|
||||
"formElementConditionType": "HIDE",
|
||||
"sourceFormElementReference": "art_der_massnahme",
|
||||
"formElementExpectedValue": "Ablösung/Einstellung IT-System",
|
||||
"formElementOperator": "EQUALS"
|
||||
}
|
||||
},
|
||||
{
|
||||
"reference": "modul_1",
|
||||
"title": "Modulname",
|
||||
"description": "Name des Moduls eingeben",
|
||||
"options": [
|
||||
{
|
||||
"value": "",
|
||||
"label": "Modulname",
|
||||
"processingPurpose": "SYSTEM_OPERATION",
|
||||
"employeeDataCategory": "NON_CRITICAL"
|
||||
}
|
||||
],
|
||||
"type": "TEXTAREA",
|
||||
"isClonable": true,
|
||||
"sectionSpawnTrigger": {
|
||||
"templateReference": "module_details_template",
|
||||
"sectionSpawnConditionType": "SHOW",
|
||||
"sectionSpawnOperator": "IS_NOT_EMPTY"
|
||||
},
|
||||
"visibilityCondition": {
|
||||
"formElementConditionType": "SHOW",
|
||||
"sourceFormElementReference": "modulbasiertes_system",
|
||||
"formElementExpectedValue": "Ja",
|
||||
"formElementOperator": "EQUALS"
|
||||
}
|
||||
},
|
||||
{
|
||||
"reference": "ki_einsatz",
|
||||
"title": "Einsatz Künstlicher Intelligenz",
|
||||
"description": "Kommt im IT-System Künstliche Intelligenz zum Einsatz?",
|
||||
"options": [
|
||||
{
|
||||
"value": "Nein",
|
||||
"label": "Nein",
|
||||
"processingPurpose": "SYSTEM_OPERATION",
|
||||
"employeeDataCategory": "NON_CRITICAL"
|
||||
},
|
||||
{
|
||||
"value": "Ja",
|
||||
"label": "Ja",
|
||||
"processingPurpose": "DATA_ANALYSIS",
|
||||
"employeeDataCategory": "SENSITIVE"
|
||||
}
|
||||
],
|
||||
"type": "RADIOBUTTON",
|
||||
"isClonable": false,
|
||||
"sectionSpawnTrigger": {
|
||||
"templateReference": "ki_details_template",
|
||||
"sectionSpawnConditionType": "SHOW",
|
||||
"sectionSpawnExpectedValue": "Ja",
|
||||
"sectionSpawnOperator": "EQUALS"
|
||||
},
|
||||
"visibilityCondition": {
|
||||
"formElementConditionType": "HIDE",
|
||||
"sourceFormElementReference": "art_der_massnahme",
|
||||
"formElementExpectedValue": "Ablösung/Einstellung IT-System",
|
||||
"formElementOperator": "EQUALS"
|
||||
}
|
||||
},
|
||||
{
|
||||
"reference": "wirtschaftliche_auswirkungen",
|
||||
"title": "Wirtschaftliche Auswirkungen",
|
||||
"description": "Zu erwartende wirtschaftliche Auswirkungen auf das Unternehmen",
|
||||
"options": [
|
||||
{
|
||||
"value": "Keine",
|
||||
"label": "Keine",
|
||||
"processingPurpose": "BUSINESS_PROCESS",
|
||||
"employeeDataCategory": "NON_CRITICAL"
|
||||
},
|
||||
{
|
||||
"value": "Ja",
|
||||
"label": "Ja",
|
||||
"processingPurpose": "BUSINESS_PROCESS",
|
||||
"employeeDataCategory": "REVIEW_REQUIRED"
|
||||
}
|
||||
],
|
||||
"type": "RADIOBUTTON",
|
||||
"visibilityCondition": {
|
||||
"formElementConditionType": "HIDE",
|
||||
"sourceFormElementReference": "art_der_massnahme",
|
||||
"formElementExpectedValue": "Ablösung/Einstellung IT-System",
|
||||
"formElementOperator": "EQUALS"
|
||||
}
|
||||
},
|
||||
{
|
||||
"reference": "beschreibung_wirtschaftliche_auswirkungen",
|
||||
"title": "Beschreibung wirtschaftliche Auswirkungen",
|
||||
"description": "Bitte beschreiben Sie die wirtschaftlichen Auswirkungen",
|
||||
"options": [
|
||||
{
|
||||
"value": "",
|
||||
"label": "Beschreibung der Auswirkungen",
|
||||
"processingPurpose": "BUSINESS_PROCESS",
|
||||
"employeeDataCategory": "REVIEW_REQUIRED"
|
||||
}
|
||||
],
|
||||
"type": "TEXTAREA",
|
||||
"visibilityCondition": {
|
||||
"formElementConditionType": "SHOW",
|
||||
"sourceFormElementReference": "wirtschaftliche_auswirkungen",
|
||||
"formElementExpectedValue": "Ja",
|
||||
"formElementOperator": "EQUALS"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Moduldetails",
|
||||
"shortTitle": "{{triggerValue}}",
|
||||
"description": "Detaillierte Informationen zum Modul",
|
||||
"isTemplate": true,
|
||||
"templateReference": "module_details_template",
|
||||
"titleTemplate": "Modul: {{triggerValue}}",
|
||||
"formElementSubSections": [
|
||||
{
|
||||
"title": "Modulinformationen",
|
||||
"formElements": [
|
||||
{
|
||||
"reference": "modul_beschreibung",
|
||||
"title": "Modulbeschreibung",
|
||||
"description": "Beschreiben Sie die Funktionalität des Moduls",
|
||||
"type": "TEXTAREA",
|
||||
"options": [
|
||||
{
|
||||
"value": "",
|
||||
"label": "Beschreibung",
|
||||
"processingPurpose": "SYSTEM_OPERATION",
|
||||
"employeeDataCategory": "NON_CRITICAL"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"reference": "modul_nutzergruppen",
|
||||
"title": "Nutzergruppen",
|
||||
"description": "Welche Nutzergruppen verwenden dieses Modul?",
|
||||
"type": "TEXTAREA",
|
||||
"options": [
|
||||
{
|
||||
"value": "",
|
||||
"label": "Nutzergruppen",
|
||||
"processingPurpose": "SYSTEM_OPERATION",
|
||||
"employeeDataCategory": "REVIEW_REQUIRED"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"reference": "modul_datenkategorien",
|
||||
"title": "Verarbeitete Datenkategorien",
|
||||
"type": "CHECKBOX",
|
||||
"options": [
|
||||
{
|
||||
"value": "false",
|
||||
"label": "Stammdaten",
|
||||
"processingPurpose": "SYSTEM_OPERATION",
|
||||
"employeeDataCategory": "NON_CRITICAL"
|
||||
},
|
||||
{
|
||||
"value": "false",
|
||||
"label": "Leistungsdaten",
|
||||
"processingPurpose": "DATA_ANALYSIS",
|
||||
"employeeDataCategory": "SENSITIVE"
|
||||
},
|
||||
{
|
||||
"value": "false",
|
||||
"label": "Verhaltensdaten",
|
||||
"processingPurpose": "DATA_ANALYSIS",
|
||||
"employeeDataCategory": "SENSITIVE"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Details zum KI-Einsatz",
|
||||
"shortTitle": "KI-Einsatz",
|
||||
"description": "Informationen zum Einsatz künstlicher Intelligenz",
|
||||
"isTemplate": true,
|
||||
"templateReference": "ki_details_template",
|
||||
"titleTemplate": "Details zum KI-Einsatz",
|
||||
"formElementSubSections": [
|
||||
{
|
||||
"title": "KI-Informationen",
|
||||
"formElements": [
|
||||
{
|
||||
"reference": "ki_art",
|
||||
"title": "Art der KI",
|
||||
"description": "Um welche Art von KI handelt es sich?",
|
||||
"type": "CHECKBOX",
|
||||
"options": [
|
||||
{
|
||||
"value": "false",
|
||||
"label": "Machine Learning",
|
||||
"processingPurpose": "DATA_ANALYSIS",
|
||||
"employeeDataCategory": "SENSITIVE"
|
||||
},
|
||||
{
|
||||
"value": "false",
|
||||
"label": "Generative KI (LLM)",
|
||||
"processingPurpose": "DATA_ANALYSIS",
|
||||
"employeeDataCategory": "SENSITIVE"
|
||||
},
|
||||
{
|
||||
"value": "false",
|
||||
"label": "Regelbasierte KI",
|
||||
"processingPurpose": "DATA_ANALYSIS",
|
||||
"employeeDataCategory": "REVIEW_REQUIRED"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"reference": "ki_zweck",
|
||||
"title": "Einsatzzweck der KI",
|
||||
"description": "Für welchen Zweck wird die KI eingesetzt?",
|
||||
"type": "TEXTAREA",
|
||||
"options": [
|
||||
{
|
||||
"value": "",
|
||||
"label": "Einsatzzweck",
|
||||
"processingPurpose": "DATA_ANALYSIS",
|
||||
"employeeDataCategory": "SENSITIVE"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"reference": "ki_entscheidungen",
|
||||
"title": "Automatisierte Entscheidungen",
|
||||
"description": "Werden durch die KI automatisierte Entscheidungen getroffen, die Beschäftigte betreffen?",
|
||||
"type": "RADIOBUTTON",
|
||||
"options": [
|
||||
{
|
||||
"value": "Nein",
|
||||
"label": "Nein",
|
||||
"processingPurpose": "DATA_ANALYSIS",
|
||||
"employeeDataCategory": "NON_CRITICAL"
|
||||
},
|
||||
{
|
||||
"value": "Ja, mit menschlicher Überprüfung",
|
||||
"label": "Ja, mit menschlicher Überprüfung",
|
||||
"processingPurpose": "DATA_ANALYSIS",
|
||||
"employeeDataCategory": "SENSITIVE"
|
||||
},
|
||||
{
|
||||
"value": "Ja, vollautomatisch",
|
||||
"label": "Ja, vollautomatisch",
|
||||
"processingPurpose": "DATA_ANALYSIS",
|
||||
"employeeDataCategory": "SENSITIVE"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"reference": "ki_trainingsdaten",
|
||||
"title": "Trainingsdaten",
|
||||
"description": "Werden Beschäftigtendaten für das Training der KI verwendet?",
|
||||
"type": "RADIOBUTTON",
|
||||
"options": [
|
||||
{
|
||||
"value": "Nein",
|
||||
"label": "Nein",
|
||||
"processingPurpose": "DATA_ANALYSIS",
|
||||
"employeeDataCategory": "NON_CRITICAL"
|
||||
},
|
||||
{
|
||||
"value": "Ja",
|
||||
"label": "Ja",
|
||||
"processingPurpose": "DATA_ANALYSIS",
|
||||
"employeeDataCategory": "SENSITIVE"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user