---
title: "Purchasing"
slug: admin/purchasing
url: https://projectri.com/docs/admin/purchasing
section: admin
audience: admin
app_route: "/[slug]/admin/purchasing"
permissions: [po.view, po.manage, po.approve, vendor.view, vendor.manage, bill.view, bill.manage, bill.approve, finance.rates.manage]
mobile: "/purchasing"
updated: 2026-09-08
source: Projectri documentation
---

# Purchasing

The buy side — vendors and subcontractors, purchase orders and what they commit, supplier bills, and the switch that decides whether any of it reaches project margin.

![Purchasing](https://projectri.com/docs-shots/admin-purchasing.png)

## What it is

Purchasing is what you have committed to suppliers and what they have billed
you. Three lists on one page — **Orders**, **Bills** and **Vendors** — because
they are one workflow: you raise a purchase order against a vendor, and a bill
arrives against the order.

The headline is **Committed**: money promised and not yet billed. That figure
exists nowhere else in the product, and it is the one that makes a margin
forecast honest.

## How to get there

**Money → Purchasing**, under Receivables. The **ADMIN** role is needed to open
the console.

Each list is behind its own key, and the buttons appear only when you hold them:

- `po.view` / `po.manage` / `po.approve` — see orders, raise and edit them,
  approve one and commit the money.
- `vendor.view` / `vendor.manage` — see vendors, create and edit them.
- `bill.view` / `bill.manage` / `bill.approve` — see bills, record and code
  them, approve one into project cost.
- `finance.rates.manage` — set the date from which vendor cost counts towards
  margin. Deliberately the rate-card key, not `po.manage`: raising an order and
  redefining what margin means are different acts.

No plan gate.

## How to use it

### Read the three totals

1. **Committed** — approved order totals less what has been billed against them.
2. **Accrued** — received, not yet billed.
3. **Actual cost** — approved bills, which is real cost.

All three are stated in your reporting currency, using the rate each document
froze rather than a live one.

### Turn vendor cost on in margin

1. Read the banner under the totals. Until a date is set it is amber and says
   that every figure on the page is real and none of it reaches a margin number.
2. Press **Choose a date** (or **Change date**).
3. Pick the day from which approved bills should be counted. It is a **date, not
   a switch**, on purpose: flipping a boolean after backfilling a year of bills
   would rewrite margins you have already reported.
4. The dialog previews what the date would do — how much cost it pulls in,
   across how many projects, from how many approved bills — before you commit,
   and names separately any bills that arrived with no exchange rate and
   therefore add nothing.

### Add a vendor

1. Open the **Vendors** tab and press **New vendor**.
2. Give a name, kind (supplier, subcontractor, freelancer), currency, payment
   terms in days, tax number and contact email.
3. Currency is fixed once orders or bills exist against the vendor, because
   every order and bill freezes its own.
4. A vendor who is also one of your clients says so on their screen.
5. **Archive** hides a vendor from the pickers; **Restore** brings them back.

Both a purchase order and a bill are raised against a vendor, so on a fresh
workspace the primary buttons on the other two tabs are disabled and say so.

### Raise and approve a purchase order

1. On the **Orders** tab press **New order**.
2. Choose the vendor, give it a title, add lines with a kind (service, goods,
   travel, licence), description, quantity and unit cost.
3. Attach it to a project — that is the project whose margin the cost will land
   on.
4. **Rebillable** passes the cost on to the client with a markup percentage.
5. Save it as a draft, then **Approve**. Approving is what makes the money show
   as committed, and an order with nothing on it cannot be approved.
6. An approved order cannot be edited. Raise a new one or **Cancel** this one.

### Record what has arrived

1. Open the order and press **Record receipt**.
2. Enter the **total received so far** on each line, not just today's delivery.
3. Partly received orders move to **Part received**; fully received ones to
   **Received**. The difference between received and billed is what shows as
   accrued.

### Record and approve a supplier's bill

1. On the **Bills** tab press **Record a bill**.
2. Enter the supplier's own invoice number, the bill date — the month the cost
   belongs to — the due date, and the lines. Link it to an order to keep that
   order's committed figure honest.
3. Code each line to a project, and mark it rebillable with a markup where the
   client is paying for it.
4. **Approve bill** turns it into project cost and freezes the exchange rate on
   the document. **Reject** is "not this, not yet" and can be reversed by
   approving later.

## What it affects

- **Project margin.** An approved bill dated on or after the counting date is
  folded into the project's cost on [Financials](/docs/admin/financials), where
  it appears as the **Vendor** column beside labour and expenses. Earlier bills
  are left alone, so margins you have already reported do not move.
- **Committed on the profitability table.** Financials shows committed spend as
  a lighter figure beside actual cost — it is not cost yet, and it is the reason
  a margin that looks healthy today may not be at delivery.
- **What the client is charged.** A rebillable line is passed through to the
  client with its markup and, once it lands on an invoice, is stamped and reads
  **Already on a client invoice** so nobody chases why it is not on the next
  run.
- **Who can see it.** Vendor and committed figures are cost, so they are removed
  from finance reports for a reader without `report.cost` — the columns are
  absent, not zeroed.

## On mobile

The **Purchasing** screen in the phone app takes the deciding half: committed
spend, the approval queue for orders and bills, and the banner saying whether
any of it reaches margin at all. Tapping through opens a purchase order or a
vendor bill to approve or reject it. Raising an order and coding a bill across
projects stay on the web — a line grid that has to sum is not thumb work, and
getting it wrong mis-states a project's margin rather than one row.

## Limits and gotchas

- **Three-way match is soft.** A bill that takes its order over the committed
  total is **approved and flagged**, never blocked. The variance notice comes
  back from the approval itself and states the amount, the percentage and the
  order total it went over.
- **A bill dated into a closed month is refused.** Approving it would move a
  margin that has already been reported. Date it into the open period, or reopen
  the period on [Finance setup](/docs/admin/finance).
- **An approved bill cannot be rejected.** It is already counted as cost — raise
  a credit note with the supplier instead.
- **Three purchase-order statuses exist in the data but nothing sets them.** The
  filter offers only the five the engine writes: Draft, Approved, Part received,
  Received and Cancelled.
- **When the bills were paid is not recorded here.** The payment run belongs to
  your accounting system.
- Order and bill currency is frozen per document. The totals convert through the
  rate the document froze, which is why the preview and the margin engine agree.

## Related

- [Financials](/docs/admin/financials) — where vendor cost and committed spend land.
- [Finance setup](/docs/admin/finance) — closing a period, and the rate-card permission this page borrows.
- [Invoicing](/docs/admin/billing-runs) — how a rebillable cost reaches a client invoice.
- [Expenses](/docs/workspace/expenses) — a person's own claim, which is a different document from a supplier's bill.

## Related

- [Financials](https://projectri.com/docs/admin/financials.md): The finance reports — a scorecard, utilisation, project profitability, WIP and ageing, the tax return, and the exceptions list that says what to do on Monday.
- [Invoicing](https://projectri.com/docs/admin/billing-runs.md): Assemble a period's billing from approved time, expenses, fixed fees, milestones and retainer draws, review what it proposes per client, then issue it as invoices.
- [Finance setup](https://projectri.com/docs/admin/finance.md): The configuration every financial number divides by — rate cards, working calendars, exchange rates, targets, leave, timesheet and expense policy, overtime, tax, dunning, payments, cost centres, budget alerts and the month-end close.
- [Expenses](https://projectri.com/docs/workspace/expenses.md): File a folder of receipts in one sitting, claim mileage and per diem at computed rates, and — if you approve — work the queue of submitted claims.
