docs
/
Courses — Appmint

Appmint Inventory: counts, adjustments and transfers

Watch on YouTube ↗

Video chapters
  1. 0:00 Welcome
  2. 0:10 How Inventory works
  3. 0:40 Part 1 · Opening stock: explained
  4. 0:52 Part 1 · Opening stock — Set up locations and opening stock
  5. 2:04 Part 2 · Counts and adjustments: explained
  6. 2:19 Part 2 · Counts and adjustments — Count, adjust and read the history
  7. 3:04 Part 3 · Transfers: explained
  8. 3:19 Part 3 · Transfers — Create, ship, receive and cancel a transfer
  9. 5:01 Part 4 · Sales and returns: explained
  10. 5:16 Part 4 · Sales and returns — Ship an order, then restock its return
  11. 6:28 Part 5 · Alerts and the dashboard: explained
  12. 6:41 Part 5 · Alerts and the dashboard — Reorder from Alerts, read the Dashboard
  13. 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.

  1. Open Storefront → Inventory → Manage and choose the toolbar plus for Add opening stock.
  2. Choose the saved Product and Business location. Read both selections before entering a quantity.
  3. Enter Quantity 20 and Reorder point 5 for 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.
  4. Choose Create opening stock once, then open the Inventory tab. Search the SKU and select its location filter if needed.
  5. 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.

Saved opening quantity at Main Print Room

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

  1. On Inventory, choose Stock Count, then select the saved SKU/location in Inventory row. If the shelf contains 19, enter 19 in Quantity, not -1. Add a note explaining the physical count, then choose Save count.
  2. Refresh and confirm the same row now shows 19. Its reserved quantity is tracked separately; a count does not release reservations.
  3. To record one recovered item, open that row's three-dot action menu and choose Adjust Stock. Enter 1 in 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.
  4. Refresh the same row, then open Movement history from its action menu. Read the before/after quantities and reason, not just the action label.

Movement history explains count and adjustment outcomes

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

  1. Create a saved second location, then use Manage → Add opening stock for the same SKU at that destination with quantity 0 if no row exists. The current transfer form requires a destination inventory row.
  2. 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.
  3. Check the quantity against Available, not total stock: reserved units cannot be transferred. Create the transfer and retain its reference.
  4. 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.
  5. 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.

Two location balances after the recorded transfer

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.

BusinessMade Inventory — supporting guide

Introduction and outcome

Spoken: “Welcome to BusinessMade Inventory. We will establish stock at a location, compare the result of a sale, correct a count and prepare a transfer. The key is following the same SKU and location through its movement history.”

Prerequisites: A tracked product with SKU, unit cost and an operating location. Use controlled quantities in a rehearsal company. This walkthrough uses BM Course Ceramic Mug, SKU BM-COURSE-MUG-1004, at BM Checkout Course. Its product has inventory tracking enabled and Cost per Item 4; opening quantity is 10. BM Riverside Course is the receiving location. These are isolated practice records.

1. Establish the product and location stock

Explain first: “The product is shared catalogue information. Inventory holds quantities for a specific SKU and location. Saving a product quantity does not necessarily create the location row.”

Demonstrate: Open Storefront → Products, create or edit the product and check SKU, Cost per Item, Stock Quantity and Track inventory for this product. Save. Open Storefront → Inventory → Inventory and search the SKU. Inspect the module's own location filter. If the required SKU/location row does not exist, open Manage → + → Add opening stock. Choose the product and exact location, enter Quantity and Reorder point, then Create opening stock once. Reload the list.

Result: The row shows SKU, location, Quantity, Reserved, Available, Reorder Point and Unit Cost. A row that already exists must be counted or adjusted, not duplicated.

Follow the opening-stock example

  1. In Products, open your product, enter a unique SKU and Cost per Item, turn on Track inventory for this product, and save. The cost supplies the inventory row's unit cost; it is different from the selling price.
  2. Open Inventory → Inventory. Search for the SKU and inspect the location before deciding that it is missing. For a new row choose Opening stock here, or Manage → +.
  3. In Add opening stock, choose the product and BM Checkout Course, set Quantity to 10 and Reorder point to 5. Create the opening once.

Opening stock form with the named mug, location, ten units and threshold five

  1. The form closes into the Inventory list. Confirm Quantity 10, Reserved 0, Available 10, Reorder Point 5, Unit Cost $4.00. Reload and check the same SKU/location rather than creating another opening.

Persisted opening stock with the exact SKU and location

2. Read the stock figures and movement evidence

Explain first: “Quantity is on hand. Reserved is committed to pending work. Available is what remains. Movement history explains changes to this row; a product-list field alone does not explain a branch's stock.”

Demonstrate: Open the row's Movement history. Identify its opening entry. Note Quantity, Reserved and Available before a controlled POS sale. At the same location sell one tracked unit and record payment once. Return to Inventory, refresh and inspect the movement and resulting balance. Match the order reference rather than only comparing the final number.

Result: One sale creates its intended stock movement. Payment splitting must not count as selling the same unit twice. If a stock warning exists, use the recovery section before presenting the exercise as successful.

3. Count stock and make an adjustment

Explain first: “Stock Count replaces the on-hand count with what was counted. Adjust Stock applies a signed change with a reason. They answer different questions.”

Demonstrate — count: Select Stock Count, choose the exact Inventory row, enter the total counted in Quantity, add Notes and select Save count. Refresh and read Quantity, Reserved and Available. Demonstrate zero only on a disposable controlled stock row; zero is a valid count.

