Marketplaces / BOL Technical Scope [In Progress] / Bol Product Management / Bol Taxonomy

Bol Taxonomy

Summary of Changes: (The purpose of this table is to keep traceability and Product team to highlight the things that were changed into the scope, based on comments or discussions)

Date Version Created / Updated Notes
10/05/2023 v1.0 Bogomil Pavlov First publish

The purpose of this document is to describe how we get the Bol taxonomy.

Bol does not have API for downloading the taxonomy instead they use data models. The data model is a JSON file that contains all the product classifications that are available on Bol. The data model is updated on a daily basis so we will have to make sure we update it accordingly. One way to obtain the data model is via url and we will have two separate data models one for FR and one for NL. NL - https://storage.googleapis.com/bolcom-pro-baobab-public-8e7-datamodel/v8/datamodel_v8_nl.json Fr - https://storage.googleapis.com/bolcom-pro-baobab-public-8e7-datamodel/v8/datamodel_v8_fr.json

We want to use the link to download the taxonomy in Hemi and then to be able to export it.

Structure and logic of the data model

Taxonomy Structure Definitions
chunks This is the actual product category
attributes This is the category attributes which we store as IS or pre-map them
lovs This is the attribute pre defined values which we should use
lovid This is the attribute id which we use to map the actual lovs and their values.
enrichmentLevel Specifies whether the attribute is required or optional.

• Level 0 and 1 - Mandatory for publishing the products • Level 2 - Optional. | | condition | This is the dependent attributes which usage is not mandatory however is still recommended to prevent redundancy. However we do not want to over complicated this and will ignore them | | distinctiveFeatureIds | These are the actual variation specifics in Hemi which can be used to create a variation. | | asset | Specifies an image or a document related to the product. It can be an image of the product to a manual. | | labels | Specifies a word that describes an asset. For example, FRONT, SIDE, ON MODEL, MANUAL and ENERGY LABEL. This is used for the images so the only thing we want to do here is to map the relevant label for Leading and Additional images. |

From the actual taxonomy file we will need to get the chunks - which are the categories with their attributes and the lovs - the actual attributes values.

