Sei sulla pagina 1di 7

INVENTORY VALUATION

This document is a technical overview of how inventory valuation is handled by the Financials
module.
Change Log

May 2 2006

Updated for opentaps 0.9

2006 Open Source Strategies, Inc. All Rights Reserved.

INVENTORY VALUATION
Processes Supported
The financials module supports inventory valuation for the following processes:
1. Receive Inventory
1. from Manufacturing
2. from Purchasing
3. from a customer return
2. Enter inventory variance (lost/found)
3. Transfer inventory from one warehouse to another
4. Allocate freight and other costs on purchase orders
5. Calculate and post Cost of Goods Sold (COGS) from a Shipment to customer
6. Inventory Valuation Report
7. Financial Statements
Key Data Model Entities
InventoryItem is the key entity for inventory valuation. InventoryItem fields
quantityOnHandTotal, unitCost, and new fields ownerPartyId and currencyUomId will be used to
track the quantities of inventory, their costs, and their owners. If InventoryItem owner is empty,
then InventoryItem's related Facility's ownerPartyId will be used.
InventoryItemDetail is a record of all the transactions of InventoryItem which affected its
quantities. It will track each change to its availableToPromiseTotal and quantityOnHandTotal and
the shipment, shipment receipt, order, item issuance, physical inventory variance, work effort
(manufacturing). It does not record any changes in monetary value.
InventoryItem is related to ItemIssuance to Shipment to (Sales) Orders. Order items are issued
into ItemIssuance against InventoryItems and then shipped into Shipment. ItemIssuance records
orderItem/orderItemSeqId/shipGroupSeqId (for OrderItem) and shipmentId/shipmentItemSeqId
(for Shipment) against inventoryItemId for InventoryItem.
InventoryItem is related to Returns and Purchase Orders through ShipmentReceipt, which are
related to ShipmentPackage and indirectly (and will be related directly as well) to Shipment.
Shipment records incoming shipments for returns and purchase orders.
InventoryItems are re-balanced after inventory variance operations. The balanceInventoryItem
service must be modified to make sure it does not run when the order's ProductStore's
organizationParty is using LIFO/FIFO costing.
Selling Inventory Not in Stock and Receiving Later

2006 Open Source Strategies, Inc. All Rights Reserved.

INVENTORY VALUATION
Usually, if you sell an item which you don't have stock, you would then purchase or manufacture
it, receive it, and then ship it out. If you do it this way, the purchase or manufacturing will cause
the inventory to be received at the correct value. Then, when you ship, the inventory you ship out
will be at the correct value.
This works because when you've sold an item but not shipped it, your ATP is negative but your
QOH has not changed until you actually ship. Inventory valuation is based on QOH, not ATP.
OFBiz inventory model does this correctly.
Avoid shipping inventory that you really don't have in stock (qoh < 0). It may cause slight
discrepancies between your COGS and Inventory accounts. It also violates the laws of Nature.
Reconciling Purchase Variance
The service for posting invoices to the ledger already reconciles purchase orders' original prices,
which should be on the InventoryItem and UNINVOICED_ITEM_RECEIPT, with the final invoiced
prices. It will adjust UNINVOICED_ITEM_RECEIPT and PURCHASE_PRICE_VARIANCE and
ACCOUNTS_PAYABLE.
Allocating Freight Costs
Allocation of freight costs is not supported at this time. Most companies actually directly expense
freight-in. This is because inventory should be valued at the lower of actual and net realizable
value. It is considered more conservative not to capitalize the freight content. Should you wish
to do this, a service would have to be written to allocate freight and miscellaneous costs and then
update the InventoryItems' unit costs with them.
Value of Each Inventory Item
If serialized, the value of the InventoryItem is the unitCost. If un-serialized, it is the unitCost *
quantityOnHandTotal. Conversion will be from the InventoryItem's currency into the
organization's currency. Will return zero if the InventoryItem is SERIALIZED and the status is
Damaged, Rejected, etc.
Receiving Inventory
Receiving inventory debits INVENTORY. Credit (offsetting) account depends on type of
Shipment: Purchase Shipment will be UNINVOICED_SHIP_RECEIPT, Customer Return
Shipment will be RETURN_INVENTORY. You can set it up so that RETURN_INVENTORY is the
same as your Cost of Goods Sold account.
Value of posting is the value of the InventoryItem for each line item of the ShipmentReceipt.
If no unitCost is supplied, then the createInventoryItem service will grab the latest standard cost.
If no standard cost is available, it should fail. (If the user wants to receive at zero, he should
explicitly state so. That will still be allowed though obviously not recommended.)
ownerPartyId and currencyUomId will default to those of the Facility.ownerPartyId if not explicitly

