GM-X ERP for Blockchain - The INVENTORY subsystem

By Tony Marston

16th July 2007
Amended 30th March 2024

Introduction
1. Inventory Item
2. Item Issuance
3. Item Receipt
4. Item Variance
5. Reserved Items
6. Item Status
7. Item Movements
8. Stock Checks
9. Facilities and Containers
10. Container Movements
11. Facility Contact Mechanism
12. Facility Role
13. Reorder Guidelines
14. Pick Lists
15. Inventory Control Data
Amendment History

Introduction

Many organisations keep a supply of their products readily available so that they may fulfil sales orders with the minimum of delay, and not have to wait for the products to be manufactured, assembled, or delivered from the supplier. This supply is known as INVENTORY or STOCK, and may be stored in any number of locations or FACILITIES. It is important for the organisation to know what quantities of each product are available, and where. The quantity on-hand is decreased each time items are issued from stock for an outgoing shipment, and increased each time items are replenished, either from an internal production run or an incoming shipment. Reorder levels help the organisation to know when quantities are getting low so that they may begin the replenishment procedure.

Inventory items may be serialised, which means that each individual item has its own unique identification number, or they may be unserialised. Some producers have the concept of a LOT, which is a grouping of items of the same type. This can be used to track inventory back to its source, which is usually a particular production run. It is also possible for a product to be tracked by both lot and serial number. This is specified in the inventory_type column on the PRODUCT record.


Inventory Item

This shows what quantities of which products are available at what locations. Each inventory item exists within a particular container at a particular facility, so it is possible for a product to have multiple items each of which will have a separate inventory_item_id.

In the situation where a GM-X installation is handling multiple Functional Units which buy and sell inventory among themselves it is vitally important that the owner of that inventory can be easily identified and only be altered in the right circumstances. The owner of each inventory item is denoted in the party_id column which is subject to the principles identified in FAQ35.

Figure 1 - Inventory Item

inventory-01 (3K)

INVENTORY_ITEM table

A product may have more than one inventory item if quantities are stored in several FACILITIES, or if it was produced from a different LOT, or if the product is serialised, in which case there will be a separate inventory item for each serial number.

FieldTypeDescription
party_id string Links to an entry on the PARTY table. This indicates the owner of this item.
product_id string Links to an entry on the PRODUCT table.
revision_id string Optional. Links to an entry on the PRODUCT_REVISION table.
inventory_item_id numeric A number which is generated by the system, starting at 1 for each product_id. A product may have multiple instances in inventory, and each instance will have a different inventory_item_id. Serialised items will have a separate instance for each serial_no, while non-serialised items will have a separate instance for each container.
inv_item_status_id numeric Identifies the current status for this item.
serial_no string Required if this is a serialised product (as indicated by inventory_type on the PRODUCT record), otherwise is must be blank.
total_qty numeric Display only. This is calculated as the sum of all ITEM_RECEIPTs minus the sum of all ITEM_ISSUANCEs plus the sum of all ITEM_VARIANCEs.
qty_on_hand numeric Display only. This is total_qty minus the sum of any RESERVED_ITEMs. This identifies the quantity which is actually, not theoretically, available to satisfy sales orders. This may also be known as available-to-promise (ATP)
unit_cost_actual numeric Display only. This is the mean actual cost per unit.
facility_id numeric Links to an entry on the FACILITY table.
container_id numeric Links to an entry on the CONTAINER table.
lot_id number Optional. Links to an entry on the LOT_PRODUCT table.
stockcheck_cycle_no numeric Optional. If set to a non-zero value this item will be included in the stock check which has the same cycle number. This allows the stock levels for different items to be checked on different occasions.

INVENTORY_ITEM_FEATURE table

Serialised products may have different sets of features from those which are available, so these can be recorded here.

FieldTypeDescription
party_id string Links to an entry on the INVENTORY_ITEM table.
product_id string Links to an entry on the INVENTORY_ITEM table.
inventory_item_id numeric Links to an entry on the INVENTORY_ITEM table.
prod_feature_id numeric Links to an entry on the PRODUCT_FEATURE table.

INVENTORY_ITEM_FEATURE_CUSTOMISATION table

This table holds all the customised values for a feature which applies to an inventory item. Some features within a feature category may be able to be customised, such as engraving options for jewellery will need the text which is to be engraved.

FieldTypeDescription
party_id string Links to an entry on the INVENTORY_ITEM_FEATURE table.
product_id string Links to an entry on the INVENTORY_ITEM_FEATURE table.
inventory_item_id numeric Links to an entry on the INVENTORY_ITEM_FEATURE table.
prod_feature_id numeric Links to an entry on the INVENTORY_ITEM_FEATURE table.
custom_seq_no numeric Links to the seq_no field on an entry in the PROD_FEAT_CAT_CUSTOMISATION table.
feature_customisation string Text.

INVENTORY_ITEM_PRICE table

Sometimes an item in inventory may have a price which is different from the current catalog price, perhaps because it was returned by the previous customer and can be sold at a discounted price.

FieldTypeDescription
party_id string Links to an entry on the INVENTORY_ITEM table.
product_id string Links to an entry on the INVENTORY_ITEM table.
inventory_item_id numeric Links to an entry on the INVENTORY_ITEM table.
price numeric The price for this item.
price_date numeric The date on which this price was determined.

