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.
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.
Column | Description |
---|---|
Type | Select one of the type described above. |
Price | Enter any number above 0, including decimal numbers. This is the price excluding taxes of the product. |
Currency | Select in the drop-down list the currency in which the price is expressed. |
Start date / End date | Enter 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 Type | Description |
---|---|
regular | This is the price of the product without any discount. |
membership | This is a variant of the regular price for a discount for members. |
reduced | This 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.
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.
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.
Below are the supported pricing paramaters:
Key (Attribute) | Type | Possible values | Default values |
---|---|---|---|
pricingMethod | string |
| regular |
packAmount | number | A number greater or equal to 2 | – |
percentage | number | A number up to two digits | – |
directionParameter | string |
| width |
directionParameters | Array of string | The array can contain any combination of the following parameters:
| [] |
publicationParameters | Array of object | A configuration array for the pricing method regularWithPublications | [] |
roundingMethod | string |
| ceil |
notPricedOnFrontEdge | boolean |
| false |
📌 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 values | Description |
---|---|
regular | The normal pricing of 1 product unit. For every product sold by unit, including precut linears. |
linearMeter | The price for 1 linear meter, for custom linear products only. |
squareMeter | The price for 1 square meter (m2). |
pack | The 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. |
packPerCabinet | The 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. |
linearFeet | The pricing for 1 linear feet, for custom linear products only. |
squareFeet | The price for 1 square feet (ft2). |
linearPercentageByItem | The 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. |
regularWithPublications | This 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, itslength
parameter will be considered.
Total length is... | Calculation |
---|---|
≤width of one product | Add one piece of the specified item to the item list. |
>width of one product | 1. 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 methodlinearPercentageByItem
for total quantity and price calculation.
IfdirectionParameter
attribute is not present for pricing and quantity calculation, the default value used iswidth
.
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 thepriceBestBoard
parameter ( see priceBestBoard).priceBestBoard
is a product parameter to define on the parent generic product, wheredirectionParameters
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.
pricingMethod | number of parameters expected in directionParameters |
---|---|
regular | 0 (directionParameters can be ommited in this case) |
linearMeter | 1 |
squareMeter | 2 |
linearFeet | 1 |
squareFeet | 2 |
Example:
{
"pricingMethod": "squareMeter",
"directionParameters": [ "width", "height" ]
}
The publicationParameters
Attribute
❗️ The
publicationParameters
attribute is always used with theregularWithPublications
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:
key | type | status | description |
---|---|---|---|
product | string | mandatory | The name of the publication parameter. Your product must have a parameter of type "product" with this name. |
dimensions | array of strings | optional | A 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. |
meshArea | boolean | optional | The boolean indicates whether the area of the publication will be calculated based on mesh 3D. If the value is true, the surface of the publication will be based on 3D instead of using the parameters defined dimensions . |
Example 1:
{
"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)
Example 2:
{
"pricingMethod": "regularWithPublications",
"publicationParameters": [
{
"product": "seatPublication",
"meshArea": true
},
{
"product": "cushionPublication",
"meshArea": true
}
]
}
In the above example, the total price of the product will be:
total price = self product price + (price of the seatPublication product * area of the seatPublication product) + (price of the cushionPublication product * area of the cushionPublication product)
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.561 | 4.57 | 4.56 | 4.56 |
4.565 | 4.57 | 4.57 | 4.56 |
4.569 | 4.57 | 4.57 | 4.56 |
The notPricedOnFrontEdge
Attribute
❗️ The kitchen planner only checks the
notPricedOnFrontEdge
in the prices of type "regular". So thenotPricedOnFrontEdge
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 = true | isFrontEdgePriced = false | |
---|---|---|
notPricedOnFrontEdge = true | front edge NOT priced | front edge NOT priced |
notPricedOnFrontEdge = false | front edge priced | front 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 Name | Parameter Type | Status | Default Value | Possible Values | Function |
---|---|---|---|---|---|
priceBestBoard | boolean | optional | false | [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 squareFeetdirectionParameters
(mandatory ifpricingMethod
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
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
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":
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.
➡️
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.
Reduced Price
Displayed when at least one product has a reduced price and when no product has a membership price.
Membership Price
Displayed when at least one product has a membership price.
Ecofee Price
Eco-fee is added to every pricing.
Total Project Price
Standard price
Displayed when no products of the projects have a discounted price.
Reduced Price
Displayed when at least one product has a reduced price AND when no product has a membership price.
Membership Price
Displayed when at least one product has a membership price.
📌 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.
📌 Products with free tag "RemoveFromPlans" will not have any price.