diff --git a/ai-compliance-sdk/internal/iace/hazard_patterns_robot_cell.go b/ai-compliance-sdk/internal/iace/hazard_patterns_robot_cell.go new file mode 100644 index 0000000..eb0a781 --- /dev/null +++ b/ai-compliance-sdk/internal/iace/hazard_patterns_robot_cell.go @@ -0,0 +1,297 @@ +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. +// HP1600-HP1649 +func GetRobotCellPatterns() []HazardPattern { + return []HazardPattern{ + // ================================================================ + // Roboterarm — Quetschen/Einklemmen von Personen + // ================================================================ + { + ID: "HP1600", NameDE: "Einklemmen zwischen Roboterarm und Anlage", NameEN: "Crushing between robot arm and fixed structure", + RequiredComponentTags: []string{"moving_part"}, + GeneratedHazardCats: []string{"mechanical_hazard"}, + SuggestedMeasureIDs: []string{"M061", "M062", "M054"}, + Priority: 95, MachineTypes: []string{"robotics_cobot", "automotive", "metalworking", "general_industry"}, + 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).", + HarmDE: "Quetschungen, Knochenbrueche, innere Verletzungen durch Einklemmen von Koerperteilen.", + AffectedDE: "Bedienpersonal, Einrichter, Wartungspersonal", + 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, + 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.", + AffectedDE: "Bedienpersonal, Reinigungspersonal", + ZoneDE: "Schutzzaun-Oberkante, Roboterarm", + DefaultSeverity: 3, DefaultExposure: 2, + }, + { + ID: "HP1603", NameDE: "Eingeschlossen in Roboterzelle", NameEN: "Trapped inside robot cell", + RequiredComponentTags: []string{"moving_part", "guard"}, + GeneratedHazardCats: []string{"mechanical_hazard"}, + SuggestedMeasureIDs: []string{"M061", "M054", "M141"}, + Priority: 94, + 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", + ZoneDE: "Inneres der Roboterzelle", + DefaultSeverity: 4, DefaultExposure: 2, + }, + { + ID: "HP1604", NameDE: "Roboterarm durchschlaegt Schutzzaun", NameEN: "Robot arm penetrates safety fence", + RequiredComponentTags: []string{"moving_part", "guard"}, + GeneratedHazardCats: []string{"mechanical_hazard"}, + SuggestedMeasureIDs: []string{"M061", "M002"}, + Priority: 92, + 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.", + HarmDE: "Teile des Schutzzauns werden herausgeschleudert, Person ausserhalb wird getroffen.", + AffectedDE: "Bedienpersonal in der Naehe des Schutzzauns", + ZoneDE: "Schutzzaun, Bereich um die Roboterzelle", + DefaultSeverity: 3, DefaultExposure: 2, + }, + // ================================================================ + // Greifer / Werkstueck + // ================================================================ + { + ID: "HP1610", NameDE: "Quetschen im Greiferbereich des Roboters", NameEN: "Crushing in robot 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.", + TriggerDE: "Greiferbacken schliessen waehrend Koerperteil im Greifbereich ist.", + HarmDE: "Quetschung oder Amputation von Fingern durch Greifkraft.", + AffectedDE: "Bedienpersonal, Einrichter", + ZoneDE: "Greifer des Roboterarms, Werkstueckaufnahme", + DefaultSeverity: 3, DefaultExposure: 3, + }, + { + ID: "HP1611", NameDE: "Werkstueck faellt aus Greifer herab", NameEN: "Workpiece falls from gripper", + RequiredComponentTags: []string{"clamping_part"}, + 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).", + TriggerDE: "Werkstueck faellt aus Greifer und trifft Person unterhalb des Roboterarms.", + HarmDE: "Prellungen, Knochenbrueche abhaengig von Werkstueckgewicht und Fallhoehe.", + AffectedDE: "Bedienpersonal, Wartungspersonal", + ZoneDE: "Bereich unterhalb des Greifer/Roboterarms", + DefaultSeverity: 3, DefaultExposure: 2, + }, + { + ID: "HP1612", NameDE: "Werkstueck durchschlaegt Einhausung", NameEN: "Workpiece penetrates enclosure", + RequiredComponentTags: []string{"clamping_part", "guard"}, + GeneratedHazardCats: []string{"mechanical_hazard"}, + SuggestedMeasureIDs: []string{"M061", "M141"}, + Priority: 92, + 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.", + AffectedDE: "Bedienpersonal in der Naehe der Roboterzelle", + ZoneDE: "Schutzzaun, Bereich um die Roboterzelle", + DefaultSeverity: 3, DefaultExposure: 2, + }, + // ================================================================ + // Foerderbaender / Werkstueckzu-/-auslauf + // ================================================================ + { + ID: "HP1620", NameDE: "Quetschen an Foerderband-Einlauf", NameEN: "Crushing at conveyor infeed", + RequiredComponentTags: []string{"entanglement_risk"}, + 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.", + 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", + ZoneDE: "Foerderbaender, Bandein- und -auslauf", + DefaultSeverity: 2, DefaultExposure: 3, + }, + { + ID: "HP1621", NameDE: "Durchgreifen durch Foerderband-Oeffnung in Schutzzaun", NameEN: "Reaching through conveyor opening in fence", + RequiredComponentTags: []string{"entanglement_risk", "guard"}, + GeneratedHazardCats: []string{"mechanical_hazard"}, + SuggestedMeasureIDs: []string{"M002", "M061"}, + Priority: 93, + 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.", + AffectedDE: "Bedienpersonal", + ZoneDE: "Oeffnung der Foerderbaender im Schutzzaun, Roboterbereich dahinter", + DefaultSeverity: 3, DefaultExposure: 3, + }, + { + ID: "HP1622", NameDE: "Herunterfallen von Werkstueck am Bandende", NameEN: "Workpiece falling off conveyor end", + RequiredComponentTags: []string{"entanglement_risk"}, + 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.", + HarmDE: "Prellungen, Quetschung von Fuessen durch herabfallendes Werkstueck.", + AffectedDE: "Bedienpersonal am Be-/Entladeplatz", + ZoneDE: "Ende der Transportbaender, Be-/Entladeplatz", + DefaultSeverity: 2, DefaultExposure: 3, + }, + // ================================================================ + // Scharfe Kanten / Allgemein + // ================================================================ + { + ID: "HP1625", NameDE: "Schneiden an scharfen Kanten der Einhausung", NameEN: "Cutting on sharp enclosure edges", + RequiredComponentTags: []string{"guard"}, + 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.", + TriggerDE: "Zugaengliche Kanten sind nicht gerundet oder gebrochen.", + HarmDE: "Schnittwunden an Haenden und Armen.", + AffectedDE: "Bedienpersonal, Wartungspersonal, Reinigungspersonal", + ZoneDE: "Zugaengliche Kanten der Maschine und Einhausung", + DefaultSeverity: 2, DefaultExposure: 3, + }, + // ================================================================ + // Pneumatik / Druckluft + // ================================================================ + { + ID: "HP1630", NameDE: "Schlauch unter Druck springt ab", NameEN: "Pressurized hose comes loose", + RequiredComponentTags: []string{"pinch_point"}, + GeneratedHazardCats: []string{"mechanical_hazard"}, + SuggestedMeasureIDs: []string{"M420"}, + Priority: 91, + 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.", + AffectedDE: "Bedienpersonal, Wartungspersonal", + ZoneDE: "Pneumatikschlaeuche der Automation", + DefaultSeverity: 2, DefaultExposure: 2, + }, + { + ID: "HP1631", NameDE: "Restdruck in Pneumatik nach Abschaltung", NameEN: "Residual pressure in pneumatics after shutdown", + RequiredComponentTags: []string{"pinch_point"}, + GeneratedHazardCats: []string{"mechanical_hazard"}, + SuggestedMeasureIDs: []string{"M420", "M141"}, + Priority: 91, + 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.", + AffectedDE: "Wartungspersonal, Einrichter", + ZoneDE: "Pneumatikschlaeuche und -komponenten", + DefaultSeverity: 2, DefaultExposure: 2, + }, + // ================================================================ + // Kuehlschmierstoff (KSS) + // ================================================================ + { + ID: "HP1635", NameDE: "KSS-Leckage fuehrt zu Rutschgefahr", NameEN: "Coolant leakage causes slip hazard", + RequiredComponentTags: []string{}, + RequiredEnergyTags: []string{}, + GeneratedHazardCats: []string{"mechanical_hazard"}, + SuggestedMeasureIDs: []string{"M420"}, + Priority: 90, MachineTypes: []string{"cnc", "metalworking", "automotive"}, + ScenarioDE: "Kuehlschmierstoff tritt aus undichter Leitung oder Verbindung aus und bildet einen rutschigen Belag auf dem Boden.", + TriggerDE: "Leckage an Schlauchverbindung, Dichtungsversagen, Ueberdrucksituation.", + HarmDE: "Ausrutschen und Sturz, Prellungen, Knochenbrueche.", + AffectedDE: "Bedienpersonal, Wartungspersonal", + ZoneDE: "Boden um Bearbeitungszentrum und Kuehlschmierstoffanlage", + DefaultSeverity: 2, DefaultExposure: 3, + }, + { + 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"}, + 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.", + HarmDE: "Hautirritationen, allergische Reaktionen, bei laengerer Exposition Ekzeme.", + AffectedDE: "Bedienpersonal, Wartungspersonal", + ZoneDE: "Bearbeitungszentrum, Roboterzelle im Bereich der Beladetuer", + DefaultSeverity: 1, DefaultExposure: 3, + }, + { + 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"}, + 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.", + AffectedDE: "Bedienpersonal", + ZoneDE: "Bearbeitungszelle, Bereich vor der Schutztuer", + DefaultSeverity: 1, DefaultExposure: 3, + }, + // ================================================================ + // Elektrisch (Roboterzelle-spezifisch) + // ================================================================ + { + ID: "HP1640", NameDE: "Direktes Beruehren spannungsfuehrender Teile", NameEN: "Direct contact with live parts", + RequiredComponentTags: []string{}, + RequiredEnergyTags: []string{"electrical"}, + 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.", + TriggerDE: "Beschaedigte Isolation, fehlende Abdeckung, ungesicherter Schaltschrank.", + HarmDE: "Elektrischer Schlag, bei Hochspannung potentiell toedlich.", + AffectedDE: "Wartungspersonal, Einrichter", + ZoneDE: "Zugaengliche Kabel, Klemmen, Schaltschrank", + DefaultSeverity: 4, DefaultExposure: 2, + }, + { + ID: "HP1641", NameDE: "Indirektes Beruehren durch Schutzleiterfehler", NameEN: "Indirect contact due to PE conductor failure", + RequiredComponentTags: []string{}, + RequiredEnergyTags: []string{"electrical"}, + GeneratedHazardCats: []string{"electrical_hazard"}, + SuggestedMeasureIDs: []string{"M410", "M411"}, + Priority: 93, + 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.", + AffectedDE: "Bedienpersonal, Wartungspersonal", + ZoneDE: "Beruehrbare leitfaehige Oberflaechen der Anlage", + DefaultSeverity: 4, DefaultExposure: 2, + }, + { + ID: "HP1642", NameDE: "Kabelbrand durch Ueberlast oder Kurzschluss", NameEN: "Cable fire from overload or short circuit", + RequiredComponentTags: []string{}, + RequiredEnergyTags: []string{"electrical"}, + GeneratedHazardCats: []string{"electrical_hazard"}, + SuggestedMeasureIDs: []string{"M009"}, + Priority: 92, + 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.", + HarmDE: "Brand, Rauchentwicklung, Verletzung durch Feuer oder toxische Gase.", + AffectedDE: "Alle Personen im Bereich der Anlage", + ZoneDE: "Kabel und Leitungen der Anlage", + DefaultSeverity: 3, DefaultExposure: 2, + }, + } +} diff --git a/ai-compliance-sdk/internal/iace/pattern_engine.go b/ai-compliance-sdk/internal/iace/pattern_engine.go index 2fbe310..b490584 100644 --- a/ai-compliance-sdk/internal/iace/pattern_engine.go +++ b/ai-compliance-sdk/internal/iace/pattern_engine.go @@ -94,44 +94,11 @@ type PatternEngine struct { } // NewPatternEngine creates a PatternEngine with all pattern sources and resolver. +// Pattern registration is in pattern_registry.go (collectAllPatterns). func NewPatternEngine() *PatternEngine { - // Combine all pattern sources - patterns := GetBuiltinHazardPatterns() // HP001-HP044 - patterns = append(patterns, GetExtendedHazardPatterns()...) // HP045+ from rule library - patterns = append(patterns, GetPressHazardPatterns()...) // HP045-HP058 press-specific - patterns = append(patterns, GetCobotHazardPatterns()...) // HP059-HP065 cobot-specific - patterns = append(patterns, GetOperationalHazardPatterns()...) // HP066-HP093 operational states - patterns = append(patterns, GetDGUVExtendedPatterns()...) // HP094-HP133 DGUV themes - patterns = append(patterns, GetExtendedHazardPatterns2()...) // HP134-HP173 additional hazards - patterns = append(patterns, GetElevatorPatterns()...) // HP174-HP198 elevator/lift - patterns = append(patterns, GetAGVAgriPatterns()...) // HP199-HP228 AGV + agricultural - patterns = append(patterns, GetFoodProcessingPatterns()...) // HP300-HP319 food processing - patterns = append(patterns, GetPackagingPatterns()...) // HP320-HP334 packaging machines - patterns = append(patterns, GetLaserPatterns()...) // HP335-HP349 laser machines - patterns = append(patterns, GetMedicalDevicePatterns()...) // HP350-HP364 medical devices (IEC 60601) - patterns = append(patterns, GetPressureEquipmentPatterns()...) // HP365-HP374 pressure equipment - patterns = append(patterns, GetConstructionPatterns()...) // HP400-HP419 construction/crane - patterns = append(patterns, GetForestryConveyorPatterns()...) // HP420-HP450 forestry/conveyor - patterns = append(patterns, GetPlasticsMetalPatterns()...) // HP500-HP529 plastics + metalworking - patterns = append(patterns, GetWeldingGlassTextilePatterns()...) // HP530-HP559 welding + glass + textile - patterns = append(patterns, GetSpecificMachinePatterns()...) // HP730-HP755 pressure/wind/solar/battery - patterns = append(patterns, GetSpecificMachinePatterns2()...) // HP756-HP784 escalator/pool/playground/fitness/laundry/glass - patterns = append(patterns, GetCyberExtendedPatterns()...) // HP800-HP829 software faults/cyber-security - patterns = append(patterns, GetCyberExtendedPatterns2()...) // HP830-HP844 AI-ML specific - patterns = append(patterns, GetCyberExtendedPatterns3()...) // HP845-HP864 network/communication + HMI - patterns = append(patterns, GetWorkshopPatterns()...) // HP600-HP664 cross-machine workshop - patterns = append(patterns, GetMaintenanceExtPatterns()...) // HP700-HP729,HP900-HP934 maintenance lifecycle - patterns = append(patterns, GetFinalPatternsA()...) // HP1000-HP1084 mechanical body-part variants - patterns = append(patterns, GetFinalPatternsB()...) // HP1085-HP1169 electrical/thermal/chemical/bio/radiation - patterns = append(patterns, GetFinalPatternsC()...) // HP1170-HP1254 software/control/org/ergonomic/fire - patterns = append(patterns, GetFinalPatternsD()...) // HP1255-HP1335 lifecycle/special situations - patterns = append(patterns, GetCNCHazardPatterns()...) // HP1400-HP1419 CNC/metalworking part 1 (Phase 3) - patterns = append(patterns, GetCNCHazardPatternsExt()...) // HP1420-HP1434 CNC/metalworking part 2 (Phase 3) - patterns = append(patterns, GetVDMAIndustryPatterns()...) // HP1500-HP1549 VDMA sectors (Phase 3) - patterns = append(patterns, GetTextileAgriPatterns()...) // HP1550-HP1584 Textile + Agri (Phase 5) return &PatternEngine{ resolver: NewTagResolver(), - patterns: patterns, + patterns: collectAllPatterns(), } } diff --git a/ai-compliance-sdk/internal/iace/pattern_registry.go b/ai-compliance-sdk/internal/iace/pattern_registry.go new file mode 100644 index 0000000..17455cf --- /dev/null +++ b/ai-compliance-sdk/internal/iace/pattern_registry.go @@ -0,0 +1,42 @@ +package iace + +// collectAllPatterns gathers hazard patterns from all registered sources. +// This function is called by NewPatternEngine() to build the complete pattern set. +// New pattern sources are registered here. +func collectAllPatterns() []HazardPattern { + patterns := GetBuiltinHazardPatterns() // HP001-HP044 + patterns = append(patterns, GetExtendedHazardPatterns()...) // HP045+ from rule library + patterns = append(patterns, GetPressHazardPatterns()...) // HP045-HP058 press-specific + patterns = append(patterns, GetCobotHazardPatterns()...) // HP059-HP065 cobot-specific + patterns = append(patterns, GetOperationalHazardPatterns()...) // HP066-HP093 operational states + patterns = append(patterns, GetDGUVExtendedPatterns()...) // HP094-HP133 DGUV themes + patterns = append(patterns, GetExtendedHazardPatterns2()...) // HP134-HP173 additional hazards + patterns = append(patterns, GetElevatorPatterns()...) // HP174-HP198 elevator/lift + patterns = append(patterns, GetAGVAgriPatterns()...) // HP199-HP228 AGV + agricultural + patterns = append(patterns, GetFoodProcessingPatterns()...) // HP300-HP319 food processing + patterns = append(patterns, GetPackagingPatterns()...) // HP320-HP334 packaging machines + patterns = append(patterns, GetLaserPatterns()...) // HP335-HP349 laser machines + patterns = append(patterns, GetMedicalDevicePatterns()...) // HP350-HP364 medical devices (IEC 60601) + patterns = append(patterns, GetPressureEquipmentPatterns()...) // HP365-HP374 pressure equipment + patterns = append(patterns, GetConstructionPatterns()...) // HP400-HP419 construction/crane + patterns = append(patterns, GetForestryConveyorPatterns()...) // HP420-HP450 forestry/conveyor + patterns = append(patterns, GetPlasticsMetalPatterns()...) // HP500-HP529 plastics + metalworking + patterns = append(patterns, GetWeldingGlassTextilePatterns()...) // HP530-HP559 welding + glass + textile + patterns = append(patterns, GetSpecificMachinePatterns()...) // HP730-HP755 pressure/wind/solar/battery + patterns = append(patterns, GetSpecificMachinePatterns2()...) // HP756-HP784 escalator/pool/playground/fitness/laundry/glass + patterns = append(patterns, GetCyberExtendedPatterns()...) // HP800-HP829 software faults/cyber-security + patterns = append(patterns, GetCyberExtendedPatterns2()...) // HP830-HP844 AI-ML specific + patterns = append(patterns, GetCyberExtendedPatterns3()...) // HP845-HP864 network/communication + HMI + patterns = append(patterns, GetWorkshopPatterns()...) // HP600-HP664 cross-machine workshop + patterns = append(patterns, GetMaintenanceExtPatterns()...) // HP700-HP729,HP900-HP934 maintenance lifecycle + patterns = append(patterns, GetFinalPatternsA()...) // HP1000-HP1084 mechanical body-part variants + patterns = append(patterns, GetFinalPatternsB()...) // HP1085-HP1169 electrical/thermal/chemical/bio/radiation + patterns = append(patterns, GetFinalPatternsC()...) // HP1170-HP1254 software/control/org/ergonomic/fire + patterns = append(patterns, GetFinalPatternsD()...) // HP1255-HP1335 lifecycle/special situations + patterns = append(patterns, GetCNCHazardPatterns()...) // HP1400-HP1419 CNC/metalworking part 1 (Phase 3) + patterns = append(patterns, GetCNCHazardPatternsExt()...) // HP1420-HP1434 CNC/metalworking part 2 (Phase 3) + patterns = append(patterns, GetVDMAIndustryPatterns()...) // HP1500-HP1549 VDMA sectors (Phase 3) + patterns = append(patterns, GetTextileAgriPatterns()...) // HP1550-HP1584 Textile + Agri (Phase 5) + patterns = append(patterns, GetRobotCellPatterns()...) // HP1600-HP1649 Robot cell (GT benchmark) + return patterns +}