feat: enhance ingredient matching rules with keyword matching and add chocolate detection
Test Suite / test (24.15.0) (push) Has been cancelled
Test Suite / test (24.15.0) (push) Has been cancelled
This commit is contained in:
@@ -153,13 +153,20 @@ Regler:
|
|||||||
Tillgängliga kategorier (format: [id] Sökväg):
|
Tillgängliga kategorier (format: [id] Sökväg):
|
||||||
${categoryList}
|
${categoryList}
|
||||||
|
|
||||||
|
KWICK-MATCHNING (gör detta först):
|
||||||
|
- Kött/fläsk: Sök efter ord som "fläsk", "flaskytterfile", "bacon", "kotlett", "karré" → Kött, chark & fågel > Fläsk
|
||||||
|
- Fågel: Sök efter "kyckling", "kalkon", "drumstick", "filé" → Kött, chark & fågel > Fågel
|
||||||
|
- Choklad/spreads: Sök efter "nutella", "choklad", "kakao", "spreads" → Sötsaker & snacks > Choklad & spreads
|
||||||
|
- Bröd: Sök efter "bröd", "toast", "brödrost", "limpa" → Bröd & bakvaror > Bröd
|
||||||
|
|
||||||
Regler:
|
Regler:
|
||||||
1. Välj den mest specifika underkategorin som passar produkten.
|
1. Använd KEYWORD-MATCHNING först innan annat.
|
||||||
2. Om ingen specifik kategori passar, välj en underkategori under "Övrigt" om möjligt.
|
2. Om ingen keyword-match, välj den mest specifika underkategorin som passar.
|
||||||
3. Om ingen underkategori under "Övrigt" passar, välj "Övrigt" (den kategori vars sökväg är exakt "Övrigt").
|
3. Om ingen specifik kategori passar, välj en underkategori under "Övrigt" om möjligt.
|
||||||
4. Du MÅSTE alltid returnera ett svar — aldrig null eller tomt.
|
4. Om ingen underkategori under "Övrigt" passar, välj "Övrigt" (den kategori vars sökväg är exakt "Övrigt").
|
||||||
5. Svara ENDAST med giltig JSON i detta format: { "categoryId": <nummer>, "confidence": "high" | "medium" | "low" }
|
5. Du MÅSTE alltid returnera ett svar — aldrig null eller tomt.
|
||||||
- "high": uppenbart matchande kategori
|
6. Svara ENDAST med giltig JSON i detta format: { "categoryId": <nummer>, "confidence": "high" | "medium" | "low" }
|
||||||
|
- "high": keyword-match ELLER uppenbart matchande kategori
|
||||||
- "medium": trolig matchning
|
- "medium": trolig matchning
|
||||||
- "low": osäker, används fallback (Övrigt eller underkategori till Övrigt)`;
|
- "low": osäker, används fallback (Övrigt eller underkategori till Övrigt)`;
|
||||||
|
|
||||||
|
|||||||
@@ -68,12 +68,11 @@ function hasPorkLikeSignal(normalized: string): boolean {
|
|||||||
normalized.includes('bacn') ||
|
normalized.includes('bacn') ||
|
||||||
normalized.includes('baco') ||
|
normalized.includes('baco') ||
|
||||||
/\bbac[a-z0-9]{1,5}\b/.test(normalized) ||
|
/\bbac[a-z0-9]{1,5}\b/.test(normalized) ||
|
||||||
/\bsidflask\b/.test(normalized) ||
|
normalized.includes('sidflask') ||
|
||||||
/\bpancetta\b/.test(normalized) ||
|
normalized.includes('pancetta') ||
|
||||||
/\bflask\b/.test(normalized) ||
|
normalized.includes('flask') ||
|
||||||
/\bflaskfile\b/.test(normalized) ||
|
normalized.includes('karre') ||
|
||||||
/\bkarr[eé]\b/.test(normalized) ||
|
normalized.includes('kotlett')
|
||||||
/\bkotlett\b/.test(normalized)
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -699,6 +698,24 @@ export class ReceiptImportService {
|
|||||||
if (hit) return hit;
|
if (hit) return hit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ── Regel: Choklad & spreads (Nutella, sjokolade, m.m.) ─────────────
|
||||||
|
const hasChocolateSignal =
|
||||||
|
normalized.includes('nutella') ||
|
||||||
|
normalized.includes('chocolate') ||
|
||||||
|
normalized.includes('choklad') ||
|
||||||
|
normalized.includes('sjokolade') ||
|
||||||
|
normalized.includes('kakao') ||
|
||||||
|
normalized.includes('spreads');
|
||||||
|
|
||||||
|
if (hasChocolateSignal) {
|
||||||
|
const chocolate = findCategory({
|
||||||
|
name: 'choklad & spreads',
|
||||||
|
includes: 'sötsaker',
|
||||||
|
});
|
||||||
|
const hit = toSuggestion(chocolate, 'high');
|
||||||
|
if (hit) return hit;
|
||||||
|
}
|
||||||
|
|
||||||
// ── Regel: Korvfamiljen ─────────────────────────────────────────────
|
// ── Regel: Korvfamiljen ─────────────────────────────────────────────
|
||||||
const hasSausageSignal =
|
const hasSausageSignal =
|
||||||
/\bkorv\b/.test(normalized) ||
|
/\bkorv\b/.test(normalized) ||
|
||||||
|
|||||||
Reference in New Issue
Block a user