Files
microservice-importer/next_steps_MSImporter.md
T
Nils-Johan Gynther 1bb0eedd4f Update to .md-files
2026-05-01 00:27:30 +02:00

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_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:
    {
      "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)