diff --git a/backend/src/receipt-import/receipt-import.service.ts b/backend/src/receipt-import/receipt-import.service.ts index 3354c55d..d3cfba4f 100644 --- a/backend/src/receipt-import/receipt-import.service.ts +++ b/backend/src/receipt-import/receipt-import.service.ts @@ -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; + const items = (await response.json()) as ParsedReceiptItem[]; + return items.filter((item) => !isIgnoredReceiptName(item.rawName)); } private async matchProducts( diff --git a/db/seeds/seed_all.sql b/db/seeds/seed_all.sql index 7ca2efa1..70e61d6f 100644 --- a/db/seeds/seed_all.sql +++ b/db/seeds/seed_all.sql @@ -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`)