Mivo | Split‑shipment inventory test

A receiving-flow test to use when evaluating an inventory platform.

Public product name. Fictional quantities, suppliers and warehouses. No live connections.

PO-1: 1,200 LiteForce, in cartons of 60. Air to A: 240 shipped, 180 received. Sea to B: 720 in transit. 240 not shipped. Scenario time Day 16, 12:05.

At the supplier

240not shipped

Air freight, AIR-1, to A

240 shipped, left Day 12, due Day 16

60in transit
AR-101R-102R-103
180on hand

Sea freight, SEA-1, to B

720 shipped, left Day 14, due Day 52

720in transit
B
0on hand

Total tracked

No sale, return or transfer yet

240not shipped
+60in transit by air
+720in transit by sea
+180in A
=1,200ordered
adds up

Inside A

Exclusive, by our convention

138available
+30reserved
+12damaged
=180on hand in A
adds up

R-103 put 60 units into A at Day 16, 10:05. The warehouse system never got the acknowledgement, so it sends the same receipt again.

Receiving note

R-103

Shipment
AIR-1 into A
Units
60
Applied
Day 16, 10:05
Sent again
not yet

Expected, observed, recovery

Run at 15:14:08 UTC on 23 September 2026: 7 of 7 scenarios as expected; the control failed, as it must.

How these checks are built

Every expected result is written by hand into its scenario, never computed by the function it checks. Every observed result is computed when this page is requested, by the same function and the same scenarios the automated tests run. The control switches the duplicate guard off in a test and keeps the expected results of a correct ledger, so it has to fail.

The lost acknowledgement

What arrives
At Day 16, 12:05 the warehouse system sends receipt R-103 again: same identifier, same 60 units. The warehouse's own count for A, taken at the same instant, says 180.

Receipt R-103

Expected
Already recorded
Observed
Already recorded matches
Guard off
Applied differs

Recorded on hand in A

Expected
180
Observed
180 matches
Guard off
240 (+60) differs

Available in A

Expected
138
Observed
138 matches
Guard off
198 (+60) differs

In transit on AIR-1

Expected
60
Observed
60 matches
Guard off
0 (−60) differs

Received on AIR-1

Expected
180
Observed
180 matches
Guard off
240 (+60) differs

Total tracked for PO-1

Expected
1,200
Observed
1,200 matches
Guard off
1,200 matches

Warehouse count minus ledger

Expected
0
Observed
0 matches
Guard off
−60 differs

Reconciliation

Expected
Matched
Observed
Matched matches
Guard off
R-103 counted twice differs
Recovery
Retry handled without changing stock. The retry is recognised by its original identifier. No second stock movement is recorded. Identity is the message’s identifier, never its content: two real receipts can carry the same shipment, code, quantity and time.
The control
Guard off, the retry makes 240 units in A and an air shipment that looks complete, while the total still reads 1,200. The warehouse’s own count is what catches it, and names the receipt.

Six additional checks

Two identical receipts, both realSame shipment, code, quantity and time, two identifiers: both count.matches7 of 7 checks as expected

Starting point: the order as drawn at the top.

Two deliveries of six cartons

SEA-1 reaches B as two deliveries of six cartons, both received at Day 52, 09:00 and posted as R-201 and R-202. Shipment, code, quantity and time are the same; only the identifiers differ.

CheckExpectedObserved
Receipt R-201AppliedApplied matches
Receipt R-202AppliedApplied matches
Recorded on hand in B720720 matches
Available in B720720 matches
In transit on SEA-100 matches
Received on SEA-1720720 matches
Total tracked for PO-11,2001,200 matches
A warehouse feed goes staleNo successful exchange from A for 26 hours; B has had no movement, and says so every hour.matches15 of 15 checks as expected

Starting point: the order as drawn at the top.

1. 26 hours of silence from A

From Day 16, 13:00 to Day 17, 14:00, every hourly exchange with A's feed fails, while B's succeeds and reports no movement. The 26 hours are a scenario duration; the 2-hour threshold is set by us.

CheckExpectedObserved
A read as currentNot currentNot current matches
A last exchanged successfullyDay 16, 12:00Day 16, 12:00 matches
Hours since A last exchanged26 h26 h matches
Recorded on hand in A180180 matches
Available in A138138 matches
B read as currentCurrentCurrent matches
Last movement in BNoneNone matches
Available, and current00 matches
In warehouses, not current180180 matches

2. Feed restored

At Day 17, 14:30 A's feed comes back and delivers what it held back: 8 units reserved at Day 17, 10:00, during the outage.

CheckExpectedObserved
A read as currentCurrentCurrent matches
Recorded on hand in A180180 matches
Reserved in A3838 matches
Available in A130130 matches
Available, and current130130 matches
In warehouses, not current00 matches
The ledger says 180, the warehouse says 190Two observations of A at the same instant disagree; the missing receipt is found and replayed.matches13 of 13 checks as expected

Starting point: the order as drawn at the top.

1. Two observations disagree

At Day 16, 18:00 the warehouse's own count for A says 190. Its record lists R-104, 10 units received at 16:40, which never reached the ledger: the sender gave up after its retries.

The warehouse’s own record for A at Day 16, 18:00: 190 units, from receipts R-101, R-102, R-103, R-104.

CheckExpectedObserved
Recorded on hand in A180180 matches
Warehouse count minus ledger+10+10 matches
Missing from the ledgerR-104R-104 matches
ReconciliationDifference explainedDifference explained matches

2. Missing receipt replayed

R-104 is replayed from the warehouse's record, with its original identifier.

