feat(receipt-import): add function to ignore specific receipt names and filter out ignored items

Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
Nils-Johan Gynther
2026-05-03 18:18:07 +02:00
parent 6c3e391582
commit a555e74201
2 changed files with 38 additions and 1 deletions
@@ -32,6 +32,22 @@ function tokenize(value: string): string[] {
.filter((w) => w.length >= 3);
}
function isIgnoredReceiptName(value: string | null | undefined): boolean {
const normalized = (value ?? '').trim().toLowerCase();
if (!normalized) return false;
if (/^rabatt\b/.test(normalized)) return true;
if (/^summa\b/.test(normalized)) return true;
if (/^moms\b/.test(normalized)) return true;
if (/^pant\b/.test(normalized)) return true;
if (/^att\s+betala\b/.test(normalized)) return true;
if (/^totalt\b/.test(normalized)) return true;
if (/^kort\b/.test(normalized)) return true;
if (/^kontant\b/.test(normalized)) return true;
return false;
}
function normalizeToken(s: string): string {
return s.replace(/å/g, 'a').replace(/ä/g, 'a').replace(/ö/g, 'o').replace(/é/g, 'e').replace(/è/g, 'e');
}
@@ -177,7 +193,8 @@ export class ReceiptImportService {
throw new BadRequestException(message);
}
return response.json() as Promise<ParsedReceiptItem[]>;
const items = (await response.json()) as ParsedReceiptItem[];
return items.filter((item) => !isIgnoredReceiptName(item.rawName));
}
private async matchProducts(
+20
View File
@@ -72,6 +72,7 @@ INSERT INTO `Category` (`name`, `parentId`) SELECT 'Svamp', id FRO
-- ── NIVÅ 2: under Glass, godis & snacks ─────────────────────
INSERT INTO `Category` (`name`, `parentId`) SELECT 'Chips, snacks & dip', id FROM `Category` WHERE name = 'Glass, godis & snacks' AND parentId IS NULL;
INSERT INTO `Category` (`name`, `parentId`) SELECT 'Choklad', id FROM `Category` WHERE name = 'Glass, godis & snacks' AND parentId IS NULL;
INSERT INTO `Category` (`name`, `parentId`) SELECT 'Godis', id FROM `Category` WHERE name = 'Glass, godis & snacks' AND parentId IS NULL;
-- ── NIVÅ 2: under Kött, chark & fågel ───────────────────────
INSERT INTO `Category` (`name`, `parentId`) SELECT 'Pålägg', id FROM `Category` WHERE name = 'Kött, chark & fågel' AND parentId IS NULL;
@@ -90,6 +91,7 @@ INSERT INTO `Category` (`name`, `parentId`) SELECT 'Smör, margarin & jäst', id
INSERT INTO `Category` (`name`, `parentId`) SELECT 'Havre-, Soja-, Risdryck mm', id FROM `Category` WHERE name = 'Mejeri, ost & ägg' AND parentId IS NULL;
INSERT INTO `Category` (`name`, `parentId`) SELECT 'Kvarg & Cottage cheese', id FROM `Category` WHERE name = 'Mejeri, ost & ägg' AND parentId IS NULL;
INSERT INTO `Category` (`name`, `parentId`) SELECT 'Mellanmål & desserter', id FROM `Category` WHERE name = 'Mejeri, ost & ägg' AND parentId IS NULL;
INSERT INTO `Category` (`name`, `parentId`) SELECT 'Ägg', id FROM `Category` WHERE name = 'Mejeri, ost & ägg' AND parentId IS NULL;
-- ── NIVÅ 2: under Skafferi ──────────────────────────────────
INSERT INTO `Category` (`name`, `parentId`) SELECT 'Kryddor & smaksättare', id FROM `Category` WHERE name = 'Skafferi' AND parentId IS NULL;
@@ -211,6 +213,10 @@ INSERT INTO `Category` (`name`, `parentId`)
SELECT 'Rotsaker', c2.id FROM `Category` c1
JOIN `Category` c2 ON c2.parentId = c1.id AND c2.name = 'Potatis & rotsaker'
WHERE c1.name = 'Frukt & Grönt' AND c1.parentId IS NULL;
INSERT INTO `Category` (`name`, `parentId`)
SELECT 'Potatis', c2.id FROM `Category` c1
JOIN `Category` c2 ON c2.parentId = c1.id AND c2.name = 'Potatis & rotsaker'
WHERE c1.name = 'Frukt & Grönt' AND c1.parentId IS NULL;
-- ── NIVÅ 3: under Frukt & Grönt > Kryddor & smaksättare ─────
INSERT INTO `Category` (`name`, `parentId`)
@@ -247,6 +253,10 @@ INSERT INTO `Category` (`name`, `parentId`)
SELECT 'Färdigskuret', c2.id FROM `Category` c1
JOIN `Category` c2 ON c2.parentId = c1.id AND c2.name = 'Grönsaker'
WHERE c1.name = 'Frukt & Grönt' AND c1.parentId IS NULL;
INSERT INTO `Category` (`name`, `parentId`)
SELECT 'Gurka', c2.id FROM `Category` c1
JOIN `Category` c2 ON c2.parentId = c1.id AND c2.name = 'Grönsaker'
WHERE c1.name = 'Frukt & Grönt' AND c1.parentId IS NULL;
-- ── NIVÅ 3: under Frukt & Grönt > Frukt ─────────────────────
INSERT INTO `Category` (`name`, `parentId`)
@@ -263,6 +273,16 @@ INSERT INTO `Category` (`name`, `parentId`)
SELECT 'Chips', c2.id FROM `Category` c1
JOIN `Category` c2 ON c2.parentId = c1.id AND c2.name = 'Chips, snacks & dip'
WHERE c1.name = 'Glass, godis & snacks' AND c1.parentId IS NULL;
INSERT INTO `Category` (`name`, `parentId`)
SELECT 'Nötter & tilltugg', c2.id FROM `Category` c1
JOIN `Category` c2 ON c2.parentId = c1.id AND c2.name = 'Chips, snacks & dip'
WHERE c1.name = 'Glass, godis & snacks' AND c1.parentId IS NULL;
-- ── NIVÅ 3: under Glass > Godis ─────────────────────────────
INSERT INTO `Category` (`name`, `parentId`)
SELECT 'Godispåsar', c2.id FROM `Category` c1
JOIN `Category` c2 ON c2.parentId = c1.id AND c2.name = 'Godis'
WHERE c1.name = 'Glass, godis & snacks' AND c1.parentId IS NULL;
-- ── NIVÅ 3: under Glass > Choklad ───────────────────────────
INSERT INTO `Category` (`name`, `parentId`)