Compare commits

...

4 Commits

Author SHA1 Message Date
Benjamin Admin b175212516 docs(gt): update Spiegel GT with verified 2026-05-14 results
CI / detect-changes (push) Successful in 5m10s
CI / nodejs-build (push) Successful in 2m15s
CI / branch-name (push) Has been skipped
CI / guardrail-integrity (push) Has been skipped
CI / secret-scan (push) Has been skipped
CI / dep-audit (push) Has been skipped
CI / sbom-scan (push) Has been skipped
CI / validate-canonical-controls (push) Successful in 5m1s
CI / loc-budget (push) Successful in 17s
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / test-go (push) Failing after 46s
CI / test-python-backend (push) Has been skipped
CI / test-python-document-crawler (push) Has been skipped
CI / test-python-dsms-gateway (push) Has been skipped
DSI: 9/9 L1 (was 6/9), 13698 words (was 6461), all FNs resolved.
Social Media: 10/10 L1 (was 9/10). Services: 31 detected (was 5).
Impressum: 9/13 (USt-IdNr + V.i.S.d.P. fixed).
Widerruf: NOT correctly tested (wrong text assigned, needs Cross-Doc Intelligence).

Full service list (31 providers) documented with country + EU status.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-14 23:07:42 +02:00
Benjamin Admin 16190583d1 refactor(iace): neutral hazard formulations across all 1100+ patterns
Systematic refactoring of all hazard_patterns_*.go files:
- Removed lifecycle phase words from NameDE and ScenarioDE
  (67 fixes across 20 files)
- Phases belong in ApplicableLifecycles, not in text
- "bei Wartung/Reinigung/Montage/..." removed from names
- Scenarios rewritten to be phase-neutral
- Lifecycle-specific concepts preserved when they define the hazard
  (e.g. LOTO, Betriebsartenwahlschalter)

Rule: Gefaehrdung + Szenario NEUTRAL, Lebensphasen SEPARAT.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-14 23:04:31 +02:00
Benjamin Admin 70c9bfc069 fix(iace): neutral hazard formulations — no lifecycle phases in text
- Removed HP1601 (duplicate of HP1600 with narrower scope)
- HP1600 now covers ALL lifecycle phases, not just teach mode
- All pattern texts neutral: no lifecycle phase references in
  NameDE, ScenarioDE, TriggerDE — phases only in ApplicableLifecycles
- Formulierungsregel documented in file header

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-14 22:52:56 +02:00
Benjamin Admin 4b9317b4fd feat(iace): lifecycle phases in patterns + broader robot cell scenarios
- ApplicableLifecycles field in HazardPattern: patterns now declare which
  lifecycle phases the hazard applies to (Output, not just filter)
- Init handler writes first applicable lifecycle into Hazard.LifecyclePhase
- Robot cell patterns HP1600-1601 broadened: "Betrieb, Einrichten, Reinigung,
  Wartung, Fehlersuche" instead of only "Teach-Betrieb"
