Skip to Content
Odoo Menu
  • Sign in
  • Try it free
  • Apps
    Finance
    • Accounting
    • Invoicing
    • Expenses
    • Spreadsheet (BI)
    • Documents
    • Sign
    Sales
    • CRM
    • Sales
    • POS Shop
    • POS Restaurant
    • Subscriptions
    • Rental
    Websites
    • Website Builder
    • eCommerce
    • Blog
    • Forum
    • Live Chat
    • eLearning
    Supply Chain
    • Inventory
    • Manufacturing
    • PLM
    • Purchase
    • Maintenance
    • Quality
    Human Resources
    • Employees
    • Recruitment
    • Time Off
    • Appraisals
    • Referrals
    • Fleet
    Marketing
    • Social Marketing
    • Email Marketing
    • SMS Marketing
    • Events
    • Marketing Automation
    • Surveys
    Services
    • Project
    • Timesheets
    • Field Service
    • Helpdesk
    • Planning
    • Appointments
    Productivity
    • Discuss
    • Approvals
    • IoT
    • VoIP
    • Knowledge
    • WhatsApp
    Third party apps Odoo Studio Odoo Cloud Platform
  • Industries
    Retail
    • Book Store
    • Clothing Store
    • Furniture Store
    • Grocery Store
    • Hardware Store
    • Toy Store
    Food & Hospitality
    • Bar and Pub
    • Restaurant
    • Fast Food
    • Guest House
    • Beverage Distributor
    • Hotel
    Real Estate
    • Real Estate Agency
    • Architecture Firm
    • Construction
    • Estate Management
    • Gardening
    • Property Owner Association
    Consulting
    • Accounting Firm
    • Odoo Partner
    • Marketing Agency
    • Law firm
    • Talent Acquisition
    • Audit & Certification
    Manufacturing
    • Textile
    • Metal
    • Furnitures
    • Food
    • Brewery
    • Corporate Gifts
    Health & Fitness
    • Sports Club
    • Eyewear Store
    • Fitness Center
    • Wellness Practitioners
    • Pharmacy
    • Hair Salon
    Trades
    • Handyman
    • IT Hardware & Support
    • Solar Energy Systems
    • Shoe Maker
    • Cleaning Services
    • HVAC Services
    Others
    • Nonprofit Organization
    • Environmental Agency
    • Billboard Rental
    • Photography
    • Bike Leasing
    • Software Reseller
    Browse all Industries
  • Community
    Learn
    • Tutorials
    • Documentation
    • Certifications
    • Training
    • Blog
    • Podcast
    Empower Education
    • Education Program
    • Scale Up! Business Game
    • Visit Odoo
    Get the Software
    • Download
    • Compare Editions
    • Releases
    Collaborate
    • Github
    • Forum
    • Events
    • Translations
    • Become a Partner
    • Services for Partners
    • Register your Accounting Firm
    Get Services
    • Find a Partner
    • Find an Accountant
    • Meet an advisor
    • Implementation Services
    • Customer References
    • Support
    • Upgrades
    Github Youtube Twitter Linkedin Instagram Facebook Spotify
    +1 (650) 691-3277
    Get a demo
  • Pricing
  • Help

Odoo is the world's easiest all-in-one management software.
It includes hundreds of business apps:

  • CRM
  • e-Commerce
  • Accounting
  • Inventory
  • PoS
  • Project
  • MRP
All apps
You need to be registered to interact with the community.
All Posts People Badges
Tags (View all)
odoo accounting v14 pos v15
About this forum
You need to be registered to interact with the community.
All Posts People Badges
Tags (View all)
odoo accounting v14 pos v15
About this forum
Help

Odoo v19 – Is There a GAAP-Compliant Solution for Inventory & COGS When Vendor Bills Are Delayed?

Subscribe

Get notified when there's activity on this post

This question has been flagged
accountingworkflowinventoryvaluationcomplianceCOGSUSA19.0vendor bills
1 Reply
1456 Views
Avatar
Lee Jones

We have been working with Odoo v19 inventory valuation and have encountered a significant accounting compliance concern that has not been clearly resolved through Support. I am posting here to determine whether there is a standard configuration, workaround, or upcoming improvement.