The warehouse’s own record for A at Day 16, 18:00: 190 units, from receipts R-101, R-102, R-103, R-104.

CheckExpectedObserved
Receipt R-104AppliedApplied matches
Recorded on hand in A190190 matches
In transit on AIR-15050 matches
Total tracked for PO-11,2001,200 matches
Warehouse count minus ledger00 matches
ReconciliationMatchedMatched matches

3. Replayed a second time

The same replay runs again, as a recovery procedure sometimes does.

The warehouse’s own record for A at Day 16, 18:00: 190 units, from receipts R-101, R-102, R-103, R-104.

CheckExpectedObserved
Receipt R-104Already recordedAlready recorded matches
Recorded on hand in A190190 matches
Warehouse count minus ledger00 matches
A receipt exceeds the remaining in-transit quantity80 units received against the 60 still in transit on AIR-1: held whole, pending verification; the stock does not move.matches14 of 14 checks as expected

Starting point: the order as drawn at the top.

1. More than remains in transit

At Day 16, 14:00 the warehouse posts R-106: 80 units against AIR-1, which has 60 still in transit.

CheckExpectedObserved
Receipt R-10680 units held pending verification80 units held pending verification matches
Why R-106 is heldMore than remains in transitMore than remains in transit matches
Recorded on hand in A180180 matches
Last posted available in A138138 matches
In transit on AIR-16060 matches
Messages held11 matches

2. Shipping information corrected

At Day 16, 15:00 the forwarder corrects AIR-1 from 240 to 260 units: 20 of the units recorded as not shipped had flown. The held receipt is checked again.

CheckExpectedObserved
Receipt R-106Applied on releaseApplied on release matches
Not shipped on PO-1220220 matches
Shipped on AIR-1260260 matches
Recorded on hand in A260260 matches
Available in A218218 matches
In transit on AIR-100 matches
Messages held00 matches
Total tracked for PO-11,2001,200 matches
A transfer from A to B50 units in transit between warehouses: never available on the way, never a new supplier receipt.matches12 of 12 checks as expected

Starting point: the order as drawn at the top.

1. Transfer sent

At Day 16, 14:00, 50 available units leave A for B as transfer T-1.

CheckExpectedObserved
Recorded on hand in A130130 matches
Available in A8888 matches
Transfers in transit5050 matches
Recorded on hand in B00 matches
Received against PO-1, all shipments180180 matches
Total tracked for PO-11,2001,200 matches

2. Transfer received

At Day 17, 09:00, B receives the 50 units of T-1.

CheckExpectedObserved
Recorded on hand in B5050 matches
Available in B5050 matches
Transfers in transit00 matches
Received against PO-1, all shipments180180 matches
In transit on SEA-1720720 matches
Total tracked for PO-11,2001,200 matches
Two approved codes, one unknownOSMO-LF and MIVO-LF map to one product; MIVO-LF-B looks like them and is held, never matched by name.matches10 of 10 checks as expected

Starting point: the order as drawn at the top.

1. Two codes arrive

At Day 16, 14:00, 20 units arrive under OSMO-LF, an approved alias. At 14:10, 20 more arrive under MIVO-LF-B, a code no one has approved. The codes are simulated; the rename from Osmo to Mivo only illustrates.

CheckExpectedObserved
Receipt R-107AppliedApplied matches
Receipt R-10820 units held pending verification20 units held pending verification matches
Why R-108 is heldNo approved mapping for this codeNo approved mapping for this code matches
Recorded on hand in A200200 matches
In transit on AIR-14040 matches
Messages held11 matches

2. Code approved by a person

At Day 16, 15:00 a person checks the packing list and approves MIVO-LF-B as LiteForce. The held receipt is checked again.

CheckExpectedObserved
Receipt R-108Applied on releaseApplied on release matches
Recorded on hand in A220220 matches
In transit on AIR-12020 matches
Messages held00 matches

Checks for a platform trial

The behaviours above, as checks to run when you evaluate a platform. The scenarios and their expected results download as a checklist, CSV or JSON: steps and results to work through in a trial, not a program that connects to a platform. No platform is recommended here.

  • Tested in a trial account: none yet, which is what a trial is for
  • Documented in the vendor’s help centre, read 23 September 2026, not run
  • Not verified: neither run nor found in what we read, which is not the same as missing
  • Several receipts against one purchase order, on the same day or not

    This simulationRun, as expectedCin7 Core, documentation onlyDocumented

  • Stock moving between warehouses stays in transit until received

    This simulationRun, as expectedCin7 Core, documentation onlyDocumented

  • Air and sea shipments on one order, each with its reference, destination, departure and ETA

    This simulationRecorded, ETA not usedCin7 Core, documentation onlyNot verified

  • A receipt sent twice counts once; a receipt that never arrived is found against the warehouse's count

    This simulationRun, as expectedCin7 Core, documentation onlyNot verified

  • A warehouse feed gone quiet is not read as current

    This simulationRun, as expectedCin7 Core, documentation onlyNot verified

  • A receipt above what remains in transit, or under an unknown code, is held until someone resolves it

    This simulationRun, as expectedCin7 Core, documentation onlyNot verified

  • Receipts, stock levels and errors exchanged with fulfilment providers

    This simulationSimulated messages onlyCin7 Core, documentation onlyNot verified

One caution on words: in Cin7 Core’s accounting documentation, Stock in Transit also names goods invoiced but not yet received. The phrase alone does not establish how an air or sea shipment is tracked.

Outside this simulation
Opening balances, returns, stock coverage and replenishment, freight and landed-cost allocation, real volumes, restarts and concurrent updates: none of them is tested here.