| basis | No | Where the figures at `quantity` come from: 'priced' (the ordered lot, exact), 'curve_point' (recorded on the calculation's lot-size curve while pricing) or 'restated' (priced from the same closed form the curve was built from). Null when the calculation records no lot-size curve. | |
| error | No | Why this calculation produced no price, in one sentence, when its status is terminal (failed / cancelled). | |
| status | Yes | | |
| persona | Yes | The persona view this result is sliced for. | |
| currency | No | The calculation's currency; every money figure here is in it. | |
| features | No | | |
| guidance | Yes | | |
| machines | No | | |
| quantity | No | The lot size this result is stated at: the calculation's own ordered lot unless `quantity` was passed, in which case the headline, the times and the cost tier are all at that lot size. | |
| cost_band | No | [low, high] prediction band for the unit cost. Stated at the lot the calculation was priced at only: the band is fitted to that run and does not carry to another quantity. | |
| unit_cost | No | Unit cost per part at `quantity`, BEFORE the cost-sheet surcharges the costing environment states. The price to quote is offer_price. | |
| confidence | No | Quote-trust signal — the headline the procurement / supplier persona reads with the band before trusting the should-cost. | |
| cost_lines | No | The itemised cost sheet as a tree — every category with the tiers beneath it, each carrying its time, its rate and the factors that move it. | |
| operations | No | | |
| setup_cost | No | Setup cost for the whole lot at `quantity`, in `currency` — the sheet's setup line times the lot. | |
| total_cost | No | unit_cost for the whole lot at `quantity`, before the cost-sheet surcharges. | |
| offer_price | No | The offer price per unit — unit_cost plus the cost-sheet surcharges the costing environment states; equal to unit_cost when no sheet is stated. The SAME figure arcnm_explain_cost states, so the shareable procurement headline is the price, not the bare manufacturing cost. Absent on older calculations. | |
| unit_time_s | No | Time per unit at `quantity`, in seconds, across every activity: machine time plus the bench work plus the per-part programming and inspection shares. One meaning at every lot size, and never smaller than `machine_time_s`. Null at a lot size a calculation priced before the two were told apart. | |
| needs_review | No | True when this cost needs a human check before it is trusted. Reported for EVERY persona — a trust flag must never be sliced away, or a persona that doesn't get the review tier reads a flagged cost as clean. | |
| setup_time_s | No | Setup time for the whole lot at `quantity`, in seconds. | |
| material_note | No | | |
| calculation_id | Yes | | |
| machine_time_s | No | Machine time per unit at `quantity`, in seconds: the billable run plus the finishing pass under the allowance. | |
| material_stock | No | The stock the part is bought as — format, size, parts per stock — its mass balance, and the material line's purchase and credits, at the lot the calculation was priced for whichever quantity was asked. Null on a bought-in part and on a calculation priced before 2026-08-28, which recorded no material detail; one priced before the 2026-09-26 release states no scrap or remnant mass and no bar length. | |
| cost_categories | No | Per-unit cost by category, keyed by the cost sheet's own bucket slugs (material, setup, machine, labour, programming, tooling, inspection, finishing, subcontract, then the surcharge ladder). The top level of ``cost_lines`` flattened: same numbers, in the calculation's currency, adding up to the price per part. | |
| currency_factor | No | What every money figure here was multiplied by to carry it from the environment's rate currency into `currency`; 1.0 when the two are the same. The prices and per-lot charges in a cost line's `label_params` are in the rate currency, so a line's amount is that arithmetic (mass x price per kilogram, time x rate) times this factor — and times the calibration it was charged at on a calibrated environment. Absent where the calculation does not state it. | |
| machine_name_at_n | No | The machine the figures at `quantity` were priced on, where it differs from or restates the calculation's own route. | |
| material_resolved | No | | |
| selection_failure | No | The same refusal as data when no machine in the costing environment could make the part. | |
| cost_sheet_rebuilt | No | True when the sheet was reconstructed from the rates, times and cost lines this calculation stored rather than recorded while it was priced. A reconstructed sheet carries the cost categories and the surcharge ladder but not the per-machine, per-clamping or per-operation tiers — those are recorded only while pricing and cannot be derived afterwards. Every amount is the amount charged either way. Null when no sheet was read for this persona. | |
| costing_environment_id | No | The costing environment this was priced in — pass it to arcnm_cost_factors to read the factors named in each line's ``factors``, their range and where each one is saved. | |
| inputs_changed_since_run | No | Null when this price reflects every input on its part revision. Otherwise {roles, corrections, latest_at}: files attached and corrections applied to the part after the run read its inputs, which a new calculation reads and this one did not. | |
| environment_changed_since_run | No | Null when this price was computed on its costing environment as it stands. Otherwise {latest_at}: the environment was edited after the run read it, and a new calculation prices with the current setup while this result does not. | |