# Försättsbladets OCR-kontrakt (v1) Fas 0-beslutet: nedströmssystemet läser mottagningen från försättsbladet med **server-side OCR på text** (ingen streckkod, ingen metadatafil). Vi äger formatet. ## Vad som renderas på sida 1 | Element | Syfte | Formatering | |---------|-------|-------------| | `REMISS` | Ankare: "det här är ett remiss-försättsblad" | Arial, 48 pt, fet | | `HSA-ID: ` | **Maskinläsbar rad** – den enda parsern behöver | Consolas (monospace), 20 pt, fet, egen rad, ≥0,8 cm luft över och under | | `Mottagning: ` | Människoläsbar kontroll | Arial, 14 pt | | `Remiss bifogad som sida 2.` | Instruktion till mottagaren | Arial, 16 pt, fet | | Genereringstidpunkt | Spårbarhet | Arial, 9 pt | Allt vänsterställt, överst på A4, svart på vitt. Ingen patientdata på bladet. ## Parserkontrakt Kontraktet är kod, inte bara text: [`OcrContract`](../src/Remiss.Core/Pdf/OcrContract.cs). - **Skriva:** `OcrContract.FormatHsaIdLine(hsaId)` → `"HSA-ID: SE2321000131-E000000000001"` - **Läsa:** `OcrContract.TryParseHsaId(ocrText, out var hsaId)` körs på OCR-texten från sida 1. Parsern tål vanligt OCR-brus: - versaler/gemener spelar ingen roll (`HSA-ID`, `hsa id`) - tappat kolon eller bindestreck i etiketten - enstaka blanksteg som OCR:n lagt in mitt i id:t (`SE2321000131 - E000…`) - omgivande text och radbrytningar före/efter Den stannar vid radslut, så den läcker inte in i `Mottagning:`-raden under. ## Inte med i v1 - **Kontrollsiffra / checksumma.** Medvetet utelämnad nu. Läggs till i Fas 3 om pilottestet visar att OCR:n läser fel – då kan servern validera i stället för att skicka remissen till fel mottagning. - Fast geometrisk OCR-zon. Vi ankrar på nyckelordet `HSA-ID:`, inte på koordinater. ## Iterera på layouten ```powershell dotnet run --project tools/Remiss.CoverPreview -- preview.pdf SE2321000131-E000000000009 "Testmottagning" ```