Video chapters
- 0:00 Welcome
- 0:10 How Inventory works
- 0:40 Part 1 · Opening stock: explained
- 0:52 Part 1 · Opening stock — Set up locations and opening stock
- 2:04 Part 2 · Counts and adjustments: explained
- 2:19 Part 2 · Counts and adjustments — Count, adjust and read the history
- 3:04 Part 3 · Transfers: explained
- 3:19 Part 3 · Transfers — Create, ship, receive and cancel a transfer
- 5:01 Part 4 · Sales and returns: explained
- 5:16 Part 4 · Sales and returns — Ship an order, then restock its return
- 6:28 Part 5 · Alerts and the dashboard: explained
- 6:41 Part 5 · Alerts and the dashboard — Reorder from Alerts, read the Dashboard
- 7:23 Wrap-up
Written guide
Overview
Manage product stock at a saved business location, distinguish a physical count from a change, and follow transfers and order movements.
01. Create opening location stock
Why this matters
Catalogue quantity and a location inventory row are different records. The stock row connects a product to the place holding it.
Follow these steps
Before starting, save the product with a SKU in Storefront → Product and save the location in Configuration → Business Locations. Opening stock needs both saved records; a typed description of a location is not a substitute.
- Open Storefront → Inventory → Manage and choose the toolbar plus for Add opening stock.
- Choose the saved Product and Business location. Read both selections before entering a quantity.
- Enter Quantity
20and Reorder point5for this practice example. Use the real opening quantity for a real location. The current opening form has no Notes field; Notes belongs to Stock Count, and Reason belongs to Adjust Stock. - Choose Create opening stock once, then open the Inventory tab. Search the SKU and select its location filter if needed.
- Confirm Quantity 20, Reserved 0 and Available 20. Confirm the row names the intended location. Unit cost comes from the selected product; opening stock is not a second product sale or purchase.

Historical readback: CF-PRINT-01 at Main Print Room has quantity20, reserved0, available20, reorderpoint5 and unitcost$8. Your product cost and currency may differ.
Check the result
Duplicate opening entries can distort available stock. Select the saved location instead of entering a similar-looking location name.
02. Count versus adjustment
Why this matters
A count says what is physically present. A delta says how much to add or remove. Mixing them doubles or removes stock incorrectly.
Follow these steps
- On Inventory, choose Stock Count, then select the saved SKU/location in Inventory row. If the shelf contains 19, enter
19in Quantity, not-1. Add a note explaining the physical count, then choose Save count. - Refresh and confirm the same row now shows 19. Its reserved quantity is tracked separately; a count does not release reservations.
- To record one recovered item, open that row's three-dot action menu and choose Adjust Stock. Enter
1in Quantity change, add a specific Reason, and choose Save adjustment. A missing reason is rejected; a change that would make stock negative is rejected by the current form. - Refresh the same row, then open Movement history from its action menu. Read the before/after quantities and reason, not just the action label.

Historical history is newest first: opening0→20, count20→19, then recovereditem19→20. The positive adjustment is labelled Intake; its before/after values and reason identify the actual change.
Check the result
The exact operation label determines whether an input is an absolute total or a delta. Use the current form wording and inspect the resulting movement; do not silently reinterpret it.
03. Transfer between locations
Why this matters
A transfer must reconcile both ends. A record saying sent does not alone prove destination stock was received.
Follow these steps
- Create a saved second location, then use Manage → Add opening stock for the same SKU at that destination with quantity
0if no row exists. The current transfer form requires a destination inventory row. - Open Transfers → New Transfer. Choose the source and a different destination. Select the product stocked at the source and enter a positive quantity, such as
1. Include each product only once. - Check the quantity against Available, not total stock: reserved units cannot be transferred. Create the transfer and retain its reference.
- When recording departure, choose Mark as Shipped, review the confirmation and choose Ship. When recording receipt, choose Mark as Received, review that this receives the listed items in full, then Receive. Do not record receipt merely because the shipment departed.
- Return to Inventory, clear the location filter and search the SKU. Check both rows and their movement histories. In this one-unit example, Main Print Room ends at19 and Annex at1; the two locations still hold20 in total.

