Skip to main content

Set Up the Pricing

❗️ Pricing has a strong dependency with

the Application Distribution parameters🔗.

Each product and article of the catalog can be detailed with one (or several) price. The Pricing tab in 3DCloud contains a table where prices can be specified, each row corresponding to one type of price.

Pricing

A distinction must be made between component-products and product-assemblies that are both products in 3DCloud and in the catalog and that can both priced or not. When pricing a product that is an assembly of other products, the final price of the product depends on the value of the application distribution parameter priceTopAssembly of the pricingOptions object 🔗.

  • If the parameter is set to 'true' then, both the assembly and the sub-component products count in the final price.
  • If the parameter is set to 'false' then, the final price is computed with the sub-component products and without the price of the top assembly.

For example in the case of a drawer and handle sub-assembly: If 'true', the calculation will be drawer price + handle price + sub-assembly price. If 'false, the calculation will be drawer price + handle price.


Pricing Table

To set up a price, specify the table in the Pricing tab.

ColumnDescription
TypeSelect one of the type described above.
PriceEnter any number above 0, including decimal numbers. This is the price excluding taxes of the product.
CurrencySelect in the drop-down list the currency in which the price is expressed.
Start date / End dateEnter or pick-up a date in the calendar to specify the period of validity of the price: ▪️ The start date can be the date of the day or a later date if you want to postpone the validity period. ▪️ The end date must be later than the start date, but can be empty. Outside this range, the price will not be applied. If both fields are empty, the date range will be infinite and the price always valid.

📌 Dates are formatted according to the language defined in the application distribution. For every country, there is a language locale(s) 🔗. For example: en-GB is for Great Britain (English), fr-FR for France (French). The currency is inferred from the locales used in the application.


Pricing Types

There are four types of pricing: "regular", "membership", "reduced" or "ecoFee". These types are strings that you have to specify when adding a price (use camel case).

Pricing TypeDescription
regularThis is the price of the product without any discount.
membershipThis is a variant of the regular price for a discount for members.
reducedThis is a variant of the regular price with a discount excluding membership.

📌 Pricing types cannot be mixed to create a new price: e.g. a membership discount cannot be applied to a reduced price to create a specific price.

The Eco-Fee Price

The eco-fee is limited to the French market and is a fee that the customer must pay in consideration of waste recycling.

The eco-fee price is displayed next to to another price type (for example, regular price). The eco-fee exposed in the product card is not an additional amount but a part of it, as the other price type (for example regular price) already contains this amount.

There are two different types of eco- fee labels for the different waste recycling initiatives in France: DEEE and WEEE.

DEEE

The Range Manager can define for each product which label should be shown in the card by adding either "DEEE" or "WEEE" as free tag. From this free tag, the platform will match the associated translation and show this on the product card.

Illustrations

The illustrations of a product card below shows:

  • The difference between two translations depending on the free tags "DEEE" or "WEEE".
  • Two different prices (regular and membership) and the part of the eco-fee.

DEEEWEEE


Pricing Parameters

For each row in the table, click Add parameters on the right to specify the parameters.

The entered text must be a valid JSON object (do not forget to add double-quotes around the attribute keys) written as a string.

Pricing parameters

Below are the supported pricing paramaters:

Key (Attribute)TypePossible valuesDefault values
pricingMethodstring▪️ regular ▪️ linearMeter ▪️ squareMeter ▪️ pack ▪️ packPerCabinet ▪️ linearFeet ▪️ squareFeet ▪️ linearPercentageByItem▪️ regularWithPublicationsregular
packAmountnumberA number greater or equal to 2
percentagenumberA number up to two digits
directionParameterstring▪️ width ▪️ height ▪️ depthwidth
directionParametersArray of stringThe array can contain any combination of the following parameters: ▪️ width ▪️ depth ▪️ height[]
publicationParametersArray of objectA configuration array for the pricing method regularWithPublications[]
roundingMethodstring▪️ ceil ▪️ round ▪️ floorceil
notPricedOnFrontEdgeboolean▪️ true ▪️ falsefalse

📌 There can be a regular type with a regular method.

The pricingMethod Attribute

This attribute will be taken into account only for linear products such as worktops, wall-panels, plinths, etc.

For precut linears, this attribute will NOT be taken into account as precut linears are always priced with the regular method.

For pack products, only the regular price value is taken into account. If you want to have a pack with a different amount or define the product price by a different method, you need to make another product.

