iOS: Kassenzettel scannen -> Lebensmittel erkennen & einlagern

Neuer Flow (Kachel im Listen-Tab): Foto aufnehmen/waehlen, Artikelbereich per
Rechteck markieren, on-device OCR (Vision, deutsch; Bild bleibt auf dem Geraet),
Zeilen an /products/match schicken. Pruefen-Liste je Zeile: Artikel-Picker
(Auto-Treffer ueber Schwellwert + eigene Lebensmittel-Suche), Menge (aus Zeile
geparst, korrigierbar), Lagerort-Dropdown + QR-Scan. Einlagern per checkInBatch,
unbekannte Zeilen werden uebersprungen; keine Neuanlage.

Backend: MatchCandidate traegt package_size/base_unit mit, damit die App die
Einheit ohne Extra-Abruf kennt.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-07-30 18:40:10 +02:00
parent 9cc3e325bb
commit 648b8294b8
6 changed files with 488 additions and 1 deletions

View File

@@ -166,6 +166,8 @@ struct ScanTabView: View {
}
struct ListsTabView: View {
@State private var kassenzettelAn = false
var body: some View {
NavigationStack {
VStack(spacing: 16) {
@@ -213,10 +215,18 @@ struct ListsTabView: View {
ActionTile(title: "Verlauf", subtitle: "Wer hat wann was ein- und ausgelagert",
systemImage: "clock.arrow.circlepath")
}
Button {
kassenzettelAn = true
} label: {
ActionTile(title: "Kassenzettel", subtitle: "Bon fotografieren und Lebensmittel einlagern",
systemImage: "doc.text.viewfinder")
}
.buttonStyle(.plain)
Spacer()
}
.padding()
.navigationTitle("Listen")
.fullScreenCover(isPresented: $kassenzettelAn) { KassenzettelView() }
}
}
}