Stock Transfers
Moving stock from one branch to another with a request, an approval, a shipment and a confirmed receipt.
5 min read · Updated 10 Sep 2026
On this page
A transfer is a shipment with a paper trail: stock leaves one location, sits in transit, and only lands at the other location when someone there confirms it arrived. Nothing is "moved" instantly, because in real life nothing is.
Needs the Stock Transfers Between Branches add-on (₱300 per branch each month), or any bundle that includes it.
Open Inventory → Transfers. Transfers are a web-app screen; there is no transfers screen on the POS app.
The life of a transfer
| Status | Shown as | Means |
|---|---|---|
requested |
Awaiting Approval | Filed by someone who cannot approve their own; waiting on a manager |
pending |
Pending | Approved and ready to send. No stock has moved yet. |
in_transit |
In Transit | Deducted from the source, not yet at the destination |
received |
Received | Added at the destination. Final. |
rejected |
Rejected | The approver said no. Final. No stock ever moved. |
cancelled |
Cancelled | Called off. Final. |
Each transfer gets a reference like ST-000001.
Creating one
The button says New Transfer if you can approve transfers and Request Transfer if you cannot — same form either way.
| Field | Required | Notes |
|---|---|---|
| From | Yes | The source location |
| To | Yes | The destination. Must not be the source. |
| Notes | No | |
| Items | Yes | A product and a quantity per row |
With only the Stock Transfers add-on the two selectors are labelled From Branch and To Branch and list branches. Add Warehouses and they become From and To, with branches and warehouses in separate groups — the same screen then handles warehouse-to-branch and warehouse-to-warehouse moves.
Who can approve their own request is the thing to understand here. If your role can manage warehouses, the transfer you create is approved on the spot and goes straight to Pending — a queue round-trip you could approve yourself would be friction, not control. Everyone else files a request that lands in Awaiting Approval and shows up in the approvals queue for a manager. See Approvals and promotions.
Shipping and receiving
Ship is the moment stock actually leaves. Kassly checks the source has enough of every item and refuses the whole shipment if it does not — Insufficient stock for product … at source branch. Nothing partial goes out. On success each item is deducted at the source and gets a Transfer Out movement, and the transfer becomes In Transit.
Receive is the moment it lands. Each item is added at the destination with a Transfer In movement, and the transfer becomes Received. Terminals at the destination branch get the new figures live.
There is no partial receive. A transfer is received in full, at the quantities that were shipped. If four of the ten arrived, receive it and then record the shortfall as an adjustment at the destination with a note — see Stock adjustments. Purchase orders can be received short; transfers cannot.
While a transfer is In Transit the stock is in neither location's on-hand figure. That is correct — it is on a van — but it does mean a transfer left in transit for a week makes both branches look understocked.
Cancelling and rejecting
| Status when you cancel | What happens to the stock |
|---|---|
| Awaiting Approval or Pending | Nothing. No stock had moved. |
| In Transit | Returned to the source location |
| Received | Cannot be cancelled at all |
A cancelled in-transit transfer writes the return leg as a Transfer In movement at the source, noted cancelled - stock returned. It reads slightly oddly in the history — a Transfer In at the branch the goods left from — but the quantity is right and the note explains it.
Reject is the approver's "no" on a request that was never approved. It asks for a reason, and no stock is involved.
Permissions
Transfers are split across four permissions so that a stockroom can work the dock without being able to authorise movements between branches.
| Action | Permission |
|---|---|
| See the list and open a transfer | Receive Stock (POs & Transfers) |
| Create or request one | Request Stock Transfers |
| Approve or reject a request | Manage Warehouses |
| Ship and receive | Receive Stock (POs & Transfers) |
| Cancel | Owner or Manager |
See Custom roles for assigning these, and Users and roles for what the built-in roles already carry.
What a transfer does not do
- It does not cost anything to the receiving branch. A transfer moves quantity, not money. Nothing is invoiced between your own branches.
- It carries no batch or expiry information. A batch received at one branch and transferred to another does not follow the stock. See Batch & expiry.
- It does not change unit cost. For valuation, transfer movements carry whatever cost was recorded; a transfer with no cost on it contributes nothing to the destination's weighted average. See Inventory valuation.
If the add-on lapses
Nothing is deleted. Transfers already received stay in the ledger and in every branch's figures; the Transfers screen simply stops being available until you subscribe again. A transfer left In Transit stays In Transit, so finish anything in flight before letting the add-on go. See Plans and add-ons.
Where to go next
- Warehouses — transfers to and from a central location
- Stock levels — the movement types a transfer writes
- Branch management — setting the branches up