LOT table

A LOT is a grouping of items of the same type, and is generally used to track inventory items back to their source, and is often the result of a particular production run. Another source of lot information may be from the shipment from suppliers, which could determine the lot. This information is very important in the event that a recall of items is required.

FieldTypeDescription
lot_id numeric Identity number which is generated by the system.
lot_name string Short name.
lot_desc string Optional. Long description.
product_count numeric Required. The number of products included in this lot (see LOT_PRODUCT). Will be validated against the lot_size value on the Inventory Control Data.
manuf_date datetime Required. The date on which this lot was produced. The time portion is optional.
manufacturer_id number Optional. Identifies the manufacturer of this product. Links to an entry on the PARTY table.
lot_id_external string Optional. Some products may have lot numbers which are a mixture of letters and numbers. It is possible for the same lot number to be used by different manufacturers, so in order to check for uniqueness there will be a lookup using a mixture of manufacturer_id + lot_id_external
lot_source string Optional. Identifies the source (facility, plant or establishment) of this lot.

LOT_PRODUCT table

This identifies the products which are contained in a particular lot. Depending on the configuration option this may be restricted to no more than 1 or any number.

FieldTypeDescription
lot_id numeric Lot Identity. Links to an entry on the LOT table.
product_id string Product Identity. Links to an entry on the PRODUCT table.
lot_quantity numeric The total quantity of this product in this lot. This should initially match the sum of all inventory receipts before any issuances.
unit_cost_actual numeric Display only. This is the mean actual cost per unit.
expiry_date date Optional. The date on which this product becomes effectively unusable. Defaults to 9999-12-31 (31st December 9999). This is calculated by adding the product's shelf_life_days (if it is greater than zero) to the lot's manuf_date.

Item Issuance

An item issuance occurs when a quantity of a product is removed from inventory prior to being included in an outgoing shipment, moved to another facility/container, or converted into another product.

After a Sales Order or a Transfer Order has been authorised, a PICK LIST is generated which identifies which items are scheduled to be extracted from inventory. As each quantity is picked from inventory this is recorded on an ITEM_ISSUANCE record, which will immediately reduce the qty_on_hand of that product at that location.

Quantities of a product may exist at several locations, so at the issuance stage the user has to choose one.

If stock has been reserved for an order at a particular location the user cannot choose any other location. When the ITEM_ISSUANCE record is created the RESERVED_ITEM record will be deleted.

Figure 2 - Item Issuance

inventory-02 (2K)

ITEM_ISSUANCE table

This identifies when a quantity was removed from stock prior to being included in an outgoing shipment (a customer shipment, or a transfer to another facility). Its effect is to decrement the qty_on_hand value for the INVENTORY_ITEM.

FieldTypeDescription
item_issuance_id numeric Identity number which is generated by the system.
order_type string Optional. Links to an entry on the ORDER_ITEM table.
order_id numeric Optional. Links to an entry on the ORDER_ITEM table.
order_item_seq_no numeric Optional. Links to an entry on the ORDER_ITEM table.
party_id string Links to an entry on the INVENTORY_ITEM table.
product_id string Links to an entry on the INVENTORY_ITEM table.
inventory_item_id numeric Links to an entry on the INVENTORY_ITEM table.
quantity_issued numeric The quantity issued/removed from inventory. For serialised items this is always '1'.
work_effort_id numeric Optional. Links to an entry on the WORK_EFFORT_COMPONENT table. This identifies the work effort for this movement, and is required for issuances from staging locations.
work_effort_seq_no numeric Optional. Links to an entry on the WORK_EFFORT_COMPONENT table. This identifies the work effort component for this movement, and is required for issuances from staging locations.
The following fields are display only, and are used only when posting to the General Ledger subsystem.
is_postable boolean A YES/NO switch with an initial value of NO. Indicates if the variance is associated with an event which triggers the creation and posting of journal entries, or not. Set to YES if the party_id has an entry on the FUNCTIONAL_UNIT table.
is_posted boolean A YES/NO switch with an initial value of NO. Indicates if a journal entry has been created and posted for the variance, or not. Once is_posted is YES for a receipt, the variance cannot be posted again.
posting_date date Optional. This is the date which determines the fiscal period affected by this issuance. Blank if is_postable is NO or is_posted is NO.
fiscal_calendar_id numeric Optional. This identifies the fiscal calendar. Links to an entry on the FISCAL_CALENDAR_PERIOD table. Blank if is_posted is NO.
fiscal_year numeric Optional. This identifies the Gregorian year when the end of the fiscal year occurs for this posting_date. Links to an entry on the FISCAL_CALENDAR_PERIOD table. Blank if is_postable is NO or is_posted is NO.
fiscal_period numeric Optional. This identifies the fiscal period for this posting_date. Links to an entry on the FISCAL_CALENDAR_PERIOD table. Blank if is_postable is NO or is_posted is NO.
journal_number numeric Optional. This is the journal entry number which is generated by the system. Blank if is_postable is NO or is_posted is NO.

ITEM_ISSUANCE_FEATURE table

A product may come with a variety of different features, so it may be important to identify which features were included with a particular item issuance.