2006 Open Source Strategies, Inc. All Rights Reserved.

INVENTORY VALUATION
provided.
Warning: Do not create inventory items directly in the Facility manager's warehouses. Use
receive inventory or inventory variance instead. Creating inventory items directly will not be
posted to the ledger.
Returns: Return shipments will be automatically created with standard cost, ownerPartyId, and
base currency of owner party from Facility, since these figures are not provided explicitly.
Inventory Variance
Debit Variance Account based on Physical Variance type
Credit Inventory
Amount is the change in quantityOnHand
For serialized inventory something different would have to be done. Physical variance of
serialized inventory is done by changing the status of the inventory item to Damaged or Rejected.
Thus, a separate SECA service would have to run when InventoryItem is updated.
If the organization uses average cost method, difference of quantity * (averageCost unitCost) is
to be credited to the INV_ADJ_AVG_COST GL account. The amount credited to the offsetting
inventory variance account should be averageCost * quantity.
Inventory Transfer
If the ownerPartyId of the two inventoryItems are not equal, then:
The receiving owner:
Debit Inventory, Credit INVENTORY_XFER_IN_ACCT
The sending owner:
Debit INVENTORY_XFER_OUT_ACCT, Credit Inventory
Valuation of inventory transferred is the Value of Inventory Item above.
Usually you would want to set the XFER_IN/OUT accounts as Due From Affiliates and Due to
Affiliates, current account assets and liabilities.
If the transferred out InventoryItem's ownerPartyId is using COGS_AVG_COST for
COGSMethodId, and the value of the InventoryItem transferred out is different than the average
cost of the product for its ownerPartyId, then create another transaction entry for the difference of
(averageCost InventoryItem.unitCost):
Debit INVENTORY_XFER_OUT_ACCT, Credit INV_AVG_COST_ADJ
Sales Shipments
When inventory is shipped out to customers from a sales order, the transactions are to:
Debit Cost of Goods Sold (COGS), Credit Inventory
This should happen as part of a Sales Shipment being shipped, independent of an invoice. The

2006 Open Source Strategies, Inc. All Rights Reserved.

INVENTORY VALUATION
value of the inventory is the sum of all ItemIssuance of the shipment's InventoryItem, using Value
of InventoryItem above.
If the company is using an Average Cost method, then an adjustment would be posted to adjust
the actual lot inventory value (from the InventoryItems) to the average cost of all inventory at the
time. The adjustment is
Quantity Shipped x (Average Cost for Product InventoryItem Value)
for each InventoryItem. The adjustment can be posted to
Debit COGS_ADJ_AVG_COST, Credit INV_ADJ_AVG_COST
You can set these to be the same as COGS and INVENTORY GL accounts, and the average cost
valuation would blend seamlessly into your COGS and Inventory. Or, you can set up separate
accounts and then see the effect of average cost versus your true inventory reservation on your
financial statements.
Technically, this actually happens when the shipment is marked SHIPMENT_PACKED, because
in OFBiz, when the items are issued into ItemIssuance and the shipment is marked PACKED,
that's when the items' quantity on hand is decreased.
When no average cost is available, the system will use the standard cost of the item.
IMPORTANT NOTE: The average cost of the product for accounting purposes is stored in the
ProductAverageCost entity and is NOT the Average Cost which could be set in the Catalog
Managers product prices tab. That average cost is used for product pricing rules.
Inventory Valuation Report
The inventory value of an organization is the sum of all its inventory items' value, using the
method Value of Inventory Item described above. It can be reconciled against the sum of debits
and credits of all Inventory accounts in the ledger.
In the Financials module, there are actually two inventory valuation reports which can be
accessed in [Financials] > [Reports]. The Inventory Valuation Summary report is based on the
entries in the general ledger for all raw material (RAWMAT_INVENTORY), work in progress
(WIP_INVENTORY), finished goods inventory (INVENTORY_ACCOUNT), and average cost
adjustments (INV_ADJ_AVG_COST.) This report can be run as of any date or time period end
date. The Inventory Valuation Detail report is based on the actual InventoryItems owned by the
organization, plus an adjustment for work in progress (WIP_INVENTORY) and valuation
adjustment due to average cost accounting (INV_ADJ_AVG_COST) and can only be run as of
the current moment.
Currently the inventory valuation detail report excludes serialized inventory items, but there may
be accounting transaction entries from them in the inventory valuation report, leading to
discrepancies between the two.
Financial Statements
Financial statements will go off ledger Inventory account values and will not use InventoryItem at