Possible valuesDescription
regularThe normal pricing of 1 product unit. For every product sold by unit, including precut linears.
linearMeterThe price for 1 linear meter, for custom linear products only.
squareMeterThe price for 1 square meter (m2).
packThe price for 1 product pack, independently of the number of units in the pack. When this method is chosen, it is mandatory to also define the packAmount attribute. This means that the products priced by pack will be at the level of the entire project.
packPerCabinetThe pricing in pack for 1 complete cabinet. When this method is chosen, it is mandatory to also define the packAmount attribute. This means that the product priced by pack will be at the level of the furniture.
linearFeetThe pricing for 1 linear feet, for custom linear products only.
squareFeetThe price for 1 square feet (ft2).
linearPercentageByItemThe sum of the continuous total length of the product in the project, with a percentage applied. This percentage MUST be provided in the additional attribute percentage on the pricing object. The dimension of products summed can be precised with directionParameter. This calculation method is reserved for products that can be considered as linears. e.g. Plinth, Fixation Rail.
regularWithPublicationsThis corresponds to a regular pricing (price of 1 product unit) to which are added the prices of each defined publications. Publications must be defined with the additional attribute publicationParameters. This can be useful if you don't want to have each publication as a specific sub-product in the BMA of your product.
Calculation of the linearPercentageByItem Value

To compute the total length of the product used in the project, the calculation will take into account the width parameter of every top-assembly on which this product is present and then, sum them up. In the case of a corner cabinet, the length of the sides touching the wall are considered. The total length includes the cover panels that are in the project.

❗️ If the width parameter is not available for the product holding this pricing method then, its length parameter will be considered.

Total length is...Calculation
width of one productAdd one piece of the specified item to the item list.
>width of one product1. Add the percentage value (see below) defined by the Range Manager in the pricing method to the total length computed. 2. Divide the new total length by the width of the product. 3. Round up the final value to the next equal catalog item width, i.e. 2 * 1 catalog item width, 3 * 1 catalog item width, etc. which results in the quantity of items to add to the item list. The final result is then added to the "linears" section of the Bill of Material (BOM).

❗️ Note that if a product holding this pricing method is present in the root product assembly (i.e. is part of the 3D resource) then, the corresponding item in the BOM will be removed from the "products" section because such items are priced separately in the "linears" section of the BOM. This will prevent the item from being billed several times.

Calculation of the regularWithPublications Value

The price of a product with the regularWithPublications pricing method is computed as follows:

product price = self price + publication1 price + publication2 price + ...

The price of a publication is computed as follows:

publication price = price of the publication product * dimension1/1000 * dimension2/1000 * ...

Note: the dimension parameter values must be expressed in millimeter like every dimensions in the ByMe platform. They are each divided by 1000 to represent a value in meters. The publication price must be expressed in meter dimensions ( linear meter, square meter, etc.).

See the publicationParameters configuration attribute 🔗 for more details.

The percentage Attribute

The percentage attribute is an optional parameter, that can be defined as an additional value of the pricing method linearPercentageByItem.
This value is a number greater than or equal to 0 and lower than 100. The value is added to the total width of the linear product to perform both the pricing and the calculation of the quantity of products.

For example, for plinths 🔗 that are a linear product, a percentage of 15 is added to the total length of plinths around the combination of cabinets in the project.

{
"pricingMethod":"linearPercentageByItem",
"percentage":15
}

The directionParameter Attribute

❗️ The directionParameter attribute is always used with pricing method linearPercentageByItem for total quantity and price calculation.
If directionParameter attribute is not present for pricing and quantity calculation, the default value used is width.

The directionParameter can either be:

  • "width": Performs pricing and quantity calculation based on the width of product.

Example:

{
"pricingMethod": "linearPercentageByItem",
"percentage": 0,
"directionParameter": "width"
}
  • "height": Performs pricing and quantity calculation based on height of product.

Example:

{
"pricingMethod": "linearPercentageByItem",
"percentage": 0,
"directionParameter": "height"
}
  • "depth": Performs pricing and quantity calculation based on the depth of product.

Example:

{
"pricingMethod": "linearPercentageByItem",
"percentage": 0,
"directionParameter": "depth"
}

The directionParameters Attribute

❗️ The directionParameters attribute is always used with the priceBestBoard parameter ( see priceBestBoard). priceBestBoard is a product parameter to define on the parent generic product, where directionParameters is a pricing attribute to define on the children priced boards. It indicates what dimensions are used to compute the board size.

