CE CAD EVAL
Answers Needed Admin Back to CAD EVAL Sign in
What this page is. Every number in this tool is either measured from your CAD, derived from something measured, or asserted by someone. This lists the asserted ones, and the decisions nobody has made yet — in the order that unblocks the most.

Section 4 is generated from the rate tables on every page load, not typed here. Mark a constant UNSOURCED in its own description and it appears; get it quoted, remove the marker, and it leaves. A hand-kept list of things to verify goes stale exactly like the numbers it describes.

1  ·  Before any real company data goes in

First because it gates the rest of the page. Nothing below can be answered with your own parts until it is done.

QuestionWhy it blocksWho
Who is allowed to see saved estimates? /estimates is open to anyone who finds the URL and holds customer names, project numbers and quoted prices. Until this is closed, real parts cannot go through the tool — which means the calibration data in section 2 cannot start accumulating.
Cheapest fix is an nginx IP allow-list on /estimates and /admin/. No login system to build.
IT + you
One instance, or a separate training one? A training instance keeps practice quotes out of the production database — same codebase, different data directory. On a single instance, every trainee's number becomes calibration data. You

2  ·  Answers that decay — delay is unrecoverable

These cannot be answered in a sitting. They accumulate in real time or not at all.

QuestionWhy it decaysWho
What did these parts actually quote for? The only measurement that says whether the tool is right overall. Because errors in the model can cancel each other out, no single rate below can be validated on its own — only a finished estimate against a real quote. There are currently zero real recorded actuals. A quote received last month and not written down is gone.
The fields — price, supplier, tooling — are already built and waiting on every saved estimate.
You / buyers
Which revision was quoted? Recording an actual today overwrites yesterday's. If a part is re-estimated after a design change and compared against a quote for the previous revision, the resulting "error" is the design moving, not the model being wrong — and it biases the whole corpus one way. Needed before the corpus is built, not after. Us — to build

3  ·  Rates that need a real shop quote

Ranking is by cost, so every recommendation inherits these. Ordered by how far each moves a landed price — measured with the Rate Sensitivity sweep, not guessed.

RateNowThe problem
Machining — complex rate $120/hr Quote this one first. Any part needing more than 3 setups is priced at it, and real parts mostly need 8–13 — so it touches nearly everything while the base rate barely does. Moves landed cost +7.6% per 10%: ranked #1 of every constant in the tool.
Machining — base rate $85/hr Above the entire published 3-axis band of $35–75. But it moves landed cost only +0.6% per 10% — ranked #10, so it matters far less than it looks.
A rate above its band, on a model that under-counts time, is the signature of two errors cancelling. Do not correct it alone.
Injection molding — press rates above ~300 t $125/hr at 1000 t The $0.6–1.2 per tonne rule of thumb implies $600–1,200/hr. The two agree at 100 t and diverge 5–10× by 1000 t.
Do not "fix" this from the rule — extrapolated, it implies $2,400/hr at 2000 t, which is not what large presses quote.
Sheet metal — bend time 15 s Corrected from 30 s against 503 real parts. Now the first number to check, because bend count is measured exactly and no longer absorbs an error here.

Before writing a quoted number straight into the tables: correcting one rate without its underlying geometric driver can make the finished estimate worse. That has already happened here — a bend count reading 4 on a part with 16 real bends, against a bend time roughly 2× too high; fixing only the count flipped a part to the wrong process. Check the finished estimate against a real quote, not the constant against a published range.

4  ·  Values shipped unsourced 88 — live from the rate tables

Each prices something real that used to be counted as zero, so each is an improvement on nothing. None has been checked with a supplier.

