feat: Add long-term goal for structured receipt import with parser implementation

Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
Nils-Johan Gynther
2026-04-30 12:48:25 +02:00
parent 9db794a3be
commit f6c9c3949c
+43
View File
@@ -78,6 +78,49 @@ För att utveckla **Microservice Importer** vidare kan vi fokusera på att förb
- **Docker**: Se till att alla tjänster är korrekt containeriserade för enkel distribution.
- **Orkestrering**: Använd Kubernetes för att hantera skalning och hög tillgänglighet.
---
## 7. Långsiktigt mål: Kvittoimport som strukturerade poster (Fas 6b)
### Bakgrund
Idag returnerar `/receipt-import`-endpointen i `recipe-api` ett `markdown`-fält när en PDF-fil importeras. Flutter-klienten parsar då råtextraderna till `ParsedReceiptItem`-objekt på klientsidan. Detta är en tillfällig lösning.
Det långsiktiga målet är att flytta denna logik till **Microservice Importer**, som ska ansvara för att tolka och strukturera kvitton till väldefinierade produktposter.
### Mål
- **Microservice Importer** tar emot en kvittofil (PDF eller bild) och returnerar strukturerade poster:
```json
{
"items": [
{ "rawName": "GURKA SVERIGE ST", "quantity": 1, "price": 16.90 },
{ "rawName": "DRUVOR RÖDA 500G", "quantity": 1, "price": 39.90 }
],
"source": "pdf"
}
```
- **`recipe-api`** fungerar som proxy och vidarebefordrar filen till microservicen och returnerar strukturerade `items` till klienten.
- **Flutter-klienten** tar emot strukturerade `items` direkt och behöver inte längre parsa markdown på klientsidan.
### Implementation
#### Steg 1: Parser i Microservice Importer
- Implementera en kvittoparser som extraherar produktrader ur OCR-text från PDF/bild.
- Tolka kvantitet och pris ur varje rad med regex (t.ex. `GURKA SVERIGE ST 16,90`).
- Hantera svenska kvittoformat (Willys, ICA, Coop etc.).
- Returnera strukturerade `items[]` via ett eget API-endpoint, t.ex. `POST /parse-receipt`.
#### Steg 2: Integration med recipe-api
- `recipe-api`/`/receipt-import` anropar Microservice Importer vid filuppladdning.
- Returnerar `{ items: [...], source: "pdf" }` till klienten i stället för `{ markdown: "..." }`.
#### Steg 3: Uppdatera Flutter-klienten
- Ta bort den tillfälliga markdown-parsningen i `ImportRepository`.
- Hantera strukturerade `items` direkt från API-svaret.
#### Steg 4: Granskningssteg och bulk-spara
- Visa importerade produkter i ett granskningssteg där användaren kan korrigera namn, kvantitet och pris.
- Implementera bulk-spara för att spara alla godkända poster till pantry/inventarie.
### b. Övervakning och loggning
- **Loggning**: Implementera centraliserad loggning för att enkelt kunna felsöka problem.
- **Övervakning**: Använd verktyg som Prometheus och Grafana för att övervaka prestanda och tillgänglighet.