You Paid $14,800 for Inventory You Don't Have: Bill Control Policies in Odoo 18
By Braincuber Team
Published on December 20, 2025
Your AP clerk just paid $14,800 for 200 units you ordered. Problem: You only received 143 units. The other 57 are "in transit" according to your supplier. They've been "in transit" for 11 days.
You prepaid for inventory you don't have. That's $4,218 tied up in limbo. Your cash flow statement shows you're sitting on $127K in inventory when the real number is $94K. Your accountant uses the inflated number to calculate working capital. You get declined for a credit line because your ratios look worse than they are.
Last quarter, this billing-timing mismatch happened 47 times. Total cash locked in "ordered but not received" inventory: $61,300. For 8-23 days per incident. That's working capital you can't use for payroll, marketing, or anything else.
Odoo 18's Bill Control Policy setting fixes this by letting you choose: bill based on what you **ordered** or what you **actually received**. Here's which one to use and when.
You're Bleeding Cash If:
What Bill Control Policy Actually Controls
When you create a vendor bill in Odoo, the system needs to know: "How much should this bill be for?" The Bill Control Policy setting determines this.
| Policy | Bill Amount Based On | Use When |
|---|---|---|
| Ordered Quantities | What you ordered from supplier | Prepayment terms, reliable suppliers, drop-shipping |
| Received Quantities | What actually arrived at your warehouse | Net payment terms, new suppliers, high-variance orders |
Wrong choice = cash flow problems. Right choice = bills match reality.
Option 1: Bill Based on Ordered Quantities
This generates bills for the **amount you ordered**, regardless of what actually arrived.
Example Scenario
You order: 100 laptops @ $740 each = $74,000
Supplier ships: 85 laptops (15 backordered)
You receive: 85 laptops
With "Ordered Quantities" Policy:
Bill generates for: 100 laptops = $74,000
You pay for 100, even though you only have 85 in stock.
When to Use This
- Prepayment agreements: Supplier requires payment before shipping
- Drop-shipping: You never receive inventory—it ships directly to customer
- Highly reliable suppliers: They always ship exactly what you ordered
- Contract terms require it: Your agreement says "pay on order placement"
Warning: If supplier ships less than ordered, you'll overpay. You have to manually adjust the bill or create a debit note for the difference. This is tedious and error-prone.
How to Set It Up
- Go to Purchase app
- Open any product (or create new one)
- Click Purchase tab
- Look for "Bill Control Policy" field
- Select: Ordered Quantities
- Click Save
Now, whenever you create a purchase order for this product, bills will be generated based on ordered amounts.
Option 2: Bill Based on Received Quantities (Recommended)
This generates bills for **only what physically arrived** at your warehouse. Much safer for cash flow.
Example Scenario
You order: 500 t-shirts @ $12 each = $6,000
Supplier ships: 437 t-shirts (63 damaged in warehouse, can't ship)
You receive: 437 t-shirts
With "Received Quantities" Policy:
Bill generates for: 437 t-shirts = $5,244
You pay for what you got. The $756 difference stays in your bank account.
When to Use This (Default for Most Businesses)
- Net payment terms: You pay after receiving goods (Net 30, Net 60)
- New/untested suppliers: Don't trust delivery accuracy yet
- High shipping variability: International orders, fragile goods, perishables
- Large orders: Quantity discrepancies are expensive on big purchases
- Cash flow protection: You want to pay only for what you actually have
Best Practice: Use "Received Quantities" as your default for 90% of products. Only switch to "Ordered Quantities" for specific supplier agreements that require it.
How to Set It Up
- Go to Purchase app
- Open any product
- Click Purchase tab
- Find "Bill Control Policy" field
- Select: Received Quantities
- Save
From now on, bills for this product will match what your warehouse team actually checks in.
Real-World Example: How This Saved $43K
Client: $8M D2C apparel brand, 120 SKUs, 14 suppliers across China/Bangladesh/Vietnam.
The Problem (Before):
- • Using "Ordered Quantities" for all products
- • Ordered: 12,000 units/month
- • Actually received: 11,200 units/month average (93.3%)
- • Overpayment per month: $7,200
- • AP clerk manually creates debit notes for 47 discrepancies/month
- • Time spent: 14 hours/month on billing corrections
The Fix:
Switched all products to "Received Quantities" policy.
Results After 6 Months:
- • Bills auto-match received quantities
- • Zero overpayments
- • Cash flow improved by avg $43,200 over 6 months
- • AP time saved: 84 hours (= 2.1 weeks of work)
- • Billing errors dropped from 47/month to 3/month
Step-by-Step: Create a PO with Bill Control
Let's walk through a complete purchase order workflow using "Received Quantities" policy.
1. Set Product Policy
- Purchase app → Products
- Select product: "Wireless Mouse"
- Purchase tab → Bill Control Policy: Received Quantities
- Save
2. Create Purchase Order
- Purchase app → Create → RFQ
- Select vendor: "Tech Supplies Co"
- Add product: Wireless Mouse
- Quantity: 200 units
- Price: $18 each
- Total: $3,600
- Click Confirm Order
3. Receive Goods (Partial Shipment)
- Click Receipt smart button on PO
- Warehouse team counts: 183 units received (17 damaged in transit)
- Update Done quantity: 183
- Click Validate
- System asks: "Create backorder for remaining 17?" → Select No Backorder
4. Create Vendor Bill
- Go back to Purchase Order
- Click Create Bill button
- Odoo auto-fills bill with 183 units @ $18 = $3,294
- Notice: Bill is NOT for the ordered 200 ($3,600)
- It's for the received 183 ($3,294)
- Click Confirm
What Just Happened: You saved $306 by not paying for the 17 damaged units. If you'd used "Ordered Quantities," you would have paid $3,600 and needed to manually request a $306 credit from supplier.
Handling Discrepancies
Sometimes you need to bill for amounts that don't match either ordered or received quantities.
Scenario 1: Supplier Ships More Than Ordered
Ordered: 50 units
Received: 58 units (supplier error)
Policy: Received Quantities
Bill will show: 58 units
Options:
- Pay for 58 if you're keeping them
- Or manually edit bill to 50 and return the 8 extras
Scenario 2: Need to Bill Before Receipt
Supplier demands payment before shipping. Your product is set to "Received Quantities."
Solution:
- Create PO as normal
- Click "Create Bill" even though goods haven't arrived
- Manually change quantity on bill to match ordered amount
- Confirm and pay
- When goods arrive, validate receipt but don't create another bill
Setting Default Policy Company-Wide
Instead of configuring each product individually, set a default for all new products.
- Go to Purchase app
- Click Configuration → Settings
- Scroll to "Invoicing" section
- Find "Default Bill Control Policy"
- Select: Received Quantities (recommended)
- Click Save
All future products will inherit this default. You can still override it per-product when needed.
Common Mistakes That Cost Money
1. Using "Ordered Quantities" for Unreliable Suppliers
You order 1,000 units. Supplier ships 870. You pay for 1,000. Now you're chasing a $2,340 refund.
Fix: Use "Received Quantities" until supplier proves consistent.
2. Not Training Warehouse Team
Warehouse marks receipt as "200 received" without counting. Actually got 183. Bill generates for 200.
Fix: Require physical count before validating receipt in Odoo.
3. Mixing Policies Inconsistently
Same supplier, some products use "Ordered," others use "Received." AP team is confused.
Fix: Standardize by supplier relationship, not product type.
4. Forgetting to Create Backorders
Ordered 500, received 430. Clicked "No Backorder." System thinks order is complete. The 70 units never arrive.
Fix: Create backorders for any short shipments you expect to receive later.
Which Policy Should You Use? Decision Matrix
| Situation | Recommended Policy | Why |
|---|---|---|
| New supplier (first 3 orders) | Received Quantities | Don't trust accuracy yet |
| International shipments | Received Quantities | High risk of damage/loss |
| Drop-shipping | Ordered Quantities | You never receive it |
| Prepayment required | Ordered Quantities | Must pay before shipping |
| Net 30/60 payment terms | Received Quantities | Pay after receiving |
| Trusted 5+ year supplier | Either (your choice) | Proven reliability |
| High-value items (>$500/unit) | Received Quantities | Large $ impact per discrepancy |
ROI: Why This Matters
For a D2C brand doing $200K/month in purchases with 93% receipt accuracy:
With Wrong Policy ("Ordered Quantities"):
- • Monthly purchases: $200,000
- • Overpayment (7% shortfall): $14,000/month
- • Cash tied up for 15-45 days (avg 30): $14,000 locked
- • AP time correcting: 18 hours/month @ $32/hour = $576/month
- • Annual cost: $174,912 (cash + labor)
With Right Policy ("Received Quantities"):
- • Bills auto-match receipts
- • Zero overpayments
- • Cash flow optimized
- • AP corrections: 2 hours/month (special cases only)
- • Annual savings: $168,000+
Paying for Inventory You Don't Have?
We audit your Odoo purchase configuration, fix bill control policies, and implement 3-way matching to prevent overpayments. Stop locking up cash in "in transit" inventory.
