fix(iace): lifecycle labels in benchmark + store all phases
- Store ALL applicable lifecycles (comma-separated) not just first - Frontend maps internal keys to German labels (normal_operation -> Automatikbetrieb, maintenance -> Wartung, etc.) - Show Betroffene Personen in engine detail column Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
+16
-1
@@ -114,6 +114,21 @@ function MatchedTable({ pairs }: { pairs: HazardMatchPair[] }) {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const LIFECYCLE_LABELS: Record<string, string> = {
|
||||||
|
startup: 'Hochfahren', homing: 'Referenzfahrt', automatic_operation: 'Automatikbetrieb',
|
||||||
|
manual_operation: 'Handbetrieb', teach_mode: 'Einrichtbetrieb', maintenance: 'Wartung',
|
||||||
|
cleaning: 'Reinigung', emergency_stop: 'Not-Halt', recovery_mode: 'Wiederanlauf',
|
||||||
|
normal_operation: 'Automatikbetrieb', setup: 'Einrichten', changeover: 'Umruesten',
|
||||||
|
fault_clearing: 'Fehlersuche/Stoerungsbeseitigung', commissioning: 'Inbetriebnahme',
|
||||||
|
decommissioning: 'Demontage/Ausserbetriebnahme', transport: 'Transport',
|
||||||
|
assembly: 'Montage/Installation', inspection: 'Inspektion/Pruefung',
|
||||||
|
}
|
||||||
|
|
||||||
|
function formatLifecycles(raw: string): string {
|
||||||
|
if (!raw) return '-'
|
||||||
|
return raw.split(',').map(s => s.trim()).map(s => LIFECYCLE_LABELS[s] || s).join(', ')
|
||||||
|
}
|
||||||
|
|
||||||
/** Side-by-side detail comparison of GT entry vs. Engine hazard */
|
/** Side-by-side detail comparison of GT entry vs. Engine hazard */
|
||||||
function DetailComparison({ gt, engine }: { gt: GroundTruthEntry; engine: HazardSummary }) {
|
function DetailComparison({ gt, engine }: { gt: GroundTruthEntry; engine: HazardSummary }) {
|
||||||
return (
|
return (
|
||||||
@@ -144,7 +159,7 @@ function DetailComparison({ gt, engine }: { gt: GroundTruthEntry; engine: Hazard
|
|||||||
<DetailRow label="Szenario" gt={engine.scenario || engine.description || '-'} />
|
<DetailRow label="Szenario" gt={engine.scenario || engine.description || '-'} />
|
||||||
<DetailRow label="Gefahrenstelle" gt={engine.zone || '-'} />
|
<DetailRow label="Gefahrenstelle" gt={engine.zone || '-'} />
|
||||||
{engine.lifecycle_phase && (
|
{engine.lifecycle_phase && (
|
||||||
<DetailRow label="Lebensphasen" gt={engine.lifecycle_phase} />
|
<DetailRow label="Lebensphasen" gt={formatLifecycles(engine.lifecycle_phase)} />
|
||||||
)}
|
)}
|
||||||
<DetailRow label="Moeglicher Schaden" gt={engine.possible_harm || '-'} />
|
<DetailRow label="Moeglicher Schaden" gt={engine.possible_harm || '-'} />
|
||||||
<DetailRow label="Trigger" gt={engine.trigger_event || '-'} />
|
<DetailRow label="Trigger" gt={engine.trigger_event || '-'} />
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package handlers
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/breakpilot/ai-compliance-sdk/internal/iace"
|
"github.com/breakpilot/ai-compliance-sdk/internal/iace"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
@@ -204,11 +205,8 @@ func (h *IACEHandler) InitializeProject(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Join applicable lifecycles for the LifecyclePhase field
|
// Join all applicable lifecycles as comma-separated string
|
||||||
lifecycleStr := ""
|
lifecycleStr := strings.Join(mp.ApplicableLifecycles, ",")
|
||||||
if len(mp.ApplicableLifecycles) > 0 {
|
|
||||||
lifecycleStr = mp.ApplicableLifecycles[0]
|
|
||||||
}
|
|
||||||
|
|
||||||
hz, cerr := h.store.CreateHazard(ctx, iace.CreateHazardRequest{
|
hz, cerr := h.store.CreateHazard(ctx, iace.CreateHazardRequest{
|
||||||
ProjectID: projectID,
|
ProjectID: projectID,
|
||||||
|
|||||||
Reference in New Issue
Block a user