FieldTypeDescription
item_issuance_id numeric Links to an entry on the ITEM_ISSUANCE table.
prod_feature_id numeric Links to an entry on the PRODUCT_FEATURE table.

ISSUANCE_ROLE_TYPE table

This identifies the various roles that different parties may play with an item issuance.

FieldTypeDescription
issuance_role_type_id string Identity
issuance_role_type_name string Name

Here are some examples:

ITEM_ISSUANCE_ROLE table

Each item issuance may have many people involved in the process, and therefore may have many ITEM_ISSUANCE_ROLEs for each party.

FieldTypeDescription
item_issuance_id numeric Links to an entry on the ITEM_ISSUANCE table.
issuance_role_type_id string Links to an entry on the ISSUANCE_ROLE_TYPE table.
party_id numeric Links to an entry on the PARTY table.

Item Receipt

An item receipt occurs when a quantity of a product is added to inventory as a result of an incoming shipment (a supplier shipment, a customer return, a transfer from another facility) or a product conversion.

Figure 3 - Item Receipt

inventory-03 (2K)

ITEM_RECEIPT table

This identifies when a quantity was added to stock. Its effect is to increment the qty_on_hand value for the INVENTORY_ITEM. There may also be a link to an order item which may refer to either a goods order or a service order.

FieldTypeDescription
item_receipt_id numeric Identity number which is generated by the system.
party_id string Links to an entry on the INVENTORY_ITEM and PARTY tables.
product_id string Links to an entry on the INVENTORY_ITEM and PRODUCT tables.
inventory_item_id numeric Links to an entry on the INVENTORY_ITEM table.
package_id numeric Links to an entry on the PACKAGE_IN_CONTENT table.
package_seq_no numeric Links to an entry on the PACKAGE_IN_CONTENT table.
quantity_received numeric The quantity to be added to inventory.
unit_cost_actual numeric Display only. This is the mean actual cost per unit.
order_type string Optional. Links to an entry on the ORDER_ITEM table. This is used for a goods order.
order_id numeric Optional. Links to an entry on the ORDER_ITEM table. This is used for a goods order.
order_item_seq_no numeric Optional. Links to an entry on the ORDER_ITEM table. This is used for a goods order.
order_type_svc string Optional. Links to an entry on the ORDER_ITEM table. This is used for a service order.
order_id_svc numeric Optional. Links to an entry on the ORDER_ITEM table. This is used for a service order.
order_item_seq_no_svc numeric Optional. Links to an entry on the ORDER_ITEM table. This is used for a service order.
The following fields are display only, and are used only when posting to the General Ledger subsystem.
is_postable boolean A YES/NO switch with an initial value of NO. Indicates if the variance is associated with an event which triggers the creation and posting of journal entries, or not. Set to YES if the party_id has an entry on the FUNCTIONAL_UNIT table.
is_posted boolean A YES/NO switch with an initial value of NO. Indicates if a journal entry has been created and posted for the variance, or not. Once is_posted is YES for a receipt, the variance cannot be posted again.
posting_date date Optional. This is the date which determines the fiscal period affected by this receipt. Blank if is_postable is NO or is_posted is NO.
fiscal_calendar_id numeric Optional. This identifies the fiscal calendar. Links to an entry on the FISCAL_CALENDAR_PERIOD table. Blank if is_posted is NO.
fiscal_year numeric Optional. This identifies the Gregorian year when the end of the fiscal year occurs for this posting_date. Links to an entry on the FISCAL_CALENDAR_PERIOD table. Blank if is_postable is NO or is_posted is NO.
fiscal_period numeric Optional. This identifies the fiscal period for this posting_date. Links to an entry on the FISCAL_CALENDAR_PERIOD table. Blank if is_postable is NO or is_posted is NO.
journal_number numeric Optional. This is the journal entry number which is generated by the system. Blank if is_postable is NO or is_posted is NO.

RECEIPT_ISSUANCE_LINK table

This links an item receipt and one or more item issuances. This is typically used when one or more inventory items are consumed in a conversion process in order to create another inventory item. Each consumed item will have an entry on the ITEM_ISSUANCE table, and the generated item will have an entry on the ITEM_RECEIPT table.

FieldTypeDescription
item_receipt_id number Links to an entry on the ITEM_RECEIPT table.
item_issuance_id numeric Links to an entry on the ITEM_ISSUANCE table.

Item Variance

This keeps a history of inventory item shrinkage or overages that were noticed during physical inventories or inspections.

Figure 4 - Item Variance

inventory-04 (2K)

INVENTORY_VARIANCE_REASON table

This identifies the reason for a particular variance.

FieldTypeDescription
inv_var_reason_id numeric Generated automatically by the system
inv_var_reason_name string Name.

Here are some examples:

INVENTORY_ITEM_VARIANCE table

This table identifies each adjustment to the stock level for an inventory item. These are usually noticed during a physical inventory or stock check to discover variances between book and physical inventory. A negative variance (such as damaged items) will require a negative adjustment to reduce the on-hand and total quantities, while a positive variance (such as repaired items) will require a positive adjustment to increase those quantities.

This table also identifies each adjustment to the value of the stock for an inventory item. These adjustments may occur when the cost per unit of a product is changed using the Product Costing system, and inventory items with a total quantity exist for that product.

