8.9 KiB
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:
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_KEYinjiceras via env (samma nyckel som recipe-api använder)- Alpine Docker-image: systempaket
tesseract-ocr,tesseract-ocr-data-swe,tesseract-ocr-data-enginstallerade viaapk
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.mdmed 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:
{ "items": [ { "rawName": "GURKA SVERIGE ST", "quantity": 1, "price": 16.90 }, { "rawName": "DRUVOR RÖDA 500G", "quantity": 1, "price": 39.90 } ], "source": "pdf" } recipe-apifungerar som proxy och vidarebefordrar filen till microservicen och returnerar struktureradeitemstill klienten.- Flutter-klienten tar emot strukturerade
itemsdirekt 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-importanropar 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
itemsdirekt 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
- OCR-implementering (hög prioritet)
- Databasintegration (medel prioritet)
- Användarautentisering (medel prioritet)
- Stöd för fler dokumentformat (låg prioritet)
- AI-integration (framtida utökning)