The directionParameters is an array of parameter names. Supported parameters are:

  • "width": calculate board size based on the width of product.
  • "depth": calculate board size based on the depth of product.
  • "height": calculate board size based on the height of product.

It can be a combination of 2 of the above parameters as well, if you are pricing the board with the squareMeter or squareFeet pricing method.

The following table indicates how many parameters are expected in the directionParameters depending on the pricingMethod set on the board product.

pricingMethodnumber of parameters expected in directionParameters
regular0 (directionParameters can be ommited in this case)
linearMeter1
squareMeter2
linearFeet1
squareFeet2

Example:

{
"pricingMethod": "squareMeter",
"directionParameters": [ "width", "height" ]
}

The publicationParameters Attribute

❗️ The publicationParameters attribute is always used with the regularWithPublications pricing method.

The publicationParameters is an array of object, each object representing a publication to add to the product price.
The following table indicates the expected attributes of each publication objects in this array:

keytypedescription
productstringThe name of the publication parameter. Your product must have a parameter of type "product" with this name.
dimensionsarray of stringsA list of dimension parameter names for the publication. Your product must have a parameter of type "real" or "integer" for each of these dimension names.

Example:

{
"pricingMethod": "regularWithPublications",
"publicationParameters": [
{
"product": "seatPublication"
"dimensions": [ "width", "depth" ]
},
{
"product": "cushionPublication"
"dimensions": [ "cushionWidth", "cushionDepth" ]
}
]
}

In the above example, the total price of the product will be:

total price = self product price + (price of the seatPublication product * width/1000 * depth/1000) + (price of the cushionPublication product * cushionWidth/1000 * cushionDepth/1000)

The packAmount Attribute

The value of the packAmount attribute represents how many product items are in one pack. It will be taken into account for legs, handles and shelves. The value is a number greater than or equal to 2 with no upper limit.

Example 1

A product have a pricingMethod equal to pack and a packAmount of 4 and this product is used 9 times in the entire project. The rounding method is ceil.

{"pricingMethod":"pack","packAmount":4,"roundingMethod":"ceil"}

Because 9/4 = 2.25 and Math.ceil(9/4) = 3 then, 3 packs will be priced.

Example 2

A shelf has a pricingMethod equal to packPerCabinet and a packAmount of 2. The rounding method is ceil.

There are 9 shelves for three cabinets in the projects, each one having a different number of shelves. The shelf will be priced in different pack associated to the furniture.

{"pricingMethod":"packPerCabinet","packAmount":2,"roundingMethod":"ceil"}

For cabinet 1 with 2 shelves: Math.ceil(2/2) = 1;

For cabinet 2 with 3 shelves: Math.ceil(3/2) = 2;

For cabinet 3 with 4 shelves: Math.ceil(4/2) = 2;

❗️ The rounding method for quantities is always the first superior rounding integer when the packAmount attribute is used.

The roundingMethod Attribute

❗️ The kitchen planner only checks the rounding method in the prices of type "regular". So the roundingMethod attribute must be added to the parameters of the regular price of a product. Rounding method on discounted prices is always ignored.

The rounding method can either be:

  • "ceil": Rounds the price/measurement to the smallest number with two decimals that is greater than or equal to the real number.
  • "round": Rounds the price/measurement to the number with two decimals that is the closest number (up or down) to the real number.
  • "floor": Rounds the price/measurement to the largest number with two decimals that is less than or equal to the real number.

Below is a table with three different prices to illustrate the rounding methods:

Price"ceil""round""floor"
4.5614.574.564.56
4.5654.574.574.56
4.5694.574.574.56

The notPricedOnFrontEdge Attribute

❗️ The kitchen planner only checks the notPricedOnFrontEdge in the prices of type "regular". So the notPricedOnFrontEdge attribute must be added to the parameters of the regular price of a product.

The notPricedOnFrontEdge attribute represents whether a front edge of the worktop will be priced or not. The default value is "false", which indicates by default a front edge product is priced. It takes into accounts only for the front edge of the worktop, not other type of edge.

The table below shows the combination result of setting both the value of isFrontEdgePriced and notPricedOnFrontEdge.

isFrontEdgePriced = trueisFrontEdgePriced = false
notPricedOnFrontEdge = truefront edge NOT pricedfront edge NOT priced
notPricedOnFrontEdge = falsefront edge pricedfront edge NOT priced

