Apps · Operations

Purchasing & suppliers

Order from a supplier, book the delivery in, and send back what you didn't want — with a stored document at every step and stock that stays honest.

User guideApps › Purchasing & suppliers

Where purchasing lives

Purchasing isn't a separate app you install. It's a set of screens inside Point of Sale, which is where the product catalog, the warehouses and the stock ledger already live. Install POS and every purchasing surface comes with it, grouped in the sidebar under POS.

ScreenWhat it's forPermission
SuppliersYour supplier list — the people you buy from.Record access to the entity
Purchase ordersRaise and send orders; see what's still outstanding.Purchasing
ReceiveBook a whole delivery in, line by line.Receive stock
Goods receiptsThe stored receiving documents, and where returns are raised.Receive stock
Supplier returnsHistory of everything sent back.Purchasing
Admin

Those permissions are POS capabilities, granted per person or team under Settings → Module Access. Admins always pass. A cashier granted only Sell can't open Receive or Purchasing, and the server refuses the operation even if they reach the URL directly. See Permissions & access.

Suppliers

Suppliers is an ordinary entity — name, tax ID, email, phone, address, contact, currency, active flag and notes — so it behaves like any other list in the workspace: filter it, save views on it, import it from a spreadsheet.

Two things make the supplier record worth filling in properly. The email is what Send to supplier uses when you email a purchase order. And once a delivery is tied to a supplier, you can raise a return against that supplier later — an untagged delivery can still be received, but there's nobody to send the goods back to.