Issue Summary

Under GAAP, inventory and Cost of Goods Sold must be recognized in the correct period, even if vendor bills are received after month-end.

However, in Odoo v19:

  • Inventory valuation and COGS are only posted when the vendor bill is created
  • If the bill is received in a later month, the valuation is posted in that later period
  • This causes misstated inventory and COGS in the prior month, which is not GAAP-compliant

Open Questions

  1. What is the recommended GAAP-compliant workflow when vendor bills arrive after month-end?
  2. Is there a way to recognize inventory and COGS at delivery/receipt, and then clear interim accounts when the bill arrives?
  3. Does the Periodic (At Closing) setting resolve this, and if so:
    • How does COGS get recognized at the time of sale?
    • Are additional end-of-month processes required?
  4. Is this behavior a known limitation in v19 with planned enhancements?

Why this matters

We are a Global Odoo Partner based in the United States, and the majority of our mutual customers in the Americas follow GAAP accounting standards. If inventory valuation is only triggered by vendor bills, many users will face incorrect financial statements at period close.

Support Outcome

Support described how v19 currently works but did not confirm:

  • Whether it is GAAP-compliant
  • Whether a workaround exists
  • Whether improvements are planned

The support ticket was closed without a solution, so we are seeking clarification here.

0
Avatar
Discard
Awie van den Berg

Hey Lee,

I am just as concerned as you and our clients are outraged about this. Doesn't matter how Odoo is trying to explain this away and trying to justify this change in Inventory valuation as to be compliant, it is not and we cannot upgrade our current Odoo clients to v19, because of this. I doubt if Odoo actually understands Anglo Saxon as it seems they want everything to be Periodic.

Here is what I have found as the only possible hack to make it work like v18..

You could potentially with a hack get the purchase side to work. For that, you need to enable (make visible) the GL account on Locations, for ALL locations. Then you need to specify the GL account for each location you have as the Stock Valuation account (DT account). You then need to specify the Stock Valuation account on the Category as the GRNI (goods receipt not invoiced), although it is called Stock Valuation here. (might need to rename it for avoiding confusion)

This will enable you to get Odoo to automatically do the GL entry when you receive the Goods in Stock (as required by IFRS and GAAP) by DT stock valuation and CT GRNI

When you do the Vendor bill (as this is just the liability as per IFRS and GAAP) It will DT GRNI and CT Ap Control.

