fix(receipt-import): add hard bacon override to pork category

This commit is contained in:
Nils-Johan Gynther
2026-05-02 22:51:17 +02:00
parent f45ec08c58
commit 60ab2465aa
@@ -295,9 +295,13 @@ export class ReceiptImportService {
? this.applyContradictionGuard(signalText || item.rawName, nextSuggestion, categories)
: null;
const finalSuggestion = guardedSuggestion
? this.applyHardCategoryOverrides(signalText || item.rawName, guardedSuggestion, categories)
: null;
enriched.push(
guardedSuggestion
? { ...item, categorySuggestion: guardedSuggestion }
finalSuggestion
? { ...item, categorySuggestion: finalSuggestion }
: item,
);
} catch {
@@ -309,6 +313,43 @@ export class ReceiptImportService {
return enriched;
}
private applyHardCategoryOverrides(
signalText: string,
suggestion: CategorySuggestion,
categories: Awaited<ReturnType<CategoriesService['findFlattened']>>,
): CategorySuggestion {
const normalized = normalizeForRules(signalText);
const hasBaconLikeSignal =
/\bbacon\b/.test(normalized) ||
/\bbacn\b/.test(normalized) ||
/\bbaco\b/.test(normalized) ||
/\bbac[a-z]{1,3}\b/.test(normalized) ||
/\bsidflask\b/.test(normalized) ||
/\bpancetta\b/.test(normalized);
if (!hasBaconLikeSignal) return suggestion;
const l3Pork = categories.find(
(c) =>
c.name.toLowerCase() === 'fläsk' &&
c.path.toLowerCase().startsWith('kött, chark & fågel > kött > '),
);
if (!l3Pork) return suggestion;
if (suggestion.categoryId === l3Pork.id) return suggestion;
this.logger.log(
`Hard-override: "${signalText}" remappas från "${suggestion.path}" till "${l3Pork.path}"`,
);
return {
categoryId: l3Pork.id,
categoryName: l3Pork.name,
path: l3Pork.path,
confidence: 'high',
usedFallback: true,
};
}
private ruleBasedCategorySuggestion(
rawName: string,
categories: Awaited<ReturnType<CategoriesService['findFlattened']>>,