Demonstrate — adjustment: Open the row action menu and choose Adjust Stock. Enter the signed Quantity change, select or enter its required reason using the current form, and save through the form's adjustment action. Read Movement history and any resulting valuation entry. The committing button is Save adjustment.

Gotcha: Do not enter an absolute shelf count as a positive adjustment. Reservations remain relevant after a count, so Available can differ from Quantity. A valued adjustment can affect accounting; read the resulting movement and journal rather than changing quantities repeatedly.

Count and adjustment: actual saved example

  1. Select Stock Count, then choose the mug at BM Checkout Course in Inventory row. Enter 9 in Quantity because nine is the total counted, not a reduction of nine. Enter the count explanation in Notes and select Save count.

Count form recording an absolute total of nine

  1. On that row open the three-dot Actions menu and choose Adjust Stock. Enter 2 for two additional units and describe why in Reason. Select Save adjustment. A negative change would remove units; do not use it to enter a shelf total.

Adjustment form adds two units with its required reason

  1. Reopen the row menu and choose Movement history. This rehearsal shows opening 0 → 10, count 10 → 9, then adjustment 9 → 11. Reserved stayed zero. This is how you distinguish a count from a change after both forms have closed.

Saved movements retain quantities, reasons and separate references

4. Transfer stock between locations

Explain first: “A transfer identifies the source, destination and quantities. Both ends must refer to real stock locations; a second product record is not a transfer.”

Demonstrate: Open Transfers and its new-transfer action. In New inventory transfer, choose Source location, then a different Destination location. Choose Product 1 from the source rows; inspect the available quantity shown in the option. Enter Quantity. Add further product rows if needed and fill Notes. Select Create transfer. Reload Transfers and find its saved transfer ID before doing anything else.

Result: A confirmed transfer record exists. The editor explicitly rejects a save it cannot confirm and asks for reload before another attempt. Open the pending transfer's action menu. Select Mark as Shipped and confirm its transition to in_transit. At the actual receiving step select Mark as Received and confirm Completed. Inspect both source and destination balances and movement histories. The current receive action submits the full listed quantity for every line; do not present it as a partial-receipt editor. Cancel Transfer is available while pending; inspect its confirmation and final Cancelled state on a separate disposable example.

Complete a transfer without missing the receiving setup

The destination needs its own inventory row before you create the transfer. The first attempt correctly refused our transfer because Riverside had no row. No transfer was created by that refusal.

  1. Open Inventory → Opening stock. Choose the same product and the receiving location, BM Riverside Course. Enter 0 for an empty destination and create the row. Do not enter the incoming three units now: receipt will add those later.

Zero opening creates the destination row without pre-counting incoming stock

  1. Open Transfers → New Transfer. Set source BM Checkout Course, destination BM Riverside Course, product BM-COURSE-MUG-1004, and quantity 3. The product option identifies available source stock. Select Create transfer once, wait, then refresh Transfers if the new row has not appeared.

Transfer form specifies both locations and three units

  1. Find the saved transfer ID. Ours is TRF-GA5ENBQL10, initially pending. Open its three-dot menu, choose Mark as Shipped, then confirm Ship only at dispatch. The state changes to in_transit.

Saved pending transfer connects the two named locations

The same transfer after shipping

  1. At receipt, open the same row menu, choose Mark as Received, and read the confirmation. Receive records every listed unit as received; this is not a partial-receipt form. In the isolated rehearsal all three were simulated as received and status became completed.

Completed transfer after confirming full receipt

  1. Return to Inventory. Source is now 8, destination 3, Reserved is zero at both, and total stock remains 11. Destination shows Low Stock because three is below its reorder point of five. A transfer moves stock; it does not manufacture three new units overall.

Both balances reconcile after transferring three units

Production visual: Before demonstrating, animate three mug tokens moving between two clearly named locations while the combined total stays eleven. Return to the real balances for proof. These screenshots show software rehearsal, not physical dispatch.

5. Recover stock after a paid sale

Explain first: “A missing location stock row can leave stock work pending even when payment succeeded. Repair the stock prerequisite and retry the saved sale's stock work; do not charge the customer again.”

Demonstrate: Note the paid order, SKU and exact location in the stock issue. Create the missing opening row using the true before-sale amount. Open the existing paid tab through Operations → Tabs, return to POS and select Retry stock. Wait for Stock checked · tracked items deducted. Reopen Inventory and Movement history. Confirm one deduction for that order, then inspect the payment list to confirm no additional charge.

Gotcha: If the physical count was taken after the sale, do not enter that count as a before-sale opening and subtract the same sale again. Reconcile the timing first. Another branch's stock row does not satisfy this location's sale.

6. Alerts and continuing work

Explain first: “The reorder point gives stock monitoring context. Use Alerts to identify rows needing attention, then inspect the actual SKU/location balance before receiving or transferring stock.”

Demonstrate: Open Alerts, inspect a controlled row below its reorder threshold and return to that inventory row. Show Dashboard as a summary, then go back to the row and its movement evidence. Do not manufacture a low-stock alert by altering a real business balance.

Closing spoken: “You can now follow stock from its location opening through a sale or correction. Keep the SKU, location and movement reference together when investigating a difference.”

Limitations and checks

  • tutorials-plan/course-content/businessmade-stock-sell-and-return.md includes prior local UI and recovery evidence.

Local stock records were deliberately changed for the isolated rehearsal: opening 10, count 9, adjustment +2, destination opening 0, transfer 3. Use your own practice records for this exercise. Transfer actions were also checked in inventory-transfers-view.tsx.