'use client' import { useState } from 'react' const KLAUSUR_API = '/klausur-api' interface StepGroundTruthProps { sessionId: string | null isGroundTruth: boolean onMarked: () => void gridSaveRef: React.MutableRefObject<(() => Promise) | null> } /** * Step 11: Ground Truth marking. * Saves the current grid as reference data for regression tests. */ export function StepGroundTruth({ sessionId, isGroundTruth, onMarked, gridSaveRef }: StepGroundTruthProps) { const [saving, setSaving] = useState(false) const [message, setMessage] = useState('') const handleMark = async () => { if (!sessionId) return setSaving(true) setMessage('') try { // Auto-save grid editor before marking if (gridSaveRef.current) { await gridSaveRef.current() } const res = await fetch( `${KLAUSUR_API}/api/v1/ocr-pipeline/sessions/${sessionId}/mark-ground-truth?pipeline=kombi`, { method: 'POST' }, ) if (!res.ok) { const body = await res.text().catch(() => '') throw new Error(`Ground Truth fehlgeschlagen (${res.status}): ${body}`) } const data = await res.json() setMessage(`Ground Truth gespeichert (${data.cells_saved} Zellen)`) onMarked() } catch (e) { setMessage(e instanceof Error ? e.message : String(e)) } finally { setSaving(false) } } return (

Ground Truth

Markiert die aktuelle Grid-Ausgabe als Referenz fuer Regressionstests. {isGroundTruth && ' Diese Session ist bereits als Ground Truth markiert.'}

{message && (
{message}
)}
) }