Skip to main content

How price adjustment models work

Use this article when you need to choose how a category turns its raw step costs into a final quoted price, or want to understand which markup the price breakdown is showing.

S
Written by Styrbjörn Holmberg

Use this article when you need to choose how a category turns its raw step costs into a final quoted price, or when you are reading a quote and want to understand which markup the price breakdown is showing. After this you will know what each of the three adjustment models does, how each one computes the final price, and where the result lands in the price breakdown.

What a price adjustment model is

A price adjustment model is the rule that turns the six cost buckets a quote produces (substrate, other material, labor, machine, outwork, and delivery) into the final price the customer sees. Every category in Estimate Setup is configured with one adjustment model, chosen in Pricing Setup under Category Pricing. The step price model decides what each step costs before the adjustment model fires; the adjustment model decides what the customer is charged on top of those costs.

GelatoConnect Estimator supports three adjustment models:

  • VA Percentage (VA%) — mark up the value-add by a percentage of cost.

  • VA per Press Hour — target a value-add euro figure for every press hour the job consumes.

  • Gross Profit Percentage (GP%) — target a gross profit percentage measured against the full final price.

The model the category uses changes the math, the label that appears in the price breakdown markup row, and the figure the operator can adjust on the quote.

The six cost buckets

Before any adjustment runs, each step's cost is sorted into one of six buckets. The buckets are the unit the markup math works on.

Bucket

What goes in it

Substrate

Paper and any other substrate the job consumes.

Other Material

Plates, inks, foils, laminates, and consumables that are not the primary substrate.

Labor

Operator hours costed at the labor rate, including packing and finishing hands-on time.

Machine

Machine hours costed at the machine rate (press time, finishing equipment time).

Outwork

Steps the shop subcontracts out to a third party.

Delivery

Shipping and packaging costs that flow into the quote.

Each step's price model writes one or more of these buckets. The adjustment model never re-bucketises costs — it only marks them up.

VA Percentage (VA%)

What it targets. A uniform percentage markup applied to the value-add on every bucket. The shop sets a per-bucket markup percentage on the category; the model adds that percentage of bucket cost to the bucket total.

The formula.

final_price = sum( bucket_cost * (1 + bucket_markup_pct / 100) )
              for bucket in [substrate, other_material, labor,
                             machine, outwork, delivery]

The cost stays as-is. The markup is added on top, one bucket at a time, and the bucket totals are summed to produce the final price. Because each bucket carries its own percentage, machine-heavy work can carry a different markup than substrate-heavy work without the operator changing the model.

Worked example. Northgate Press runs a Stitched Book on the XL105 with these category markups: substrate 15%, machine 50%, labor 50%, delivery 10%, other material 0%, outwork 0%. After the step price models finish, the buckets hold:

Bucket

Cost

Markup %

Total

Substrate

200.00

15%

230.00

Machine

260.00

50%

390.00

Labor

107.27

50%*

158.00

Outwork

0.00

0%

0.00

Other Material

0.00

0%

0.00

Delivery

72.73

10%

80.00

Final price

640.00

858.00

Labor mixes finishing labor at 50% and a small packaging labor portion at 10% from the delivery part — both feed the same labor bucket in the breakdown.

The final price sits above the cost sum because the markup is added, not subtracted. The price breakdown shows the markup row as VA percentage with the computed VA% of (858 - 640) / 640 = 34.06%.

VA per Press Hour

What it targets. A flat euro value-add per hour of press time. The shop sets the target VA-per-hour on the category; the model sizes the markup so that the value-add divided by press hours equals the target.

The formula.

fixed_cost          = total_material_cost + total_outwork_cost
                      (everything except the press-driven value-add)
target_va           = target_va_per_press_hour * press_hours
final_price         = fixed_cost + target_va
va_per_press_hour   = (final_price - fixed_cost) / press_hours

If press hours are zero, the model degrades to fixed cost only — there is no press time to mark up. If a pricing rule or operator override tries to push VA-per-hour below zero, the model keeps the baseline rather than producing a negative price.

Worked example. Northgate Press runs a job that produces a baseline quote of €1,000 with 5 press hours on the XL105, €200 of substrate cost, and €100 of outwork cost. The model splits fixed cost from press-hour value-add:

fixed_cost   = 200 + 100                       = 300
baseline_va  = 1000 - 300                       = 700
baseline_vph = 700 / 5                          = 140 (€ per press hour)

The price breakdown shows the markup row as VA per press hour at €140.00. The final price is €1,000.

A pricing rule then adds +€10 to VA-per-press-hour for this customer segment. The model recomputes:

new_vph        = 140 + 10                       = 150 €/h
new_va         = 150 * 5                        = 750
new_final     = 300 + 750                       = 1,050

The breakdown VA-per-press-hour row updates to €150.00; the final price moves to €1,050.00. The shop's reasoning is auditable: every press hour on this job is now worth €150 of value-add.

Gross Profit Percentage (GP%)

What it targets. A gross profit percentage measured against the full final price (not against cost). The shop sets the target GP% on the category; the model sizes the final price so that the gap between price and cost equals the requested share of price.

The formula.