Historical completed full transfer: Main Print Room19 plus Annex1, both with zero reserved. This proves the recorded inventory allocation; physical delivery and partial receiving are separate checks.
Check the result
Do not retry a transfer blindly after a timeout. Reopen its record and both location balances. Insufficient source stock and repeated receipt must be checked without creating a compensating duplicate transfer.
04. Orders, returns and alerts
Why this matters
Available, reserved and physical quantities can change at different stages. The order identity connects those movements.
Follow these steps
Place a controlled catalogue order and inspect its inventory reservation/movement. Compare the same location before payment, after the sale and after a supported return/restock. Open Alerts and available reports to inspect low-stock items against the saved Reorder point. Open movement detail and cost information rather than relying on the dashboard alone.
Check the result
A money-only refund does not imply returned goods. Restock only the appropriate sellable quantity and verify damaged/nonrestocked goods separately. Record failed movement operations as unresolved outcomes.
Detailed instructions
The following retained material documents earlier local work. Its pending checks remain pending; historical successful outcomes are not claims of a fresh execution. Use the source-authored instructions above to prepare the new recording, and preserve these references for comparison.
E08: Supply the shop from a stock location
Worked example
The product quantity doesn't tell us where the prints are stored. Open Configuration, Business Locations and Add location. Enter course-print-main, titled Cedar Course — Main Print Room. Choose Use America/Chicago, keep Active and Create location. Create Cedar Course — Annex the same way; we'll use it for the later branch transfer. Now open Storefront, Inventory and Manage. Select the toolbar plus for Add opening stock. Set Quantity twenty and Reorder point five, then choose Cedar Botanical Print and Main Print Room. Select Create opening stock. Check twenty available, zero reserved and unit cost eight. An opening balance creates location stock; it isn't a second purchase.
Included controls: Inventory Dashboard, Inventory, Add opening stock, inventory quantity versus product quantity, cost snapshot.
Verified scope / remaining work: Actual location creation/opening/save/reload verified; do not assert browser order stock deduction.
Check the result: One explicit location balance and original-cost history for CF-PRINT-01; no duplicate intake.
Recovery / evidence caution: Inspect history when balance differs; identify absolute count versus delta before repair.
Implementation reference: inventory-editor.tsx, inventory-history.tsx.
Actual evidence: SF25-locations.webm, SF26-inventory-opening-count-adjust.webm, 18-opening-reload.png.
Next-batch matching evidence: SF25-locations.webm, SF26-inventory-opening-count-adjust.webm, 18-opening-reload.png.
A10: Count and correct physical stock
Worked example
Suppose a shelf count finds nineteen prints where the record says twenty. In Inventory, choose Stock Count and select the Main Print Room row. Quantity here is the new absolute count: enter nineteen, with the note Course physical count: nineteen prints on the shelf. Save count and check nineteen after reload. Now suppose one print is recovered. Open the row’s three-dot menu and Adjust Stock. Quantity change is a signed difference, so enter one, explain the recovered print in Reason and Save adjustment. The row returns to twenty. Open Movement history from that same menu. Intake took zero to twenty, Count changed twenty to nineteen, and the next Intake changed nineteen to twenty. Reservations stayed zero. A count answers how many are here; an adjustment answers how many changed. Do not enter minus one into the absolute-count field. Valued adjustments may create an internal inventory journal; this footage proves the stock movement, not a separately inspected finance journal.
Included controls: Record stock count, Adjust stock, absolute versus delta, intakes, history, negative stock, duplicate opening, journal/cost.
Verified scope / remaining work: Count19 then adjustment+1/movement history verified. Negative stock/duplicate-opening validation and finance journal readback pending.
Check the result: 20→19 count→20 adjustment and traceable history, only if actual application supports this sequence.
Implementation reference: inventory-editor.tsx, inventory-intakes.tsx, inventory-history.tsx.
Actual evidence: SF27-inventory-count-adjust-history.webm, 27-movement-history.png.
A11: Move stock between branches
Worked example
The annex needs one print. A transfer preserves where it came from, instead of leaving two unrelated adjustments. First use Add opening stock to give this SKU an Annex row with quantity zero; the current receive workflow requires that destination row. In Transfers, choose New Transfer. Select Main Print Room as source, Annex as destination, Cedar Botanical Print and quantity one. Create the transfer. The pending transfer reserves one: Main still owns twenty, but only nineteen are available. Choose Mark as Shipped and confirm Ship when recording its departure. Main becomes nineteen total, zero reserved. Choose Mark as Received and read its confirmation: this action records all listed items received in full. Confirm Receive. Annex becomes one. Reload both locations and open their movement histories. The same T R F reference links source reservation and departure to the destination intake. We have proved the software movement Main nineteen, Annex one, total twenty. We have not proved physical delivery, partial receipt or a customer-order stock deduction.
Included controls: Transfers, transfer origin/destination/quantity, Alerts, Manage, reservation, reconciliation.
Verified scope / remaining work: One-unit full Main→Annex transfer/reserve/ship/receive/history/reload verified. Partial receipt, tracking, cancel, Alerts recovery pending.
Check the result: Same transfer visible both branches, net quantity understood, alerts and reservation context verified.
Implementation reference: inventory-transfer.tsx, inventory-alerts-view.tsx.
Actual evidence: SF34-transfer-destination-setup.webm, SF35-transfer-shipping-receiving.webm, 68-transfer-final-stock.png.
A16: Receive a return and decide its condition
Learner draft — pending demonstration:
A returned print raises two questions: can the shop sell it again, and should the customer receive money back? Start with the original order and line. Inspect the returned item, then choose the supported stock treatment for sellable or damaged goods. The original location and cost history matter for reconciliation. A manual invoice line without a catalogue stock link is not a substitute for that history.
Included controls: Dashboard, Returns, Manage, return request, original order/line, inspection, sellable restock, damaged goods, origin stock/cost, return label, history.
Limitations and checks: E18 paid/stock-settled order prerequisite. Exact request/receive/inspect/restock controls, sellable/damaged comparisons, original cost/location guard, labels/history. Capture cannot-return boundary when stock snapshot absent.
Check the result: Return linked to original catalogue line; sellable balance changes correctly/damaged does not silently restock.
Implementation reference: return-stock-dialog.tsx, return-content.tsx.
A17: Refund money independently of stock
Worked example
A refund changes money; it doesn't put the print back into stock. We'll give this buyer a five-dollar delivery concession. Open the same order, check Payments, then Actions. Enter five in refund Amount, explain the concession in Reason and choose Process Refund. Reopen Payments after the confirmation. Thirty was collected, five refunded and twenty-five retained; the original gift-card payment remains below. Now open that card in Gift Card Center. Its balance rises from twenty to twenty-five, and the timeline links the refund to our order. The order and original tender agree on where the money went.
Included controls: Refunds, full/partial refund, provider rejection, stock-only return, money-only refund, both, refund reconciliation.
Limitations and checks: Full refund, stock return and provider rejection are separate unfinished branches. The reason is a delivery concession, not proof of refund allocation to financial lines or a carrier refund. Home revenue0 is current UX09, not corrected analytics; do not narrate dashboard success here.
Check the result: GKEJ9KIXU order Payments30gross/5refunded/25net, originalGCT-TM5H-Y4SW-Q677 preserved, +5card refundGCT-PWBV-3D8C-LMW4 linked same order.
Implementation reference: refund-list.tsx, storefront.payment.service.ts.
Next-batch matching evidence: SF48-partial-refund.webm.
Saving and recovery on the current form
If the server is slow, the editor can show Still saving or Checking…. Keep the form open while it checks. For an unconfirmed count or adjustment, use the form's retained Try again action when offered instead of opening a new adjustment with the same quantity: the current implementation keeps an operation key to prevent the same retry applying twice. Refresh the row and movement history before making a separate correction. This recovery path was documented, not replayed in a fresh browser session for this pass.
Limitations and checks
Current UI entry and editor: . Corresponding SDK storefront schemas and the retained AppEngine references define fields and consumer boundaries. Provider calls, external delivery, payments and financial mutations were not performed for this writing task.
Next steps
You can now follow the module from its configuration to the record that proves the result. Use the relevant chapter to revisit an alternative or troubleshoot the exact failed handoff.