The Issue now remaining is to figure out how to do the same on the Sales Side. When I sell something and deliver it, but invoice it later - Still working on that but probably less of an issue unless you have a client that creates 1 invoice for a month of shipments, usually the beginning of the next month. Yes, COGS is recorded at invoice level as it should because expense and revenue should be in the same period. However, inventory will now in v19 also only be updated on sales invoice, not when you actually ship the goods (don't have ownership anymore)

And then the big issue... Lot based costing. Under v19, there is no way to account the Cost of Sale based on the cost of the Lot. It is always just taking average cost. You cant have this as it is not reflective of the true net Realizable value (NRV) of your stock if you track by lots. It is fine if all your lots are the same cost, by 99% of the time they are not. Our clients that do serial and lot tracking absolutely requires this! 

At Lease FIFO costing is working...

I have also logged a ticket, yet to hear back. This is a timebomb. Wait until our competitors in the market get hold of this info. We might as well not sell v19 into Inventory sites in New Zealand.

Sorry, mate! Just as disappointed as you and there seems to be a lack of understanding or acknowledgement of the Issue at Odoo.

Ray Carnes (ray)

Hi Awie, I'd love to know specifically what leads you to conclude Odoo 19 is not compliant.

I have personally discussed the approach with former Auditors and CPA's from Deloitte, KPMG and PWC.

Both IRFS and GAAP discuss the need for period based matching of assets / liabilities / revenues / expenses [which includes accruals for expected amounts if Invoices / Bills are not available], but neither specify how often the general ledger needs to be updated, just that it needs to be done by month end.

A compliance audit is always based on "closed" books (adjusted / reclassed / corrected balance sheets and income statements) and never on mid month reports.

An auditor's job is to issue a formal opinion on whether a company's financial statements "present fairly, in all material respects," its financial position "for a specific period".

It is common practice to post accruals, depreciation, amortization, corrections and reclasses at month end - so the month end inventory update here is no different (to account for uninvoiced sales and unbilled purchases).

The Inventory Stock report updates in real-time the value and quantities of all tracked inventory based on receipts, deliveries, scrap, inventory adjustments and re-valuations.

Each month, the closing process which includes accruals and finally the GENERATE ENTRY feature will update the balance sheet to match the month end Stock report value.

Ray Carnes (ray)

Perhaps the part I have failed to explain well is that the closing entry is only the first part of the month end process.

After generating the inventory variation credit, Odoo helps generate four (or five if the Manufacturing App is installed) accrual entries to account for the differences between what was received/delivered and what was billed/invoiced.

These accrual entries for bills not received, goods billed not received, invoices to be issued, goods invoiced not delivered (and work in progress for Manufacturing) clear the inventory variation credit posted by the closing entry, which is designed to ensure your balance sheet is matched 100% with the value from the Inventory Stock report.

It is THESE entries that have detailed information about every purchase order line and sale order line with the product, quantity delivered/received, quantity invoiced/billed, and unit price.

I updated my answer in an attempt to clarify how this works. Happy to model specific scenarios with similar worked examples if you feel that would be useful.

We've all been trained to believe that the only way to achieve an accurate inventory valuation is to have a journal entry for every single receipt. For years, that's what 'perpetual inventory' has meant to us.

Does GAAP or IFRS require our G/L to be real-time? No. It requires it to be accurate for the period. The assumption we've all been holding onto is that 'goods changing hands' is the only auditable event. The new Odoo design challenges this. It suggests that the billing/invoicing event is the stronger, more financially relevant event to trigger the posting, as long as we have a way to account for when we don't complete billing and/or invoicing in the same period.

I think this is the biggest challenge we have in educating people. We have to shift the mindset from viewing the inventory general ledger account as a real-time stock quantity report to seeing it as a current asset account 100% managed by the finance team. We still track all inventory quantities and costs in real time operationally, but just hold the financial posting to when the superior, auditable "source of truth" that confirms the actual cost and creates the actual payable/liability or receivable/asset is available.

Our new audit trail comes from the accrual entries. They are granular, detailed, and designed specifically to tie out the G/L to our operational reality. The reconciliation is no longer trying to match a million tiny stock moves to the G/L. The system guarantees we match 100%, and it gives us the detailed accrual reports as the full, line-by-line proof.

P.S - a potentially overlooked but signifant benefit of this new design is the ability to unlock and back date warehouse receipts, delivery orders and inventory adjustments.

Awie van den Berg

Hey Ray,

Can you please elaborate on this? I think this is probably the missing element as I cant see it being discussed in any video or documentation. So, I'd be really interested to know where I can find this?

Mate, happy to change and adopt. But we can face our customers running Perpetual Inventory on a granular basis if we take away that functionality. So, maybe there Audit reports are the answer?

I'm also particularly interested in How V19 will deal with lots for the same product but different costs? In V18, the cost associated with the lot was used in the COGS, but it seems in V19 it is just using average cost to do COGS?


It is THESE entries that have detailed information about every purchase order line and sale order line with the product, quantity delivered/received, quantity invoiced/billed, and unit price.
I updated my answer in an attempt to clarify how this works. Happy to model specific scenarios with similar worked examples if you feel that would be useful.
We've all been trained to believe that the only way to achieve an accurate inventory valuation is to have a journal entry for every single receipt. For years, that's what 'perpetual inventory' has meant to us.
Does GAAP or IFRS require our G/L to be real-time? No. It requires it to be accurate for the period. The assumption we've all been holding onto is that 'goods changing hands' is the only auditable event. The new Odoo design challenges this. It suggests that the billing/invoicing event is the stronger, more financially relevant event to trigger the posting, as long as we have a way to account for when we don't complete billing and/or invoicing in the same period.
I think this is the biggest challenge we have in educating people. We have to shift the mindset from viewing the inventory general ledger account as a real-time stock quantity report to seeing it as a current asset account 100% managed by the finance team. We still track all inventory quantities and costs in real time operationally, but just hold the financial posting to when the superior, auditable "source of truth" that confirms the actual cost and creates the actual payable/liability or receivable/asset is available.
Our new audit trail comes from the accrual entries. They are granular, detailed, and designed specifically to tie out the G/L to our operational reality. The reconciliation is no longer trying to match a million tiny stock moves to the G/L. The system guarantees we match 100%, and it gives us the detailed accrual reports as the full, line-by-line proof.
Ray Carnes (ray)

Hi Awie

I have worked through an example at https://www.odoo.com/forum/help-1/how-can-i-access-the-details-of-the-inventory-variation-posted-at-month-end-in-odoo-19-290771

Hope this helps, please let me know if you still have questions or concerns.

dominique kon sun tack

help !

Something really weird with v19.
We have a product, purchase price = 100. We sell 5 pieces at $300 each. Valuation = perpetual, and costing = average.

The delivery is done, but no invoice (yet).
When we create the accrual for invoices to be sent, odoo creates this entry:

where the value of the COGS is equal to the value of the revenue. But should it not be instead the value of the goods delivered ? in the example above, it should be 500.


And when we look at the balance sheet:


The interim account is not zeroed ...

Am i missing something ?

Ray Carnes (ray)

Can you report this to our Support Team via odoo.com/help

Avatar
Ray Carnes (ray)
Best Answer

Odoo 19 no longer creates journal entries upon the physical receipt or delivery** of goods.

We have shifted this responsibility from warehouse operations to the accounting team. The new design centralizes inventory accounting in the Accounting app, posting at the time of the financial transaction (vendor bill / customer invoice) with the flexibility to post before or after as needed (bill and hold, FOB origin, sale on approval,etc.) and finalizing the period's valuation with a single, comprehensive month-end journal entry with a balance that is then cleared via accruing for bills not received, goods billed not received, invoices to be issued, goods invoiced not delivered and work in progress.

This new model significantly reduces the reconciliation work required between warehouse-generated entries and the general ledger.



>> Inventory valuation and COGS are only posted when the vendor bill is created

They are recorded when the Customer Invoice is posted.  We would suggest reviewing the Valuation Cheat Sheet at https://www.odoo.com/documentation/19.0/applications/inventory_and_mrp/inventory/inventory_valuation/cheat_sheet.html to understand the expected Journal Entries with each transaction, and reviewing the workflow at the end of this post to see a worked example.


>> If the bill is received in a later month, the valuation is posted in that later period. This causes misstated inventory and COGS in the prior month, which is not GAAP-compliant. 

You are correct that if you only posted the bill, the prior month would be misstated. The new design requires a standard month-end closing process to be compliant - which includes accruing for expected bills and generating a closing inventory valuation entry. This takes care of updating the inventory valuation. The following month, the liability for accrued bills is reversed so the actual AP can be posted when bills arrive.


>> What is the recommended GAAP-compliant workflow when vendor bills arrive after month-end?

Use Generate Entry from the new Accounting --> Review --> Inventory Valuation Report.  Then, accrue for the purchase order lines expected to be billed after month end (Bills to Receive / Billing Status = Waiting Bills) in either the Accounting App via Review --> Purchases --> Bills to Receive or in the Purchase App by selecting all Purchase Orders and using Accrued Expense Entry in the Actions Menu. 


>> Is there a way to recognize inventory and COGS at delivery/receipt, and then clear interim accounts when the bill arrives?

No. The new model is built to treat inventory as a financial concern that is finalized by accountants at closing, not a real-time entry posted by warehouse staff.


** Recall that the actual governing principle for inventory recognition (under both GAAP - ASC 330 and IFRS - IAS 2) is not "goods changing hands" but the transfer of control and the risks and rewards of ownership. The new workflow gives the accounting team the ability to recognize these values at the appropriate time (month-end) and handle complex scenarios (bill and hold, FOB origin, sale on approval,etc.) correctly.


>> Does the Periodic (At Closing) setting resolve this, and if so:

Periodic (at closing) is used where accounting standards dictate product purchases be expensed, so is not recommended in the USA. A Periodic Valuation entry (the closing entry) can be automatically generated each day or month, or on demand.


>> How does COGS get recognized at the time of sale?

Via the Customer Invoice, as discussed above.


>> Are additional end-of-month processes required?

Generate Entry from the Accounting --> Inventory Valuation Report, followed by the generation of the accrual entries for bills not received, goods billed not received, invoices to be issued, goods invoiced not delivered and work in progress. These entries should clear the inventory variation balance posted by the closing entry, which is designed to ensure your balance sheet is matched 100% with the value from the Inventory Stock report.


>> Is this behavior a known limitation in v19 with planned enhancements?

This is the new design. We are always enhancing Odoo, but no major changes are planned for now.



Resources

https://www.odoo.com/documentation/19.0/applications/inventory_and_mrp/inventory/inventory_valuation/cheat_sheet.html

https://www.youtube.com/watch?v=jqMwAkv1f3g



Sample Workflow

Let’s review the new Inventory Valuation report in Accounting after a simple Purchase / Sell / Deliver / Invoice workflow.

1) Purchase 10 items at $10 each and receive them:


