diff --git a/admin-lehrer/components/ocr-pipeline/StepGroundTruth.tsx b/admin-lehrer/components/ocr-pipeline/StepGroundTruth.tsx index 0e9f759..e2697bf 100644 --- a/admin-lehrer/components/ocr-pipeline/StepGroundTruth.tsx +++ b/admin-lehrer/components/ocr-pipeline/StepGroundTruth.tsx @@ -43,6 +43,9 @@ export function StepGroundTruth({ sessionId, onNext }: StepGroundTruthProps) { const [drawingRegion, setDrawingRegion] = useState(false) const [dragStart, setDragStart] = useState<{ x: number; y: number } | null>(null) const [dragEnd, setDragEnd] = useState<{ x: number; y: number } | null>(null) + const [isGroundTruth, setIsGroundTruth] = useState(false) + const [gtSaving, setGtSaving] = useState(false) + const [gtMessage, setGtMessage] = useState('') const leftPanelRef = useRef(null) const rightPanelRef = useRef(null) @@ -86,6 +89,10 @@ export function StepGroundTruth({ sessionId, onNext }: StepGroundTruthProps) { : `${KLAUSUR_API}/api/v1/ocr-pipeline/sessions/${sessionId}/image/original`, }) + // Check if session has ground truth reference + const gt = data.ground_truth + setIsGroundTruth(!!gt?.build_grid_reference) + // Load existing validation data const valResp = await fetch(`${KLAUSUR_API}/api/v1/ocr-pipeline/sessions/${sessionId}/reconstruction/validation`) if (valResp.ok) { @@ -196,6 +203,31 @@ export function StepGroundTruth({ sessionId, onNext }: StepGroundTruthProps) { } } + // Mark/update ground truth reference + const handleMarkGroundTruth = async () => { + if (!sessionId) return + setGtSaving(true) + setGtMessage('') + try { + const resp = await fetch( + `${KLAUSUR_API}/api/v1/ocr-pipeline/sessions/${sessionId}/mark-ground-truth`, + { method: 'POST' } + ) + if (!resp.ok) { + const body = await resp.text().catch(() => '') + throw new Error(`Ground Truth fehlgeschlagen (${resp.status}): ${body}`) + } + const data = await resp.json() + setIsGroundTruth(true) + setGtMessage(`Ground Truth gespeichert (${data.cells_saved} Zellen)`) + setTimeout(() => setGtMessage(''), 5000) + } catch (e) { + setGtMessage(e instanceof Error ? e.message : String(e)) + } finally { + setGtSaving(false) + } + } + // Handle manual region drawing on reconstruction const handleReconMouseDown = (e: React.MouseEvent) => { if (!drawingRegion) return @@ -570,8 +602,20 @@ export function StepGroundTruth({ sessionId, onNext }: StepGroundTruthProps) {
{status === 'saved' && Validierung gespeichert} {status === 'saving' && Speichere...} + {gtMessage && ( + + {gtMessage} + + )}
+