ConstantValueWhat it is, and what to ask
tool_life_prototype
im_tooling_constants
10000 Tool life in SHOTS for the prototype aluminium mold tier. Program shots are annual volume x program years divided by cavities; a program needing more shots than one tool lasts must buy another -- a $100k mold on a 1.5M-shot program at 500k life is $300k of tooling and not $100k. Published ranges are wide (aluminium 5k-100k)
UNSOURCED - verify against your toolmaker
tool_life_production
im_tooling_constants
500000 Tool life in SHOTS for the P20 steel production mold tier. Program shots are annual volume x program years divided by cavities; a program needing more shots than one tool lasts must buy another -- a $100k mold on a 1.5M-shot program at 500k life is $300k of tooling and not $100k. Published ranges are wide (P20 250k-1M)
UNSOURCED - verify against your toolmaker
tool_life_hardened
im_tooling_constants
1000000 Tool life in SHOTS for the hardened steel mold tier. Program shots are annual volume x program years divided by cavities; a program needing more shots than one tool lasts must buy another -- a $100k mold on a 1.5M-shot program at 500k life is $300k of tooling and not $100k. Published ranges are wide (H13/S7 1M+)
UNSOURCED - verify against your toolmaker
hole_time_sec_base
machining_constants
6.0 Fixed seconds per drill cycle for rapid/approach/retract/clear — dominates on small shallow holes
UNSOURCED — verify against your shop
hole_feed_mm_per_sec
machining_constants
2.5 Drilling feed through material (mm/s) blended across materials
UNSOURCED — verify against your shop
accuracy
turning_constants
0.25 ± price range shown around the point estimate. Turning is a simpler cost model than milling — one axis, one or two operations — but its rates are brand new and unverified, so the band is held at milling's 0.25 rather than tightened
UNSOURCED - narrow this only once a turned part has been quoted against a real shop
turning_rate_vs_milling
turning_constants
2.0 The per-material turning rates in turning_materials.csv were set at this multiple of the same alloy's milling removal rate. A lathe takes a continuous cut on a rigid, rotating workpiece and removes material substantially faster than an end mill, but the exact figure is an assumption, and it is the single biggest unanchored number in the turning model
UNSOURCED - ask a turning shop what they hog 6061 at, and tune the material rows rather than this constant
cutting_time_buffer
turning_constants
1.10 Multiplier on roughing time covering rapids, approach and retract between passes. Lower than milling's 1.15 because a lathe repositions far less — the tool stays engaged along the profile
UNSOURCED - verify against your shop
bar_oversize_in
turning_constants
0.125 Extra diameter bought over the finished OD. Bar stock comes in fixed sizes and arrives with mill tolerance and scale that has to be cleaned up on the first pass
UNSOURCED - verify against your stockist
tube_bore_undersize_in
turning_constants
0.125 How much SMALLER the bought tube's bore is than the finished bore. The mirror of bar_oversize_in on the inside: tube arrives with mill tolerance and scale on the ID too, and a bore machined to size needs material to take out. Without this the model buys tube whose ID is already the finished size, which leaves nothing to cut and prices the boring pass at zero
UNSOURCED - verify against your stockist
finish_passes
turning_constants
1.0 How many finishing passes the profile gets at the finish feed rate
UNSOURCED - verify against your shop
soft_jaw_adder
turning_constants
150.0 Per-lot cost of turning a set of soft jaws to hold a part that cannot run in a collet — a large OD, a thin ring, or a second-op grip on a finished surface
UNSOURCED - verify against your shop
second_op_setup_minutes
turning_constants
20.0 Extra setup minutes when the part has to come off the lathe for off-axis features — a second operation on a mill. Charged per lot like any other setup
UNSOURCED - verify against your shop
tool_life_prototype
thermoforming_tooling_constants
5000 Tool life in SHOTS for the wood or epoxy prototype tool tier. Program shots are annual volume x program years divided by cavities; a program needing more shots than one tool lasts must buy another -- a $100k mold on a 1.5M-shot program at 500k life is $300k of tooling and not $100k. Published ranges are wide (1k-10k)
UNSOURCED - verify against your toolmaker
tool_life_production
thermoforming_tooling_constants
250000 Tool life in SHOTS for the cast or machined aluminium tool tier. Program shots are annual volume x program years divided by cavities; a program needing more shots than one tool lasts must buy another -- a $100k mold on a 1.5M-shot program at 500k life is $300k of tooling and not $100k. Published ranges are wide (100k+; vacuum forming loads a tool far less than injection does)
UNSOURCED - verify against your toolmaker
trim_time_production_sec
thermoforming_process_constants
10.0 Automated in-line trim-press time per shot - production tooling. Stays FLAT on purpose: a dedicated trim die cuts the whole outline and every hole in one press stroke, so unlike router trimming it barely depends on trim path length
UNSOURCED - verify against your shop
trim_time_prototype_sec
thermoforming_process_constants
15.0 Manual/router trim HANDLING per part - prototype tooling (no dedicated trim die). Load, fixture and unload only: the cutting itself is now path-driven (trim_router_mm_per_sec below). Was 45.0 as a flat whole-trim figure, which charged a 200mm tray and a 1200mm panel the same
UNSOURCED - verify against your shop
trim_router_mm_per_sec
thermoforming_process_constants
25.0 Router feed rate when trimming a formed part without a dedicated die - prototype tooling only. Trim path length is measured from the model's parting-line loop, which on a formed part IS the trim line
UNSOURCED - verify against your shop
trim_router_hole_sec
thermoforming_process_constants
8.0 Added router seconds per hole or cutout - prototype tooling only (plunge, circle, retract). A production trim die punches holes in the same stroke as the outline, so this does not apply there
UNSOURCED - verify against your shop
cut_overhead_sec
sheetmetal_process_constants
8.0 Fixed per-part laser overhead - sheet positioning and rapid moves between features. Piercing was bundled in here at 15.0s until 2026-09-15 as one flat figure regardless of hole count; it is now counted per pierce below and this was reduced accordingly. Raising it without lowering pierce time would double-count
UNSOURCED - verify against your shop
pierce_time_sec_base
sheetmetal_process_constants
0.8 Laser pierce time per hole - the plunge that starts each closed contour before cutting begins. Cut length already includes hole perimeters (the flat pattern derives it from surface area) so this is the pierce ONLY not the cutting
UNSOURCED - verify against your shop
pierce_sec_per_mm
sheetmetal_process_constants
0.35 Additional pierce seconds per mm of gauge - a 6mm plate pierces far slower than 0.6mm sheet. Same shape as machining's hole_feed_mm_per_sec
UNSOURCED - verify against your shop
post_processing_min_per_part
additive_process_constants
8.0 Depowder / support removal / cleanup minutes per part
UNSOURCED - verify against your shop. This is ~28% of the price of a small SLS part here, and a published worked example (25 cm3 PA12, 50-part batch) implies nearer 3 minutes rather than 8. Left at 8 for want of a second source, so it is deliberately generous - the first additive number to check.
tool_life_prototype
investment_tooling_constants
5000 Tool life in SHOTS for the prototype wax die tier. Program shots are annual volume x program years divided by cavities; a program needing more shots than one tool lasts must buy another -- a $100k mold on a 1.5M-shot program at 500k life is $300k of tooling and not $100k. Published ranges are wide (1k-10k wax patterns)
UNSOURCED - verify against your toolmaker
tool_life_production
investment_tooling_constants
100000 Tool life in SHOTS for the aluminium wax injection die tier. Program shots are annual volume x program years divided by cavities; a program needing more shots than one tool lasts must buy another -- a $100k mold on a 1.5M-shot program at 500k life is $300k of tooling and not $100k. Published ranges are wide (50k-100k+)
UNSOURCED - verify against your toolmaker
turn_max_swing_mm
process_capability
500 CNC turning — largest diameter a typical lathe can swing over the bed
UNSOURCED - verify against your shop's machine list
turn_finish_ra_um
process_capability
0.8 CNC turning — best as-turned surface roughness Ra in micrometres without a secondary operation. Finer than milling: a continuous cut on a rotating part leaves a better surface than an interrupted one
UNSOURCED - verify
tf_undercut_max_frac
process_capability
0.02 Thermoforming - undercut share a single-sided tool can tolerate. It cannot form real undercuts AT ALL, so this is a noise allowance, not a design allowance. Was 0.10, which let a water pump housing through at 0.074 and recommended thermoforming for it as the CHEAPEST option, with no caveat. Measured across the fixtures: parts that genuinely form read ZERO (thermoformed_tray 0.0000, bucket 0.0000) and the noisiest non-forming part read 0.0077, against the housing's 0.0740. 0.02 sits an order of magnitude below the housing and 2.6x above the worst observed noise
UNSOURCED - rests on ONE confirmed thermoformed part, same caveat as tf_draw_ratio_min
im_heat_set_insert
im_secondary_ops
0.08 / 0.25 / 45 Heat-set insert (brass), installed. Cost is the insert, minutes are the install. Per INSERT
UNSOURCED - verify against your shop
im_heat_stake
im_secondary_ops
0.00 / 0.15 / 260 Heat or ultrasonic staking - a molded boss melted over to capture a second component. Per STAKE
UNSOURCED - verify against your shop
im_ultrasonic_weld
im_secondary_ops
0.0 / 0.2 / 350 Ultrasonic weld joint. Per JOINT. Setup is the horn and nest
UNSOURCED - verify against your shop
im_pad_print
im_secondary_ops
0.02 / 0.15 / 180 Pad printing, ONE color. A two-color mark is two of these. Per COLOR
UNSOURCED - verify against your shop
im_paint_mask
im_secondary_ops
0.55 / 0.35 / 220 Painted surface, including masking. Per PART
UNSOURCED - verify against your shop
im_degate_hand
im_secondary_ops
0.0 / 0.18 / 0 Hand degating and sprue dressing where the tool does not self-degate. Per PART
UNSOURCED - verify against your shop
im_assembly
im_secondary_ops
0.0 / 0.45 / 70 Assembling a second component (snap, screw, gasket). Per OPERATION, excludes the part being fitted
UNSOURCED - verify against your shop
mach_deburr
machining_secondary_ops
0.01 / 0.4 / 0 Hand deburr and edge break. Per PART
UNSOURCED - verify against your shop
mach_anodize
machining_secondary_ops
0.45 / 0.1 / 95 Anodize. Cost is the plater's line charge, minutes are racking. Per PART
UNSOURCED - verify against your supplier
mach_plating
machining_secondary_ops
0.55 / 0.1 / 110 Zinc or nickel plating. Per PART
UNSOURCED - verify against your shop
mach_passivate
machining_secondary_ops
0.22 / 0.08 / 85 Passivation for stainless. Per PART
UNSOURCED - verify against your shop
mach_heat_treat
machining_secondary_ops
0.2 / 0.05 / 140 Heat treat. Per PART, usually batched, so setup dominates at low volume
UNSOURCED - verify against your shop
mach_bead_blast
machining_secondary_ops
0.05 / 0.25 / 40 Bead blast or media finish. Per PART
UNSOURCED - verify against your shop
mach_inspection
machining_secondary_ops
0.0 / 1.2 / 160 First-article or CMM inspection. Per PART inspected, not per lot
UNSOURCED - verify against your shop
turn_deburr
turning_secondary_ops
0.0 / 1.5 / 0 Deburr and break sharp edges after turning. Per PART
UNSOURCED - verify against your shop
turn_thread_single_point
turning_secondary_ops
0.0 / 2.5 / 0 Single-point threading on the lathe. Per PART
UNSOURCED - verify against your shop
turn_knurl
turning_secondary_ops
0.0 / 1.2 / 0 Knurl a gripping surface. Per PART
UNSOURCED - verify against your shop
turn_cross_hole
turning_secondary_ops
0.0 / 1.0 / 120 Off-axis hole drilled in a second operation on a mill. Per PART, and the setup is what actually costs
UNSOURCED - verify against your shop
turn_grind_od
turning_secondary_ops
0.0 / 4.0 / 180 Cylindrical grind the OD to a tolerance turning cannot hold. Per PART
UNSOURCED - verify against your shop
turn_anodize
turning_secondary_ops
0.65 / 0.1 / 65 Anodize. Per PART, batched
UNSOURCED - verify against your shop
turn_passivate
turning_secondary_ops
0.45 / 0.1 / 55 Passivate stainless after machining. Per PART, batched
UNSOURCED - verify against your shop
turn_heat_treat
turning_secondary_ops
1.20 / 0.1 / 140 Heat treat and temper. Per PART, batched
UNSOURCED - verify against your shop
dc_deburr_tumble
diecasting_secondary_ops
0.03 / 0.3 / 80 Deburr and tumble. Media is the consumable, minutes are the handling share. Per PART
UNSOURCED - verify against your shop
dc_machined_feature
diecasting_secondary_ops
0.05 / 0.45 / 120 Machined feature after casting - a drilled and tapped hole, a faced datum. Per FEATURE
UNSOURCED - verify against your shop
dc_shot_blast
diecasting_secondary_ops
0.04 / 0.2 / 70 Shot blast to clean the as-cast surface. Per PART
UNSOURCED - verify against your shop
dc_impregnate
diecasting_secondary_ops
0.12 / 0.1 / 150 Vacuum impregnation to seal porosity. Usually only for pressure-tight castings. Per PART
UNSOURCED - verify against your shop
dc_chromate
diecasting_secondary_ops
0.18 / 0.1 / 95 Chromate or conversion coating. Per PART
UNSOURCED - verify against your shop
dc_powder_coat
diecasting_secondary_ops
0.7 / 0.2 / 130 Powder coat or paint. Per PART
UNSOURCED - verify against your shop
dc_leak_test
diecasting_secondary_ops
0.02 / 0.5 / 240 Pressure or leak test. Per PART tested
UNSOURCED - verify against your shop
dc_trim_hand
diecasting_secondary_ops
0.0 / 0.35 / 0 Hand trim of flash where there is no trim die. Per PART
UNSOURCED - verify against your shop
tf_drilled_hole
thermoforming_secondary_ops
0.0 / 0.18 / 55 Hole drilled after forming, BEYOND the router trim path. Per HOLE. Router trimming is already priced by trim_router_hole_sec - use this only for holes the trim step does not cut, or it double-counts
UNSOURCED - verify against your shop
tf_edge_finish
thermoforming_secondary_ops
0.02 / 0.3 / 45 Sanding or flame-polishing the trimmed edge. Per PART
UNSOURCED - verify against your shop
tf_decorate
thermoforming_secondary_ops
0.06 / 0.1 / 120 Applied label or printed mark. Per PART
UNSOURCED - verify against your shop
tf_bonded_insert
thermoforming_secondary_ops
0.09 / 0.3 / 90 Bonded or ultrasonically staked insert. Per INSERT
UNSOURCED - verify against your shop
tf_joining
thermoforming_secondary_ops
0.15 / 0.55 / 180 Bonding or welding two formed parts. Per JOINT
UNSOURCED - verify against your shop
tf_die_cut
thermoforming_secondary_ops
0.01 / 0.12 / 260 Die-cut detail added after forming. Per FEATURE
UNSOURCED - verify against your shop
sm_pem_insert
sheetmetal_secondary_ops
0.11 / 0.12 / 40 Pressed insert - PEM-style nut or standoff. Per INSERT
UNSOURCED - verify against your shop
sm_weld_joint
sheetmetal_secondary_ops
0.02 / 0.55 / 90 Welded joint. Per JOINT, not per part
UNSOURCED - verify against your shop
sm_deburr
sheetmetal_secondary_ops
0.01 / 0.35 / 0 Deburr and edge break. Per PART
UNSOURCED - verify against your shop
sm_tapping
sheetmetal_secondary_ops
0.02 / 0.2 / 50 Tapped hole. Per HOLE
UNSOURCED - verify against your shop
sm_powder_coat
sheetmetal_secondary_ops
0.85 / 0.15 / 110 Powder coat. Cost is the coater's charge, minutes are hanging and handling. Per PART
UNSOURCED - verify against your supplier
sm_plating
sheetmetal_secondary_ops
0.4 / 0.12 / 100 Zinc plating or chromate. Per PART
UNSOURCED - verify against your shop
sm_silkscreen
sheetmetal_secondary_ops
0.07 / 0.12 / 140 Silk screen or applied label. Per PART
UNSOURCED - verify against your shop
sm_hardware_assy
sheetmetal_secondary_ops
0.0 / 0.4 / 60 Fitting hardware that is not pressed - screws, standoffs, gaskets. Per OPERATION
UNSOURCED - verify against your shop
am_support_removal
additive_secondary_ops
0.0 / 0.5 / 0 Support removal and cleanup. Heavily geometry-dependent, this is a flat allowance. Per PART
UNSOURCED - verify against your shop
am_bead_blast
additive_secondary_ops
0.04 / 0.2 / 35 Bead blast to an even matte finish. Per PART
UNSOURCED - verify against your shop
am_sanding
additive_secondary_ops
0.03 / 1.1 / 0 Hand sanding toward a paintable surface. Per PART
UNSOURCED - verify against your shop
am_vapor_smooth
additive_secondary_ops
0.3 / 0.15 / 180 Vapor smoothing. Per PART, batched
UNSOURCED - verify against your shop
am_dye
additive_secondary_ops
0.25 / 0.12 / 90 Dyeing. Per PART, batched
UNSOURCED - verify against your shop
am_paint
additive_secondary_ops
0.9 / 0.8 / 200 Priming and painting. Per PART
UNSOURCED - verify against your shop
am_heat_set_insert
additive_secondary_ops
0.08 / 0.3 / 45 Heat-set insert into a printed part. Per INSERT
UNSOURCED - verify against your shop
am_machined_feature
additive_secondary_ops
0.04 / 0.55 / 120 Machined feature added after printing, where printed tolerance will not hold. Per FEATURE
UNSOURCED - verify against your shop
ic_gate_removal
investment_secondary_ops
0.02 / 0.55 / 0 Gate removal and grinding the witness flat. Per PART
UNSOURCED - verify against your shop
ic_shot_blast
investment_secondary_ops
0.05 / 0.2 / 70 Shot blast to clean the shell residue. Per PART
UNSOURCED - verify against your shop
ic_heat_treat
investment_secondary_ops
0.25 / 0.05 / 160 Heat treat. Per PART, batched
UNSOURCED - verify against your shop
ic_straighten
investment_secondary_ops
0.0 / 0.6 / 50 Straightening after heat treat. Per PART
UNSOURCED - verify against your shop
ic_machined_feature
investment_secondary_ops
0.06 / 0.5 / 130 Machined feature after casting. Per FEATURE
UNSOURCED - verify against your shop
ic_passivate
investment_secondary_ops
0.22 / 0.08 / 85 Passivation. Per PART
UNSOURCED - verify against your shop
ic_penetrant
investment_secondary_ops
0.08 / 0.45 / 120 Dye-penetrant inspection. Per PART inspected
UNSOURCED - verify against your shop
ic_xray
investment_secondary_ops
0.0 / 0.8 / 420 X-ray or radiographic inspection. Per PART inspected - usually a sample, not every part
UNSOURCED - verify against your shop

