|
1 |
| -====================== |
2 |
| -Inventory aging report |
3 |
| -====================== |
| 1 | +========================= |
| 2 | +Stock valuation dashboard |
| 3 | +========================= |
4 | 4 |
|
5 | 5 | .. |SVLs| replace:: :abbr:`SVLs (stock valuation layers)`
|
6 | 6 |
|
7 |
| -The inventory aging report evaluates all items in stock, providing insights into potentially sunken |
8 |
| -purchase costs and delays in profitability. |
9 |
| - |
10 |
| -Create customized pivot tables to analyze product, operation types, month, or company breakdowns. |
11 |
| -This helps identify products in stock that are at risk of passing their expiration or viability |
12 |
| -dates, or instances of rot/decay for fast-expiring items. |
13 |
| - |
14 |
| -.. note:: |
| 7 | +When a company has physical assets, such as inventory, they often want to know approximately how |
| 8 | +much has been spent on these goods, or how much they are worth at the moment. These numbers are |
| 9 | +often reported for accounting purposes. For instance, an insurance company may want to know the |
| 10 | +value of goods stored in a warehouse, in the event of a flood or fire. |
| 11 | + |
| 12 | +This process of assigning a monetary value to account for inventory is known as *stock valuation*. |
| 13 | +:doc:`Stock valuation <../../product_management/inventory_valuation/using_inventory_valuation>` |
| 14 | +typically utilizes one of two accounting systems: |
| 15 | + |
| 16 | +- **Perpetual**: The inventory is constantly (perpetually) being updated, and the value is |
| 17 | + constantly changing. |
| 18 | +- **Periodic**: The inventory value is checked on an occasional (periodic) basis, and the value is |
| 19 | + set at this occasional time. |
| 20 | + |
| 21 | +Using :ref:`tracked inventory <inventory/product_management/tracking-inventory>` in Odoo |
| 22 | +necessitates a *perpetual* inventory accounting system because of the need to know when and where |
| 23 | +inventory exists, and how much of it is available or forecasted. There are a few common :ref:`stock |
| 24 | +valuation methods <inventory/warehouses_storage/costing_methods>` used in Odoo: standard price, |
| 25 | +average cost (AVCO), and first in, first out (FIFO) accounting. It is important to know that the |
| 26 | +valuation method chosen for a product impacts the calculation of several fields in the stock |
| 27 | +valuation reports. |
| 28 | + |
| 29 | +Where to access the dashboard |
| 30 | +----------------------------- |
| 31 | + |
| 32 | +Odoo's Stock Valuation dashboard displays the financial value of all tracked inventory, according |
| 33 | +to each product's stock valuation method. This report can provide insights into sunken purchase |
| 34 | +costs or delays in profitability. To access the dashboard, go to :menuselection:`Inventory app --> |
| 35 | +Reporting --> Valuation`. |
| 36 | + |
| 37 | +.. important:: |
15 | 38 | The *Reporting* menu in *Inventory* is only accessible to users with :doc:`admin access
|
16 | 39 | <../../../../general/users/access_rights>`.
|
17 | 40 |
|
18 |
| -To access the inventory aging report, go to :menuselection:`Inventory app --> Reporting --> |
19 |
| -Inventory Aging`. |
| 41 | +This dashboard has three different views, or inventory reports — :ref:`list view (i.e. the default, |
| 42 | +stock valuation report) <inventory/warehouses_storage/valuation-report>`, :ref:`pivot view (i.e. the |
| 43 | +stock aging report) <inventory/warehouses_storage/aging-report>`, and graph view. Each view can be |
| 44 | +customized with different fields to break down inventory valuation by product, operation type, date, |
| 45 | +or company. |
20 | 46 |
|
21 |
| -.. _inventory/warehouses_storage/aging-report: |
| 47 | +All three views can be filtered by various fields. To apply filters, click into the search bar at |
| 48 | +the top of the report, or click the drop-down arrow next to it. For example, selecting the filter |
| 49 | +:guilabel:`Has Remaining Qty` will show only pr ducts that are currently in stock. |
22 | 50 |
|
23 |
| -Navigate the inventory aging report |
24 |
| -=================================== |
25 | 51 |
|
26 |
| -By default, the :guilabel:`Inventory Aging` report displays a pivot table, with the month in |
27 |
| -columns, and product category in rows. The default filters, :guilabel:`Incoming` and :guilabel:`Has |
28 |
| -Remaining Qty`, show only products from receipts, and are currently in stock. |
| 52 | +.. _inventory/warehouses_storage/valuation-report: |
29 | 53 |
|
30 |
| -:guilabel:`Remaining Qty` displays the number of on-hand items, and :guilabel:`Remaining Value` |
31 |
| -displays the total cost of purchasing these items. |
| 54 | +List view: stock valuation |
| 55 | +========================== |
32 | 56 |
|
33 |
| -Clicking the :icon:`fa-plus-square` :guilabel:`(plus)` icon in each column or row reveals options to |
34 |
| -expand the pivot table and show a detailed breakdown of the :guilabel:`Remaining Qty` and |
35 |
| -:guilabel:`Remaining Value` by :guilabel:`Product`, :guilabel:`Product Category`, :guilabel:`Date`, |
36 |
| -or :guilabel:`Company`. Clicking the :icon:`fa-minus-square-o` :guilabel:`(minus)` icon collapses it |
37 |
| -back to its previous state. |
| 57 | +By default, the :guilabel:`Stock Valuation` dashboard displays in *list view*, represented by the |
| 58 | +:icon:`oi-view-list` :guilabel:`(list)` icon. This view is essentially a *Stock Valuation Report*, |
| 59 | +which shows a detailed record of stock movements and their valuations. |
38 | 60 |
|
39 |
| -.. figure:: aging/inventory-aging.png |
40 |
| - :align: center |
41 |
| - :alt: Inventory aging report. |
| 61 | +Configure |
| 62 | +--------- |
42 | 63 |
|
43 |
| - Inventory aging report, showing each **Product** in rows and each reception **Date** in columns, |
44 |
| - to better monitor products with fast expiration dates. Each row shows the the total on-hand |
45 |
| - quantity and inventory valuation of items purchased on each day. |
| 64 | +The following columns are displayed by default: |
46 | 65 |
|
47 |
| -.. note:: |
48 |
| - Records in the :guilabel:`Inventory Aging` report are *stock valuation layers* (SVLs), |
49 |
| - representing product moves that impact stock valuation. |
| 66 | +- :guilabel:`Date`: the date and time when the stock move was created. The valuation report is |
| 67 | + sorted by this field, emphasizing the importance of time when valuing inventory. |
| 68 | +- :guilabel:`Reference`: the reference document associated with this stock move (e.g., a warehouse |
| 69 | + receipt, a delivery order, or a manual inventory adjustment). |
| 70 | +- :guilabel:`Product`: the product that is being moved and valued. |
| 71 | +- :guilabel:`Quantity`: the number of units by which this product's stock has increased or |
| 72 | + decreased in this particular stock move. |
| 73 | +- :guilabel:`Total Value`: the value of the product's stock in this particular stock move, |
| 74 | + calculated by multiplying the :guilabel:`Quantity` and :guilabel:`Unit Value`. |
50 | 75 |
|
51 |
| - Inventory adjustments do **not** create |SVLs|; only items purchased from vendors do. |
52 |
| - |
53 |
| -Generate reports |
54 |
| -================ |
| 76 | +.. note:: |
| 77 | + If a :guilabel:`Reference` document includes several goods, there will be a *separate line item* |
| 78 | + generated on the Stock Valuation Report for *each* good. |
| 79 | + |
| 80 | +There are additional fields that can be added to this view to provide more insight into the stock's |
| 81 | +valuation: |
| 82 | + |
| 83 | +- :guilabel:`Lot/Serial Number`: the uniquely identifying lot or serial number for this product. |
| 84 | +- :guilabel:`Company`: for businesses that operate with multiple companies, this field displays the |
| 85 | + company by which this stock move took place. |
| 86 | +- :guilabel:`Remaining Quantity`: the number of units remaining for this valuation of the product, |
| 87 | + after demand has been accounted for (even from other stock moves). This field can be especially |
| 88 | + helpful for FIFO and AVCO accounting, as it conveys which units of stock came into a warehouse |
| 89 | + first and the value of said stock. |
| 90 | +- :guilabel:`Unit Value`: the cost of one unit of the product (**not** the price to consumers). |
| 91 | +- :guilabel:`Description`: a description of the reason for this stock valuation (typically, a stock |
| 92 | + move has occurred). By default, this field is set as the concatenation of the |
| 93 | + :guilabel:`Reference` and :guilabel:`Product` fields. However, the field may also display other |
| 94 | + important messages for this line item, such as a note stating that the line item is an adjustment |
| 95 | + due to a change in the product's inventory valuation method. |
| 96 | +- :guilabel:`Remaining Value`: the value of this product's current stock levels for this particular |
| 97 | + stock move, after demand has been accounted for. Along with :guilabel:`Remaining Quantity`, this |
| 98 | + field can be especially helpful for FIFO and AVCO accounting, as they convey which stock came |
| 99 | + into a warehouse first and the value of said stock. |
| 100 | + |
| 101 | +.. image:: aging/stock-valuation-report.png |
| 102 | + :alt: Stock valuation report. |
| 103 | + |
| 104 | +Each line item in the :guilabel:`Stock Valuation` report represents a record in Odoo's system known |
| 105 | +as a *stock valuation layer (SVL)*. SVLs are generated when products move in a way that impacts |
| 106 | +their stock valuation. Specifically, the stock moves that generate SVLs are warehouse receipts, |
| 107 | +deliveries, dropshipping orders, and dropshipping returns. These stock moves must first be validated |
| 108 | +(by clicking the :guilabel:`Validate` button) for the SVL to be created. |
| 109 | + |
| 110 | +If a product's inventory valuation method changes on the product form, new line items are generated |
| 111 | +on the Stock Valuation Report to reflect the resulting SVLs. For example, if the valuation method |
| 112 | +changes from *standard price* to either *AVCO* or *FIFO* accounting, *revaluation entries* will be |
| 113 | +automatically posted to reflect the change in pricing for goods that remain in stock. One entry will |
| 114 | +be negative to "remove" the old pricing, and the second entry will be positive to record the new |
| 115 | +pricing. These entries are connected to journal entries in Odoo's **Accounting** app. |
| 116 | + |
| 117 | +Below is an example of what the Stock Valuation Report table shows when a few stock moves have |
| 118 | +occurred for a product using standard price accounting. |
| 119 | + |
| 120 | +.. image:: aging/before-val-method-change.png |
| 121 | + :alt: Remaining value and quantity fields are calculated based on SVLs. |
| 122 | + |
| 123 | +Whereas the following image depicts what the Stock Valuation Report table might look like after a |
| 124 | +product has switched from standard price to FIFO accounting. |
| 125 | + |
| 126 | +.. image:: aging/after-val-method-change.png |
| 127 | + :alt: Remaining value and quantity fields are calculated based on SVLs. |
| 128 | + |
| 129 | +.. example:: |
| 130 | + The :guilabel:`Remaining Value` and :guilabel:`Remaining Quantity` fields are derived from what |
| 131 | + occurs at the SVL level in Odoo and, as such, are better understood with an example. |
| 132 | + |
| 133 | + Say `Frankie's Consignment Shop` buys sweaters at the cost, or :guilabel:`Unit Value`, of `5.00` |
| 134 | + dollars. For the first time, Frankie's purchases and receives a :guilabel:`Quantity` of `100.00` |
| 135 | + sweaters in one stock move, then re-sells and delivers `-10.00` sweaters in a second stock move. |
| 136 | + |
| 137 | + In the first stock move line item, the :guilabel:`Remaining Quantity` will change from `100.00` |
| 138 | + to `90.00`, once the second stock move is recorded. This change reflects that, although 100 |
| 139 | + sweaters were originally purchased, only 90 of those sweaters remain in stock and should be |
| 140 | + counted in the valuation. Similarly, the :guilabel:`Remaining Value` will drop from `$500.00` to |
| 141 | + `$450.00`. The :guilabel:`Total Value` will remain at `$500.00`, regardless of subsequent |
| 142 | + transactions. |
| 143 | + |
| 144 | + On the other hand, the :guilabel:`Remaining Quantity` of the second stock move line item will be |
| 145 | + recorded and remain at `0.00` because the quantity of `-10.00` was sold. In the system, because |
| 146 | + the SVL was a sale, there is no stock left that needs to be valued from that transaction. |
| 147 | + |
| 148 | + .. image:: aging/remaining-val-quant.png |
| 149 | + :alt: Remaining value and quantity fields are calculated based on SVLs. |
| 150 | + |
| 151 | +Change the valuation date |
| 152 | +------------------------- |
| 153 | + |
| 154 | +The :guilabel:`Valuation At Date` button, located in the top-left corner of the Stock Valuation |
| 155 | +page, reveals a pop-up window. In this pop-up, select a date to act as a "cut-off" for the stock |
| 156 | +moves to be valued. |
55 | 157 |
|
56 |
| -After learning how to :ref:`navigate the inventory aging report |
57 |
| -<inventory/warehouses_storage/aging-report>`, it can be used to create and share different reports. |
| 158 | +.. note:: |
| 159 | + The value of the stock moves will not be point-in-time for any dates chosen in the past. In other |
| 160 | + words, the stock move shown when selecting a past date will still display the current on-hand |
| 161 | + value of its products. |
58 | 162 |
|
59 |
| -A few common reports that can be created using the :guilabel:`Inventory Aging` report are detailed |
60 |
| -below. |
| 163 | +.. _inventory/warehouses_storage/aging-report: |
61 | 164 |
|
62 |
| -Rotating stock report |
63 |
| ---------------------- |
| 165 | +Pivot view: stock aging |
| 166 | +======================= |
64 | 167 |
|
65 |
| -To create a report to identify items that have been in stock for a while, follow these steps: |
| 168 | +From the Stock Valuation dashboard, access pivot view by clicking the :icon:`oi-view-pivot` |
| 169 | +:guilabel:`(pivot table)` icon. This view is essentially a *Stock Aging Report*, and it shows the |
| 170 | +on-hand quantity and value of inventory by purchase date, which can help monitor products with |
| 171 | +expiration dates. |
66 | 172 |
|
67 |
| -#. Navigate to :menuselection:`Inventory app --> Reporting --> Inventory Aging`. |
68 |
| -#. On the :guilabel:`Inventory Aging` report, click the :icon:`fa-caret-down` :guilabel:`(caret |
69 |
| - down)` icon in the :guilabel:`Search...` bar to see a drop-down list of :guilabel:`Filters`, |
70 |
| - :guilabel:`Group By`, and :guilabel:`Favorite` options. |
71 |
| -#. Choose :guilabel:`Product` under the :guilabel:`Group By` section. Doing so expands the pivot |
72 |
| - table to show a product in each row. |
73 |
| -#. Click the :icon:`fa-plus-square` :guilabel:`(plus)` icon to the left of the date column. Hover |
74 |
| - over :guilabel:`Date` from the drop-down menu and choose :guilabel:`Year`, :guilabel:`Quarter`, |
75 |
| - :guilabel:`Month`, :guilabel:`Week`, or :guilabel:`Day`. Doing so expands the columns to show the |
76 |
| - :guilabel:`Remaining Qty` and :guilabel:`Remaining Value` by the selected time period. |
| 173 | +Configure |
| 174 | +--------- |
77 | 175 |
|
78 |
| - .. tip:: |
79 |
| - For products that have a longer shelf life, choose longer time periods such as |
80 |
| - :guilabel:`Month` or :guilabel:`Quarter` when expanding columns by :guilabel:`Date`. |
| 176 | +By default, the pivot view shows the value of all *product categories* by *day and month*. Clicking |
| 177 | +the :icon:`oi-plus-square` :guilabel:`(plus)` icon in each column or row will reveal a drop-down |
| 178 | +list of options to further tabulate the table and create a more granular breakdown of the inventory |
| 179 | +valuation. The drop-down options include: :guilabel:`Product`, :guilabel:`Lot/Serial Number`, |
| 180 | +:guilabel:`Product Category`, :guilabel:`Date`, :guilabel:`Company`, or :guilabel:`Add Custom Group` |
| 181 | +Clicking the :icon:`oi-minus-square-o` :guilabel:`(minus)` icon collapses the field back to an empty |
| 182 | +state. |
81 | 183 |
|
82 |
| - .. image:: aging/column-expand-icon.png |
83 |
| - :align: center |
84 |
| - :alt: Pivot table, highlighting the plus icon to expand columns. |
| 184 | +In the table, the :guilabel:`Remaining Qty` column displays the number of on-hand items, and |
| 185 | +:guilabel:`Remaining Value` displays the total cost of purchasing these items. |
85 | 186 |
|
86 |
| -#. The report now displays the on-hand stock of items, and their total purchasing cost, for each |
87 |
| - time period. |
| 187 | +.. image:: aging/stock-aging-report.png |
| 188 | + :alt: Stock aging report, showing product row items and day columns. |
88 | 189 |
|
89 |
| - .. example:: |
90 |
| - Inventory aging report, with the :guilabel:`Group By`: :guilabel:`Product` option selected, |
91 |
| - and with the :guilabel:`Date` column set to :guilabel:`Day`. It gives insight into how much |
92 |
| - raw fish sashimi products were purchased on each day, and how much it cost. This informs the |
93 |
| - business owners how much stock is at risk of rotting in stock, per day. |
| 190 | +Graph view |
| 191 | +========== |
94 | 192 |
|
95 |
| - .. image:: aging/inventory-aging.png |
96 |
| - :align: center |
97 |
| - :alt: Inventory aging report, showing product row items and day columns. |
| 193 | +The stock value can be depicted graphically by clicking the :icon:`oi-area-chart` |
| 194 | +:guilabel:`(graph)` icon. By default, the graph is displayed in :icon:`oi-line-chart` line chart |
| 195 | +view and filtered to show the cumulative total of all inventory value over time in Odoo. |
98 | 196 |
|
| 197 | +At the top of the report, a :icon:`oi-bar-chart` bar chart or :icon:`oi-pie-chart` pie chart view |
| 198 | +can be selected instead. |
0 commit comments