package iace

// Lift / hoist / scissor-lift endstop mitigations — bridges the OSHA
// minimum-distance library (minimum_distances.go, Task #18) into the
// pattern-engine measure library. Each entry cites the concrete OSHA
// value AND its EU-norm pendant by identifier only.
//
// Engineering rounding values come from MD_OSHA_* IDs in
// minimum_distances.go. We do not duplicate the source text here —
// the Tech-File renderer can join MD_OSHA_* into the rendered text
// at output time.

func getLiftEndstopMeasures() []ProtectiveMeasureEntry {
	return []ProtectiveMeasureEntry{
		// M600 — Cruise/creep speed at end of travel
		{
			ID:            "M600",
			ReductionType: "protection",
			SubType:       "speed_control",
			Name:          "Kriechgeschwindigkeit am Endanschlag (Hubgeraete)",
			Description: "Hubgeschwindigkeit am Ende der Verfahrbewegung (oben und unten) auf maximal 15 mm/s " +
				"reduzieren. OSHA 29 CFR 1910.217 Hand-Speed-Konstante 63 in/s = 1.600 mm/s als Obergrenze " +
				"fuer Stopp-Reaktionszeit. Damit ist auch bei spaeter Auslosung der Quetsch-Schaltleiste " +
				"genug Bremsweg vorhanden.",
			HazardCategory: "mechanical",
			Examples: []string{
				"Hub-Endschalter mit Soft-Stop und Geschwindigkeitsstufe < 15 mm/s in den letzten 50 mm",
				"Servo-Antrieb mit Ramp-down-Profil ueber die letzten 100 mm Verfahrweg",
				"Drehzahl-Begrenzer im Frequenzumrichter mit Endlagen-Trigger",
			},
			NormReferences: []string{
				"OSHA 29 CFR 1910.217 (Ds = 63 in/s x Ts)",
				"EN ISO 13855 (Anordnung von Schutzeinrichtungen)",
				"EN 1570-1 (Hubtische — Bauanforderungen)",
			},
			RiskReduction: &RiskReduction{SeverityDelta: -1, ExposureDelta: -1, ProbabilityDelta: -1},
			Tags:          []string{"crush_point", "gravity_risk", "speed_limit"},
		},
		// M601 — Trip-edge sensor under platform (safety bumper)
		{
			ID:            "M601",
			ReductionType: "protection",
			SubType:       "safety_device",
			Name:          "Quetsch-Schaltleiste unterhalb der Hubplattform",
			Description: "Druckempfindliche Schaltleiste (gemaess EN ISO 13856-2) am unteren Rand der Hubplattform " +
				"loest bei Beruehrung den Hubantrieb sofort aus und kehrt die Bewegung um. Verhindert Quetschung " +
				"von Fuessen oder Beinen unter absenkender Last. PL c oder hoeher nach EN ISO 13849-1.",
			HazardCategory: "mechanical",
			Examples: []string{
				"Schaltleiste umlaufend an Bodenkante der Hubplattform",
				"Trittschutz mit redundanter Auswertung am Hubtisch",
				"Lichtgitter im Bodenbereich als Ergaenzung bei freistehenden Anlagen",
			},
			NormReferences: []string{
				"EN ISO 13856-2 (Schaltleisten)",
				"EN ISO 13849-1 (PL-Bestimmung)",
				"EN 1570-1",
			},
			RiskReduction: &RiskReduction{SeverityDelta: -2, ExposureDelta: -2, ProbabilityDelta: -2},
			Tags:          []string{"crush_point", "gravity_risk", "safety_device"},
		},
		// M602 — Minimum clearance to fixed structure above max lift position
		{
			ID:            "M602",
			ReductionType: "design",
			SubType:       "geometry",
			Name:          "Mindestabstand zu festen Strukturen oberhalb der Hubendlage",
			Description: "Zwischen hoechstem Punkt der Hubeinheit (mit beladenem Werkstueck) und festen Strukturen " +
				"oberhalb (Decke, Vorbau, Querbalken) muss ein Sicherheitsabstand verbleiben, der das Quetschen " +
				"von Haenden und Koerper verhindert. Empfehlung: 120 mm fuer Kopf, 100 mm fuer Hand, 25 mm fuer " +
				"Finger — abgeleitet aus EN 349 / EN ISO 13854 unabhaengig zu pruefen.",
			HazardCategory: "mechanical",
			Examples: []string{
				"Konstruktive Begrenzung der oberen Hubposition durch mechanischen Anschlag",
				"Software-Endlage mit redundantem Hardware-Sicherheitsschalter",
				"Auslegungs-Pruefung mit beladener Standard-Palette und Maximal-Hubhoehe",
			},
			NormReferences: []string{
				"EN 349 (Mindestabstaende gegen Quetschen von Koerperteilen)",
				"EN ISO 13854 (Mindestabstaende gegen Quetschen)",
			},
			RiskReduction: &RiskReduction{SeverityDelta: -2, ExposureDelta: -1},
			Tags:          []string{"crush_point", "gravity_risk"},
		},
		// M603 — Hold-to-run with two-hand operation for manual descent
		{
			ID:            "M603",
			ReductionType: "protection",
			SubType:       "control_device",
			Name:          "Tippbetrieb / Hold-to-run beim Absenken (mit Verifikations-Nachweis)",
			Description: "Absenken nur im Tippbetrieb (Hold-to-run): Bedientaster muss waehrend des gesamten " +
				"Absenkvorgangs gedrueckt gehalten werden. Bei Loslassen stoppt die Bewegung sofort. " +
				"Im bodennahen Bereich (Empfehlung: unter 200 mm Bodenabstand) ist das Absenken nur im " +
				"Tippbetrieb mit zusaetzlich reduzierter Geschwindigkeit (Empfehlung: <= 75 mm/s) zulaessig. " +
				"Im Limits-Form als 'Tippbetrieb' deklariert — durch Tests verifizieren (Stop-Reaktionszeit " +
				"<= 0,3 s im voll beladenen Zustand).",
			HazardCategory: "mechanical",
			Examples: []string{
				"Tipptaster mit elektrischer Selbstrueckstellung",
				"Zweihand-Bedienung fuer kritische Absenk-Bereiche (Tipp + Zustimmtaster)",
				"Pruefprotokoll Stop-Zeit gemaess EN ISO 13849-1 PL c",
			},
			NormReferences: []string{
				"EN ISO 13849-1 (Sicherheitsbezogene Steuerungsteile)",
				"EN ISO 13851 (Zweihandschaltungen)",
				"BetrSichV § 4 (Schutzmassnahmen)",
			},
			RiskReduction: &RiskReduction{SeverityDelta: -1, ExposureDelta: -2, ProbabilityDelta: -1},
			Tags:          []string{"crush_point", "gravity_risk", "control_device"},
		},
		// M604 — Underrun guard / kick plate at platform base
		{
			ID:            "M604",
			ReductionType: "design",
			SubType:       "geometry",
			Name:          "Trittblech / Unterfahrschutz an der Hubplattform",
			Description: "Unter der Hubplattform befindet sich ein umlaufendes Trittblech oder Unterfahrschutz, " +
				"das das Hineinfahren von Fuessen unter die Plattform mechanisch verhindert. Hoehe ueber Boden " +
				"maximal 5 mm in unterster Stellung. Trittblech haelt die Last eines Schuhs (mind. 150 kg) " +
				"ohne Verformung.",
			HazardCategory: "mechanical",
			Examples: []string{
				"Umlaufendes Stahlblech 3 mm Wandstaerke mit Fasen-Kante",
				"Kombination mit M601 (Schaltleiste) als doppelte Sicherung",
				"Pruefung jaehrlich auf Verformung und Funktion der Auflage",
			},
			NormReferences: []string{
				"EN 1570-1 (Hubtische)",
				"EN ISO 13857 (Sicherheitsabstaende)",
			},
			RiskReduction: &RiskReduction{SeverityDelta: -2, ExposureDelta: -1},
			Tags:          []string{"crush_point", "gravity_risk"},
		},
		// M605 — Inherently limited general lift/lower speed (by drive design)
		{
			ID:            "M605",
			ReductionType: "design",
			SubType:       "force_energy",
			Name:          "Konstruktiv begrenzte Hub-/Senkgeschwindigkeit",
			Description: "Die generelle Hub- und Senkgeschwindigkeit ist durch die Antriebsauslegung " +
				"(z. B. Schneckengetriebe, Drehzahlbegrenzung im Frequenzumrichter) inhaerent begrenzt " +
				"(Empfehlung fuer manuell zugaengliche Hubgeraete: <= 150 mm/s), sodass Personen " +
				"Bewegungen rechtzeitig erkennen und ausweichen koennen. Ergaenzt die endlagennahe " +
				"Kriechgeschwindigkeit (M600).",
			HazardCategory: "mechanical",
			Examples: []string{
				"Schneckengetriebe begrenzt Hub/Senk konstruktiv auf <= 150 mm/s",
				"Frequenzumrichter mit fest parametrierter Maximaldrehzahl",
				"Hydraulik mit Stromregelventil zur Geschwindigkeitsbegrenzung",
			},
			NormReferences: []string{
				"EN 1570-1 (Hubtische — Bauanforderungen)",
				"EN ISO 13849-1 (sicher reduzierte Geschwindigkeit)",
			},
			RiskReduction: &RiskReduction{ExposureDelta: -1, ProbabilityDelta: -1},
			Tags:          []string{"crush_point", "gravity_risk", "speed_limit"},
		},
		// M606 — Limited uncontrolled descent on power/energy loss
		{
			ID:            "M606",
			ReductionType: "design",
			SubType:       "control_design",
			Name:          "Begrenztes Absenken bei Energieausfall (Lasthalteeinrichtung)",
			Description: "Bei Spannungs-/Energieausfall haelt eine Lasthalteeinrichtung (Senkbremsventil, " +
				"Rohrbruchsicherung, selbsthemmendes Getriebe, mechanische Ruecklaufsperre) die Last; " +
				"ein etwaiges Nachsetzen ist auf ein ungefaehrliches Mass begrenzt (Empfehlung: <= 100 mm). " +
				"Verhindert schlagartiges Absacken auf darunter befindliche Koerperteile.",
			HazardCategory: "mechanical",
			Examples: []string{
				"Senkbremsventil direkt am Hydraulikzylinder (max. ~100 mm Nachsetzen)",
				"Selbsthemmendes Schneckengetriebe ohne Rueckdrehen",
				"Mechanische Ruecklaufsperre / Fangvorrichtung am Hubschlitten",
			},
			NormReferences: []string{
				"EN 1570-1 (Hubtische)",
				"EN ISO 12100 (Energieausfall — sichere Zustaende)",
			},
			RiskReduction: &RiskReduction{SeverityDelta: -2, ProbabilityDelta: -1},
			Tags:          []string{"crush_point", "gravity_risk", "energy_isolation"},
		},
	}
}
