# Nästa steg > Förslag på vad vi kan ta tag i nästa gång vi öppnar projektet. > Se [README.md](README.md) för funktionsöversikt och [TEKNISK_BESKRIVNING.md](TEKNISK_BESKRIVNING.md) för teknisk detaljerinformation. --- ## Status — senast genomgånget: 2026-04-18 | Funktion | Status | |---|---| | Inventorie (CRUD, konsumtion, historik) | ✅ Klart | | Recept (skapa, visa, importera, matchning) | ✅ Klart | | Snabbimport (URL/PDF/bild/ICA) | ✅ Klart | | Kvittoimport (Mistral AI, OCR, alias) | ✅ Klart | | Matplanering (veckovy, inköpslista) | ✅ Klart | | Matplan — portionsjustering per dag | ✅ Klart | | Matplan — inventariejämförelse (backend) | ✅ Klart | | Matplan — inventariejämförelse (frontend-vy) | ✅ Klart (✅/⚠️/❌ integrerat i inköpslistan) | | Baslager (lista, lägg till, ta bort) | ✅ Klart | | Admin: Produkter (edit, merge, duplicate, restore, reset) | ✅ Klart | | Admin: Bulk-kategorisering | ✅ Klart | | Receptredigering (frontend UX) | ✅ Klart | | Receptbilder (upload URL) | ✅ Klart | | Autentisering (JWT, Auth.js v5, User-modell) | ✅ Klart | | Användarprofil (firstName, lastName, email) | ✅ Klart | | Produktkategorier — hierarkisk struktur (3 nivåer) | ✅ Klart | | Kategori-seed (supplement, idempotent) | ✅ Klart | | Kategoritilldelning i admin-UI | ✅ Klart | | Taggning av produkter | ✅ Klart | | Näringsvärden på produkter | ✅ Klart (schema + API) | | Seed produktdata med kategoritilldelning | ⚠️ Script klart, ej aktiverat i init | | Användarspecifika produkter (UserProduct) | ⚠️ Schema klart, UI basic | | Användarroller (user / admin) | ❌ Saknas | | Användarhantering i admin-UI | ❌ Saknas | | Teknisk skuld — oanvända InventoryItem-fält | ✅ Klart (migration 20260418) | | Teknisk skuld — redirect-routes städade | ✅ Klart | | Avancerad AI-integration (veckoplanering, kampanjdata) | ❌ Planerad | --- ## Prioriterade förbättringar ### 1. Seed-data (002-seed-products.sql) **Mål:** Möjliggöra demo och ny server utan manuell datainmatning. `db/init/002-seed-products.sql` är inaktiverad (`.disabled`) tills produkterna har rätt `categoryId`. Skript för kategorimappning finns i `db/seeds/`: - Kör `db/seeds/categories_supplement.sql` → lägger till saknade kategorier - Kör `db/seeds/seed_product_categories.sql` → kopplar ~190 produkter till rätt kategori - Verifiera att mappningarna ser rätt ut i admin-UI (filtrera på okategoriserade) - Generera en ny `002-seed-products.sql` med korrekt `categoryId` per rad (via `SELECT` mot live-db) - Ta bort `.disabled`-suffixet och testa fresh install ### 2. Användarroller **Mål:** Säkerställa att endast behöriga användare har admin-rättigheter. Idag har alla inloggade användare samma behörighetsnivå — ett säkerhetsproblem inför lansering. - **Databas:** Lägg till `role` (enum `user` | `admin`) på `User`-modellen i Prisma + migration - **Backend:** Rollbaserad guard (`@Roles('admin')`) — skyddar admin-endpoints; vanliga användare nekas med 403 - **Auth:** Rollen inkluderas i JWT-tokenen och i Auth.js session-objektet - **Frontend — admin-UI (`/admin/users/`):** Lista användare, skapa nya konton (namn, e-post, lösenord, roll), ändra roll, avaktivera konto - **Frontend — skyddade routes:** `/admin/*` kräver admin-roll; omdirigerar annars till startsidan ### 3. Matplan-vy (frontend-polish) ✅ **Klart.** Inköpslistan och inventariejämförelsen är sammanslagna till en enhetlig vy med tre statusnivåer: - ❌ Saknas helt — visar hur mycket som behövs köpas - ⚠️ Delvis hemma — visar hur mycket mer som behövs + vad som finns - ✅ Finns hemma — markeras nedtonat, ingen köpindikering Listan sorteras automatiskt: saknade ingredienser överst, hemma-ingredienser underst. En sammanfattningsrad visar totalt antal per statuskategori. ### 4. Teknisk skuld (underhåll) **Mål:** Minska komplexitet och risk för buggar. #### A. CanonicalNameForm och NameForm ✅ Filerna var redan borttagna — inga aktiva imports hittades. Inget att göra. #### B. Oanvända fält på InventoryItem ✅ Följande 6 fält togs bort via Prisma-migration (`20260418000000_remove_unused_inventory_fields`): `priority`, `shelfNote`, `isOnSale`, `priceLevel`, `proteinType`, `isLeftover` - Schema, DTOs (create + update), service och frontend-typen är städade. - `opened` och `suitableFor` behölls — de används i UI. #### C. Validering av DTO:er i admin-actions ✅ Redan implementerat — `trim()` + max 100 tecken på alla fält i `actions.ts`. Inget att göra. #### D. Routing-städning för kvitto och import ✅ `frontend/app/kvitto/page.tsx` och `frontend/app/recipes/import/page.tsx` är borttagna. `/import` täcker båda use-cases via flikar. #### E. Seed-data i versionshantering ✅ `data/matvaror_sverige.csv` och `data/seed_products.sql` behålls i git för reproducerbarhet. Inga ändringar i `.gitignore`. ### 5. Avancerad AI-integration **Mål:** Smarta receptförslag och veckoplanering baserat på inventarie och kampanjdata. Nuvarande AI-funktionalitet (Mistral för kvittotolkning) är ett bra fundament. Nästa steg: - Receptförslag utifrån vad som finns hemma ("Vad ska jag laga idag?") - Veckoplanering med hänsyn till kampanjpriser (kräver extern datakälla) - Kräver: tydlig API-design, kostnadskontroll och eventuellt modellval per use-case --- ## Enhetstester Jest + ts-jest är uppsatt. Tester finns för: - `normalize-name.ts` — 10 tester - `base.parser.ts` (`parseIngredientLine`) — 12 tester - `recipes.service.ts` (`normalizeUnit`, `convertUnit`) — 17 tester Kör med `npm test` i `backend/`.