fix(veckoplan+streckkod): byt ratt, planera om, variation, man-son + fota fram/bak
Veckoplan/kalender: - Byt ratt: PATCH satter nu titeln (och portioner/status) efter det nya receptet, inte bara recipeId - annars visade kalendern kvar gamla ratten. - Planera om veckan: ersatter nu veckans plan (raderar tidigare + entries via kaskad) sa man aldrig far dubbletter och alltid ser den nya planen. Nytt plan-id ger ocksa ny variation. - Variation: liten deterministisk jitter per recept, seedad pa plan-id + veckostart, sa olika veckor OCH omgenereringar blir olika. Tackning/utgang dominerar fortfarande. Skalas av varietyLevel. - Veckoplaneraren visar alltid mandag-sondag (mondayOf), oavsett dagens dag. Streckkod (fota okand produkt): - Fotar nu fram- OCH baksida (multi-foto) sa AI:n far bade namn (fram) och naring/innehall (bak). Prompt uppdaterad for flera bilder. - Worker uppdaterar en befintlig delad produkt aven utan nytt namn (behaller namnet, fyller pa naring/innehall/allergener) - och sparar ny produkt aven fran baksidesfoto (fallback-namn) sa data inte tappas. - Produktpanelen visar 'Fota baksidan (naring & innehall)' nar info saknas, sa man kan komplettera en halvfardig produkt. Fel visas som dialog utan att tappa vyn. - 5 nya i18n-nycklar x 12 sprak. Verifierat: typecheck (ai-contracts/worker/api/mobil), worker 23/23, ai-contracts 24/24, api 104/104, samt repro mot testdatabas (byt ratt satter titel; planera om ger 1 plan; 3 veckor + omgenerering varierar; delvis produkt kompletteras och behaller namnet).
This commit is contained in:
@@ -968,15 +968,15 @@ Språk: ${lang}.`;
|
||||
|
||||
private buildNutritionPrompt(locale: LocaleContext): string {
|
||||
const lang = locale.languageTag.startsWith("en") ? "English" : "Swedish";
|
||||
return `Du är en OCR-assistent för svenska livsmedelsförpackningar. Bilden visar en näringsdeklaration/ingredienslista.
|
||||
return `Du är en OCR-assistent för svenska livsmedelsförpackningar. Du kan få en eller flera bilder av SAMMA produkt – typiskt framsidan (produktnamn/varumärke) och baksidan (näringsdeklaration + ingredienslista). Läs av all synlig information över ALLA bilder och slå ihop den till ett svar.
|
||||
|
||||
Läs av exakt det som står på etiketten. Gissa aldrig värden som inte syns. Returnera:
|
||||
- basis: "per_100_g", "per_100_ml" eller "per_portion" – vad gäller tabellen?
|
||||
Läs av exakt det som står på förpackningen. Gissa aldrig värden som inte syns. Returnera:
|
||||
- basis: "per_100_g", "per_100_ml" eller "per_portion" – vad gäller näringstabellen?
|
||||
- values: { kcal, proteinG, carbsG, fatG, saturatedFatG, fiberG, sugarG, saltG } – null om ej synligt.
|
||||
- ingredientsText: rå text med ingredienser, eller null.
|
||||
- ingredientsText: rå text med ingredienser (från baksidan), eller null.
|
||||
- allergensDeclared: lista med allergener som explicit nämns (t.ex. ["gluten", "mjölk", "nötter"]).
|
||||
- gtin: streckkod/EAN om synlig, annars null.
|
||||
- productName: produktnamn om synligt, annars null.
|
||||
- productName: produktnamn (oftast på framsidan) om synligt, annars null.
|
||||
- brand: varumärke om synligt, annars null.
|
||||
- confidence: 0.0–1.0.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user