> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dualentry.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Purchase Orders Reference

> Reference for DualEntry purchase orders: required fields, approval workflow, three-way matching, receiving, and converting POs to bills.

Purchase orders in DualEntry formalize your commitment to buy goods or services from a vendor before the bill arrives. They give you visibility into upcoming spend, enable three-way matching, and feed into your cash flow forecasts.

<Info>
  Purchase orders are **non-posting** transactions: they do not create journal entries or affect general ledger balances. Along with [sales orders](../accounts-receivable/order-management), they are DualEntry's two non-GL transaction types. GL impact happens only when the PO is [converted to a bill](#converting-a-po-to-a-bill), which posts to accounts payable and the referenced expense or asset accounts.

  Use purchase orders when you need to record a spend commitment, run it through approval, and match it to a receipt and bill later, without hitting the ledger until the bill is booked. Open PO amounts still appear in cash flow forecasts and budget consumption views as committed (but not yet posted) spend.
</Info>

## Creating a purchase order

Navigate to **Accounts Payable → Purchase Orders → New PO**, or send a `POST` to `/public/v2/purchase-orders/`. A purchase order requires a vendor, an order date, and at least one line item. Each line item includes a description, quantity, unit price, account, and optional classification dimensions.

You can attach supporting documents (quotes, contracts, scope of work) via the UI or the `/public/v2/purchase-orders/{id}/attachments/` endpoint. Attachments follow the same immutability rules as [bill attachments](./bill-management#attachments).

DualEntry validates required fields at submission. The vendor must be active, the order date cannot fall in a closed period, and each line item must reference a valid expense or asset account. If your organization uses [budgeting](../../platform-configuration/budgeting-and-forecasting), the system can also check whether the PO amount fits within the remaining budget for the selected account and period.

## PO approval and receiving

Purchase orders support dedicated [approval workflows](../../platform-configuration/approval-workflows) with the `purchase_order` record type. A common pattern is to require department head approval for POs under a threshold and executive approval above it.

Once all approval stages pass, the PO status moves to `approved` and it becomes available for receiving and billing. Rejected POs return to the requester with reviewer comments.

When goods or services arrive, record a receipt against the PO. Each receipt line references a PO line and specifies the quantity received. DualEntry tracks received vs. ordered quantities, so you can see at a glance what is outstanding.

Partial receipts are supported. If a vendor ships in multiple batches, record a receipt for each delivery. The PO status updates to `partially_received` until all lines are fulfilled, at which point it moves to `received`. You can also over-receive against a PO line (for example, when a vendor ships a bonus quantity), and DualEntry flags the variance for your review.

## Three-way match

Three-way matching compares three records before a bill is approved for payment:

* **Purchase order** - what you committed to buy (quantity and price).
* **Receipt** - what you actually received.
* **Bill** - what the vendor is charging you.

DualEntry flags discrepancies automatically. A quantity mismatch (billed more than received) or a price variance (unit price differs from the PO) surfaces as a match exception. You resolve exceptions by adjusting the bill, contacting the vendor, or overriding the match with an explanation that is captured in the [audit trail](../../platform-configuration/audit-trail-and-compliance).

Match exceptions appear in a dedicated queue under **Accounts Payable → Match Exceptions**, so you can review and resolve them in bulk rather than opening each bill individually. Each exception shows the PO line, receipt line, and bill line side by side with the variance highlighted.

<Warning>
  Three-way match exceptions block bill approval by default. If your organization prefers a softer control, configure the match tolerance percentage under **Settings → AP Preferences**. Bills within tolerance pass automatically; only those outside tolerance require manual review.
</Warning>

## Converting a PO to a bill

When you are ready to record the vendor's invoice, you can convert an approved PO directly into a bill. Navigate to the PO and select **Convert to Bill**, or use the API to create a bill that references the PO ID. DualEntry pre-populates the bill's line items from the PO, adjusted for any receiving variances.

The resulting bill enters the standard [bill approval workflow](./bill-management#approval-routing). The link between PO and bill is preserved, so reporting can trace spend from commitment through payment. You can convert a PO to a bill in full or in part, billing only the received lines and leaving the remainder on the PO for a future bill.

If the vendor's invoice differs from the PO (for example, a price increase or additional charges), you can edit the bill after conversion. The three-way match process catches these differences and routes them through your exception handling workflow.

## PO status tracking

Purchase orders move through these statuses:

* **Draft** - created but not yet submitted for approval.
* **Submitted** - in the approval workflow.
* **Approved** - approved and available for receiving.
* **Partially received** - at least one receipt recorded, but not all lines are fulfilled.
* **Received** - all ordered quantities have been received.
* **Billed** - a bill has been created from this PO.
* **Closed** - fully received and billed, or manually closed.
* **Voided** - cancelled before receiving.

You can filter POs by status in the list view or via the API's `record_status` parameter to monitor open commitments. The PO list also supports filtering by vendor, date range, and amount, which is useful when reconciling outstanding commitments at period end. For cash flow forecasting, open POs feed into the [budgeting and forecasting](../../platform-configuration/budgeting-and-forecasting) module as uncommitted spend.

## Related resources

* [Bill management](./bill-management) - the downstream record created from POs
* [Vendor payments](./vendor-payments) - paying the bills that originate from POs
* [Approval workflows](../../platform-configuration/approval-workflows) - configuring PO approval routing
* [Budgeting and forecasting](../../platform-configuration/budgeting-and-forecasting) - using PO commitments in cash flow projections
