feat(flyer-import): add cheese variant splitting and normalization rules
- Add logic to split Swedish cheese variants (Präst, Herrgård, Grevé) into separate products - Implement brand normalization for "Arla Ko" and category assignment to "Hårdost" - Update flyer parser with detailed rules for bundle/group announcements - Add unit tests for variant splitting and brand/category normalization - Replace single-item return with flatMap for expanded product lists
This commit is contained in:
@@ -182,12 +182,23 @@ Returnera objekt med exakt dessa fält:
|
||||
- unit: string | null (enhet for jamforpris, t.ex. kg/l/st)
|
||||
- offer: string[]
|
||||
|
||||
Arbetssatt (viktigt):
|
||||
Steg A) Identifiera om texten ar en gruppannons med flera varianter + gemensamma attribut.
|
||||
Steg B) Returnera en post per faktisk produktvariant med arvd metadata.
|
||||
|
||||
Regler:
|
||||
1) Vanlig produkt (ej bundle): isBundle=false, bundleWeight=null, bundleItems=[].
|
||||
2) Kombipaket/bundle: isBundle=true, name ska vara paketets huvudnamn, bundleWeight totalvikt.
|
||||
3) For bundle ska bundleItems innehalla de ingaende produkterna, t.ex. ["Chumlax 3x100g", "Alaska pollock 3x100g"].
|
||||
4) price ar priset for hela forpackningen. comparisonPrice ar jamforpris som tal ("83:17" -> 83.17).
|
||||
5) offer innehaller kampanjtext som "Max 10 kop/hushall".
|
||||
6) Om en rubrik/lista innehaller flera kommaseparerade namn och efterfoljande rad/rader innehaller gemensam brand, vikt, pris eller kampanjvillkor: expandera till separata objekt (en per namn) och arv all gemensam metadata.
|
||||
7) Tillämpa samma split-regel generellt for liknande tillbud (inte bara ost), nar listan tydligt representerar produktvarianter/smaker/sorter.
|
||||
8) Splitta INTE om listan snarare ar ingredienser, avdelningar, eller otydlig marknadsforing utan tydlig produktvariant.
|
||||
9) Specialregel ost: namn som PRAST/HERRGARD/GREVE ska normaliseras till Prastost/Herrgardsost/Greveost.
|
||||
10) Om texten innehaller "ARLA KO" ska brand vara exakt "Arla Ko".
|
||||
11) For ovan ostsorter ska category vara "Hardost".
|
||||
12) Returnera aldrig extra nycklar, text, markdown eller forklaringar utanfor JSON-arrayen.
|
||||
|
||||
Exempel bundle utdata:
|
||||
[
|
||||
@@ -223,6 +234,42 @@ Exempel enkel produkt utdata:
|
||||
}
|
||||
]
|
||||
|
||||
Exempel gruppannons med varianter (ska splittas):
|
||||
Input-idé: "PRAST, HERRGARD, GREVE" + "ARLA KO" + gemensam vikt/pris.
|
||||
Output-idé:
|
||||
[
|
||||
{
|
||||
"name": "Prastost",
|
||||
"brand": "Arla Ko",
|
||||
"category": "Hardost",
|
||||
"isBundle": false,
|
||||
"weight": "667g",
|
||||
"bundleWeight": null,
|
||||
"bundleItems": [],
|
||||
"price": null,
|
||||
"comparisonPrice": 79.90,
|
||||
"unit": "kg",
|
||||
"offer": ["Max 3 forp/hushall"]
|
||||
},
|
||||
{
|
||||
"name": "Herrgardsost",
|
||||
"brand": "Arla Ko",
|
||||
"category": "Hardost",
|
||||
"isBundle": false,
|
||||
"weight": "667g",
|
||||
"bundleWeight": null,
|
||||
"bundleItems": [],
|
||||
"price": null,
|
||||
"comparisonPrice": 79.90,
|
||||
"unit": "kg",
|
||||
"offer": ["Max 3 forp/hushall"]
|
||||
}
|
||||
]
|
||||
|
||||
Exempel negativt fall (ska INTE splittas):
|
||||
Input-idé: "Ingredienser: tomat, lok, vitlok".
|
||||
Output-idé: en produktpost (ingen variant-expansion).
|
||||
|
||||
Text att tolka:
|
||||
${truncatedText}`;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user