Review Required Gate
How the review-required gate holds a part back from the customer until you manually approve its price, with patterns for triggering it.
The review-required gate holds a part back from the customer until you've manually approved the price. While active: the price is hidden on the storefront and the customer cannot check out.
Use it for parts outside your normal operating range - oversized geometry, exotic materials, unusually high quantities, or any combination you want to price manually before committing.
How it works
- Your equation calls
done(price, duration, true)- or any expression that evaluates totrue - The customer sees a "price under review" message instead of a price; checkout is disabled
- You open the order in Phasio, review the part, and set a price manually (or approve the calculated one)
- Once all flagged parts have a price, the customer can proceed
Your equation still runs to completion. The internally calculated price is visible to your team and can be approved as-is.
The done() signature
done(price) // no review
done(price, duration) // no review, with duration
done(price, duration, reviewRequired) // reviewRequired is a boolean expression
// Object style — equivalent, useful for readability
done({ price: calculatedPrice, reviewRequired: true })Available at Level 1 and Level 2. Not available at Level 3.
Automatic triggering
The gate also fires automatically if the computed price is falsy, negative, or NaN - for example, if a required material.variables key is missing and the formula produces an unexpected result.
This means customers will never see a broken or zero-price quote without you setting reviewRequired explicitly.
Patterns
Part exceeds machine dimensions
const { width, length, height } = specification
const MAX_X = 340 // mm — adjust to your machine
const MAX_Y = 340
const MAX_Z = 580
const reviewRequired = width > MAX_X || length > MAX_Y || height > MAX_Z
done(unitPrice, 0, reviewRequired)Price out of expected range
const reviewRequired = unitPrice > 1000
done(unitPrice, 0, reviewRequired)Useful as a sanity check: if your equation produces an unexpectedly high price, catch it before the customer sees it.
Material requires manual pricing
const MANUAL_MATERIALS = ['Inconel 625', 'Ti-6Al-4V', 'Carbon PEEK']
const reviewRequired = MANUAL_MATERIALS.includes(specification.material.name)
done(unitPrice, 0, reviewRequired)Quantity too high
const reviewRequired = requisition.quantity > 500
done(unitPrice, 0, reviewRequired)Production time too long
const totalHours = round(buildHours + setupHours, 1)
const reviewRequired = totalHours > 120
done(unitPrice, totalHours, reviewRequired)Unsupported material / colour combination
const isUnsupported = specification.material.name === 'TPU' && specification.color === 'White'
done({ price: computeBasePrice(), reviewRequired: isUnsupported })In a Level 2 post-process equation
const handlingFee = variable('1: Handling fee', 2)
const finishFee = processPricing.price * variable('2: % of part price', 0.15)
const finalUnitPrice = variable('3: Override unit price', round(handlingFee + finishFee, 2))
const reviewRequired = finalUnitPrice > 500
done(finalUnitPrice, 2, reviewRequired)Fully manual quoting (always review)
// This process is never auto-priced — every order goes to manual review
done({ price: 0, reviewRequired: true })Useful for exotic materials or bespoke services where no formula can reliably produce a price.
Combining multiple conditions
const oversized = Math.max(length, width, height) > 300
const highRemoval = (minBoundingBoxVolume - volume) / minBoundingBoxVolume > 0.90
const openMesh = revision.watertight === 0
const thinWall = revision.minimumWallThickness < 0.8
const reviewRequired = oversized || highRemoval || openMesh || thinWall
done(unitPrice, printTimeHours, reviewRequired)Each condition is independent. The gate fires if any of them is true.
What happens to the calculated price
When reviewRequired is true, your equation's price argument is still stored internally. In Phasio you'll see:
- The equation's calculated price as a starting point
- All
variable()fields (print time, machine, support volume, etc.) visible for context - Override controls to set the final price manually
You can approve the calculated price with one click, or type a different value.
Last updated on
Level 3 - Order Level Pricing
How to price at the order level - running once per order to apply minimum fees, volume discounts, post-processing minimums, and shipping costs across the whole cart.
Reference - Variables, Functions & Types
Complete technical lookup for Phasio pricing equations: built-in functions, the specification, requisition, revision and processPricing objects, the level cheat sheet, and a debugging guide.