WHAT WE SEE IN THE FIELD
The supplier invoice says 100 units. The warehouse received 80.
What happens next?
In many companies, someone in Finance receives the invoice and starts asking questions.
- Was everything delivered?
- Is there another shipment coming?
- Did the warehouse register the receipt correctly?
- Should we pay the full invoice?
- Was the Purchase Order for 80 or 100?
The information exists, but simply spread across different people and documents.
This is exactly the type of control that a properly configured purchasing process in Odoo should provide.
A Purchase Order tells you what you agreed to buy, the Receipt tells you what actually arrived, and the Vendor Bill tells you what the supplier wants you to pay.
Those three documents should not live independently.
BILL CONTROL IN ODOO
First decide what the supplier is allowed to invoice
Odoo allows products to use two different Bill Control Policies.
On ordered quantities: The vendor bill can be based on the quantity ordered as soon as the Purchase Order is confirmed.
On received quantities: Billing follows what has actually been received.
Odoo applies these policies at product level, with goods using received quantities by default and services using ordered quantities by default.
This sounds like a configuration detail, but it is actually an important purchasing decision.
ORDERED QUANTITIES VS RECEIVED QUANTITIES
They represent two different business rules
Imagine you order: 100 units × €20 = €2,000
The supplier delivers only 80 units today.
- If the product is configured to bill ordered quantities, the Purchase Order can already generate a bill based on the 100 units ordered.
- If it is configured to bill received quantities, the draft bill generated from the Purchase Order reflects the quantity that has actually been received.
Neither approach is universally correct.
The question is: What event should create the company's liability to the supplier?
For some services, the contractual commitment may justify billing based on what was ordered.
For physical goods, many companies want receipt confirmation before the invoice becomes payable.
That rule should be decided consciously.
WHAT IS 3-WAY MATCHING?
Purchase Order + Receipt + Vendor Bill
Three-way matching is a purchasing control based on comparing three pieces of information:
- What did we order?
- What did we receive?
- What is the supplier billing us for?
In Odoo, 3-way matching is designed to work with the Received Quantities control policy and helps determine whether a vendor bill should be paid based on the receipt of the goods included in the Purchase Order.
This gives Accounts Payable visibility that would otherwise require asking the warehouse or buyer.
The system already has the operational evidence.
A SIMPLE EXAMPLE
PO: 100 units
Received: 80 units
Vendor invoice: 100 units
Without an integrated process, Finance may simply see an invoice for 100 units.
With Purchase and Inventory connected, Odoo knows that only 80 units have been received.
That creates a discrepancy that deserves attention before payment.
Perhaps the remaining 20 units are arriving tomorrow, perhaps the supplier invoiced too early, perhaps someone forgot to validate a receipt, perhaps the order was partially cancelled...
The ERP should not decide the commercial reality for you.
It should make the inconsistency visible.
HOW WE WOULD CONFIGURE IT
Start with purchasing scenarios, not with one global rule
We would not automatically set every product to the same control policy. Instead, we would look at how different categories are purchased.
For example:
Stocked components: Typically, receipt confirmation is important. Billing on received quantities may provide better control.
Office supplies: The same logic may apply, particularly if partial deliveries are common.
Consultancy services: Physical receipt does not exist in the same way. Billing based on ordered quantities may make more sense.
Subscriptions: The commercial agreement may itself determine when billing is expected.
Freight or ancillary charges: These may require different treatment again.
The product configuration should reflect the purchasing reality.
THREE-WAY MATCHING IS NOT JUST A FINANCE FEATURE
Warehouse discipline matters
Three-way matching only works properly if receipts are reliable. Imagine:
- The supplier delivers all 100 units.
- The warehouse physically receives them.
- But only 80 are validated in Odoo.
- Finance now sees a discrepancy that does not really exist.
- The system is technically correct.
- The underlying data is not.
This is why Accounts Payable automation depends on operational discipline upstream.
Receiving goods accurately is an accounting control as much as a warehouse activity.
PARTIAL DELIVERIES
Real purchasing rarely happens in one clean transaction
A Purchase Order for 500 units may arrive as:
- 200 units Monday
- 150 units Thursday
- 150 units next week
Odoo supports partial receipts and backorders, and a control policy based on received quantities allows billing to follow the quantities that have arrived rather than assuming that the complete Purchase Order has been delivered.
This becomes particularly useful for businesses with long supply chains or frequent partial deliveries.
- The buyer still sees the original commitment.
- The warehouse records what has arrived.
- Finance sees what can reasonably be billed.
Each team works with the same transaction.
THE VENDOR BILL CAN ALSO ENTER FROM ACCOUNTING
The process does not always start from Purchase
Suppliers do not wait for your ERP workflow.
Their invoice may arrive by email before someone opens the Purchase Order.
Odoo allows vendor bills to be entered manually, uploaded as PDF or received through the purchase journal's email alias. Bills can also be digitised and matched against existing Purchase Orders.
A draft Vendor Bill can also be linked to an existing Purchase Order, allowing Odoo to populate it using the PO information.
That matters because the process should support the way documents actually arrive.
The control should remain intact even when the supplier invoice reaches Finance first.
THE MOST COMMON MISTAKE
Thinking that matching replaces approval
It does not.
A clean match tells you that the documents are consistent. It does not necessarily mean the invoice should automatically be paid.
A company may still require:
- budget approval,
- manager approval,
- project validation,
- cash flow review,
- or payment authorization.
Three-way matching solves a specific control problem: Does the supplier bill correspond to what we ordered and received?
That is different from: Who is allowed to approve this payment?
The implementation should keep those concepts separate.
ANOTHER COMMON MISTAKE
Creating Purchase Orders but bypassing them when invoices arrive
This happens more often than it should.
- Purchasing creates a PO.
- The supplier sends the invoice.
- Finance creates a new Vendor Bill manually without linking it to the Purchase Order.
- The PO exists.
- The receipt exists.
- The invoice exists.
- But the chain between them has been broken.
At that point, the ERP cannot provide the control it was designed to provide.
A purchasing process only becomes valuable when the documents remain connected throughout the flow.
WHAT ABOUT PRICE DIFFERENCES?
Quantity matching is only part of invoice control
A supplier invoice can match the received quantity and still be wrong.
- The agreed price may have changed.
- A discount may be missing.
- Transport charges may have been added.
- Taxes may be incorrect.
This means 3-way matching should be understood as one layer of Accounts Payable control rather than a complete invoice approval mechanism.
The purchasing team still needs accurate vendor prices and commercial conditions, and Finance still needs appropriate accounting and approval controls.
Integration reduces the amount of manual verification.
It does not eliminate judgement.
PURCHASE ANALYSIS
The process also creates better management information
Once Purchase Orders, receipts and billing are connected, Odoo can report on more than purchasing value.
The Odoo Purchase Analysis report includes measures such as:
- Quantity ordered
- Quantity received
- Quantity billed
- Quantity still to be billed
- Days to confirm
- Days to receive
- Total purchasing value
This allows purchasing management to ask better questions.
- Which suppliers are consistently delivering late?
- Which orders remain partially received?
- Which received goods are still waiting to be billed?
- Where are purchasing lead times increasing?
The operational process becomes a source of management data.
OXALYO'S TAKE
A supplier invoice should not arrive as new information
By the time Finance receives the bill, Odoo should already know most of the story.
- What was requested.
- Who approved the purchase.
- What price was agreed.
- What was received.
- What remains outstanding.
The invoice should complete that chain, not restart the investigation.
That is why we look at Purchase, Inventory and Accounting as one process.
A perfectly configured Vendor Bill screen will not solve a receiving process that is not maintained, and a well-controlled Purchase Order will not help Finance if supplier invoices are disconnected from it.
The value comes from the complete flow.
Purchase Order → Receipt → Vendor Bill → Payment
When those documents remain connected, Accounts Payable becomes much more about exceptions and much less about chasing information.
FAQ: ODOO 3-WAY MATCHING AND VENDOR BILLS
What is 3-way matching in Odoo?
Three-way matching compares the Purchase Order, the receipt of goods and the Vendor Bill to help determine whether a supplier invoice should be paid. Odoo's 3-way matching feature is intended to work with products configured to bill based on received quantities.
What is the difference between ordered and received quantities in Odoo Purchase?
With On ordered quantities, billing is based on the quantity in the Purchase Order. With On received quantities, the quantity received is used to generate the draft Vendor Bill.
Can Odoo handle partial deliveries?
Yes. Partial receipts can be recorded against Purchase Orders, allowing the remaining quantity to stay outstanding and billing to reflect received quantities where that control policy is used.
Can a Vendor Bill be linked to an existing Purchase Order?
Yes. Odoo allows a draft Vendor Bill to be completed from an existing Purchase Order, which populates the bill using information from that PO.
Can supplier invoices be uploaded directly into Odoo?
Yes. Vendor bills can be manually created, uploaded as PDFs or sent through an email alias. Odoo can also digitise bills and match them with Purchase Orders. Some digitisation services require IAP credits.
Does 3-way matching mean invoices are automatically approved?
No. Matching verifies the relationship between ordered, received and billed quantities. Internal invoice approval and payment authorization may still require separate controls depending on the company's process.
Should every product use billing based on received quantities?
No. The appropriate policy depends on the purchasing scenario. Goods and services may require different rules, and Odoo allows the control policy to be defined at product level.
Does Finance know what was received before the supplier asks to be paid?
If validating a Vendor Bill still requires emails to Purchasing and Warehouse, the information may already exist in Odoo but the process is not connecting it properly.
Talk to Oxalyo about your Odoo Purchase and Accounts Payable process.