From 70c9bfc069cbd875d1726c78c0b04eb48cb541f2 Mon Sep 17 00:00:00 2001 From: Benjamin Admin Date: Thu, 14 May 2026 22:52:56 +0200 Subject: [PATCH] =?UTF-8?q?fix(iace):=20neutral=20hazard=20formulations=20?= =?UTF-8?q?=E2=80=94=20no=20lifecycle=20phases=20in=20text?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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) --- .../iace/hazard_patterns_robot_cell.go | 91 ++++++++++--------- 1 file changed, 47 insertions(+), 44 deletions(-) diff --git a/ai-compliance-sdk/internal/iace/hazard_patterns_robot_cell.go b/ai-compliance-sdk/internal/iace/hazard_patterns_robot_cell.go index 7cbc13e7..ce2c9573 100644 --- a/ai-compliance-sdk/internal/iace/hazard_patterns_robot_cell.go +++ b/ai-compliance-sdk/internal/iace/hazard_patterns_robot_cell.go @@ -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,34 +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"}, + 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 zur Reinigung, Wartung oder Stoerungsbeseitigung).", + TriggerDE: "Roboterarm bewegt sich waehrend Person im Gefahrenbereich steht.", HarmDE: "Quetschungen, Knochenbrueche, innere Verletzungen durch Einklemmen von Koerperteilen.", AffectedDE: "Bedienpersonal, Einrichter, Wartungspersonal, Reinigungspersonal", ZoneDE: "Roboterarm, feststehende Anlagenteile innerhalb der Roboterzelle", DefaultSeverity: 4, DefaultExposure: 3, }, - { - ID: "HP1601", NameDE: "Quetschen bei Einrichten/Teachen am Roboter", NameEN: "Crushing during robot setup/teach", - RequiredComponentTags: []string{"moving_part"}, - GeneratedHazardCats: []string{"mechanical_hazard"}, - SuggestedMeasureIDs: []string{"M054", "M061"}, - Priority: 94, MachineTypes: []string{"robotics_cobot", "automotive", "metalworking", "general_industry"}, - ApplicableLifecycles: []string{"teach_mode", "setup", "changeover", "fault_clearing"}, - ScenarioDE: "Person befindet sich zum Einrichten, Teachen oder zur Stoerungsbeseitigung in der Roboterzelle. Roboterarm bewegt sich unerwartet oder mit zu hoher Geschwindigkeit.", - TriggerDE: "Betriebsartenwahlschalter steht auf Einrichten, Roboter bewegt sich im Schwenkbereich.", - HarmDE: "Quetschungen, Prellungen durch Kontakt mit bewegtem Roboterarm oder Greifer.", - AffectedDE: "Einrichter, Programmierer, Wartungspersonal", - 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"}, + 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.", @@ -55,11 +45,12 @@ func GetRobotCellPatterns() []HazardPattern { RequiredComponentTags: []string{"moving_part", "guard"}, GeneratedHazardCats: []string{"mechanical_hazard"}, SuggestedMeasureIDs: []string{"M061", "M054", "M141"}, - Priority: 94, ApplicableLifecycles: []string{"normal_operation", "setup", "cleaning", "maintenance", "fault_clearing", "changeover"}, + 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, }, @@ -68,9 +59,10 @@ func GetRobotCellPatterns() []HazardPattern { RequiredComponentTags: []string{"moving_part", "guard"}, GeneratedHazardCats: []string{"mechanical_hazard"}, SuggestedMeasureIDs: []string{"M061", "M002"}, - Priority: 92, ApplicableLifecycles: []string{"normal_operation", "setup", "cleaning", "changeover", "fault_clearing"}, + 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", @@ -80,13 +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"}, - ApplicableLifecycles: []string{"normal_operation", "setup", "cleaning", "changeover"}, - 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", @@ -99,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", @@ -112,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.", @@ -127,8 +121,9 @@ func GetRobotCellPatterns() []HazardPattern { RequiredComponentTags: []string{"entanglement_risk"}, GeneratedHazardCats: []string{"mechanical_hazard"}, SuggestedMeasureIDs: []string{"M002", "M061", "M003"}, - Priority: 93, ApplicableLifecycles: []string{"normal_operation", "setup", "cleaning", "maintenance", "fault_clearing"}, - ScenarioDE: "Person greift an Foerderband fuer Werkstueckzulauf oder -auslauf und wird zwischen beweglichen und feststehenden Teilen eingeklemmt.", + Priority: 93, + 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", @@ -141,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.", @@ -154,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", @@ -170,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", @@ -181,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.", @@ -199,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, @@ -210,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", @@ -226,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", @@ -240,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, @@ -261,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", @@ -269,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.", @@ -289,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",