Sample chunk:

 {
      "id" : "30000720",
      "name" : "Blush",
      "attributes" : [
        {
          "id" : "EAN",
          "enrichmentLevel" : 0
        },
        {
          "id" : "Internal Reference",
          "enrichmentLevel" : 0
        },
        {
          "id" : "Name",
          "enrichmentLevel" : 0
        },
        {
          "id" : "Product Classification",
          "enrichmentLevel" : 0
        },
        {
          "id" : "Brand",
          "enrichmentLevel" : 1
        },
        {
          "id" : "Capacity",
          "enrichmentLevel" : 1
        },
        {
          "id" : "Colour",
          "lovId" : "Colour",
          "enrichmentLevel" : 1
        },
        {
          "id" : "Country of Origin",
          "lovId" : "Country of Origin",
          "enrichmentLevel" : 1
        },
        {
          "id" : "Description",
          "enrichmentLevel" : 1
        },
        {
          "id" : "Effect",
          "lovId" : "Effect@30000720",
          "enrichmentLevel" : 1
        },
        {
          "id" : "Ingredients",
          "enrichmentLevel" : 1
        },
        {
          "id" : "Language Packaging",
          "lovId" : "Language Packaging@30000720",
          "enrichmentLevel" : 1
        },
        {
          "id" : "Period after Opening",
          "enrichmentLevel" : 1
        },
        {
          "id" : "Colour Code",
          "enrichmentLevel" : 2
        },
        {
          "id" : "Dermatologically Tested",
          "lovId" : "Dermatologically Tested@30000720",
          "enrichmentLevel" : 2
        },
        {
          "id" : "Family Key",
          "enrichmentLevel" : 2
        },
        {
          "id" : "Height",
          "enrichmentLevel" : 2
        },
        {
          "id" : "Length",
          "enrichmentLevel" : 2
        },
        {
          "id" : "Substance",
          "lovId" : "Substance@30000720",
          "enrichmentLevel" : 2
        },
        {
          "id" : "Vegan",
          "lovId" : "YesNo",
          "enrichmentLevel" : 2
        },
        {
          "id" : "Weight",
          "enrichmentLevel" : 2
        },
        {
          "id" : "Width",
          "enrichmentLevel" : 2
        }
      ],
      "labels" : [
        {
          "id" : "OTHER",
          "enrichmentCondition" : "Any"
        },
        {
          "id" : "IN SITU",
          "enrichmentCondition" : "Any"
        },
        {
          "id" : "FRONT",
          "enrichmentCondition" : "Any"
        },
        {
          "id" : "DETAIL",
          "enrichmentCondition" : "Any"
        },
        {
          "id" : "BOTTOM",
          "enrichmentCondition" : "Any"
        },
        {
          "id" : "BACK",
          "enrichmentCondition" : "Any"
        },
        {
          "id" : "TOP",
          "enrichmentCondition" : "Any"
        },
        {
          "id" : "SIDE",
          "enrichmentCondition" : "Any"
        },
        {
          "id" : "USP",
          "enrichmentCondition" : "Any"
        },
        {
          "id" : "PACKAGE INSERT",
          "enrichmentLevel" : 2
        },
        {
          "id" : "WITH PACKAGE",
          "enrichmentCondition" : "Any"
        },
        {
          "id" : "IN THE BOX",
          "enrichmentCondition" : "Any"
        },
        {
          "id" : "IN PACKAGE",
          "enrichmentCondition" : "Any"
        },
        {
          "id" : "ON MODEL",
          "enrichmentCondition" : "Any"
        },
        {
          "id" : "SWATCH",
          "enrichmentCondition" : "Any"
        }
      ],
      "distinctiveFeatureIds" : [
        "Colour"
      ]
    },
    {
      "id" : "30000924",
      "name" : "Nagelknipper",
      "attributes" : [
        {
          "id" : "EAN",
          "enrichmentLevel" : 0
        },
        {
          "id" : "Internal Reference",
          "enrichmentLevel" : 0
        },
        {
          "id" : "Name",
          "enrichmentLevel" : 0
        },
        {
          "id" : "Product Classification",
          "enrichmentLevel" : 0
        },
        {
          "id" : "Description",
          "enrichmentLevel" : 1
        },
        {
          "id" : "Brand",
          "enrichmentLevel" : 2
        },
        {
          "id" : "Capacity",
          "enrichmentLevel" : 2
        },
        {
          "id" : "Colour",
          "lovId" : "Colour",
          "enrichmentLevel" : 2
        },
        {
          "id" : "Family Key",
          "enrichmentLevel" : 2
        },
        {
          "id" : "Height",
          "enrichmentLevel" : 2
        },
        {
          "id" : "Length",
          "enrichmentLevel" : 2
        },
        {
          "id" : "Number of Products in Package",
          "enrichmentLevel" : 2
        },
        {
          "id" : "Product Height",
          "enrichmentLevel" : 2
        },
        {
          "id" : "Product Length",
          "enrichmentLevel" : 2
        },
        {
          "id" : "Product Width",
          "enrichmentLevel" : 2
        },
        {
          "id" : "Suitable for Fake Nails",
          "lovId" : "YesNo",
          "enrichmentLevel" : 2
        },
        {
          "id" : "Target Audience",
          "lovId" : "Target Audience@30000924",
          "enrichmentLevel" : 2
        },
        {
          "id" : "Type of Nail Care Product",
          "lovId" : "Type of Nail Care Product",
          "enrichmentLevel" : 2
        },
        {
          "id" : "Weight",
          "enrichmentLevel" : 2
        },
        {
          "id" : "Width",
          "enrichmentLevel" : 2
        }
      ],
      "labels" : [
        {
          "id" : "OTHER",
          "enrichmentCondition" : "Any"
        },
        {
          "id" : "IN SITU",
          "enrichmentCondition" : "Any"
        },
        {
          "id" : "FRONT",
          "enrichmentCondition" : "Any"
        },
        {
          "id" : "DETAIL",
          "enrichmentCondition" : "Any"
        },
        {
          "id" : "BOTTOM",
          "enrichmentCondition" : "Any"
        },
        {
          "id" : "BACK",
          "enrichmentCondition" : "Any"
        },
        {
          "id" : "TOP",
          "enrichmentCondition" : "Any"
        },
        {
          "id" : "SIDE",
          "enrichmentCondition" : "Any"
        },
        {
          "id" : "USP",
          "enrichmentCondition" : "Any"
        },
        {
          "id" : "MANUAL",
          "enrichmentLevel" : 2
        },
        {
          "id" : "IN THE BOX",
          "enrichmentCondition" : "Any"
        },
        {
          "id" : "SIZE",
          "enrichmentCondition" : "Any"
        },
        {
          "id" : "ACCESSORIES",
          "enrichmentCondition" : "Any"
        },
        {
          "id" : "LOGO",
          "enrichmentCondition" : "Any"
        },
        {
          "id" : "IN PACKAGE",
          "enrichmentCondition" : "Any"
        },
        {
          "id" : "INSIDE",
          "enrichmentCondition" : "Any"
        },
        {
          "id" : "MULTIPACK",
          "enrichmentCondition" : "Any"
        },
        {
          "id" : "ON MODEL",
          "enrichmentCondition" : "Any"
        },
        {
          "id" : "TECHDRAWING",
          "enrichmentCondition" : "Any"
        },
        {
          "id" : "WITH PACKAGE",
          "enrichmentCondition" : "Any"
        },
        {
          "id" : "SWATCH",
          "enrichmentCondition" : "Any"
        }
      ],
      "distinctiveFeatureIds" : [
        "Colour",
        "Product Width"
      ]
    }

