User guide › Apps › 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.
| Screen | What it's for | Permission |
|---|---|---|
| Suppliers | Your supplier list — the people you buy from. | Record access to the entity |
| Purchase orders | Raise and send orders; see what's still outstanding. | Purchasing |
| Receive | Book a whole delivery in, line by line. | Receive stock |
| Goods receipts | The stored receiving documents, and where returns are raised. | Receive stock |
| Supplier returns | History of everything sent back. | Purchasing |
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.
- Open Purchase orders and hit New PO The create panel opens above the list.
- 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.
- 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.
-
Create PO
The order is saved as Draft with a number in the form
PO-20260727-0001.
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
| Status | Means | Set by |
|---|---|---|
| Draft | Raised but not yet with the supplier. | Creating the PO |
| Sent | The supplier has it. | Send to supplier, or Mark sent |
| Partly received | Some quantity has arrived; some is still outstanding. | Receiving against the PO |
| Received | Every line is fully received. | Receiving against the PO |
| Closed | Done with — you're not expecting any more of it. | Close |
| Cancelled | Called 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
- Open the PO and click Receive The button appears on orders that are Sent or Partly received.
- 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.
- 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.
- 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:
- Pick the Warehouse If you only have one, it's selected for you. You need at least one warehouse before you can receive anything.
- Pick the Supplier Optional — but tie the delivery to a supplier if you might ever return any of it.
- Add products Search by name or SKU. Adding the same product twice bumps its quantity rather than stacking a second line.
- 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.
- 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.
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.
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 status | Means |
|---|---|
| Received | Booked in; nothing returned. |
| Partly returned | Some of it has gone back to the supplier. |
| Returned | Every line has been fully returned. |
| Cancelled | The 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.
- Open Goods receipts and select the receipt Its lines load on the right with a Received column and a Returnable column.
- 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.
- Pick a Reason Damaged, Overstock, Wrong item, Expired or Other.
- 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.
-
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.
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.
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
| Action | Stock | Document |
|---|---|---|
| Raise a PO | Nothing | Purchase order (Draft) |
| Receive | Balance up, one receipt movement per line | Goods receipt |
| Return to supplier | Balance down, one return movement per line | Supplier 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:
| Step | Journal |
|---|---|
| Goods receipt | Dr Inventory 1340 / Cr GRNI 3240 |
| Supplier bill | Dr GRNI 3240 + Dr input VAT / Cr Accounts payable 3210 |
| Sale | Dr COGS 7100 / Cr Inventory 1340 |
| Supplier return — Clear GRNI | Dr GRNI 3240 / Cr Inventory 1340 |
| Supplier return — Supplier credit | Dr 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.
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.
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.