Skip to main content

Completing a run

Permission: Complete Production of Finish Goods

Completion is the moment production touches the ledger. Everything before it is planning.


1. What you enter​

FieldMeaning
Actual quantity producedWhat you really made. May differ from planned in either direction
Per-ingredient actualsWhat each material really consumed
Per-ingredient actuals are optional, and the fallback matters

If you supply an actual for an ingredient, it is used. If you leave it out, the planned quantity is posted as consumed.

So skipping the detail does not mean "nothing was used" — it means "exactly as planned". That is the right default for a quick close, and the wrong one if a run genuinely over-consumed.


2. What completion writes​

A run with 6 ingredients writes 7 ledger rows — one in, six out.

The remarks are generated, not yours​

RowRemark
PRODUCTION_INProduction Order #<first 8 chars> completion
CONSUMPTION_OUTConsumption for Production Order #<first 8 chars>

Both carry the order's id as reference_id, which is what ties a ledger row back to its run.

Production ledger rows carry no reference number

Unlike a goods receipt or a sale, production rows have no reference_no and no batch_id — only the generated remark and the reference_id. Searching the ledger for a production run means searching the remark text for the 8-character order id.


3. Yield​

The drawer computes produced ÷ planned and shows it as a percentage.

ExampleReading
Planned 15, produced 15100.0%
Planned 20, produced 1890.0% — a real shortfall worth explaining
Planned 10, produced 11over 100% — legitimate, and worth investigating

Yield is not compared against the BOM's wastage_allowance_percent. The allowance is recorded on the recipe and never applied — see Bill of materials.


4. What completion does not do​

Update current_stock on the finished variation❌
Update current_stock on any raw material❌
Check that ingredients were actually available❌ — stock can go negative in the ledger
Allow itself to be undone❌
Nothing blocks a run you do not have the materials for

There is no availability check. Completing a run for 100 portions when the ledger balance covers 10 succeeds, and the ledger simply goes negative.

That is a deliberate posture elsewhere in the product — surface the oversell rather than hide it — but here it means the ledger is the only place the problem is visible, and only if you look.


5. Step by step​

  1. Open the DRAFT order from the list
  2. Check the ingredient list is what you actually used — fix it before completing
  3. Complete
  4. Enter the actual quantity produced
  5. Enter per-ingredient actuals for anything that differed from plan
  6. Confirm

After this the order is locked and the footer reads "Order is locked — ledger has been posted."


6. Verifying a run afterwards​

Open the ledger and look for the order's 8-character id in the Remarks column. You should see:

  • one PRODUCTION_IN row, positive, naming the product and SKU
  • one CONSUMPTION_OUT row per ingredient, negative
The consumption rows will have a blank Item Details cell

Raw-material rows do not render their name in the ledger, so the consumption side of a run shows six anonymous rows. The quantities and units are correct. See Reading a movement.


7. Troubleshooting​

SymptomCause
production order already completedIt was completed already
cancelled orders cannot be completedCancel is terminal
No consumption rows appearedThe variation had no BOM when the order was created
Consumption matches plan exactly, though it did notPer-ingredient actuals were omitted, so planned was posted
Stock unchanged everywhereExpected — completion writes the ledger only
Ledger balance is negativeNo availability check exists; the run consumed more than had been received