The BackOffice Purchase Orders screen listing purchase orders with supplier, total and status
Purchase Orders. Selecting a PO opens its lines and the actions available for its status.
  1. Open Purchase orders and hit New PO The create panel opens above the list.
  2. Pick the supplier and the delivery warehouse Both are optional, but filling them in is what lets the delivery prefill later. Set Expected if you have a promised date.
  3. Add the lines Type into Search products to add… and click a match. Each line gets a quantity and a Cost (the unit cost you're being charged). The running Total sits under the lines.
  4. Create PO The order is saved as Draft with a number in the form PO-20260727-0001.
A PO is a commitment, not a transaction

Raising a purchase order changes no stock and posts nothing to the ledger. Nothing happens to your numbers until the goods actually arrive and you receive them.

Sending it

Select the order in the list to open its detail panel. On a draft you get two options:

  • Send to supplier emails the order — lines, quantities, unit costs, totals and the expected date — to the supplier's email address, with you copied in. A successful send moves a draft to Sent.
  • Mark sent just flips the status without emailing anything. Use it for orders you phoned through, or for suppliers with no email on file.

Once an order is on its way, Resend email sends it again without changing the status.

Purchase order statuses

StatusMeansSet by
DraftRaised but not yet with the supplier.Creating the PO
SentThe supplier has it.Send to supplier, or Mark sent
Partly receivedSome quantity has arrived; some is still outstanding.Receiving against the PO
ReceivedEvery line is fully received.Receiving against the PO
ClosedDone with — you're not expecting any more of it.Close
CancelledCalled off.Cancel PO

Partly received and Received are calculated for you every time you receive against the order — you never set them by hand. Close is the manual escape hatch for a short delivery you've decided not to chase: it's offered once an order is partly or fully received. Cancel PO is available until the order is fully received.

Receiving a delivery

Receive books a whole delivery in one go: every line updates the stock balance, writes a movement into the stock ledger, and the delivery as a whole is stored as a goods receipt document you can come back to.

Receiving against a purchase order

  1. Open the PO and click Receive The button appears on orders that are Sent or Partly received.
  2. Check the prefilled lines You land on the Receive screen with the supplier, the warehouse and one line per still-outstanding item already filled in, at the ordered unit cost.
  3. Adjust to what actually turned up Edit quantities down for a short delivery, correct unit costs against the supplier's paperwork, and remove any line that didn't arrive at all.
  4. Receive the lines Stock goes up, the receipt document is created, and the PO's received / outstanding figures update — which is what moves it to Partly received or Received.

Handling a partial delivery

Receive exactly what arrived and nothing more. The order's detail panel tracks each line as Ordered / Received / Outstanding, and the order sits at Partly received. When the rest turns up, open the same order, click Receive again, and the lines prefill with what's still outstanding. The order flips to Received once every line is covered.

If the balance is never coming, use Close to take the order off your open list without pretending the goods arrived.

Receiving without a purchase order

Plenty of stock arrives without a formal order. Open Receive directly and build the delivery yourself:

  1. Pick the Warehouse If you only have one, it's selected for you. You need at least one warehouse before you can receive anything.
  2. Pick the Supplier Optional — but tie the delivery to a supplier if you might ever return any of it.
  3. Add products Search by name or SKU. Adding the same product twice bumps its quantity rather than stacking a second line.
  4. Fill in quantity and unit cost per line See what the unit cost does below — it's the number that keeps your inventory valuation right.
  5. Add a reference, then Receive A PO number or supplier invoice number in Reference makes the delivery traceable. The success message shows the goods-receipt number that was created.

Per-line extras

Lines grow extra inputs depending on how the product is set up:

  • Each / Pack ×n — for products with a pack size, switch the line to Pack and enter cases rather than singles. Quantity and cost are converted into base units for you.
  • Lot / batch # and Expiry date — appear on lot-tracked products, so the batch and its expiry are recorded as the goods land.
  • Serial numbers — appear on serial-tracked products, one per line. The quantity is taken from the number of serials you enter, so you can't receive ten units and register nine serials.

Landed costs

Once the delivery has lines, a Landed costs (optional) block appears with Freight, Import duty and Other. Whatever you enter there is spread across the lines by value and folded into each item's inventory cost, so a container's shipping ends up in the cost of the goods rather than as a separate expense.

Safe to retry

Receiving the same Reference twice does nothing the second time — you'll get a notice saying a receipt with that reference already exists and nothing was changed. If a submission times out or the network drops, just try again; you can't double-count a delivery you gave a reference to.

What receiving does to cost

By default every product carries one weighted-average cost, and receiving is the only operation that changes it. Each receipt blends the new goods into the old:

new cost = (old qty × old cost + received qty × receipt cost) ÷ (old qty + received qty)

  • A product with no cost yet simply adopts the receipt's cost — no averaging a real cost down against a zero.
  • A line received without a unit cost leaves the average untouched.
  • Landed costs are already inside the figure that gets averaged in.
  • Taking stock out — sales, transfers, supplier returns — never moves the average.

Workspaces that need to know what a specific batch cost can switch costing to FIFO under Settings → Accounting. Each receipt then becomes a dated cost layer, relieved oldest-first (earliest-expiry first for lot-tracked goods), and the layers show up on Stock overview. Weighted average stays the default and nothing changes until an admin flips the switch. See Stock & warehouse.

Enter costs as you receive

Unit cost is what your inventory valuation and your cost of goods sold are built on. Receiving at zero because "we'll fix it later" means those goods sell at no cost, and the profit on every one of those sales is wrong. It's a two-second field at receiving time and an archaeology project afterwards.

Goods receipts

Every delivery you receive is stored as a goods receipt — numbered GR-20260727-0001, carrying the supplier, warehouse, reference, currency, total cost and one line per product with its quantity and unit cost.

The Goods receipts screen lists them newest-first with the receipt number, supplier, cost and status. Select one to see its lines — and to send goods back.

Receipt statusMeans
ReceivedBooked in; nothing returned.
Partly returnedSome of it has gone back to the supplier.
ReturnedEvery line has been fully returned.
CancelledThe receipt is void.

Returning goods to a supplier

Returns are always raised against a goods receipt — that's what tells the system which supplier, which warehouse and what the goods cost.

  1. Open Goods receipts and select the receipt Its lines load on the right with a Received column and a Returnable column.
  2. Enter quantities in the Return column You can't exceed Returnable, which is what was received minus anything already returned — and capped by what's still physically on the shelf. A line that's mostly been sold shows a note telling you how much is actually on hand.
  3. Pick a Reason Damaged, Overstock, Wrong item, Expired or Other.
  4. Pick a Settlement Clear GRNI if the supplier hasn't invoiced you for these goods yet; Supplier credit — reduce A/P if the bill is already in the books. See the ledger section.
  5. Add notes and Return to supplier An RMA number or a contact name in the notes saves a conversation later. Stock comes down, and a supplier-return document is created with a number like SR-20260727-0001.

The receipt's status recalculates to Partly returned or Returned, and the return appears on the Supplier returns screen with its number, supplier, reason and cost.

A return is all-or-nothing

If any line asks for more than is returnable, or more than is physically on hand, the whole return is refused — nothing partial is written. The error names the product and the number it would accept, so fix that line and submit again.

Admin

Returns are checked against the Purchasing capability on the server, while the Goods receipts screen itself opens with Receive stock. Grant both to whoever handles returns, or the return button will be there and the submission will be refused.

What it does to stock

ActionStockDocument
Raise a PONothingPurchase order (Draft)
ReceiveBalance up, one receipt movement per lineGoods receipt
Return to supplierBalance down, one return movement per lineSupplier return

Stock movements are the source of truth — the on-hand figure on each product is a running total kept in step with them, never edited behind their back. That's what makes Stock movements a real audit trail: every unit that ever moved has a row saying when, where, why, and against which document. The whole picture is laid out in Stock lifecycle.

What it does to the ledger

This depends entirely on one setting — Inventory method under Settings → Accounting.

Periodic is the default, and under it receiving posts nothing. Stock still moves and receipts are still stored; purchases hit the books through the supplier bill, the way they always did. If you've never touched the setting, this is you, and you can skip the rest of this section.

Perpetual capitalizes stock onto the balance sheet as it arrives, so inventory value and the ledger track each other continuously:

StepJournal
Goods receiptDr Inventory 1340 / Cr GRNI 3240
Supplier billDr GRNI 3240 + Dr input VAT / Cr Accounts payable 3210
SaleDr COGS 7100 / Cr Inventory 1340
Supplier return — Clear GRNIDr GRNI 3240 / Cr Inventory 1340
Supplier return — Supplier creditDr Accounts payable 3210 / Cr Inventory 1340

GRNI — Goods Received Not Invoiced — is the clearing account in the middle. The receipt credits it, the supplier's bill debits it, and once both sides have happened it nets to zero. That's the three-way match between the order, the delivery and the invoice, and it's what stops the same purchase being counted twice.

Input VAT is recognised on the supplier's bill or tax invoice, not at receipt — standard Georgian practice, since the VAT is claimed against the tax document.

In perpetual mode, Bills mean goods

Supplier bills clear GRNI, so they're assumed to be for stock you received. Book rent, utilities, subscriptions and other non-inventory costs through Expenses instead — putting them through Bills leaves GRNI stranded. Confirm the policy with your accountant before switching a live workspace to perpetual.

Admin

The receipt and return journals are posted by two auto-actions — Post goods receipt to ledger and Post supplier return to ledger — which are switched on per workspace under Settings → Accounting. Both do nothing in periodic mode. More in Accounting.

Everyday questions

The supplier invoiced a different price than the PO

Receive at the price you were actually charged — the unit cost on the receiving screen is what feeds inventory valuation, not the price you ordered at. The PO's outstanding quantities are tracked separately and aren't affected.

I received into the wrong warehouse

Use Transfer to move the stock to where it should be. That keeps both movements on the record rather than rewriting history — see Stock & warehouse.

I need to send back something I sold most of

You can only return what's still on hand. The receipt line will show you the on-hand figure and cap the returnable quantity to it.

I get "No access to this app" on a purchasing screen

You're missing the capability that screen needs — Purchasing for purchase orders and supplier returns, Receive stock for receiving and goods receipts. An admin grants them under Settings → Module Access.