How to Configure Perpetual Inventory Valuation in Odoo 19 Accounting
By Braincuber Team
Published on May 26, 2026
Odoo 19 Accounting's Inventory Valuation Perpetual (at Invoicing) method records accounting entries at the time the associated invoice is created or verified, while the stock value is maintained continually. Using this strategy, the system determines the precise cost and date of the accounting entry by connecting inventory movements with vendor or customer bills. This guarantees that inventory value and cost of goods sold (COGS) are recorded in the financial records at the time of invoicing rather than during actual stock movement. By coordinating inventory valuation with billing processes, it assists companies in maintaining more accurate financial reporting. Businesses that wish to track inventory in real time while coordinating accounting changes with their invoicing process may find this method very helpful.
What You'll Learn:
- What Perpetual Inventory Valuation (at Invoicing) means and how it differs from periodic valuation
- How Anglo-Saxon accounting principles work with Odoo 19
- Step-by-step configuration: accounting settings, product categories, and cost methods
- Complete purchase-to-pay cycle with real journal entries
- Complete order-to-cash cycle with real journal entries
- Understanding the accounts impacted at each stage (Stock, Payable, Receivable, Income, Expense)
Understanding Perpetual Inventory Valuation in Odoo 19
In actuality, the Inventory Valuation Perpetual (at Invoicing) method is used in Anglo-Saxon accounting. The cost of goods sold (COGS) is only recorded in Anglo-Saxon accounting when a product is sold and the customer receives an invoice. The cost is temporarily recorded in stock or interim accounts until the sale takes place, rather than being reported at the time of inventory purchase. In order to better align income with the true cost of the goods supplied, inventory-based organizations frequently employ this strategy, which is supported by systems like Odoo.
Real-Time Tracking
Stock value is maintained continually. The system determines precise cost and date of accounting entries by connecting inventory movements with invoices.
Invoice-Linked Valuation
COGS is recorded at invoicing time, not stock movement. This aligns financial reporting with actual billing for more accurate P&L statements.
Anglo-Saxon Compliance
Supports accounting standards for countries like the US, UK, Canada, Australia, and others where COGS is recognized only at the point of sale and invoicing.
Accurate Financial Reporting
Prevents premature expense recognition. Expenses are only recorded when revenue is realized, matching the matching principle in accounting.
Step 1: Configure Accounting Settings
The first step is to change the Inventory Valuation method in the Accounting settings from the default to Perpetual (at Invoicing). Navigate to the Accounting module and click on the Configuration menu, then select Settings. Locate the Inventory Valuation section.
Change Inventory Valuation to Perpetual (at Invoicing)
In the Inventory Valuation dropdown, select Perpetual (at Invoicing). This tells Odoo to post inventory journal entries only when vendor bills or customer invoices are confirmed — not at the time of stock receipt or delivery.
Set the Journal for Inventory Valuation
Select the Journal that will be used for all stock valuation entries. This is typically an auto-generated journal named "Inventory Valuation" or an existing general journal. This journal will record all stock-related accounting entries.
Configure Periodic Valuation and Cost Method
Set the Periodic Valuation frequency (daily, monthly, etc.) and choose the Inventory Cost Method (FIFO, Average Cost, or Standard). Then define the Valuation Account — this is the balance sheet account where inventory asset value will be tracked.
Save the Settings
Click Save to apply the configuration. Odoo will now be ready to post inventory journal entries linked to invoices rather than stock moves.
Step 2: Create a Product Category with Inventory Valuation
Next, establish a new Product Category. Go to the Inventory module, navigate to Configuration > Product Categories, and click Create.
Set the Costing Method
In the Inventory Valuation section of the category form, set the Costing Method to First In First Out (FIFO). This is the most commonly used method for Anglo-Saxon accounting. The inventory valuation will be perpetual (at invoicing) as configured globally.
Configure Account Properties
Under the Account Properties tab, define the following accounts: Income Account (revenue from sales of products in this category), Expense Account (COGS for products sold), Stock Account (inventory asset value), and Stock Variation Account (differences in stock valuation). These accounts are critical for accurate financial reporting.
| Account Field | Purpose | Type |
|---|---|---|
| Income Account | Revenue from product sales | Credit (Revenue) |
| Expense Account | Cost of Goods Sold (COGS) | Debit (Expense) |
| Stock Account | Inventory asset value on balance sheet | Asset |
| Stock Variation Account | Differences in stock valuation entries | Expense/Income |
Step 3: Create a Storable Product
Now create a new product within the category. Go to Inventory > Products > Products, click Create, and fill in the product details.
Name the Product
Set the product name, for example "Table" for this tutorial.
Select Product Type as Storable
Set the Product Type to Storable Product. This enables inventory tracking, stock moves, and valuation for this product.
Assign the Product Category
Select the product category you created earlier. This links the product to the FIFO costing method and the account properties you configured.
Step 4: Purchase the Product (Purchase-to-Pay Cycle)
This section demonstrates the complete purchase-to-pay cycle and how each step impacts the accounts.
4.1 Create and Confirm a Purchase Order
Create a Request for Quotation
Go to Purchase > Orders > Requests for Quotation and click Create. Add the vendor details, select the product (Table) with quantity and unit cost, then click Confirm to convert the RFQ into a Purchase Order.
Receive the Products
After confirming the PO, click the Receive button to create a receipt transfer. Then Validate the receipt to move products into inventory. At this stage, no journal entries are posted yet — the stock is received but value is not yet recorded in accounting.
4.2 Check Inventory Valuation Report After Receipt
Go to the Accounting module > Reports > Inventory Valuation report. After receipt, the report will show no values. This is expected — with Perpetual (at Invoicing), the stock journal entry is only posted after the vendor bill is confirmed. The Inventory Valuation account is debited and the Stock Variation account is credited only at the time of billing.
4.3 Upload and Verify the Vendor Bill
Create the Bill
From the Purchase Order, click the Create Bill button. Add the bill date and verify the amounts match the purchase order.
Validate the Bill and Check Journal Items
Click Validate to confirm the bill. Go to the Journal Items tab. The accounts shown here are Stock Account (Inventory Valuation) debited and Account Payable credited. In Anglo-Saxon accounting, the direct expense is not recorded at purchase time — instead it is recorded as an asset (inventory). The Accounts Payable represents the amount owed to the vendor.
Account Debit Credit
Inventory Valuation XXX
Account Payable XXX
---
Note: Expense account is NOT impacted at this stage.
The inventory is recorded as an asset, not an expense.
4.4 View the Stock Journal Entry
After the bill is validated, the stock journal entry is automatically posted. Go to Accounting > Accounting > Journal Entries to find it. The entry shows the Inventory Valuation account debited and the Stock Valuation account credited. The Inventory Valuation report will now show the updated values.
| Stage | Account Debited | Account Credited |
|---|---|---|
| Goods Received | No entry posted | No entry posted |
| Bill Validated | Inventory Valuation | Account Payable |
| Stock Auto Entry | Inventory Valuation | Stock Valuation |
4.5 Make Payment and Reconcile
Register Payment
Click the Pay button on the bill. Enter payment details including vendor, amount, date, memo, journal, payment method, and vendor bank account. This creates a payment entry impacting Account Payable (debited, reducing liability) and Outstanding Payment Account (credited, temporarily holding funds).
Reconcile with Bank Statement
Go to the Accounting Dashboard. Create a new bank transaction with Label, Partner, and Amount. Then reconcile it with the payment. This impacts Outstanding Payment (debited, reducing liability) and Bank (credited, reducing bank asset).
Payment Registration Impact
When you pay the vendor, the company's liability is reduced. Account Payable, being a liability account, is debited. The payment is temporarily held in Outstanding Payments until reconciled with the bank statement. During reconciliation, Outstanding Payment is debited (liability decreases) and Bank is credited (asset decreases).
Step 5: Sell the Product (Order-to-Cash Cycle)
With Inventory Valuation set to Perpetual (at Invoicing), the expense account is only affected after selling the product and generating the invoice. Let us walk through the complete sales cycle.
5.1 Create and Confirm a Sales Order
Create a New Sales Order
Go to Sales > Orders > Quotations and click Create. Add the customer, select the product (Table) with quantity and unit price, then Confirm the quotation to convert it into a Sales Order.
Validate Delivery
Click the Delivery smart tab and Validate the outgoing transfer to ship the product. After delivery, check the Inventory Valuation report — it shows Stock Variation account debited and Inventory Valuation account credited for the delivered quantity.
| Event | Account Debited | Account Credited |
|---|---|---|
| Delivery Validated | Stock Variation | Inventory Valuation |
5.2 Create and Post the Customer Invoice
Create Invoice from Sales Order
Go back to the Sales Order and click Create Invoice. Select Regular Invoice and click Create and View. Then click Post to confirm the invoice.
Check Journal Items
The Journal Items tab shows that Account Receivable is debited (asset increases) and Income Account is credited (revenue increases). Additionally, because Anglo-Saxon accounting requires expense recognition when the sold item leaves the business, two more accounts are impacted: Stock Output Account and Expense Account.
Account Debit Credit
Account Receivable XXX
Income Account XXX
Stock Output Account XXX
Expense Account (COGS) XXX
---
Note: COGS is recorded only at the time of invoicing,
not at the time of delivery (Anglo-Saxon principle).
5.3 View the Stock Journal Entry After Invoice
After posting the invoice, the stock journal entry is automatically posted. The Inventory Valuation report updates accordingly. The stock journal entry can be viewed under Accounting > Journal Entries.
5.4 Receive Payment from Customer
Register Customer Payment
Click the Pay button on the invoice. Enter payment details. Check the Journal Entry smart tab — Account Receivable is credited (asset decreases as customer pays) and Outstanding Receipts is debited (asset increases, temporarily holding funds).
Reconcile Payment with Bank Statement
Go to the Accounting Dashboard and create a new bank transaction. Add the amount, partner, and label, then click Save & Close. During reconciliation, Bank is debited (asset increases) and Outstanding Receipts is credited (asset decreases). View the complete journal entries under Accounting > Journal Entries.
Customer Payment Reconciliation
When the customer pays, Accounts Receivable (an asset) decreases and is credited. The funds are temporarily held in Outstanding Receipts until reconciled with the bank. During reconciliation, Bank is debited (asset increases) and Outstanding Receipts is credited (asset decreases). This completes the order-to-cash cycle.
Understanding the Full Accounting Flow
The table below summarizes the complete accounting impact at each stage of the purchase-to-pay and order-to-cash cycles when using Perpetual Inventory Valuation (at Invoicing) in Odoo 19:
| Cycle Stage | Account Debited | Account Credited |
|---|---|---|
| Goods Received (Receipt) | No entry | No entry |
| Bill Validated | Inventory Valuation | Account Payable |
| Stock Entry (Post-Bill) | Inventory Valuation | Stock Valuation |
| Payment Registered | Account Payable | Outstanding Payments |
| Bank Reconciliation | Outstanding Payments | Bank |
| Delivery Validated | Stock Variation | Inventory Valuation |
| Invoice Posted (Sale) | Account Receivable, Stock Output | Income, Expense (COGS) |
| Payment Received | Outstanding Receipts | Account Receivable |
| Bank Reconciliation | Bank | Outstanding Receipts |
In Perpetual (at Invoicing) mode, the Expense (COGS) is NOT recognized at the time of purchase or delivery. It is only recognized when the invoice is posted. This aligns expense recognition with revenue under the matching principle of Anglo-Saxon accounting.
Frequently Asked Questions
What is the difference between Perpetual and Periodic inventory valuation in Odoo?
Perpetual valuation posts journal entries automatically whenever stock moves — purchase, sale, transfer, or scrap. Periodic (Manual) valuation only updates inventory value when you run the revaluation wizard manually. For accurate real-time financial statements, Perpetual is required.
Which countries use Anglo-Saxon accounting with Perpetual Inventory Valuation?
Countries like the United States, United Kingdom, Australia, Canada, Netherlands, New Zealand, Mexico, Colombia, Indonesia, Malaysia, and many others use Anglo-Saxon accounting. In this system, COGS is recorded only when the product is sold and invoiced, not at the time of purchase.
Does Perpetual (at Invoicing) work with FIFO and AVCO costing methods?
Yes, Perpetual (at Invoicing) works with FIFO, AVCO (Average Cost), and Standard costing methods. The inventory valuation method is set separately from the valuation timing. FIFO is commonly used because it matches actual physical flow for perishable or batch-tracked goods.
Why does my Inventory Valuation report show no values after receiving goods?
When using Perpetual (at Invoicing), the stock journal entry is only posted after the vendor bill is confirmed — not at the time of receipt. The report will show zero until the bill is validated. This is by design, matching Anglo-Saxon accounting principles.
How do I fix a mismatch between Odoo inventory value and the balance sheet?
First, check that Inventory Valuation is set to Perpetual (not Manual). Then run the Inventory Valuation report under Accounting > Reporting. Compare it to the Stock Valuation account in your chart of accounts. If they differ, check for unposted stock moves or unvalidated vendor bills.
Need Help with Odoo Accounting?
Our Odoo accounting experts can help you configure Perpetual Inventory Valuation, set up your chart of accounts, and ensure accurate financial reporting for your business.
