Grade Jump Riser Pricing

Introduction #

Grade Jump Riser Pricing is part of our configurable product support. If you haven't set that up, please refer to the documentation using the links below,

Riser Pricing is an advanced pricing mechanism similar to matrix pricing. It enables you to price products very precisely based on fabric grade, leather grade, or other factors.

It works very well for custom upholstery companies with existing grade jump riser pricing schedules.

If you're already using, or considering using, matrix pricing, riser pricing may help save you work and better reflect how you price your products at your company.

Related Documentation #

The Calculation #

If a user selects a product and configures that product for a specific set of options we calculate the price as follows.

For reference, the price is calculated as:

ProductBasePrice + RiserBasisPrice + RiserAmount * RiserCount

What each term means #

  • ProductBasePrice is the normal base price for the product.
    • This could be a matrixed price, but is usually the catalog price.
    • In other words, riser pricing adds a riser price amount to the normally calculated price.
  • RiserBasisPrice is the starting amount of the add-on for upholstery.
    • This could be a negative number. If you merchandise your catalog pricing, this will allow you to reset to a better starting place for riser pricing
    • This value comes from the product file.
  • RiserAmount is the amount of each grade jump.
    • E.g. if Grade 1 is $2,660 and Grade 2 is $2,680, the RiserAmount is $20.
    • This value comes from the product file.
  • RiserCount is the number of risers to apply to the basis price.
    • E.g. in the above example, if Grade 1 is 1, then Grade 2 would be.
    • This value comes from the option_groups.csv file.

Configuring Riser Pricing #

There are three main components to setting up grade jump riser pricing:

  • Configuring riser prices—Specify what the risers are for each product and option group
  • Configuring option groups—Specify the riser count for each option group
  • Configuring products—Specify which option types are riser prices

Configuring Riser Prices #

The purpose of the riser prices file (riser_prices.csv) is to provide the information on what riser values go with which products and/or options.

Field name

Required?

Length

Comments

BaseItemCode

Yes

N/A

The product this riser pricing row goes with

OptionGroupCodes1..20

Yes (this may change)

N/A

The option group codes this riser pricing row goes with. If these are absent/blank, the row will be used for all options.

RiserAmount

Yes

N/A

The price per riser for price levels based on NetAmount.

RiserAmount_<ad hoc price code>

Yes, if you use ad hoc prices

N/A

The price per riser for price levels based on ad hoc prices.

BasisPrice

No

N/A

The basis price used for the riser calculation for price levels based on NetAmount. See the equation above. If this is absent, it will be treated as 0.

BasisPrice_<ad hoc price code>

No

N/A

The basis price used for the riser calculation for price levels based on ad hoc prices. See the equation above. If this is absent, it will be treated as 0.


Configuring Option Groups #

In order to use grade jump riser pricing, you need to import options and option groups via our file import process. It is possible to define and maintain options via our admin interface, but we don't currently support grade jump pricing there.

For full documentation on the option group file format, see the relevant documentation. For riser pricing, there is one additional column:

Field name

Required?

Length

Comment

GradeJumpRiserCount

N

8

How many risers to add to the basis price. See the equation above.


Configuring Products #

New column: "OptionSet<n>RiserPrice" in products.csv. Operates just like the Matrixed equivalent. If unpopulated, interpreted as if it's not there.

Examples #

Following are a couple example configurations.

Simple Upholstery Configuration #

Assume a simple upholstery configuration, fabric only:

  • A single product, item (or style) XYZ123
  • Fabric is option type 1
  • 5 fabric grades, option group codes FAB1-5
  • COM is defined as grade 2, option group code COM
  • Catalog price of XYZ123 is $1000
  • No ad hoc prices used

In your current price list you may have something like this:

Grade 1

$1000

Grade 2/COM

$1050

Grade 3

$1100

Grade 4

$1150

Grade 5

$1200

