Incoming stock can appear in a purchasing record before any usable goods arrive. A catalogue integration must not advertise all ordered units as ready to ship. Keep the supplier agreement, receiving decisions, cost adjustments and customer-facing price as different records.
Source-bound fact
Current Shopify receiving is recorded on a linked transfer; accepted units become available, while rejected units do not. Official reference · Checked 17 October 2026.
Filled synthetic acceptance example
Synthetic teaching example, not a client case or a real-store assessment. On narrow screens, scroll to read the complete table.
| Input | Check basis | Expected |
|---|---|---|
| PO10; accept6; reject2; cancel2never shipped | 6+2+2 accounted | available increase6 |
| PO10; accept6; reject2; pending2 | not fully accounted | 2 remain outstanding |
| Unit cost12; public price30 | different fields | never publish12 as retail price |
Supplier acceptance procedure
- Link purchase ID and transfer ID, with SKU and destination; record why quantities are accepted, rejected or cancelled.
- Compare ordered quantity with accounted and outstanding quantities without silently discarding a shortfall.
- Keep supplier currency and shipment-cost adjustments away from the public price field; verify the actual storefront after sync.
Interpret the output
The first receipt closes the ten-unit accounting exercise but adds only six available units. The second remains outstanding by two. Neither a supplier invoice nor a purchase status proves sellability; ask for a receiving record and storefront stock evidence.
Explicit limits
No costing, FX, tax, supplier payment or accounting advice. Cancellation applies only to never-shipped units in this example; local stock activation and extensions still need verification.
Replay the finite teaching model
Save both files in one folder. With Node22 or newer, run the command below. JSON contains explicit inputs and expected results. The script processes synthetic data only, with no network, credentials, payment or API calls. Passing proves the finite model only, not a live integration.
Filled inputs and expectations · Inspectable teaching script
node check.mjs purchase-receipt-cost-separation.json