Purchase orders

Overview
This is where commissions to suppliers and subcontractors run. Six states: draft, approved, sent, partially delivered, completed, cancelled.
The figure that matters is called committed: the bindingly committed volume across all filtered orders — excluding drafts and cancellations. That is money not yet spent but already promised. Anyone looking only at paid invoices sees that obligation when it falls due, not before.
Core tasks
Create a purchase order. New purchase order requires a title and a supplier; brand, project, order date, delivery deadline, payment term in days, tolerance in percent and notes follow.
The project reference is this module's lever: it turns a purchase order into a project cost — and therefore reportable in the purchasing report and in project profitability.
The tolerance defines how much deviation on delivery passes without objection.
Approve and send. The route has two steps: first approve, then send. Both also work as bulk actions across several orders.
Mark as delivered. Delivered sets the progress; partial deliveries have their own state.
Cancel or discard. Cancel closes an existing order — it cannot be undone. A pure draft can instead be discarded, that is deleted permanently. Both actions ask beforehand.
Fields in detail
The What it does column answers what changes in the system — not what the field is called. The grey name behind the label is the API field: the same thing runs under that name through automation, import and AI tools.
The difference from a goods order: this is about procurement with budget and approval — services, subcontracting, project purchasing. Not about stock goods.
Creating a purchase order
| Field | Required | Values / format | What it does |
|---|---|---|---|
Title title | yes | text, max. 200 characters | What it is about. It appears on the document and in the approval request. |
Supplier supplierRoleId | yes | an existing supplier | Who it is procured from. Terms come from there. |
Items items | yes | services with quantity and price | What is procured. |
Project projectId | no | an existing project | What it is procured for. Only then does the cost enter the project calculation instead of vanishing into overheads. |
Framework agreement frameworkAgreementId | no | an existing framework agreement | Which framework is drawn on. The call-off reduces the agreed volume and so keeps visible how much is left. Framework agreements carry a brand; lists show only agreements of brands in which you may read supplier framework agreements, plus those without a brand. A call-off on the framework agreement creates the purchase order itself: as a draft at the agreed price, in the agreement's brand (for an agreement without a brand you name the brand with the call-off) — this additionally requires the right to create purchase orders. The call-off journal on the agreement names the purchase order for each call-off. If that purchase order is cancelled or deleted as a draft, its quantity goes back to the agreement; the journal shows the return as a separate line. |
Order date orderDate | no | date | When it was ordered. |
Delivery deadline deliveryDeadline | no | date | By when it must be delivered. The basis for chasing and date tracking. |
Budget budgetAmount | no | amount, 0 or more | The approved frame for this order. The approval level follows from it — which is why setting the figure too low is not a trick but a mistake that surfaces at invoice intake. |
Payment term (days) paymentTermsDays | no | 0 or more | When payment is due. |
Tolerance (%) tolerancePercent | no | 0 to 100 | How far the invoice may deviate from the order before it goes to clarification. |
Brand brandId | no | one of your brands | Which brand procures. |
Document template documentTemplateId | no | a configured template | Layout of the document PDF. |
Notes notes | no | text | Internal note. |
Fulfilment
| Field | Values / format | What it does |
|---|---|---|
Partial fulfilment partial | yes/no | Whether a partial delivery counts the order as partly fulfilled. Off means complete or nothing. |
Recorded actual cost recordedActualCost | amount, 0 or more | What it really cost in the end. Setting it against the budget is the purpose of the whole mask — without this figure every post-calculation stays an estimate. |
Settings & permissions
- Module
module.procurement. procurement.po.create,.editandprocurement.po.approvefor approval — separated
so that creating and approving need not be the same hand.
procurement.cost.assign_projectto assign to a project.procurement.supplier.view/.managefor suppliers,procurement.rating.managefor
rating them.
- The status catalogue is maintained under Purchasing settings.
FAQ & troubleshooting
"Committed" looks too low. Drafts do not count — only approved orders are binding. Cancelled ones do not count either.
I cannot approve. Then procurement.po.approve is missing. The permission is deliberately separate from creating.
A purchase order does not appear in the report by project. Then the project reference is missing. Without it, it is a cost without an attribution.
A cancellation was a mistake. It cannot be withdrawn — the confirmation says so explicitly. Create a new purchase order.