gp_pct       = (final_price - total_cost) / final_price * 100
final_price  = total_cost / (1 - gp_pct / 100)
total_cost   = sum( original_bucket_cost )    # the un-marked-up cost
markup_value = final_price - total_cost

The price moves up rather than down because the model is grossing the price up to leave the target margin share inside it. A 30% GP target means 30% of every euro quoted is gross profit; the remaining 70% covers cost. GP% above 100% is not meaningful and is rejected by the model.

Worked example. Northgate Press configures the Stitched Book category with a 30% GP target. The same job produces a total cost of €640.00 across the six buckets (the same buckets from the VA% example above). The model computes:

final_price  = 640 / (1 - 30/100)             = 640 / 0.70  = 914.29
markup_value = 914.29 - 640                                  = 274.29
gp_pct       = 274.29 / 914.29 * 100                          = 30.00

The price breakdown shows the markup row as Gross profit percentage at 30.00%. The final price is €914.29. Note this is a different final price than the VA% example produced on the same costs — the two models are answering different questions, even when they run on the same buckets.

Walking the full calculation chain on one job

Northgate Press quotes a Stitched Book of 1,000 copies on Silk 130gsm B1. The category is configured with Gross profit percentage at 30%. The end-to-end chain runs as follows.

  1. Step costs (paper-calculation step price model). Each part of the book contributes its own steps, costed by the step price model and written into the buckets:

Part

Step

Bucket(s)

Original cost

Inner

Paper

Substrate

130.43

Inner

Print

Machine + Labor

80.00 + 53.33

Inner

Cut

Machine

30.00

Inner

Fold

Machine

23.33

Cover

Paper

Substrate

69.57

Cover

Print

Machine + Labor

40.00 + 26.67

Cover

Cut

Machine

16.67

Cover

Crease

Machine

26.67

Cover

Fold

Machine

13.33

Binding

Saddle stitch

Machine + Labor

30.00 + 20.00

Delivery

Ship + pack

Delivery + Labor

72.73 + 7.27

  1. Bucket totals. Summing the original costs into the six buckets gives:

Bucket

Total cost

Substrate

200.00

Machine

260.00

Labor

107.27

Outwork

0.00

Other Material

0.00

Delivery

72.73

Total cost

640.00

  1. Adjustment model applied. The category's GP target is 30%, so the model grosses the price up:

   final_price = 640.00 / (1 - 0.30) = 914.29
   markup      = 914.29 - 640.00     = 274.29

The markup is distributed back across the buckets in proportion to their cost, so each bucket row in the breakdown also shows a per- bucket markup column.

  1. Rebate applied. The customer has a 10% standing rebate. The rebate grosses the final price up further so the shop recovers the full €914.29 after the rebate payout cycle:

   quote_total = 914.29 / (1 - 0.10) = 1,015.88
   rebate_line = 1,015.88 - 914.29   = 101.59

See How rebates work in a GelatoConnect Estimator quote for the full rebate behaviour.

  1. What the operator sees on the quote.

   Subtotal (cost+markup)   €914.29
   Rebate (10%)             €101.59
   Final price              €1,015.88

The Gross profit percentage row in the price breakdown reads 30.00%. The cross-calculated VA-per-press-hour and VA% rows are shown too, so the operator can compare the three figures without switching models.

The chain above is the same calculation the backend's price-adjustment tests run; the worked numbers come from the stitched-book test fixture cited in the evidence packet.

Which model to pick

If your shop targets…

Pick this model

Because…

A uniform markup percentage on the value-add, with per-bucket flexibility

VA Percentage

Each bucket carries its own markup, so material-heavy and labor-heavy work can be priced differently without changing the model.

A fixed euro figure of value-add per press hour, regardless of cost mix

VA per Press Hour

The model sizes the markup off press time, which matches shops that price by capacity rather than by cost.

A margin percentage on the full sale, measured the way finance reports it

Gross Profit Percentage

GP% is the same number the P&L reports, so the category target and the finance target match without conversion.

A shop with mixed work can use a different model per category — for example, GP% on Hardback Books and VA per Press Hour on Folded Leaflets. The price-breakdown markup row always shows the model the category is currently configured with.

What this affects

  • The final quoted price. The adjustment model is the last step that changes the price before the rebate gross-up and any manual price adjustment run.

  • The markup row in the price breakdown. The row label changes with the model — VA percentage, VA per press hour, or Gross profit percentage — and the row value is the model's headline number.

  • Route comparison. When alternative routes are calculated for the same job, each route's final price is produced by this same model on that route's bucket totals. The operator compares the totals directly.

What this does not affect

  • The base step costs. The step price models (paper-calculation, area-calculation, custom-cost) compute each step's cost before any adjustment fires. Changing the adjustment model never changes the cost in a bucket — it only changes how that cost rolls up into a final price.

  • The rebate line. The rebate is applied after the adjustment model using the gross-up formula described in the rebate Concept article. Changing the adjustment model does not change the rebate percentage.

  • Manual price adjustments. Operator-entered overrides on the quote (set-to, add, reduce) operate on the price the adjustment model produced. They are layered after the model, not inside it.

  • Cost-of-goods-sold accounting. The bucket original costs that flow to finance and reporting are the cost figures, unchanged by the markup.

Related articles

Did this answer your question?