---
title: Storage locations
order: 7
updated: 2026-07-21
---

# Storage locations

Every item your firm holds lives somewhere physical: a **godown** (warehouse) → a **room** inside it → a **rack** on the wall. Storage locations are that three-level hierarchy, and the inventory screens record which rack every movement touched. This page covers the two *Location Breakdown* views on the *Stock* screen — the read-only tree that shows exactly how much of a product sits in each godown, room, and rack, and how those numbers are worked out.

The layout itself (which godowns, rooms, and racks exist) is not created here — it lives on the records screens. See [Warehouses](/docs/records/warehouses) and [Warehouse rooms](/docs/records/warehouse-rooms) to add or rename godowns, rooms, and racks. This page is about *reading* where stock is, not editing the layout.

## Open a location breakdown

Both breakdown views hang off the *Stock* screen's per-head *Manage* modal:

1. Open *Inventory* in the sidebar, then click *Stock*.
2. Find the product head you care about and click *Manage* on its row. This opens the *Product Head … — Stock* modal listing every product code under that head.
3. From there:
   - For the **whole head** (all its codes combined) — click the settings button (the sliders icon) at the top right of the modal, then pick *View Locations* (*"Stock breakdown by warehouse location"*).
   - For a **single product code** — click *View Location* on that code's row.

Both open a *Location Breakdown* panel. The only difference is scope: the head view sums every code under the head into one tree; the code view shows one code.

See [View current stock](/docs/inventory/stock-overview) for the rest of the *Stock* screen and its *Manage* modal.

### Who can open it

Both breakdown views require the *View Inventory* permission (`inventory.viewInventory`) — firm administrators always have it. Without it the server refuses the request outright, so the panel never loads. This gate is re-checked on the server for every request, not just hidden in the UI.

These breakdown panels are **quantity-only** — they never show stock value, regardless of your *View Inventory Stock Value* permission. Value columns live on the *Manage* table itself, not inside the location tree.

## Reading the breakdown tree

The panel has a header and a tree.

### Header