FieldTypeDescription
party_id string Links to an entry on the INVENTORY_ITEM and PARTY tables.
product_id string Links to an entry on the INVENTORY_ITEM and PRODUCT tables.
inventory_item_id numeric Links to an entry on the INVENTORY_ITEM table.
seq_no numeric Number generated automatically by the system.
inv_var_reason_id numeric Links to an entry on the INVENTORY_VARIANCE_REASON table.
inventory_date date The date of this entry. When posting to the General Ledger subsystem, it determines the fiscal period affected by this adjustment.
variance_qty numeric Required. A negative value reduces qty_on_hand and total_qty while a positive value increases them.
var_comment string Optional text.
valuation_type string Optional. Required for cost revaluation events, in which case must be one of the following:
  • A - Actual
  • F - Frozen Standard
  • S - Standard
total_qty numeric Optional. Required for cost revaluation events, in which case this is the total_qty of the INVENTORY_ITEM entry when the cost revaluation occurred.
unit_cost_new numeric Optional. Required for cost revaluation events, in which case this is the new cost per unit of the INVENTORY_ITEM as at the inventory_date.
unit_cost_previous numeric Optional. For cost revaluation events, this is the previous cost per unit of the INVENTORY_ITEM, if any, which was superseded by the cost revaluation.
start_date_previous date Optional. For cost revaluation events, this is the earliest start_date of the entry or entries on the PRODUCT_COST table, if any, which were superseded by the cost revaluation.
The following fields are display only, and are used only when posting to the General Ledger subsystem.
is_postable boolean A YES/NO switch with an initial value of NO. Indicates if the variance is associated with an event which triggers the creation and posting of journal entries, or not. Set to YES if the party_id has an entry on the FUNCTIONAL_UNIT table and the entry is not a cost revaluation event (i.e. the valuation_type is blank), or the valuation_type matches the Product Cost Valuation Type Used in the General Ledger.
is_posted boolean A YES/NO switch with an initial value of NO. Indicates if a journal entry has been created and posted for the variance, or not. Once is_posted is YES for a receipt, the variance cannot be posted again.
fiscal_calendar_id numeric Optional. This identifies the fiscal calendar. Links to an entry on the FISCAL_CALENDAR_PERIOD table. Blank if is_posted is NO.
fiscal_year numeric Optional. This identifies the Gregorian year when the end of the fiscal year occurs for this inventory_date. Links to an entry on the FISCAL_CALENDAR_PERIOD table. Blank if is_postable is NO or is_posted is NO.
fiscal_period numeric Optional. This identifies the fiscal period for this inventory_date. Links to an entry on the FISCAL_CALENDAR_PERIOD table. Blank if is_postable is NO or is_posted is NO.
journal_number numeric Optional. This is the journal entry number which is generated by the system. Blank if is_postable is NO or is_posted is NO.

Reserved Items

In some circumstances it may be a good idea to reserve stock for a sales order so that it is still available at the item issuance stage and not issued to someone else. Reserved quantities reduce the value in qty_on_hand to indicate that the stock is not available to others.

Entries on this table may be created at any of the following stages:

Entries are deleted when the items are picked from inventory at the issuance stage.

Figure 5 - Reserved Items

inventory-05 (2K)

Item Status

Although items may be in stock, it is vital to know their current condition which may be 'OK', 'in quarantine', 'being repaired' or 'scrap'.

Note that only those items with an 'OK' status can be picked. Only those items with an 'OK' or 'in quarantine' status may be reserved.

Any item which is part of a LOT which has passed its expiry date will automatically be excluded from the ' OK' category.

Figure 6 - Item Status

inventory-06 (2K)

INVENTORY_ITEM_STATUS table

This identifies all the possible status values for an inventory item.

FieldTypeDescription
inv_item_status_id numeric Identity. Automatically generated by the system.
inv_item_status_name string Name.
sort_seq numeric Used for sorting the entries in the dropdown list.

Here are some examples:

INVENTORY_ITEM_STATUS_HIST table

This keeps a history of all the changes in status for an inventory item. The entry with the highest sequence number is the latest.

FieldTypeDescription
party_id string Links to an entry on the INVENTORY_ITEM and PARTY tables.
product_id string Links to an entry on the INVENTORY_ITEM and PRODUCT tables.
inventory_item_id numeric Links to an entry on the INVENTORY_ITEM table.
seq_no numeric Sequence number which is generated by the system.
inv_item_status_id numeric Links to an entry on the INVENTORY_ITEM_STATUS table.
status_date date The date of this variance.

Item Movements

It is possible for an item to be moved from one facility/container to another without that item being removed from stock. Different containers may identify different processes that are required, such as "to be polished", "to be engraved" or "to be inspected".

Note that this facility should only be used for local movements which do not require the use of a SHIPMENT from one location to another.

Figure 7 - Inventory Item Movements

inventory-13 (1K)

INVENTORY_ITEM_MOVEMENT table

This keeps a record of each time an item is moved from one facility/container to another.