For example, if both isFrontEdgePriced and notPricedOnFrontEdge are set to true, the front edge product will not be priced.

The priceBestBoard parameter

❗️ This parameter is not a price attribute. It should not be added in the pricing parameters like the above attributes, but rather as a product parameter of type boolean. The reason is that this parameter affects generic products, and this kind of products don't have prices.

The priceBestBoard product parameter tells whether the board algorithm should be used to price the product. If set to true, the board algorithm is used, and if set to false (or if the parameter is not present), the board algorithm is not used. See the board algorithm documentation for more information.

Parameter NameParameter TypeStatusDefault ValuePossible ValuesFunction
priceBestBoardbooleanoptionalfalse[true, false]Defines whether the board algorithm should be used to price this product.

When using the priceBestBoard on the parent generic product, the following pricing attributes become available to set on the children board products:

  • pricingMethod (optional), with the the following supported values : regular, linearMeter, squareMeter, * linearFeet* and squareFeet
  • directionParameters (mandatory if pricingMethod is not regular)

Display the Price in the Planner

These pricing methods are used to display prices at different times to the customer:

  • The price of each catalog item
  • The price of the project during the planning
  • The price of the whole project in the final card

Catalog Browser

Price in catalog browser

The price displayed on product cards in the catalog correspond to the price set on the product in 3DCloud.

For assembly products, the price displayed is the price set on the top-assembly only.

📌 It is possible to disable the price display in the catalog browser for assembly products by using the Application Distribution

parameter assemblyCatalogPrice🔗.

Other products:

parameter nonAssemblyCatalogPrice🔗.

Project Price

Price of the project

The project price is the sum of all priced products inserted in the current project: any single product, assembly products, articles (e.g dampers), linears, etc.

Assembly products are priced by summing up the prices of every sub-products that are a component of the assembly.

The project price is displayed at several different places in the planner and is updated to reflect your current step in the application.

Currency and Taxes Display

The price display in the planner is defined by setting the current currency.

The current currency is inferred from the locale defined in the Application Distribution parameters🔗 or by the locale url parameter if provided.

You can set the currency setting by calling locale currency web services. Otherwise, you will inherit the default ones defined by the ByMe platform.

➡️ Refer to the API 🔗 and is reference documentation for detailed information.

A route exists to have a preview of your settings (/preview).

Do not hesitate to use this route after changing some parameters. Among them, the parameter named vatString. The string value of this parameter is displayed in a block next to the price in the Finalize step, to indicate if the price includes taxes or not.

In the example below, vatString has been set to "VAT included":

vatString


Pricing Rules

A product should NOT have a reduced and a membership price available at the same time in a given currency.

If this situation still happens, the planner will use the lowest of the candidate prices and the other(s) will be ignored. Thus, the styling will depend on the lowest of discounted prices.

No validation is performed to check that the discounted price is lower than the regular price. If the discounted price happens to be greater than the discounted price, then the planner will show the low value as the former price and the big value as the current price.

Regular price and Membership price will also show the product price start date and end date.

Eco-Fee is shown separately next to the price although the amount of the eco-fee is de facto part of the price amount displayed.


Pricing Default Styling

The planner comes with a default styling for prices.

➡️

See Customize Brand Settings

for detailed information on how Brands override the default pricing styling.

Product Price

Standard Price

Displayed when no products of the projects have a discounted price.

vatString

Reduced Price

Displayed when at least one product has a reduced price and when no product has a membership price.

vatString

Membership Price

Displayed when at least one product has a membership price.

vatString

Ecofee Price

Eco-fee is added to every pricing.

vatString

Total Project Price

Standard price

Displayed when no products of the projects have a discounted price.

vatString

Reduced Price

Displayed when at least one product has a reduced price AND when no product has a membership price.

vatString

Membership Price

Displayed when at least one product has a membership price.

vatString

📌 If there is a mix of membership priced and reduced priced products, the membership styling will be applied, and the lowest price will be the sum of all reduced and membership prices.
In the price of the total project, from-date is the earliest start date and end-date is the earliest end date. It is calculated on the basis of all product date and the earliest of start and end date of product is shown.


Visibility of Products in 2D Plans

The main purpose of 2D plans is to help the installer of the kitchen. Showing accessories makes reading the plans difficult, especially in top view. So accessories should be hidden in all 2D plan views.

If freetag on the product is set as "RemoveFromPlans" then it will not be visible in any 2D plan.

vatString

📌 Products with free tag "RemoveFromPlans" will not have any price.