How product data is mapped to QFix repair booking categories
Enter a product ID to see exactly how it gets mapped to a QFix repair category.
How many products per brand have a working QFix mapping.
| Brand | Total | Mapped | Unmapped | Coverage |
|---|---|---|---|---|
| Loading... | ||||
These are the actual mapping tables used by the system.
These are the target clothing types in the QFix system. Each product is mapped to one of these.
| QFix Clothing Type | ID |
|---|
Products are classified into one of these material categories based on their composition.
| QFix Material | Description |
|---|---|
| Standard textile | Cotton, polyester, nylon, viscose, elastane, and most common fabrics |
| Linen/Wool | Linen, wool, merino, alpaca, and blends where these dominate |
| Cashmere | Cashmere and cashmere-dominant blends |
| Silk | Silk and silk-dominant blends |
| Leather/Suede | Leather, suede, and similar animal hides |
| Down | Down-filled garments |
| Fur | Fur garments |
| Other/Unsure | Fallback when material can't be determined |
How Swedish scraped categories map to QFix types. Showing mapped entries only.
| Swedish Category | QFix Type |
|---|
How individual material names map to QFix material categories.
| Material Name | QFix Material |
|---|
Product categories that can't be mapped to a QFix clothing type (accessories, non-clothing items, missing categories). These products won't get a QFix repair URL.
Clothing types in the QFix catalog that have zero service actions defined (repair, adjustment, care, other).
For each clothing type + material combination, AI has ranked the 5 most relevant service actions per service category.
Each product in the database has a clothing type (e.g. "Jackor & rockar") and a material composition (e.g. "99% Bomull, 1% Elastan"). The mapping system translates these into QFix repair categories so customers can book the right repair service.
Each product's scraped Swedish category (e.g. "Jackor & rockar > Varjackor") is translated into a QFix clothing type (e.g. "Jacket"). The mapper uses four inputs:
The category is first normalized: split on ">" into segments, lowercased, and
gender prefixes (dam, herr, barn, flicka, pojke…) are stripped. For example,
"Dam > Jackor & rockar > Varjackor" becomes ["jackor & rockar", "varjackor"].
The mapper then tries four strategies in priority order, returning the first match:
BRAND_CLOTHING_TYPE_OVERRIDES takes precedence.Click each brand to expand its rules. Categories use > for sub-paths.
Rules marked with ★ use product name/description keywords for disambiguation.
| Category | Sub-path / Condition | Maps to |
|---|---|---|
| Badkläder | > Bikini | Bikini |
| Badkläder | > (other) | Swimsuit |
| Ytterkläder | > Regnbyxor / Skalbyxor / Skidbyxor | Trousers |
| Ytterkläder | > Overaller | Overall |
| Ytterkläder | > Västar | Unlined Jacket / Vest |
| Ytterkläder | > (other) | Jacket |
| Jackor & rockar | > Västar | Unlined Jacket / Vest |
| Jackor & rockar | > (other) | Jacket |
| Loungewear | > Underdelar | Trousers |
| Loungewear | > Underställ | Midlayer |
| Loungewear | > (other sub-path) | Sweatshirt / Hoodie |
| Loungewear | (no sub-path) | Trousers / Shorts |
| Skor & tofflor | > Tofflor / Slippers | Other shoes |
| Skor & tofflor | > (other) | Sneakers |
| Tröjor & cardigans | > Hoodies / Sweatshirt | Sweatshirt / Hoodie |
| Tröjor & cardigans | > Stickade västar / Västar | Unlined Jacket / Vest |
| Tröjor & cardigans | > (other) | Knitted Jumper |
| Träningskläder | > Tights / Cykelbyxor / Leggings | Trousers |
| Träningskläder | > Shorts / Cykelshorts | Trousers / Shorts |
| Träningskläder | > Linne / Topp / Sport-BH | Top / T-shirt |
| Träningskläder | > (other) | Sweatshirt / Hoodie |
| Mammakläder | > Toppar / Tröjor / Blusar | Top / T-shirt |
| Mammakläder | > Klänningar | Skirt / Dress |
| Mammakläder | > (other) | Trousers |
| Category | Sub-path / Condition | Maps to |
|---|---|---|
| Badklader | > Bikini | Bikini |
| Badklader | > (other) | Swimsuit |
| Skor | > Boots | Boots |
| Skor | > Högklackade / Klack | High heels |
| Skor | > Sandaler | Sandals |
| Skor | > Sneakers | Sneakers |
| Skor | > Tofflor / Ballerina | Other shoes |
| Skor | (no sub-path) | Other shoes |
| Festklader | > Byxor | Trousers |
| Festklader | > (other) | Skirt / Dress |
| Mössor & vantar | > Caps / Keps | Cap |
| Mössor & vantar | > (other) | Hat |
| Coats & Jackets | > Västar | Unlined Jacket / Vest |
| Coats & Jackets | > Kavajer | Suit |
| Coats & Jackets | > (other) | Jacket |
| Knitted | > Accessories | Scarf / Shawl |
| Knitted | > Västar | Unlined Jacket / Vest |
| Knitted | > (other) | Knitted Jumper |
| Jeans | > Shorts | Trousers / Shorts |
| Jeans | > (other) | Trousers |
| Basplagg | > Shorts / Biker / Cykel | Trousers / Shorts |
| Basplagg | > (other) | Top / T-shirt |
| Tröjor | > Hoodies / Collegetröjor | Sweatshirt / Hoodie |
| Tröjor | > Västar | Unlined Jacket / Vest |
| Tröjor | > (other) | Knitted Jumper |
| Loungewear | (any) | Other |
| Träningskläder | > Pilates / Yoga | Top / T-shirt |
| Träningskläder | > (other) | Sweatshirt / Hoodie |
| Category | Product name/description keyword | Maps to |
|---|---|---|
| badklader / badklader uv | contains "bikini" | Bikini |
| badklader / badklader uv | (default) | Swimsuit |
| kavajer tunna jackor | contains "kavaj" or "blazer" | Suit |
| kavajer tunna jackor | (default) | Jacket |
| performancewear | contains "byxor" / "byxa" | Trousers |
| performancewear | contains "overall" | Overall |
| performancewear | contains "vantar" / "tumvantar" | Gloves |
| performancewear | contains "mössa" | Hat |
| performancewear | (default) | Jacket |
| traningsklader | contains "baddräkt" | Swimsuit |
| traningsklader | (default) | Underwear |
| trojor koftor / trojor cardigans | contains "sweatshirt" / "hoodie" / "college" | Sweatshirt / Hoodie |
| trojor koftor / trojor cardigans | (default) | Knitted Jumper |
| linnen | (always) | Top / T-shirt |
| klimakterieklader | (always) | Top / T-shirt |
| mammaklader | contains "shorts" / "cykelbyxa" | Trousers / Shorts |
| mammaklader | contains "jeans" / "byxor" / "leggings" | Trousers |
| mammaklader | contains "klänning" | Skirt / Dress |
| mammaklader | contains "topp" / "linne" / "t-shirt" / "tröja" | Top / T-shirt |
| mammaklader | (default) | Other |
| nyfodd | contains "body" / "omlottbody" | Underwear |
| nyfodd | contains "klänning" | Skirt / Dress |
| nyfodd | contains "byxor" / "leggings" / "mjukisbyxor" | Trousers |
| nyfodd | (default) | Other |
No brand-specific sub-mappings needed. All categories map correctly via the generic mapping table.
The material composition string is parsed to extract individual materials and their percentages (e.g. "99% Bomull" = Cotton 99%). The dominant material (highest percentage) determines the QFix material category: Standard textile, Linen/Wool, Cashmere, Silk, Leather/Suede, Down, or Fur.
The same clothing type (e.g. "Jacket") has different QFix IDs for Men's, Women's, and Children's clothing. The product's category (dam/herr/barn) determines which ID to use. The material also gets an ID that depends on the clothing type (shoes use different IDs than clothing).
Each clothing type + material combination in the QFix catalog has many available service actions (often 20+ per category). AI has pre-ranked the top 10 most relevant actions per service category (repair, adjustment, care, other) for all 259 combinations. These are stored in the database.
Backfill mechanism: The system stores 10 actions (not 5) so that when
exclusion rules (Step 6) remove irrelevant actions, the remaining slots are filled from positions 6–10
instead of leaving gaps. For example, a vest has 10 ranked adjustments → "Shorten sleeves" and "Lengthen sleeves"
are excluded → 8 remain → top 5 selected (positions 6–7 backfill the gaps left by the 2 excluded actions).
The final 5 are passed as services_id in the redirect URL to pre-select them on QFix.
The generic top 5 is based on clothing type only, but individual products may have specific features that make certain actions more relevant. The product name and description are scanned for keywords, and matching actions are merged with the AI-ranked top 5 using a score-based ranking.
Smart variant selection: Each keyword rule has multiple action variants (e.g., "Replace button", "Replace jeans button", "Replace snap button"). Instead of injecting all variants, the system uses sub-keyword matching to pick the most relevant one for each product. For example, "Replace jeans button" only triggers when "jeans" or "denim" appears in the product text. At most 2 actions per rule are injected: the best sub-keyword match plus the generic default.
How the merge works: The selected keyword actions (max 2 per rule) are scored and merged with the AI-ranked top 5:
| Source | #1 | #2 | #3 | #4 | #5 | #6 | #7 | #8 | #9 | #10 | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| AI-ranked (stored) | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | |
| Keyword-injected (max 2 per rule) | 7 | 5 | |||||||||
Positions #6–#10 (greyed out) are stored for backfill but normally trimmed away. They only surface when exclusion rules remove higher-ranked actions.
Exclusion check: Keyword-injected actions are also checked against the exclusion rules (Step 6). If a product triggers both a keyword injection and an exclusion for the same action, the exclusion wins. For example, leggings with "dragkedja" in the description will NOT get "Replace zipper" injected because the leggings exclusion rule blocks it.
Example: "Stickad cardigan med dragkedja" (knitted cardigan with zipper) — the merged repair list:
Only 1 zipper action injected (the generic default). Important actions like "Repair hole" and "Repair seam" stay in the top 5.
Example 2: "Jeansjacka med knappar" (jeans jacket with buttons) — sub-keyword "jeans" matches "Replace jeans button":
The sub-keyword system picks "Replace jeans button" specifically for jeans products, while a regular shirt with buttons would only get the generic "Replace button". Max 2 button actions instead of the previous 5.
Some products are mapped to broad QFix categories (e.g., a vest mapped to "Suit") which include actions that don't apply. The system scans the product text for keywords and removes irrelevant actions:
| Product keywords | Excluded actions | Category |
|---|---|---|
| väst, vest, gilet, bodywarmer | Shorten sleeves, Lengthen sleeves, Tapering legs, Shorten legs, Lengthen legs | adjustment |
| linne, singlet, tank top, ärmlös, sleeveless, bandeau, tubtopp | Shorten sleeves, Lengthen sleeves | adjustment |
| shorts | Tapering legs | adjustment |
| kjol, skirt | Shorten sleeves, Lengthen sleeves, Tapering legs | adjustment |
| badshorts, swim shorts, badbyxor | Replace zipper, Replace main zipper, Replace zipper slider | repair |
| badshorts, swim shorts, badbyxor | Narrow shoulder area, Shorten sleeves, Lengthen sleeves, Shorten length | adjustment |
| bikini, baddräkt, swimsuit, badedrakt | Shorten sleeves, Lengthen sleeves, Tapering legs, Shorten length | adjustment |
| strumpor, socks, sockor, strumpa | All adjustment actions | adjustment |
| strumpbyxa, strumpbyxor, tights, pantyhose | All adjustment actions | adjustment |
| poncho | Shorten sleeves, Lengthen sleeves | adjustment |
| cape | Shorten sleeves, Lengthen sleeves | adjustment |
| leggings | Tapering legs (adj), Replace zipper (repair) | both |
| bandeau, tubtopp, tube top, strapless | Narrow shoulder area | adjustment |
| träningstights, cykelbyxa, cykelbyxor | Sleeves, shoulders (adj), Replace zipper (repair) | both |
Note: Keywords are matched against product name, description, and the clothing type category field. This catches products where distinguishing keywords (e.g., "leggings", "strumpbyxor", "croptops") only appear in the category, not the product name.
Processing order: Exclusions are applied before the final top 5 selection. The system has up to 10 AI-ranked actions per category. Exclusions filter the full pool of 10, then the best 5 are selected. This means excluded actions are replaced by lower-ranked ones (backfill) rather than leaving empty slots.
Example: "Väst i linnemix" (linen vest) is mapped to "Suit" which has 10 ranked adjustments. The exclusion rule removes "Shorten sleeves" (#3) and "Lengthen sleeves" (#6) → 8 remain → top 5 selected: "Take in waist", "Shorten length", "Take in sides", "Narrow shoulder area", "Take in the back". Positions #6–#7 ("Take in shoulders", "Expand waist") backfilled the gaps left by the excluded sleeve actions.
The final redirect URL combines all resolved IDs from the previous steps:
subitem_id — the gender-specific clothing type ID (Step 3)material_id — the material ID (Step 3)service_category_id — which service type (repair, adjustment, care)services_id — the final top 5 action IDs after keyword injection and exclusion filtering (Steps 4–6)Example URL:
https://kappahl.dev.qfixr.me/sv/?subitem_id=85&material_id=69&service_category_id=3&services_id=101,102,103,104,105
This URL pre-selects the clothing type, material, service, and the most relevant actions for the specific product, so the customer lands directly on the right booking page.
If the clothing type or material doesn't match any rule, the product is marked as unmapped. This happens for:
Unmapped products can be reviewed at /unmapped and new mapping rules can be added via /remap (AI-assisted) or manually.
Coverage percentage reflects the share of all scraped products that have a QFix URL, not just clothing. Brands with large accessory catalogs will naturally show lower coverage because accessories (ties, pocket squares, cufflinks, belts, etc.) don't have QFix repair categories.
| Brand | Main unmapped categories | Why |
|---|---|---|
| Eton (~65%) | Accessoarer (ties, pocket squares, cufflinks, bow ties) | ~35% of Eton's catalog is non-repairable accessories. Mappable accessories (swim shorts, scarves, caps, beanies) are now mapped via product name inference. All clothing items are mapped correctly. |
| Lindex (~58%) | Accessories, home textiles, beauty products | Lindex sells non-clothing items (candles, skincare, home décor) that are scraped but not repairable. Products with no category are now mapped via product name inference where possible. |
| Gina Tricot (~90%) | Accessories (jewellery, hair clips, bags) | Smaller share of non-clothing items. |
| KappAhl (~93%) | Accessories, multi-packs | Mostly clothing. Small number of accessories and edge cases. |
| Nudie Jeans (~98%) | A few edge cases | Almost entirely clothing. Very few unmapped products. |
Key takeaway: Low coverage does not mean broken mappings — it means the brand's catalog includes many non-clothing products. All actual clothing items across all brands are mapped correctly.