Stock Aging & Dead Stock Report for Odoo 19 documentation
A guide to the stock aging report: age brackets and how the age is counted, dead stock, scope and dates, analysis, printing and Excel.
Documents version 1.0.0Updated Oct 23, 2026
Start here
In plain words: The warehouse is full, the cash is not, and nobody can say how long the goods have been sitting there. Stock Aging & Dead Stock Report answers it: for every product, how much is on the shelf and how old it is, in six age brackets, with its value, and a flag on the dead stock that nobody has bought or received for months.
Tip: The age is counted first in, first out: sales eat the oldest receipts, so what is left on the shelf is the newest stock. Old stock shows up only when it really did not sell.
What you get
| Feature | What it does |
|---|---|
| Six age brackets | 0-30, 31-60, 61-90, 91-180, 181-365 and over 365 days: the quantity and the value of each. |
| First in, first out | The age of each unit is the age of the receipt it came from, oldest sold first. |
| Value | Quantity at the cost of the product, per bracket, per product and per category. |
| Dead stock | A product with stock where nothing was issued and nothing received for N days (180 by default) is flagged, with its value. |
| Last issue | The date of the last issue and the days since. |
| Any date | Choose a past date to see the aging as it was. |
| Scope | The whole company, a warehouse, some locations, a category or chosen products. |
| Analysis | A pivot and a graph by category, filters for dead stock and for stock older than 180 days. |
| Print and Excel | A landscape PDF with the summary by bracket, and an Excel file with every column. |
| Arabic | Everything is translated and works right to left. |
Requirements
| Item | Details |
|---|---|
| Odoo | 19.0 (Community or Enterprise) |
| Apps needed | Inventory (stock) |
| License | OPL-1 (Odoo Proprietary License v1.0) |
Install
- Unzip the package. Inside is
taqnix_stock_aging.zip; unzip it to get the foldertaqnix_stock_aging. - Copy the folder into one of the
addons_pathfolders of your Odoo server and restart Odoo. - Log in as an administrator, activate Developer mode, open Apps and press Update Apps List.
- Remove the “Apps” filter, search Stock Aging & Dead Stock Report and press Install.
# or from the command line ./odoo-bin -c odoo.conf -d YOUR_DATABASE -i taqnix_stock_aging --stop-after-init
Show the aging
In plain words: Inventory → Reporting → Stock Aging. Choose what you need and click Show the aging.
| Field | Meaning |
|---|---|
| As of | The date of the report: today, or a day in the past. |
| Warehouse, Locations | Only the stock of this warehouse or these locations. Empty: the whole company. |
| Product category, Products | A category and its sub-categories, or chosen products. Empty: every storable product. |
| Dead stock after (days) | How many days without any issue or receipt make a product dead stock. |
In plain words: At the top: the total value, the value older than 180 days and its share, and the value of the dead stock. Open the optional columns of the list for the value of each bracket, the days since the last issue and the age of the oldest unit.
How the age is counted
In plain words: For a product, the stock on hand on the chosen date is shared among its receipts, starting with the newest (because the oldest were sold first). A receipt is a move into the selected locations from outside of them: a purchase, a return, a manufacturing order, an inventory adjustment. A transfer between two locations of the selection does not make the stock younger.
| Example | Result |
|---|---|
| 10 received 100 days ago, 10 received 40 days ago, 12 sold | 8 left, all from the receipt of 40 days ago: bracket 31-60. |
| 5 received 300 days ago, nothing issued | 5 in the 181-365 bracket, and dead stock after 180 days. |
| 5 received 100 days ago, moved to a shelf yesterday | Still 5 in the 91-180 bracket. |
Tip: The value is the quantity times the cost of the product (the standard price, or the average or FIFO cost Odoo keeps on the product), not the price paid on each receipt.
Dead stock
In plain words: A product is dead stock when it has stock on the date, and nothing was issued and nothing was received for the number of days you set. Dead stock is in red in the list, ticked in the Dead column and counted in the value at the top. A product received last month is never dead stock, even if it was not sold yet.
Analysis
In plain words: Analysis opens the lines as a pivot, by category: the value of each bracket. The graph stacks the value of each category by moving and dead stock.
In plain words: The filters Dead stock and Older than 180 days keep the products you should look at first.
Print and Excel
In plain words: Print gives an A4 landscape PDF: a summary of the value by bracket with its share, then each category with its products. Export to Excel gives every column: the quantities and values of the six brackets, the last receipt and issue, the days and the dead stock flag.
Who can do what
| Who | Can |
|---|---|
| Inventory users and managers | Show, analyse, print and export the aging. |
| Other users | No access to the report. |
Arabic and right to left
Limits
| Limit | Detail |
|---|---|
| Fixed brackets | The six brackets (30, 60, 90, 180, 365 days) are fixed; only the dead stock days are yours to set. |
| Cost, not the receipt price | The value uses the current cost of the product. |
| Units | Quantities are in the unit of measure of the product. |
| Up to 1000 products | For more products choose a category or a warehouse. |
| Stock without a move | The report counts the stock from the done stock moves; a quant created directly in the database, with no move, is not counted. |
For developers
In plain words: Skip this chapter if you only use the module.
aging = env['taqnix.stock.aging'].create({'as_of': '2026-06-30', 'warehouse_id': warehouse.id, 'dead_days': 120})
aging.action_compute()
for line in aging.line_ids:
print(line.product_id.display_name, line.b1, line.b6, line.value, line.dead)Troubleshooting
| Problem | What to do |
|---|---|
| There is no stock on hand for these products on that date | Check the date, the warehouse and the products: only storable products with a stock move are counted. |
| A product I know I have is missing | Check that it is a storable product and that the warehouse or the locations contain it. |
| The values are zero | The cost of the product is zero: set it on the product. |
| The PDF is not styled | Check the system parameter web.base.url, so that the PDF engine can read the styles. |
Updating and removing
Replace the folder with the new version, restart Odoo and run -u taqnix_stock_aging. Nothing is stored: the reports are computed when you open them.
Support
Installation help and bug fixes are included for 6 months, with lifetime updates. Contact us through the marketplace page where you bought the module or write to support@taqnix.com with your Odoo version and a screenshot.