feat: complete receipt import phase 6b with review flow, editing, and destination selection

This commit is contained in:
Nils-Johan Gynther
2026-05-01 01:33:55 +02:00
parent d4b35f4a5b
commit 73d653aef9
3 changed files with 38 additions and 20 deletions
+4 -2
View File
@@ -13,6 +13,7 @@
| Snabbimport (URL/PDF/bild/ICA) | ✅ Klart |
| Kvittoimport (Mistral AI, OCR, alias) | ✅ Klart |
| Import-microservice (importer-api, backend-till-backend) | ✅ Klart (2026-04-30) |
| Kvittoimport — granskningsflöde i Flutter (edit, merge, destination) | ✅ Klart (2026-05-01) |
| Matplanering (veckovy, inköpslista) | ✅ Klart |
| Matplan — portionsjustering per dag | ✅ Klart |
| Matplan — inventariejämförelse (backend) | ✅ Klart |
@@ -53,9 +54,10 @@
| Avancerad AI-integration (veckoplanering, receptförslag) | ❌ Planerad |
| EAN-skanning via Open Food Facts API | ❌ Planerad |
## Status — senast genomgånget: 2026-04-30
## Status — senast genomgånget: 2026-05-01
### Nyheter och förbättringar
- **Kvittoimport Fas 6b klar (2026-05-01)** — Flutter-granskningsflödet färdigt: per-rad checkbox, redigeringsdialog med destination-väljare (Inventarie/Baslager), merge-förhandsvisning, parallell laddning av inventarie och baslager, snackbar med separat räkning.
- **Microservice-importer integrerad (2026-04-30)** — All import-logik (URL-skrapning, OCR, PDF-parsning, AI-kvittoparsning) delegeras nu till `importer-api` som körs som intern Docker-tjänst. `recipe-api` behåller Levenshtein-matchning, produktdatabas och AI-kategorisering. Se [migrering-MSI.md](migrering-MSI.md) för detaljer.
- **User-scope för pantry och matplan** — Alla baslager- och matplansdata är nu per användare. Backend och Prisma-schema är migrerade.
- **Robust bildimport** — Bild-URL normaliseras, laddas ner och optimeras i backend. Bilden kopplas till receptet och raderas vid delete. Diagnostikloggning på alla steg.
@@ -71,7 +73,7 @@
## Nästa steg
1. Slutför kvittoimport (granskningssteg och bulk-spara i Flutter).
1. Deploy och smoke-test av kvittoimportflödet på server.
2. Fortsatt flytt av UI-strängar till ARB (inventarie, pantry, recept).
3. Smoke-test på testdomän och avstämning.
4. Planera och påbörja avancerad AI-integration och EAN-skanning.
+21 -17
View File
@@ -32,16 +32,15 @@ Relaterade dokument:
## Arbetsplan
### Pågående arbete
- **Kvittoimport (Fas 6b):** Grundflödet fungerar (2026-04-30) — PDF laddas upp, Mistral AI tolkar kvittot och returnerar strukturerade poster. Återstår: granskningssteg i UI och bulk-spara till pantry/inventarie.
- **Kvittoimport (Fas 6b):** ✅ Klar (2026-05-01) — Granskning, redigering, val av destination (inventarie/baslager), merge och spara implementerat.
- **Bildimport:** Säkerställa att containrar är uppdaterade med senaste kod och att diagnostikloggar syns vid felsökning.
- **Adminfunktioner:** Avancerad AI-integration och ytterligare adminfunktioner planeras men är ej migrerade.
### Prioriterade nästa steg
1. Slutför kvittoimport: granskningssteg + bulk-spara.
2. Säkerställa robust bildimport och diagnostik.
3. Implementera avancerad AI-integration för produktkategorisering.
4. Utöka adminfunktioner för användarhantering och produktadministration.
5. Förbättra UI/UX för användarflöden, inklusive onboarding och profilhantering.
1. Säkerställa robust bildimport och diagnostik.
2. Implementera avancerad AI-integration för produktkategorisering.
3. Utöka adminfunktioner för användarhantering och produktadministration.
4. Förbättra UI/UX för användarflöden, inklusive onboarding och profilhantering.
## Beslut 2026-04-22 - User-scope för pantry och matplan
@@ -66,10 +65,10 @@ För v1 ska dessa flöden vara stabila i Flutter:
- **Mål:** Säkerställa att alla kärnfunktioner är stabila och buggfria.
- **Åtgärder:**
- [ ] **Kvittoimport (OCR, bulk-spara):**
- [ ] Implementera granskningssteg för kvittoimport.
- [ ] Bulk-spara för bekräftade rader.
- [ ] Säkerställa att `file_picker: ^8.0.0` är integrerat för filval på Flutter Web.
- [x] **Kvittoimport (OCR, bulk-spara) — KLAR 2026-05-01:**
- [x] Granskningssteg med checkbox, redigering och destination-väljare.
- [x] Bulk-spara till inventarie (ny/merge) eller baslager (ny/hoppa-över).
- [x] `file_picker: ^8.0.0` integrerat för filval på Flutter Web.
- [ ] **UI/UX-förbättringar för adminpaneler:**
- [ ] Lägg till tydlig placeholder-text i sökfältet.
@@ -198,11 +197,16 @@ För v1 ska dessa flöden vara stabila i Flutter:
- [x] Svar: `{ markdown: string, source: 'ica'|'pdf'|'image'|'other', imageUrl?: string }`.
- [x] På lyckat resultat: navigera till `/recipes/create` med markdown-texten förifylld.
### 6b — Kvittoimport
- [ ] Endpoint: `POST /api/receipt-import`
- [ ] Läge: filuppladdning, `multipart/form-data`, fält `file`, max 15 MB.
- [ ] Svar: `ParsedReceiptItem[]` med fälten `rawName`, `quantity`, `unit`, `suggestedProductId?`, `suggestedProductName?`, `categorySuggestion?`.
- [ ] På lyckat resultat: granskningssteg där användaren bekräftar/skippar rader.
### 6b — Kvittoimport (KLAR 2026-05-01)
- [x] Endpoint: `POST /api/receipt-import`
- [x] Läge: filuppladdning, `multipart/form-data`, fält `file`, max 15 MB.
- [x] Svar: `ParsedReceiptItem[]` med fälten `rawName`, `quantity`, `unit`, `suggestedProductId?`, `suggestedProductName?`, `categorySuggestion?`.
- [x] Granskningssteg: checkboxlista med per-rad redigering (produkt, antal, enhet, destination).
- [x] Destination per rad: **Inventarie** eller **Baslager** via SegmentedButton i redigeringsdialogen.
- [x] Inventarie: ny post skapas, eller befintlig post slås ihop (PATCH quantity) med merge-förhandsvisning.
- [x] Baslager: produkt läggs till om den inte redan finns, annars hoppas den över.
- [x] AI-kategorisuggestion visas som chip (grön, `AI: kategori`) för premium-användare.
- [x] Snackbar med separat räkning: skapade/sammanslagna i inventarie + tillagda/redan-i-baslager.
## UI/UX-förbättringar (KLAR 2026-04-22)
- [x] Produktval med bottenark (ProductPickerField) i inventarie/pantry.
@@ -371,12 +375,12 @@ Relaterade dokument:
## Arbetsplan
### Pågående arbete
- **Kvittoimport (Fas 6b):** Påbörjad men granskningssteg och bulk-spara återstår.
- **Kvittoimport (Fas 6b):** ✅ Klar (2026-05-01) — granskningssteg, destination-väljare, merge och spara klart.
- **Bildimport:** Säkerställa att containrar är uppdaterade med senaste kod och att diagnostikloggar syns vid felsökning.
- **Adminfunktioner:** Avancerad AI-integration och ytterligare adminfunktioner planeras men är ej migrerade.
### Prioriterade nästa steg
1. Slutför kvittoimport och bulk-spara.
1. ~~Slutför kvittoimport och bulk-spara.~~ ✅ Klart (2026-05-01)
2. Säkerställa robust bildimport och diagnostik.
3. Implementera avancerad AI-integration för produktkategorisering.
4. Utöka adminfunktioner för användarhantering och produktadministration.
+13 -1
View File
@@ -2,6 +2,18 @@
Viktigt att komma ihåg vid implementering av nya funktioner och kodning är att inte använda Windows-sökvägar. Använd inte `c:/dev/recipe-app/...` eftersom bygg- och testmiljön är på en remote Ubuntu-server. Utveckling sker lokalt och test samt drift sker på remote server. Säkerställ att inga absoluta Windows-sökvägar används i koden, för att stödja bygg och drift på Linux/Ubuntu.
## Senaste ändringar (2026-05-01)
**Kvittoimport Fas 6b — komplett:**
- Granskningssteg i `receipt_import_tab.dart` med per-rad checkbox, redigeringsdialog och destinationsväljare.
- Destinationsväljare: **Inventarie** eller **Baslager** via `SegmentedButton<_Destination>` i redigeringsdialogen.
- Vid vald destination **Baslager** dolt antal/enhet-fält med informationstext.
- Inventarie-flöde: skapar ny post eller slår ihop (PATCH quantity) med befintlig post. Förhandsvisning av ny mängd visas i listan.
- Baslager-flöde: lägger till produkten om den inte redan finns. Befintliga baslagerprodukter visas med orange chip.
- Snackbar visar separat räkning: skapade/sammanslagna i inventarie + tillagda/hoppa-över i baslager.
- `_loadInventory()` laddar nu inventarie och baslager i parallell via `Future.wait`.
- AI-kategorisuggestion chip (grön) visas för premium-användare i granskningslistan.
## Senaste ändringar (2026-04-25)
**Arkitektur- och UX-förbättringar:**
@@ -64,7 +76,7 @@ Viktigt att komma ihåg vid implementering av nya funktioner och kodning är att
- `{ markdown: "..." }` är svaret från `/quick-import` (receptimport) — inte kvittoimport.
## Övrigt
- **Kvittoimport (Fas 6b):** Grundflödet fungerar. Återstår: granskningssteg i UI och bulk-spara till pantry/inventarie.
- **Kvittoimport (Fas 6b):** ✅ Klar (2026-05-01) — granskningssteg, destination-väljare, merge och spara till inventarie/baslager.
- **Bildimport:** Säkerställa att containrar är uppdaterade med senaste kod och att diagnostikloggar syns vid felsökning.
- **Adminfunktioner:** Avancerad AI-integration och ytterligare adminfunktioner planeras men är ej migrerade.