feat(iace): Einsatzbereich / Branche — filtert branchenspezifische Patterns
Build + Deploy / build-admin-compliance (push) Successful in 2m7s
Build + Deploy / build-backend-compliance (push) Successful in 13s
Build + Deploy / build-ai-sdk (push) Successful in 55s
Build + Deploy / build-developer-portal (push) Successful in 12s
Build + Deploy / build-tts (push) Successful in 34s
Build + Deploy / build-document-crawler (push) Successful in 12s
Build + Deploy / build-dsms-gateway (push) Successful in 13s
Build + Deploy / build-dsms-node (push) Successful in 14s
CI / branch-name (push) Has been skipped
CI / guardrail-integrity (push) Has been skipped
CI / loc-budget (push) Failing after 18s
CI / secret-scan (push) Has been skipped
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / nodejs-build (push) Successful in 3m5s
CI / dep-audit (push) Has been skipped
CI / sbom-scan (push) Has been skipped
CI / test-go (push) Successful in 46s
CI / test-python-backend (push) Successful in 37s
CI / test-python-document-crawler (push) Successful in 26s
CI / test-python-dsms-gateway (push) Successful in 22s
CI / validate-canonical-controls (push) Successful in 15s
Build + Deploy / trigger-orca (push) Successful in 2m19s

Neues Feld "Einsatzbereich" auf Interview-Seite (Sektion 7) mit 15 Branchen.
Pattern Engine bekommt MachineTypes aus MatchInput → branchenfremde Patterns
(Medizin, Aufzug, Bau etc.) feuern nur wenn die Branche ausgewählt ist.

Refactoring: iace_handler_init.go aufgeteilt in init + init_helpers (LOC-Limit).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Benjamin Admin
2026-05-12 09:09:28 +02:00
parent 134b7e7709
commit f5664612ad
5 changed files with 308 additions and 201 deletions
@@ -7,6 +7,7 @@ import {
AREA_OF_USE_OPTIONS,
OPERATING_MODE_OPTIONS,
PERSON_GROUP_OPTIONS,
INDUSTRY_SECTOR_OPTIONS,
type LimitsFormData,
} from '../_types'
@@ -204,6 +205,22 @@ export function LimitsFormSections({ data, onChange, prefilled }: LimitsFormSect
rows={4}
/>
</SectionCard>
{/* Section 7: Einsatzbereich / Branche */}
<SectionCard section={FORM_SECTIONS[6]}>
<div className="bg-blue-50 dark:bg-blue-900/20 border border-blue-200 dark:border-blue-800 rounded-lg p-3 mb-2">
<p className="text-xs text-blue-700 dark:text-blue-300">
Die Branchenauswahl steuert welche branchenspezifischen Gefaehrdungsmuster (z.B. Medizintechnik, Lebensmittel, Aufzuege) bei der Risikoanalyse beruecksichtigt werden. Branchenfremde Muster werden automatisch ausgeblendet.
</p>
</div>
<CheckboxGroup
label="Einsatzbereiche"
values={data.industry_sectors}
onChange={(v) => onChange('industry_sectors', v)}
options={INDUSTRY_SECTOR_OPTIONS}
helpText="Waehlen Sie alle zutreffenden Branchen. Bei Mehrfachauswahl werden alle relevanten Gefaehrdungen beruecksichtigt."
/>
</SectionCard>
</div>
)
}
@@ -35,6 +35,9 @@ export interface LimitsFormData {
// Section 6: Betroffene Personen
person_groups: string[]
qualification_requirements: string
// Section 7: Einsatzbereich / Branche (fuer Pattern-Filterung)
industry_sectors: string[]
}
export const EMPTY_LIMITS_FORM: LimitsFormData = {
@@ -59,6 +62,7 @@ export const EMPTY_LIMITS_FORM: LimitsFormData = {
pneumatic_hydraulic_interfaces: '',
person_groups: [],
qualification_requirements: '',
industry_sectors: [],
}
export const AREA_OF_USE_OPTIONS = [
@@ -77,6 +81,43 @@ export const OPERATING_MODE_OPTIONS = [
'Wartung',
]
export const INDUSTRY_SECTOR_OPTIONS = [
'Allgemeiner Maschinenbau',
'Automobil / Zulieferer',
'Robotik / Cobot',
'Medizintechnik',
'Lebensmittel / Getraenke',
'Verpackung',
'Pharma / Chemie',
'Bau / Baumaschinen',
'Forst / Holzbearbeitung',
'Aufzuege / Foerdertechnik',
'Textil',
'Landmaschinen',
'Druck / Papier',
'Metall / CNC',
'Schweissen / Oberflaechentechnik',
]
/** Maps display labels to MachineTypes for pattern engine filtering */
export const INDUSTRY_TO_MACHINE_TYPES: Record<string, string[]> = {
'Allgemeiner Maschinenbau': ['general_industry'],
'Automobil / Zulieferer': ['automotive'],
'Robotik / Cobot': ['robotics_cobot', 'cobot'],
'Medizintechnik': ['medical_device', 'infusion_pump', 'ventilator', 'patient_monitor'],
'Lebensmittel / Getraenke': ['food_processing'],
'Verpackung': ['packaging'],
'Pharma / Chemie': ['chemical', 'pharmaceutical'],
'Bau / Baumaschinen': ['construction', 'crane', 'excavator'],
'Forst / Holzbearbeitung': ['forestry', 'woodworking', 'circular_saw'],
'Aufzuege / Foerdertechnik': ['elevator', 'lift', 'escalator', 'conveyor'],
'Textil': ['textile', 'spinning', 'weaving', 'finishing'],
'Landmaschinen': ['agricultural', 'tractor', 'harvester'],
'Druck / Papier': ['printing'],
'Metall / CNC': ['cnc', 'metalworking', 'lathe', 'milling'],
'Schweissen / Oberflaechentechnik': ['welding', 'surface_treatment'],
}
export const PERSON_GROUP_OPTIONS = [
'Bedienpersonal',
'Einrichter',
@@ -93,7 +134,7 @@ export interface FormSection {
number: number
title: string
description: string
icon: 'clipboard' | 'target' | 'alert' | 'box' | 'link' | 'users'
icon: 'clipboard' | 'target' | 'alert' | 'box' | 'link' | 'users' | 'briefcase'
}
export const FORM_SECTIONS: FormSection[] = [
@@ -139,4 +180,11 @@ export const FORM_SECTIONS: FormSection[] = [
description: 'Personengruppen und Qualifikationsanforderungen',
icon: 'users',
},
{
id: 'industry_sector',
number: 7,
title: 'Einsatzbereich / Branche',
description: 'Branche bestimmt welche branchenspezifischen Gefaehrdungen beruecksichtigt werden',
icon: 'briefcase',
},
]