feat(inventory): naturlig-språklig fritextsökning med FoodTwin-fakta, trust-hedge och i18n ×12

- Nytt endpoint GET /v1/inventory/natural-search.
- Robust matchning med unaccent + pg_trgm similarity mot display_name,
  brand och kanoniska ingrediensnamn (sv/en).
- Svar byggs deterministiskt från faktisk data: lagringsplats + sublocation
  om registrerad, trust-state-hedge från befintlig trust-motor.
- Server-sidan i18n-katalog för 12 språk.
- Tester för svensk träff och noll-träff på flera språk.
- Design-dokument docs/30-sökrobusthet-matvaror.md.
This commit is contained in:
Sven (AAMOS AI)
2026-08-08 05:53:06 +07:00
parent ddd6b736ba
commit 9197d93a92
5 changed files with 561 additions and 0 deletions
+8
View File
@@ -44,6 +44,14 @@ export const inventoryQuerySchema = z.object({
});
export type InventoryQuery = z.infer<typeof inventoryQuerySchema>;
/** Naturligt-språklig fritextsökning i hushållslagret (spec §8). */
export const inventoryNaturalSearchQuerySchema = z.object({
q: z.string().min(1).max(80).trim(),
languageTag: z.string().min(2).max(35).default("sv-SE"),
limit: z.coerce.number().int().min(1).max(20).default(5),
});
export type InventoryNaturalSearchQuery = z.infer<typeof inventoryNaturalSearchQuerySchema>;
export const reconciliationStartInputSchema = z.object({
maxItems: z.coerce.number().int().min(1).max(50).optional(),
});