With the above setup, your riser prices file could be as simple as:

BaseItemCode

OptionGroupCodes1

RiserAmount

XYZ123

FAB1,FAB2,FAB3,FAB4,FAB5,COM

50

or

BaseItemCode

OptionGroupCodes1

RiserAmount

BasisPrice

XYZ123

FAB1,FAB2,FAB3,FAB4,FAB5,COM

50

0

Note: This may change. The OptionGroupCodes1 column is currently required, but we can safely remove that requirement.

Note the basis price is 0, because we're adding onto the catalog price of $1,000. Basis price can be used as a "fudge factor" to adapt the catalog price (what shows in the grid view) to the first fabric grade. E.g. if your product lists at $1,000, but your grade 1 fabric is $1,200, you can set your BasisPrice column to $200.

Your OptionGroups file would look something like:

Code

Name

Options

GradeJumpRiserCount

FAB1

Fabric Grade 1

<option codes>

0

FAB2

Fabric Grade 2

<option codes>

1

FAB3

Fabric Grade 3

<option codes>

2

FAB4

Fabric Grade 4

<option codes>

3

FAB5

Fabric Grade 5

<option codes>

4

COM

Customer's Own Material

<option codes>

1

Note the following:

  • Fabric grade 1 has a riser count of 0.
    • This is because, per the price list, grade 1 is the same as the catalog price, so we're off by one for each of the riser counts.
    • If you changed the riser BasisPrice to $50 in the riser prices file, you could make the riser count 1 for fabric grade 1 in this case.
  • COM's riser count is the same as FAB2's. This is how we define COM to be the same price as FAB2.

Upholstery with fabric and leather, same product/style number

Building on the previous example, let's say product XYZ123 has both fabric and leather, and that leather has a different set of prices.

  • There are 3 leather grades: LEA1-3
  • COL is defined as leather grade 1

Your price list may have something like:

LEA1/COL $2000
LEA2 $2200
LEA3 $2400

Your riser prices file would now look like:

BaseItemCode OptionGroupCodes1 RiserAmount BasisPrice
XYZ123 FAB1,FAB2,FAB3,FAB4,FAB5,COM 50 0
XYZ123 LEA1,LEA2,LEA3,COL 200 1000

And your option groups file would look like:

Code Name Options GradeJumpRiserCount
FAB1 Fabric Grade 1 <option codes> 0
FAB2 Fabric Grade 2 <option codes> 1
FAB3 Fabric Grade 3 <option codes> 2
FAB4 Fabric Grade 4 <option codes> 3
FAB5 Fabric Grade 5 <option codes> 4
COM Customer's Own Material <option codes> 1
LEA1 Leather Grade 1 <option codes> 0
LEA2 Leather Grade 2 <option codes> 1
LEA3 Leather Grade 3 <option codes> 2
COL Customer's Own Leather <option codes> 0

Note the following:

  • We have a new column, OptionGroupCodes, in the riser prices file. This way we can pick one set of riser prices for one set of option groups, and a different set of riser prices for a different set of option groups.
  • The leather row in the riser prices has a basis price of $1000. This is how we get from the catalog price of $1000 to the Leather Grade 1 price of $2000.

Simple upholstery with ad hoc prices

Similar to the "Simple upholstery configuration" above, with the following change:

  • Instead of just net price-based pricing, there is also an ad hoc price, specified in the product file as price_retail. ("retail" is the price code).

If the price list looks like this:

Wholesale

Retail

Grade 1

$1000

$2050

Grade 2/COM

$1050

$2150

Grade 3

$1100

$2250

Grade 4

$1150

$2350

Grade 5

$1200

$2450

And the "price_retail" column in the product file is $2050.

Then the riser prices file would look like:

BaseItemCode

OptionGroupCodes1

RiserAmount

RiserAmount_retail

XYZ123

FAB1,FAB2,FAB3,FAB4,FAB5,COM

50

100