# Multi-site inventory: warehouses, sites and delivery runs

> Track stock in every warehouse, store room and van. Low stock opens a transfer or restock request, and a delivery run puts the day's stops in driving order.

Updated 2026-11-06. Source: https://atta.sh/use-cases/multi-site-inventory

Atta counts stock per location from a ledger of movements. Stock moves between warehouses, store rooms and vans by transfer, so what's on the road still counts. A reorder point opens a transfer or a restock request, never an order, and a delivery run puts the day's stops in driving order.

## Stock is a ledger

On hand is the sum of stock movements at a location. A count doesn't overwrite a number. It writes the difference as a `counted` row, so you can read why the figure changed. An outbound (use, ship, sell) locks the item rows and refuses a shortfall with both figures, and cancelling a committed outbound writes `reversed` rows once.

> **Marta:** How much 3/4" conduit do we have?
>
> **Atta:** Warehouse North 120 m, Warehouse South 40 m, Van 2 15 m. 30 m is on a transfer to South, counted as on hand while it's in transit. Total 205 m.

The agent only reads stock. Counting, receiving and moving need the inventory capability.

## Low stock opens a request

When South falls under its reorder point, one of two things is drafted:

- **A transfer** from a location that feeds South and can spare the stock.
- **A restock request** if no feeder can spare it.

The request goes through the usual approvals. A reorder point never places an order, and a person still decides.

> **Atta:** South is at 40 m against a reorder point of 60 m. North can spare 80 m. I've drafted a transfer of 60 m. Dispatch it?

## Places and the documents between them

A location has a kind and the location that feeds it. Stock moves only through three documents: an inbound from a supplier into a location, a transfer between locations through a system transit location, and an outbound from a location to a destination. A purchase becomes stock in one place, where its open inbound says, and the inbound's count moves with it.

## Delivery runs

A delivery run is one depot and the committed ship or sell outbounds it drops. Stock already left at commit, so the run moves outbounds and no stock.

- **Dispatch** ships every stop in one transaction.
- **Deliver** marks one stop delivered as the van gets there.
- A stop must be picked at the depot and have a placed destination.

The stop order comes from a pure function, nearest neighbour then 2-opt, in great-circle kilometres. It's a straight-line estimate, not a drive time.

Places carry a position. A pinned or typed position is never overwritten, and an address edit only drops a geocoded one. Geocoding is off unless you turn it on.

## Late and slow

A promise date makes an outbound late the way an expected date makes an inbound late. Suppliers are scored on when things actually arrived. Planning still uses their quoted lead times.

## Where it fits

Teams with a few warehouses, store rooms or vans that move the same goods between them. See [inventory](https://atta.sh/inventory-management) for the reorder maths.

Atta is in invite-only beta and free during the beta.

## Questions

### Does low stock reorder automatically?

No. A reorder point drafts a transfer or opens a restock request. A person approves any order.

### Does stock in transit still count?

Yes. Transfers go through a system transit location, so stock on the road stays on hand.

### How are delivery stops ordered?

By nearest neighbour followed by 2-opt over great-circle distance. It's a straight-line estimate, not a drive time.

### Can the agent change stock levels?

No. The agent reads stock. Counts, receipts and moves are done by people with the inventory capability.
