201 lines
8.9 KiB
Markdown
201 lines
8.9 KiB
Markdown
# Plan för vidareutveckling av Microservice Importer
|
|
|
|
## Status (2026-04-30) — Integrerad med recipe-app
|
|
|
|
`microservice-importer` är nu driftsatt som intern tjänst (`importer-api`) i `recipe-app/compose.yml`. Alla tre importflöden är delegerade:
|
|
|
|
| Endpoint | Funktion | Status |
|
|
|---|---|---|
|
|
| `POST /api/quick-import` | URL-skrapning (ICA, generisk), PDF, OCR-bild | ✅ Driftsatt |
|
|
| `POST /api/recipes/parse-markdown` | Markdown → ingrediensstruktur (utan DB) | ✅ Driftsatt |
|
|
| `POST /api/receipt-import/parse` | Kvittobild/PDF → `ParsedReceiptItem[]` via Mistral AI | ✅ Driftsatt |
|
|
| `GET /api/health` | Hälsokontroll (används av Docker healthcheck) | ✅ Driftsatt |
|
|
|
|
**Serverstruktur:**
|
|
```
|
|
/opt/containers/
|
|
microservice-importer/ ← klonas och pullas separat
|
|
recipe-app/
|
|
compose.yml ← bygger importer-api från ../microservice-importer
|
|
deploy.sh
|
|
```
|
|
|
|
**Deploy:**
|
|
```bash
|
|
cd /opt/containers/microservice-importer && git pull
|
|
cd /opt/containers/recipe-app && git pull && ./deploy.sh
|
|
```
|
|
|
|
---
|
|
|
|
## Återstående / Möjliga nästa steg
|
|
|
|
### Hög prioritet
|
|
- **Kvittoimport Fas 6b** — Granskningssteg och bulk-spara i Flutter-klienten (logiken är klar i backend)
|
|
|
|
### Medel prioritet
|
|
- **Fler webbplats-parsers** — Lägg till specifika parsers för t.ex. Arla, Tasteline, Köket.se
|
|
- **Swagger/OpenAPI** — Automatisk API-dokumentation via `@nestjs/swagger`
|
|
- **Testtäckning** — Enhetstester för parsers och receipt-parsing-service
|
|
|
|
### Låg prioritet / Framtida
|
|
- **Caching** — Cacha skrapade sidor för att minska belastning på externa webbplatser
|
|
- **Puppeteer** — Hantera JavaScript-renderade sidor
|
|
- **Word-dokument** — Stöd för `.docx`-import
|
|
- **Centraliserad loggning** — Prometheus/Grafana eller liknande
|
|
|
|
---
|
|
|
|
## Arkitektur-noteringar
|
|
|
|
- Tjänsten är **helt stateless** — ingen databas, ingen session
|
|
- Kommunicerar **aldrig direkt** med internet-klienter — exponeras bara på `recipe-internal`-nätverket
|
|
- `MISTRAL_API_KEY` injiceras via env (samma nyckel som recipe-api använder)
|
|
- Alpine Docker-image: systempaket `tesseract-ocr`, `tesseract-ocr-data-swe`, `tesseract-ocr-data-eng` installerade via `apk`
|
|
|
|
|
|
---
|
|
|
|
## 1. Förbättra befintliga funktioner
|
|
|
|
### a. PDF-import och konvertering
|
|
- **OCR-implementering**: Slutför OCR-stödet för skannade PDF-filer. Använd bibliotek som Tesseract.js för att extrahera text från bilder.
|
|
- **Förbättrad metadatahantering**: Lägg till stöd för fler metadatafält, såsom författare, nyckelord och språk.
|
|
- **Förbättrad felhantering**: Utöka felmeddelanden för att ge tydligare feedback vid problem med PDF-filer.
|
|
|
|
### b. Webb-skrapning
|
|
- **Utöka stöd för webbplatser**: Lägg till specifika parsers för fler populära receptwebbplatser.
|
|
- **Förbättrad robusthet**: Hantera dynamiskt innehåll och JavaScript-renderade sidor med verktyg som Puppeteer.
|
|
- **Caching**: Implementera caching för att minska belastningen på extern webbplatser och förbättra prestanda.
|
|
|
|
---
|
|
|
|
## 2. Lägga till nya funktioner
|
|
|
|
### a. Stöd för fler dokumentformat
|
|
- **Word-dokument**: Lägg till stöd för att importera och konvertera `.docx`-filer till Markdown.
|
|
- **Bildfiler**: Implementera OCR för att extrahera text från bilder (t.ex. `.jpg`, `.png`).
|
|
|
|
### b. Databasintegration
|
|
- **Lokal databas**: Lägg till stöd för att spara konverterade dokument och metadata i en databas (t.ex. PostgreSQL eller MongoDB).
|
|
- **Sökfunktion**: Implementera en sökfunktion för att enkelt hitta sparade dokument.
|
|
|
|
### c. Användarautentisering
|
|
- **Inloggning**: Lägg till autentisering för att skydda API:et och möjliggöra användarspecifika dokument.
|
|
- **Rollbaserad åtkomst**: Implementera roller för att styra åtkomst till olika funktioner.
|
|
|
|
---
|
|
|
|
## 3. Optimera arkitekturen
|
|
|
|
### a. Backend
|
|
- **Modulär struktur**: Se till att varje funktion är tydligt separerad i moduler för att underlätta underhåll och skalning.
|
|
- **Prestandaoptimering**: Använd caching och asynkron bearbetning för att förbättra prestandan vid stora filuppladdningar.
|
|
|
|
### b. Frontend
|
|
- **Förbättrad användarupplevelse**: Lägg till en förhandsgranskning av konverterade dokument innan de sparas.
|
|
- **Responsiv design**: Säkerställ att gränssnittet fungerar bra på mobila enheter.
|
|
|
|
---
|
|
|
|
## 4. Testning och kvalitetssäkring
|
|
|
|
### a. Enhetstestning
|
|
- **Backend**: Skriv enhetstester för alla tjänster och parsers.
|
|
- **Frontend**: Testa komponenter och API-anrop.
|
|
|
|
### b. Integrationstestning
|
|
- **API-tester**: Verifiera att alla API-endpoints fungerar som förväntat.
|
|
- **E2E-tester**: Testa hela flödet från filuppladdning till visning av konverterat dokument.
|
|
|
|
### c. Säkerhetstestning
|
|
- **Säkerhetsgranskning**: Kontrollera att API:et är skyddat mot vanliga säkerhetshot, såsom SQL-injektioner och CSRF-attacker.
|
|
|
|
---
|
|
|
|
## 5. Dokumentation och användarstöd
|
|
|
|
### a. API-dokumentation
|
|
- **Swagger/OpenAPI**: Lägg till automatiskt genererad API-dokumentation för att underlätta integration med andra system.
|
|
|
|
### b. Användarhandbok
|
|
- **Installationsguide**: Uppdatera `README.md` med tydliga instruktioner för installation och användning.
|
|
- **Felsökningsguide**: Lägg till vanliga problem och lösningar.
|
|
|
|
---
|
|
|
|
## 6. Skalbarhet och drift
|
|
|
|
### a. Containerisering
|
|
- **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)
|
|
|
|
### Status (2026-04-30)
|
|
**Backend (`recipe-api`) är redan implementerat!** `ReceiptImportController` och `ReceiptImportService` finns redan och använder **Mistral AI** för att parsa kvitton till strukturerade `ParsedReceiptItem[]` direkt. Det finns inget behov av att flytta denna logik till Microservice Importer — det som återstår är granskningssteg och bulk-spara i Flutter-klienten.
|
|
|
|
Detta avsnitt gäller nu som referens för om man i framtiden vill isolera kvittoparsning som en fristående microservice.
|
|
|
|
### Bakgrund
|
|
Detta var ursprungligen planerat som ett långsiktigt mål: att flytta kvittoparsning från `recipe-api` till **Microservice Importer** för bättre modularitet. Logiken är nu implementerad i `recipe-api` med Mistral AI och fungerar. En framtida refaktorering till microservice kan göras om skalbarhetsbehov uppstår.
|
|
|
|
### 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.
|
|
|
|
---
|
|
|
|
## 7. Framtida utökningar
|
|
|
|
### a. AI-integration
|
|
- **Automatisk sammanfattning**: Använd NLP för att automatiskt sammanfatta konverterade dokument.
|
|
- **Smart kategorisering**: Klassificera dokument baserat på innehåll.
|
|
|
|
### b. Integration med molntjänster
|
|
- **Molnupladdning**: Lägg till stöd för att ladda upp dokument till molntjänster som Google Drive eller Dropbox.
|
|
|
|
---
|
|
|
|
## Prioriteringsförslag
|
|
1. **OCR-implementering** (hög prioritet)
|
|
2. **Databasintegration** (medel prioritet)
|
|
3. **Användarautentisering** (medel prioritet)
|
|
4. **Stöd för fler dokumentformat** (låg prioritet)
|
|
5. **AI-integration** (framtida utökning) |