feat: enhance PDF processing and error handling; add Node.js version tracking
Test Suite / test (24.15.0) (push) Has been cancelled

Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
Nils-Johan Gynther
2026-05-03 22:29:47 +02:00
parent 7c382dbf2e
commit d73ea5ef7c
3 changed files with 13 additions and 2 deletions
+5 -2
View File
@@ -17,11 +17,14 @@ All detaljhistorik och djup teknisk bakgrund finns i respektive tekniska dokumen
- Produktmodell: user-scoped produkter och seed renodlad till kategorier. - Produktmodell: user-scoped produkter och seed renodlad till kategorier.
- Testinfrastruktur: parametriserade enhetstester för kvittoimport (18 testfall). - Testinfrastruktur: parametriserade enhetstester för kvittoimport (18 testfall).
- CI/CD: GitHub Actions-pipeline för automatiserad testkörning vid push och pull request. - CI/CD: GitHub Actions-pipeline för automatiserad testkörning vid push och pull request.
- **Node.js versionsparitet:** `package-lock.json` spåras nu i git för båda repos; Dockerfiles kör `npm ci` — reproducerbara byggen i alla miljöer.
- **PDF-kvittoimport stabiliserad:** `pdf-parse` CJS-fix + `pdfjs-dist/legacy` fallback löser `DOMMatrix`-fel i Node.js.
- **Felkods-forwarding fixad:** `receipt-import.service.ts` i recipe-api vidarebefordrar nu 503 från importer-api som `ServiceUnavailableException` istället för att alltid returnera 400.
- **AI-optimering (PDF):** `looksLikeReceiptProductLine()` i importer-api filtrerar bort header/footer-rader — Mistral anropas enbart för rader som faktiskt kan vara produkter.
## Huvudprioriteringar ## Huvudprioriteringar
1. Node.js versionsparitet i alla miljöer: lås samma major/minor i lokal utveckling, Docker och CI för att undvika miljödrift och svårfelsökta importfel. 1. Aliasstrategi i kvittoimport: user-scope som standard, global fallback via admin.
2. Aliasstrategi i kvittoimport: user-scope som standard, global fallback via admin.
3. Stabilisera bildimport och diagnostik i alla miljoer. 3. Stabilisera bildimport och diagnostik i alla miljoer.
4. Lokalisera kvarvarande stora Flutter-vyer i import/inventarie. 4. Lokalisera kvarvarande stora Flutter-vyer i import/inventarie.
5. Forbereda avancerad AI-integration med tydlig loggning/audit. 5. Forbereda avancerad AI-integration med tydlig loggning/audit.
+4
View File
@@ -18,6 +18,10 @@ Detta dokument är skrivet för systemadministratörer och programmerare. Fokus
- **Kvittokategorisering:** förbättrad deterministisk kategorisering med nya regler för pasta, grädde, ägg, juice, godis, och potatis. AI-guardrail justerad för att tillåta medium confidence-kategorisering. - **Kvittokategorisering:** förbättrad deterministisk kategorisering med nya regler för pasta, grädde, ägg, juice, godis, och potatis. AI-guardrail justerad för att tillåta medium confidence-kategorisering.
- **Testinfrastruktur:** parametriserade enhetstester för kvittoimport (18 testfall) och CI/CD-pipeline med automatiserad testkörning på push. - **Testinfrastruktur:** parametriserade enhetstester för kvittoimport (18 testfall) och CI/CD-pipeline med automatiserad testkörning på push.
- **CI/CD:** GitHub Actions-integration för automatiserad testkörning vid push och pull request. - **CI/CD:** GitHub Actions-integration för automatiserad testkörning vid push och pull request.
- **Node.js versionsparitet:** `package-lock.json` spåras i git för båda repos; Dockerfiles kör `npm ci` för reproducerbara byggen.
- **PDF-kvittoimport:** `pdf-parse` importeras med `require()` (CJS); `pdfjs-dist/legacy/build/pdf.js` som fallback undviker `DOMMatrix`-fel.
- **Felkods-forwarding:** `receipt-import.service.ts` kastar `ServiceUnavailableException` vid 503/429 från importer-api (tidigare alltid 400).
- **AI-skippning (PDF):** `looksLikeReceiptProductLine()` i importer-api filtrerar rader utan siffra — minskar Mistral-anrop drastiskt för vanliga PDF-kvitton.
### Driftnotering ### Driftnotering
Verifiera efter deploy att seed-körning inkluderar uppdaterat kategoriträd och att kvittoflödet använder den senaste regelbaserade parserlogiken. Verifiera efter deploy att seed-körning inkluderar uppdaterat kategoriträd och att kvittoflödet använder den senaste regelbaserade parserlogiken.
+4
View File
@@ -12,6 +12,10 @@ Detta dokument är för systemadministratörer och utvecklare som ansvarar för
- Brödrelaterade kategoriregler och contradiction guards har utökats för högre träffsäkerhet. - Brödrelaterade kategoriregler och contradiction guards har utökats för högre träffsäkerhet.
- Klientens kvittosession i Flutter är nu persistent utan att ändra backendkontrakt eller införa serverlagring av sessionen. - Klientens kvittosession i Flutter är nu persistent utan att ändra backendkontrakt eller införa serverlagring av sessionen.
- Kategoriträdet i seed-data har utökats med `Korvbröd` under `Fastfoodbröd`. - Kategoriträdet i seed-data har utökats med `Korvbröd` under `Fastfoodbröd`.
- **PDF-fix (2026-05-03):** `pdf-parse` använder `require()` istället för ESM-import; `pdfjs-dist/legacy/build/pdf.js` är fallback vid parsningsfel — löser `DOMMatrix is not defined` i Node.js Alpine-miljö.
- **Felkods-forwarding (2026-05-03):** `receipt-import.service.ts` returnerar nu `ServiceUnavailableException` (503) vid 503/429 från importer-api istället för `BadRequestException` (400).
- **Reproducerbart bygge (2026-05-03):** `package-lock.json` spåras i git; Dockerfile för importer-api kör `npm ci`.
- **AI-optimering (2026-05-03):** `looksLikeReceiptProductLine()` filtrerar PDF-rader utan siffra innan Mistral-anrop — minskar onödiga API-anrop vid kvittoimport.
- **Scope:** quick-import, parse-markdown, receipt-import - **Scope:** quick-import, parse-markdown, receipt-import
- **Arkitektur:** Backend-till-backend — recipe-app NestJS-backend anropar microservice-importer internt via HTTP. Frontend ändras inte. - **Arkitektur:** Backend-till-backend — recipe-app NestJS-backend anropar microservice-importer internt via HTTP. Frontend ändras inte.