flowchart TD
phone["iPhone CameraService\n(48 MP + LiDAR)"] --> lock["DocumentDetector lock\nstage1→stage2"]
lock --> shutter["pageCaptured\n+ Tiefensnapshot"]
shutter --> link["ReproLink TCP 8765\nFrame-Transfer"]
link --> backstage["BackstageController\nEmpfang + Dispatch"]
backstage --> pipeline["PDAIBackendPipeline\nRektifizierung + Ton + OCR"]
pipeline --> geo["PageGeometry\nGutterFinder + Quality-Gates"]
geo --> tone["ArchivalToneEngine\nFlat-Field + S-Kurve"]
tone --> vision["OCRService Vision\nTranskript lokal"]
vision --> store["Documents/Scans\nmaster NNN.heic + page NNN/"]
store --> batch["PartiturClient\nasync Batch 5401"]
batch --> xml["ext.xml + receipt.json\nbzw. page.json"]
xml --> rename["renamePageArtefacts\nnur Einzelblatt"]
Betrieb
Ein Scan-Durchgang läuft von Kamera-Auslösen bis zur fertig benannten Datei vollautomatisch — der Nutzer wählt nur Vorlage und Partitur; alles andere entscheidet die Pipeline.
Dieses Kapitel beschreibt den Tagesbetrieb: Buchscan und Einzelblatt-Scan von Anfang bis Ende, mit allen Zwischenzuständen, Rückmeldungen und Nachbearbeitungsschritten, die der Nutzer sieht oder auslösen kann.
1 Gesamtablauf im Überblick
Der Gesamtfluss endet im Buchmode mit einem benannten Ordner und XML je Seite; im Einzelblatt-Modus zusätzlich mit Ordner- und Dateiumbenennung nach [klasse]-Firma-Datum-Betrag-Währung.
2 Buchscan — Schritt für Schritt
2.1 1. Vorbereitung (einmalig je Sitzung)
Im rechten Inspektor:
- Vorlage: Buch
- Ausrichtung:
topOnRight(Standard, iPhone quer mit Oberkante rechts) - Buchtyp-Overlay wählen, falls für dieses Buch bereits einer existiert (z. B. „Hevelius”)
- Batch-OCR-Toggle: Ein (Standard) für Gemini-Batch mit 50-%-Kostenrabatt; Aus für sofortigen Sync-Pfad (Ollama/local)
Capture-Settings werden nach jeder Aufnahme automatisch persistiert und bei der nächsten Sitzung wiederhergestellt (CaptureSettingsStore).
2.2 2. Aufnehmen
iPhone über dem Buch, App öffnen → Kamera wird gestartet. Sobald der Rahmen stabil erkannt und die Lock-Bedingungen erfüllt sind (stage2Locked), leuchtet der Sucher-Rand grün auf.
Auslösen: Leertaste am Mac (Fernauslöser), Volume-Taste am iPhone, oder Tap auf den Shutter-Button. Die App löst nur aus, wenn der Rahmen gesperrt ist.
Nach dem Auslösen: - Der Master (HEIC, 48 MP) wird per ReproLink an den Mac übertragen. - Backstage zeigt sofort einen Platzhalter-Thumb in der Seitenleiste (Busy-Zustand, keine Wartezeit für den Nutzer). - Die Pipeline startet im Hintergrund: Geometrie → Tonwert → Vision-OCR. - Sobald Vision-OCR abgeschlossen ist, erscheint das verarbeitete Seitenbild im Thumb.
2.3 3. Qualitäts-Chip „Nachbessern”
Jede Spreite bekommt nach dem Verarbeiten ein Qualitäts-Gate-Ergebnis:
| Chip | Bedeutung |
|---|---|
| (kein Chip) | Alle Quality-Gates bestanden |
| Nachbessern (gelb) | Residualneigung > 0,15° oder Scale-Mismatch > 6 % |
| Neu aufnehmen (rot) | Paper-Coverage < 35 % oder Score-Gate fehlgeschlagen |
Ein Klick auf den Chip öffnet die Spreite mit Diagnose im Detailbereich. Dort ist auch ein direktes Reshoot möglich.
2.4 4. Ergebnis und Ablage
Für jede Doppelseite entstehen in ~/Documents/Scans/<Dokumentname>/:
masters/
master_NNN.heic — 48-MP-Kamerabild
page_NNN/ — Linke Seite
page_NNN.jpg — Verarbeitetes Seitenbild
page_NNN.json — GeometryReport + ToneReport + OCRResult
page_NNN.txt — Flachtext-Transkript (Vision-OCR)
page_NNN.ext.xml — Extended-OCR-Ergebnis (DTD-konformes Buch-XML)
page_NNN.ext.txt — Flachtext aus ext.xml
page_NNN+1/ — Rechte Seite (analog)
metadata/
page_selection.json — Pagenum-Overrides, Reihenfolge-Korrekturen (nie direkt in XML)
document.json — Dokumentregister, Partitur-Status
2.5 5. Extended OCR und Partitur
Extended OCR läuft asynchron über den Orchestrator:
PartiturClientsendet alle Seitenbilder als Batch an denrepro_extended_ocr_agent.- Gemini-Batch (
gemini-3.8-flash) verarbeitet mit 50-%-Kostenrabatt; typische Queue-Zeit: 3–10 Min. - Nach Rückgabe schreibt der Client
page_NNN.ext.xmlundpage_NNN.ext.txt. - Der XML-Tab in
PageDetailViewzeigt das formatierte Buchblatt-XML (Warm-Papier-Stil).
„Partitur anwenden” löst einen separaten Lauf für Buch-Bibliographie (repro_book_agent) oder Buchtyp-Klassifizierung (repro_booktype_agent) aus.
⌘⇧T startet OCR für alle Seiten neu, ohne die verarbeiteten Seitenbilder zu verändern.
3 Einzelblatt-Scan — Schritt für Schritt
3.1 1. Vorlage wählen
Im Inspektor: Vorlage → Einzelblatt. Der Rahmen-Erkennungsmodus wechselt auf Belegsuche: Die App erkennt das weiße Rechteck auf dem schwarzen Untergrund und zoomt darauf, statt eine A4-Buchspreite zu erwarten.
3.2 2. Aufnehmen
Beleg auf schwarzem Untergrund, ausreichend Abstand wählen (kleine Belege wie Bustickets können bis 8 cm herangehen). Sucher-Rand leuchtet grün bei stabiler Erkennung.
Nach dem Auslösen erscheint der Beleg sofort im Kontaktbogen. Die Vision-OCR läuft on-device in ≤ 3 s.
3.3 3. Sofortige Benennung aus Transkript
ReceiptClassifier extrahiert aus dem Vision-OCR-Transkript: - Händlername (bereinigt, max. 20 Zeichen) - Datum (TT-MM-JJJJ) - Gesamtbetrag (2 Dezimalstellen) - Währung (EUR, CHF, …) - Klasse (Taxi, parking, pharma, usw. — oder leer für offene Klasse)
Der Ordner wird sofort umbenannt: [klasse]-Firma-Datum-Betrag-Währung (z. B. [parking]-Schadowstrasse-15-08-2026-3.50-EUR).
Erfolgs-Feedback: Wenn Extraktion und Umbenennung erfolgreich sind, ertönt ein kurzer heller Ton.
Fehler-Feedback: Scheitert die Strukturextraktion (kein erkennbarer Betrag, kein Datum), ertönt ein dunkles Brummen — Signal zum Wiederholen der Aufnahme.
3.4 4. Dubletten erkennen und aufräumen
Wenn zwei Aufnahmen denselben Datei-Stem (Firma + Datum + Betrag) ergeben, erscheint ein 🔁-Icon auf beiden Thumbs in der Seitenleiste. Klick darauf öffnet DuplicateSelectionView: beide Seiten nebeneinander, „Behalten” / „Archivieren” je Seite. Archivierte Seiten landen in <Dokumentordner>/archive/.
3.5 5. Extended OCR (Beleg-XML und JSON)
repro_receipt_ocr_agent verarbeitet sowohl Bild als auch Transkript: - Schreibt <stem>.ext.xml (DTD repro_receipt.dtd) mit vollem Beleg-Schema: Händler, Adresse, Positionen, Steuern, Zahlung, TSE, Reise-/Treibstoff-/Parkdaten. - Schreibt <stem>.receipt.json — Flat-Contract aller DTD-Attribute für Mac-App-Konsum. - DTD-Validierungsstatus und eventuelle Fehler stehen in den dtd_valid/dtd_errors-Attributen der Wurzel.
Der XML-Tab zeigt das Beleg-XML als stilisierten Thermobon (warm, kompakt, Klasse-Badge), der Daten-Tab zeigt receipt.json als lesbares Key-Value-Layout.
4 Reprocessing und OCR-Neulauf
4.1 „Neu verarbeiten (aus Master)”
Rechtsklick auf eine Spreite im Kontaktbogen → „Neu verarbeiten”. Startet die vollständige Pipeline neu, beginnend mit dem gespeicherten Master, ohne den Master zu verändern.
Mit dem Schraubenschlüssel-Symbol oben in der Backstage startet der Neuverarbeitungs-Sweep für alle Spreiten des Dokuments. Nach dem Sweep läuft automatisch Extended-OCR für alle geänderten Seiten.
4.2 ⌘⇧T — OCR für alle Seiten erneuern
Startet Extended-OCR für alle Seiten neu, ohne Seitenbilder neu zu erzeugen. Nützlich nach Orchestrator-Update oder Partitur-Änderung.
5 Capture-Settings-Persistenz
Die folgenden Einstellungen werden automatisch nach jeder Änderung persistiert und beim nächsten Start wiederhergestellt:
| Einstellung | Schlüssel | Wertebereich |
|---|---|---|
| Vorlage | captureMode |
book / receipt |
| Buchausrichtung | orientation |
topOnRight / topOnLeft / topOnTop |
| Kopierständer-Modus | copyStandMode |
Bool |
| Rahmen-Padding | framePadding |
0 %–20 %, Standard 8 % |
| Flat-Field | flatFieldEnabled |
Bool |
| Batch-OCR | batchOCREnabled |
Bool |
| Orchestrator-URL | FamulusReproOrchestratorURL |
URL-String |
6 Batch-OCR Monitoring
Der linke Seitenleisten-Fußbereich zeigt: - „Batch läuft…“ mit geschätzter ETA (aus historischen Queue-Zeiten) - Fertig-Badge, sobald alle offenen Seiten das Batch-Ergebnis haben
7 Laufende QUITTUNGEN-Sammlung
Als Beispiel für den Alltag: der Scan-Ordner ~/Documents/Scans/QUITTUNGEN/ enthält alle Einzelbelege der laufenden Buchführung. Jeder neue Scan landet dort, wird sofort benannt und der Extended-OCR-Batch-Queue zugestellt. Die OCR-Ergebnisse stehen nach wenigen Minuten als DTD-konformes Beleg-XML und Flat-JSON zur Verfügung.