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
Shot Peening / Media Blasting
How to price shot peening and media blasting as a surface-area-driven post-process, including a Level 2 area-based algorithm and review flags for complex geometry.
Creating a Custom Post-Process
A guide to building a custom post-process equation from one of three templates - flat fee, percentage of process price, or geometry-based - plus shared rules for all post-process equations.