feat: IACE CE-Compliance Module — Normen, Risikobewertung, Production Lines

Major features:
- 215 norms library with section references + Beuth URLs (A/B1/B2/C norms)
- 173 hazard patterns with detail fields (scenario, trigger, harm, zone)
- Deterministic pattern matching: Component × Lifecycle × Pattern cross-product
- SIL/PL auto-calculation from S×E×P risk graph
- Risk assessment table with editable S/E/P dropdowns
- Production Line Dashboard with animated station flow (Running Dots)
- IACE process flow + norms coverage on start page
- Non-blocking cookie banner, ProcessFlow SSR fix
- 104 Playwright E2E tests passing

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Benjamin Admin
2026-05-07 10:53:26 +02:00
parent 3853a0838a
commit e7f2f98da3
59 changed files with 8326 additions and 525 deletions
@@ -18,6 +18,12 @@ func GetPressHazardPatterns() []HazardPattern {
RequiresExpertCalculation: true,
ExpertHintDE: "SIL/PL-Nachweis fuer Stoesselabsturzsicherung erforderlich.",
ExpertHintEN: "SIL/PL verification for ram drop protection required.",
ScenarioDE: "Stoessel faellt unkontrolliert ab bei Druckverlust im Hydrauliksystem oder Versagen der mechanischen Haltevorrichtung.",
TriggerDE: "Leitungsbruch, Dichtungsversagen oder Defekt des Rueckschlagventils im Hydraulikkreis.",
HarmDE: "Toedliche Quetschverletzung, Amputation von Gliedmassen.",
AffectedDE: "Einrichter, Bedienpersonal im Werkzeugeinbauraum.",
ZoneDE: "Werkzeugeinbauraum unterhalb des Stoessels.",
DefaultSeverity: 5, DefaultExposure: 2,
},
{
ID: "HP046", NameDE: "Quetschen im Werkzeugeinbauraum", NameEN: "Crushing in die space",
@@ -27,6 +33,12 @@ func GetPressHazardPatterns() []HazardPattern {
SuggestedMeasureIDs: []string{"M001", "M005", "M051", "M106"},
SuggestedEvidenceIDs: []string{"E01", "E08"},
Priority: 97,
ScenarioDE: "Einrichter arbeitet im Werkzeugeinbauraum bei nicht gesichertem Stoessel oder laufendem Automatikbetrieb.",
TriggerDE: "Unbeabsichtigter Hub waehrend Einrichtarbeiten, Manipulation der Schutztuer-Verriegelung.",
HarmDE: "Toedliche Quetschverletzung, Amputation der oberen Extremitaeten.",
AffectedDE: "Einrichter, Werkzeugbauer, Instandhaltungspersonal.",
ZoneDE: "Werkzeugeinbauraum zwischen Ober- und Unterwerkzeug.",
DefaultSeverity: 5, DefaultExposure: 3,
},
{
ID: "HP047", NameDE: "Oelnebelexposition Atemwege", NameEN: "Oil mist inhalation exposure",
@@ -36,6 +48,12 @@ func GetPressHazardPatterns() []HazardPattern {
SuggestedMeasureIDs: []string{"M124", "M141"},
SuggestedEvidenceIDs: []string{"E20"},
Priority: 80,
ScenarioDE: "Oelnebel entsteht beim Pressen durch Leckagen oder Verdampfung des Hydraulikoels und wird vom Bediener eingeatmet.",
TriggerDE: "Leckage an Hochdruckleitungen, ueberhitztes Hydraulikoel, fehlende oder defekte Absaugung.",
HarmDE: "Atemwegsreizung, chronische Lungenerkrankung bei Langzeitexposition.",
AffectedDE: "Bedienpersonal, Personen im Nahbereich der Presse.",
ZoneDE: "Arbeitsbereich rund um die Presse, insbesondere Bedienerseite.",
DefaultSeverity: 3, DefaultExposure: 4,
},
{
ID: "HP048", NameDE: "Verbrennung durch heisse Werkstuecke", NameEN: "Burns from hot workpieces",
@@ -45,6 +63,12 @@ func GetPressHazardPatterns() []HazardPattern {
SuggestedMeasureIDs: []string{"M054", "M141"},
SuggestedEvidenceIDs: []string{"E08"},
Priority: 85,
ScenarioDE: "Heisse Werkstuecke oder Werkzeuge werden beim Warmumformen manuell entnommen oder fallen aus der Matrize.",
TriggerDE: "Manuelles Handling ohne Hitzeschutz, Ausfall der automatischen Entnahme.",
HarmDE: "Verbrennungen zweiten oder dritten Grades an Haenden und Unterarmen.",
AffectedDE: "Bedienpersonal, Einrichter bei Werkzeugwechsel.",
ZoneDE: "Entnahmebereich, Werkzeugeinbauraum, Ablagetisch.",
DefaultSeverity: 4, DefaultExposure: 3,
},
{
ID: "HP049", NameDE: "Schwebende Last (Hubwerk/Aufzug)", NameEN: "Suspended load (hoist/elevator)",
@@ -54,6 +78,12 @@ func GetPressHazardPatterns() []HazardPattern {
SuggestedMeasureIDs: []string{"M001", "M005", "M051"},
SuggestedEvidenceIDs: []string{"E01", "E08"},
Priority: 95,
ScenarioDE: "Schweres Werkzeug oder Pressenoberteil haengt am Kran/Hubwerk und kann bei Seilriss oder Bremsenversagen herabfallen.",
TriggerDE: "Seilriss, Versagen der Kranbremse, ueberladung des Hubwerks.",
HarmDE: "Toedliche Verletzung durch herabfallende Last, Knochenbrueche.",
AffectedDE: "Personen im Gefahrenbereich unter der schwebenden Last.",
ZoneDE: "Bereich unterhalb des Hubwerks, Werkzeugwechselzone.",
DefaultSeverity: 5, DefaultExposure: 2,
},
{
ID: "HP050", NameDE: "Einziehen/Scheren Transfersystem", NameEN: "Draw-in/shearing at transfer system",
@@ -63,6 +93,12 @@ func GetPressHazardPatterns() []HazardPattern {
SuggestedMeasureIDs: []string{"M001", "M005", "M051"},
SuggestedEvidenceIDs: []string{"E01", "E08"},
Priority: 90,
ScenarioDE: "Transferbalken oder Greiferleisten bewegen sich im Automatikbetrieb und erfassen Koerperteile des Bedieners.",
TriggerDE: "Eingriff in den Transferbereich bei laufendem Betrieb, Defekt der Zugangsabsicherung.",
HarmDE: "Schnittverletzungen, Amputation von Fingern, Quetschungen.",
AffectedDE: "Bedienpersonal, Einrichter bei Stoerungsbeseitigung.",
ZoneDE: "Transferbereich zwischen den Pressenstationen.",
DefaultSeverity: 4, DefaultExposure: 3,
},
{
ID: "HP051", NameDE: "Sturzgefahr Auswurfbereich", NameEN: "Fall hazard at ejection area",
@@ -73,6 +109,12 @@ func GetPressHazardPatterns() []HazardPattern {
SuggestedMeasureIDs: []string{"M051", "M141"},
SuggestedEvidenceIDs: []string{"E20"},
Priority: 75,
ScenarioDE: "Bediener stolpert oder stuerzt im Auswurfbereich ueber herumliegende Teile oder oelverschmierte Boeden.",
TriggerDE: "Verschmutzter Boden, fehlende Bodenmarkierung, ungesicherte Hoehendifferenz am Auswurfschacht.",
HarmDE: "Knochenbrueche, Prellungen, Kopfverletzungen bei Sturz.",
AffectedDE: "Bedienpersonal, Logistikmitarbeiter im Auswurfbereich.",
ZoneDE: "Auswurfschacht und angrenzender Bodenbereich.",
DefaultSeverity: 3, DefaultExposure: 4,
},
{
ID: "HP052", NameDE: "Druckfreisetzung Hydraulikspeicher", NameEN: "Pressure release from hydraulic accumulator",
@@ -82,6 +124,12 @@ func GetPressHazardPatterns() []HazardPattern {
SuggestedMeasureIDs: []string{"M051", "M131"},
SuggestedEvidenceIDs: []string{"E01", "E08"},
Priority: 92,
ScenarioDE: "Hydraulikspeicher entlaedt sich schlagartig bei Wartungsarbeiten oder Leitungsbruch.",
TriggerDE: "Oeffnen einer Leitung ohne vorherige Druckentlastung, Berstversagen des Speichers.",
HarmDE: "Schwere Schnittverletzungen durch Oelstrahl, Augenverletzungen, Verbrennungen.",
AffectedDE: "Instandhaltungspersonal, Hydraulik-Fachkraefte.",
ZoneDE: "Hydraulikaggregat, Speicherbereich, Leitungsfuehrung.",
DefaultSeverity: 5, DefaultExposure: 2,
},
{
ID: "HP053", NameDE: "Impulslaerm Pressvorgang", NameEN: "Impact noise during press operation",
@@ -91,6 +139,12 @@ func GetPressHazardPatterns() []HazardPattern {
SuggestedMeasureIDs: []string{"M141"},
SuggestedEvidenceIDs: []string{"E20"},
Priority: 70,
ScenarioDE: "Jeder Presshub erzeugt Impulslaerm ueber 85 dB(A), der bei Dauerbetrieb das Gehoer schaedigt.",
TriggerDE: "Normaler Pressbetrieb bei hoher Hubzahl, fehlende Laermkapselung.",
HarmDE: "Laermschwerhoerigkeit, Tinnitus bei Langzeitexposition.",
AffectedDE: "Bedienpersonal, Personen in angrenzenden Arbeitsbereichen.",
ZoneDE: "Gesamter Pressenbereich, Radius ca. 5-10 m um die Maschine.",
DefaultSeverity: 3, DefaultExposure: 5,
},
{
ID: "HP054", NameDE: "Schwungrad-Restenergie nach Abschaltung", NameEN: "Flywheel residual energy after shutdown",
@@ -100,6 +154,12 @@ func GetPressHazardPatterns() []HazardPattern {
SuggestedMeasureIDs: []string{"M001", "M054"},
SuggestedEvidenceIDs: []string{"E01", "E08"},
Priority: 88,
ScenarioDE: "Schwungrad dreht nach Abschaltung der Presse noch mehrere Minuten nach und speichert gefaehrliche Rotationsenergie.",
TriggerDE: "Zugang zur Maschine vor vollstaendigem Stillstand, fehlende Nachlaufueberwachung.",
HarmDE: "Erfassen durch rotierende Teile, schwere Schnittverletzungen, Skalpierung.",
AffectedDE: "Instandhaltungspersonal, Einrichter nach Maschinenstopp.",
ZoneDE: "Schwungradbereich, Kupplungsraum, Antriebsseite der Presse.",
DefaultSeverity: 4, DefaultExposure: 2,
},
{
ID: "HP055", NameDE: "Umgehung Schutzeinrichtung (Pressentuer)", NameEN: "Bypass of safety guard (press door)",
@@ -109,6 +169,12 @@ func GetPressHazardPatterns() []HazardPattern {
SuggestedMeasureIDs: []string{"M005", "M106"},
SuggestedEvidenceIDs: []string{"E01", "E08"},
Priority: 96,
ScenarioDE: "Bediener manipuliert die Schutztuerverriegelung, um bei geoeffneter Tuer einen Pressenhub auszuloesen.",
TriggerDE: "Absichtliche Manipulation des Sicherheitsschalters, defekter Zuhaltungsmechanismus.",
HarmDE: "Toedliche Quetsch- oder Scherverletzungen bei Eingriff in den Gefahrenbereich.",
AffectedDE: "Bedienpersonal, Einrichter bei Stoerungsbeseitigung.",
ZoneDE: "Gesamter Werkzeugeinbauraum hinter der Schutztuer.",
DefaultSeverity: 5, DefaultExposure: 3,
},
{
ID: "HP056", NameDE: "Fehlbedienung Zweihandschaltung", NameEN: "Two-hand control misoperation",
@@ -118,6 +184,12 @@ func GetPressHazardPatterns() []HazardPattern {
SuggestedMeasureIDs: []string{"M106"},
SuggestedEvidenceIDs: []string{"E01"},
Priority: 90,
ScenarioDE: "Zweihandschaltung wird mit Hilfsmitteln ueberbrueckt oder ein Taster wird fixiert, sodass Einhandbedienung moeglich wird.",
TriggerDE: "Manipulation der Taster, Fixierung mit Klebeband oder Keil, Defekt der Gleichzeitigkeitsueberwachung.",
HarmDE: "Quetschverletzungen der freien Hand im Werkzeugbereich.",
AffectedDE: "Bedienpersonal an der Pressenbedienung.",
ZoneDE: "Gefahrenbereich zwischen Ober- und Unterwerkzeug.",
DefaultSeverity: 5, DefaultExposure: 3,
},
{
ID: "HP057", NameDE: "Hydraulikoelleckage + Rutschgefahr", NameEN: "Hydraulic oil leakage + slip hazard",
@@ -127,6 +199,12 @@ func GetPressHazardPatterns() []HazardPattern {
SuggestedMeasureIDs: []string{"M141"},
SuggestedEvidenceIDs: []string{"E20"},
Priority: 65,
ScenarioDE: "Hydraulikoel tritt aus defekten Dichtungen oder Verschraubungen aus und bildet Lachen auf dem Hallenboden.",
TriggerDE: "Verschleiss von Dichtungen, lockere Verschraubungen, Schlauchbruch.",
HarmDE: "Sturzverletzungen durch Ausrutschen, Hautreizungen bei Hautkontakt.",
AffectedDE: "Bedienpersonal, Logistikmitarbeiter, alle Personen im Pressenbereich.",
ZoneDE: "Bodenbereich rund um das Hydraulikaggregat und unter der Presse.",
DefaultSeverity: 2, DefaultExposure: 4,
},
{
ID: "HP058", NameDE: "Ergonomische Belastung Kistenwechsel", NameEN: "Ergonomic strain during bin changeover",
@@ -136,6 +214,12 @@ func GetPressHazardPatterns() []HazardPattern {
SuggestedMeasureIDs: []string{"M141"},
SuggestedEvidenceIDs: []string{"E20"},
Priority: 55,
ScenarioDE: "Bediener hebt schwere Teilebehaelter manuell an oder bewegt sie ohne Hebehilfe im Auswurfbereich.",
TriggerDE: "Fehlende Hebehilfen, hohe Taktzahl erzwingt schnellen manuellen Kistenwechsel.",
HarmDE: "Rueckenverletzungen, Bandscheibenvorfall, Muskel-Skelett-Erkrankungen.",
AffectedDE: "Bedienpersonal, Logistikmitarbeiter an der Presse.",
ZoneDE: "Auswurfbereich, Palettenstellplatz neben der Presse.",
DefaultSeverity: 2, DefaultExposure: 5,
},
}
}