-
Notifications
You must be signed in to change notification settings - Fork 8.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[IMP] Inventory: Rewrite aging report as stock valuation report
- Loading branch information
Showing
9 changed files
with
175 additions
and
71 deletions.
There are no files selected for viewing
Binary file added
BIN
+17.8 KB
...nventory_and_mrp/inventory/warehouses_storage/aging/after-val-method-change.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added
BIN
+13.1 KB
...ventory_and_mrp/inventory/warehouses_storage/aging/before-val-method-change.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added
BIN
+13.6 KB
...ns/inventory_and_mrp/inventory/warehouses_storage/aging/remaining-val-quant.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added
BIN
+33.8 KB
...ons/inventory_and_mrp/inventory/warehouses_storage/aging/stock-aging-report.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added
BIN
+24.3 KB
...inventory_and_mrp/inventory/warehouses_storage/aging/stock-valuation-report.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
246 changes: 175 additions & 71 deletions
246
...applications/inventory_and_mrp/inventory/warehouses_storage/reporting/aging.rst
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,98 +1,202 @@ | ||
====================== | ||
Inventory aging report | ||
====================== | ||
========================= | ||
Stock valuation dashboard | ||
========================= | ||
|
||
.. |SVLs| replace:: :abbr:`SVLs (stock valuation layers)` | ||
|
||
The inventory aging report evaluates all items in stock, providing insights into potentially sunken | ||
purchase costs and delays in profitability. | ||
|
||
Create customized pivot tables to analyze product, operation types, month, or company breakdowns. | ||
This helps identify products in stock that are at risk of passing their expiration or viability | ||
dates, or instances of rot/decay for fast-expiring items. | ||
|
||
.. note:: | ||
When a company has physical assets, such as inventory, they often want to know approximately | ||
how much has been spent on these goods, or how much they are worth at the moment. These numbers | ||
are often reported for accounting purposes. For instance, an insurance company may want to know the | ||
value of goods stored in a warehouse, in the event of a flood or fire. | ||
|
||
This process of assigning a monetary value to account for inventory is known as *stock valuation*. | ||
:doc:`Stock valuation <../../product_management/inventory_valuation/using_inventory_valuation>` | ||
typically utilizes one of two accounting systems: | ||
- **Perpetual**: The inventory is constantly (perpetually) being updated, and the value is | ||
constantly changing. | ||
- **Periodic**: The inventory value is checked on an occasional (periodic) basis, and the value is | ||
set at this occasional time. | ||
|
||
Using *:ref:`tracked inventory <inventory/product_management/tracking-inventory>`* in Odoo | ||
necessitates a *perpetual* inventory accounting system because of the need to know when and where | ||
inventory exists, and how much of it is available or forecasted. There are a few common :ref:`stock | ||
valuation methods <inventory/warehouses_storage/costing_methods>` used in Odoo: standard price, | ||
average cost (AVCO), and first in, first out (FIFO) accounting. It is important to know that the | ||
valuation method chosen for a product impacts the calculation of several fields in the stock | ||
valuation reports. | ||
|
||
Where to access the dashboard | ||
----------------------------- | ||
|
||
Odoo's Stock Valuation dashboard displays the financial value of all tracked inventory, according | ||
to each product's stock valuation method. This report can provide insights into sunken purchase | ||
costs or delays in profitability. To access the dashboard, go to :menuselection:`Inventory app --> | ||
Reporting --> Valuation`. | ||
|
||
.. important:: | ||
The *Reporting* menu in *Inventory* is only accessible to users with :doc:`admin access | ||
<../../../../general/users/access_rights>`. | ||
|
||
To access the inventory aging report, go to :menuselection:`Inventory app --> Reporting --> | ||
Inventory Aging`. | ||
This dashboard has three different views, or inventory reports — :ref:`list view (i.e. the default, | ||
stock valuation report) <inventory/warehouses_storage/valuation-report>`, :ref:`pivot view (i.e. the | ||
stock aging report) <inventory/warehouses_storage/aging-report>`, and graph view. Each view can be | ||
customized with different fields to break down inventory valuation by product, operation type, date, | ||
or company. | ||
|
||
.. _inventory/warehouses_storage/aging-report: | ||
All three views can be filtered by various fields. To apply filters, click into the search bar at | ||
the top of the report, or click the drop-down arrow next to it. For example, selecting the filter | ||
:guilabel:`Has Remaining Qty` will show only pr ducts that are currently in stock. | ||
|
||
Navigate the inventory aging report | ||
=================================== | ||
|
||
By default, the :guilabel:`Inventory Aging` report displays a pivot table, with the month in | ||
columns, and product category in rows. The default filters, :guilabel:`Incoming` and :guilabel:`Has | ||
Remaining Qty`, show only products from receipts, and are currently in stock. | ||
.. _inventory/warehouses_storage/valuation-report: | ||
|
||
:guilabel:`Remaining Qty` displays the number of on-hand items, and :guilabel:`Remaining Value` | ||
displays the total cost of purchasing these items. | ||
List view: stock valuation | ||
========================== | ||
|
||
Clicking the :icon:`fa-plus-square` :guilabel:`(plus)` icon in each column or row reveals options to | ||
expand the pivot table and show a detailed breakdown of the :guilabel:`Remaining Qty` and | ||
:guilabel:`Remaining Value` by :guilabel:`Product`, :guilabel:`Product Category`, :guilabel:`Date`, | ||
or :guilabel:`Company`. Clicking the :icon:`fa-minus-square-o` :guilabel:`(minus)` icon collapses it | ||
back to its previous state. | ||
By default, the :guilabel:`Stock Valuation` dashboard displays in *list view*, represented by the | ||
:icon:`oi-view-list` :guilabel:`(list)` icon. This view is essentially a *Stock Valuation Report*, | ||
which shows a detailed record of stock movements and their valuations. | ||
|
||
.. figure:: aging/inventory-aging.png | ||
:align: center | ||
:alt: Inventory aging report. | ||
Configure | ||
--------- | ||
|
||
Inventory aging report, showing each **Product** in rows and each reception **Date** in columns, | ||
to better monitor products with fast expiration dates. Each row shows the the total on-hand | ||
quantity and inventory valuation of items purchased on each day. | ||
The following columns are displayed by default: | ||
|
||
.. note:: | ||
Records in the :guilabel:`Inventory Aging` report are *stock valuation layers* (SVLs), | ||
representing product moves that impact stock valuation. | ||
- :guilabel:`Date`: the date and time when the stock move was created. The valuation report is | ||
sorted by this field, emphasizing the importance of time when valuing inventory. | ||
- :guilabel:`Reference`: the reference document associated with this stock move (e.g., a | ||
warehouse receipt, a delivery order, or a manual inventory adjustment). | ||
- :guilabel:`Product`: the product that is being moved and valued. | ||
- :guilabel:`Quantity`: the number of units by which this product's stock has increased or | ||
decreased in this particular stock move. | ||
- :guilabel:`Total Value`: the value of the product's stock in this particular stock move, | ||
calculated by multiplying the :guilabel:`Quantity` and :guilabel:`Unit Value`. | ||
|
||
Inventory adjustments do **not** create |SVLs|; only items purchased from vendors do. | ||
.. note:: | ||
If a :guilabel:`Reference` document includes several goods, there will be a *separate line item* | ||
generated on the Stock Valuation Report for *each* good. | ||
|
||
There are additional fields that can be added to this view to provide more insight into the | ||
stock's valuation: | ||
|
||
- :guilabel:`Lot/Serial Number`: the uniquely identifying lot or serial number for this product. | ||
- :guilabel:`Company`: for businesses that operate with multiple companies, this field displays | ||
the company by which this stock move took place. | ||
- :guilabel:`Remaining Quantity`: the number of units remaining for this valuation of the product, | ||
after demand has been accounted for (even from other stock moves). This field can be especially | ||
helpful for FIFO and AVCO accounting, as it conveys which units of stock came into a warehouse | ||
first and the value of said stock. | ||
- :guilabel:`Unit Value`: the cost of one unit of the product (**not** the price to consumers). | ||
- :guilabel:`Description`: a description of the reason for this stock valuation (typically, a stock | ||
move has occurred). By default, this field is set as the concatenation of the | ||
:guilabel:`Reference` and :guilabel:`Product` fields. However, the field may also display other | ||
important messages for this line item, such as a note stating that the line item is an adjustment | ||
due to a change in the product's inventory valuation method. | ||
- :guilabel:`Remaining Value`: the value of this product's current stock levels for this particular | ||
stock move, after demand has been accounted for. Along with :guilabel:`Remaining Quantity`, this | ||
field can be especially helpful for FIFO and AVCO accounting, as they convey which stock came | ||
into a warehouse first and the value of said stock. | ||
|
||
.. image:: aging/stock-valuation-report.png | ||
:alt: Stock valuation report. | ||
|
||
Each line item in the :guilabel:`Stock Valuation` report represents a record in Odoo's system known | ||
as a *stock valuation layer (SVL)*. SVLs are generated when products move in a way that impacts | ||
their stock valuation. Specifically, the stock moves that generate SVLs are warehouse receipts, | ||
deliveries, dropshipping orders, and dropshipping returns. These stock moves must first be validated | ||
(by clicking the :guilabel:`Validate` button) for the SVL to be created. | ||
|
||
If a product's inventory valuation method changes on the product form, new line items are generated | ||
on the Stock Valuation Report to reflect the resulting SVLs. For example, if the valuation method | ||
changes from *standard price* to either *AVCO* or *FIFO* accounting, *revaluation entries* will be | ||
automatically posted to reflect the change in pricing for goods that remain in stock. One entry will | ||
be negative to "remove" the old pricing, and the second entry will be positive to record the new | ||
pricing. These entries are connected to journal entries in Odoo's **Accounting** app. | ||
|
||
.. image:: aging/before-val-method-change.png | ||
:alt: Remaining value and quantity fields are calculated based on SVLs. | ||
|
||
An example of what the Stock Valuation Report table shows when a few stock moves have occurred | ||
for a product using standard price accounting. | ||
|
||
.. image:: aging/after-val-quant.png | ||
:alt: Remaining value and quantity fields are calculated based on SVLs. | ||
|
||
An example of what the Stock Valuation Report table shows after a product has switched from | ||
standard price to FIFO accounting. | ||
|
||
|
||
.. example:: | ||
The :guilabel:`Remaining Value` and :guilabel:`Remaining Quantity` fields are derived from what | ||
occurs at the SVL level in Odoo and, as such, are better understood with an example. | ||
|
||
Say `Frankie's Consignment Shop` buys sweaters at the cost, or :guilabel:`Unit Value`, of | ||
`5.00` dollars. For the first time, Frankie's purchases and receives a :guilabel:`Quantity` of | ||
`100.00` sweaters in one stock move, then re-sells and delivers `-10.00` sweaters in a second | ||
stock move. | ||
|
||
In the first stock move line item, the :guilabel:`Remaining Quantity` will change from `100.00` | ||
to `90.00`, once the second stock move is recorded. This change reflects that, although 100 | ||
sweaters were originally purchased, only 90 of those sweaters remain in stock and should be | ||
counted in the valuation. Similarly, the :guilabel:`Remaining Value` will drop from `$500.00` to | ||
`$450.00`. The :guilabel:`Total Value` will remain at `$500.00`, regardless of subsequent | ||
transactions. | ||
|
||
On the other hand, the :guilabel:`Remaining Quantity` of the second stock move line item will be | ||
recorded and remain at `0.00` because the quantity of `-10.00` was sold. In the system, because | ||
the SVL was a sale, there is no stock left that needs to be valued from that transaction. | ||
|
||
.. image:: aging/remaining-val-quant.png | ||
:alt: Remaining value and quantity fields are calculated based on SVLs. | ||
|
||
Change the valuation date | ||
------------------------- | ||
|
||
The :guilabel:`Valuation At Date` button, located in the top-left corner of the Stock Valuation | ||
page, reveals a pop-up window. In this pop-up, select a date to act as a "cut-off" for the stock | ||
moves to be valued. | ||
|
||
Generate reports | ||
================ | ||
.. note:: | ||
The value of the stock moves will not be point-in-time for any dates chosen in the past. In other | ||
words, the stock move shown when selecting a past date will still display the current on-hand | ||
value of its products. | ||
|
||
After learning how to :ref:`navigate the inventory aging report | ||
<inventory/warehouses_storage/aging-report>`, it can be used to create and share different reports. | ||
.. _inventory/warehouses_storage/aging-report: | ||
|
||
A few common reports that can be created using the :guilabel:`Inventory Aging` report are detailed | ||
below. | ||
Pivot view: stock aging | ||
======================= | ||
|
||
Rotating stock report | ||
--------------------- | ||
From the Stock Valuation dashboard, access pivot view by clicking the :icon:`oi-view-pivot` | ||
:guilabel:`(pivot table)` icon. This view is essentially a *Stock Aging Report*, and it shows the | ||
on-hand quantity and value of inventory by purchase date, which can help monitor products with | ||
expiration dates. | ||
|
||
To create a report to identify items that have been in stock for a while, follow these steps: | ||
Configure | ||
--------- | ||
|
||
#. Navigate to :menuselection:`Inventory app --> Reporting --> Inventory Aging`. | ||
#. On the :guilabel:`Inventory Aging` report, click the :icon:`fa-caret-down` :guilabel:`(caret | ||
down)` icon in the :guilabel:`Search...` bar to see a drop-down list of :guilabel:`Filters`, | ||
:guilabel:`Group By`, and :guilabel:`Favorite` options. | ||
#. Choose :guilabel:`Product` under the :guilabel:`Group By` section. Doing so expands the pivot | ||
table to show a product in each row. | ||
#. Click the :icon:`fa-plus-square` :guilabel:`(plus)` icon to the left of the date column. Hover | ||
over :guilabel:`Date` from the drop-down menu and choose :guilabel:`Year`, :guilabel:`Quarter`, | ||
:guilabel:`Month`, :guilabel:`Week`, or :guilabel:`Day`. Doing so expands the columns to show the | ||
:guilabel:`Remaining Qty` and :guilabel:`Remaining Value` by the selected time period. | ||
By default, the pivot view shows the value of all *product categories* by *day and month*. Clicking | ||
the :icon:`plus-square` :guilabel:`(plus)` icon in each column or row will reveal a drop-down | ||
list of options to further tabulate the table and create a more granular breakdown of the inventory | ||
valuation. The drop-down options include: :guilabel:`Product`, :guilabel:`Lot/Serial Number`, | ||
:guilabel:`Product Category`, :guilabel:`Date`, :guilabel:`Company`, or :guilabel:`Add Custom Group` | ||
Clicking the :icon:`minus-square-o` :guilabel:`(minus)` icon collapses the field back to an empty | ||
state. | ||
|
||
.. tip:: | ||
For products that have a longer shelf life, choose longer time periods such as | ||
:guilabel:`Month` or :guilabel:`Quarter` when expanding columns by :guilabel:`Date`. | ||
In the table, the :guilabel:`Remaining Qty` column displays the number of on-hand items, and | ||
:guilabel:`Remaining Value` displays the total cost of purchasing these items. | ||
|
||
.. image:: aging/column-expand-icon.png | ||
:align: center | ||
:alt: Pivot table, highlighting the plus icon to expand columns. | ||
.. image:: aging/stock-aging-report.png | ||
:alt: Stock aging report, showing product row items and day columns. | ||
|
||
#. The report now displays the on-hand stock of items, and their total purchasing cost, for each | ||
time period. | ||
Stock Aging report (pivot view), showing each **Product** in rows and each reception **Date** in | ||
columns. which can help to monitor products with expiration dates. | ||
|
||
.. example:: | ||
Inventory aging report, with the :guilabel:`Group By`: :guilabel:`Product` option selected, | ||
and with the :guilabel:`Date` column set to :guilabel:`Day`. It gives insight into how much | ||
raw fish sashimi products were purchased on each day, and how much it cost. This informs the | ||
business owners how much stock is at risk of rotting in stock, per day. | ||
Graph view | ||
========== | ||
|
||
.. image:: aging/inventory-aging.png | ||
:align: center | ||
:alt: Inventory aging report, showing product row items and day columns. | ||
The stock value can be depicted graphically by clicking the :icon:`area-chart` :guilabel:`(graph)` | ||
icon. By default, the graph is displayed in :icon:`line-chart` line chart view and filtered to show | ||
the cumulative total of all inventory value over time in Odoo. | ||
|
||
At the top of the report, a :icon:`bar-chart` bar chart or :icon:`pie-chart` pie chart view can be | ||
selected instead. |
Binary file removed
BIN
-21.9 KB
...ory_and_mrp/inventory/warehouses_storage/reporting/aging/column-expand-icon.png
Binary file not shown.
Binary file removed
BIN
-13.5 KB
...inventory_and_mrp/inventory/warehouses_storage/reporting/aging/default-view.png
Binary file not shown.
Binary file removed
BIN
-27.6 KB
...entory_and_mrp/inventory/warehouses_storage/reporting/aging/inventory-aging.png
Binary file not shown.