FieldTypeDescription
party_id string Links to an entry on the INVENTORY_ITEM and PARTY tables.
product_id string Links to an entry on the INVENTORY_ITEM and PRODUCT tables.
inventory_item_id numeric Links to an entry on the INVENTORY_ITEM table.
seq_no numeric Sequence number which is generated by the system.
quantity numeric Identifies the quantity moved. For serialised items this must always be one.
facility_id_from numeric Links to an entry on the FACILITY table. This identifies the starting location for this movement.
container_id_from numeric Links to an entry on the CONTAINER table. This identifies the starting location for this movement.
item_issuance_id numeric Links to an entry on the ITEM_ISSUANCE table.
inventory_item_id_to numeric This identifies the inventory_item_id which received this movement.
facility_id_to numeric Links to an entry on the FACILITY table. This identifies the ending location for this movement.
container_id_to numeric Links to an entry on the CONTAINER table. This identifies the ending location for this movement.
item_receipt_id numeric Links to an entry on the ITEM_RECEIPT table.
work_effort_id numeric Optional. Links to an entry on the WORK_EFFORT_COMPONENT table. This identifies the work effort for this movement, and is required for movements to staging locations.
work_effort_seq_no numeric Optional. Links to an entry on the WORK_EFFORT_COMPONENT table. This identifies the work effort component for this movement, and is required for movements to staging locations.

Stock Checks

A stock check is when inventory items are inspected to ensure that the quantity available agrees with the on-hand quantity recorded by the system. If there is a difference between the two counts it should be recorded as a VARIANCE so that the on-hand quantity can be kept up-to-date. As well as a simple counting error, items may exist but are not available for use because they are damaged or defective.

Inspections may be scheduled at each FACILITY at regular intervals, and each inspection may include just a selection of items instead of all items. The item selection is controlled by a stockcheck cycle number.

Figure 8 - Stock Checks

inventory-07 (2K)

STOCKCHECK_HDR table

This indicates when a stock check is to take place at a particular location or FACILITY. When a new record is created the cycle number is incremented, and all those INVENTORY_ITEMs with that number will be added to the list of items to be checked.

FieldTypeDescription
stockcheck_id numeric Identity,automatically generated by the system.
facility_id numeric Links to an entry on the FACILITY table.
stockcheck_cycle_no numeric Required. This will default to 1 greater than the previous event at this facility. If it exceeds the Number of Stockcheck Cycles on the Inventory Control Data it will cycle back to 1.
stockcheck_date date Required. The date on which this inventory count is scheduled to take place.

STOCKCHECK_DTL table

This identifies which items are to be inspected during a particular stock check event.

FieldTypeDescription
stockcheck_id numeric Links to an entry on the STOCKCHECK_HDR table.
stockcheck_seq_no numeric Sequence number which is generated by the system.
party_id string Links to an entry on the INVENTORY_ITEM table.
product_id string Links to an entry on the INVENTORY_ITEM table.
inventory_item_id numeric Links to an entry on the INVENTORY_ITEM table.
serial_no string Display only. Copied from the INVENTORY_ITEM record.
qty_on_hand numeric Display only. The expected quantity.
quantity_found numeric The quantity counted. If it is not the same as qty_on_hand then an ITEM_VARIANCE should be generated.

Facilities and Containers

Facilities are locations, such as depots, buildings or rooms, where inventory is stored. Within a facility stock (one or more INVENTORY_ITEMs) is stored in containers. Facilities are immovable and fixed to a single location while containers are potentially movable. Each installation must have at least one facility, and that facility must have at least one container. A small organisation may have only a single stock room where goods are stored in boxes, so the facility will be of type 'room' and called 'stock room' (or whatever) with one or more containers of type 'box' (or whatever).

In larger organisations there may be different rooms in different buildings, so in this case there will be two facility types, one called 'building' and another called 'room'. By defining the 'room' type as a child of the 'building' type you are effectively creating a hierarchy of facilities within facilities. This means that when you create a facility of type 'room' you must link it with a facility of type 'building'. In this relationship 'building' is called the senior or parent and 'room' is called the junior or child. If the organisation has different buildings located at different postal addresses then it can create a facility type of 'depot' (or whatever) and change the 'building' type to be a child of the 'depot' type. This means that when you create a facility of type 'building' you must link it with a facility of type 'depot'. By doing this you have created a facility hierarchy of depot -> building -> room ('depot' contains 'building' contains 'room'). You may create facility types of your choosing and define hierarchies of your choosing.

Each container must be located within a facility, and if you have defined a facility hierarchy then you can only use a facility at the bottom of the hierarchy. Using the example above you may place a container in a 'room' but not a 'building' or 'depot'.

It is also possible to create hierarchies of containers in those circumstances where you have large containers containing smaller containers. For example, a 'room' may contain cabinets, and each cabinet contains a number of shelves, and on each shelf there is a number of boxes, so you will create a container hierarchy of cabinet -> shelf -> box ('cabinet' contains 'shelf' contains 'box'). You may create container types of your choosing and define hierarchies of your choosing.

When storing an INVENTORY_ITEM in a container that container must always be at the bottom of any hierarchy. Using the example above you may place inventory in a 'box' but not a 'cabinet' or 'shelf'.

Figure 9 - Facilities and Containers

inventory-08 (2K)

FACILITY_TYPE table

This identifies the different types of facility that may exist within an organisation.

