e9002175ac
Adds a curated database of safety-relevant features for the major
manufacturers across mechanical/plant engineering, written entirely in
own words with norm anchors. No verbatim manufacturer texts — therefore
no copyright issue:
- Markennennung (§ 23 MarkenG nominative use) is permitted.
- Fakten ueber Produkt-Sicherheitsfunktionen are not protected by § 2
UrhG (only Werke, not facts).
- NormReferences contain only the identifiers (e.g. "EN ISO 13849-1
PLd Kat.3"), never the norm text itself.
Coverage (52 entries across 12 categories):
Industrieroboter (10): FANUC DCS, KUKA SafeOperation, ABB SafeMove,
Yaskawa FSU, Staeubli CS9, Kawasaki Cubic-S, Mitsubishi MELFA,
Universal Robots PolyScope, Doosan PRS, Comau SafeNet
CNC/WZM (8): DMG MORI, Mazak, TRUMPF, Okuma, Hermle, Heidenhain
SPLC, GROB, Heller
Pneumatik (4): Festo, SMC, AVENTICS, Parker
Hydraulik (3): Bosch Rexroth, HAWE, HYDAC
Safety-PLC / Sicherheitstechnik (8): PILZ, SICK, Schmersal, Euchner,
Leuze, Phoenix Contact, Banner, Wieland
Standard-PLC (5): Siemens, Beckhoff, Rockwell, Schneider, B&R
Pressen (3): Schuler, Bruderer, AIDA
Spritzguss (3): Arburg, KraussMaffei, ENGEL
Verpackung (2): Krones, Bosch Packaging/Syntegon
Laser/Schweissen (3): Bystronic, Amada, Fronius
Foerdertechnik (2): Interroll, SEW EURODRIVE
Engine integration:
- LookupManufacturerFeaturesInText() scans the project narrative for
any of the manufacturer aliases (case-insensitive, umlaut-tolerant).
- Init-Handler appends matched feature clarifications to the relevant
hazard's "Mit Anlagenbauer zu klaeren:" block — for the right
HazardCategory only (e.g. FANUC DCS only on mechanical_hazard).
- For a Bremse project narrative mentioning "Fanuc Robodrill", the
engine now adds clarification questions like "Ist DCS am Roboter
konfiguriert?" to relevant mechanical hazards automatically.
Tests: 7 new pin tests — manufacturer count, norm prefixes, FANUC/KUKA
detection in narrative, umlaut robustness (Staeubli vs Staubli).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
596 lines
34 KiB
Go
596 lines
34 KiB
Go
package iace
|
|
|
|
// ManufacturerSafetyFeature describes one safety-relevant feature of a named
|
|
// machine/component manufacturer. The data are in our own words (no verbatim
|
|
// quotes from manufacturer manuals) plus the corresponding norm reference,
|
|
// so this file is urheberrechtlich unproblematisch:
|
|
// - Markennennung (Nominativ-Gebrauch, § 23 MarkenG) ist erlaubt.
|
|
// - Tatsachenfeststellungen ueber Produkt-Sicherheitsfunktionen sind nicht
|
|
// urheberrechtlich geschuetzt (§ 2 UrhG umfasst nur Werke, keine Fakten).
|
|
// - Norm-Verweise enthalten nur die Identifikatoren (z.B. "EN ISO 13849-1
|
|
// PLd Kat.3"), nicht den Normtext selbst.
|
|
//
|
|
// Engine-Verwendung: bei Pattern-Initialisierung scannt der Init-Handler das
|
|
// limits_form-Narrativ auf bekannte Manufacturer-Aliases. Jeder Treffer
|
|
// haengt die zugehoerigen ClarificationQuestions an alle anlagenrelevanten
|
|
// Hazards an. Damit erfindet die Engine weiterhin keine Kommentare, sondern
|
|
// liefert nur prueffaehige Hinweise mit Norm-Anker.
|
|
type ManufacturerSafetyFeature struct {
|
|
Manufacturer string `json:"manufacturer"`
|
|
Aliases []string `json:"aliases"` // Such-Strings im limits_form (Marken, Produktreihen)
|
|
Category string `json:"category"` // robot, cnc, pneumatic, hydraulic, safety_plc, plc, press, injection_molding, packaging, laser, conveyor
|
|
FeatureName string `json:"feature_name"` // Markenname des Safety-Features (kurz)
|
|
FeatureSummary string `json:"feature_summary"` // Eigenformulierte Beschreibung in 1-2 Saetzen
|
|
NormReferences []string `json:"norm_references"` // EN/ISO/IEC + Ziffer
|
|
Clarifications []string `json:"clarifications"` // Prueffragen an den Anlagenbauer
|
|
AppliesToHazardCats []string `json:"applies_to_hazard_categories,omitempty"` // Optionaler Hazard-Filter (z.B. nur mechanical_hazard)
|
|
}
|
|
|
|
// GetManufacturerSafetyFeatures returns ~50 curated safety-feature entries
|
|
// across the major segments of mechanical/plant engineering. Quellen sind
|
|
// jeweils oeffentlich zugaengliche Produktbezeichnungen und Norm-IDs.
|
|
func GetManufacturerSafetyFeatures() []ManufacturerSafetyFeature {
|
|
return []ManufacturerSafetyFeature{
|
|
// ── Industrieroboter (10) ─────────────────────────────────────
|
|
{
|
|
Manufacturer: "FANUC", Aliases: []string{"fanuc", "robodrill", "r-30ib", "r-30ia", "cr-series", "crx"},
|
|
Category: "robot", FeatureName: "Dual Check Safety (DCS)",
|
|
FeatureSummary: "Zweikanalig redundante Achs- und Geschwindigkeitsueberwachung im Controller. Software-definierte Sicherheitszonen mit STO bei Verletzung.",
|
|
NormReferences: []string{"EN ISO 13849-1 PLd Kat.3", "EN ISO 10218-1 Ziff. 5.12"},
|
|
Clarifications: []string{
|
|
"Ist Dual Check Safety (DCS) am Roboter konfiguriert und durch den Hersteller validiert? Konfigurations-Protokoll anfordern.",
|
|
"Welche Achsen sind ueber DCS Position/Geschwindigkeit begrenzt und welcher Sicherheitszonen-Layout liegt vor?",
|
|
},
|
|
AppliesToHazardCats: []string{"mechanical_hazard"},
|
|
},
|
|
{
|
|
Manufacturer: "KUKA", Aliases: []string{"kuka", "kr c4", "kr c5", "kr iiwa", "kmr iiwa", "lbr"},
|
|
Category: "robot", FeatureName: "SafeOperation / SafeRangeMonitoring",
|
|
FeatureSummary: "Software-Sicherheitsfunktionen im KUKA Safety Controller: ueberwachte Arbeitsraeume, Werkzeug-Bezugspunkte, Geschwindigkeiten. Sicherheits-STO bei Zonenverletzung.",
|
|
NormReferences: []string{"EN ISO 13849-1 PLd Kat.3", "EN ISO 10218-1"},
|
|
Clarifications: []string{
|
|
"Ist SafeOperation oder SafeRangeMonitoring lizenziert + konfiguriert? KUKA-Sicherheitskonfigurationsbericht anfordern.",
|
|
"Welche Sicherheits-Werkzeuge und -Raeume sind definiert (Sitemap)?",
|
|
},
|
|
AppliesToHazardCats: []string{"mechanical_hazard"},
|
|
},
|
|
{
|
|
Manufacturer: "ABB Robotics", Aliases: []string{"abb", "irb", "irc5", "omnicore", "yumi", "gofa"},
|
|
Category: "robot", FeatureName: "SafeMove (SafeMove2, SafeMove Pro)",
|
|
FeatureSummary: "Sicherheits-Software fuer ABB-Roboter: Achspositions- und Geschwindigkeitsueberwachung, Stand-Still-Monitoring, sichere Werkzeug-Orientierung.",
|
|
NormReferences: []string{"EN ISO 13849-1 PLd Kat.3", "EN ISO 10218-1"},
|
|
Clarifications: []string{
|
|
"Ist SafeMove (oder SafeMove Pro) konfiguriert? ABB-Sicherheits-Validierungsbericht (Safety Report) anfordern.",
|
|
"Welche Safe Zones, Safe Tool Directions und Safe Stand Still Bereiche sind eingerichtet?",
|
|
},
|
|
AppliesToHazardCats: []string{"mechanical_hazard"},
|
|
},
|
|
{
|
|
Manufacturer: "Yaskawa Motoman", Aliases: []string{"yaskawa", "motoman", "gp-series", "yrc1000", "hc-series"},
|
|
Category: "robot", FeatureName: "Functional Safety Unit (FSU)",
|
|
FeatureSummary: "Hardware-Safety-Modul im YRC-Controller: ueberwachte Achsbereiche, Werkzeug-Position, Geschwindigkeitsgrenzen mit zweikanaliger Redundanz.",
|
|
NormReferences: []string{"EN ISO 13849-1 PLd Kat.3", "EN ISO 10218-1"},
|
|
Clarifications: []string{
|
|
"Ist die Functional Safety Unit (FSU) lizenziert und konfiguriert? Sicherheits-Konfigurationsdokument anfordern.",
|
|
},
|
|
AppliesToHazardCats: []string{"mechanical_hazard"},
|
|
},
|
|
{
|
|
Manufacturer: "Stäubli Robotics", Aliases: []string{"staeubli", "stäubli", "staubli", "cs9", "tx2", "tx2touch"},
|
|
Category: "robot", FeatureName: "CS9 Safety / Safety Manager",
|
|
FeatureSummary: "CS9-Controller mit integriertem Safety Board: sichere Position/Geschwindigkeit, ueberwachte Sicherheits-Werkzeuge, Kollaborationsfunktionen.",
|
|
NormReferences: []string{"EN ISO 13849-1 PLd Kat.3", "EN ISO 10218-1"},
|
|
Clarifications: []string{
|
|
"Ist der Stäubli Safety Manager konfiguriert? Konfigurations- und Validierungs-Protokoll anfordern.",
|
|
},
|
|
AppliesToHazardCats: []string{"mechanical_hazard"},
|
|
},
|
|
{
|
|
Manufacturer: "Kawasaki Robotics", Aliases: []string{"kawasaki", "f-series", "r-series", "duaro", "cubic-s"},
|
|
Category: "robot", FeatureName: "Cubic-S Safety",
|
|
FeatureSummary: "Software-Sicherheitsfunktionen im Kawasaki-Controller: ueberwachte Arbeitsraeume, Werkzeug-Geschwindigkeiten, sichere Stop-Funktionen.",
|
|
NormReferences: []string{"EN ISO 13849-1 PLd Kat.3", "EN ISO 10218-1"},
|
|
Clarifications: []string{
|
|
"Ist Cubic-S Safety lizenziert und konfiguriert?",
|
|
},
|
|
AppliesToHazardCats: []string{"mechanical_hazard"},
|
|
},
|
|
{
|
|
Manufacturer: "Mitsubishi Robotics", Aliases: []string{"melfa", "rv-f", "assista"},
|
|
Category: "robot", FeatureName: "iQ-Platform Safety",
|
|
FeatureSummary: "Safety-Integration ueber Mitsubishi iQ-Platform mit MELFA-Robotern: sichere Stop, ueberwachte Geschwindigkeit ueber CC-Link IE Safety.",
|
|
NormReferences: []string{"EN ISO 13849-1 PLd Kat.3"},
|
|
Clarifications: []string{
|
|
"Ist die iQ-Platform-Safety mit MELFA-Robotern konfiguriert?",
|
|
},
|
|
AppliesToHazardCats: []string{"mechanical_hazard"},
|
|
},
|
|
{
|
|
Manufacturer: "Universal Robots", Aliases: []string{"universal robots", "ur3", "ur5", "ur10", "ur16", "ur20"},
|
|
Category: "robot", FeatureName: "Safety Functions (PolyScope Safety)",
|
|
FeatureSummary: "Eingebaute Sicherheitsfunktionen: Force/Power-Limit, Joint Position/Speed Limit, TCP-Position-Limit. 17 konfigurierbare Safety-Parameter.",
|
|
NormReferences: []string{"EN ISO 13849-1 PLd Kat.3", "ISO/TS 15066 — Cobot"},
|
|
Clarifications: []string{
|
|
"Welche Force/Power-Limits, Geschwindigkeitsgrenzen und Safety-Zonen sind in PolyScope eingestellt?",
|
|
"Wurde eine Risk Assessment fuer den kollaborativen Betrieb nach ISO/TS 15066 durchgefuehrt?",
|
|
},
|
|
AppliesToHazardCats: []string{"mechanical_hazard"},
|
|
},
|
|
{
|
|
Manufacturer: "Doosan Robotics", Aliases: []string{"doosan", "m-series", "h-series", "a-series"},
|
|
Category: "robot", FeatureName: "Personal Risk Solution (PRS)",
|
|
FeatureSummary: "Cobot-Sicherheitssystem mit Force-Sensoren und konfigurierbaren Geschwindigkeits-/Kraftgrenzen fuer Mensch-Roboter-Kollaboration.",
|
|
NormReferences: []string{"EN ISO 13849-1 PLd Kat.3", "ISO/TS 15066"},
|
|
Clarifications: []string{"Wurde die PRS-Konfiguration validiert? Kraftmessprotokoll vorhanden?"},
|
|
AppliesToHazardCats: []string{"mechanical_hazard"},
|
|
},
|
|
{
|
|
Manufacturer: "Comau", Aliases: []string{"comau", "nj-series", "racer", "aura"},
|
|
Category: "robot", FeatureName: "SafeNet Safety",
|
|
FeatureSummary: "Comau-Safety-Plattform mit ueberwachten Arbeitsraeumen, sicherer Geschwindigkeitsreduzierung und kollaborativen Funktionen (AURA).",
|
|
NormReferences: []string{"EN ISO 13849-1 PLd Kat.3", "EN ISO 10218-1"},
|
|
Clarifications: []string{"Ist SafeNet aktiviert? Sicherheitsraum-Konfiguration vorhanden?"},
|
|
AppliesToHazardCats: []string{"mechanical_hazard"},
|
|
},
|
|
|
|
// ── CNC / Werkzeugmaschinen (8) ───────────────────────────────
|
|
{
|
|
Manufacturer: "DMG MORI", Aliases: []string{"dmg mori", "dmgmori", "ctx", "nlx", "nhx", "dmu", "dmc"},
|
|
Category: "cnc", FeatureName: "ERGOline Safety + DMG Safety Bridge",
|
|
FeatureSummary: "Sicherheits-Integration in CELOS/SLIMline-HMI: Verriegelungen, sichere Betriebsartenwahl, Tueren mit Zuhaltung. Maschine traegt CE.",
|
|
NormReferences: []string{"EN ISO 16090-1", "EN ISO 23125", "EN 60204-1"},
|
|
Clarifications: []string{
|
|
"Liegt die CE-Konformitaetserklaerung der DMG MORI-Maschine vor und deckt sie den Einrichtbetrieb ab?",
|
|
"Sind Schutztueren mit Sicherheitszuhaltung nach EN ISO 14119 ausgefuehrt?",
|
|
},
|
|
AppliesToHazardCats: []string{"mechanical_hazard"},
|
|
},
|
|
{
|
|
Manufacturer: "Mazak", Aliases: []string{"mazak", "mazatrol", "integrex", "variaxis", "quick turn"},
|
|
Category: "cnc", FeatureName: "Mazatrol SmoothX Safety",
|
|
FeatureSummary: "Mazatrol-Steuerung mit Safe-Setup-Modus, Tuerverriegelung und ueberwachten Bearbeitungsraeumen.",
|
|
NormReferences: []string{"EN ISO 16090-1", "EN ISO 23125"},
|
|
Clarifications: []string{"Liegt die CE-Konformitaetserklaerung der Mazak-Maschine vor?"},
|
|
AppliesToHazardCats: []string{"mechanical_hazard"},
|
|
},
|
|
{
|
|
Manufacturer: "TRUMPF", Aliases: []string{"trumpf", "trulaser", "trudisk", "trumatic", "trupunch", "trubend"},
|
|
Category: "cnc", FeatureName: "BrightLine / TruControl Safety",
|
|
FeatureSummary: "TRUMPF-Sicherheitskonzepte: Laserschutz-Einhausungen mit verriegelten Tueren, sichere Strahlfuehrung, ueberwachte Press-/Biegevorgaenge.",
|
|
NormReferences: []string{"EN 12626 — Laser", "EN 12622 — Pressbiege", "EN ISO 13849-1"},
|
|
Clarifications: []string{
|
|
"Ist die Laserschutzklasse 1 nach EN 60825-1 durch Einhausung gewaehrleistet?",
|
|
"Liegt CE-Konformitaetserklaerung der TRUMPF-Maschine vor?",
|
|
},
|
|
AppliesToHazardCats: []string{"mechanical_hazard", "radiation_hazard"},
|
|
},
|
|
{
|
|
Manufacturer: "Okuma", Aliases: []string{"okuma", "osp", "macturn", "multus", "lt2000"},
|
|
Category: "cnc", FeatureName: "OSP Safety",
|
|
FeatureSummary: "Okuma-OSP-Steuerung mit integrierter Maschinen-Safety, Door-Interlock, Spindle-Stop bei Tueroeffnung.",
|
|
NormReferences: []string{"EN ISO 16090-1", "EN ISO 23125"},
|
|
Clarifications: []string{"Welche Safe-Setup-Modi sind im OSP konfiguriert?"},
|
|
AppliesToHazardCats: []string{"mechanical_hazard"},
|
|
},
|
|
{
|
|
Manufacturer: "Hermle", Aliases: []string{"hermle", "c-serie", "c12", "c22", "c32", "c42", "c52", "c62"},
|
|
Category: "cnc", FeatureName: "Hermle Safety Concept",
|
|
FeatureSummary: "5-Achs-Bearbeitungszentren mit verriegelten Schutztueren, Heidenhain-Steuerung mit SPLC, Sicherheits-Stop ueber Tuerschalter.",
|
|
NormReferences: []string{"EN ISO 16090-1"},
|
|
Clarifications: []string{"Ist die SPLC-Konfiguration (Heidenhain SafetyPLC) dokumentiert?"},
|
|
AppliesToHazardCats: []string{"mechanical_hazard"},
|
|
},
|
|
{
|
|
Manufacturer: "Heidenhain", Aliases: []string{"heidenhain", "tnc", "tnc7", "itnc", "splc"},
|
|
Category: "cnc", FeatureName: "Functional Safety FS / SPLC",
|
|
FeatureSummary: "TNC-Steuerungen mit integrierter Safety-PLC (SPLC): sichere Stops SS1/SS2/STO, sichere Achsueberwachung, Door-Monitoring.",
|
|
NormReferences: []string{"EN ISO 13849-1 PLd Kat.3", "EN 61800-5-2"},
|
|
Clarifications: []string{"Welche FS-Funktionen (SS1/SS2/SLS/SOS/STO) sind in der SPLC aktiviert?"},
|
|
AppliesToHazardCats: []string{"mechanical_hazard"},
|
|
},
|
|
{
|
|
Manufacturer: "GROB", Aliases: []string{"grob", "g350", "g550", "g720"},
|
|
Category: "cnc", FeatureName: "GROB-Safety mit Sinumerik Safety Integrated",
|
|
FeatureSummary: "GROB Bearbeitungszentren mit Sinumerik-Safety-Integrated: ueberwachte Spindel-, Verfahrachs- und Schutztuer-Sicherheit.",
|
|
NormReferences: []string{"EN ISO 16090-1", "EN 61800-5-2"},
|
|
Clarifications: []string{"Ist Sinumerik Safety Integrated im GROB-System konfiguriert?"},
|
|
AppliesToHazardCats: []string{"mechanical_hazard"},
|
|
},
|
|
{
|
|
Manufacturer: "Heller", Aliases: []string{"heller", "h-series", "hf-series", "mc-series"},
|
|
Category: "cnc", FeatureName: "Heller Safety Concept",
|
|
FeatureSummary: "Heller-Bearbeitungszentren mit Sinumerik-Safety, verriegelten Schutztueren, sicherem Werkzeugwechsel.",
|
|
NormReferences: []string{"EN ISO 16090-1"},
|
|
Clarifications: []string{"Sind alle Wartungs- und Beladetueren mit Zuhaltung nach EN ISO 14119 ausgeruestet?"},
|
|
AppliesToHazardCats: []string{"mechanical_hazard"},
|
|
},
|
|
|
|
// ── Pneumatik (4) ─────────────────────────────────────────────
|
|
{
|
|
Manufacturer: "Festo", Aliases: []string{"festo"},
|
|
Category: "pneumatic", FeatureName: "Sicheres Belueften/Entlueften (VOFA/VABF)",
|
|
FeatureSummary: "Festo-Sicherheitsventile fuer Pneumatik-Hauptkreise: sicheres Belueften und Entlueften nach EN ISO 13849-1. Beispielprodukte: VOFA, VABF-Sxx.",
|
|
NormReferences: []string{"EN ISO 13849-1 PLd/PLe", "EN ISO 4414 Ziff. 5.3.4"},
|
|
Clarifications: []string{
|
|
"Welche sicheren Entlueftungsventile (z.B. Festo VABF-S, VOFA) sind im Pneumatikkreis verbaut?",
|
|
"Liegt das Sicherheits-Berechnungsprotokoll (Performance Level) nach EN ISO 13849-1 vor?",
|
|
},
|
|
AppliesToHazardCats: []string{"mechanical_hazard", "pneumatic_hydraulic"},
|
|
},
|
|
{
|
|
Manufacturer: "SMC", Aliases: []string{"smc"},
|
|
Category: "pneumatic", FeatureName: "Safe Energy Isolation",
|
|
FeatureSummary: "SMC-Sicherheitsventile (z.B. VP-X536, VHS40-X) fuer sicheres Trennen und Entlueften pneumatischer Energie. EN ISO 13849-1 PLd/PLe.",
|
|
NormReferences: []string{"EN ISO 13849-1 PLd/PLe", "EN ISO 4414 Ziff. 5.3.4"},
|
|
Clarifications: []string{"Welche SMC-Sicherheitsventile sind im sicheren Entlueftungspfad eingesetzt?"},
|
|
AppliesToHazardCats: []string{"mechanical_hazard", "pneumatic_hydraulic"},
|
|
},
|
|
{
|
|
Manufacturer: "AVENTICS", Aliases: []string{"aventics", "emerson aventics"},
|
|
Category: "pneumatic", FeatureName: "Safety-Pneumatik (z.B. AV-Serie)",
|
|
FeatureSummary: "AVENTICS Sicherheitsventile fuer Hauptbelueftung und Schlauchbruchsicherung in Pneumatik-Anlagen.",
|
|
NormReferences: []string{"EN ISO 13849-1 PLd/PLe", "EN ISO 4414"},
|
|
Clarifications: []string{"Liegt der Pneumatik-Sicherheitsplan inkl. Performance-Level-Berechnung vor?"},
|
|
AppliesToHazardCats: []string{"mechanical_hazard", "pneumatic_hydraulic"},
|
|
},
|
|
{
|
|
Manufacturer: "Parker Pneumatik", Aliases: []string{"parker hannifin", "parker pneumatic"},
|
|
Category: "pneumatic", FeatureName: "Sicherheits-Druckluftventile",
|
|
FeatureSummary: "Parker-Druckluftsicherheit fuer Hauptkreis-Trennung und Schnellentlueftung in Anlagen.",
|
|
NormReferences: []string{"EN ISO 13849-1 PLd/PLe", "EN ISO 4414"},
|
|
Clarifications: []string{"Welche Parker-Sicherheitsventile sind im pneumatischen Hauptkreis eingesetzt?"},
|
|
AppliesToHazardCats: []string{"mechanical_hazard", "pneumatic_hydraulic"},
|
|
},
|
|
|
|
// ── Hydraulik (3) ─────────────────────────────────────────────
|
|
{
|
|
Manufacturer: "Bosch Rexroth", Aliases: []string{"bosch rexroth", "rexroth", "indracontrol", "indradrive"},
|
|
Category: "hydraulic", FeatureName: "Safety on Board / Sicherheitsachsen",
|
|
FeatureSummary: "Sicherheitsfunktionen in IndraDrive-Antrieben und Hydraulik-Aggregaten: SS1/SS2/STO/SLS/SOS, sichere Druckueberwachung.",
|
|
NormReferences: []string{"EN ISO 13849-1 PLd Kat.3", "EN 61800-5-2", "EN ISO 4413 — Hydraulik"},
|
|
Clarifications: []string{
|
|
"Welche Safety-on-Board-Funktionen sind im IndraDrive aktiviert (SS1/SS2/STO/SLS)?",
|
|
"Liegt das hydraulische Sicherheits-Konzept nach EN ISO 4413 vor?",
|
|
},
|
|
AppliesToHazardCats: []string{"mechanical_hazard", "pneumatic_hydraulic"},
|
|
},
|
|
{
|
|
Manufacturer: "HAWE Hydraulik", Aliases: []string{"hawe hydraulik", "hawe"},
|
|
Category: "hydraulic", FeatureName: "Sichere Hydraulik-Aggregate",
|
|
FeatureSummary: "HAWE-Aggregate mit sicheren Druckentlastungs- und Absperrventilen fuer EN ISO 4413-konforme Sicherheitskreise.",
|
|
NormReferences: []string{"EN ISO 4413"},
|
|
Clarifications: []string{"Liegt der Hydraulik-Sicherheitsplan inkl. Druckentlastungsventil-Auslegung vor?"},
|
|
AppliesToHazardCats: []string{"pneumatic_hydraulic", "mechanical_hazard"},
|
|
},
|
|
{
|
|
Manufacturer: "HYDAC", Aliases: []string{"hydac"},
|
|
Category: "hydraulic", FeatureName: "Sichere Druckspeicherung",
|
|
FeatureSummary: "HYDAC-Komponenten fuer sichere Druckspeicher-Aggregate inkl. Sicherheitsventile und Druckwaechter.",
|
|
NormReferences: []string{"EN ISO 4413", "Druckgeraeterichtlinie 2014/68/EU"},
|
|
Clarifications: []string{"Sind Druckspeicher nach Druckgeraeterichtlinie 2014/68/EU geprueft und gekennzeichnet?"},
|
|
AppliesToHazardCats: []string{"pneumatic_hydraulic", "mechanical_hazard"},
|
|
},
|
|
|
|
// ── Sicherheits-SPS / Safety-Spezialisten (8) ─────────────────
|
|
{
|
|
Manufacturer: "PILZ", Aliases: []string{"pilz", "pnoz", "pss 4000", "pssu", "psen", "pmi"},
|
|
Category: "safety_plc", FeatureName: "PNOZ / PSS 4000 Safety-Family",
|
|
FeatureSummary: "Pilz-Sicherheitsrelais (PNOZ) und programmierbare Sicherheits-SPS (PSS 4000): zertifizierte Sicherheitsketten bis PLe/SIL3.",
|
|
NormReferences: []string{"EN ISO 13849-1 PLe Kat.4", "IEC 61508 SIL3", "IEC 62061 SIL3"},
|
|
Clarifications: []string{
|
|
"Liegt der Pilz-Sicherheitsschaltplan inkl. PL-Berechnung (PAScal) vor?",
|
|
"Welche PNOZ/PSS-Geraete sind in der Sicherheitskette aktiv?",
|
|
},
|
|
AppliesToHazardCats: []string{"mechanical_hazard", "safety_function_failure"},
|
|
},
|
|
{
|
|
Manufacturer: "SICK", Aliases: []string{"sick", "microscan3", "nanoscan3", "deTec", "c4000", "s3000", "flexi soft"},
|
|
Category: "safety_plc", FeatureName: "Flexi Soft + Safety Laserscanner",
|
|
FeatureSummary: "SICK-Sicherheitstechnik: Flexi Soft Safety-Controller, Laserscanner microScan3/nanoScan3, Lichtvorhaenge deTec4, Sicherheitsschalter.",
|
|
NormReferences: []string{"EN ISO 13849-1 PLd/PLe", "EN 61496 — Laserscanner"},
|
|
Clarifications: []string{
|
|
"Welche SICK-Sicherheitssensoren (Laserscanner, Lichtvorhang) decken welche Zonen ab? Sitemap vorhanden?",
|
|
"Ist der Flexi Soft-Sicherheitsplan dokumentiert?",
|
|
},
|
|
AppliesToHazardCats: []string{"mechanical_hazard", "safety_function_failure"},
|
|
},
|
|
{
|
|
Manufacturer: "Schmersal", Aliases: []string{"schmersal", "azm", "tesf", "psc1", "protect"},
|
|
Category: "safety_plc", FeatureName: "PROTECT-Familie Sicherheitsschalter + PSC1",
|
|
FeatureSummary: "Schmersal Sicherheits-Tueverriegelungen (AZM, TESF), Sicherheitssensoren und PSC1 Safety-Controller.",
|
|
NormReferences: []string{"EN ISO 14119 — Verriegelungseinrichtungen", "EN ISO 13849-1"},
|
|
Clarifications: []string{
|
|
"Welche Schmersal AZM/TESF Tuerverriegelungen sind eingesetzt? Pruefprotokoll Manipulationssicherheit vorhanden?",
|
|
},
|
|
AppliesToHazardCats: []string{"mechanical_hazard", "safety_function_failure"},
|
|
},
|
|
{
|
|
Manufacturer: "Euchner", Aliases: []string{"euchner", "ces", "mgb", "ctp", "cet"},
|
|
Category: "safety_plc", FeatureName: "MGB/CES/CTP Tuerverriegelung",
|
|
FeatureSummary: "Euchner-Sicherheitsschalter mit transponderbasierter Identifikation, Multifunktionsgehaeuse MGB-L mit integrierter Zuhaltung.",
|
|
NormReferences: []string{"EN ISO 14119", "EN ISO 13849-1 PLd Kat.3"},
|
|
Clarifications: []string{"Welche Euchner-Sicherheitsschalter sichern welche Zugaenge?"},
|
|
AppliesToHazardCats: []string{"mechanical_hazard", "safety_function_failure"},
|
|
},
|
|
{
|
|
Manufacturer: "Leuze", Aliases: []string{"leuze", "rsl400", "msl", "cml"},
|
|
Category: "safety_plc", FeatureName: "RSL400 Safety Laserscanner + Lichtvorhang",
|
|
FeatureSummary: "Leuze RSL400-Sicherheits-Laserscanner und MSL Sicherheitslichtvorhaenge mit konfigurierbaren Schutzfeldern.",
|
|
NormReferences: []string{"EN 61496 — Laserscanner", "EN ISO 13849-1 PLd"},
|
|
Clarifications: []string{"Welche Schutzfelder/Warnfelder sind im Leuze RSL400 konfiguriert?"},
|
|
AppliesToHazardCats: []string{"mechanical_hazard", "safety_function_failure"},
|
|
},
|
|
{
|
|
Manufacturer: "Phoenix Contact", Aliases: []string{"phoenix contact", "psr classic", "psrclassic", "safetybridge", "axiomatic"},
|
|
Category: "safety_plc", FeatureName: "PSR / SafetyBridge",
|
|
FeatureSummary: "Phoenix Contact Sicherheitsrelais (PSR) und SafetyBridge fuer dezentrale Safety-Funktionen ueber Feldbus.",
|
|
NormReferences: []string{"EN ISO 13849-1 PLe Kat.4", "IEC 61508 SIL3"},
|
|
Clarifications: []string{"Welche PSR-Sicherheitsrelais sind in der Sicherheitskette aktiv?"},
|
|
AppliesToHazardCats: []string{"mechanical_hazard", "safety_function_failure"},
|
|
},
|
|
{
|
|
Manufacturer: "Banner Engineering", Aliases: []string{"banner engineering", "ez-light", "ssa", "xs26"},
|
|
Category: "safety_plc", FeatureName: "XS26 Safety Controller + Lichtvorhaenge",
|
|
FeatureSummary: "Banner XS26 programmierbare Sicherheits-SPS plus EZ-LIGHT/SSA-Lichtvorhaenge fuer Zugangsabsicherung.",
|
|
NormReferences: []string{"EN ISO 13849-1 PLd/PLe", "IEC 61508 SIL3"},
|
|
Clarifications: []string{"Liegt die XS26-Sicherheitsprogrammierung mit Pruefbericht vor?"},
|
|
AppliesToHazardCats: []string{"mechanical_hazard", "safety_function_failure"},
|
|
},
|
|
{
|
|
Manufacturer: "Wieland", Aliases: []string{"wieland", "samos pro", "samos plan6"},
|
|
Category: "safety_plc", FeatureName: "samos PRO Safety-SPS",
|
|
FeatureSummary: "Wieland samos PRO programmierbare Sicherheits-SPS mit grafischer Konfiguration und zertifizierten Funktionsbausteinen.",
|
|
NormReferences: []string{"EN ISO 13849-1 PLe Kat.4", "IEC 61508 SIL3"},
|
|
Clarifications: []string{"Liegt die samos-PRO-Konfiguration mit PL-Verifikation vor?"},
|
|
AppliesToHazardCats: []string{"mechanical_hazard", "safety_function_failure"},
|
|
},
|
|
|
|
// ── Standard-SPS / Automation mit Safety-Funktion (5) ─────────
|
|
{
|
|
Manufacturer: "Siemens", Aliases: []string{"siemens", "simatic", "s7-1500f", "s7-1200f", "tia portal", "sinumerik", "sinamics"},
|
|
Category: "plc", FeatureName: "Safety Integrated (S7-1500F, Sinumerik, Sinamics)",
|
|
FeatureSummary: "Siemens-Safety-Integrated: failsafe SPS S7-1500F mit PROFIsafe, Sinumerik CNC-Safety, Sinamics Drive-Safety mit SS1/SS2/STO/SLS.",
|
|
NormReferences: []string{"EN ISO 13849-1 PLe Kat.4", "IEC 61508 SIL3", "EN 61800-5-2"},
|
|
Clarifications: []string{
|
|
"Welche Safety-Integrated-Funktionen sind in Sinumerik/Sinamics aktiviert?",
|
|
"Liegt das Safety-Validierungsprotokoll (Safety Matrix) vor?",
|
|
},
|
|
AppliesToHazardCats: []string{"mechanical_hazard", "safety_function_failure", "electrical_hazard"},
|
|
},
|
|
{
|
|
Manufacturer: "Beckhoff", Aliases: []string{"beckhoff", "twincat", "twinsafe", "el6900", "el2904", "el1904"},
|
|
Category: "plc", FeatureName: "TwinSAFE",
|
|
FeatureSummary: "Beckhoff TwinSAFE: dezentrale Safety-Komponenten ueber EtherCAT-Safety, TwinCAT-Safety-Editor, zertifizierte Funktionsbausteine.",
|
|
NormReferences: []string{"EN ISO 13849-1 PLe Kat.4", "IEC 61508 SIL3"},
|
|
Clarifications: []string{"Welche TwinSAFE-Komponenten sind in der Sicherheitskette? Sicherheitsprojekt-Doku vorhanden?"},
|
|
AppliesToHazardCats: []string{"mechanical_hazard", "safety_function_failure"},
|
|
},
|
|
{
|
|
Manufacturer: "Rockwell Automation", Aliases: []string{"rockwell", "allen bradley", "guardlogix", "studio 5000", "compactlogix"},
|
|
Category: "plc", FeatureName: "GuardLogix + Safety I/O",
|
|
FeatureSummary: "Rockwell GuardLogix Safety-SPS mit Studio 5000 Logix Designer, Safety-I/O ueber CIP Safety.",
|
|
NormReferences: []string{"EN ISO 13849-1 PLe Kat.4", "IEC 61508 SIL3"},
|
|
Clarifications: []string{"Liegt das GuardLogix-Sicherheitsprojekt mit PL-Berechnung vor?"},
|
|
AppliesToHazardCats: []string{"mechanical_hazard", "safety_function_failure"},
|
|
},
|
|
{
|
|
Manufacturer: "Schneider Electric", Aliases: []string{"schneider electric", "preventa", "modicon m580 safety", "preventa xpsmc"},
|
|
Category: "plc", FeatureName: "Preventa Safety / M580 Safety",
|
|
FeatureSummary: "Schneider Preventa-Sicherheitsrelais und M580-Safety-SPS mit zertifizierten Funktionsbausteinen.",
|
|
NormReferences: []string{"EN ISO 13849-1 PLe Kat.4", "IEC 61508 SIL3"},
|
|
Clarifications: []string{"Welche Preventa/M580-Safety-Komponenten sind aktiv?"},
|
|
AppliesToHazardCats: []string{"mechanical_hazard", "safety_function_failure"},
|
|
},
|
|
{
|
|
Manufacturer: "B&R Industrial Automation", Aliases: []string{"b&r", "b und r", "br automation", "safelogic", "x20 safety"},
|
|
Category: "plc", FeatureName: "SafeLOGIC + X20 Safety",
|
|
FeatureSummary: "B&R-Safety-Plattform: SafeLOGIC-Controller und X20 Safety-I/O mit openSAFETY-Protokoll.",
|
|
NormReferences: []string{"EN ISO 13849-1 PLe Kat.4", "IEC 61508 SIL3"},
|
|
Clarifications: []string{"Ist die SafeLOGIC-Konfiguration mit PL-Berechnung dokumentiert?"},
|
|
AppliesToHazardCats: []string{"mechanical_hazard", "safety_function_failure"},
|
|
},
|
|
|
|
// ── Pressen / Stanzen (3) ─────────────────────────────────────
|
|
{
|
|
Manufacturer: "Schuler", Aliases: []string{"schuler"},
|
|
Category: "press", FeatureName: "Schuler Pressen-Sicherheitssystem",
|
|
FeatureSummary: "Schuler-Pressensicherheit: Lichtvorhang-Tarmac, sichere Kupplung/Bremse, Tipp-Betrieb mit Zustimmtaster.",
|
|
NormReferences: []string{"EN 692 — Mechanische Pressen", "EN 693 — Hydraulische Pressen", "EN ISO 13849-1"},
|
|
Clarifications: []string{"Liegt das Pressensicherheits-Zertifikat (Typpruefung) vor?"},
|
|
AppliesToHazardCats: []string{"mechanical_hazard"},
|
|
},
|
|
{
|
|
Manufacturer: "Bruderer", Aliases: []string{"bruderer"},
|
|
Category: "press", FeatureName: "Bruderer Hochleistungs-Stanzpressen-Safety",
|
|
FeatureSummary: "Bruderer-Stanzpressen mit zweikanaliger Kupplungs-/Bremsen-Steuerung und ueberwachten Sicherheitseinrichtungen.",
|
|
NormReferences: []string{"EN 692 — Mechanische Pressen"},
|
|
Clarifications: []string{"Welche Sicherheitseinrichtungen (Lichtvorhang, Zweihand) sind aktiviert?"},
|
|
AppliesToHazardCats: []string{"mechanical_hazard"},
|
|
},
|
|
{
|
|
Manufacturer: "AIDA", Aliases: []string{"aida"},
|
|
Category: "press", FeatureName: "AIDA Pressen-Safety",
|
|
FeatureSummary: "AIDA-Servopressen mit Direct Drive: ueberwachte Stempelposition, sichere Geschwindigkeitsreduzierung im Einrichtbetrieb.",
|
|
NormReferences: []string{"EN 692"},
|
|
Clarifications: []string{"Welche AIDA-Safety-Funktionen sind aktiviert?"},
|
|
AppliesToHazardCats: []string{"mechanical_hazard"},
|
|
},
|
|
|
|
// ── Spritzguss (3) ────────────────────────────────────────────
|
|
{
|
|
Manufacturer: "Arburg", Aliases: []string{"arburg", "allrounder", "gestica", "selogica"},
|
|
Category: "injection_molding", FeatureName: "ALLROUNDER Safety + Selogica/Gestica",
|
|
FeatureSummary: "Arburg-Spritzgiessmaschinen mit Schutztueren mit Sicherheitszuhaltung, ueberwachter Werkzeug-Schutz, sichere Plastifizierung.",
|
|
NormReferences: []string{"EN 201 — Spritzgiessmaschinen"},
|
|
Clarifications: []string{"Liegt CE-Konformitaet nach EN 201 vor? Schutztueren mit Zuhaltung verbaut?"},
|
|
AppliesToHazardCats: []string{"mechanical_hazard"},
|
|
},
|
|
{
|
|
Manufacturer: "KraussMaffei", Aliases: []string{"krauss maffei", "kraussmaffei", "mc6", "px-series"},
|
|
Category: "injection_molding", FeatureName: "KraussMaffei MC6 Safety + APC",
|
|
FeatureSummary: "KraussMaffei-Spritzgiessmaschinen mit MC6-Steuerung, Active Part Control (APC), Schutztueren mit Sicherheitszuhaltung.",
|
|
NormReferences: []string{"EN 201"},
|
|
Clarifications: []string{"Ist APC und Schutztuer-Verriegelung nach EN 201 ausgeruestet?"},
|
|
AppliesToHazardCats: []string{"mechanical_hazard"},
|
|
},
|
|
{
|
|
Manufacturer: "ENGEL", Aliases: []string{"engel austria", "engel ", "victory", "e-mac", "e-motion"},
|
|
Category: "injection_molding", FeatureName: "ENGEL Sicherheitspaket + CC300",
|
|
FeatureSummary: "ENGEL-Spritzgiessmaschinen mit CC300-Steuerung, integrierte Sicherheitsfunktionen, Schutztueren mit doppelter Verriegelung.",
|
|
NormReferences: []string{"EN 201"},
|
|
Clarifications: []string{"Liegt das EN 201-Konformitaetszertifikat vor?"},
|
|
AppliesToHazardCats: []string{"mechanical_hazard"},
|
|
},
|
|
|
|
// ── Verpackung (2) ────────────────────────────────────────────
|
|
{
|
|
Manufacturer: "Krones", Aliases: []string{"krones"},
|
|
Category: "packaging", FeatureName: "Krones Sicherheitskonzept Linatronic",
|
|
FeatureSummary: "Krones-Verpackungslinien: integriertes Sicherheitskonzept mit verriegelten Schutztueren, Lichtvorhaengen, sicheren Antrieben.",
|
|
NormReferences: []string{"EN 415 — Verpackungsmaschinen", "EN ISO 13849-1"},
|
|
Clarifications: []string{"Liegt das EN 415-Konformitaetszertifikat vor?"},
|
|
AppliesToHazardCats: []string{"mechanical_hazard"},
|
|
},
|
|
{
|
|
Manufacturer: "Bosch Packaging", Aliases: []string{"bosch packaging", "syntegon"},
|
|
Category: "packaging", FeatureName: "Syntegon Safety Integrated",
|
|
FeatureSummary: "Verpackungsmaschinen mit Siemens Safety Integrated, ueberwachten Schutztueren, sicheren Stops.",
|
|
NormReferences: []string{"EN 415", "EN ISO 13849-1"},
|
|
Clarifications: []string{"Welche Safety-Integrated-Funktionen sind aktiviert?"},
|
|
AppliesToHazardCats: []string{"mechanical_hazard"},
|
|
},
|
|
|
|
// ── Laser / Schweissen (3) ────────────────────────────────────
|
|
{
|
|
Manufacturer: "Bystronic", Aliases: []string{"bystronic", "bysprint", "byspeed", "byjet"},
|
|
Category: "laser", FeatureName: "Bystronic Laserschutz-Einhausung",
|
|
FeatureSummary: "Bystronic-Laserschneidmaschinen mit Laserschutzklasse 1 durch Einhausung, verriegelten Tueren, Strahlfangeinrichtung.",
|
|
NormReferences: []string{"EN 60825-1 — Laser", "EN 12626 — Laserbearbeitung"},
|
|
Clarifications: []string{"Ist die Laserklasse 1 nach EN 60825-1 durch Einhausung gewaehrleistet?"},
|
|
AppliesToHazardCats: []string{"radiation_hazard", "mechanical_hazard"},
|
|
},
|
|
{
|
|
Manufacturer: "Amada", Aliases: []string{"amada", "lcg", "ensis"},
|
|
Category: "laser", FeatureName: "Amada-Laserschutz + Pressbiege-Safety",
|
|
FeatureSummary: "Amada-Maschinen: Laserschneider mit Klasse-1-Einhausung, Abkantpressen mit Fingerschutz / Lichtvorhang.",
|
|
NormReferences: []string{"EN 60825-1", "EN 12622 — Pressbiege"},
|
|
Clarifications: []string{"Welche Sicherheitseinrichtungen (Fingerschutz, Lichtvorhang) sind aktiv?"},
|
|
AppliesToHazardCats: []string{"radiation_hazard", "mechanical_hazard"},
|
|
},
|
|
{
|
|
Manufacturer: "Fronius", Aliases: []string{"fronius"},
|
|
Category: "welding", FeatureName: "Fronius Schweisstechnik Safety",
|
|
FeatureSummary: "Fronius-Schweissanlagen mit sicherer Zundungsabschaltung, integriertem Lichtbogenschutz, Roboterintegration mit Safety-Bus.",
|
|
NormReferences: []string{"EN 60974-1 — Schweisstechnik", "EN ISO 13849-1"},
|
|
Clarifications: []string{"Welche Schutzeinrichtungen (Schweissvorhang, Absaugung) sind installiert?"},
|
|
AppliesToHazardCats: []string{"radiation_hazard", "material_environmental"},
|
|
},
|
|
|
|
// ── Foerdertechnik (2) ────────────────────────────────────────
|
|
{
|
|
Manufacturer: "Interroll", Aliases: []string{"interroll"},
|
|
Category: "conveyor", FeatureName: "Interroll Modular Conveyor Safety",
|
|
FeatureSummary: "Interroll-Foerdersysteme mit Trommelmotoren, integrierten Sicherheits-Stop-Funktionen, Endschaltern.",
|
|
NormReferences: []string{"EN 619 — Stetigfoerderer"},
|
|
Clarifications: []string{"Welche Sicherheits-Stop-Einrichtungen sind verbaut?"},
|
|
AppliesToHazardCats: []string{"mechanical_hazard"},
|
|
},
|
|
{
|
|
Manufacturer: "SEW EURODRIVE", Aliases: []string{"sew eurodrive", "sew-eurodrive", "movitrac", "movidrive"},
|
|
Category: "conveyor", FeatureName: "SEW MOVISAFE",
|
|
FeatureSummary: "SEW-Antriebssicherheit: STO/SS1/SS2/SLS/SOS in MOVIDRIVE-Frequenzumrichtern, sichere Bremsenansteuerung.",
|
|
NormReferences: []string{"EN 61800-5-2", "EN ISO 13849-1 PLd Kat.3"},
|
|
Clarifications: []string{"Welche MOVISAFE-Funktionen sind im MOVIDRIVE aktiviert?"},
|
|
AppliesToHazardCats: []string{"mechanical_hazard"},
|
|
},
|
|
}
|
|
}
|
|
|
|
// LookupManufacturerFeaturesInText scans the given narrative text and returns
|
|
// every manufacturer-feature entry whose alias is mentioned. Matching is
|
|
// case-insensitive on substrings — robust against capitalization and
|
|
// product-line spelling. Used by the init handler to enrich hazard
|
|
// descriptions with manufacturer-specific clarification questions.
|
|
func LookupManufacturerFeaturesInText(narrative string) []ManufacturerSafetyFeature {
|
|
if narrative == "" {
|
|
return nil
|
|
}
|
|
lower := normalizeForMatch(narrative)
|
|
var hits []ManufacturerSafetyFeature
|
|
seen := map[string]bool{}
|
|
for _, mf := range GetManufacturerSafetyFeatures() {
|
|
key := mf.Manufacturer + "/" + mf.FeatureName
|
|
if seen[key] {
|
|
continue
|
|
}
|
|
for _, alias := range mf.Aliases {
|
|
a := normalizeForMatch(alias)
|
|
if a == "" {
|
|
continue
|
|
}
|
|
if containsSubstrLower(lower, a) {
|
|
hits = append(hits, mf)
|
|
seen[key] = true
|
|
break
|
|
}
|
|
}
|
|
}
|
|
return hits
|
|
}
|
|
|
|
// normalizeForMatch lower-cases and replaces German umlauts so manufacturer
|
|
// aliases match regardless of "Staeubli" vs "Stäubli" spelling.
|
|
func normalizeForMatch(s string) string {
|
|
out := make([]rune, 0, len(s))
|
|
for _, r := range s {
|
|
switch r {
|
|
case 'Ä':
|
|
r = 'a'
|
|
out = append(out, 'a', 'e')
|
|
continue
|
|
case 'Ö':
|
|
r = 'o'
|
|
out = append(out, 'o', 'e')
|
|
continue
|
|
case 'Ü':
|
|
r = 'u'
|
|
out = append(out, 'u', 'e')
|
|
continue
|
|
case 'ä':
|
|
out = append(out, 'a', 'e')
|
|
continue
|
|
case 'ö':
|
|
out = append(out, 'o', 'e')
|
|
continue
|
|
case 'ü':
|
|
out = append(out, 'u', 'e')
|
|
continue
|
|
case 'ß':
|
|
out = append(out, 's', 's')
|
|
continue
|
|
}
|
|
if r >= 'A' && r <= 'Z' {
|
|
r = r + ('a' - 'A')
|
|
}
|
|
out = append(out, r)
|
|
}
|
|
return string(out)
|
|
}
|
|
|
|
func containsSubstrLower(haystack, needle string) bool {
|
|
if needle == "" {
|
|
return false
|
|
}
|
|
hn := len(haystack)
|
|
nn := len(needle)
|
|
if nn > hn {
|
|
return false
|
|
}
|
|
for i := 0; i <= hn-nn; i++ {
|
|
if haystack[i:i+nn] == needle {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|