Fas 3 steg 3b: minimala efterfrågor + hushållsantagandeprofiler per ingrediens
This commit is contained in:
@@ -213,6 +213,7 @@ export const cookingSessions = pgTable(
|
||||
actualPortionsEaten: integer("actual_portions_eaten"),
|
||||
/** Förberedda rester efter sessionen (steg 3d). */
|
||||
leftoverEstimatePortions: integer("leftover_estimate_portions"),
|
||||
leftoverNote: text("leftover_note"),
|
||||
/** Ursprungligt FEFO-förslag, sparas för ev. undo/omräkning. */
|
||||
plannedDeductions: jsonb("planned_deductions").$type<
|
||||
Array<{ itemId: string; quantity: number; unit: string; name: string }>
|
||||
@@ -256,6 +257,36 @@ export const recipeCooks = pgTable(
|
||||
],
|
||||
);
|
||||
|
||||
/** Antagandeprofiler per hushåll och ingrediens (Fas 3 §6.2).
|
||||
* Lär sig över tid hur stor andel av ett recept som brukar ätas resp. bli rester.
|
||||
*/
|
||||
export const cookingAssumptionProfiles = pgTable(
|
||||
"cooking_assumption_profiles",
|
||||
{
|
||||
householdId: uuid("household_id")
|
||||
.notNull()
|
||||
.references(() => households.id, { onDelete: "cascade" }),
|
||||
canonicalIngredientId: text("canonical_ingredient_id")
|
||||
.notNull()
|
||||
.references(() => canonicalIngredients.id, { onDelete: "cascade" }),
|
||||
/** Medelförbrukning i portioner per tillfälle (null tills vi har data). */
|
||||
averageEatenPortions: doublePrecision("average_eaten_portions"),
|
||||
/** Medelantal restportioner per tillfälle. */
|
||||
averageLeftoverPortions: doublePrecision("average_leftover_portions"),
|
||||
/** Hur många observationer profilen bygger på. */
|
||||
observationCount: integer("observation_count").notNull().default(0),
|
||||
/** Senaste rådata för felsökning/återspelning. */
|
||||
lastSessionAnswers: jsonb("last_session_answers").$type<
|
||||
Array<{ sessionId: string; eaten: number; leftovers: number; date: string }>
|
||||
>(),
|
||||
updatedAt: updatedAt(),
|
||||
},
|
||||
(t) => [
|
||||
primaryKey({ columns: [t.householdId, t.canonicalIngredientId] }),
|
||||
index("cooking_assumption_profiles_household_idx").on(t.householdId),
|
||||
],
|
||||
);
|
||||
|
||||
/** Dubblett-/variantklassning mellan recept (spec §36). */
|
||||
export const recipeSimilarities = pgTable(
|
||||
"recipe_similarities",
|
||||
|
||||
Reference in New Issue
Block a user