feat: complete receipt import phase 6b with review flow, editing, and destination selection
This commit is contained in:
+4
-2
@@ -13,6 +13,7 @@
|
|||||||
| Snabbimport (URL/PDF/bild/ICA) | ✅ Klart |
|
| Snabbimport (URL/PDF/bild/ICA) | ✅ Klart |
|
||||||
| Kvittoimport (Mistral AI, OCR, alias) | ✅ Klart |
|
| Kvittoimport (Mistral AI, OCR, alias) | ✅ Klart |
|
||||||
| Import-microservice (importer-api, backend-till-backend) | ✅ Klart (2026-04-30) |
|
| 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 |
|
| Matplanering (veckovy, inköpslista) | ✅ Klart |
|
||||||
| Matplan — portionsjustering per dag | ✅ Klart |
|
| Matplan — portionsjustering per dag | ✅ Klart |
|
||||||
| Matplan — inventariejämförelse (backend) | ✅ Klart |
|
| Matplan — inventariejämförelse (backend) | ✅ Klart |
|
||||||
@@ -53,9 +54,10 @@
|
|||||||
| Avancerad AI-integration (veckoplanering, receptförslag) | ❌ Planerad |
|
| Avancerad AI-integration (veckoplanering, receptförslag) | ❌ Planerad |
|
||||||
| EAN-skanning via Open Food Facts API | ❌ 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
|
### 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.
|
- **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.
|
- **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.
|
- **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
|
## 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).
|
2. Fortsatt flytt av UI-strängar till ARB (inventarie, pantry, recept).
|
||||||
3. Smoke-test på testdomän och avstämning.
|
3. Smoke-test på testdomän och avstämning.
|
||||||
4. Planera och påbörja avancerad AI-integration och EAN-skanning.
|
4. Planera och påbörja avancerad AI-integration och EAN-skanning.
|
||||||
|
|||||||
@@ -32,16 +32,15 @@ Relaterade dokument:
|
|||||||
## Arbetsplan
|
## Arbetsplan
|
||||||
|
|
||||||
### Pågående arbete
|
### 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.
|
- **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.
|
- **Adminfunktioner:** Avancerad AI-integration och ytterligare adminfunktioner planeras men är ej migrerade.
|
||||||
|
|
||||||
### Prioriterade nästa steg
|
### Prioriterade nästa steg
|
||||||
1. Slutför kvittoimport: granskningssteg + bulk-spara.
|
1. Säkerställa robust bildimport och diagnostik.
|
||||||
2. Säkerställa robust bildimport och diagnostik.
|
2. Implementera avancerad AI-integration för produktkategorisering.
|
||||||
3. Implementera avancerad AI-integration för produktkategorisering.
|
3. Utöka adminfunktioner för användarhantering och produktadministration.
|
||||||
4. Utöka adminfunktioner för användarhantering och produktadministration.
|
4. Förbättra UI/UX för användarflöden, inklusive onboarding och profilhantering.
|
||||||
5. 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
|
## 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.
|
- **Mål:** Säkerställa att alla kärnfunktioner är stabila och buggfria.
|
||||||
|
|
||||||
- **Åtgärder:**
|
- **Åtgärder:**
|
||||||
- [ ] **Kvittoimport (OCR, bulk-spara):**
|
- [x] **Kvittoimport (OCR, bulk-spara) — KLAR 2026-05-01:**
|
||||||
- [ ] Implementera granskningssteg för kvittoimport.
|
- [x] Granskningssteg med checkbox, redigering och destination-väljare.
|
||||||
- [ ] Bulk-spara för bekräftade rader.
|
- [x] Bulk-spara till inventarie (ny/merge) eller baslager (ny/hoppa-över).
|
||||||
- [ ] Säkerställa att `file_picker: ^8.0.0` är integrerat för filval på Flutter Web.
|
- [x] `file_picker: ^8.0.0` integrerat för filval på Flutter Web.
|
||||||
|
|
||||||
- [ ] **UI/UX-förbättringar för adminpaneler:**
|
- [ ] **UI/UX-förbättringar för adminpaneler:**
|
||||||
- [ ] Lägg till tydlig placeholder-text i sökfältet.
|
- [ ] 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] Svar: `{ markdown: string, source: 'ica'|'pdf'|'image'|'other', imageUrl?: string }`.
|
||||||
- [x] På lyckat resultat: navigera till `/recipes/create` med markdown-texten förifylld.
|
- [x] På lyckat resultat: navigera till `/recipes/create` med markdown-texten förifylld.
|
||||||
|
|
||||||
### 6b — Kvittoimport
|
### 6b — Kvittoimport (KLAR 2026-05-01)
|
||||||
- [ ] Endpoint: `POST /api/receipt-import`
|
- [x] Endpoint: `POST /api/receipt-import`
|
||||||
- [ ] Läge: filuppladdning, `multipart/form-data`, fält `file`, max 15 MB.
|
- [x] Läge: filuppladdning, `multipart/form-data`, fält `file`, max 15 MB.
|
||||||
- [ ] Svar: `ParsedReceiptItem[]` med fälten `rawName`, `quantity`, `unit`, `suggestedProductId?`, `suggestedProductName?`, `categorySuggestion?`.
|
- [x] Svar: `ParsedReceiptItem[]` med fälten `rawName`, `quantity`, `unit`, `suggestedProductId?`, `suggestedProductName?`, `categorySuggestion?`.
|
||||||
- [ ] På lyckat resultat: granskningssteg där användaren bekräftar/skippar rader.
|
- [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)
|
## UI/UX-förbättringar (KLAR 2026-04-22)
|
||||||
- [x] Produktval med bottenark (ProductPickerField) i inventarie/pantry.
|
- [x] Produktval med bottenark (ProductPickerField) i inventarie/pantry.
|
||||||
@@ -371,12 +375,12 @@ Relaterade dokument:
|
|||||||
## Arbetsplan
|
## Arbetsplan
|
||||||
|
|
||||||
### Pågående arbete
|
### 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.
|
- **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.
|
- **Adminfunktioner:** Avancerad AI-integration och ytterligare adminfunktioner planeras men är ej migrerade.
|
||||||
|
|
||||||
### Prioriterade nästa steg
|
### 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.
|
2. Säkerställa robust bildimport och diagnostik.
|
||||||
3. Implementera avancerad AI-integration för produktkategorisering.
|
3. Implementera avancerad AI-integration för produktkategorisering.
|
||||||
4. Utöka adminfunktioner för användarhantering och produktadministration.
|
4. Utöka adminfunktioner för användarhantering och produktadministration.
|
||||||
|
|||||||
@@ -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.
|
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)
|
## Senaste ändringar (2026-04-25)
|
||||||
|
|
||||||
**Arkitektur- och UX-förbättringar:**
|
**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.
|
- `{ markdown: "..." }` är svaret från `/quick-import` (receptimport) — inte kvittoimport.
|
||||||
|
|
||||||
## Övrigt
|
## Ö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.
|
- **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.
|
- **Adminfunktioner:** Avancerad AI-integration och ytterligare adminfunktioner planeras men är ej migrerade.
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user