Bill of Material Reference
This section describes the Bill of Material (BOM) in JSON format retrieved from Iframe messages in the planner or from the project metadata through web services API. The Bill of Material is used for instance to generate customer specific display of Item List. For compatibility reasons the Bill of Material is versionned. It is recommended to use the most recent version in development phase but to set the version used in production phase.
Refer to Iframe messages SetUpSettings
to set the version, BOMRequested
, ProductListWithBOMRequested
and ProductListWithBOM
, to get the Bill of Material in the planner.
Refer to Web Services API GET/projects/{ID}/metadata/{applicationID} to get the Bill Of Material through API.
BOM in Iframe messages
The BOM retrieved from a project through Iframe messages is a JSON object structured with the following sections.
products: array of objects describing products directly inserted in the project; e.g. base cabinet, appliance, accessory. The sub components of the products are listed in the children array of objects. Notice that a child product may have his own children. As such the products structure must be interpreted as a tree with multiple levels of components and sub-components. For individual product description in BOM, see products.
linears: array of objects describing products related to linears. e.g. worktop, wallpanel, wall edge strip, plinth, cornice and deco strip. The sub components of the linears products are listed in the children array of objects. e.g. cutout or edges for worktop board. For individual linears product description in BOM, see linears.
packs: array of objects describing products that are bought by batch. e.g. leg, handle. See packs description.
decos: array of objects describing products related to decorations e.g. paint, wallpaper, tile, flooring. For individual decoration description in BOM, see decorations.
bays: (from Version 13) array of objects describing products related to bays e.g. openings, doors, windows. For individual bays description in BOM, see bays.
totalPrice: (from Version 2) object containing the following attributes:
- regular: sum of all regular prices
- current: sum of all current prices
- discountType: type of discount. Possible values are
regular
(no discount),reduced
(normal discount) andmembership
(membership discount) - startDate: latest of all products start dates
- endDate: earliest of all products end dates.
- secondaryCurrencyRegular and secondaryCurrencyCurrent (from Version 11 to support secondary currency in the pricing): sum of the secondary currency prices, respectively for the regular and current amounts.
- currency: the currency code used by the planner. 3 letters string following ISO 4217.
finance: (from Version 6) object the following attributes:
- monthly: monthly price for the project
- deposit: initial deposit amount
- duration: loan duration in months (chosen by the user)
- activated: indicates if the user has selected the monthly price display
Notes: The finance object is present if the application distribution settings
finance
is defined and contains at least 1 valid loan duration.
Structure sample
"products": [
{
"children": [
...
]
(see products description)
},
...
],
"linears": [
{
"children": [
...
]
(see linears description)
},
...
],
"packs": [
{
(see packs description)
},
...
],
"decos": [
{
(see linears description)
},
...
],
"bays": [
{
(see bays description)
},
...
],
"totalPrice": {
"regular": (double),
"secondaryCurrencyRegular": (double),
"current": (double),
"secondaryCurrencyCurrent": (double),
"discountType": (string),
"startDate": (string),
"endDate": (string),
"currency": (string)
},
"finance": {
"monthly": (double),
"deposit": (double),
"duration": (double),
"activated": (boolean)
}
products
The attributes below are used to describe a product in the BOM.
Attribute | Description | Data Type | Example |
---|---|---|---|
dbID | Database ID of the product | String | "dbID": "13848" |
reference | Product reference | String | "reference": "BU_01" |
name | Product name | String | "name": "BU" |
typeID | The product closed tag ID of the product | Number | "typeID": 518 |
type | Furniture type | String | "type": "furniture" |
freeTags | Array of free tags associated to the furniture | Array of String | "freeTags": ["FurnitureConfigurator"] |
commercialDescription | Commercial description of the product | String | "commercialDescription": "Base Unit Generic" |
shortDescription | Short description of the product | String | "shortDescription": "Box assembly with frame, legs and cover panels", |
thumbnailURLLarge | Product thumbnail (size 512 pixels) | String | "thumbnailURLLarge": "https://.../512.jpg" |
thumbnailURLMedium | Product thumbnail (size 256 pixels) | String | "thumbnailURLMedium": "https://.../256.jpg" |
thumbnailURLSmall | Product thumbnail (size 64 pixels) | String | "thumbnailURLSmall": "https://.../64.jpg" |
startDate | Start date of the product availability (timestamp) | String | "startDate": "2016-12-12T00:00:00.000Z", |
endDate | End date of the product availability (timestamp) | String | "endDate": "2017-12-18T00:00:00.000Z", |
isExpired | True if the product was expired at the time of BOM generation | Boolean | "isExpired": false |
brandID | ID of the brand where the product is available | Number | "brandID": 1 |
brandName | Brand name | String | "brandName": "Bryo" |
clientMetadata | The client metadata of the product | any | "clientMetadata": { "someKey": "someValue" } |
productSheetUrl | The product sheet URL | String | "productSheetUrl": "https://url" |
nomenclatureNumber | Number of the furniture in the 2D plan (only pieces of furniture have it) Refer to Numbering 🔗 | Number | "nomenclatureNumber":1 |
width | Product width parameter /!\ This is the default value, not the current value. | Number | "width": 400 |
height | Product height parameter /!\ This is the default value, not the current value. | Number | "height": 800 |
depth | Product depth parameter /!\ This is the default value, not the current value. | Number | "depth": 370 |
computedWidth (from Version 12) | Product current width value | Number | "width": 400 |
computedHeight (from Version 12) | Product current height value | Number | "height": 800 |
computedDepth (from Version 12) | Product current depth value | Number | "depth": 370 |
commercialDimensions | Product commercial dimensions parameter /!\ the exported value is the default value, not the current value. | String | "commercialDimensions": "W800 x D600 x H800" |
isPriceless | True if the item has no possible price | Boolean | "isPriceless": false |
price (from Version 2) | Product price if defined | PriceStructure | See Price |
itemNote (from Version 4) | The note associated to the product, if it exists | String | "itemNote": "place this cabinet 10mm away from the wall to avoid the pipes\nalso the plinth must be placed with care" |
uuid (from Version 5) | An unique identifier of the product. Not available for automatic fillers nor worktops, wall panel, wall edge strip, cornice, deco strip, plinths | String | "uuid": "EA3BD237-9116-4316-8039-CA2A9295EC1" |
linears
The attributes below are used to describe a linear product in the BOM.
Attribute | Description | Data Type | Example |
---|---|---|---|
dbID | Database ID of the product | String | "dbID": "14063" |
reference | Product reference | String | "reference": "DELAMINATE_1" |
name | Product name | String | "name": "DELAMINATE_1" |
typeID | The product closed tag ID of the product | Number | "typeID": 443 |
type | Furniture type | String | "type": "material" |
freeTags | Array of free tags associated to the furniture | Array of String | "freeTags": ["FurnitureConfigurator"] |
commercialDescription | Commercial description of the product | String | "commercialDescription": "Precut, 28mm Laminate" |
shortDescription | Short description of the product | String | "shortDescription": "Precut, 28mm Laminate", |
thumbnailURLLarge | Product thumbnail (size 512) | String | "thumbnailURLLarge": "https://.../512.jpg" |
thumbnailURLMedium | Product thumbnail (size 256) | String | "thumbnailURLMedium": "https://.../256.jpg" |
thumbnailURLSmall | Product thumbnail (size 64) | String | "thumbnailURLSmall": "https://.../64.jpg" |
svgURL | Used only for edge finish products. Edge symbol URL | String | "svgURL": "https://xyz/Symbols/1.svg" |
startDate | Start date of the product availability (timestamp) | String | "startDate": "2016-12-12T00:00:00.000Z", |
endDate | End date of the product availability (timestamp) | String | "endDate": "2017-12-18T00:00:00.000Z", |
isExpired | True if the product was expired at the time of BOM generation | Boolean | "isExpired": false |
brandID | ID of the brand where the product is available | Number | "brandID": 1 |
brandName | Brand name | String | "brandName": "Bryo" |
clientMetadata | The client metadata of the product | any | "clientMetadata": { "someKey": "someValue" } |
productSheetUrl | The product sheet URL | String | "productSheetUrl": "https://url" |
width | Product width as defined in product information | Number | "width": 1860 |
height | Product height as defined in product information | Number | "height": 28 |
depth | Product depth as defined in product information | Number | "depth": 635 |
computedWidth | width for the linear computed | Number | "computedWidth": 893 |
computedHeight | height for the linear computed | Number | "computedHeight": 28 |
computedDepth | depth for the linear computed | Number | "computedDepth": 635 |
boardID (from version 7) | Value used only for worktop products : list of nomenclature numbers of the board (same number visible in 2DPlans) | Number | "boardID": [3, 4] |
quantity | Number of the same element | Number | "quantity": 1 |
linear | Value used only for linear products (e.g. calculated linear meter of a worktop or wall edge strip). The decimal precision of this value is controlled by the application distribution parameter linearPrecision | Number | "linear": 1.035 |
square | Value used only for linear products (e.g. calculated square meters of a wallpanel board). The decimal precision of this value is controlled by the application distribution parameter linearPrecision | Number | "square": 0.512 |
isPriceless | True if the item has no possible price This properties is use in linear to indicate that this linear is not possible to price due to error like: - Impossible shape - Bad board orientation Some applicative rules will indicate what is wrong with a linear if those applicative rules are configure | Boolean | "isPriceless": true |
price (from Version 2) | Product price if defined | PriceStructure | See Price |
position (from Version 3) | Value used only for optimized Cover Panel boards. Indicates the position of the board. | String | "position”:"top", “bottom” or "back" |
furnitureList (from Version 3) | Value used only for optimized Cover Panel boards. Identifies all the pieces of furniture that the board is attached to. | Array of Integer | "furnitureList": [3, 4, 5] |
ecoFee (from Version 10) | Value used only for linear products. Defines the ecofee price for linears | Number | "ecoFee": 0.82 |
weight (from Version 10) | Value used only linear products. Defines the weight for linears | Number | "weight": 6.324 |
packs
The packs products are described with the same attributes than products with the additional attribute quantity. See products description. Notice that price is unitary price of each pack element. Multiply quantity by price to compute contribution of pack products to the total price.
Attribute | Description | Data Type | Example |
---|---|---|---|
quantity | Number of packs products needed for the project | Number | "quantity": 5 |
decos
The attributes below are used to describe a decoration product in the BOM.
Attribute | Description | Data Type | Example |
---|---|---|---|
dbID | Database ID of the product | String | "dbID": "4339" |
reference | Product reference | String | "reference": "peinture_RAL_1000_satin" |
name | Product name | String | "name": "PAINT" |
typeID | The product closed tag ID of the product | Number | "typeID": 357 |
type | Furniture type | String | "type": "material" |
freeTags | Array of free tags associated to the furniture | Array of String | "freeTags": ["material"] |
commercialDescription | Commercial description of the product | String | "commercialDescription": "Peinture satinée" |
shortDescription | Short description of the product | String | "shortDescription": "Peinture satinée.", |
thumbnailURLLarge | Product thumbnail (size 512 pixels) | String | "thumbnailURLLarge": "https://.../512.jpg" |
thumbnailURLMedium | Product thumbnail (size 256 pixels) | String | "thumbnailURLMedium": "https://.../256.jpg" |
thumbnailURLSmall | Product thumbnail (size 64 pixels) | String | "thumbnailURLSmall": "https://.../64.jpg" |
startDate | Start date of the product availability (timestamp) | String | "startDate": "2024-03-01T00:00:00.000Z", |
endDate | End date of the product availability (timestamp) | String | "endDate": "2024-03-31T00:00:00.000Z", |
isExpired | True if the product was expired at the time of BOM generation | Boolean | "isExpired": false |
brandID | ID of the brand where the product is available | Number | "brandID": 1 |
brandName | Brand name | String | "brandName": "Bryo" |
clientMetadata | Information from the product info of the product | String | "clientMetadata": {json} |
square | Value used only for decorations (e.g. calculated square meters of a parquet) | Number | "square": 44 |
quantity | Number of the same element | Number | "quantity": 1 |
price | Product price if defined | PriceStructure | See Price |
bays
The attributes below are used to describe a decoration product in the BOM.
Attribute | Description | Data Type | Example |
---|---|---|---|
dbID | Database ID of the product | String | "dbID": "43739" |
reference | Product reference | String | "reference": "fen_4_anthracite_blanc" |
name | Product name | String | "name": "Cancun double window" |
typeID | The product closed tag ID of the product | Number | "typeID": 252 |
type | Furniture type | String | "type": "opening" |
freeTags | Array of free tags associated to the furniture | Array of String | "freeTags": ["RemoveFromSearch"] |
commercialDescription | Commercial description of the product | String | "commercialDescription": "Double window" |
shortDescription | Short description of the product | String | "shortDescription": "Double window.", |
thumbnailURLLarge | Product thumbnail (size 512 pixels) | String | "thumbnailURLLarge": "https://.../512.jpg" |
thumbnailURLMedium | Product thumbnail (size 256 pixels) | String | "thumbnailURLMedium": "https://.../256.jpg" |
thumbnailURLSmall | Product thumbnail (size 64 pixels) | String | "thumbnailURLSmall": "https://.../64.jpg" |
startDate | Start date of the product availability (timestamp) | String | "startDate": "2024-03-01T00:00:00.000Z", |
endDate | End date of the product availability (timestamp) | String | "endDate": "2024-03-31T00:00:00.000Z", |
isExpired | True if the product was expired at the time of BOM generation | Boolean | "isExpired": false |
brandID | ID of the brand where the product is available | Number | "brandID": 1 |
brandName | Brand name | String | "brandName": "Bryo" |
clientMetadata | Information from the product info of the product | String | "clientMetadata": {json} |
width | Product width parameter /!\ This is the default value, not the current value. | Number | "width": 1400 |
height | Product height parameter /!\ This is the default value, not the current value. | Number | "height": 800 |
depth | Product depth parameter /!\ This is the default value, not the current value. | Number | "depth": 370 |
isPriceless | True if the item has no possible price | Boolean | "isPriceless": false |
price (from Version 2) | Product price if defined | PriceStructure | See Price |
Price
The price of a product is defined by a JSON object called PriceStructure. This price description was introduced with BOM Version 2.
The PriceStructure is composed of 3 objects regular,current and ecoFee and the attribute discountType. regular object contains information on the regular price of the object. current object contains information on the price that is applied currently. ecoFee object contains information on the ecoFee price of the object if defined for a product. discountType is the type of discount applied for the current price. Possible values for discountType are:
▪ regular: no discount, the current price is the regular price.
▪ reduced : current price is a reduced price.
▪ discounted : current price is a discounted price.
▪ membership : current price is a membership price.
NOTE : The "totalPrice" attribute of the BOM is not a PriceStructure object.
Price Sample
"price": {
"regular": {
"value": 70,
"type": "regular",
"startDate": null,
"endDate": null,
"additionalData": null,
"secondaryCurrencyValue": 230
},
"current": {
"value": 50,
"type": "membership",
"startDate": "2019-12-12T00:00:00.000Z",
"endDate": "2022-12-18T00:00:00.000Z",
"additionalData": null,
"secondaryCurrencyValue": 200
},
"ecoFee":{
"value": 24,
"type": "ecoFee",
"startDate": null,
"endDate": null,
"additionalData": null
},
"discountType": "membership"
}
Below are described the attributes of the regular and current prices.
Attribute | Description | Data Type | Example |
---|---|---|---|
value | The price value | Number | "value": 150 |
type | The price type | String | "type": "regular" "type": "reduced" "type": "discounted" "type": "membership" "type": "ecoFee" |
startDate | Start date of the price validity (timestamp) | String | "startDate": "2016-12-12T00:00:00.000Z", |
endDate | End date of the price validity (timestamp) | String | "endDate": "2017-12-18T00:00:00.000Z", |
additionalData | Additional price information. See also Pricing Parameters. | Object | "additionalData": { "pricingMethod" : "linearMeter" } |
secondaryCurrencyValue (from Version 11) | The price value in the optional secondary currency. If no secondary currency is provided, or if a product does not have a price in the secondary currency, this attribute is not present in the price structure. | Number | "secondaryCurrencyValue": 200 |
Specific behavior in BOM
In this section are listed the elements that receive a specific treatment in the BOM.
Board algorithm
Some products have a specific board algorithm run for them when it comes to their pricing. This behavior is expected for board-like products (i.e. flat rectangular pieces of material).
The board algorithm is automatically run for 3 kind of products:
▪ Worktops
▪ Wall panels
▪ Cover panels
It can also be triggered on products that are not in the list above by adding a boolean parameter to the generic product : priceBestBoard
(starting with BOM v8).
Note: This algorithm takes a few assumptions on the products it is run on. These assumptions are all true for the 3 kinds of product automatically affected (worktops, wall-panels and cover-panels), if you follow their respective setup documentations. If you use the
priceBestBoard
parameter, you have to make sure that these assumptions are all verified on your product:
- the product must be a generic product (see Generic Products ).
- it must declare all its available boards through the mapping system.
- the only allowed parameters for the board mappings are
width
,depth
andheight
. It is not mandatory to use the 3 of them. For example, it is possible to only do a mapping on thewidth
parameter to differentiate the boards.- all the board products must have the 3 dimension parameters
width
,depth
andheight
with the correct board dimensions as their default value.
Here is the list of the algorithm steps when it is executed:
- get the actual dimension of the board in the planner.
- from all the boards declared in the mappings, ignore all the ones that are too small to cover the computed area.
- from all the remaining boards, pick the one that has the smallest volume (volume = width * depth * height)
- the board found is used in the BOM.
- if no board is found (all boards are too small for example), no priced item is resolved in the BOM.
For worktops and wall panels (from Version 2)
Worktops and wall panels are located in the "linears" section of the BOM. They will always consist of a main item that represents the linear product (reference, thumbnail, dates, etc.) and a list of boards that represent the actual articles to buy. See Set Up Worktops and Set Up Wall Panels for more information.
Notes:
▪ Board items are located in the "children" of the main item
▪ The price only appears in the board articles and not in the main item
▪ Board items may have children themselves (cut-outs, etc.)
▪ There will be 1 main item per linear in the project. If there are 2 different worktops with the same ID in the project, there will be 2 worktop items in the BOM each having its own list of board items
For top, bottom and optionaly back cover panels (from Version 3)
Top and bottom cover-panels are located in the “linears” section of the BOM because an optimization tries to share cover panel boards between several cabinets. Because cover panels are part of the assembly tree, top and bottom cover panel elements are removed from the “products” section of the BOM. Then, a dedicated element is created in the “linears” section for each cover panel reference. In the children of this element there is 1 BOM item for each board.
Each board contains these attributes (along with all regular BOM item attributes):
- “position” : “top”, “bottom” or "back". Indicates the position of the board.
- “furnitureList” : Array of furniture nomenclature numbers. Identifies all the pieces of furniture that the board is attached to.
Notes:
▪ The board item is placed as the only "children" of the main cover-panel item
▪ The price only appears in the board articles and not in the main item
▪ The board item cannot have children itself
For all other kind of cover-panels (from Version 2)
Cover panels are located in the "products" section of the BOM, they are part of product assemblies. For each assembly element that has the Cover panels type, the board algorithm runs and determines the unique best board depending on its dimensions. See Set Up Cover Panels for more information.
Notes:
▪ The board item is placed as the only "children" of the main cover-panel item
▪ The price only appears in the board articles and not in the main item
▪ The board item cannot have children itself
priceBestBoard
parameter (from Version 8)
For any product with the Any product with the priceBestBoard
parameter is treated the same way than non-optimzed cover-panels (see above). They are always located in the "products" section of the BOM, as they are part of product assemblies. For more information about the priceBestBoard
parameter, see the associated pricing documentation.
Notes:
▪ The board item is placed as the only "children" of the main product item
▪ The price only appears in the board articles and not in the main item
▪ The board item cannot have children itself
linearPercentageByItem
If an assembly element has the pricingMethod "linearPercentageByItem", it receives a special treatment in the BOM. First, it is removed from the "products" section of the BOM. Then, a dedicated element is created in the "linears" section. This behavior was introduced from Version 2. See Set Up the Pricing for more information.
BOM in project metadata
The BOM of a project retrieved through web services API GET/projects/{ID}/metadata/{applicationID} is a JSON object with a similar structure than BOM object retrieved from Iframe Message. This BOM in metadata is stored when saving the project with minimun product information. It is sufficient to retrieve products and gather up to date information on each product. The expand option of GET/projects/{ID}/metadata/{applicationID} is designed for that.
The 5 sections products, linears, packs, decos and bays are presents but with less products information than in BOM from Iframe message. Product information needs to be completed before use.
The section totalPrice is identical to BOM from Iframe message.
The section finance (from Version 6) is identical to BOM from Iframe message.
4 additional attributes are provided :
locale: the locale used in the planner to edit the project. Usually it is a combination of 2 letter langage code following ISO 639-1 with a 2 letter country code following ISO 3166-1.
currency: string of 3 letter string following ISO 4217.
distributionID: Application Distribution ID
version: the iframe version. It drives the data structure of the returned BOM items.
Structure sample
"products": [
{
(see product structure description)
},
...
],
"linears": [
{
(see linear structure description)
},
...
],
"packs": [
{
(see pack structure description)
},
...
],
"decos": [
{
(see doco structure description)
},
...
],
"bays": [
{
(see bay structure description)
},
...
],
"totalPrice": {
...
},
"finance": {
...
},
"locale": (string),
"currency": (string),
"distributionID": (string),
"version": (number),
products, linears, packs, decos and bays
The attributes below are used to describe products, linears, packs, decos and bays in the BOM in project metadata.
Attribute | Description | Data Type | Example |
---|---|---|---|
dbID | Database ID of the product | String | "dbID": "14063" |
computedWidth | real width of the product or the linear | Number | "computedWidth": 893 |
computedHeight | real height of the product or the linear | Number | "computedHeight": 28 |
computedDepth | real depth of the product or the linear | Number | "computedDepth": 635 |
quantity | Number of the same element | Number | "quantity": 1 |
linear | Value used only for linear products (e.g. calculated linear meter of a wall edge strip). The decimal precision of this value is controlled by the distribution parameter "linearPrecision" | Number | "linear": 1.03 |
square | Value used only for linear products (e.g. calculated square meters of a wallpanel board). The decimal precision of this value is controlled by the distribution parameter "linearPrecision" | Number | "square": 0.5 |
nomenclatureNumber | Number of the furniture in the 2D plan (only pieces of furniture have it) Refer to Numbering 🔗 | Number | "nomenclatureNumber":1 |
front | In case of an edge finish product and precise whether this one is a front edge | Boolean | "front": false |
itemNote (from Version 4) | The note associated to the product, if it exists | String | "itemNote": "place this cabinet 10mm away from the wall to avoid the pipes\nalso the plinth must be placed with care" |
uuid (from Version 5) | An unique identifier of the product. Not available for automatic fillers for now. | String | "uuid": "EA3BD237-9116-4316-8039-CA2A9295EC1" |
BOM Object Version 13
This version adds the support for adding price of bays
to the total price. The price will be increased by each bay
that is added to the planner along with its pricing.
BOM Object Version 12
This version adds the real dimensions of every products and sub-products in their BOM items. The added attributes are computedWidth
, computedHeight
and computedDepth
. They are set for every products and sub-products as long as they are not priced per pack or with a custom pricing method such as linearPercentageByItem
.
BOM Object Version 11
This version adds the support for a secondary currency in the planner. It adds the secondaryCurrencyValue
attribute of regular and current prices in BOM items. It also adds the secondaryCurrencyRegular
and secondaryCurrencyCurrent
prices in the totalPrice attribute.
BOM Object Version 10
This version adds the ecoFee
price and weight
to linear products if it's defined for any product based on the availability of the parameter ecoFeeCategory
.
BOM Object Version 9
This version adds the ecoFee
parameter in the price section if it is defined for any product. The ecoFee parameter adds the valid ecoFee price to the price section.
BOM Object Version 8
This version adds the support for the priceBestBoard
product parameter, that triggers the board algorithm on any product.
BOM Object Version 7
This version adds the boardID information to the worktop boards. These IDs are the same as the board numbers displayed in the 2DPlans, and in the worktop export.
BOM Object Version 6
This version adds the finance object to the BOM. This is used to propose and display a monthly pricing to the consumer.
BOM Object Version 5
This BOM version 5 add the attribute uuid to the Product definition. This unique identifier is added to all products directly inserted in the project. It can be used to maintain the link between the bathroom planner and the sales system.
BOM Object Version 4
The version 4 of the BOM add the attribute itemNote to the Product definition. The note associated to a product is typically used to convey instruction to the bathroom fitter.
BOM Object Version 3
The version 3 of the BOM introduce an optimization that share cover panel boards between several cabinets. Due to this optimization Top and bottom cover-panels are located in the “linears” section of the BOM. See Specific behavior in BOM Previously part of the assembly tree, top and bottom cover-panel elements do not appear in the “products” section of the BOM. Instead, a dedicated element is created in the “linears” section for each cover-panel reference. In the children of this element there is 1 BOM item for each board. Each board is defined with all regular BOM item attributes and the additional attributes position and furnitureList.
BOM Object Version 2
The version 2 of the BOM improve the price description for the total price and each product price. See Price. It introduces the board algorithm for worktops, wall panels and cover panels. See Specific Behavior in BOM. The pricing method linearPercentageByItem specific behavior in BOM is also provided. See Specific Behavior in BOM.
BOM Object Version 1
BOM Structure
Structure Example
"products": [
{
{see product structure description}
},
...
],
"linears": [
{
{see linear structure description}
},
...
],
"packs": [
{
(see pack structure description)
},
...
],
"decos": [
{
(see doco structure description)
},
...
],
"bays": [
{
(see bay structure description)
},
...
],
"totalPrice": (double),
"formattedTotalPrice": (string)
Structure Description
Context: This structure is sent through iframe messages in the application (ex: ProductListWithBOM). BOM is retrieved as an "Object".
High Level BOM Structure
▪ products: Array of objects - describing products in the scene (base cabinets, appliances, accessories..
▪ children: Array of objects – contain sub-components of the product
▪ linears: Array of objects - describing products related to linear (worktop, plinth)
▪ children: Array of objects – contain components/sub-components (i.e. cutout for wall panel board)
▪ packs: Array of objects - describing products that are bought by batch.
▪ decos: Array of objects - describing products related to decorations e.g. paint, wallpaper, tile, flooring.
▪ children: Array of objects – contain sub-components of the product
▪ bays: Array of objects - describing products related to bays e.g. openings, doors, windows.
▪ children: Array of objects – contain sub-components of the product
▪ totalPrice: Double - Total price of the bathroom
▪ formattedTotalPrice: String - Total price of the bathroom, formatted as per the current currency locale
Low Level BOM Structure
Product structure
Attribute | Description | Data Type | Example |
---|---|---|---|
dbID | Database ID of the product | String | "dbID": "13848" |
price | Product price | Number | "price": 50 |
formattedPrice | Product price | String | "formattedPrice": "£50" |
reference | Product reference | String | "reference": "BU_01" |
name | Product name | String | "name": "BU" |
typeID | The product closed tag ID of the product | Number | "typeID": 518 |
type | Furniture type | String | "type": "furniture" |
freeTags | Array of free tags associated to the furniture | Array of String | "freeTags": ["FurnitureConfigurator"] |
commercialDescription | Commercial description of the product | String | "commercialDescription": "Base Unit Generic" |
shortDescription | Short description of the product | String | "shortDescription": "Box assembly with frame, legs and cover panels" |
thumbnailURLLarge | Product thumbnail (size 512) | String | "thumbnailURLLarge": "https://xyz.jpg" |
thumbnailURLMedium | Product thumbnail (size 256) | String | "thumbnailURLLarge": "https://xyz.jpg" |
thumbnailURLSmall | Product thumbnail (size 64) | String | "thumbnailURLLarge": "https://xyz.jpg" |
startDate | Start date of the product availability (timestamp) | String | "startDate": "2016-12-12T00:00:00.000Z" |
endDate | End date of the product availability (timestamp) | String | "endDate": "2017-12-18T00:00:00.000Z" |
isExpired | True if the product was expired at the time of BOM generation | Boolean | "isExpired": false |
brandID | ID of the brand where the product is available | Number | "brandID": 1 |
brandName | Brand name | String | "brandName": "Bryo" |
width | Product width as defined in product information | Number | "width": 400 |
height | Product height as defined in product information | Number | "height": 800 |
depth | Product depth as defined in product information | Number | "depth": 370 |
Linear Structure
Attribute | Description | Data Type | Example |
---|---|---|---|
dbID | Database ID of the product | String | "dbID": " 14063" |
price | Product price | Number | "price": 50 |
formattedPrice | Product price | String | "formattedPrice": "£50" |
reference | Product reference | String | "reference": "DELAMINATE_1" |
name | Product name | String | "name": "DELAMINATE_1" |
typeID | The product closed tag ID of the product | Number | "typeID": 443 |
type | Furniture type | String | "type": " material" |
freeTags | Array of free tags associated to the furniture | Array of String | "freeTags": ["FurnitureConfigurator"] |
commercialDescription | Commercial description of the product | String | "commercialDescription": "Precut, 28mm Laminate" |
shortDescription | Short description of the product | String | "shortDescription": "Precut, 28mm Laminate" |
thumbnailURLLarge | Product thumbnail (size 512) | String | "thumbnailURLLarge": "https://xyz.jpg" |
thumbnailURLMedium | Product thumbnail (size 256) | String | "thumbnailURLLarge": "https://xyz.jpg" |
thumbnailURLSmall | Product thumbnail (size 64) | String | "thumbnailURLLarge": "https://xyz.jpg" |
startDate | Start date of the product availability (timestamp) | String | "startDate": "2016-12-12T00:00:00.000Z" |
endDate | End date of the product availability (timestamp) | String | "endDate": "2017-12-18T00:00:00.000Z" |
isExpired | True if the product was expired at the time of BOM generation | Boolean | "isExpired": false |
brandID | ID of the brand where the product is available | Number | "brandID": 1 |
brandName | Brand name | String | "brandName": "Bryo" |
width | Product width as defined in product information | Number | "width": 1860 |
height | Product height as defined in product information | Number | "height": 28 |
depth | Product depth as defined in product information | Number | "depth": 635 |
computedWidth | Value used only for linear products: width for the linear computed | Number | "computedWidth": 893 |
computedHeight | Value used only for linear products : height for the linear computed | Number | "computedHeight": 28 |
computedDepth | Value used only for linear products : depth for the linear computed | Number | "computedDepth": 635 |
quantity | Number of the same element | Number | "quantity": 1 |
linear | Value used only for linear products (e.g. calculated linear meter of a wall edge strip) | Number | "linear": 1.03 |
square | Value used only for linear products (e.g. calculated square meters of a wallpanel board) | Number | "square": 0.5 |
Pack structure
Same structure as "Product" with quantity value. Refer to the section "Product structure". Notice that price is unitary price of each pack element. You have to multiply quantity by price to get total price of the packs.
Decos Structure
Attribute | Description | Data Type | Example |
---|---|---|---|
dbID | Database ID of the product | String | "dbID": "74450" |
price | Product price | Number | "price": 50 |
formattedPrice | Product price | String | "formattedPrice": "€50" |
reference | Product reference | String | "reference": "oak_parquet" |
name | Product name | String | "name": "Oak Parquet" |
typeID | The product closed tag ID of the product | Number | "typeID": 355 |
type | Furniture type | String | "type": "material" |
freeTags | Array of free tags associated to the furniture | Array of String | "freeTags": ["material"] |
commercialDescription | Commercial description of the product | String | "commercialDescription": "Solid parquet is made from one and the same thickness of noble wood." |
shortDescription | Short description of the product | String | "shortDescription": "Oak parquet with different thickness.", |
thumbnailURLLarge | Product thumbnail (size 512 pixels) | String | "thumbnailURLLarge": "https://.../512.jpg" |
thumbnailURLMedium | Product thumbnail (size 256 pixels) | String | "thumbnailURLMedium": "https://.../256.jpg" |
thumbnailURLSmall | Product thumbnail (size 64 pixels) | String | "thumbnailURLSmall": "https://.../64.jpg" |
startDate | Start date of the product availability (timestamp) | String | "startDate": "2023-12-12T00:00:00.000Z", |
endDate | End date of the product availability (timestamp) | String | "endDate": "2024-12-18T00:00:00.000Z", |
isExpired | True if the product was expired at the time of BOM generation | Boolean | "isExpired": false |
brandID | ID of the brand where the product is available | Number | "brandID": 1 |
brandName | Brand name | String | "brandName": "Bryo" |
clientMetadata | Information from the product info of the product | String | "clientMetadata": {json} |
square | Value used only for decorations (e.g. calculated square meters of a parquet) | Number | "square": 26 |
quantity | Number of the same element | Number | "quantity": 1 |
materialTagName | The tag name used to identify the type of the decoration displayed in the item list | String | "materialTagName": "Hardwoods" |
Bays Structure
Attribute | Description | Data Type | Example |
---|---|---|---|
dbID | Database ID of the product | String | "dbID": "18848" |
price | Product price | Number | "price": 50 |
formattedPrice | Product price | String | "formattedPrice": "£50" |
reference | Product reference | String | "reference": "TW_031" |
name | Product name | String | "name": "VP" |
typeID | The product closed tag ID of the product | Number | "typeID": 252 |
type | Furniture type | String | "type": "opening" |
freeTags | Array of free tags associated to the furniture | Array of String | "freeTags": ["RemoveFromSearch"] |
commercialDescription | Commercial description of the product | String | "commercialDescription": "Double window" |
shortDescription | Short description of the product | String | "shortDescription": "Double window" |
thumbnailURLLarge | Product thumbnail (size 512) | String | "thumbnailURLLarge": "https://xyz.jpg" |
thumbnailURLMedium | Product thumbnail (size 256) | String | "thumbnailURLLarge": "https://xyz.jpg" |
thumbnailURLSmall | Product thumbnail (size 64) | String | "thumbnailURLLarge": "https://xyz.jpg" |
startDate | Start date of the product availability (timestamp) | String | "startDate": "2016-12-12T00:00:00.000Z" |
endDate | End date of the product availability (timestamp) | String | "endDate": "2017-12-18T00:00:00.000Z" |
isExpired | True if the product was expired at the time of BOM generation | Boolean | "isExpired": false |
brandID | ID of the brand where the product is available | Number | "brandID": 1 |
brandName | Brand name | String | "brandName": "Bryo" |
width | Product width as defined in product information | Number | "width": 1400 |
height | Product height as defined in product information | Number | "height": 800 |
depth | Product depth as defined in product information | Number | "depth": 370 |
BOM in Project metadata
Structure
"products": [
{
{see product structure description}
},
...
],
"linears": [
{
{see linear structure description}
},
...
],
"packs": [
{
(see pack structure description)
},
...
],
"decos": [
{
(see doco structure description)
},
...
],
"bays": [
{
(see bay structure description)
},
...
],
"totalPrice": (double),
"formattedTotalPrice": (string),
"locale": (string),
"currency": (string),
"distributionID": (string),
"version": (number),
Structure Description
Context: This structure is sent through project metadata web service (/projects/:projectID/metadata/2). As information is stored, product information needs to be refreshed before use. That is why there is less information than in the previous structure. BOM is retrieved as an "Object".
High Level BOM Structure
▪ products: Array of objects - describing products in the scene (base cabinets, appliances, accessories,...)
▪ linears: Array of objects - describing products related to linear (worktop, plinth)
▪ packs: Array of objects - describing products that are bought by batch.
▪ decos: Array of objects - describing products related to decorations e.g. paint, wallpaper, tile, flooring.
▪ bays: Array of objects - describing products related to bays e.g. openings, doors, windows.
▪ totalPrice: Double - Total price of the bathroom
▪ formattedTotalPrice: String - Total price of the bathroom, formatted as per the current currency locale
▪ locale: String - Combination of :
▪ MANDATORY: 2 letter code of a language, following ISO 639-1.
Refer to ISO 639-1 documentation 🔗
▪ OPTIONAL: 2 letter code of a region / country, following ISO 3166-1.
Refer to ISO 3166-1 documentation 🔗
▪ currency: String - 3 letter string following ISO 4217
▪ distributionID: Application Distribution ID (Refer to ISO 4217 documentation 🔗)
▪ version: The iframe version. It drives the data structure of the returned BOM items.
Low Level BOM Structure
Product/Linear/Pack Structure
Attribute | Description | Data Type | Example |
---|---|---|---|
dbID | Database ID of the product | String | "dbID": " 14063" |
computedWidth | Value used only for linear products : width for the linear computed | Number | "computedWidth": 893 |
computedHeight | Value used only for linear products : height for the linear computed | Number | "computedHeight": 28 |
computedDepth | Value used only for linear products : depth for the linear computed | Number | "computedDepth": 635 |
quantity | Number of the same element | Number | "quantity": 1 |
linear | Value used only for linear products (e.g. calculated linear meter of a wall edge strip) | Number | "linear": 1.03 |
square | Value used only for linear products (e.g. calculated square meters of a wallpanel board) | Number | "square": 0.5 |
nomenclatureNumber | Number of the furniture in the 2D plan (only pieces of furniture have it) Refer to Numbering 🔗 | Number | "nomenclatureNumber":1 |
front | In case of an edge finish product and precise whether this one is a front edge | Boolean | "front": false |