Merit · E-Commerce Solution · Product explainer

PIM Core, explained

PIM holds what every product is: its identity, attributes, versions and images. This page shows what it owns, how a product gets in, and every feature with the rules that make it testable.

Owner: Brian Arfi Faridhi, Product Director · Audience: engineers and product people working on the E-Commerce Solution

01What PIM owns

And the three things it never holds: price, stock and seller.

Writes to PIMSeller Portalthe upload: match or create the masterproductCatalogue admintaxonomy, attributes, variant axesOnline Catalogue syncthe Old World bridge, both waysPIMwhat a product is: identity, attributes, variants,images, categories. MedusaJS. No price, no stock,no sellerReads from PIME-commerce Coreevery offer points at a PIM variantStorefront and B2C appproduct pages, via Core and SearchSearchindexes the catalogue, read only

PIM answers one question: what is this product. Who sells it, at what price and with how much stock is an offer, and offers live in E-commerce Core. Offers point at products, never the reverse. The service map shows every seam around it.

02The data model

From the category tree down to the offer that points at it.

RootPhysical or Digital. Decideslogistics or code fulfilmentCategorye.g. Electronics. Rules inheritdownwardLeaf categorye.g. Smartphones. Holds theattributes and up to 5 variant axesProductiPhone 17 Pro. One record for everysellerVariantthe product plus its full set ofaxis values: 256GB, Black, UAEE-commerce Core, not PIMOfferseller, price, stock, channelBuy Boxcompetes inside one variantvariant_id, mandatory

The leaf category is where the schema lives: which attributes are mandatory, which ones are variant axes, and which values each axis allows. A variant is identified by its complete set of axis values, so two variants of one product can never share them.

03How a product gets in

One upload, two writes, four possible paths.

Sellerin the portalSeller Portalthe upload formPIMthe master productE-commerce Corethe offerCatalogue adminMerit Opspick a leaf category, describe the itemthe form is built from that category schemamatch: product and full axis valuesa. Exact match on an existing variantcreate the offer onlyno new product datab. Same product, new versionadd the variantaxis values must be allowed valuescreate the offer on itc. A product Merit does not carrycreate product and first variantd. Collision: cannot be told apartstop, show the clash, send a requestnever force created, never a new offer

One upload writes to two services: the product to PIM, the offer to Core. Four paths come out of the match. The variant creation rules give the acceptance criteria for each.

04When two versions collide

The rule that keeps a buyer from getting the wrong hardware.

1 Same product?if not, split into two products2 An existing axis separates them?add the allowed value to that axis3 Only then, a new axisadmin only, max 5 per category, priced for every variantit multipliesNever: a new offer on the existing variantthe app shows the lowest priced offer of a variant, so a Wi-Fi unit and a cellular unit on one variant lets a buyer pay the low price and get the wrong hardware

The collision ladder, cheapest answer first. A seller can never create a variant axis: the upload form has no control for it, whatever the category setting says.

05Feature map

Every feature and the services it crosses. One feature is rarely one service, so a story is split per service by engineering, not by product.

FeatureSeller PortalPIME-commerce CoreLiveOpsStorefrontOnline CatalogueAI matching
1. Taxonomy tree●●●
2. Category attributes and schema●●●
3. Variant axes●●●
4. Product matching on upload●●●●
5. Variant creation and collisions●●●
6. Variant-level images●●●●
7. Bulk upload by CSV●●
8. Barcode validation●●
9. System SKU●●●
10. Brands and translations●●
11. Online Catalogue sync●●●
12. Catalogue by channel●●●●

06Features

Who each one serves, what it does, the rules to test it by, and its spec. OPEN marks a question not yet decided.

F01

Taxonomy tree

Catalogue admin

As a catalogue admin, I keep one category tree so every product has exactly one home.

A root split into Physical and Digital, then category, subcategory and leaf category. Names in English and Arabic.

  • Admin creates, renames, deactivates and reorders nodes.
  • Deactivating a node hides it from the seller upload. Existing products stay.
  • A node with active products cannot be deleted. Reassign the products first.
  • Every schema change is logged with the admin and the time.
PIMLiveOpsSeller Portal
Spec: PRD PIM Category and Attribute Structure, FR-01 to FR-05, FR-29, FR-30
F02

Category attributes and schema

Catalogue adminSeller

As a seller, I see exactly the fields my category needs, and I cannot submit without the mandatory ones.

Each leaf category carries its attribute set: global, per type (physical or digital) and per category. Each attribute is Mandatory, Optional or Hidden, with a type and a validation rule.

  • Rules set on a category inherit to everything below it. A child can override, and the override is visible.
  • Hidden attributes are stored but never shown to sellers or buyers.
  • A schema change applies to new listings at once. Existing listings are flagged for review, not invalidated.
  • In the code today, attributes live only on leaf categories, as text, number or enum, each with a required flag.
PIMSeller PortalLiveOps
Spec: PRD PIM Category and Attribute Structure, FR-06 to FR-14, FR-31
F03

Variant axes

Catalogue admin

As a catalogue admin, I decide which attributes split a product into versions, so sellers compete on the right thing.

Up to five attributes per category are variant axes, for example Storage and Colour on Smartphones. Region is the third axis on Smartphones: UAE, International, US.

  • An axis can be pinned to an allowed values list. Values outside it are rejected.
  • Only a catalogue admin creates an axis. Custom axes stay off for Smartphones and Electronics.
  • An axis is live only when every existing variant in the category carries a value for it.
  • Model number does not define identity for Smartphones. Regional units stay one product.
  • Whether every axis combination is generated up front or only the ones sellers enter.OPEN
