shop-os
/
O Owner view
←

Finale test scenarios

How to use this

Paste each one into Finale and note what actually happens against what Finale should show. These are generated from the real authored BOM but they are test pastes — importing them moves real stock, so use a scratch scenario or reverse them afterwards.

Nothing here is queued to Finale exports on purpose: these are fiction, and the VA's queue should only ever hold real work.

Start with #2 and #6. #2 is the ordering fix (FP12) — the one that made the paste nonsense. #6 is the one open assumption: whether Finale accepts a blank Consume sublocation on a labor row.

1 test only, -RAW → -TESTED, 1 colour build

Exercises: single-step build, one consume row

What Finale should show after import

One build: produce 3DS-TESTED ×10 at Main, consuming 3DS-RAW ×10 from PO Intake plus its LB- testing row.

2 test+clean, -RAW → -TESTED → colour build

Exercises: the two-step chain and FP12's ordering — raw→tested MUST come first

What Finale should show after import

TWO builds, in this order: (1) 3DS-TESTED ×6 from 3DS-RAW, then (2) 3DS-BLCK ×6 from 3DS-TESTED. If Finale complains that 3DS-TESTED isn't on hand, the ORDER is wrong — that's FP12.

3 test+clean, 3 colours from one raw build

Exercises: multiple top builds sharing one raw pool

What Finale should show after import

3DS-RAW ×12 consumed in total across three colour builds (3DS-BLCK, 3DS-AQUA, 3DS-RED), each ×4, each preceded by its own 3DS-TESTED build.

4 pass + fail + scrap in one session build

Exercises: -FAILED and -X outputs alongside colours

What Finale should show after import

Colour, 3DS-FAILED and 3DS-X builds in one paste, 9 units of 3DS-RAW consumed. Check 3DS-X doesn't write off stock you meant to keep — cosmetic failures are 3DS-FAILED, not 3DS-X.

5 repair, -FAILED → -RAW build

Exercises: the back-edge, and its labor row

What Finale should show after import

Produce 3DS-RAW ×7 consuming 3DS-FAILED ×7 — the RAW↔FAILED back-edge. Its LB- repair row should be here; if the chain isn't authored this way the paste will be a 1:1 stub instead.

This is also the shape FP19 (repair_test) will change.

6 a SKU whose BOM has an LB- row build

Exercises: the blank consume sublocation — FP14 §1, which is CORRECT, not a gap

What Finale should show after import

Every LB- consume row now carries the same Consume sublocation as the material row in its own build — PO Intake on the raw→tested step, Main on the tested→colour step. It used to be BLANK, and a blank there is what made this paste import as nothing at all (ST11). **Re-paste this one**: it's the scenario the fix was for.

2 labor row(s) in this paste.

7 S-tote convert (shelf sublocation) build

Exercises: container._shelf_build_tsv, the second emitter

What Finale should show after import

Same two-step chain as scenario 2, but produced at the SHELF sublocation (Main) and consumed from PO Intake. Different emitter — compare it against scenario 2's shape.

8 S-tote transfer, finished SKU transfer

Exercises: FP8's transfer path — a transfer paste, not a build

What Finale should show after import

A TRANSFER, not a build: 3DS-BLCK ×17 moves PO Intake → Main with no consume and no production. Goes on Finale's transfer screen, not the build one.

9 two sessions, same SKU, same day build

Exercises: FP13's collision guard — the two pastes must not share a Build ID

What Finale should show after import

Import BOTH, first then second. Finale must end up with 10 units, not 6. If it shows 6, the second import overwrote the first and the Build IDs still collide — that's the FP13 bug, and it loses a day of work silently, with no error.

Two separate pastes — they are two sessions.

second session, same SKU, same day

10 output with no authored BOM build

Exercises: FP14's skip-and-warn — nothing malformed may reach the paste

What Finale should show after import

Nothing to paste, and that's the pass condition: a build with no consume line is malformed and Finale would reject the whole import for it, so it's skipped and reported instead.

1 build(s) left out — NOT-A-REAL-SKU ×3 (no consume line — the BOM has no components for it and the project has no input SKU)