PricingDeep DiveLevel 2 - Post-Process Deep Dives

Thread Inserts

How to price heat-set thread inserts in Phasio using a Level 2 equation that reads an operator-entered count exposed as a Level 1 variable.

What this process does

Heat-set brass or stainless steel inserts (M2-M12) are pressed into printed holes using a soldering iron or press. They provide durable threaded connections in plastic parts.

This is one of the cleanest examples of the Level 1 -> Level 2 communication pattern in Phasio: the number of inserts isn't calculable from geometry alone, so Level 1 exposes it as a variable() for the operator to fill in, and Level 2 reads it to calculate the post-process charge.


Level 2 equation

const threadInsertCount = variable('Thread insert count', 0)
const threadInsertType = variable('Thread insert M size', 2)
// ... rest of your pricing & duration logic ...
// one could distinguish between different types, sizes and quantites with variable inputs

const RATE_PER_INSERT = 1.50 // this may depend on type and size
const MIN_CHARGE      = variable('Minimum charge', 0)  // 0 = no minimum (inserts are optional)

const calculatedCost = round(insertCount * RATE_PER_INSERT, 2)
const unitPrice      = variable('unitPrice', Math.max(MIN_CHARGE, calculatedCost))
const totalTimeInH = threadInsertCount * 2/60 // convert from minutes to hours

done(unitPrice, totalTimeInH)

This creates a visible "Thread insert count" field in the Phasio quote UI. The operator types the number of inserts when they review the order.


Size-dependent rates

If you charge differently for small vs large inserts, use a lookup. The insert size typically correlates with the model file name or a custom specification - or just expose multiple variable() fields at Level 2

// Level 2: separate counts per size
const m3Inserts = variable('M3 insert count', 0)
const m5Inserts = variable('M5 insert count', 0)
const m8Inserts = variable('M8 insert count', 0)

const M3_RATE = variable('M3 rate', 1.20)
const M5_RATE = variable('M5 rate', 1.80)
const M8_RATE = variable('M8 rate', 2.50)

const totalCost = (m3Count * M3_RATE) + (m5Count * M5_RATE) + (m8Count * M8_RATE)
const unitPrice = variable('unitPrice', round(totalCost, 2))
done(unitPrice)

Notes

  • If the operator doesn't fill in the insert count, it stays at 0 and the post-process charges €0 - which is correct (no inserts = no charge, but the pricing gate is triggered for manual review).
  • This same pattern works for any manually-counted feature: threaded holes, colour changes, label placement, custom finishing.

Last updated on

On this page