2006 Open Source Strategies, Inc. All Rights Reserved.

INVENTORY VALUATION
all.
LIFO and FIFO
Because inventory valuation for COGS is done directly against InventoryItem and InventoryItem
is reserved in LIFO or FIFO, the calculations should be correct. To set up LIFO or FIFO cost
accounting:
1. Set up the Organization's cost accounting as LIFO or FIFO
2. Set up each ProductStore of the Organization to be LIFO or FIFO, in agreement with the
costing method set up above.
Serialized Inventory
Serialized inventory is different than regular inventory in that each InventoryItem is used to record
one particular product item with a serial number, rather than recording a number of units of a
product. The status of the inventory item is used to denote the ATP/QOH quantity-equivalent of
the serialized inventory item: DELIVERED and AVAILABLE mean ATP=1 and QOH=1,
PROMISED means ATP=0 and QOH=1.
There is also no physical inventory variance for serialized inventory items: the change of status
alone is used to control the status of items.
Currently the financials module does account for serialized inventory, so that if you receive
serialized items, then ship them out again, it will correctly book inventory and COGS on your
ledger. It does not, however, currently recognize the correct inventory item status and adjust
inventory values correspondingly, so as soon as the serialized item is received, it is added to
inventory, rather than waiting for the status to be AVAILBLE or DELIVERED, and changing the
status to DAMAGED will not have the effect of a physical variance. This should be implemented
at some point if someone wants to use financials with serialized inventory.
Re-valuation of Inventory
If inventory needs to be revalued, then the InventoryItem.unitCost record needs to be changed. A
new entity InventoryItemCostHistory should be created to store its history. Each time a cost is
created or updated, it should record the timestamp of the updated cost. Then, when the inventory
item's cost is changed, a service should run to record a
Debit Inventory, Credit Inventory Adjustment
For security purposes, a separate service with a specific permission should be set up for
changing inventory values. It should not be done as part of a general updateInventoryItem
service.
This re-valuation can also be useful for adjusting values of inventory which is partially damaged
but should not be fully varianced down to zero value.
Fluctuating Inventory Values
Most securities and trading businesses value their inventory using LOCOM or Lower Of Cost Or

2006 Open Source Strategies, Inc. All Rights Reserved.

INVENTORY VALUATION
Market method, so the manual inventory adjustment method above is adequate. For
organizations holding highly liquid financial assets (such as mutual funds of stocks or bonds,
rather than private placements or bank loans), the right approach may be to present a balance
sheet based on current market prices. (I'd have to consult GAAP on exact details of when this is
appropriate.)
In this case, we could either frequently re-value using the technique above. Alternatively,
InventoryItem could be used to store the value of inventory in the "vault" for historical cost basis.
Valuation of fluctuating financial assets may best be handled through a regularly updated table of
current prices. Financial statements' inventory would be based on the most recent prices, and
the difference between current market prices and historical cost could be offset in an inventory
valuation reserve account in the Equities section. When inventory is sold, the difference between
market price and historical cost could be taken out of the equities reserve.
This is a very specialized area which requires consultation of the relevant GAAP guide on it for a
formal opinion.
Drop Shipping
True drop shipping is not currently supported in OFBiz. The closest approximation right now is to
mark a Purchase Order's ship-to address as that of a customer and then fake receive the
inventory into the warehouse of the Sales Order. That would cause the inventory to match up,
but it might not cause the correct inventory item to be matched on the purchase and sales orders.
It will also book the inventory on the balance sheet of the company, even for a short moment
before shipment is marked as shipped. This may or may not be the correct accounting procedure
for drop shippers.
Bulk Items
Bulk items, defined as products without product ids, can be ordered on Purchase Orders but
could cause discrepancies between Inventory Valuation Report (based on ledger entries) and
Inventory Detail Report (based on actual inventory items.)
TODO's
1. SECA or check on ProductStore to make sure that LIFO/FIFO inventory reservation agrees
with the ProductStore's organizationPartyId.
2. Change code for serialized InventoryItem to use qoh quantities of 1.0 or 0.0 depending on
state, instead of leaving them blank.

2006 Open Source Strategies, Inc. All Rights Reserved.

Potrebbero piacerti anche