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.
Assign a line item to a task. In the Line Items tab the Task column picks, per line item, a task of that line item's project — only tasks of this project are offered, and without a project the choice stays locked. If a task belongs to a different project, the system rejects it; changing the line item's project clears the task. Whoever sends only the task through the API gets the task's project on the line item.
Ordering from a freelancer. If the supplier is linked to a freelancer who has already booked time in the order's project, Octibiz warns on saving: depending on the cost path in the project team either the order (path B, default) or the time (path A) counts towards the margin — never both. If overlaps are set to block in the project settings, a new order on path A is rejected; existing orders stay editable. An incoming invoice that accounting assigns to this order shows the same warning — it is never blocked, every document must be recordable.
The tolerance defines how far actual costs may exceed the budget before the overrun is reported or, in hard cap mode, rejected. If the field stays empty, the supplier's tolerance applies (terms on the supplier), otherwise the default from the procurement settings. Below the field it says which tolerance applies and where it comes from.
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
Plan vs. actual at a glance. The order list shows Budget, Actual (sum of the assigned incoming invoices, otherwise the manually recorded value) and Consumed in percent per order — green up to 80 %, yellow up to 100 %, red above; the Consumed column sorts by it. The dashboard tile Budget consumption per order shows the most consumed orders first; orders without a budget come last.
Budget mode (budgetCapMode): warn (warn, default) only reports an exceeded budget, hard cap (hard_cap) rejects an actual amount beyond budget plus tolerance.
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 actual costs may exceed the budget before a warning or, with a hard cap, a rejection. Empty = the supplier's tolerance, otherwise the procurement default (5 %). The API reports the applicable tolerance as effectiveTolerancePercent together with its origin toleranceSource. |
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.