# Production Advanced Operations v46

v46 extends the v45 recipe/batch foundation with operational controls.

## Added
- Draft-batch actual consumption overrides per recipe ingredient.
- Explicit waste quantities posted as immutable inventory `waste` movements.
- Planned material cost vs actual material cost and cost variance.
- Planned yield vs actual yield and yield variance.
- Optional finished-goods lot creation during production posting.
- Recursive sub-recipe cost simulation using active recipe versions.
- Recipe graph cycle protection on activation.
- Draft batch cancellation.
- Posted batch reversal with explicit inverse production/waste movement types.
- `production.batch.reverse` permission.

## Cost semantics
Planned material cost is calculated using the inventory WAC visible at posting time and the recipe's planned quantities/waste.
Actual material cost uses actual override + actual waste quantities at the same cost snapshot.
Finished unit cost = actual material cost / actual yield.

The recursive cost simulator is a planning/read model and does not create stock movements.

## Reversal semantics
Reversal removes the produced output first. Therefore it fails safely if sufficient finished stock is no longer available.
Consumed and wasted raw materials are restored using their batch snapshot unit costs.
The reversal is idempotent and moves batch status to `reversed`.

## Deferred
- labor and machine overhead
- production orders/MRP
- automatic procurement
- multi-output/by-products
- serial-number production
- lot genealogy across multiple ingredient lots
- operator/shift efficiency