PIMSeller PortalE-commerce Core
F04

Product matching on upload

SellerMerit Ops

As a seller, when I list something Merit already carries, I attach my offer to it instead of creating a duplicate.

Before anything is created, the upload is matched against the catalogue. Exact match runs on the product and its full set of axis values. AI matching adds a scored match for what exact match misses.

  • An exact match on a variant creates an offer only.
  • AI matching runs in shadow mode first: Ops sees the score and accepts or rejects every match.
  • LiveOps later sets how much is automatic, per category.
  • In the code today, exact match compares the title, then the full option set of the variant.
Seller PortalPIME-commerce CoreAI matching
F05

Variant creation and collisions

SellerCatalogue admin

As a seller, I can add the cellular iPad when Merit only carries the Wi-Fi one.

A seller adds a new version of an existing product, or a new product with its first version. A version that cannot be told apart from an existing one stops and becomes a request to the catalogue admin.

  • A variant is the product plus its complete set of axis values, unique inside the product.
  • A collision follows the ladder in section 04, never a new offer on an existing variant.
  • A seller can never create a variant axis.
Seller PortalPIMLiveOps
F06

Variant-level images

SellerMerit OpsMember

As a member, when I pick the blue one, I see the blue one.

Each variant can carry its own images. The seller submits candidates, Ops approves the canonical set in PIM, and nothing reaches a client until it is approved.

  • Display falls back from variant image to product image to a placeholder.
  • Bulk image upload is keyed on the variant SKU, with a per-row error report.
  • A per-client switch reverts to product-level images within 60 seconds.
  • The Online Catalogue payload for variant images is not yet agreed.OPEN
Seller PortalPIMStorefrontOnline Catalogue
F07

Bulk upload by CSV

Seller

As a seller with 2,000 products, I upload one file instead of 2,000 forms.

The seller downloads a template for a category, fills it, and uploads it. Columns come from that category effective schema.

  • Each row is validated against the schema. The result file carries an error code per row.
  • Valid rows go ahead. Invalid rows wait for the seller to fix them.
  • A row with an existing SKU updates that product. A new SKU creates a new one.
  • Maximum 10 MB and 5,000 rows per file.
Seller PortalPIM
F08

Barcode validation

Catalogue adminSeller

As Merit Ops, I trust that a barcode on a product is a real one.

Where a category makes the barcode mandatory, EAN-13, UPC-A and GTIN-14 are checked by checksum.

  • Each category sets the barcode as Mandatory, Optional or Not applicable.
  • A barcode already used on another product raises a warning for admin review, not a hard block.
PIMSeller Portal
F09

System SKU

Merit Ops

As Merit Ops, I can refer to any variant by one id that no seller controls.

Every variant gets a Merit SKU. The SKU the seller submitted is kept alongside it.

  • Format merit_variant_sku_ plus ten digits.
  • The seller SKU is kept in the variant metadata.
PIMSeller PortalE-commerce Core
Spec: medusajs-pim, the variant SKU workflow
F10

Brands and translations

Catalogue adminMember

As a member in Riyadh, I read the product in Arabic.

A brand dictionary links brands to products. Product and category content carries English and Arabic, including attribute labels and terms and conditions.

  • English is the default. Arabic is stored alongside it, per product and per category.
  • Languages beyond English and Arabic.OPEN
PIMStorefront
F11

Online Catalogue sync

Merit Ops

As Merit Ops, a product a seller lists in the New World can still be sold by an Old World client.

The live bridge between the two stacks. Product and stock go out by signed webhook to the Online Catalogue, which syncs on to MGC. An Old World order takes stock off the New World offer.

  • Physical merchandise only. Gift cards, codes and vouchers are excluded.
  • The sync stops on error. A supplier SKU conflict halts it.
  • For the Al Fursan move, PIM replaces the Online Catalogue, and sellers upload their catalogue again.
PIME-commerce CoreOnline Catalogue
Spec: the service map, section 05
F12

Catalogue by channel

Merit OpsClient

As Merit Ops, I control which products each client store can sell.

Rules decide which products are sellable in which channel. The draft specification orders them: SKU blacklist, then brand denial, then category exclusion, then the channel allow list.

  • The Catalog Distribution Service is a draft specification, not a built service.OPEN
  • Client catalogue allocation moves to LiveOps.
PIMLiveOpsStorefrontE-commerce Core
Spec: Catalog Distribution Service specification, draft

07Glossary

The PIM words, used the same way every time.

Open the glossary, 13 terms
PIM
Product Information Management. What a product is. Built on MedusaJS.
Product
One record per real item, shared by every seller who sells it.
Variant
The product plus its complete set of axis values. What a shopper actually buys.
Variant axis
An attribute that splits a product into variants, such as Storage or Colour. Max 5 per category.
Allowed values
The admin list an axis value must come from, such as UAE, International, US.
Leaf category
The last level of the tree. Products live here, and so does the schema.
Effective schema
The attribute rules of a category after inheritance and overrides are applied.
Offer
One seller selling one variant at a price, with stock. Lives in E-commerce Core.
Collision
An upload that cannot be told apart from an existing variant.
Exact match
A match on the product and its full set of axis values.
Shadow mode
AI matching shows a score, and a person decides every match.
Online Catalogue
The Old World catalogue. PIM replaces it for Al Fursan.
Merit SKU
The system id of a variant, merit_variant_sku_ plus ten digits.