Files
recipe-app/logs/receipt_decisions_20260502_231757.log

253 lines
48 KiB
Plaintext

recipe-api | Prisma schema loaded from prisma/schema.prisma
recipe-api | Datasource "db": MySQL database "recipe_app" at "recipe-db:3306"
recipe-api |
recipe-api | 25 migrations found in prisma/migrations
recipe-api |
recipe-api |
recipe-api | No pending migrations to apply.
recipe-api | npm notice
recipe-api | npm notice New major version of npm available! 10.9.7 -> 11.13.0
recipe-api | npm notice Changelog: https://github.com/npm/cli/releases/tag/v11.13.0
recipe-api | npm notice To update run: npm install -g npm@11.13.0
recipe-api | npm notice
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [NestFactory] Starting Nest application...
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [InstanceLoader] PrismaModule dependencies initialized +32ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [InstanceLoader] PassportModule dependencies initialized +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [InstanceLoader] ThrottlerModule dependencies initialized +1ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [InstanceLoader] JwtModule dependencies initialized +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [InstanceLoader] AiModule dependencies initialized +1ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [InstanceLoader] CategoriesModule dependencies initialized +2ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [InstanceLoader] MealPlanModule dependencies initialized +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [InstanceLoader] HealthModule dependencies initialized +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [InstanceLoader] QuickImportModule dependencies initialized +1ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [InstanceLoader] AppModule dependencies initialized +1ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [InstanceLoader] AuthModule dependencies initialized +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [InstanceLoader] InventoryModule dependencies initialized +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [InstanceLoader] RecipesModule dependencies initialized +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [InstanceLoader] PantryModule dependencies initialized +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [InstanceLoader] ReceiptAliasModule dependencies initialized +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [InstanceLoader] UsersModule dependencies initialized +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [InstanceLoader] UserProductsModule dependencies initialized +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [InstanceLoader] ReceiptImportModule dependencies initialized +1ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [InstanceLoader] ProductsModule dependencies initialized +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RoutesResolver] HealthController {/api/health}: +12ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/health, GET} route +4ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/health/db, GET} route +1ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RoutesResolver] ProductsController {/api/products}: +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/products, GET} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/products/tags, GET} route +1ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/products/duplicates, GET} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/products/merge-preview, GET} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/products/backfill-canonical, POST} route +1ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/products/pending, GET} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/products/ai-categorize-bulk, POST} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/products/deleted, GET} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/products/mine, GET} route +1ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/products/:id, GET} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/products/private, POST} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/products/:id/suggest-category, GET} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/products, POST} route +1ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/products/pending, POST} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/products/merge, POST} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/products/:id/canonical-name, PATCH} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/products/:id/tags, PUT} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/products/:id/nutrition, PUT} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/products/:id, PATCH} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/products/:id/permanent, DELETE} route +1ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/products/:id, DELETE} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/products/:id/status, PATCH} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/products/:id/restore, POST} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/products/reset-all, POST} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/products/bulk-update, POST} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RoutesResolver] AiController {/api/ai}: +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/ai/models, GET} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RoutesResolver] CategoriesController {/api/categories}: +1ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/categories, GET} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/categories/tree, GET} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RoutesResolver] InventoryController {/api/inventory}: +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/inventory/:id/consume, POST} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/inventory/:id/consumption-history, GET} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/inventory, GET} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/inventory/expiring, GET} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/inventory, POST} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/inventory/:id, PATCH} route +1ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/inventory/:id, DELETE} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RoutesResolver] RecipesController {/api/recipes}: +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/recipes/parse-markdown, POST} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/recipes, GET} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/recipes/:id/inventory-preview, GET} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/recipes/:id, GET} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/recipes, POST} route +1ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/recipes/:id, PATCH} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/recipes/:id, DELETE} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/recipes/:id/image, POST} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/recipes/:id/visibility, PATCH} route +1ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/recipes/:id/share, POST} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/recipes/:id/share/:username, DELETE} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RoutesResolver] QuickImportController {/api/quick-import}: +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/quick-import, POST} route +1ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RoutesResolver] PantryController {/api/pantry}: +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/pantry, GET} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/pantry, POST} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/pantry/:id, DELETE} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RoutesResolver] MealPlanController {/api/meal-plan}: +1ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/meal-plan, GET} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/meal-plan/shopping-list, GET} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/meal-plan/inventory-compare, GET} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/meal-plan, POST} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/meal-plan/:date, DELETE} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RoutesResolver] ReceiptImportController {/api/receipt-import}: +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/receipt-import, POST} route +1ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RoutesResolver] ReceiptAliasController {/api/receipt-aliases}: +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/receipt-aliases, GET} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/receipt-aliases, POST} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/receipt-aliases/:id, DELETE} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RoutesResolver] AuthController {/api/auth}: +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/auth/register, POST} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/auth/login, POST} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RoutesResolver] UsersController {/api/users}: +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/users/me, GET} route +1ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/users/me, PATCH} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/users, GET} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/users/:id/role, PATCH} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/users/:id/premium, PATCH} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/users/:id/recipe-sharing, PATCH} route +1ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/users, POST} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/users/:id, DELETE} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/users/:id/reset-password, POST} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/users/:id/email, PATCH} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RoutesResolver] UserProductsController {/api/user-products}: +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/user-products, GET} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/user-products, POST} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [RouterExplorer] Mapped {/api/user-products/:productId, DELETE} route +0ms
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [PrismaService] Försöker ansluta till databasen (försök 1/10)...
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [PrismaService] Databasanslutning etablerad.
recipe-api | [Nest] 1 - 05/02/2026, 9:17:45 PM  LOG [NestApplication] Nest application successfully started +12ms
recipe-api | [Nest] 1 - 05/02/2026, 9:18:06 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:18:06 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:18:10 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:18:10 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:18:15 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:18:15 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:18:21 PM  LOG [ReceiptImportService] [ReceiptDecision] start raw="BRIOCHE SESAM" signal="BRIOCHE SESAM Brioche Sesam" parsedQuantity=2 parsedUnit=st packageCount=1 packQuantity=null packUnit=null | match matchedProductId=null suggestedProductId=31 | incoming category="Kaffebröd" confidence=medium fallback=false | rule miss | ai skipped, current -> "Kaffebröd" | final -> "Kaffebröd" (medium)
recipe-api | [Nest] 1 - 05/02/2026, 9:18:21 PM  LOG [ReceiptImportService] [ReceiptDecision] start raw="GURKA SVERIGE ST" signal="GURKA SVERIGE ST Gurka Sverige St" parsedQuantity=1 parsedUnit=st packageCount=1 packQuantity=null packUnit=null | match matchedProductId=null suggestedProductId=32 | incoming category="Övriga grönsaker" confidence=medium fallback=false | rule miss | ai skipped, current -> "Övriga grönsaker" | final -> "Övriga grönsaker" (medium)
recipe-api | [Nest] 1 - 05/02/2026, 9:18:21 PM  LOG [ReceiptImportService] [ReceiptDecision] start raw="ROAST`N TOAST 800G" signal="ROAST`N TOAST 800G Roast`n Toast 800g" parsedQuantity=1 parsedUnit=förp packageCount=1 packQuantity=800 packUnit=g | match matchedProductId=null suggestedProductId=33 | incoming category="Rostbröd" confidence=medium fallback=false | rule miss | ai skipped, current -> "Rostbröd" | final -> "Rostbröd" (medium)
recipe-api | [Nest] 1 - 05/02/2026, 9:18:21 PM  LOG [ReceiptImportService] [ReceiptDecision] start raw="POTATIS FAST" signal="POTATIS FAST Potatis Fast" parsedQuantity=1 parsedUnit=kg packageCount=1 packQuantity=null packUnit=null | match matchedProductId=null suggestedProductId=34 | incoming category="Rotsaker" confidence=medium fallback=false | rule miss | ai skipped, current -> "Rotsaker" | final -> "Rotsaker" (medium)
recipe-api | [Nest] 1 - 05/02/2026, 9:18:21 PM  LOG [ReceiptImportService] [ReceiptDecision] start raw="TOMATER" signal="TOMATER Tomater" parsedQuantity=1 parsedUnit=kg packageCount=1 packQuantity=null packUnit=null | match matchedProductId=null suggestedProductId=35 | incoming category="Tomater" confidence=medium fallback=false | rule miss | ai skipped, current -> "Tomater" | final -> "Tomater" (medium)
recipe-api | [Nest] 1 - 05/02/2026, 9:18:21 PM  LOG [ReceiptImportService] [ReceiptDecision] start raw="LÖK RÖD" signal="LÖK RÖD Lök Röd" parsedQuantity=1 parsedUnit=kg packageCount=1 packQuantity=null packUnit=null | match matchedProductId=null suggestedProductId=36 | incoming category="Lök" confidence=medium fallback=false | rule miss | ai skipped, current -> "Lök" | final -> "Lök" (medium)
recipe-api | [Nest] 1 - 05/02/2026, 9:18:21 PM  LOG [ReceiptImportService] [ReceiptDecision] start raw="SALAMI PEPPAR 150G" signal="SALAMI PEPPAR 150G Salami Peppar 150g" parsedQuantity=2 parsedUnit=st packageCount=1 packQuantity=150 packUnit=g | match matchedProductId=null suggestedProductId=37 | incoming category="Skivat pålägg" confidence=medium fallback=false | rule miss | ai skipped, current -> "Skivat pålägg" | final -> "Skivat pålägg" (medium)
recipe-api | [Nest] 1 - 05/02/2026, 9:18:21 PM  LOG [ReceiptImportService] [ReceiptDecision] start raw="BLANDFÄRS 20% IMP" signal="BLANDFÄRS 20% IMP Blandfärs 20% Imp" parsedQuantity=0.997 parsedUnit=kg packageCount=1 packQuantity=null packUnit=null | match matchedProductId=null suggestedProductId=38 | incoming category="Köttfärs" confidence=medium fallback=false | rule miss | ai skipped, current -> "Köttfärs" | final -> "Köttfärs" (medium)
recipe-api | [Nest] 1 - 05/02/2026, 9:18:21 PM  LOG [ReceiptImportService] [ReceiptDecision] start raw="DONUT BELG CHOKLAD" signal="DONUT BELG CHOKLAD Donut Belg Choklad" parsedQuantity=1 parsedUnit=st packageCount=1 packQuantity=null packUnit=null | match matchedProductId=null suggestedProductId=39 | incoming category="Kaffebröd" confidence=medium fallback=false | rule hit -> "Kondis & fika > Kaffebröd" (high) | ai skipped, current -> "Kaffebröd" | final -> "Kaffebröd" (medium)
recipe-api | [Nest] 1 - 05/02/2026, 9:18:21 PM  LOG [ReceiptImportService] [ReceiptDecision] start raw="DONUT GOLDENFRY" signal="DONUT GOLDENFRY Donut Goldenfry" parsedQuantity=1 parsedUnit=st packageCount=1 packQuantity=null packUnit=null | match matchedProductId=null suggestedProductId=40 | incoming category="Kaffebröd" confidence=medium fallback=false | rule hit -> "Kondis & fika > Kaffebröd" (high) | ai skipped, current -> "Kaffebröd" | final -> "Kaffebröd" (medium)
recipe-api | [Nest] 1 - 05/02/2026, 9:18:21 PM  LOG [ReceiptImportService] [ReceiptDecision] start raw="WIENERBRÖD80G VANILJ" signal="WIENERBRÖD80G VANILJ Wienerbröd80g Vanilj" parsedQuantity=2 parsedUnit=st packageCount=1 packQuantity=80 packUnit=g | match matchedProductId=null suggestedProductId=41 | incoming category="Kaffebröd" confidence=medium fallback=false | rule miss | ai skipped, current -> "Kaffebröd" | final -> "Kaffebröd" (medium)
recipe-api | [Nest] 1 - 05/02/2026, 9:18:21 PM  LOG [ReceiptImportService] [ReceiptDecision] start raw="BACON 3X120G" signal="BACON 3X120G Bacon 3x120g" parsedQuantity=1 parsedUnit=förp packageCount=3 packQuantity=120 packUnit=g | match matchedProductId=null suggestedProductId=42 | incoming category="Fläsk" confidence=medium fallback=false | rule hit -> "Kött, chark & fågel > Kött" (high) | rule applied -> "Kött, chark & fågel > Kött" | ai skipped, current -> "Kött, chark & fågel > Kött" | final -> "Kött, chark & fågel > Kött" (high)
recipe-api | [Nest] 1 - 05/02/2026, 9:18:21 PM  LOG [ReceiptImportService] [ReceiptDecision] start raw="VISPGRÄDDE 5DL" signal="VISPGRÄDDE 5DL" parsedQuantity=1 parsedUnit=dl packageCount=1 packQuantity=5 packUnit=dl | match matchedProductId=null suggestedProductId=null | rule hit -> "Mejeri, ost & ägg > Matlagning" (high) | rule applied -> "Mejeri, ost & ägg > Matlagning" | ai skipped, current -> "Mejeri, ost & ägg > Matlagning" | final -> "Mejeri, ost & ägg > Matlagning" (high)
recipe-api | [Nest] 1 - 05/02/2026, 9:18:21 PM  LOG [ReceiptImportService] [ReceiptDecision] start raw="STANDMJÖLK ESL 1,5L" signal="STANDMJÖLK ESL 1,5L" parsedQuantity=3 parsedUnit=st packageCount=1 packQuantity=1.5 packUnit=l | match matchedProductId=null suggestedProductId=null | rule hit -> "Mejeri, ost & ägg > Mjölk" (high) | rule applied -> "Mejeri, ost & ägg > Mjölk" | ai skipped, current -> "Mejeri, ost & ägg > Mjölk" | final -> "Mejeri, ost & ägg > Mjölk" (high)
recipe-api | [Nest] 1 - 05/02/2026, 9:18:21 PM  LOG [ReceiptImportService] [ReceiptDecision] start raw="FILMJÖLK 3%" signal="FILMJÖLK 3%" parsedQuantity=1 parsedUnit=l packageCount=1 packQuantity=null packUnit=null | match matchedProductId=null suggestedProductId=null | rule miss | ai invoked | ai result -> "Mejeri, ost & ägg > Filmjölk & Yoghurt" (high) | final -> "Mejeri, ost & ägg > Filmjölk & Yoghurt" (high)
recipe-api | [Nest] 1 - 05/02/2026, 9:18:21 PM  LOG [ReceiptImportService] [ReceiptDecision] start raw="ÄGG 24P INNE M" signal="ÄGG 24P INNE M" parsedQuantity=1 parsedUnit=förp packageCount=1 packQuantity=null packUnit=null | match matchedProductId=null suggestedProductId=null | rule hit -> "Mejeri, ost & ägg" (high) | rule applied -> "Mejeri, ost & ägg" | ai skipped, current -> "Mejeri, ost & ägg" | final -> "Mejeri, ost & ägg" (high)
recipe-api | [Nest] 1 - 05/02/2026, 9:18:22 PM  LOG [AiService] AI-guardrail: low konfidenspoäng → remappar "Dryck > Te & choklad" → L1 "Dryck"
recipe-api | [Nest] 1 - 05/02/2026, 9:18:22 PM  LOG [ReceiptImportService] [ReceiptDecision] start raw="DRYCK MULTIVITAMIN" signal="DRYCK MULTIVITAMIN" parsedQuantity=1 parsedUnit=st packageCount=1 packQuantity=null packUnit=null | match matchedProductId=null suggestedProductId=null | rule miss | ai invoked | ai result -> "Dryck" (low) | final -> "Dryck" (low)
recipe-api | [Nest] 1 - 05/02/2026, 9:18:22 PM  LOG [ReceiptImportService] [ReceiptDecision] start raw="SUPER CRUNCH 750G" signal="SUPER CRUNCH 750G" parsedQuantity=2 parsedUnit=st packageCount=1 packQuantity=750 packUnit=g | match matchedProductId=null suggestedProductId=null | rule miss | ai invoked | ai result -> "Chips, snacks & dip > Chips" (high) | final -> "Chips, snacks & dip > Chips" (high)
recipe-api | [Nest] 1 - 05/02/2026, 9:18:23 PM  LOG [ReceiptImportService] [ReceiptDecision] start raw="MEZZE MANICHE 500G" signal="MEZZE MANICHE 500G" parsedQuantity=2 parsedUnit=st packageCount=1 packQuantity=500 packUnit=g | match matchedProductId=null suggestedProductId=null | rule miss | ai invoked | ai result -> "Fisk & Skaldjur" (high) | final -> "Fisk & Skaldjur" (high)
recipe-api | [Nest] 1 - 05/02/2026, 9:18:24 PM  LOG [ReceiptImportService] [ReceiptDecision] start raw="CORNFLAKES 500G" signal="CORNFLAKES 500G" parsedQuantity=1 parsedUnit=förp packageCount=1 packQuantity=500 packUnit=g | match matchedProductId=null suggestedProductId=null | rule miss | ai invoked | ai result -> "Skafferi > Flingor, gryner & musli" (high) | final -> "Skafferi > Flingor, gryner & musli" (high)
recipe-api | [Nest] 1 - 05/02/2026, 9:18:24 PM  LOG [ReceiptImportService] [ReceiptDecision] start raw="VANILLA CHAI 20P" signal="VANILLA CHAI 20P" parsedQuantity=1 parsedUnit=st packageCount=1 packQuantity=null packUnit=null | match matchedProductId=null suggestedProductId=null | rule hit -> "Te & choklad > Te" (high) | rule applied -> "Te & choklad > Te" | ai skipped, current -> "Te & choklad > Te" | final -> "Te & choklad > Te" (high)
recipe-api | [Nest] 1 - 05/02/2026, 9:18:24 PM  LOG [ReceiptImportService] [ReceiptDecision] start raw="NAPPAR COLA 80G" signal="NAPPAR COLA 80G" parsedQuantity=1 parsedUnit=st packageCount=1 packQuantity=80 packUnit=g | match matchedProductId=null suggestedProductId=null | rule miss | ai invoked | ai result -> "Dryck > Läsk och Energidryck" (high) | final -> "Dryck > Läsk och Energidryck" (high)
recipe-api | [Nest] 1 - 05/02/2026, 9:18:25 PM  LOG [ReceiptImportService] [ReceiptDecision] start raw="NAPPAR SOUR 80G" signal="NAPPAR SOUR 80G" parsedQuantity=1 parsedUnit=st packageCount=1 packQuantity=80 packUnit=g | match matchedProductId=null suggestedProductId=null | rule miss | ai invoked | ai result -> "Chips, snacks & dip > Chips" (high) | final -> "Chips, snacks & dip > Chips" (high)
recipe-api | [Nest] 1 - 05/02/2026, 9:18:26 PM  LOG [ReceiptImportService] [ReceiptDecision] start raw="SNICKERS" signal="SNICKERS" parsedQuantity=2 parsedUnit=st packageCount=1 packQuantity=null packUnit=null | match matchedProductId=null suggestedProductId=null | rule miss | ai invoked | ai result -> "Choklad > Chokladkakor & rullar" (high) | final -> "Choklad > Chokladkakor & rullar" (high)
recipe-api | [Nest] 1 - 05/02/2026, 9:18:26 PM  LOG [ReceiptImportService] [ReceiptDecision] start raw="NÖTMIX KLASSISK" signal="NÖTMIX KLASSISK" parsedQuantity=2 parsedUnit=st packageCount=1 packQuantity=null packUnit=null | match matchedProductId=null suggestedProductId=null | rule miss | ai invoked | ai result -> "Skafferi > Flingor, gryner & musli" (high) | final -> "Skafferi > Flingor, gryner & musli" (high)
recipe-api | [Nest] 1 - 05/02/2026, 9:18:27 PM  LOG [ReceiptImportService] [ReceiptDecision] start raw="PEPSI MAX 50CL" signal="PEPSI MAX 50CL" parsedQuantity=1 parsedUnit=cl packageCount=1 packQuantity=50 packUnit=cl | match matchedProductId=null suggestedProductId=null | rule miss | ai invoked | ai result -> "Dryck > Läsk och Energidryck" (high) | final -> "Dryck > Läsk och Energidryck" (high)
recipe-api | [Nest] 1 - 05/02/2026, 9:18:27 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:18:27 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:18:27 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:18:27 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:18:50 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:18:50 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:19:13 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:19:13 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:19:24 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:19:24 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:19:30 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:19:30 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:19:36 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:19:36 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:19:52 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:19:52 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:20:00 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:20:00 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:20:32 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:20:32 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:20:43 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:20:43 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:20:47 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:20:47 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:20:55 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:20:55 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:21:21 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:21:21 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:21:30 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:21:30 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:21:44 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:21:44 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:22:03 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:22:03 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:22:08 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:22:08 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:22:13 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:22:13 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:22:13 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:22:13 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:22:13 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:22:13 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:22:13 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:22:13 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:22:13 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:22:13 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:22:13 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:22:13 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:22:13 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:22:13 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:22:13 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:22:13 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:22:13 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:22:13 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:22:13 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:22:13 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:22:13 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:22:13 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:22:13 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:22:13 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:22:13 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:22:13 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:22:13 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:22:13 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:22:13 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:22:13 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:22:13 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:22:13 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:22:13 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:22:13 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:22:13 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:22:13 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:22:14 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:22:14 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:22:14 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:22:14 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:22:14 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:22:14 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:22:14 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:22:14 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:22:14 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:22:14 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:22:14 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:22:14 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:22:14 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:22:14 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:22:14 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:22:14 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:22:14 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:22:14 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:22:14 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:22:14 PM  LOG [JwtAuthGuard] Authenticated user ID: 2
recipe-api | [Nest] 1 - 05/02/2026, 9:22:19 PM  LOG [JwtStrategy] Validating token for user ID: 2, Username: Nadmin
recipe-api | [Nest] 1 - 05/02/2026, 9:22:19 PM  LOG [JwtAuthGuard] Authenticated user ID: 2