Before the attributes is the id of the category and the name. We want to have the name in Hemi and push the name to Bol. Please note all categories are leaf and we can list in any of them. Then we have all available category attributes and their specifics. The enrichmentLevel identifies if the attribute is required or no. If we have 1 or 0 it means it is required otherwise we treat it as optional. If the attribute have lovId this means there are specific values we must use and using the lovId we can refer to the actual lovs and obtain the values for the attribute. Since the attributes do not have id and name we will be using only their ids. Also we want to store distinctiveFeatureIds and indicate which attributes can be used as Variation Specifics.

Please note some of the attributes will be root one and will be mapped to internal fields rather than Item Specifics and we want to exclude them form the taxonomy export file

Root Attributes

Attribute Id Hemi Field
Internal Reference Product > SKU
EAN Product Account > Marketplace EAN

OR Product > EAN | Product Account > Marketplace EAN is with priority | | Name | Product Account > Title | | | Product Classification | Product Account > Primary Category ID | | | Description | Product Account > Description | | | Brand | Product > Brands OR Product Account > Item Specific | Product Account > Item Specific is with priority | | Family Key | Product Account > Variation Group | |

Taxonomy export file

In order to generate the taxonomy file we will need to create a new record in Taxonomy export with: Marketplace = Bol Status = pending Category for Export = all_nl or all_fr (or we can specify which exact categories) Email = email to which the file will be send

Please find more details on the file structure how it should look like after exported here - Taxonomy General requirements .

PrimaryCatID {chunks > id} PrimaryCatName {chunks > name} Category Path Is Leaf Item Specifics Variation Specifics {istinctiveFeatureIds} Required {enrichmentLevel} Enumeration {lovIds} Values {lovs}
30000924 Nagelknipper N/A Yes Brand Yes No
123 Shoes N/A Yes Material No No
123 Shoes N/A Yes Type No No
1234 Gloves N/A Yes Color Yes Yes Red White Black
1234 Gloves N/A Yes Size Yes Yes 40 41 42 43 44
Is this article helpful?
0 0 0