Solavel Solavel Docs

Purchase Orders

docs/solavel-finance/purchase-orders.md

Who can use this: Owner, Manager, Accountant. URL / Route: /finance/ap/purchase-orders (finance.ap.purchase-orders.index). Detail: show, create, store, edit, update, destroy. Actions: approve, receive, convert-to-bill, pdf, send-email. Plan / feature gate: feature:enable_purchase_orders (premium). Permissions: purchase_orders.view, purchase_orders.create, purchase_orders.edit, purchase_orders.approve, purchase_orders.receive, purchase_orders.convert, purchase_orders.delete.

Purpose

A Purchase Order (PO) is a commitment to buy from a supplier. It is the procurement counterpart of a Sales Order: it records what you intend to buy before the supplier bills you. A PO does not hit the General Ledger — it is a planning and control document. When goods arrive and the supplier sends a bill, you convert the PO into a Bill.

Step by step

Create a purchase order

Route: finance.ap.purchase-orders.create / store. Permission: purchase_orders.create.

  1. Open Purchases ▸ Purchase Orders ▸ New purchase order.
  2. Pick the Supplier.
  3. The PO number comes from the active sequence — see Settings.
  4. Set the Order date and an optional Expected date.
  5. Add line items: product/service, description, quantity, unit price, tax.
  6. Save as draft, or Save and submit if approvals are on.

Approve a purchase order

Route: finance.ap.purchase-orders.approve. Permission: purchase_orders.approve.

When PO approvals are enabled (enable_po_approvals), a PO must be Approved before it can be received or converted. Approvers see pending POs in the Approval queue.

Receive goods

Route: finance.ap.purchase-orders.receive. Permission: purchase_orders.receive.

If goods receiving is enabled (enable_po_receiving), record partial or full receipts against the PO. Receiving updates the received-quantity on each line and, for stocked items, can feed Inventory.

Convert to a bill

Route: finance.ap.purchase-orders.convert-to-bill. Permission: purchase_orders.convert.

When the supplier's invoice arrives, convert the PO to a Bill. The bill inherits the supplier, lines, and amounts; you then post and pay it normally. With 3-way match enabled (enable_3_way_match), the bill is checked against the PO and the recorded receipt before posting.

What posts to the GL

A PO is procurement, not accounting — it never writes a journal at any stage:

Stage Journal?
Draft / Pending Approval / Approved No journal
Receive goods (partial or full) No journal — only the received-quantity counters update
Convert to bill A draft bill is created — still no journal
Post that bill Journal posted (see Bills — How the journal looks)

This is why a PO does not need a period to be open, does not age in AP, and does not surface on financial reports. It is a planning and control document. The cost only hits the books when the supplier's bill is actually posted.

With 3-way match (feature:enable_3_way_match): converting a PO to a bill verifies that the bill's quantities and amounts match the PO and the goods receipt before posting is allowed. Mismatches block posting until you reconcile them.

Lifecycle

Draft  ──Submit (approvals on)──▶  Pending Approval  ──Approve──▶  Approved
Approved  ──Receive──▶  Partially Received / Received
Approved / Received  ──Convert──▶  Bill

Common mistakes

  • "3-way match blocked the bill." With feature:enable_3_way_match on, the bill's quantities and amounts must match the PO and the recorded goods receipt before posting. Open the bill side-by-side with the PO + receipt to find the variance — fix either side, then re-post.
  • Partial receipt then convert. Converting a PO with only a partial goods receipt creates a bill for the received quantities only. The PO stays open for the remainder until you receive (or close) it.
  • Cancelled PO with received goods. You cannot cancel a PO that has received stock — the inventory has already moved. Convert to a bill for the received portion first, then cancel the remainder.
  • Currency drift. A PO carries the supplier's currency. When converting to a bill, the bill takes the rate at the bill date, not the PO date — see Multi-currency.

Behaviour and rules

  • No GL impact. A PO never posts journal entries. Only the resulting Bill does.
  • Premium feature. Purchase Orders require the enable_purchase_orders plan feature. If it is off, the menu item is hidden.
  • Optional sub-features. Approvals, receiving, and 3-way match are each separately switchable.

Related

Source: docs/solavel-finance/purchase-orders.md ← All documentation