FieldTypeDescription
facility_type_id numeric Identity number which is automatically generated by the system.
facility_type_name string Short name.
facility_type_desc string Optional. Long description.
facility_type_id_snr numeric Optional. This is used to enforce integrity checks when facilities exist in a hierarchy of facility types. For example, if you have a hierarchy of Depot -> Building -> Room then the following rules apply:
  • a facility of type 'building' must be the child of a facility of type 'depot'
  • a facility of type 'room' must be the child of a facility of type 'building'

If a hierarchy like this is defined then a CONTAINER can only be linked with a facility at the bottom of the hierarchy (which would be 'room' in the above example).

Here are some examples:

FACILITY table

This identifies all the locations where inventory may be stored.

FieldTypeDescription
facility_id numeric Identity number which is automatically generated by the system.
facility_name string Short name.
facility_desc string Optional. Long description.
facility_type_id numeric Links to an entry on the FACILITY_TYPE table.
is_bonded boolean Identifies whether the facility is bonded, where the goods (such as tobacco or alcohol) it contains are liable for duty as soon as they are removed.
facility_id_snr numeric Links to another (senior or parent) entry on the FACILITY table. This can be used to indicate that this facility is located within another greater facility (ie: a facility hierarchy). The facility_type_id of the parent facility must be as defined in the hierarchy described on the FACILITY_TYPE table.
calendar_id numeric Links to an entry on the CALENDAR_HEADER table.
emission_factor_id numeric Optional. The emission factors associated with this FACILITY. Links to an entry on the EMISSION_FACTOR table. Required for the purpose of estimating Scope 2 GHG emissions attributable to this FACILITY.

CONTAINER_TYPE table

This identifies the various types of container that may exist within a facility.

FieldTypeDescription
container_type_id numeric Identity number which is automatically generated by the system
container_type_name string Short name.
container_type_desc string Optional. Long description.
container_type_id_snr numeric Optional. This is used to enforce integrity checks when containers exist in a hierarchy of container types. For example, if you have a hierarchy of Cabinet -> Shelf -> Box then the following rules apply:
  • a facility of type 'shelf' must be the child of a facility of type 'cabinet'
  • a facility of type 'box' must be the child of a facility of type 'shelf'

If a hierarchy like this is defined then a INVENTORY_ITEM can only be stored in a container at the bottom of the hierarchy (which would be 'box' in the above example).

Here are some examples:

CONTAINER table

This identifies all the different containers that exist within each facility. An entry with the type of "unspecified" is used when a facility does not have different containers.

FieldTypeDescription
container_id numeric Identity number which is automatically generated by the system.
container_name string Short name.
container_desc string Optional. Long description.
container_type_id numeric Links to an entry on the CONTAINER_TYPE table.
facility_id numeric Links to an entry on the FACILITY table.
container_id_snr numeric Links to another (senior or parent) entry on the CONTAINER table. This can be used to indicate that this container is located within another greater container (ie: a container hierarchy). The container_type_id of the parent container must be as defined in the hierarchy described on the CONTAINER_TYPE table.
party_id numeric Links to an entry on the PARTY table. This indicates the owner of the contents with this container. This defaults to the user's functional unit.

Container Movements

Instead of moving individual items from one location to another it may be better to move the entire contents of a container. For example, a container may contain all the parts which are needed for a run on the assembly line, so the whole container is moved from storage to the assembly area and individual items are picked from the container as and when required.

Figure 10 - Container Movements

inventory-14 (1K)

CONTAINER_MOVEMENT table

This keeps a record of each time container is moved from one facility or parent container to another.

FieldTypeDescription
container_id number Links to an entry on the CONTAINER table.
seq_no numeric Sequence number which is generated by the system.
facility_id_from numeric Links to an entry on the FACILITY table. This identifies the starting location for this movement.
container_id_snr_from numeric Links to an entry on the CONTAINER table. This identifies the starting parent container for this movement.
facility_id_to numeric Links to an entry on the FACILITY table. This identifies the ending location for this movement.
container_id_snr_to numeric Links to an entry on the CONTAINER table. This identifies the ending parent container for this movement.

Facility Contact Mechanism

As well as being tied to a particular PARTY, such as a person's personal cellular telephone number, a CONTACT_MECHANISM may be tied to a particular location or FACILITY. These physical facilities are not postal addresses or parties (although they are associated with postal addresses and parties), and another entity is needed to describe them.

Figure 11 - Facility Contact Mechanism

inventory-09 (2K)

FACILITY_CONTACT_MECHANISM table

This links a particular contact mechanism with a particular facility. Note a facility can have several contact mechanisms, and a contact mechanism may be shared by more than one facility. For example, several facilities may be grouped together within the same postal address.

FieldTypeDescription
facility_id numeric Links to an entry on the FACILITY table.
contact_mechanism_id numeric Links to an entry on the CONTACT_MECHANISM table.
seq_no numeric Sequence number which is automatically generated by the system.
start_date date The start date for this entry.
end_date date Optional. Indicates the end date for this entry. Blank signifies an unspecified date in the future.
extension string Optional. Used as an extension to a telephone number.
contact_notes string Optional text.

Facility Role

Each facility may involve one or more parties, thus the FACILITY_ROLE entity maintains which PARTYs are playing what FACILITY_ROLE_TYPEs for what FACILITIES

Figure 12 - Facility Role