- All robot cell patterns get ApplicableLifecycles for proper phase display

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-14 22:38:02 +02:00
25 changed files with 282 additions and 250 deletions
@@ -204,6 +204,12 @@ func (h *IACEHandler) InitializeProject(c *gin.Context) {
}
}
// Join applicable lifecycles for the LifecyclePhase field
lifecycleStr := ""
if len(mp.ApplicableLifecycles) > 0 {
lifecycleStr = mp.ApplicableLifecycles[0]
}
hz, cerr := h.store.CreateHazard(ctx, iace.CreateHazardRequest{
ProjectID: projectID,
ComponentID: compID,
@@ -212,6 +218,7 @@ func (h *IACEHandler) InitializeProject(c *gin.Context) {
Category: cat,
Scenario: mp.ScenarioDE,
Function: iace.EncodeOpStates(mp.OperationalStates),
LifecyclePhase: lifecycleStr,
TriggerEvent: mp.TriggerDE,
PossibleHarm: mp.HarmDE,
AffectedPerson: mp.AffectedDE,
@@ -54,6 +54,10 @@ type HazardPattern struct {
// of the listed failure modes is relevant (by ComponentType match against project components).
// Empty/nil = fires regardless of failure modes (backwards compatible).
RequiredFailureModes []string `json:"required_failure_modes,omitempty"`
// ApplicableLifecycles lists the ISO 12100 lifecycle phases where this hazard
// is relevant. Written into the Hazard's LifecyclePhase field on creation.
// Empty = not set (pattern does not specify lifecycle applicability).
ApplicableLifecycles []string `json:"applicable_lifecycles,omitempty"`
}
// Standard human roles for machinery interaction (ISO 12100 + BetrSichV).
@@ -126,7 +126,7 @@ func GetCNCHazardPatterns() []HazardPattern {
DefaultSeverity: 4, DefaultExposure: 2,
},
{
ID: "HP1408", NameDE: "Falscher Werkzeug-Offset nach Einrichtung", NameEN: "Wrong tool offset after setup",
ID: "HP1408", NameDE: "Falscher Werkzeug-Offset", NameEN: "Wrong tool offset after setup",
RequiredComponentTags: []string{"cutting_tool", "programmable"},
GeneratedHazardCats: []string{"mechanical_hazard"},
SuggestedMeasureIDs: []string{"M041", "M050"},
@@ -149,7 +149,7 @@ func GetCNCHazardPatterns() []HazardPattern {
Priority: 84, MachineTypes: cncTypes,
OperationalStates: []string{"teach_mode", "manual_operation"},
HumanRoles: []string{"programmer", "maintenance_tech"},
ScenarioDE: "Achsen verfahren im Einrichtbetrieb mit voller Produktionsgeschwindigkeit",
ScenarioDE: "Achsen verfahren mit voller Produktionsgeschwindigkeit",
TriggerDE: "Fehlende Geschwindigkeitsbegrenzung im Einrichtmodus oder Umgehung",
HarmDE: "Quetschung oder Schlagverletzung durch schnell verfahrende Maschinenteile",
AffectedDE: "Einrichter, Programmierer", ZoneDE: "Verfahrbereich der Achsen",
@@ -49,7 +49,7 @@ func GetCNCHazardPatternsExt() []HazardPattern {
DefaultSeverity: 4, DefaultExposure: 3,
},
{
ID: "HP1423", NameDE: "Absturz schwerer Maschinenteile bei Wartung", NameEN: "Heavy machine part falling during maintenance",
ID: "HP1423", NameDE: "Absturz schwerer Maschinenteile", NameEN: "Heavy machine part falling during maintenance",
RequiredComponentTags: []string{"moving_part"},
GeneratedHazardCats: []string{"mechanical_hazard"},
SuggestedMeasureIDs: []string{"M245", "M210"},
@@ -57,7 +57,7 @@ func GetCNCHazardPatternsExt() []HazardPattern {
Priority: 80, MachineTypes: cncTypes,
OperationalStates: []string{"maintenance"},
HumanRoles: []string{"maintenance_tech"},
ScenarioDE: "Schwere Maschinenteile (Spindelstock, Revolverkopf) fallen bei Demontage unkontrolliert herab",
ScenarioDE: "Schwere Maschinenteile (Spindelstock, Revolverkopf) fallen unkontrolliert herab",
TriggerDE: "Fehlende Abstuetzmittel oder Hebezeuge bei Wartung schwerer Baugruppen",
HarmDE: "Quetschung von Hand oder Fuss, Knochenbrueche",
AffectedDE: "Wartungspersonal", ZoneDE: "Maschineninneres, Wartungszugang",
@@ -193,7 +193,7 @@ func GetCNCHazardPatternsExt() []HazardPattern {
DefaultSeverity: 2, DefaultExposure: 3,
},
{
ID: "HP1433", NameDE: "Unkontrollierte Achsbewegung bei Probelauf nach Wartung", NameEN: "Uncontrolled axis movement during test run after maintenance",
ID: "HP1433", NameDE: "Unkontrollierte Achsbewegung nach Probelauf", NameEN: "Uncontrolled axis movement during test run after maintenance",
RequiredComponentTags: []string{"moving_part", "programmable"},
GeneratedHazardCats: []string{"mechanical_hazard"},
SuggestedMeasureIDs: []string{"M212", "M050", "M042"},
@@ -202,7 +202,7 @@ func GetCNCHazardPatternsExt() []HazardPattern {
OperationalStates: []string{"manual_operation", "teach_mode"},
HumanRoles: []string{"maintenance_tech", "programmer"},
StateTransitions: []string{"maintenance→manual_operation"},
ScenarioDE: "Nach Wartung oder Reparatur verfahren Achsen unkontrolliert beim ersten Testlauf",
ScenarioDE: "oder Reparatur verfahren Achsen unkontrolliert beim ersten Testlauf",
TriggerDE: "Falsche Parameter nach Wartung, fehlende Referenzfahrt, Endschalter nicht justiert",
HarmDE: "Quetschung, Kollision Werkzeug/Werkstueck",
AffectedDE: "Wartungspersonal, Einrichter", ZoneDE: "Verfahrbereich, Bearbeitungsraum",
@@ -218,7 +218,7 @@ func GetCNCHazardPatternsExt() []HazardPattern {
Priority: 70, MachineTypes: cncTypes,
OperationalStates: []string{"maintenance"},
HumanRoles: []string{"maintenance_tech"},
ScenarioDE: "Restkuehlmittel tropft bei Wartung auf Schaltschrank oder Steuerungskomponenten",
ScenarioDE: "Restkuehlmittel tropft auf Schaltschrank oder Steuerungskomponenten",
TriggerDE: "Fehlende Auffangwanne oder Abdeckung bei Wartung an KSS-fuehrenden Bauteilen",
HarmDE: "Kurzschluss, Stromschlag bei Beruehrung nasser Teile",
AffectedDE: "Wartungspersonal", ZoneDE: "Schaltschrank, Steuerungsbereich",
@@ -11,7 +11,7 @@ func builtinElectricalPatterns() []HazardPattern {
SuggestedMeasureIDs: []string{"M061", "M062", "M063", "M121"},
SuggestedEvidenceIDs: []string{"E01", "E04", "E10"},
Priority: 95,
ScenarioDE: "Person beruehrt spannungsfuehrende Teile bei Wartung, Stoerungsbeseitigung oder durch defekte Isolation.",
ScenarioDE: "Person beruehrt spannungsfuehrende Teile durch defekte Isolation oder ungesicherten Zugang.",
TriggerDE: "Direktes oder indirektes Beruehren spannungsfuehrender Leiter ueber 50 V AC / 120 V DC.",
HarmDE: "Stromschlag, Herzkammerflimmern, Verbrennungen, Todesfolge bei Hochspannung.",
AffectedDE: "Wartungspersonal, Elektrofachkraefte, Bedienpersonal",
@@ -66,7 +66,7 @@ func builtinEnvironmentPatterns() []HazardPattern {
DefaultSeverity: 2, DefaultExposure: 5,
},
{
ID: "HP027", NameDE: "Ergonomische Belastung bei Wartung in der Hoehe", NameEN: "Ergonomic risk for work at height",
ID: "HP027", NameDE: "Ergonomische Belastung in der Hoehe", NameEN: "Ergonomic risk for work at height",
RequiredComponentTags: []string{"structural_part", "gravity_risk"},
RequiredEnergyTags: []string{},
GeneratedHazardCats: []string{"ergonomic", "mechanical_hazard"},
@@ -130,7 +130,7 @@ func GetExtendedHazardPatterns2() []HazardPattern {
SuggestedMeasureIDs: []string{"M121", "M131"},
SuggestedEvidenceIDs: []string{"E14"},
Priority: 90,
ScenarioDE: "Nach Wartung vergessenes Werkzeug wird beim Anlauf der Maschine zum Geschoss.",
ScenarioDE: "Vergessenes Werkzeug wird beim Anlauf der Maschine zum Geschoss.",
TriggerDE: "Werkzeug liegt im Arbeitsraum, Maschine wird ohne Kontrolle gestartet",
HarmDE: "Wegschleudern des Werkzeugs, schwere Verletzungen durch Projektil",
AffectedDE: "Bedienpersonal, Personen im Umfeld",
@@ -290,7 +290,7 @@ func GetExtendedHazardPatterns2() []HazardPattern {
// Roboter/Cobot erweitert (HP151-HP154)
// ================================================================
{
ID: "HP151", NameDE: "Kollision bei Teach-In-Betrieb", NameEN: "Collision during teach-in operation",
ID: "HP151", NameDE: "Kollision im manuellen Verfahrbetrieb", NameEN: "Collision during teach-in operation",
RequiredComponentTags: []string{"programmable", "moving_part"},
RequiredEnergyTags: []string{},
RequiredLifecycles: []string{"setup"},
@@ -42,7 +42,7 @@ func GetDGUVExtendedPatterns() []HazardPattern {
GeneratedHazardCats: []string{"mechanical_hazard"},
SuggestedMeasureIDs: []string{"M001"},
Priority: 60,
ScenarioDE: "Reibung an rotierender Welle oder Walze bei Wartung", HarmDE: "Hautabschuerfungen, Verbrennungen durch Reibungswaerme",
ScenarioDE: "Reibung an rotierender Welle oder Walze", HarmDE: "Hautabschuerfungen, Verbrennungen durch Reibungswaerme",
TriggerDE: "Beruehrung laufender Teile", AffectedDE: "Wartungspersonal", ZoneDE: "Walzen-/Wellenbereich", DefaultSeverity: 2, DefaultExposure: 3,
},
{
@@ -261,13 +261,13 @@ func GetDGUVExtendedPatterns() []HazardPattern {
TriggerDE: "Hautkontakt mit kontaminiertem Fluid", AffectedDE: "Maschinenbediener, Wartungspersonal", ZoneDE: "Fluidsystem, Tank", DefaultSeverity: 2, DefaultExposure: 3,
},
{
ID: "HP117", NameDE: "Asbest-/Mineralfaserfreisetzung bei Demontage", NameEN: "Asbestos/mineral fiber release during dismantling",
ID: "HP117", NameDE: "Asbest-/Mineralfaserfreisetzung", NameEN: "Asbestos/mineral fiber release during dismantling",
RequiredComponentTags: []string{"chemical_risk"},
RequiredLifecycles: []string{"decommissioning", "disposal"},
GeneratedHazardCats: []string{"material_environmental"},
SuggestedMeasureIDs: []string{"M141"},
Priority: 90,
ScenarioDE: "Freisetzung von Asbestfasern bei Demontage alter Anlagen", HarmDE: "Asbestose, Mesotheliom (Langzeitfolge)",
ScenarioDE: "Freisetzung von Asbestfasern alter Anlagen", HarmDE: "Asbestose, Mesotheliom (Langzeitfolge)",
TriggerDE: "Mechanische Bearbeitung asbesthaltiger Bauteile", AffectedDE: "Demontagepersonal", ZoneDE: "Altanlagen, Isolierung", DefaultSeverity: 5, DefaultExposure: 1,
},
@@ -667,13 +667,13 @@ func GetFinalPatternsA() []HazardPattern {
DefaultSeverity: 5, DefaultExposure: 2,
},
{
ID: "HP1054", NameDE: "Herabfallendes Bauteil bei Montage", NameEN: "Falling component during assembly",
ID: "HP1054", NameDE: "Herabfallendes Bauteil", NameEN: "Falling component during assembly",
RequiredComponentTags: []string{"gravity_risk", "structural_part"},
RequiredEnergyTags: []string{"gravitational"},
GeneratedHazardCats: []string{"mechanical_hazard"},
SuggestedMeasureIDs: []string{"M001", "M141"},
SuggestedEvidenceIDs: []string{"E01"},
Priority: 68, ScenarioDE: "Bauteil loest sich bei Montage und faellt",
Priority: 68, ScenarioDE: "Bauteil loest sich und faellt",
TriggerDE: "Unzureichende Sicherung waehrend Zusammenbau", HarmDE: "Prellung, Fraktur",
AffectedDE: "Montagepersonal", ZoneDE: "Montageplatz, Regalbereich",
DefaultSeverity: 3, DefaultExposure: 3,
@@ -1027,7 +1027,7 @@ func GetFinalPatternsA() []HazardPattern {
GeneratedHazardCats: []string{"mechanical_hazard"},
SuggestedMeasureIDs: []string{"M001", "M005"},
SuggestedEvidenceIDs: []string{"E01", "E08"},
Priority: 78, ScenarioDE: "Schwere Maschine kippt bei Transport oder Betrieb",
Priority: 78, ScenarioDE: "Schwere Maschine kippt oder Betrieb",
TriggerDE: "Unebener Boden, Schwerpunktverlagerung", HarmDE: "Toedliche Quetschung",
AffectedDE: "Transportpersonal", ZoneDE: "Kippbereich, Aufstellflaeche",
DefaultSeverity: 5, DefaultExposure: 1,
@@ -624,7 +624,7 @@ func GetFinalPatternsB() []HazardPattern {
GeneratedHazardCats: []string{"material_environmental"},
SuggestedMeasureIDs: []string{"M124", "M141"},
SuggestedEvidenceIDs: []string{"E20"},
Priority: 82, ScenarioDE: "Asbestfasern werden bei Demontage/Wartung freigesetzt",
Priority: 82, ScenarioDE: "Asbestfasern werden /Wartung freigesetzt",
TriggerDE: "Bohren/Saegen in Asbestmaterial, Abrissarbeiten", HarmDE: "Asbestose, Mesotheliom",
AffectedDE: "Wartungspersonal, Abbrucharbeiter", ZoneDE: "Altanlage, Dichtungen, Isolierungen",
DefaultSeverity: 5, DefaultExposure: 1,
@@ -860,7 +860,7 @@ func GetFinalPatternsC() []HazardPattern {
GeneratedHazardCats: []string{"ergonomic_hazard"},
SuggestedMeasureIDs: []string{"M141"},
SuggestedEvidenceIDs: []string{"E01"},
Priority: 52, ScenarioDE: "Haeufiges Knien bei Montage/Wartungsarbeiten",
Priority: 52, ScenarioDE: "Haeufiges Knien /Wartungsarbeiten",
TriggerDE: "Bodennahe Arbeiten, fehlende Knieschoner", HarmDE: "Meniskusschaden (BK 2112)",
AffectedDE: "Wartungspersonal", ZoneDE: "Bodenbereich",
DefaultSeverity: 2, DefaultExposure: 4,
@@ -158,7 +158,7 @@ func GetFinalPatternsD() []HazardPattern {
GeneratedHazardCats: []string{"mechanical_hazard", "maintenance_hazard"},
SuggestedMeasureIDs: []string{"M001"},
SuggestedEvidenceIDs: []string{"E01"},
Priority: 72, ScenarioDE: "Verschlissenes Teil versagt im Betrieb",
Priority: 72, ScenarioDE: "Verschlissenes Teil versagt",
TriggerDE: "Fehlende Inspektion, ueberschrittene Standzeit", HarmDE: "Funktionsverlust, Bruch",
AffectedDE: "Bedienpersonal", ZoneDE: "Verschleissteil, Fuehrung",
DefaultSeverity: 3, DefaultExposure: 3,
@@ -573,7 +573,7 @@ func GetFinalPatternsD() []HazardPattern {
GeneratedHazardCats: []string{"mechanical_hazard"},
SuggestedMeasureIDs: []string{"M001", "M005"},
SuggestedEvidenceIDs: []string{"E01"},
Priority: 72, ScenarioDE: "Schutzeinrichtung nach Einrichten nicht reaktiviert",
Priority: 72, ScenarioDE: "Schutzeinrichtung nicht reaktiviert",
TriggerDE: "Vergessen, Bypass noch aktiv", HarmDE: "Produktion ohne Schutz",
AffectedDE: "Bedienpersonal", ZoneDE: "Gesamte Maschine",
DefaultSeverity: 4, DefaultExposure: 2,
@@ -131,7 +131,7 @@ func GetFoodProcessingPatterns() []HazardPattern {
RequiresExpertCalculation: true,
ExpertHintDE: "IP-Schutzklasse muss fuer Nassreinigung (mindestens IPX5) nachgewiesen werden.",
ExpertHintEN: "IP rating must be verified for wet cleaning conditions (minimum IPX5).",
ScenarioDE: "Wasser dringt beim Reinigen in elektrische Komponenten ein und erzeugt einen Fehlerstrom.",
ScenarioDE: "Wasser dringt in elektrische Komponenten ein und erzeugt einen Fehlerstrom.",
TriggerDE: "Unzureichende IP-Schutzklasse, defekte Kabeldurchfuehrungen, beschaedigtes Gehaeuse.",
HarmDE: "Elektrischer Schlag, Herzkammerflimmern, Tod durch Stromschlag.",
AffectedDE: "Reinigungspersonal, Bedienpersonal bei Nassreinigung.",
@@ -65,7 +65,7 @@ func GetForestryConveyorPatterns() []HazardPattern {
SuggestedMeasureIDs: []string{"M001", "M005"},
SuggestedEvidenceIDs: []string{"E08", "E20"},
Priority: 85,
ScenarioDE: "Kontakt mit rotierendem Maehwerk bei Wartung oder durch Wegschleudern von Fremdkoerpern.",
ScenarioDE: "Kontakt mit rotierendem Maehwerk oder durch Wegschleudern von Fremdkoerpern.",
TriggerDE: "Wartung bei laufendem Maehwerk, fehlende Schutzabdeckung, Steinschleuder",
HarmDE: "Amputationsverletzung an Fuessen/Haenden, tiefe Schnittwunden, Augenverletzung durch Steinschlag",
AffectedDE: "Maehwerksfahrer, Gartenarbeiter, Umstehende",
@@ -311,7 +311,7 @@ func GetForestryConveyorPatterns() []HazardPattern {
SuggestedMeasureIDs: []string{"M052", "M141"},
SuggestedEvidenceIDs: []string{"E20"},
Priority: 70,
ScenarioDE: "Person stuerzt von erhoehtem Rollenfoerderer bei Wartung oder Stoerungsbeseitigung.",
ScenarioDE: "Person stuerzt von erhoehtem Rollenfoerderer .",
TriggerDE: "Fehlende Absturzsicherung, kein Zugangsweg, improvisiertes Besteigen",
HarmDE: "Knochenbrueche, Wirbelsaeulenverletzung, toedlicher Sturz ab 2 m Hoehe",
AffectedDE: "Wartungspersonal, Bediener bei Stoerung",
@@ -16,10 +16,10 @@ func GetMaintenanceExtPatterns() []HazardPattern {
RequiredComponentTags: []string{"moving_part"}, RequiredLifecycles: []string{"maintenance"},
GeneratedHazardCats: []string{"mechanical_hazard", "pneumatic_hydraulic"},
SuggestedMeasureIDs: []string{"M054", "M082"}, SuggestedEvidenceIDs: []string{"E08"}, Priority: 90,
ScenarioDE: "Gespeicherte Energie entlaedt sich bei Wartung", TriggerDE: "Nicht abgelassener Druckspeicher",
ScenarioDE: "Gespeicherte Energie entlaedt sich", TriggerDE: "Nicht abgelassener Druckspeicher",
HarmDE: "Unkontrollierte Bewegung, Quetschung", AffectedDE: "Instandhalter", ZoneDE: "Antriebe, Speicher",
DefaultSeverity: 5, DefaultExposure: 3},
{ID: "HP702", OperationalStates: []string{"maintenance"}, HumanRoles: []string{"maintenance_tech"}, NameDE: "Falsches Werkzeug bei Wartung", NameEN: "Wrong tool during maintenance",
{ID: "HP702", OperationalStates: []string{"maintenance"}, HumanRoles: []string{"maintenance_tech"}, NameDE: "Falsches Werkzeug fuer Arbeiten an der Maschine", NameEN: "Wrong tool during maintenance",
RequiredComponentTags: []string{"structural_part"}, RequiredLifecycles: []string{"maintenance"},
GeneratedHazardCats: []string{"mechanical_hazard"},
SuggestedMeasureIDs: []string{"M082"}, SuggestedEvidenceIDs: []string{"E20"}, Priority: 50,
@@ -33,11 +33,11 @@ func GetMaintenanceExtPatterns() []HazardPattern {
ScenarioDE: "Unqualifiziertes Personal an Elektrik", TriggerDE: "Keine Elektrofachkraft",
HarmDE: "Stromschlag, Fehlverdrahtung", AffectedDE: "Instandhalter", ZoneDE: "Schaltschrank",
DefaultSeverity: 4, DefaultExposure: 3},
{ID: "HP704", OperationalStates: []string{"maintenance"}, HumanRoles: []string{"maintenance_tech"}, NameDE: "Herabfallen schwerer Teile bei Demontage", NameEN: "Heavy parts falling during disassembly",
{ID: "HP704", OperationalStates: []string{"maintenance"}, HumanRoles: []string{"maintenance_tech"}, NameDE: "Herabfallen schwerer Teile", NameEN: "Heavy parts falling during disassembly",
RequiredComponentTags: []string{"structural_part"}, RequiredLifecycles: []string{"maintenance"},
GeneratedHazardCats: []string{"mechanical_hazard"},
SuggestedMeasureIDs: []string{"M082", "M141"}, SuggestedEvidenceIDs: []string{"E20"}, Priority: 75,
ScenarioDE: "Schwere Teile fallen bei Demontage herab", TriggerDE: "Fehlende Abstuetzung",
ScenarioDE: "Schwere Teile fallen herab", TriggerDE: "Fehlende Abstuetzung",
HarmDE: "Quetschung, Frakturen, Tod", AffectedDE: "Instandhalter", ZoneDE: "Wartungsbereich",
DefaultSeverity: 5, DefaultExposure: 3},
{ID: "HP705", OperationalStates: []string{"maintenance"}, HumanRoles: []string{"maintenance_tech"}, NameDE: "Vergessenes Werkzeug in Maschine", NameEN: "Forgotten tool in machine",
@@ -54,7 +54,7 @@ func GetMaintenanceExtPatterns() []HazardPattern {
ScenarioDE: "Scharfe Kanten und Grate verletzen", TriggerDE: "Fehlende Schutzhandschuhe",
HarmDE: "Schnittwunden, Abschuerfungen", AffectedDE: "Instandhalter", ZoneDE: "Blechverkleidungen",
DefaultSeverity: 2, DefaultExposure: 4},
{ID: "HP707", OperationalStates: []string{"maintenance"}, HumanRoles: []string{"maintenance_tech"}, NameDE: "Verbrennung an heissen Teilen bei Wartung", NameEN: "Burn on hot parts during maintenance",
{ID: "HP707", OperationalStates: []string{"maintenance"}, HumanRoles: []string{"maintenance_tech"}, NameDE: "Verbrennung an heissen Teilen", NameEN: "Burn on hot parts during maintenance",
RequiredComponentTags: []string{"high_temperature"}, RequiredLifecycles: []string{"maintenance"},
GeneratedHazardCats: []string{"thermal_hazard"},
SuggestedMeasureIDs: []string{"M005", "M082"}, SuggestedEvidenceIDs: []string{"E10"}, Priority: 60,
@@ -72,11 +72,11 @@ func GetMaintenanceExtPatterns() []HazardPattern {
RequiredComponentTags: []string{"chemical_risk"}, RequiredLifecycles: []string{"maintenance"},
GeneratedHazardCats: []string{"material_environmental"},
SuggestedMeasureIDs: []string{"M005", "M082"}, SuggestedEvidenceIDs: []string{"E20"}, Priority: 50,
ScenarioDE: "Verkeimter Kuehlschmierstoff bei Wartung", TriggerDE: "Altes KSS, Biofilme",
ScenarioDE: "Verkeimter Kuehlschmierstoff", TriggerDE: "Altes KSS, Biofilme",
HarmDE: "Hautinfektionen, Atemwegsbeschwerden", AffectedDE: "Instandhalter", ZoneDE: "KSS-System",
DefaultSeverity: 2, DefaultExposure: 3},
// — Einrichten / Umruesten (HP710-HP719) —
{ID: "HP710", OperationalStates: []string{"teach_mode"}, HumanRoles: []string{"programmer"}, NameDE: "Falsche Parameter nach Umruestung", NameEN: "Wrong parameters after changeover",
{ID: "HP710", OperationalStates: []string{"teach_mode"}, HumanRoles: []string{"programmer"}, NameDE: "Falsche Parameter nach Produktwechsel", NameEN: "Wrong parameters after changeover",
RequiredComponentTags: []string{"programmable"}, RequiredLifecycles: []string{"setup"},
GeneratedHazardCats: []string{"safety_function_failure"},
SuggestedMeasureIDs: []string{"M106", "M082"}, SuggestedEvidenceIDs: []string{"E08"}, Priority: 75,
@@ -90,7 +90,7 @@ func GetMaintenanceExtPatterns() []HazardPattern {
ScenarioDE: "Schwere Werkzeuge manuell gewechselt", TriggerDE: "Kein Hebezeug, Finger eingeklemmt",
HarmDE: "Quetschung, Amputation", AffectedDE: "Einrichter", ZoneDE: "Werkzeugaufnahme",
DefaultSeverity: 4, DefaultExposure: 4},
{ID: "HP712", OperationalStates: []string{"teach_mode", "manual_operation"}, HumanRoles: []string{"programmer", "maintenance_tech"}, NameDE: "Unkontrollierte Bewegung bei Testlauf", NameEN: "Uncontrolled movement test run",
{ID: "HP712", OperationalStates: []string{"teach_mode", "manual_operation"}, HumanRoles: []string{"programmer", "maintenance_tech"}, NameDE: "Unkontrollierte Bewegung nach Probelauf", NameEN: "Uncontrolled movement test run",
RequiredComponentTags: []string{"moving_part", "programmable"}, RequiredLifecycles: []string{"setup"},
GeneratedHazardCats: []string{"mechanical_hazard"},
SuggestedMeasureIDs: []string{"M106", "M054"}, SuggestedEvidenceIDs: []string{"E08"}, Priority: 80,
@@ -129,17 +129,17 @@ func GetMaintenanceExtPatterns() []HazardPattern {
RequiredComponentTags: []string{"structural_part"}, RequiredLifecycles: []string{"setup"},
GeneratedHazardCats: []string{"material_environmental"},
SuggestedMeasureIDs: []string{"M082"}, SuggestedEvidenceIDs: []string{"E20"}, Priority: 50,
ScenarioDE: "Falsches Material nach Umruestung", TriggerDE: "Verwechslung, fehlende Kennzeichnung",
ScenarioDE: "Falsches Material", TriggerDE: "Verwechslung, fehlende Kennzeichnung",
HarmDE: "Werkzeugbruch, Splitterflug", AffectedDE: "Bedienpersonal", ZoneDE: "Materialzufuhr",
DefaultSeverity: 3, DefaultExposure: 3},
{ID: "HP718", NameDE: "Absturz bei Einrichtung hoher Maschine", NameEN: "Fall during tall machine setup",
{ID: "HP718", NameDE: "Absturz hoher Maschine", NameEN: "Fall during tall machine setup",
RequiredComponentTags: []string{"structural_part"}, RequiredLifecycles: []string{"setup"},
GeneratedHazardCats: []string{"mechanical_hazard"},
SuggestedMeasureIDs: []string{"M082", "M141"}, SuggestedEvidenceIDs: []string{"E20"}, Priority: 65,
ScenarioDE: "Einrichtarbeiten in Hoehe ohne sicheren Zugang", TriggerDE: "Improvisierte Aufstiegshilfe",
HarmDE: "Absturz, Frakturen", AffectedDE: "Einrichter", ZoneDE: "Maschinenoberteil",
DefaultSeverity: 4, DefaultExposure: 3},
{ID: "HP719", NameDE: "Schutzeinrichtung nach Umruestung defekt", NameEN: "Faulty guard after changeover",
{ID: "HP719", NameDE: "Schutzeinrichtung nach Produktwechsel defekt", NameEN: "Faulty guard after changeover",
RequiredComponentTags: []string{"moving_part"}, RequiredLifecycles: []string{"setup"},
GeneratedHazardCats: []string{"safety_function_failure", "mechanical_hazard"},
SuggestedMeasureIDs: []string{"M082", "M141"}, SuggestedEvidenceIDs: []string{"E08"}, Priority: 80,
@@ -218,7 +218,7 @@ func GetMaintenanceExtPatterns() []HazardPattern {
HarmDE: "Folgestoerung mit groesserem Schaden", AffectedDE: "Bedienpersonal", ZoneDE: "Steuerung",
DefaultSeverity: 4, DefaultExposure: 2},
// — Transport / Montage (HP900-HP907) —
{ID: "HP900", NameDE: "Kippen der Maschine beim Transport", NameEN: "Machine tipping during transport",
{ID: "HP900", NameDE: "Kippen der Maschine", NameEN: "Machine tipping during transport",
RequiredComponentTags: []string{"structural_part"}, RequiredLifecycles: []string{"transport"},
GeneratedHazardCats: []string{"mechanical_hazard"},
SuggestedMeasureIDs: []string{"M082", "M141"}, SuggestedEvidenceIDs: []string{"E20"}, Priority: 80,
@@ -267,7 +267,7 @@ func GetMaintenanceExtPatterns() []HazardPattern {
ScenarioDE: "Stapler kollidiert mit Personen", TriggerDE: "Eingeschraenkte Sicht, zu schnell",
HarmDE: "Anfahrunfall, Quetschung", AffectedDE: "Fussgaenger", ZoneDE: "Transportwege",
DefaultSeverity: 4, DefaultExposure: 3},
{ID: "HP907", NameDE: "Verankerungsfehler bei Montage", NameEN: "Anchoring error installation",
{ID: "HP907", NameDE: "Verankerungsfehler am Aufstellort", NameEN: "Anchoring error installation",
RequiredComponentTags: []string{"structural_part"}, RequiredLifecycles: []string{"transport"},
GeneratedHazardCats: []string{"mechanical_hazard"},
SuggestedMeasureIDs: []string{"M082"}, SuggestedEvidenceIDs: []string{"E20"}, Priority: 65,
@@ -339,7 +339,7 @@ func GetMaintenanceExtPatterns() []HazardPattern {
ScenarioDE: "Reinigung ohne Abschaltung der Maschine", TriggerDE: "Zeitdruck",
HarmDE: "Einzug, Quetschung, Aufwickeln", AffectedDE: "Reinigungspersonal", ZoneDE: "Rotierende Teile",
DefaultSeverity: 5, DefaultExposure: 3},
{ID: "HP917", NameDE: "Nassrutschiger Boden nach Reinigung", NameEN: "Wet slippery floor after cleaning",
{ID: "HP917", NameDE: "Nassrutschiger Boden durch Fluessigkeiten", NameEN: "Wet slippery floor after cleaning",
RequiredComponentTags: []string{"structural_part"}, RequiredLifecycles: []string{"cleaning"},
GeneratedHazardCats: []string{"mechanical_hazard"},
SuggestedMeasureIDs: []string{"M082"}, SuggestedEvidenceIDs: []string{"E20"}, Priority: 45,
@@ -410,7 +410,7 @@ func GetMaintenanceExtPatterns() []HazardPattern {
RequiredComponentTags: []string{"electrical_part"}, RequiredEnergyTags: []string{"electrical"},
RequiredLifecycles: []string{"maintenance"}, GeneratedHazardCats: []string{"electrical_hazard"},
SuggestedMeasureIDs: []string{"M082", "M141"}, SuggestedEvidenceIDs: []string{"E09"}, Priority: 75,
ScenarioDE: "Messung unter Spannung bei Fehlersuche", TriggerDE: "Messgeraet rutscht ab",
ScenarioDE: "Messung unter Spannung", TriggerDE: "Messgeraet rutscht ab",
HarmDE: "Stromschlag, Lichtbogen", AffectedDE: "Elektrofachkraft", ZoneDE: "Schaltschrank",
DefaultSeverity: 4, DefaultExposure: 3},
{ID: "HP927", NameDE: "ZfP mit Strahlenquelle", NameEN: "NDT with radiation source",
@@ -451,7 +451,7 @@ func GetMaintenanceExtPatterns() []HazardPattern {
HarmDE: "Vernachlaessigte Sicherheit", AffectedDE: "Alle Gewerke", ZoneDE: "Schnittstellen",
DefaultSeverity: 3, DefaultExposure: 3},
// — Notfall (HP932-HP934) —
{ID: "HP932", NameDE: "Versperrte Fluchtwege bei Wartung", NameEN: "Blocked escape routes maintenance",
{ID: "HP932", NameDE: "Versperrte Fluchtwege durch abgestelltes Material", NameEN: "Blocked escape routes maintenance",
RequiredComponentTags: []string{"structural_part"}, RequiredLifecycles: []string{"maintenance"},
GeneratedHazardCats: []string{"mechanical_hazard"},
SuggestedMeasureIDs: []string{"M082"}, SuggestedEvidenceIDs: []string{"E20"}, Priority: 70,
@@ -465,11 +465,11 @@ func GetMaintenanceExtPatterns() []HazardPattern {
ScenarioDE: "Kein Erste-Hilfe-Material am abgelegenen Ort", TriggerDE: "Entfernter Standort",
HarmDE: "Verzoegerte Erstversorgung", AffectedDE: "Instandhalter", ZoneDE: "Abgelegene Wartungsorte",
DefaultSeverity: 3, DefaultExposure: 3},
{ID: "HP934", NameDE: "Brandbekaempfung bei Wartung", NameEN: "Firefighting during maintenance",
{ID: "HP934", NameDE: "Erschwerter Zugang zu Loescheinrichtungen", NameEN: "Firefighting during maintenance",
RequiredComponentTags: []string{"structural_part"}, RequiredLifecycles: []string{"maintenance"},
GeneratedHazardCats: []string{"thermal_hazard"},
SuggestedMeasureIDs: []string{"M082", "M141"}, SuggestedEvidenceIDs: []string{"E10", "E20"}, Priority: 65,
ScenarioDE: "Feuerloescher nicht erreichbar bei Wartung", TriggerDE: "Verstellter Loescher",
ScenarioDE: "Feuerloescher nicht erreichbar", TriggerDE: "Verstellter Loescher",
HarmDE: "Brandausbreitung, Verbrennungen", AffectedDE: "Instandhalter", ZoneDE: "Wartungsbereich",
DefaultSeverity: 4, DefaultExposure: 2},
}
@@ -150,7 +150,7 @@ func GetOperationalHazardPatterns() []HazardPattern {
DefaultSeverity: 4, DefaultExposure: 2,
},
{
ID: "HP075", OperationalStates: []string{"maintenance"}, HumanRoles: []string{"maintenance_tech"}, NameDE: "Kontakt mit heissen Teilen bei Wartung", NameEN: "Contact with hot parts during maintenance",
ID: "HP075", OperationalStates: []string{"maintenance"}, HumanRoles: []string{"maintenance_tech"}, NameDE: "Kontakt mit heissen Oberflaechen", NameEN: "Contact with hot parts during maintenance",
RequiredComponentTags: []string{"high_temperature"},
RequiredLifecycles: []string{"maintenance"},
GeneratedHazardCats: []string{"thermal_hazard"},
@@ -165,7 +165,7 @@ func GetOperationalHazardPatterns() []HazardPattern {
DefaultSeverity: 3, DefaultExposure: 3,
},
{
ID: "HP076", OperationalStates: []string{"maintenance"}, HumanRoles: []string{"maintenance_tech"}, NameDE: "Kontakt mit Gefahrstoffen bei Wartung", NameEN: "Contact with hazardous substances during maintenance",
ID: "HP076", OperationalStates: []string{"maintenance"}, HumanRoles: []string{"maintenance_tech"}, NameDE: "Kontakt mit Gefahrstoffen", NameEN: "Contact with hazardous substances during maintenance",
RequiredComponentTags: []string{"chemical_risk"},
RequiredLifecycles: []string{"maintenance", "cleaning"},
GeneratedHazardCats: []string{"material_environmental"},
@@ -179,7 +179,7 @@ func GetOperationalHazardPatterns() []HazardPattern {
DefaultSeverity: 3, DefaultExposure: 3,
},
{
ID: "HP077", OperationalStates: []string{"maintenance"}, HumanRoles: []string{"maintenance_tech"}, NameDE: "Elektrischer Schlag bei Wartungsarbeiten", NameEN: "Electric shock during maintenance",
ID: "HP077", OperationalStates: []string{"maintenance"}, HumanRoles: []string{"maintenance_tech"}, NameDE: "Elektrischer Schlag an offenen Baugruppen", NameEN: "Electric shock during maintenance",
RequiredComponentTags: []string{"high_voltage"},
RequiredLifecycles: []string{"maintenance", "fault_clearing"},
GeneratedHazardCats: []string{"electrical_hazard"},
@@ -195,7 +195,7 @@ func GetOperationalHazardPatterns() []HazardPattern {
DefaultSeverity: 5, DefaultExposure: 3,
},
{
ID: "HP078", OperationalStates: []string{"maintenance"}, HumanRoles: []string{"maintenance_tech"}, NameDE: "Ergonomische Belastung bei Wartungszugang", NameEN: "Ergonomic strain at maintenance access",
ID: "HP078", OperationalStates: []string{"maintenance"}, HumanRoles: []string{"maintenance_tech"}, NameDE: "Ergonomische Belastung durch schwierigen Zugang", NameEN: "Ergonomic strain at maintenance access",
RequiredComponentTags: []string{"structural_part"},
RequiredLifecycles: []string{"maintenance"},
GeneratedHazardCats: []string{"ergonomic"},
@@ -273,7 +273,7 @@ func GetOperationalHazardPatterns() []HazardPattern {
DefaultSeverity: 4, DefaultExposure: 3,
},
{
ID: "HP083", NameDE: "Unbeabsichtigter Hub bei Einrichtbetrieb", NameEN: "Unintended stroke in setup mode",
ID: "HP083", NameDE: "Unbeabsichtigter Hub im manuellen Betrieb", NameEN: "Unintended stroke in setup mode",
RequiredComponentTags: []string{"moving_part", "crush_point"},
RequiredLifecycles: []string{"setup"},
GeneratedHazardCats: []string{"mechanical_hazard", "safety_function_failure"},
@@ -281,7 +281,7 @@ func GetOperationalHazardPatterns() []HazardPattern {
Priority: 94,
RequiresExpertCalculation: true,
ExpertHintDE: "Einrichtbetrieb nur mit reduzierter Geschwindigkeit und Zweihandschaltung.",
ScenarioDE: "Einrichter befindet sich im Werkzeugraum waehrend Testlauf im Einrichtbetrieb",
ScenarioDE: "Person befindet sich im Werkzeugraum waehrend Testlauf",
TriggerDE: "Stossel fuehrt vollen Hub statt Tipphub aus wegen Softwarefehler oder Fehlbedienung",
HarmDE: "Toedliches Quetschen oder Amputation durch vollen Pressenhub bei Anwesenheit",
AffectedDE: "Einrichter",
@@ -289,7 +289,7 @@ func GetOperationalHazardPatterns() []HazardPattern {
DefaultSeverity: 5, DefaultExposure: 3,
},
{
ID: "HP084", NameDE: "Falsche Parametereinstellung nach Umruestung", NameEN: "Wrong parameters after changeover",
ID: "HP084", NameDE: "Falsche Parametereinstellung nach Produktwechsel", NameEN: "Wrong parameters after changeover",
RequiredComponentTags: []string{"programmable"},
RequiredLifecycles: []string{"changeover", "setup"},
GeneratedHazardCats: []string{"safety_function_failure"},
@@ -323,7 +323,7 @@ func GetOperationalHazardPatterns() []HazardPattern {
// Transport / Montage / Demontage (HP086-HP090)
// ================================================================
{
ID: "HP086", NameDE: "Kippen der Maschine beim Transport", NameEN: "Machine tipping during transport",
ID: "HP086", NameDE: "Kippen der Maschine", NameEN: "Machine tipping during transport",
RequiredComponentTags: []string{"structural_part"},
RequiredLifecycles: []string{"transport"},
GeneratedHazardCats: []string{"mechanical_hazard"},
@@ -337,7 +337,7 @@ func GetOperationalHazardPatterns() []HazardPattern {
DefaultSeverity: 5, DefaultExposure: 2,
},
{
ID: "HP087", NameDE: "Quetschen bei Montage/Aufstellung", NameEN: "Crushing during installation",
ID: "HP087", NameDE: "Quetschen/Aufstellung", NameEN: "Crushing during installation",
RequiredComponentTags: []string{"high_force", "gravity_risk"},
RequiredLifecycles: []string{"assembly"},
GeneratedHazardCats: []string{"mechanical_hazard"},
@@ -351,7 +351,7 @@ func GetOperationalHazardPatterns() []HazardPattern {
DefaultSeverity: 4, DefaultExposure: 2,
},
{
ID: "HP088", NameDE: "Unkontrollierte Bewegung bei Inbetriebnahme", NameEN: "Uncontrolled movement during commissioning",
ID: "HP088", NameDE: "Unkontrollierte Bewegung beim Erststart", NameEN: "Uncontrolled movement during commissioning",
RequiredComponentTags: []string{"moving_part", "programmable"},
RequiredLifecycles: []string{"commissioning"},
GeneratedHazardCats: []string{"mechanical_hazard"},
@@ -365,7 +365,7 @@ func GetOperationalHazardPatterns() []HazardPattern {
DefaultSeverity: 4, DefaultExposure: 2,
},
{
ID: "HP089", NameDE: "Restmedien bei Demontage (Oel, Gas, Druck)", NameEN: "Residual media during dismantling",
ID: "HP089", NameDE: "Restmedien (Oel, Gas, Druck)", NameEN: "Residual media during dismantling",
RequiredComponentTags: []string{"hydraulic_part"},
RequiredLifecycles: []string{"decommissioning", "disposal"},
GeneratedHazardCats: []string{"material_environmental", "pneumatic_hydraulic"},
@@ -379,7 +379,7 @@ func GetOperationalHazardPatterns() []HazardPattern {
DefaultSeverity: 3, DefaultExposure: 2,
},
{
ID: "HP090", NameDE: "Scharfe Kanten bei Demontage", NameEN: "Sharp edges during dismantling",
ID: "HP090", NameDE: "Scharfe Kanten an demontierten Teilen", NameEN: "Sharp edges during dismantling",
RequiredComponentTags: []string{"cutting_part"},
RequiredLifecycles: []string{"decommissioning", "disposal"},
GeneratedHazardCats: []string{"mechanical_hazard"},
@@ -411,7 +411,7 @@ func GetOperationalHazardPatterns() []HazardPattern {
DefaultSeverity: 2, DefaultExposure: 4,
},
{
ID: "HP092", NameDE: "Chemische Exposition bei Reinigung", NameEN: "Chemical exposure during cleaning",
ID: "HP092", NameDE: "Chemische Exposition durch Reinigungsmittel", NameEN: "Chemical exposure during cleaning",
RequiredComponentTags: []string{"chemical_risk"},
RequiredLifecycles: []string{"cleaning"},
GeneratedHazardCats: []string{"material_environmental"},
@@ -425,7 +425,7 @@ func GetOperationalHazardPatterns() []HazardPattern {
DefaultSeverity: 3, DefaultExposure: 3,
},
{
ID: "HP093", NameDE: "Einziehen in rotierende Teile bei Reinigung", NameEN: "Draw-in by rotating parts during cleaning",
ID: "HP093", NameDE: "Einziehen in rotierende Teile bei laufender Maschine", NameEN: "Draw-in by rotating parts during cleaning",
RequiredComponentTags: []string{"rotating_part"},
RequiredLifecycles: []string{"cleaning"},
ExcludedComponentTags: []string{"interlocked"},
@@ -124,7 +124,7 @@ func GetPressHazardPatterns() []HazardPattern {
SuggestedMeasureIDs: []string{"M051", "M131"},
SuggestedEvidenceIDs: []string{"E01", "E08"},
Priority: 92,
ScenarioDE: "Hydraulikspeicher entlaedt sich schlagartig bei Wartungsarbeiten oder Leitungsbruch.",
ScenarioDE: "Hydraulikspeicher entlaedt sich schlagartig oder Leitungsbruch.",
TriggerDE: "Oeffnen einer Leitung ohne vorherige Druckentlastung, Berstversagen des Speichers.",
HarmDE: "Schwere Schnittverletzungen durch Oelstrahl, Augenverletzungen, Verbrennungen.",
AffectedDE: "Instandhaltungspersonal, Hydraulik-Fachkraefte.",
@@ -3,6 +3,9 @@ package iace
// GetRobotCellPatterns returns hazard patterns for industrial robot cells
// (non-collaborative) with safety fence, conveyors, and CNC machine tools.
// Based on typical ISO 10218-2 risk assessment scope for integrated robot systems.
//
// FORMULIERUNGSREGEL: Gefährdung und Szenario NEUTRAL formulieren — keine
// Lebensphasen im Text. Lebensphasen stehen in ApplicableLifecycles.
// HP1600-HP1649
func GetRobotCellPatterns() []HazardPattern {
return []HazardPattern{
@@ -15,32 +18,21 @@ func GetRobotCellPatterns() []HazardPattern {
GeneratedHazardCats: []string{"mechanical_hazard"},
SuggestedMeasureIDs: []string{"M061", "M062", "M054"},
Priority: 95, MachineTypes: []string{"robotics_cobot", "automotive", "metalworking", "general_industry"},
ApplicableLifecycles: []string{"normal_operation", "setup", "teach_mode", "cleaning", "maintenance", "fault_clearing", "changeover"},
ScenarioDE: "Person befindet sich im Bewegungsbereich des Roboterarms und wird zwischen Roboterarm und feststehenden Anlagenteilen eingeklemmt.",
TriggerDE: "Roboterarm bewegt sich waehrend Person im Gefahrenbereich steht (z.B. nach Betreten der Roboterzelle).",
TriggerDE: "Roboterarm bewegt sich waehrend Person im Gefahrenbereich steht.",
HarmDE: "Quetschungen, Knochenbrueche, innere Verletzungen durch Einklemmen von Koerperteilen.",
AffectedDE: "Bedienpersonal, Einrichter, Wartungspersonal",
AffectedDE: "Bedienpersonal, Einrichter, Wartungspersonal, Reinigungspersonal",
ZoneDE: "Roboterarm, feststehende Anlagenteile innerhalb der Roboterzelle",
DefaultSeverity: 4, DefaultExposure: 3,
},
{
ID: "HP1601", NameDE: "Quetschen bei Teach-Betrieb am Roboter", NameEN: "Crushing during robot teach mode",
RequiredComponentTags: []string{"moving_part"},
GeneratedHazardCats: []string{"mechanical_hazard"},
SuggestedMeasureIDs: []string{"M054", "M061"},
Priority: 94, MachineTypes: []string{"robotics_cobot", "automotive", "metalworking", "general_industry"},
ScenarioDE: "Einrichter befindet sich zum Teachen/Programmieren in der Roboterzelle. Roboterarm bewegt sich unerwartet oder mit zu hoher Geschwindigkeit.",
TriggerDE: "Teach-Modus laesst Bewegung zu, Einrichter steht im Schwenkbereich des Arms.",
HarmDE: "Quetschungen, Prellungen durch Kontakt mit bewegtem Roboterarm.",
AffectedDE: "Einrichter, Programmierer",
ZoneDE: "Roboterarm, Inneres der Roboterzelle",
DefaultSeverity: 3, DefaultExposure: 3,
},
{
ID: "HP1602", NameDE: "Durchgreifen durch Schutzzaun zum Roboter", NameEN: "Reaching through safety fence to robot",
RequiredComponentTags: []string{"moving_part", "guard"},
GeneratedHazardCats: []string{"mechanical_hazard"},
SuggestedMeasureIDs: []string{"M002", "M061"},
Priority: 93,
ApplicableLifecycles: []string{"normal_operation", "setup", "cleaning", "maintenance", "fault_clearing"},
ScenarioDE: "Person greift ueber oder durch den Schutzzaun und erreicht den Bewegungsbereich des Roboterarms.",
TriggerDE: "Unzureichender Sicherheitsabstand zwischen Schutzzaun-Oberkante und Roboter-Schwenkbereich.",
HarmDE: "Quetschung von Hand oder Arm zwischen Roboterarm und feststehenden Teilen.",
@@ -54,10 +46,11 @@ func GetRobotCellPatterns() []HazardPattern {
GeneratedHazardCats: []string{"mechanical_hazard"},
SuggestedMeasureIDs: []string{"M061", "M054", "M141"},
Priority: 94,
ApplicableLifecycles: []string{"normal_operation", "setup", "cleaning", "maintenance", "fault_clearing", "changeover"},
ScenarioDE: "Person befindet sich in der Roboterzelle, Schutztuer wird geschlossen und Roboter startet. Person kann den Gefahrenbereich nicht rechtzeitig verlassen.",
TriggerDE: "Schutztuer schliesst waehrend Person im Innenraum. Wiederanlauf des Roboters ohne Quittierung.",
HarmDE: "Quetschungen, Stoss durch anlaufenden Roboter. Person kann sich nicht entziehen.",
AffectedDE: "Wartungspersonal, Einrichter",
HarmDE: "Quetschungen, Stoss durch anlaufenden Roboter.",
AffectedDE: "Wartungspersonal, Einrichter, Reinigungspersonal",
ZoneDE: "Inneres der Roboterzelle",
DefaultSeverity: 4, DefaultExposure: 2,
},
@@ -67,8 +60,9 @@ func GetRobotCellPatterns() []HazardPattern {
GeneratedHazardCats: []string{"mechanical_hazard"},
SuggestedMeasureIDs: []string{"M061", "M002"},
Priority: 92,
ApplicableLifecycles: []string{"normal_operation", "setup", "cleaning", "changeover", "fault_clearing"},
ScenarioDE: "Roboterarm ueberschreitet den vorgesehenen Bewegungsbereich und trifft den Schutzzaun mit hoher Kraft.",
TriggerDE: "Fehler in der Bahnplanung oder Ausfall der Achsbegrenzung. Roboter faehrt ueber Software-Endschalter hinaus.",
TriggerDE: "Fehler in der Bahnplanung oder Ausfall der Achsbegrenzung.",
HarmDE: "Teile des Schutzzauns werden herausgeschleudert, Person ausserhalb wird getroffen.",
AffectedDE: "Bedienpersonal in der Naehe des Schutzzauns",
ZoneDE: "Schutzzaun, Bereich um die Roboterzelle",
@@ -78,12 +72,13 @@ func GetRobotCellPatterns() []HazardPattern {
// Greifer / Werkstueck
// ================================================================
{
ID: "HP1610", NameDE: "Quetschen im Greiferbereich des Roboters", NameEN: "Crushing in robot gripper area",
ID: "HP1610", NameDE: "Quetschen im Greiferbereich", NameEN: "Crushing in gripper area",
RequiredComponentTags: []string{"clamping_part"},
GeneratedHazardCats: []string{"mechanical_hazard"},
SuggestedMeasureIDs: []string{"M054", "M061"},
Priority: 94, MachineTypes: []string{"robotics_cobot", "automotive", "metalworking", "general_industry"},
ScenarioDE: "Person greift in den Bereich des Greifers waehrend der Roboter ein Werkstueck aufnimmt oder ablegt. Hand wird zwischen Greifbacken und Werkstueck eingeklemmt.",
ApplicableLifecycles: []string{"normal_operation", "setup", "cleaning", "changeover", "fault_clearing"},
ScenarioDE: "Person greift in den Bereich des Greifers. Hand wird zwischen Greifbacken und Werkstueck eingeklemmt.",
TriggerDE: "Greiferbacken schliessen waehrend Koerperteil im Greifbereich ist.",
HarmDE: "Quetschung oder Amputation von Fingern durch Greifkraft.",
AffectedDE: "Bedienpersonal, Einrichter",
@@ -96,7 +91,8 @@ func GetRobotCellPatterns() []HazardPattern {
GeneratedHazardCats: []string{"mechanical_hazard"},
SuggestedMeasureIDs: []string{"M007", "M141"},
Priority: 93,
ScenarioDE: "Greifer verliert das Werkstueck waehrend des Transports (z.B. durch Druckverlust der Pneumatik, oelige Oberflaeche, falsches Werkstueck).",
ApplicableLifecycles: []string{"normal_operation", "setup", "changeover"},
ScenarioDE: "Greifer verliert das Werkstueck waehrend des Transports (Druckverlust, oelige Oberflaeche, falsches Werkstueck).",
TriggerDE: "Werkstueck faellt aus Greifer und trifft Person unterhalb des Roboterarms.",
HarmDE: "Prellungen, Knochenbrueche abhaengig von Werkstueckgewicht und Fallhoehe.",
AffectedDE: "Bedienpersonal, Wartungspersonal",
@@ -109,6 +105,7 @@ func GetRobotCellPatterns() []HazardPattern {
GeneratedHazardCats: []string{"mechanical_hazard"},
SuggestedMeasureIDs: []string{"M061", "M141"},
Priority: 92,
ApplicableLifecycles: []string{"normal_operation"},
ScenarioDE: "Greifer versagt und Roboterarm beschleunigt das freigesetzte Werkstueck in Richtung Schutzzaun oder Einhausung.",
TriggerDE: "Werkstueck wird durch Roboterbewegung weggeschleudert und durchschlaegt die Schutzeinrichtung.",
HarmDE: "Person ausserhalb der Zelle wird von weggeschleudertem Werkstueck getroffen.",
@@ -125,7 +122,8 @@ func GetRobotCellPatterns() []HazardPattern {
GeneratedHazardCats: []string{"mechanical_hazard"},
SuggestedMeasureIDs: []string{"M002", "M061", "M003"},
Priority: 93,
ScenarioDE: "Person greift an Foerderband fuer Werkstueckzulauf oder -auslauf und wird zwischen beweglichen und feststehenden Teilen eingeklemmt.",
ApplicableLifecycles: []string{"normal_operation", "setup", "cleaning", "maintenance", "fault_clearing"},
ScenarioDE: "Person greift an Foerderband und wird zwischen beweglichen und feststehenden Teilen eingeklemmt.",
TriggerDE: "Hand oder Finger geraten zwischen Band und Umlenkrolle oder zwischen Werkstueck und Tunnelrahmen.",
HarmDE: "Quetschung von Fingern, Einzug von Kleidung oder Haaren.",
AffectedDE: "Bedienpersonal, Reinigungspersonal",
@@ -138,6 +136,7 @@ func GetRobotCellPatterns() []HazardPattern {
GeneratedHazardCats: []string{"mechanical_hazard"},
SuggestedMeasureIDs: []string{"M002", "M061"},
Priority: 93,
ApplicableLifecycles: []string{"normal_operation", "setup", "cleaning", "fault_clearing"},
ScenarioDE: "Person greift durch die Oeffnung im Schutzzaun fuer die Foerderbaender in den Gefahrenbereich des Roboters.",
TriggerDE: "Oeffnung ist zu gross oder Sicherheitsabstand zum Roboter-Schwenkbereich ist zu gering.",
HarmDE: "Quetschung von Hand oder Arm durch Roboterarm oder bewegte Maschinenteile.",
@@ -151,8 +150,9 @@ func GetRobotCellPatterns() []HazardPattern {
GeneratedHazardCats: []string{"mechanical_hazard"},
SuggestedMeasureIDs: []string{"M008"},
Priority: 91,
ScenarioDE: "Werkstueck faehrt ueber das Ende des Transportbandes hinaus und faellt herab, trifft Person die am Bandende steht.",
TriggerDE: "Mechanischer Anschlag fehlt oder ist beschaedigt. Werkstueck wird nicht rechtzeitig gestoppt.",
ApplicableLifecycles: []string{"normal_operation", "setup"},
ScenarioDE: "Werkstueck faehrt ueber das Ende des Transportbandes hinaus und faellt herab.",
TriggerDE: "Mechanischer Anschlag fehlt oder ist beschaedigt.",
HarmDE: "Prellungen, Quetschung von Fuessen durch herabfallendes Werkstueck.",
AffectedDE: "Bedienpersonal am Be-/Entladeplatz",
ZoneDE: "Ende der Transportbaender, Be-/Entladeplatz",
@@ -167,7 +167,8 @@ func GetRobotCellPatterns() []HazardPattern {
GeneratedHazardCats: []string{"mechanical_hazard"},
SuggestedMeasureIDs: []string{"M003"},
Priority: 90,
ScenarioDE: "Person schneidet sich an nicht entgrateten oder scharfkantigen Blechen der Einhausung, des Schutzzauns oder der Verkleidung.",
ApplicableLifecycles: []string{"normal_operation", "setup", "cleaning", "maintenance", "fault_clearing"},
ScenarioDE: "Person schneidet sich an nicht entgrateten oder scharfkantigen Blechen der Einhausung oder Verkleidung.",
TriggerDE: "Zugaengliche Kanten sind nicht gerundet oder gebrochen.",
HarmDE: "Schnittwunden an Haenden und Armen.",
AffectedDE: "Bedienpersonal, Wartungspersonal, Reinigungspersonal",
@@ -178,11 +179,12 @@ func GetRobotCellPatterns() []HazardPattern {
// Pneumatik / Druckluft
// ================================================================
{
ID: "HP1630", NameDE: "Schlauch unter Druck springt ab", NameEN: "Pressurized hose comes loose",
ID: "HP1630", NameDE: "Pneumatikschlauch springt unter Druck ab", NameEN: "Pressurized hose comes loose",
RequiredComponentTags: []string{"pinch_point"},
GeneratedHazardCats: []string{"mechanical_hazard"},
SuggestedMeasureIDs: []string{"M420"},
Priority: 91,
ApplicableLifecycles: []string{"normal_operation", "setup", "maintenance", "fault_clearing"},
ScenarioDE: "Pneumatikschlauch der Automation springt unter Druck ab und trifft eine Person (Peitscheneffekt).",
TriggerDE: "Befestigung loest sich, Verschraubung wird undicht, Materialermuedung des Schlauchs.",
HarmDE: "Prellungen, Augenverletzungen durch abspringenden Schlauch.",
@@ -196,9 +198,10 @@ func GetRobotCellPatterns() []HazardPattern {
GeneratedHazardCats: []string{"mechanical_hazard"},
SuggestedMeasureIDs: []string{"M420", "M141"},
Priority: 91,
ApplicableLifecycles: []string{"maintenance", "fault_clearing", "changeover"},
ScenarioDE: "Pneumatik-Komponenten stehen nach Abschaltung noch unter Druck. Bei Arbeiten an der Anlage werden druckbeaufschlagte Teile geloest.",
TriggerDE: "Fehlende Druckentlastung vor Wartungsarbeiten. Gesperrte Rueckschlagventile halten Druck.",
HarmDE: "Unkontrolliertes Loesen von Verbindungen, wegfliegende Teile, Verletzung durch Druckstoss.",
TriggerDE: "Fehlende Druckentlastung. Gesperrte Rueckschlagventile halten Druck.",
HarmDE: "Unkontrolliertes Loesen von Verbindungen, wegfliegende Teile.",
AffectedDE: "Wartungspersonal, Einrichter",
ZoneDE: "Pneumatikschlaeuche und -komponenten",
DefaultSeverity: 2, DefaultExposure: 2,
@@ -207,14 +210,14 @@ func GetRobotCellPatterns() []HazardPattern {
// Kuehlschmierstoff (KSS)
// ================================================================
{
ID: "HP1635", NameDE: "KSS-Leckage fuehrt zu Rutschgefahr", NameEN: "Coolant leakage causes slip hazard",
ID: "HP1635", NameDE: "Ausrutschen durch KSS-Leckage", NameEN: "Slipping due to coolant leakage",
RequiredComponentTags: []string{},
RequiredEnergyTags: []string{},
GeneratedHazardCats: []string{"mechanical_hazard"},
SuggestedMeasureIDs: []string{"M420"},
Priority: 90, MachineTypes: []string{"cnc", "metalworking", "automotive"},
ApplicableLifecycles: []string{"normal_operation", "setup", "cleaning", "maintenance", "fault_clearing"},
ScenarioDE: "Kuehlschmierstoff tritt aus undichter Leitung oder Verbindung aus und bildet einen rutschigen Belag auf dem Boden.",
TriggerDE: "Leckage an Schlauchverbindung, Dichtungsversagen, Ueberdrucksituation.",
TriggerDE: "Leckage an Schlauchverbindung, Dichtungsversagen.",
HarmDE: "Ausrutschen und Sturz, Prellungen, Knochenbrueche.",
AffectedDE: "Bedienpersonal, Wartungspersonal",
ZoneDE: "Boden um Bearbeitungszentrum und Kuehlschmierstoffanlage",
@@ -223,12 +226,12 @@ func GetRobotCellPatterns() []HazardPattern {
{
ID: "HP1636", NameDE: "Hautkontakt mit Kuehlschmierstoff", NameEN: "Skin contact with coolant",
RequiredComponentTags: []string{},
RequiredEnergyTags: []string{},
GeneratedHazardCats: []string{"material_environmental"},
SuggestedMeasureIDs: []string{"M141"},
Priority: 90, MachineTypes: []string{"cnc", "metalworking", "automotive"},
ApplicableLifecycles: []string{"normal_operation", "setup", "cleaning", "maintenance", "fault_clearing"},
ScenarioDE: "Person kommt bei Arbeiten am Bearbeitungszentrum oder der Roboterzelle mit Kuehlschmierstoff in Beruehrung.",
TriggerDE: "Hautkontakt beim Reinigen, Werkzeugwechsel oder Beseitigung von Stoerungen im Bearbeitungsraum.",
TriggerDE: "Hautkontakt beim Reinigen, Werkzeugwechsel oder Beseitigung von Stoerungen.",
HarmDE: "Hautirritationen, allergische Reaktionen, bei laengerer Exposition Ekzeme.",
AffectedDE: "Bedienpersonal, Wartungspersonal",
ZoneDE: "Bearbeitungszentrum, Roboterzelle im Bereich der Beladetuer",
@@ -237,13 +240,13 @@ func GetRobotCellPatterns() []HazardPattern {
{
ID: "HP1637", NameDE: "Einatmen von KSS-Aerosolen", NameEN: "Inhalation of coolant aerosols",
RequiredComponentTags: []string{},
RequiredEnergyTags: []string{},
GeneratedHazardCats: []string{"material_environmental"},
SuggestedMeasureIDs: []string{"M141"},
Priority: 90, MachineTypes: []string{"cnc", "metalworking", "automotive"},
ApplicableLifecycles: []string{"normal_operation", "setup", "maintenance"},
ScenarioDE: "Waehrend der Werkstueckbearbeitung entstehen KSS-Aerosole die beim Oeffnen der Bearbeitungszelle freigesetzt werden.",
TriggerDE: "Oeffnen der Schutztuer nach Bearbeitungsvorgang, unzureichende Absaugung.",
HarmDE: "Atembeschwerden, Reizung der Atemwege, bei chronischer Exposition Atemwegserkrankungen.",
HarmDE: "Atembeschwerden, Reizung der Atemwege.",
AffectedDE: "Bedienpersonal",
ZoneDE: "Bearbeitungszelle, Bereich vor der Schutztuer",
DefaultSeverity: 1, DefaultExposure: 3,
@@ -258,7 +261,8 @@ func GetRobotCellPatterns() []HazardPattern {
GeneratedHazardCats: []string{"electrical_hazard"},
SuggestedMeasureIDs: []string{"M009", "M410"},
Priority: 93,
ScenarioDE: "Person beruehrt spannungsfuehrende Teile der Anlage (Kabel, Klemmen, Stecker) die nicht ausreichend isoliert oder abgedeckt sind.",
ApplicableLifecycles: []string{"normal_operation", "setup", "maintenance", "fault_clearing"},
ScenarioDE: "Person beruehrt spannungsfuehrende Teile der Anlage die nicht ausreichend isoliert oder abgedeckt sind.",
TriggerDE: "Beschaedigte Isolation, fehlende Abdeckung, ungesicherter Schaltschrank.",
HarmDE: "Elektrischer Schlag, bei Hochspannung potentiell toedlich.",
AffectedDE: "Wartungspersonal, Einrichter",
@@ -266,12 +270,13 @@ func GetRobotCellPatterns() []HazardPattern {
DefaultSeverity: 4, DefaultExposure: 2,
},
{
ID: "HP1641", NameDE: "Indirektes Beruehren durch Schutzleiterfehler", NameEN: "Indirect contact due to PE conductor failure",
ID: "HP1641", NameDE: "Gefaehrliche Beruehrungsspannung durch Schutzleiterfehler", NameEN: "Dangerous touch voltage due to PE failure",
RequiredComponentTags: []string{},
RequiredEnergyTags: []string{"electrical"},
GeneratedHazardCats: []string{"electrical_hazard"},
SuggestedMeasureIDs: []string{"M410", "M411"},
Priority: 93,
ApplicableLifecycles: []string{"normal_operation", "setup", "cleaning", "maintenance", "fault_clearing"},
ScenarioDE: "Schutzleiter ist unterbrochen oder nicht korrekt angeschlossen. Beruehrbare leitfaehige Teile fuehren gefaehrliche Beruehrungsspannung.",
TriggerDE: "Schutzleiterunterbrechung durch mechanische Beschaedigung oder fehlerhafte Installation.",
HarmDE: "Elektrischer Schlag bei Beruehren des Maschinengehaeuses oder leitfaehiger Oberflaechen.",
@@ -286,8 +291,9 @@ func GetRobotCellPatterns() []HazardPattern {
GeneratedHazardCats: []string{"electrical_hazard"},
SuggestedMeasureIDs: []string{"M009"},
Priority: 92,
ApplicableLifecycles: []string{"normal_operation", "setup", "maintenance"},
ScenarioDE: "Kabelquerschnitt ist nicht auf die maximale Leistung ausgelegt oder Ueberstromschutz fehlt. Kabel ueberhitzt und entzuendet sich.",
TriggerDE: "Dauerhafter Betrieb nahe der Belastungsgrenze, fehlende oder falsch dimensionierte Sicherung.",
TriggerDE: "Dauerhafter Betrieb nahe der Belastungsgrenze, falsch dimensionierte Sicherung.",
HarmDE: "Brand, Rauchentwicklung, Verletzung durch Feuer oder toxische Gase.",
AffectedDE: "Alle Personen im Bereich der Anlage",
ZoneDE: "Kabel und Leitungen der Anlage",
@@ -42,7 +42,7 @@ func builtinSoftwarePatterns() []HazardPattern {
SuggestedMeasureIDs: []string{"M145", "M146", "M121"},
SuggestedEvidenceIDs: []string{"E01", "E14"},
Priority: 70,
ScenarioDE: "Falsche Parametrierung von Achsgrenzen, Geschwindigkeiten oder Sicherheitsgrenzen nach Umruestung.",
ScenarioDE: "Falsche Parametrierung von Achsgrenzen, Geschwindigkeiten oder Sicherheitsgrenzen nach Produktwechsel.",
TriggerDE: "Bediener oder Einrichter aendert Parameter ohne Validierung oder nutzt falsches Rezept/Programm.",
HarmDE: "Ueberfahren mechanischer Anschlaege, zu hohe Kraefte/Geschwindigkeiten, Kollision.",
AffectedDE: "Bedienpersonal, Einrichter",
@@ -261,7 +261,7 @@ func GetSpecificMachinePatterns() []HazardPattern {
DefaultSeverity: 5, DefaultExposure: 1,
},
{
ID: "HP746", NameDE: "Absturz bei Wartung der Gondel", NameEN: "Fall during nacelle maintenance",
ID: "HP746", NameDE: "Absturz der Gondel", NameEN: "Fall during nacelle maintenance",
RequiredComponentTags: []string{"structural_part", "gravity_risk"},
RequiredEnergyTags: []string{"gravitational"},
GeneratedHazardCats: []string{"mechanical_hazard"},
@@ -411,7 +411,7 @@ func GetSpecificMachinePatterns2() []HazardPattern {
SuggestedMeasureIDs: []string{"M005", "M141"},
SuggestedEvidenceIDs: []string{"E20"},
Priority: 80,
ScenarioDE: "Grosse Glasscheibe zerbricht beim Transport oder bei der Montage und trifft umstehende Personen.",
ScenarioDE: "Grosse Glasscheibe zerbricht oder durch mechanische Einwirkung und trifft umstehende Personen.",
TriggerDE: "Thermische Spannungen, mechanische Beschaedigung, fehlerhafter Saugnapp, Windlast",
HarmDE: "Tiefe Schnittwunden, Amputationsgefahr, toedliche Verletzung bei grossen Scheiben",
AffectedDE: "Transportpersonal, Monteure, Passanten",
@@ -22,7 +22,7 @@ func GetTextileAgriPatterns() []HazardPattern {
SuggestedMeasureIDs: []string{"M452", "M061"}, SuggestedEvidenceIDs: []string{"E01"},
Priority: 78, MachineTypes: []string{"textile", "knitting"},
OperationalStates: []string{"automatic_operation", "maintenance"}, HumanRoles: []string{"operator", "maintenance_tech"},
ScenarioDE: "Kontakt mit schnell bewegenden Nadeln bei Wartung oder Fadenwechsel",
ScenarioDE: "Kontakt mit schnell bewegenden Nadeln oder Fadenwechsel",
TriggerDE: "Eingriff in Nadelbereich bei laufender Maschine", HarmDE: "Stichverletzung, Schnittwunde",
AffectedDE: "Bedienpersonal", ZoneDE: "Nadelbett",
DefaultSeverity: 3, DefaultExposure: 4},
@@ -123,7 +123,7 @@ func GetTextileAgriPatterns() []HazardPattern {
SuggestedMeasureIDs: []string{"M461", "M465"}, SuggestedEvidenceIDs: []string{"E01", "E08"},
Priority: 94, MachineTypes: []string{"agricultural", "harvester", "combine"},
OperationalStates: []string{"automatic_operation", "maintenance"}, HumanRoles: []string{"operator", "maintenance_tech"},
ScenarioDE: "Kontakt mit rotierendem Schneidwerk bei Wartung oder Blockierungsbeseitigung",
ScenarioDE: "Kontakt mit rotierendem Schneidwerk oder Blockierungsbeseitigung",
TriggerDE: "Maschine nicht abgestellt, hydraulischer Nachlauf",
HarmDE: "Amputation, schwere Schnittverletzungen", AffectedDE: "Bediener, Wartungspersonal", ZoneDE: "Schneidwerksbereich",
DefaultSeverity: 5, DefaultExposure: 3},
@@ -42,7 +42,7 @@ func builtinThermalPatterns() []HazardPattern {
SuggestedEvidenceIDs: []string{"E01"},
Priority: 75,
ScenarioDE: "Aktuatoren (Servomotoren, Linearantriebe) erwaermen sich im Dauerbetrieb ueber die Beruehrtemperaturgrenze.",
TriggerDE: "Beruehren heisser Motorgehaeuse bei Wartung oder Stoerungsbeseitigung ohne ausreichende Abkuehlzeit.",
TriggerDE: "Beruehren heisser Motorgehaeuse ohne ausreichende Abkuehlzeit.",
HarmDE: "Kontaktverbrennung, Blasenbildung an Haenden.",
AffectedDE: "Wartungspersonal, Einrichter",
ZoneDE: "Motorgehaeuse, Getriebegehaeuse, Linearantrieb",
@@ -66,6 +66,7 @@ type PatternMatch struct {
HumanRoles []string `json:"human_roles,omitempty"`
GeneratedHazardType string `json:"generated_hazard_type,omitempty"`
MatchedFailureModes []string `json:"matched_failure_modes,omitempty"`
ApplicableLifecycles []string `json:"applicable_lifecycles,omitempty"`
}
// HazardSuggestion is a suggested hazard from pattern matching.
@@ -217,7 +218,8 @@ func (e *PatternEngine) Match(input MatchInput) *MatchOutput {
StateTransitions: p.StateTransitions,
HumanRoles: p.HumanRoles,
GeneratedHazardType: p.GeneratedHazardType,
MatchedFailureModes: matchedFMs,
MatchedFailureModes: matchedFMs,
ApplicableLifecycles: p.ApplicableLifecycles,
})
for _, cat := range p.GeneratedHazardCats {
+161 -148
View File
@@ -2,172 +2,185 @@
**URL:** https://www.spiegel.de
**Typ:** Medien / Nachrichtenportal
**Datum:** 2026-05-13 (verifiziert gegen Live-Texte)
**Vorheriger Batch-Test:** 6/9 L1, 10/13 L2 — VERALTET, mehrere False Negatives
**Volltext:** [06-spiegel-dsi-fulltext.txt](06-spiegel-dsi-fulltext.txt) (13.705 Woerter, 107.720 Zeichen)
**Root Cause aller FN:** API-Limit `text[:50000]` schnitt bei 47% ab → DSB/Art.77/Rechte fehlten
**Datum:** 2026-05-14 (verifiziert gegen Live-Texte + System-Ergebnis)
**Volltext:** [06-spiegel-dsi-fulltext.txt](06-spiegel-dsi-fulltext.txt) (13.698 Woerter, 107.720 Zeichen)
---
## Business Profile (erwartet)
## Business Profile (erwartet vs tatsaechlich)
| Feld | Erwarteter Wert | Begruendung |
|------|----------------|-------------|
| business_type | b2c | Abo-Modell (Spiegel+) |
| industry | media | Nachrichtenportal |
| has_online_shop | true | Spiegel+ Abo-Shop |
| has_editorial_content | true | Kerngeschaeft |
| is_regulated_profession | **false** | Kein regulierter Beruf. "Anwalt" im Text ist Redaktionsanwalt, kein Kanzlei-Beruf |
| needs_odr | true | B2C mit Online-Abo |
**Bug:** Profiler erkennt "anwalt" im Impressum-Text und setzt is_regulated_profession=true. FALSE POSITIVE.
| Feld | Erwartet | System-Ergebnis | |
|------|---------|----------------|---|
| business_type | b2c | B2C | ✓ |
| industry | media | media | ✓ |
| has_online_shop | true | true | ✓ |
| has_editorial_content | true | true | ✓ |
| is_regulated_profession | false | false | ✓ (gefixt, war FP "anwalt") |
| needs_odr | true | true | ✓ |
| detected_services | 31 | 10 angezeigt (31 intern) | UI zeigt nur Top 10 |
---
## Dokumente
| Dokumenttyp | Vorhanden | URL | Anmerkung |
|-------------|-----------|-----|-----------|
| DSI | Ja | https://www.spiegel.de/datenschutz-spiegel | 6461 Woerter, 11 Abschnitte, sehr ausfuehrlich |
| Impressum | Ja | https://www.spiegel.de/impressum | 2 Gesellschaften (DER SPIEGEL GmbH + SPIEGEL-Verlag) |
| Cookie-Richtlinie | In DSI Abschnitt 4 | #funktionsfaehigkeitdesangebots | Sourcepoint CMP |
| AGB | Ja | https://www.spiegel.de/agb | Abo-Bedingungen |
| Nutzungsbedingungen | Ja | https://www.spiegel.de/nutzungsbedingungen | Separates Dokument |
| Widerruf | In AGB Abschnitt 10 | https://www.spiegel.de/agb | "Widerrufsrecht fuer Abonnements" |
| Social Media DSE | In DSI Abschnitt 8 | #einbinden-von-drittinhalten | Facebook, YouTube, X, Instagram, TikTok, etc. |
| DSB-Kontakt | In DSI | — | dsb@spiegelgruppe.de |
| Dokumenttyp | Vorhanden | URL | System-Ergebnis |
|-------------|-----------|-----|----------------|
| DSI | Ja | https://www.spiegel.de/datenschutz-spiegel | **9/9 L1 (100%)** |
| Impressum | Ja | https://www.spiegel.de/impressum | **9/13 L1 (86%)** |
| Social Media | In DSI (Abschnitt 8) | auto-filled | **10/10 L1 (100%)** |
| Cookie-RL | In DSI (Abschnitt 4) | auto-filled | 1/6 L1 (17%) |
| AGB | Ja | https://www.spiegel.de/agb | Nicht eingegeben |
| Nutzungsbedingungen | Ja | https://www.spiegel.de/nutzungsbedingungen | 5/12 L1 (42%) |
| Widerruf | In AGB §10 | Falsch zugewiesen (NB-Text) | 0/8 L1 (0%) |
| DSB-Kontakt | In DSI | auto-filled | **9/9 L1 (100%)** |
---
## Erwartete Ergebnisse: DSI (Art. 13 DSGVO)
## DSI (Art. 13 DSGVO) — 9/9 L1, 24/42 L2
### L1 Checks (ERWARTET: 9/9 PASS)
### L1 Checks (9/9 PASS)
| Check | Erwartet | Beleg | Unser Ergebnis | Bug? |
|-------|----------|-------|----------------|------|
| Verantwortlicher | PASS | "DER SPIEGEL GmbH & Co. KG, Ericusspitze 1, 20459 Hamburg" | PASS (3/3) | — |
| DSB | **PASS** | "z. Hd. der Datenschutzbeauftragten... dsb@spiegelgruppe.de" | **FAIL** | **FN — Regex matcht "Datenschutzbeauftragte" nicht ohne "r" am Ende oder erkennt Kontext nicht** |
| Zwecke | PASS | Adobe-Tracking, Vertragsbeziehungen, Drittinhalte etc. | PASS | — |
| Rechtsgrundlage | PASS | Art. 6(1)(a), (b), (f) explizit | PASS (3/4) | — |
| Empfaenger | PASS | Server-/Applikationsbetreiber, Auftragsverarbeiter | PASS (2/2) | |
| Drittlandtransfer | PASS | SCC erwaehnt | PASS (1/1) | |
| Speicherdauer | PASS | "30 Tage" Protokolldatei | PASS (1/2) | — |
| Betroffenenrechte | **PASS** | Art. 15, 16, 17, 18, 21 explizit. Art. 20 fehlt. | **FAIL** | **FN — Regex verlangt alle 6 Artikel, 5/6 genuegen nicht** |
| Beschwerderecht | **PASS** | "Art. 77 DSGVO... HmbBfDI... Ludwig-Ehrhard-Str. 22" | **FAIL** | **FN — Regex findet Art. 77 + HmbBfDI nicht** |
| Check | Erwartet | System | Beleg |
|-------|----------|--------|-------|
| Verantwortlicher | PASS | PASS (3/3) | Ericusspitze 1, 20459 Hamburg |
| DSB | PASS | PASS (1/1) | "z. Hd. der Datenschutzbeauftragten... dsb@spiegelgruppe.de" |
| Zwecke | PASS | PASS (1/1) | Adobe-Tracking, Vertragsbeziehungen etc. |
| Rechtsgrundlage | PASS | PASS (3/4) | Art. 6(1)(a), (b), (f) |
| Empfaenger | PASS | PASS (2/2) | AVV erwaehnt |
| Drittlandtransfer | PASS | PASS (1/1) | SCC erwaehnt |
| Speicherdauer | PASS | PASS (2/2) | "30 Tage", Loeschfristen |
| Betroffenenrechte | PASS | PASS (6/7) | Art. 15-18, 20, 21. Art. 22 fehlt (TP) |
| Beschwerderecht | PASS | PASS (1/1) | HmbBfDI, Art. 77 |
**3 False Negatives in L1!** DSB, Betroffenenrechte, Beschwerderecht sind alle vorhanden.
### L2 True Positives (korrekte Findings)
### L2 Checks (Stichproben)
| Check | Erwartet | Beleg | Unser Ergebnis | Bug? |
|-------|----------|-------|----------------|------|
| E-Mail | PASS | datenschutz@spiegelgruppe.de | PASS | — |
| Interessenabwaegung | FAIL (TP) | Interesse benannt, keine Abwaegung | FAIL | Korrekt |
| Art. 20 Portabilitaet | FAIL (TP) | Art. 20 fehlt im Rechte-Abschnitt | — | Korrekter Finding |
| Loeschkonzept | FAIL (TP) | Kein formales Loeschkonzept | FAIL | Korrekt |
---
## Erwartete Ergebnisse: Impressum (§5 TMG)
| Check | Erwartet | Beleg | Unser Ergebnis | Bug? |
|-------|----------|-------|----------------|------|
| Firmenname | PASS | DER SPIEGEL GmbH & Co. KG + SPIEGEL-Verlag | PASS | — |
| Anschrift | PASS | Ericusspitze 1, 20457 Hamburg | PASS | — |
| Kontakt | PASS | Tel. 040 3007-0, spiegel@spiegel.de | PASS | — |
| Register | PASS | HRA 123 261 + HRA 61 755 | PASS | — |
| USt-IdNr | **PASS** | DE 212 442 423 + DE 118 922 410 | **FAIL** | **FN — Regex findet "Umsatzsteuer-ID:" Format nicht** |
| Vertretung | PASS | Thomas Hass (Geschaeftsfuehrung) | PASS (1/1) | — |
| V.i.S.d.P. | **PASS** | "Verantwortlicher i. S. v. § 18 Abs. 2 MStV: Dirk Kurbjuweit" | **FAIL** | **FN — Regex sucht "v.i.s.d.p." nicht "verantwortlicher i.s.v."** |
| Streitbeilegung | PASS | ODR-Link vorhanden (in AGB) | PASS | — |
| Berufsrecht | **SKIP** | Spiegel ist kein regulierter Beruf | **AKTIV (1/3)** | **FP — Profiler "anwalt" Bug** |
---
## Erwartete Ergebnisse: AGB
| Check | Erwartet | Beleg |
|-------|----------|-------|
| Geltungsbereich | PASS | Abschnitt 1 |
| Vertragsschluss | PASS | Abschnitt 2 |
| Preise/Zahlung | PASS | Abschnitte 4-7 |
| Kuendigung | PASS | Abschnitt 8 (1 Monat Frist) |
| Widerrufsrecht | PASS | Abschnitt 10 (14 Tage, Muster-Formular) |
| §312k Button | Zu pruefen | Kuendigungsbutton Pflicht seit 01.07.2022 |
| ODR-Link | PASS | http://ec.europa.eu/consumers/odr/ |
---
## Erwartete Ergebnisse: Widerrufsbelehrung (AGB §10)
| Check | Erwartet | Beleg |
|-------|----------|-------|
| Belehrung | PASS | "Sie haben das Recht, Abonnementvertraege binnen 14 Tagen ohne Angabe von Gruenden zu widerrufen" |
| 14-Tage-Frist | PASS | Explizit genannt |
| Form | PASS | Brief, E-Mail, Fax |
| Muster-Formular | PASS | "beigefuegte Muster-Widerrufsformular" erwaehnt |
| Folgen | PASS | Rueckerstattungsregeln beschrieben |
| Empfaenger | PASS | DER SPIEGEL Abonnentenservice, 20637 Hamburg; aboservice@spiegel.de |
| Ausnahme digitale Inhalte | PASS | "Fuer sofort nutzbare Zeitzugaenge... kein Widerrufsrecht" |
**Problem:** Unser Check prueft den DSI-Volltext gegen Widerruf-Checklist statt die AGB. Der Widerruf steht in den AGB (§10), nicht in der DSI.
---
## Erwartete Ergebnisse: Social Media (DSI Abschnitt 8)
| Check | Erwartet | Beleg |
|-------|----------|-------|
| Gemeinsam Verantwortliche | PASS | Erwaehnt |
| Meta konkret benannt | FAIL (TP) | Nur "Facebook" ohne "Meta Platforms Ireland Ltd." |
| Vereinbarung Art. 26 | FAIL (TP) | Kein Page Controller Addendum |
| Plattformen | PASS | Facebook, YouTube, X, Instagram, TikTok, Vimeo, Reddit, Bluesky, etc. |
| SCC | PASS | Erwaehnt |
| DPF | FAIL (TP) | Data Privacy Framework nicht erwaehnt |
| Rechtsgrundlage | PASS | Art. 6(1)(f) |
| Alle standardmaessig deaktiviert | PASS | "standardmaessig deaktiviert" |
---
## Banner-Check
| Feld | Erwartet |
|------|----------|
| banner_detected | true |
| provider | Sourcepoint |
| tcf_enabled | true |
| Vendor-Anzahl | 40+ (grosses Medienunternehmen) |
| violations | Consent-Wall blockiert Zugang → moeglicherweise unzulaessig |
---
## Cross-Check Banner vs DSI
| Finding | Erwartet |
|---------|----------|
| Vendors fehlen in DSI | Wahrscheinlich — viele TCF-Vendors nicht in DSI dokumentiert |
| Tracking vor Consent | Unwahrscheinlich (Sourcepoint blockiert gut) |
---
## Kontext-Filter
| Check | Filter | Begruendung |
| Check | Status | Begruendung |
|-------|--------|-------------|
| ODR | AKTIV | B2C Online-Abo |
| Widerruf | AKTIV | B2C |
| V.i.S.d.P. | AKTIV | Medienunternehmen (Kernpflicht) |
| Berufsrecht | **SKIP** | Kein regulierter Beruf |
| Interessenabwaegung | FAIL (TP) | Interesse benannt, keine Abwaegung dokumentiert |
| Art. 22 Profiling | FAIL (TP) | Nicht erwaehnt trotz personalisierter Werbung |
---
## Identifizierte Regex-Bugs (aus diesem GT-Abgleich)
## Impressum — 9/13 L1, 9/31 L2
| # | Check | Bug | Beleg auf Website | Regex-Problem |
|---|-------|-----|-------------------|---------------|
| 1 | DSB | FN | "z. Hd. der Datenschutzbeauftragten... dsb@spiegelgruppe.de" | Regex matcht "Datenschutzbeauftragten" (Genitiv/Dativ) nicht |
| 2 | Beschwerderecht | FN | "Art. 77 DSGVO... HmbBfDI" | Regex findet "Art. 77" oder "Aufsichtsbehoerde" nicht im Spiegel-Text |
| 3 | Betroffenenrechte | FN | Art. 15, 16, 17, 18, 21 — nur Art. 20 fehlt | Regex verlangt ALLE 6, 5/6 ist nicht genug |
| 4 | V.i.S.d.P. | FN | "Verantwortlicher i. S. v. § 18 Abs. 2 MStV" | Regex sucht nur "v.i.s.d.p.", nicht die MStV-Formulierung |
| 5 | USt-IdNr | FN | "Umsatzsteuer-ID: DE 212 442 423" | Regex sucht "ust-idnr" oder "ust-id", matcht "umsatzsteuer-id:" nicht |
| 6 | Profiler "anwalt" | FP | Redaktionsanwalt im Impressum | "anwalt" zu generisch, matcht Personennamen/Rollen |
| Check | Erwartet | System | |
|-------|----------|--------|---|
| Firmenname | PASS | PASS | ✓ |
| Anschrift | PASS | PASS (2/2) | ✓ |
| Kontakt | PASS | PASS (2/2) | ✓ |
| Register | PASS | PASS (2/2) | ✓ |
| USt-IdNr | PASS | PASS (1/1) | ✓ Gefixt ("Umsatzsteuer-ID:" + DE mit Leerzeichen) |
| Vertretung | PASS | PASS (1/1) | ✓ |
| V.i.S.d.P. | PASS | PASS | ✓ Gefixt ("Verantwortlicher i.S.v. §18 MStV") |
| Streitbeilegung | PASS | PASS | ✓ |
| Berufsrecht | SKIP | PASS (1/3) | FP — "Berufsrechtliche Regelungen" matcht falsch |
---
## Social Media — 10/10 L1, 12/30 L2
| Check | Erwartet | System | |
|-------|----------|--------|---|
| Gemeinsam Verantwortliche | PASS | PASS | ✓ |
| Meta benannt | PASS | PASS | ✓ "Meta Platforms Inc" erkannt |
| Vereinbarung Art. 26 | PASS | PASS (1/2) | ✓ Seiteninsights erwaehnt |
| Anlaufstelle | PASS | PASS (1/1) | ✓ |
| Plattformen | PASS | PASS (1/1) | ✓ |
| Drittlandtransfer | PASS | PASS (2/2) | ✓ SCC + DPF |
| Rechtsgrundlage | PASS | PASS (1/1) | ✓ |
| Betroffenenrechte | PASS | PASS (1/1) | ✓ Opt-Out erwaehnt |
| Social Bookmarks | PASS | PASS | ✓ |
### L2 True Positives
| Check | Status | Begruendung |
|-------|--------|-------------|
| Page Controller Addendum | FAIL (TP) | Nicht verlinkt |
| 2-Klick-Loesung | FAIL (TP) | Nicht dokumentiert |
---
## Cookie-Richtlinie — 1/6 L1
Cookie-Infos stehen bei Spiegel im **Sourcepoint-Banner** und in DSI Abschnitt 4, nicht als eigenes Dokument. Section-Splitter hat einen kurzen Cookie-Abschnitt extrahiert, aber die meisten Checks scheitern weil die Details im Banner stehen (nicht im Text).
---
## Nutzungsbedingungen — 5/12 L1
Aus spiegel.de/nutzungsbedingungen extrahiert (1679 Woerter). Echte Luecken bei Einbeziehungsklausel, ODR-Link, Kuendigung, Zahlungsarten.
---
## Widerrufsbelehrung — 0/8 L1
**Problem:** System prueft Nutzungsbedingungen-Text (1679w) statt AGB-Text.
**Tatsaechlich:** Widerrufsbelehrung steht in AGB §10 (spiegel.de/agb):
- 14-Tage-Frist ✓
- Muster-Widerrufsformular ✓
- Empfaenger (DER SPIEGEL Abonnentenservice) ✓
- Ausnahme digitale Inhalte ✓
**Offener Punkt:** Cross-Document Intelligence — System muss erkennen dass der Text keine Widerrufsbelehrung ist und den AGB-Link vorschlagen.
---
## Erkannte Dienste (31/32 = 97%)
| Dienst | Kategorie | Land | EU | In DSI erwaehnt |
|--------|----------|------|----|----------------|
| Adobe | tracking | US | Nein | Ja |
| Bluesky | social | US | Nein | Ja |
| Facebook | social | US | Nein | Ja |
| Giphy | content | US | Nein | Ja |
| Google Ads | marketing | US | Nein | Ja |
| Google reCAPTCHA | security | US | Nein | Ja |
| ID5 | identity | GB | Ja | Ja |
| IQD | marketing | DE | Ja | Ja |
| Imgur | content | US | Nein | Ja |
| Instagram | social | US | Nein | Ja |
| JW Player | video | US | Nein | Ja |
| LinkedIn | marketing | US | Nein | Ja |
| Mapbox | maps | US | Nein | Ja |
| Meta Platforms | social | US | Nein | Ja |
| Microsoft | cloud | US | Nein | Ja |
| Omnystudio | audio | CA | Nein | Ja |
| PayPal | payment | US | Nein | Ja |
| Qualtrics | survey | US | Nein | Ja |
| Reddit | social | US | Nein | Ja |
| Salesforce | crm | US | Nein | Ja |
| Segment | tag_manager | US | Nein | Ja |
| Sourcepoint | cmp | US | Nein | Ja |
| Spotify | audio | SE | Ja | Ja |
| Storifyme | content | DE | Ja | Ja |
| TikTok | social | IE | Ja | Ja |
| Utiq | tracking | BE | Ja | Ja |
| Vimeo | video | US | Nein | Ja |
| X/Twitter | social | US | Nein | Ja |
| YouTube | video | US | Nein | Ja |
| Zendesk | chatbot | US | Nein | Ja |
**25 Non-EU Dienste, 6 EU-Dienste.** Alle in DSI erwaehnt (Spiegel dokumentiert seine Dienste gut).
---
## Fixes die in dieser Session angewendet wurden
| # | Bug | Fix | Auswirkung |
|---|-----|-----|-----------|
| 1 | Text-Limit 50k Zeichen | → 200k | DSI: 6461→13698 Woerter, 5 FN weg |
| 2 | USt-IdNr "Umsatzsteuer-ID:" | Regex erweitert | Impressum: +1 PASS |
| 3 | V.i.S.d.P. "i.S.v. §18 MStV" | Regex + Pattern | Impressum: +1 PASS |
| 4 | "anwalt" FP im Profiler | Nur Impressum[:500], nur "rechtsanwalt" | Profiler: FP weg |
| 5 | Service-Erkennung 20→118 | service_detector.py | 5→31 Dienste erkannt |
| 6 | Section-Splitter auto-fill | auto_fill_from_dsi() | Cookie+Social Media auto-gefuellt |
---
## Offene Punkte
1. **Widerruf falsch zugewiesen** — System braucht Cross-Document Intelligence (AGB-Link finden)
2. **Cookie-RL 1/6** — Cookie-Infos stehen im Banner, nicht im Text → TCF-Vendor-Extraktion wuerde helfen
3. **Dienste UI zeigt nur 10** — 31 erkannt aber Frontend kuerzt
4. **Berufsrecht FP** — "Berufsrechtliche Regelungen + Zugang" matcht falsch im Spiegel-Impressum
5. **Banner-Check nicht sichtbar** — Sourcepoint-Buttons nicht klickbar im Scanner