Files
breakpilot-compliance/ai-compliance-sdk/internal/iace/hazard_patterns_lift_endstop.go
T
Benjamin Admin 772ff35e8d feat(iace): bridge OSHA MD library to pattern engine, body-part-specific lift crush hazards
- M600-M604: lift endstop mitigations (Kriechgeschwindigkeit, Schaltleiste,
  Mindestabstand, Hold-to-run, Trittblech) — cite OSHA + EN ISO identifiers
- HP2100-HP2102: body-part crush patterns for lift family (foot under platform,
  hand/body against fixed structure, leg between lift and lateral structure),
  restricted via MachineTypes filter
- pattern_machinetype_overrides.go: post-load pass fills MachineTypes on 14
  legacy patterns (HP1000 Walzen, HP539 Schweiss, HP545/HP782 Glas,
  HP756/HP757/HP760 Fahrtreppe, HP1400-1402 CNC, HP045/HP049 Pressen,
  HP420-422 Conveyor) to prevent drift on Kistenhubgeraet-style projects

Why: Kistenhubgeraet re-init exposed two gaps — the abstract "Bremse versagt
bei Absenkbewegung" pattern fired but the concrete foot-crush body-part variant
was missing, AND ~10 unrelated patterns fired purely because their RequiredTags
incidentally aligned. Override map avoids touching 1000+ LOC pattern files
that already exceed the soft cap.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 08:37:24 +02:00

97 lines
5.3 KiB
Go

package iace
// Body-part-specific crush hazards at lift / hoist / scissor-lift endstops.
// Bridges the gap that the Kistenhubgeraet re-init exposed: the abstract
// "Bremse versagt bei Absenkbewegung" pattern fires, but the concrete
// "Fuss unter absenkender Hubplattform" body-part variant did not exist.
//
// Each pattern restricts to lift-family machine types via MachineTypes,
// so a press / CNC / textile project does not pick them up. Mitigations
// reference the new M600-M604 (lift endstop) library plus the existing
// M001 (geometry), M002 (safety distance), M141 (warning sign).
func GetLiftEndstopPatterns() []HazardPattern {
liftTypes := []string{"lift", "hoist", "elevator", "scissor_lift"}
return []HazardPattern{
{
ID: "HP2100",
NameDE: "Fuss-Quetschung unter absenkender Hubplattform am Bodenanschlag",
NameEN: "Foot crush under descending lift platform at floor stop",
RequiredComponentTags: []string{"crush_point", "gravity_risk", "person_under_load"},
RequiredEnergyTags: []string{"gravitational"},
MachineTypes: liftTypes,
GeneratedHazardCats: []string{"mechanical_hazard"},
SuggestedMeasureIDs: []string{"M600", "M601", "M604", "M141"},
Priority: 92,
ScenarioDE: "Fuss oder Bein des Bedieners gelangt waehrend des Absenkvorgangs unter die " +
"Hubplattform. Bei Erreichen der unteren Endlage wird der Fuss zwischen Plattform " +
"und Boden gequetscht.",
TriggerDE: "Unsachgemaesse Position des Bedieners beim Be-/Entladen, fehlende Schaltleiste, fehlender Trittschutz",
HarmDE: "Fussquetschung, Mittelfussfraktur, Zehenamputation",
AffectedDE: "Bediener, Wartungspersonal",
ZoneDE: "Bodenbereich unter Hubplattform, umlaufende Spalte",
DefaultSeverity: 4,
DefaultExposure: 3,
DefaultAvoidability: 2,
ISO12100Section: "6.3.5.5 Quetschen — Mindestabstaende",
ClarificationQuestionsDE: []string{
"Ist eine umlaufende Quetsch-Schaltleiste an der Plattformunterkante verbaut?",
"Ist die Hubgeschwindigkeit am unteren Endanschlag auf <=15 mm/s reduziert (siehe M600)?",
"Verhindert ein Trittblech / Unterfahrschutz das Hineinfahren von Fuessen?",
},
},
{
ID: "HP2101",
NameDE: "Hand- oder Koerper-Quetschung gegen feste Struktur beim Hochfahren der Hubeinheit",
NameEN: "Hand or body crush against fixed structure during lift upward travel",
RequiredComponentTags: []string{"crush_point", "gravity_risk"},
RequiredEnergyTags: []string{"gravitational"},
MachineTypes: liftTypes,
GeneratedHazardCats: []string{"mechanical_hazard"},
SuggestedMeasureIDs: []string{"M602", "M603", "M600", "M141"},
Priority: 90,
ScenarioDE: "Beim Hochfahren der Last gelangen Hand oder Koerperteile des Bedieners " +
"zwischen die hoechste Position der Hubeinheit (z.B. mit beladener Palette) und " +
"eine feste Struktur oberhalb (Decke, Vorbau, Querbalken einer umschliessenden Anlage).",
TriggerDE: "Eingriff in den Verfahrweg waehrend Hubvorgang, fehlende konstruktive Begrenzung der Endlage",
HarmDE: "Hand- oder Armquetschung, im Extremfall Brustkorbkompression",
AffectedDE: "Bediener, Einrichter, Wartungspersonal",
ZoneDE: "Oberhalb hoechster Hubposition, Vorbau/Decke der umschliessenden Anlage",
DefaultSeverity: 4,
DefaultExposure: 2,
DefaultAvoidability: 2,
ISO12100Section: "6.3.5.5 Quetschen — Mindestabstaende",
ClarificationQuestionsDE: []string{
"Welcher Mindestabstand zu festen Strukturen oberhalb der hoechsten Hubposition ist gegeben? (Empfehlung: 120 mm fuer Kopf, 100 mm fuer Hand)",
"Ist der Tippbetrieb (Hold-to-run) durch ein Testprotokoll mit Stop-Zeit-Messung verifiziert?",
"Existiert eine redundante Hardware-Endlage zusaetzlich zur Software-Begrenzung?",
},
},
{
ID: "HP2102",
NameDE: "Quetschung Bein/Koerper zwischen Hubeinheit und seitlicher Struktur",
NameEN: "Leg/body crush between lift unit and lateral structure",
RequiredComponentTags: []string{"crush_point", "gravity_risk", "moving_part"},
RequiredEnergyTags: []string{"gravitational"},
MachineTypes: liftTypes,
GeneratedHazardCats: []string{"mechanical_hazard"},
SuggestedMeasureIDs: []string{"M602", "M601", "M141"},
Priority: 85,
ScenarioDE: "Person befindet sich seitlich neben der Hubeinheit und wird waehrend " +
"der Bewegung gegen eine feste Struktur (Regalwand, Stuetze, andere Anlage) gequetscht.",
TriggerDE: "Aufenthalt in Quetschzone bei Bewegung, fehlende Absperrung",
HarmDE: "Beinfraktur, Beckenquetschung",
AffectedDE: "Bediener, vorbeigehende Personen",
ZoneDE: "Seitlicher Bereich neben Hubeinheit, Lichte Weite zu festen Strukturen",
DefaultSeverity: 4,
DefaultExposure: 2,
DefaultAvoidability: 2,
ISO12100Section: "6.3.5.5 Quetschen — Mindestabstaende",
ClarificationQuestionsDE: []string{
"Welcher Sicherheitsabstand zu seitlichen festen Strukturen ist gegeben (Empfehlung 500 mm Koerperdurchgang)?",
"Ist der Bereich seitlich der Hubeinheit als Gefahrenzone markiert oder abgeschrankt?",
},
},
}
}