Multi-Branch Inventory
Each shop location has its own spare-part rows and stock numbers. Adding a product requires a specific branch.
Why stock is per branch
A spare part is stored with branch_id / branch_name. When the same catalog item exists in two shops, the second row is a clone of the first (branch_clone_source_id). Qty at PJ and qty at KL are independent.
When a job or invoice uses a part, ExpeDite resolves the catalog row for that job's branch (by id, then by clone source). If no row exists for that branch, stock is left unchanged and a warning is logged for retry — it does not silently take another branch's shelf.
Add stock at a location
- Switch to the branch in the location switcher (top bar).
- Open Inventory.
- Click Add Product or AI Import. If no branch is selected, you will see Select a branch / "Choose a specific branch before adding inventory."
Locked extra branches cannot be used until you subscribe them. Shop includes the first branch. More locations need the Extra Branch add-on (RM90/month each). Free and Solo cannot buy it. See Multi-branch setup.
What this is not
Inventory movements you will see: sale (used on a job), return, adjustment, void_restore (invoice void). There is no separate "transfer stock from Branch A to Branch B" movement. To move goods between shops, adjust (or receive) stock on each branch's own catalog so both histories stay honest.
Last updated: 8 September 2026