- On the left, *Location Breakdown* with the name of the head (head view) or the product code (code view) it is scoped to.
- On the right, a *Total stock* figure — the sum of every rack in the tree. If the total is negative it is shown in red (see [Why a location can show a negative number](#why-does-a-location-show-a-negative-or-red-number) below).

### The godown → room → rack tree

Below the header, stock is grouped into a collapsible tree:

- **Godown cards** — one card per warehouse that holds (or has ever moved) stock for this product. The card header shows the godown name, a *room* count, and the godown's total quantity. Cards start **expanded**; click the header to collapse or expand. A godown with no rooms recorded shows *No rooms recorded*.
- **Rooms** — inside each godown, one row per room, with the room name, a *rack* count, and the room total. Rooms also start expanded; click a room to collapse it.
- **Racks** — the leaf rows, each showing the rack name and the quantity held there.

Everything is sorted **largest quantity first**: godowns by their total, rooms by their total within each godown, and racks by their own quantity within each room. So the busiest locations float to the top.

If nothing has ever moved for this product, the tree is replaced by *No stock recorded across any location*.

### Quantity badges

Each rack, room, and godown carries a quantity badge:

- A positive quantity is shown as `+N` (e.g. `+120`).
- Zero is shown as `0` in muted grey.
- A negative quantity is shown as `-N` in red.

Badges are plain counts in the product's own unit — there is no currency here.

## How the numbers are worked out

The quantity at each rack is a **net** figure — the app replays every stock movement that ever touched that rack for this product and adds them up. Only *settled* movements count; anything still waiting for approval is left out, which is why a fresh arrival or delivery can be invisible here until it is approved. The movements that feed the number are:

- **Approved stock arrivals** — quantity received into a rack adds to it. A reversed/return arrival carries a negative quantity, so it cancels itself out automatically. See [Add a stock arrival](/docs/inventory/add-stock-arrival).
- **Approved deliveries out** — quantity dispatched from a rack subtracts from it. A delivery *return* (goods coming back) adds the quantity back. See [Out stock](/docs/inventory/out-stock).
- **Stock transfers** — a transfer subtracts from its *from* rack and adds to its *to* rack, so moving stock between racks re-balances the tree without changing the grand total. See [Transfer stock](/docs/inventory/transfer-stock).
- **Physical stock entries** — a manual ± adjustment at a rack moves that rack by its signed quantity. Deleted adjustments are ignored. See [Physical stock entry](/docs/inventory/physical-stock-entry).
- **Stock conversions** — the *from* side subtracts at its rack and the *to* side adds at its rack. Deleted conversions are ignored. See [Convert stock](/docs/inventory/convert-stock).
- **Outstanding sample deliveries** — a sample that has been handed out (and not yet returned) subtracts its still-out quantity (`quantity − returned`) from the rack it left. Once fully returned it nets back to zero. See [Sample delivery](/docs/inventory/sample-delivery).
- **Delivery notes** — a delivery note's outgoing leg (while it is `approved`, `linkPending`, or `linked`) subtracts its full quantity from the rack it left; there is no return leg. See [Delivery Note](/docs/inventory/delivery-challan).

The head-level view runs the same maths across **every** product code under the head and merges them into one tree. The code-level view scopes it to a single code. A location that only ever saw one movement (say a lone transfer or adjustment) still appears — its name is looked up and shown even if nothing else touched it.

Because the number is a running net, a rack can legitimately read `0` (everything that arrived has since left) or even negative (see the questions below) — those aren't errors, they're the honest arithmetic of what was recorded.

## Editing the layout

The breakdown panels are **read-only**. To add, rename, or remove a godown, room, or rack — or to print QR labels for them — use the records screens:

- [Warehouses](/docs/records/warehouses) — create and manage godowns.
- [Warehouse rooms](/docs/records/warehouse-rooms) — manage the rooms inside a godown, and the *Manage Racks* button on each room to manage its racks.

The structure is exactly two levels deep under a godown: rooms hold racks, and rooms do not nest inside other rooms.

## Common questions

### What is the difference between a godown, a room, and a rack?

A godown is a whole warehouse. A room is a physical area inside it — a floor, section, or zone. A rack is the lowest level: the specific shelf, bin, or pallet position where an item actually sits. The three together let you walk straight to an item instead of hunting a whole warehouse.

### Can two product heads share a rack?

Yes. A rack can hold many heads and many codes at once. The breakdown you are looking at is filtered to the one head or code you opened it for, so it shows only that product's share of each rack — other products in the same rack simply aren't listed.

### Why does a location show a negative or red number?

The rack quantity is a running net of every recorded movement. A negative figure means more was recorded leaving that rack than the app has on record as arriving there — usually because goods were dispatched, transferred, or adjusted out of a rack before the matching arrival was entered against the same rack, or a physical entry took stock below zero. It is a signal to reconcile that rack, not a crash. Correct it with a [physical stock entry](/docs/inventory/physical-stock-entry) or by fixing the movement that landed in the wrong location.

### I just received / dispatched stock but the breakdown still shows the old number — why?

Only **approved** arrivals and deliveries feed the breakdown. If the arrival or delivery is still pending approval it hasn't moved the tree yet. Approve it (or ask someone who can) and the location updates. Check its status on the [In stock](/docs/inventory/in-stock) / [Out stock](/docs/inventory/out-stock) screens.

### The head total and the code totals don't seem to add up to what I expect — what am I missing?

The head view sums **all** codes under that head, including any that are zero or negative at some locations. Open individual codes with *View Location* to see each one's own tree; the head total is just those trees added together.

### Why can't I see stock value in the breakdown?

By design — the *Location Breakdown* panels are quantity-only. Monetary value (excluding and including tax) appears on the *Manage* table columns instead, and only if you hold the *View Inventory Stock Value* permission. See [View current stock](/docs/inventory/stock-overview).

### How do I add a new rack?

Not from here — the breakdown is read-only. Add it from the room it belongs to: open [Warehouse rooms](/docs/records/warehouse-rooms), find the room, and use its *Manage Racks* button.

### How do I move stock from one rack to another?

Use *Transfer Stock* from the *Stock* screen's action menu. A transfer re-balances the two racks in the breakdown without changing the overall total. See [Transfer stock](/docs/inventory/transfer-stock).
