The simple distinction.
A branch is a customer-facing location. It has a sales register, walk-in customers, and a cashier. Stock at a branch is on the sales floor or in a small back-of-house store. A warehouse is a non-customer-facing location. It receives bulk goods, holds them for distribution to branches, and never serves a walk-in customer. Stock at a warehouse is in bulk storage, not on a sales floor.
The distinction matters because the rules differ. Branches need POS, cycle counts focused on sales-floor accuracy, and customer-facing stock-on-hand visibility. Warehouses need bulk receiving discipline, transfer management, and lot/location tracking inside the warehouse. Modeling both as "branches" papers over real operational differences and produces a system that fits neither well.
Why combining them creates problems.
When the warehouse is modeled as just another branch, several things go wrong. Customer service reps see warehouse stock as available to walk-in customers, who then drive 20 km to discover the goods are in bulk pallets not retail-ready. Transfer reports show warehouse-to-branch and branch-to-branch movements mixed together, making distribution analysis impossible. Cycle count schedules treat warehouse and branch the same, which mismatches the actual count process needed.
Sales reports also distort. If the warehouse occasionally sells to a wholesale customer (some hybrid operations do), and the warehouse is a "branch", that sale appears in the same revenue line as retail sales. Margin analysis breaks because warehouse sales have different markup structure. Setting up the warehouse as its own location type avoids all of this.
Stock location hierarchy that actually works.
Recommended structure: Organization > Stock Location > Sub-location (optional). Stock Location has a type: Warehouse, Branch, or In-Transit. Each Stock Location has its own BranchInventory records (or its own equivalent), its own WAC per SKU, its own cycle count schedule, its own reorder rules.
Branches can pull stock from one or more designated warehouses (or from each other in some configurations). Warehouses receive from suppliers and dispatch to branches. The flow is structured but flexible: a small operation might have one warehouse serving 4 branches; a larger operation might have regional warehouses each serving 8 branches with cross-warehouse transfers as needed.
- Warehouse: bulk receive, no walk-in sale, dispatches to branches
- Branch: walk-in sale, receives from warehouse, may transfer between branches
- In-Transit: virtual location for goods on the road between two physical locations
- Sub-location: aisle, bin, or area within a warehouse for pick efficiency
A worked example: 2 warehouses, 8 branches.
A textile retailer in Bristol has Warehouse Bristol (main, receives all imports via the Port of Felixstowe), Warehouse Cardiff (regional, holds Wales and South-West inventory), and 8 branches. Stock flow: Bristol Warehouse receives from suppliers and imports. Periodically transfers to Cardiff Warehouse for regional distribution. Both warehouses transfer to their respective branches as needed.
Reports separate cleanly. "Warehouse stock value" sums both warehouses. "Branch stock value" sums all 8 branches. "Total inventory" sums both. Sales reports come only from branches. Transfer reports separate warehouse-to-warehouse, warehouse-to-branch, and branch-to-branch flows. Reorder analysis happens at branch level (when a branch needs more) and warehouse level (when a warehouse needs to import). Two different operating logics, both supported.
When you have only one warehouse.
A small retail chain might genuinely have a single warehouse and 3-5 branches. The warehouse-branch distinction still matters even at this scale. Set up the warehouse as a separate Stock Location of type Warehouse. Even if it has the same address as one of the branches (often the largest branch with a back-of-house storage area), keep them as separate locations in the system.
This makes the back-of-house storage countable separately, makes the bulk-to-floor transfer trackable, and prepares the system for when the operation grows. Skipping this distinction at small scale almost always costs a painful migration later when the warehouse grows past one branch's back room.
How nonari models locations.
Nonari supports a Stock Location entity with a type field — Warehouse, Branch, In-Transit. Each location has its own BranchInventory records per SKU, with quantity and WAC. POS access can be configured per location: branches expose POS to walk-in customers; warehouses do not.
Transfers between any two locations are supported with the in-transit account flow. Reports can be filtered or grouped by location type so warehouse and branch performance are analysed separately. The system also supports a "default warehouse for branch" relationship — when a branch needs replenishment, the system suggests the right warehouse to pull from, accounting for stock availability and transport costs.