inventory-10 (2K)

FACILITY_ROLE_TYPE table

This identifies the different types of role that a party may play with a facility.

FieldTypeDescription
facility_role_type_id string Identity
facility_role_type_name string Short name
facility_role_type_desc string Optional. Long description

Here are some examples:

FACILITY_ROLE table

This identifies where a party has a role with a facility. Note that a facility can be linked to several parties, and a party can be linked to several facilities.

FieldTypeDescription
party_id numeric Links to an entry on the PARTY table.
facility_id numeric Links to an entry on the FACILITY table.
facility_role_type_id string Links to an entry on the FACILITY_ROLE_TYPE table.

Reorder Guideline

This provides information on how best to reorder products. Each record identifies when replenishment is required, the quantity required, and perhaps the supplier or a choice of suppliers. These may also vary based on whether the need is for a particular geographic area (such as for a certain state), or a specific facility.

Figure 13 - Reorder Guideline

inventory-11 (2K)

REORDER_GUIDELINE table

This holds the reorder levels and reorder quantities for each inventory item. There may be several entries with varying options.

FieldTypeDescription
product_id string Links to an entry on the PRODUCT table.
seq_no numeric Identity number which is automatically generated by the system.
party_id numeric Optional. Links to an entry on the PARTY table. This indicates the owner of this item.
facility_id numeric Optional. Links to an entry on the FACILITY table.
revision_id string Links to an entry on the FACILITY table.
Must be empty if is_revision_controlled on the PRODUCT table is set to 'No'.
Must not be empty if is_revision_controlled PRODUCT table is set to 'Yes'.
reorder_quantity numeric Indicates the quantity required to bring inventory up to a safe level.
reorder_level numeric When the on-hand quantity falls below this level this will trigger a replenishment request.
start_date date The start date for this entry.
end_date date Optional. Indicates the end date for this entry. Blank signifies an unspecified date in the future.

Pick Lists

When an order is approved items will need to be picked from inventory before they can be shipped to the customer. This may involve different people at different stages:

  1. Generate a pick list to identify which items need to be picked. Stock levels are not decremented at this point as this stage indicates "to be picked", not "has been picked".
  2. Match each picklist item with an INVENTORY_ITEM to check that the required quantities are available. Note that a product may be stored in more than one FACILITY, or more than one CONTAINER within a facility. Stock may also be reserved at this point, or a reservation may have been made at the order entry stage.
  3. When items are picked from inventory an ITEM_ISSUANCE record is created and any RESERVED_ITEM record deleted. This will decrease the on-hand quantity for that item, and, if this falls below the reorder_level on the REORDER_GUIDELINE record, will trigger a replenishment request.
  4. After being picked the items can be put into packages ready to be shipped to the customer.

Figure 14 - Pick Lists

inventory-12 (2K)

PICKLIST_HDR table

This links a particular picklist number with a particular order.

FieldTypeDescription
picklist_id numeric Identity number which is automatically generated by the system.
order_type string Links to an entry on the ORDER_HEADER table.
order_id numeric Links to an entry on the ORDER_HEADER table.

PICKLIST_DTL table

This identifies all the products which need to be picked from inventory to satisfy a particular order.

FieldTypeDescription
picklist_id numeric Links to an entry on the PICKLIST_HDR table.
order_type string Links to an entry on the ORDER_ITEM table.
order_id numeric Links to an entry on the ORDER_ITEM table.
order_item_seq_no numeric Links to an entry on the ORDER_ITEM table.
product_id string Links to an entry on the PRODUCT table. This may be different from the product_id that was ordered.
quantity_ordered numeric This is the quantity that was ordered.
quantity_issued numeric This is the quantity that was issued from inventory. This value will also appear on an ITEM_ISSUANCE record.

Inventory Control Data

This information exists within a shared table in the MENU database and not a separate table within the INVENTORY database. It holds values which can be varied to suit that particular installation. The current values are as follows:

NameTypeDescription
No. of Stockcheck Cycles numeric This indicates the maximum number of cycles. Each time a stock check is performed at a FACILITY the cycle number is incremented, and those INVENTORY_ITEMs which have been given that particular cycle number will be included in the list of items which are to be checked.
Lot Size numeric This indicates the number of products that may be contained within each LOT. Possible values are:
  • No Lot Tracking
  • Single - No more than one
  • Multiple - More than one
In Quarantine Status string Optional. If goods which are tracked by lot or serial number are required to be quarantined before being placed into available inventory then a suitable entry needs to be added to the INVENTORY_ITEM_STATUS table and identified here. This will allow the goods to be inspected before they can be picked and shipped. Note that items with this status can still be reserved. Once these items have been inspected their status should be changed to either 'OK' or something other than 'OK'.
journal_desc_po_receipt string Description used when constructing journal entries from inventory item receipt transactions.
journal_desc_conversion string Description used when constructing journal entries from conversion transactions.
book_ylv_to_current_income boolean A YES/NO switch with an initial value of NO. Indicates if purchase price variances (PPV), or yield loss variances arising from conversions, are booked to current net income (YES) or not (NO). If YES then PPV, and yield loss variances arising from conversions, will affect an income or expense account having the ppv or ylv account usage respectively; otherwise they will affect a balance sheet account having the inventory_reserve account usage
cost_revaluation_reason numeric Links to an entry on the INVENTORY_VARIANCE_REASON table. This identifies the inventory variance reason to use for cost revaluations.