2) Sell one item at $50 and deliver it:


3) Invoice the Sale:


Journal Entries from the Customer Invoice:


Although no journal entries are generated during the receipt and delivery of inventory, you can see the effect of these entries is managed via the new Inventory Valuation Report.


You now post the closing entry from the Inventory Valuation Report:


The standard month end process would then include clearing the inventory interim credit balance by generating accrual entries for unbilled Purchases:

You can see here there is detailed information about each unbilled purchase order, the product, the quantities and the price. 




Balance Sheet at month end:

 




Odoo 19 Configuration

Accounting


Chart of Accounts


Product Category 

  







1
Avatar
Discard
Enjoying the discussion? Don't just read, join in!

Create an account today to enjoy exclusive features and engage with our awesome community!

Sign up
Related Posts Replies Views Activity
What is the practical scenario in which these two accounts can be used together in Odoo 19?
accounting inventory valuation quickstart adjustment 19.0
Avatar
Avatar
Avatar
Avatar
3
Nov 25
209
What is the practical scenario in which these two accounts can be used together in Odoo 19?
accounting inventory valuation quickstart adjustment 19.0
Avatar
0
Nov 25
27
Valuation of inventory in a multi-branch enviroment
accounting inventory valuation
Avatar
Avatar
1
Oct 24
2801
What are Stock Interim Accounts and how should they be used? Solved
accounting inventory valuation
Avatar
Avatar
Avatar
2
Dec 24
41384
Costing method was not selected but now selected how to process existing transactions?
accounting inventory valuation
Avatar
0
Oct 17
4068
Community
  • Tutorials
  • Documentation
  • Forum
Open Source
  • Download
  • Github
  • Runbot
  • Translations
Services
  • Odoo.sh Hosting
  • Support
  • Upgrade
  • Custom Developments
  • Education
  • Find an Accountant
  • Find a Partner
  • Become a Partner
About us
  • Our company
  • Brand Assets
  • Contact us
  • Jobs
  • Events
  • Podcast
  • Blog
  • Customers
  • Legal • Privacy
  • Security
الْعَرَبيّة Català 简体中文 繁體中文 (台灣) Čeština Dansk Nederlands English Suomi Français Deutsch हिंदी Bahasa Indonesia Italiano 日本語 한국어 (KR) Lietuvių kalba Język polski Português (BR) română русский язык Slovenský jazyk slovenščina Español (América Latina) Español ภาษาไทย Türkçe українська Tiếng Việt

Odoo is a suite of open source business apps that cover all your company needs: CRM, eCommerce, accounting, inventory, point of sale, project management, etc.

Odoo's unique value proposition is to be at the same time very easy to use and fully integrated.

Website made with

Odoo Experience on YouTube

1. Use the live chat to ask your questions.
2. The operator answers within a few minutes.

Live support on Youtube
Watch now