5  ·  Values resting on a single example

Set honestly against the one part available. One part can tell you a limit is not obviously wrong; it cannot tell you it is in the right place.

QuestionWhere it standsWhat would settle it
When is a part too shallow to thermoform? Minimum area draw ratio 1.8 — set between the deepest molded part measured (1.6) and the one confirmed thermoformed part (2.1). A shallow thermoformed part: a blister, lid or clamshell. If one reads below 1.8, the tool is currently rejecting work it should be quoting.
When does a thermoformed wall thin too far? Two limits nobody chose against each other: the estimator warns at draw ratio 2.0, the screen rejects at 2.5. The one confirmed thermoformed part sits at 2.07 — it passes the screen, then warns about itself. A second thermoformed part, then pick one definition and keep it.
Do turned parts and die castings price correctly? Neither has a real fixture in the test set. Every other process does. One turned part and one die casting, ideally with a known quote.

6  ·  Decisions with no right answer yet

DecisionWhat hangs on it
On a multi-body model, which body is screened? The estimator panels make you pick a body. The process screen does not — it silently uses the first one, while pairing it with the whole model's volume and surface area. A process can be ruled out on a body you never picked. Either screen the whole assembly, or make the picker ask first, the way the panels already do.
Should there be a "lite" estimate? A ballpark from fewer inputs. Worth doing only if it shares one engine with the detailed estimate and differs by a wider uncertainty band rather than a different number — otherwise the tool has two answers for one part and no way to say which is right.
How wide should the accuracy band be? A fixed ±25% on machining today, from your own figure. A band that widens when the tool had to assume more would be honest; right now it reads the same whether every input was measured or defaulted.

Sections 1–3 change what this tool is worth. Sections 4–7 are the detail underneath them.