Date created: 16th July 2007

Amendment history:

30 Mar 2024 Updated the FACILITY table to include the emission_factor_id column.
28 Oct 2023 Updated the REORDER_GUIDELINE table to remove the area_id column.
Updated the REORDER_GUIDELINE table to add the revision_id column.
13 Oct 2023 Updated the INVENTORY_ITEM_MOVEMENT table to include extra columns required for staging materials comprising a Work Effort bill of material (BOM).
Updated the ITEM_ISSUANCE table to include extra columns required for staging materials comprising a Work Effort bill of material (BOM).
12 Mar 2022 Updated the INVENTORY_ITEM_VARIANCE table to include extra columns required for recording product cost revaluations and posting them to the General Ledger.
Updated the Inventory Control Data to include the cost_revaluation_reason column.
17 Feb 2022 Updated the ITEM_ISSUANCE table to include extra columns required for posting to the General Ledger.
Updated the ITEM_RECEIPT table to include extra columns required for posting to the General Ledger.
Updated the INVENTORY_ITEM_VARIANCE table to include extra columns required for posting to the General Ledger.
Updated the Inventory Control Data to include the journal_desc_po_receipt, journal_desc_conversion and book_ylv_to_current_income columns.
23 Apr 2021 Updated the ITEM_RECEIPT table to include the order_type_svc, order_id_svc and order_item_seq_no_svc columns.
11 Apr 2021 Updated the INVENTORY_ITEM table to include the inv_item_status_id column.
11 Aug 2019 Updated the INVENTORY_ITEM_MOVEMENT table to include the item_issuance_id and item_receipt_id columns.
05 Feb 2019 Updated the INVENTORY_ITEM table to include the unit_cost_actual column.
Updated the ITEM_RECEIPT table to include the unit_cost_actual column.
Updated the LOT_PRODUCT table to include the unit_cost_actual column.
26 Jan 2019 Updated the CONTAINER table to include the party_id column.
Updated the INVENTORY_ITEM table to include the party_id column.
Updated the INVENTORY_ITEM_FEATURE table to include the party_id column.
Updated the INVENTORY_ITEM_FEATURE_CUSTOMISATION table to include the party_id column.
Updated the INVENTORY_ITEM_MOVEMENT table to include the party_id column.
Updated the INVENTORY_ITEM_PRICE table to include the party_id column.
Updated the INVENTORY_ITEM_STATUS_HIST table to include the party_id column.
Updated the INVENTORY_ITEM_VARIANCE table to include the party_id column.
Updated the ITEM_ISSUANCE table to include the party_id column.
Updated the ITEM_RECEIPT table to include the party_id column.
Updated the STOCKCHECK_DTL table to include the party_id column.
29 Sep 2018 Updated the ITEM_ISSUANCE and ITEM_RECEIPT tables by removing the serial_no column as this can be retrieved from the associated INVENTORY_ITEM table.
28 Jun 2018 Updated the LOT table by removing the quantity and expiry_date columns.
Updated the LOT table by adding the product_count, manufacturer_id, lot_id_external and lot_source columns.
Added the LOT_PRODUCT table.
17 Jun 2017 Added the INVENTORY_ITEM_MOVEMENT table.
Added the CONTAINER_MOVEMENT table.
Updated the CONTAINER table to include the container_name column.
Updated the FACILITY table to include the facility_desc column.
3rd Apr 2017 Updated the INVENTORY_ITEM_FEATURE table to remove the feature_customisation column.
Added the INVENTORY_ITEM_FEATURE_CUSTOMISATION table
25 May 2016 Amended the ITEM_RECEIPT table by adding the item_receipt_id column as the new primary key, and deleting the seq_no column.
Added the ITEM_RECEIPT_ISSUANCE_LINK table to provides a link between ITEM_RECEIPT and ITEM_ISSUANCE.
19 May 2016 Amended the LOT table to change the manuf_date column from DATE to DATETIME.
Amended the LOT table by adding the party_id, lot_id_external and lot_source columns.
11 May 2015 Added the revision_id column to the INVENTORY_ITEM table.
07 Jul 2014 Added the calendar_id column to the FACILITY table.
10 Jun 2014 Added the facility_type_id_snr column to the FACILITY_TYPE table.
Added the container_type_id_snr column to the CONTAINER_TYPE table.
Added the container_id_snr column to the CONTAINER table.
09 Dec 2008 Moved the RESERVED_ITEM table to the ORDER database.
20 Nov 2008 Added the INVENTORY_ITEM_PRICE table.
26 Aug 2008 Added the RESERVED_ITEM table.
16 Jul 2008 Added the product_id column to the PICKLIST_DTL table.
08 Jul 2008 Added the INVENTORY_ITEM_FEATURE table.
20 Mar 2008 Added the sort_seq column to the INVENTORY_ITEM_STATUS table.
13 Oct 2007 Moved the PREFERENCE_TYPE, RATING_TYPE and PRODUCT_SUPPLIER tables to the PRODUCT database.

Copyright © 1999-2024 by Geoprise Technologies Licensing, All Rights Reserved.