GM-X ERP for Blockchain - The PRODUCT subsystem

By Tony Marston

6th August 2007
Amended 30th March 2024

Introduction
1. Products
2. Product Categories
3. Product Identification
4. Product Features
5. Units of Measure
6. Product Pricing and Price Components
a Base Prices
b Order Adjustments
c Item Adjustments
d Feature Prices
7. Product Supplier
8. Product Extra Values
9. Compatible Products
10. Product Components (BOM) and Revisions
11. Phantom Products
12. Product Costing
13. Emission Factors
14. Product Controls
Amendment History

Introduction

Products are defined as goods or services that were, are, or will be sold by the enterprise. Goods are products that are more tangible in nature and generally created in advance for sale. Services are products that involve the use of parties' time and are less tangible in nature. Every organisation needs to know a great deal of product information on a regular basis, such as the following:

Just as the PARTY model stores common information about parties independent of their roles, the product model stores common product information regardless of whose products they are. This product model is therefore more flexible, stable and understandable because product information is modeled only once, regardless of whether it is the enterprise's products, competitor's products, or supplier's products. This document models information on the following product areas:

Product inventory is described in a separate document.


Products

Products include both tangible offerings, which are called GOODs, and non-tangible offerings, which are called SERVICEs. GOODs are physical objects which can be stored, packed and shipped, such as pens, furniture and equipment, whereas SERVICEs are for the sale of people's time or expertise, such as consulting services, management or legal services.

Figure 1 - Products

product-01 (1K)

Table 1 - Relationships with other database tables

Subsystem/Database Table Foreign Key
Fixed Assets ASSET_SERVICE_TYPE table product_id_kit
Fixed Assets ASSET_SERVICE_TYPE table product_id_service
Inventory INVENTORY_ITEM table product_id
Inventory INVENTORY_ITEM_MOVEMENT table product_id
Inventory INVENTORY_ITEM_STATUS_HIST table product_id
Inventory INVENTORY_ITEM_VARIANCE table product_id
Inventory ITEM_ISSUANCE table product_id
Inventory ITEM_RECEIPT table product_id
Inventory LOT_PRODUCT table product_id
Inventory PICKLIST_DTL table product_id
Inventory REORDER_GUIDELINE table product_id
Inventory STOCKCHECK_DTL table product_id
Invoice INVOICE_ADJUSTMENT table product_id_free
Invoice INVOICE_ITEM table product_id
Invoice INVOICE_ITEM_ADJUSTMENT table product_id_free
Order BASKET_ITEM table product_id
Order NON_CONFORMANCE_REPORT table product_id
Order ORDER_ADJUSTMENT table product_id_free
Order ORDER_ITEM table product_id
Order ORDER_ITEM_ADJUSTMENT table product_id_free
Order RESERVED_ITEM table product_id
Request QUOTE_ITEM table product_id
Request REQUEST_ITEM table product_id
Request REQUIREMENT table product_id
Request REQUIREMENT_COMPONENT table product_id
Shipment DROP_SHIPMENT_ITEM table product_id
Shipment PACKAGE_IN_CONTENT table product_id
Shipment PACKAGE_OUT_CONTENT table product_id
Shipment SPLR_PACKAGE_CONTENT table product_id
Work-Effort WORK_EFFORT_COMPONENT table product_id

PRODUCT table

This holds the details of every product, good or service, which is available in the system.

When a product is first created it will have its CATEGORY CLASS set to 'NOTFORSALE'. This entry should not be removed until all data, such as applicable features and price components, have been established so that new products are not offered for sale prematurely.

FieldTypeDescription
product_id string Identity string which is defined manually.
product_name string Short Name
product_desc string Optional. Long Description
date_intro date Identifies when this product was first available for sale.
end_date_sales date Optional. Identifies when this product is no longer available for sale. Blank signifies an unspecified date in the future.
end_date_support date Optional. Identifies when this product will no longer be supported by the manufacturer.
prod_comment string Optional. A comment associated with this product.
product_subtype string Either GOOD, SERVICE or PHANTOM. Goods are physical objects which can be stored, packed and shipped. Services are for the sale of people's time or expertise. A Phantom product never actually exists but may represent a group of products for planning purposes, or a modular bill of material for product lifecycle management purposes (see Phantom Products for further details).
inventory_type string This identifies if instances of this product will need to be tracked in any way. Allowable values are:
  • No Tracking
  • Track by Serial No
  • Track by Lot Id
  • Track by Serial No and Lot Id

For serialised products there will be a separate INVENTORY_ITEM with a quantity of 1 for each serial_no. For non-serialised products the quantity can be greater than 1.

For Lot Tracking there will be an entry on the LOT_PRODUCT table to provide the details for each product in a particular LOT.

is_revision_controlled boolean If set to 'Yes' then entries must exist on the PRODUCT_REVISION table.
uom_id string Optional. Links to the UNIT_OF_MEASURE table.
manufacturer_id number Optional. Links to the PARTY table. It identifies the manufacturer of this product.
lead_time number Optional. This is the lead time required for manufacturing or assembly. It is added to the order date to give an estimated delivery date.
shelf_life_days number Optional. This is used in conjunction with lot tracking. When a LOT is produced this value is added to the lot's manuf_date in order to calculate the expiry_date for this LOT_PRODUCT. If this value is zero then there will be no expiry_date.
product_image string Optional. The name of a file on disk which contains a picture of this product.
fuel_type string Optional. Signifies that this PRODUCT is a fuel if not NULL, in which case the allowable values are:
  • 0 = Other
  • 1 = Solid Fossil - Anthracite
  • 2 = Solid Fossil - Bitumen
  • 3 = Solid Fossil - Brown coal briquettes
  • 4 = Solid Fossil - Coal tar
  • 5 = Solid Fossil - Coke oven coke
  • 6 = Solid Fossil - Coking coal
  • 7 = Solid Fossil - Gas coke
  • 8 = Solid Fossil - Lignite
  • 9 = Solid Fossil - Lignite coke
  • 10 = Solid Fossil - Municipal waste (Non biomass fraction)
  • 11 = Solid Fossil - Other bituminous coal
  • 12 = Solid Fossil - Paraffin waxes
  • 13 = Solid Fossil - Patent fuel
  • 14 = Solid Fossil - Petroleum coke
  • 15 = Solid Fossil - Sub bituminous coal
  • 16 = Liquid Fossil - Aviation gasoline
  • 17 = Liquid Fossil - Crude oil
  • 18 = Liquid Fossil - Gas/Diesel oil
  • 19 = Liquid Fossil - Jet gasoline
  • 20 = Liquid Fossil - Jet kerosene
  • 21 = Liquid Fossil - Lubricants
  • 22 = Liquid Fossil - Motor gasoline
  • 23 = Liquid Fossil - Naphtha
  • 24 = Liquid Fossil - Natural gas liquids
  • 25 = Liquid Fossil - Oil shale and tar sands
  • 26 = Liquid Fossil - Orimulsion
  • 27 = Liquid Fossil - Other kerosene
  • 28 = Liquid Fossil - Refinery feedstocks
  • 29 = Liquid Fossil - Residual fuel oil
  • 30 = Liquid Fossil - Shale oil
  • 31 = Liquid Fossil - Waste oils
  • 32 = Liquid Fossil - White Spirit/SBP
  • 33 = Gaseous Fossil - Blast furnace gas
  • 34 = Gaseous Fossil - Coke oven gas
  • 35 = Gaseous Fossil - Ethane
  • 36 = Gaseous Fossil - Gas works gas
  • 37 = Gaseous Fossil - Liquified Petroleum Gases
  • 38 = Gaseous Fossil - Natural gas
  • 39 = Gaseous Fossil - Oxygen steel furnace gas
  • 40 = Gaseous Fossil - Refinery gas
  • 41 = Biomass - Biodiesels
  • 42 = Biomass - Biogasoline
  • 43 = Biomass - Charcoal
  • 44 = Biomass - Landfill gas
  • 45 = Biomass - Municipal waste (Biomass fraction)
  • 46 = Biomass - Other biogas
  • 47 = Biomass - Other liquid biofuels
  • 48 = Biomass - Other primary solid biomass fuels
  • 49 = Biomass - Peat
  • 50 = Biomass - Sludge gas
  • 51 = Biomass - Sulphite lyes (Black liquor)
  • 52 = Biomass - Wood or Wood waste
emission_factor_id number Optional. The emission factors associated with this PRODUCT. Links to an entry on the EMISSION_FACTOR table.
heating_value_basis string Optional. The basis for measurement of fuel consumption data denominated in energy units. Allowable values are:
  • 'L' = Lower heating values (LHV or Net Calorific Values); typically (but not always) used outside the United States and Canada
  • 'H' = Higher heating values (HHV or Gross Calorific Values); typically (but not always) used in the United States and Canada

PRODUCT_SEO table

This holds SEO (Search Engine Optimisation) data for each product which may be used in a public-facing front-end website.

FieldTypeDescription
product_id string Links to an entry on the PRODUCT table.
product_id_url string Optional. An alternative unique identity that can be used in URL strings.
seo_title string Optional. May be used for search engine optimisation with front-end web sites.
seo_heading string Optional. May be used for search engine optimisation with front-end web sites.
seo_desc string Optional. May be used for search engine optimisation with front-end web sites.
seo_keywords string Optional. May be used for search engine optimisation with front-end web sites.
seo_image_alt string Optional. May be used for search engine optimisation with front-end web sites.

Product Categories

The classification of products is a key aspect of maintaining product information. Products are often classified in many ways - by product line, by model, by product grade, by industry segments, or by various other product categories.

Figure 2 - Product Categories

product-02 (3K)

PROD_CAT_LEVEL table

This can be used to organise product categories into groups or levels, so that all those which belong in a particular group or level can be easily identified. This may be used, for example, when products displayed in a web front-end (which is separate from the Radicore back-end) need to be arranged into sections, sub-sections, et cetera.

FieldTypeDescription
cat_level_id string Identity
cat_level_desc string Description

Here are some examples:

The PROD_CAT_ROLLUP table should be used to identify category hierarchies, such as which "categories" belong in which "section", and which "sub-categories" belong in which "category".

PRODUCT_CATEGORY table

This holds all the possible classifications or categories which may be applied to any product.

FieldTypeDescription
prod_cat_id string Identity
prod_cat_name string Category Name
prod_cat_desc string Optional. Long Description.
cat_level_id string Optional. Links to an entry on the PROD_CAT_LEVEL table.
sort_seq numeric Optional. Used with cat_level_id to provide a sort sequence.
product_usage string Optional.
product_industry string Optional.
product_materials string Optional.
category_image string Optional. The path to an image file.

Here are some examples:

Category IdName
COMPUTER Computer supplies
OFFICE Office supplies
PENS Pens
PAPER Paper
FORMS Forms
CONSULTANCY Consultancy services
VAT-E VAT Exempt
VAT-R Reduced Rate VAT
VAT-S Standard Rate VAT
VAT-Z Zero Rated VAT
NOTFORSALE This product is not for sale. Products with this entry on the PROD_CAT_CLASS table should therefore be excluded from any list of sellable products. This is automatically added to new products and should only be removed when all the product's data has been finalised.

NOTE: If there are several different reasons why a product is not for sale then additional categories can be created as 'NOTFORSALE<suffix>' where <suffix> can be any combination of letters and/or numbers.

PRODUCT_CATEGORY_SEO table

This holds SEO (Search Engine Optimisation) data for each product category which may be used in a public-facing front-end website.

FieldTypeDescription
prod_cat_id string Links to an entry on the PRODUCT_CATEGORY table.
prod_cat_id_url string Optional. An alternative unique identity that can be used in URL strings.
filter_image string Optional. The path to an image file.
promo_image string Optional. The path to an image file.
product_example_image string Optional. The path to an image file.
banner_title string Optional. This text may be used with front-end web sites.
banner_text string Optional. This text may be used with front-end web sites.
banner_text_upper string Optional. This text may be used with front-end web sites.
seo_title string Optional. May be used for search engine optimisation with front-end web sites.
seo_heading string Optional. May be used for search engine optimisation with front-end web sites.
seo_desc string Optional. May be used for search engine optimisation with front-end web sites.
seo_keywords string Optional. May be used for search engine optimisation with front-end web sites.
seo_image_alt string Optional. Alternative text for the category image.

PRODUCT_CATEGORY_PARTY table

This table allows product categories to be linked with parties. It can be used, for example, to identify which suppliers can provide products in a certain category.

FieldTypeDescription
prod_cat_id string Links to an entry on the PRODUCT_CATEGORY table.
party_id number Links to an entry on the PARTY table.

PROD_CAT_CLASS table

This is the PRODUCT CATEGORY CLASSIFICATION table. It identifies which product categories apply to which products. A product can have any number of these classification entries. Each entry is only valid for a particular time period, so it is possible to have different entries for different dates.

Note that it is possible to categorise a product under multiple categories, but this could produce misleading results when performing certain queries. For example, if there were a sales analysis report by category, the total sales amount would be overstated as some product sales would be counted numerous times for each of their categories. The primary_flag can be used to ensure that a product's details are included for one and only one category.

FieldTypeDescription
product_id string Links to an entry on the PRODUCT table.
prod_cat_id string Links to an entry on the PRODUCT_CATEGORY table.
seq_no number A unique number assigned by the system.
primary_flag boolean A YES/NO flag which indicates if this is the primary classification for this product. Note that only one classification per product should be marked as primary.
second_flag boolean Optional. A YES/NO flag which indicates if this is the secondary classification for this product. Note that only one classification per product should be marked as secondary.
third_flag boolean Optional. A YES/NO flag which indicates if this is the tertiary classification for this product. Note that only one classification per product should be marked as tertiary.
pcc_comment string Optional. A comment on this entry.
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.

Here are some examples:

Product IdProduct DescriptionProduct CategoryPrimary?
PAP192 Johnson fine grade 8½ by 11 bond paper Office supplies Yes
Paper No
PEN202 Goldstein Elite Pen Office supplies Yes
Pens No
DSK401 Jerry's box of 3½ inch diskettes Office supplies No
Computer supplies Yes
FRMCHFA1500 Preprinted forms for insurance claims Forms Yes
Insurance No

PROD_CAT_ROLLUP table

This is the PRODUCT CATEGORY ROLLUP table. It is a recursive entity which allows a parent/senior category to be linked with, or divided into, any number of child/junior categories, and each of those child categories can have children of their own. This produces a hierarchy of parent-to-child/senior-to-junior categories which may go down to any number of levels. While it is possible for a parent/senior category to have any number of child/junior categories, it is not possible for a child/junior category to be linked to more than one parent/senior within the same hierarchy. If it is necessary for a child/junior category to be linked to more than one parent/senior category then you must specify a different value for hierarchy_id. This will enable multiple hierarchies to be defined, and to be able to differentiate between one hierarchy and another.

FieldTypeDescription
prod_cat_id_snr string Links to the senior/parent entry on the PRODUCT_CATEGORY table.
prod_cat_id_jnr string Links to the junior/child entry on the PRODUCT_CATEGORY table.
hierarchy_id string Default value is 'default'. This allows a junior category to be linked to more than one senior category, thus producing a different hierarchy.

Here are some examples:

Senior CategoryJunior Category
Office supplies Pens
Office supplies Paper
Computer supplies Computer hardware
Computer supplies Computer software

This information allows the product search screen to be given a broad category, such as "office supplies", which will automatically include all those products which belong to a child category, or a child category's children down to any number of levels.

PROD_CAT_EXTRA_NAMES table

This identifies the names of extra fields which can be held for each product category.

FieldTypeDescription
extra_id string Identity
extra_name string Short Name
extra_desc string Optional. Long Description
extra_type string Validation type. Allowable values are:
  • string (the default)
  • boolean
  • date
  • number(P) - a number with P digits
  • number(P,S) - a number with P digits, including S decimals

PROD_CAT_EXTRA_VALUES table

This holds the values for any extra fields for each product category.

FieldTypeDescription
prod_cat_id string Links to an entry on the PRODUCT_CATEGORY table.
extra_id string Links to an entry on the PROD_CAT_EXTRA_NAMES table.
extra_value string This holds the value for this Extra Name with this Product Category.

Product Identification

Goods may have various ids that are used as a standard means of identification. A single code may uniquely identify goods and/or services, however, some goods may have more than one means of identification. As well as the internal value, a product acquired from outside may also have a manufacturer's id and/or a universal product code (UPC).

Global Trade Item Numbers (GTINs) are another way of identifying products and their manufacturer using identities which are assigned by a central body. These are commonly used on barcodes.

Figure 3 - Product Identification

product-03 (1K)

PRODUCT_IDENTITY_TYPE table

This holds the various types of identity that can be applied to products.

FieldTypeDescription
identity_type_id string Identity
identity_type_desc string Description

Here are some examples:

TypeDescription
ISBN International Standard Book Number
MANUF Manufacturer's Id
SKU Stock Keeping Unit
UPCA Universal Product Code - America
UPCE Universal Product Code - Europe

PRODUCT_IDENTIFICATION table

For each product this holds all the alternative identification values.

FieldTypeDescription
product_id string Links to an entry on the PRODUCT table.
identity_type_id string Links to an entry on the PRODUCT_IDENTITY_TYPE table.
id_value string Holds the identity value, which must be unique for this identity type.

Here are some examples:

Product IdId TypeId Value
PRODUCT_1234 ISBN 1234-4321-12-34
PRODUCT_1234 MANUF 12345678
PRODUCT_1234 SKU 12-A-34
PRODUCT_1234 UPCA 12-UPCA-34
PRODUCT_1234 UPCE 43-UPCE-21

GTIN table

This holds all the GTINs (Global Trade Item Numbers) used within the application. GTIN values are assigned by a central body and are recognised in all countries. They are normally attached to products as barcodes. They are 14 digit numbers which identify an organisation and a product, which combine to form a 13 digit number, with the last digit being a check digit. This table allows a GTIN to be translated into an internal product code and, for those products which are produced by other organisations, the identity of that organisation.

FieldTypeDescription
gtin_id numeric A unique 14 digit GTIN number.
product_id string Links to an entry on the PRODUCT table.
party_id numeric Optional. Links to an entry on the PARTY table. Entries without a party_id are deemed to belong to the internal organisation.

Product Features

Products may have features that could be called characteristics, options, variations, or modifiers, allowing either customisation of a product or describing the characteristics of a product. By having all this information on a single table instead of a separate table per type it then becomes possible to deal with the situation where something which is a standard feature on one product may be an optional feature on another product.

Not all features are relevant for all products, so the PROD_FEATURE_APPLICABILITY table is used to identify which features apply to which products. If all the features within a category are valid then the PROD_FEATURE_CAT_APPLIC table can be used instead.

Note that features can only be defined for those products with a product_subtype of 'G' (Goods) and not those with a product_subtype of 'S' (Service).

Product features are split into a number of different categories. Features within some categories may require additional measurement information which may be used in the pricing algorithm. For example, in a jewellery application wedding rings have a size which is expressed in millimeters, and diamonds have a size which is expressed in carats. In these cases the label and unit of measure are identified on the PRODUCT_FEATURE_CATEGORY_UOM table while the actual measurement or each feature is held on the PRODUCT_FEATURE_UOM table.

Features within some categories may have customisation options. For example, in a jewellery application a wedding ring may have an engraving option, and when that option is added to a sales order the text which needs to be engraved must also be supplied. In these cases the label and data type are identified on the PRODUCT_FEATURE_CATEGORY_CUSTOMISATION table while the PRODUCT_FEATURE_CUSTOMISATION table is used to identify whether a particular option is required or not. When a sales order is created the relevant customisation text is stored in the ORDER_ITEM_FEATURE_CUSTOMISATION table.

Figure 4 - Product Features

product-04 (4K)

PRODUCT_FEATURE_CATEGORY table

This identifies all the different categories of product feature which may be used in the system. Every feature must belong to one category.

FieldTypeDescription
prod_feature_cat_id string Identity
prod_feature_cat_name string Short Name
prod_feature_cat_desc string Optional. Long Description

Here are some examples:

Category
Billing Feature
Brand
Colour
Dimension
Hardware Feature (optional)
Hardware Feature (standard)
Packaging
Quality
Size
Software Feature (optional)
Software Feature (standard)
Style

Note that there are multiple entries for Software Feature and Hardware Feature, each having a different feature_type as described in PROD_FEATURE_APPLICABILITY. This is because every feature within that category must be displayed with the same HTML control within the feature selection screen, as shown in Figure 4a.

PRODUCT_FEATURE_CATEGORY_UOM table

This identifies where the features within a category have one or more associated measurements. These measurements may be required in the price calculation algorithm.

Note that the actual measurements for individual features are defined on the PROD_FEATURE_UOM table.

FieldTypeDescription
prod_feature_cat_id string Links to an entry on the PRODUCT_FEATURE_CATEGORY table.
seq_no number A sequence number which is automatically assigned by the system.
uom_id string Links to an entry on the UNIT_OF_MEASURE table.
measurement_label string A label which describes the measurement being recorded. This label will appear in the relevant maintenance screens for the value.

Here are some examples:

CategorySeqUOMLabel
ALLOY 1 Kilogram per cubic meter Density
STONE_SIZE 1 Millimeter Width
STONE_SIZE 2 Millimeter Length
ENGRAVE 1 Days Add to Lead Time

PRODUCT_FEATURE_CATEGORY_CUSTOMISATION table

This identifies where a feature within a category which can be added to a product requires some customisation when it is added to a sales order. For example, an engraving service will require the text which is to be engraved.

Note that the actual customised values for individual features are defined on the PROD_FEATURE_CUSTOMISATION table.

FieldTypeDescription
prod_feature_cat_id string Links to an entry on the PRODUCT_FEATURE_CATEGORY table.
seq_no number A sequence number which is automatically assigned by the system.
customisation_type string Identifies how the customisation value should be validated. Allowable values are:
  • string (the default)
  • boolean
  • date
  • number(P) - a number with P digits
  • number(P,S) - a number with P digits, including S decimals
customisation_label string A label which describes the purpose of this customisation.

Here are some examples:

CategorySeqTypeLabel
ENGRAVE 1 String Inside text
ENGRAVE 2 String Outside text
ALLOY 1 number(6,2) Alloy Weight

PRODUCT_FEATURE table

This identifies all the various features, options, and variations that may be applied to any product in the system.

Note also that is possible to define a PRICE_COMPONENT for each product feature, which can be either a surcharge or a discount.

FieldTypeDescription
prod_feature_id number A value that is generated automatically by the system.
prod_feature_name string Short Name
prod_feature_desc string Optional. Long Description
prod_feature_id_url string Optional. An alternative unique identity that can be used in URL strings.
prod_feature_code string Optional. A user-defined unique key.
prod_feature_cat_id string Links to an entry on the PRODUCT_FEATURE_CATEGORY table.
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.

If you change the start_date and/or end_date on a PRODUCT_FEATURE record you may also affect other tables:

Here are some examples:

IdDescriptionCategoryUOMMeasurement
10 Grey Colour    
11 Cream Colour    
12 White Colour    
4 8½ inches wide Dimension Inches 8.5
5 11 inches long Dimension Inches 11
6 3½ inches diameter Dimension Inches 3.5
35 Coarse Grade Quality    
36 Medium Grade Quality    
37 Fine Grade Quality    

Although it is possible to have a single product with a number of different features, such as:

it is also possible to have a separate product with each feature built in, such as:

It is up to the enterprise to decide which level of specificity is required - multiple features or multiple products.

PROD_FEATURE_UOM table

This identifies where a feature has one or more measurements associated with it. These measurements may be required in the price calculations. A measurement value can only be added to a feature if its category has an entry defined on the PRODUCT_FEATURE_CATEGORY_UOM table.

FieldTypeDescription
product_feature_id number Links to an entry on the PRODUCT_FEATURE table.
seq_no number Links to an entry on the PRODUCT_FEATURE_CATEGORY_UOM table.
measurement number A value expressed in the units defined on the associated PRODUCT_FEATURE_CATEGORY_UOM table.

PROD_FEATURE_CUSTOMISATION table

For each entry on the PROD_FEAT_CAT_CUSTOMISATION table this identifies if a customisation value for this label is required or not for a particular feature.

When a sales order which includes an item with this feature is created the actual customisation values will be written to the ORDER_ITEM_FEATURE_CUSTOMISATION table.

FieldTypeDescription
product_feature_id number Links to an entry on the PRODUCT_FEATURE table.
seq_no number Links to an entry on the PRODUCT_FEATURE_CATEGORY_CUSTOMISATION table.
customisation_allowed string Allowable values are:
  • Optional - a value may or may not be supplied
  • Required - a value must be supplied
  • Not Applicable - a value must not be supplied

DEFAULT_FEATURE table

This identifies all the default features which apply to a product.

A product may have a several applicable features within a category, and one of them may be indicated as the default, in which case it will be added automatically to the relevant ORDER_ITEM_FEATURE or INVOICE_ITEM_FEATURE table.

Note that in a category only one feature is allowed to be defined as the default.

FieldTypeDescription
product_id string Links to an entry on the PRODUCT table.
prod_feature_cat_id string Links to an entry on the PRODUCT_FEATURE_CATEGORY table.
prod_feature_id number Links to an entry on the PRODUCT_FEATURE table.

PROD_FEATURE_APPLICABILITY table

This identifies which particular features apply to which particular products, and whether the feature is standard, optional or required. Each entry is only valid for a particular time period, so it is possible to have different entries for different dates.

Note that features can only be defined for those products with a product_subtype of 'G' (Goods) and not those with a product_subtype of 'S' (Service).

FieldTypeDescription
product_id string Links to an entry on the PRODUCT table.
prod_feature_id number Links to an entry on the PRODUCT_FEATURE table.
seq_no number A unique number assigned by the system.
feature_type string Must be one of the following:
  • Standard - part of the standard configuration of the product which cannot be de-selected. Only one feature within a category can be set to 'standard', and that category cannot contain any other features.
  • Optional - optional for this product. There are two types:
    • Optional (one) - zero or one of these options may be selected.
    • Optional (many) - zero or more of these options may be selected.
  • Required (one) - a series of choices (e.g. colour) from which one must be selected.

Note: within any category all the applicable features must have the same feature_type.

If a category contains several features it is possible to identify one as being the default (refer to the DEFAULT_FEATURE table).

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.

Here are some examples:

ProductCategoryFeatureType
Jerry's box of 3.5-inch diskettes Brand Jerry's Standard
Dimension 3½ inch diameter Standard
Colour Red Required
Colour Blue Required
Colour Green Required
Colour Black Required
Goldstein Elite Pen Brand Goldstein Standard
Quality Fine Point Standard
Colour Blue Required
Colour Black Required
Packaging Brown Paper Bag Optional
Packaging Cardboard Box Optional
Packaging Wooden Box Optional
Packaging Presentation Case Optional

Please note that for a product every feature within the same CATEGORY must have the same feature_type. This is because every feature within that category must be displayed in the same way in the product feature selection screen, and it is the feature_type which identifies which HTML control is to be used as follows:

TypeControl
Standard Non-editable text. This option is fixed and cannot be turned off.
Optional (One) Dropdown List - allowing either zero or one option to be selected.
Optional (Many) Checkboxes - allowing either zero or more options to be selected.
Required (one) Radio Buttons (or Dropdown List) - one of these options must be selected.

An example of how each of these types is displayed is shown in Figure 4a below:

Figure 4a - Choosing Product Features

product-feature-001 (3K)

PROD_FEATURE_INTERACTION table

The applicability of certain product features may depend on other features which may have been selected. A pair of features may be dependent on each other, or they may be incompatible with each other.

FieldTypeDescription
product_id string Links to an entry on the PRODUCT table.
prod_feature_id_snr numeric Links to an entry on the PRODUCT_FEATURE table. Identifies the first feature in this pair
prod_feature_id_jnr numeric Links to an entry on the PRODUCT_FEATURE table. Identifies the second feature in this pair.
feature_interaction string Must be one of the following:
  • Dependent - if the 1st feature is selected then the 2nd must also be selected.
  • Incompatible - if the 1st feature is selected then the 2nd must not be selected.

Here are some examples:

ProductFeature 1InteractionFeature 2
Johnson 8.5 by 11 inch bond paper Green Incompatible with Extra Glossy Finish
Johnson 8.5 by 11 inch bond paper White Dependent upon Extra Fine Grade

For this product it means that the Extra Glossy Finish is available with any colour except Green, and Extra Fine Grade is only available if the colour is White.

PROD_FEATURE_CAT_APPLIC table

In some cases it may be that a feature category contains a large number of features, and that all these features apply to a product. Instead of having to allocate the features one by one it is possible to use this table to allocate an entire category. At runtime all the available features within the category will be treated as if they were on the PROD_FEATURE_APPLICABILITY table.

Note that features can only be defined for those products with a product_subtype of 'G' (Goods) and not those with a product_subtype of 'S' (Service).

FieldTypeDescription
product_id string Links to an entry on the PRODUCT table.
prod_feature_cat_id number Links to an entry on the PRODUCT_FEATURE_CATEGORY table.
seq_no number A unique number assigned by the system.
feature_type string Must be one of the following:
  • Standard - part of the standard configuration of the product which cannot be de-selected. Only one feature within a category can be set to 'standard'.
  • Optional - optional for this product. There are two types:
    • Optional (one) - zero or one of these options may be selected.
    • Optional (many) - zero or more of these options may be selected.
  • Required (one) - a series of choices (e.g. colour) from which one must be selected.
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.

PROD_CAT_FEATURE_APPLICABILITY table

This identifies which particular product features apply to which particular product categories. Each entry is only valid for a particular time period, so it is possible to have different entries for different dates. This is used when the front-end website wants a mechanism to show a list of product features for each product category.

FieldTypeDescription
prod_cat_id string Links to an entry on the PRODUCT_CATEGORY table.
prod_feature_id number Links to an entry on the PRODUCT_FEATURE table.
seq_no number A unique number assigned by the system.
is_default boolean Set to TRUE for the entry which is to be shown as the default in any dropdown list.
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.

PROD_FEATURE_COMPONENT table

This identifies where one feature is comprised of a collection of other features. For example, some features may be single metals such as yellow gold, white gold and rose gold, while another feature is comprised of a combination of all three.

FieldTypeDescription
prod_feature_id_snr numeric Links to an entry on the PRODUCT_FEATURE table. Identifies the feature which has components.
prod_feature_id_jnr numeric Links to an entry on the PRODUCT_FEATURE table. Identifies the feature which is a component.
percent numeric Optional. The percentage of which this component forms part of the whole.

Units of Measure

Different products may come in different units, such as 'each', 'litres', 'gallons', 'reams' or whatever, and some people may regard this as just another feature. Most organisations will conclude that if the same type of product is sold in different units of measure then it really is a different product. For instance, a ream of paper is different from a sheet of paper or a box of 5 reams, and each would be regarded as a separate product. It is therefore important for enterprises to be able to determine inventory for products that are identical except for the unit of measure.

Figure 5 - Units of Measure

product-05 (2K)

UOM_CATEGORY table

The various units of measurement can be broken down into specific categories such as weight, length or volume, etc.

FieldTypeDescription
uom_cat_id string Identity
uom_cat_desc string Description

Here are some examples:

UNIT_OF_MEASURE table (and CURRENCY_CODE table)

This also serves as the CURRENCY_CODE table where uom_cat_id = 'CURR'

Each unit of measure has a description and an abbreviation.

FieldTypeDescription
uom_id string Identity.
uom_cat_id string Links to an entry on the UOM_CATEGORY table.
uom_desc string Description
uom_abbrev string Abbreviation
uom_symbol string Currency symbol, as in '£', '¥', '$' and '€'.
scale numeric Identifies how many decimal places are used when expressing quantities in this unit of measure.

Positive numbers indicate the number of places to the right of the decimal point. For example, +3 = 0.001

Negative numbers indicate the number of decimal places to the left of the decimal point. For example, -2 = 100.00

For example, units such as EACH will be expressed as whole numbers without any decimal places. Currencies will usually have two decimal places to cater for dollars and cents, but some low value currencies may be expressed to the nearest 100 or 1,000.

decimal_point string Optional. Only relevant for currencies. This identifies the character to be displayed as the decimal point. Default is '.' (period).
thousands_separator string Optional. Only relevant for currencies. This identifies the character to be displayed as the thousands separator. Default is ',' (comma). To specify a space please use 'nbsp' as this is the code for a non-breaking space.

Here are some examples:

CategoryDescriptionAbbreviation
Area Square Centimeter Sq. Cm.
Square Foot Sq. Ft.
Square Inch Sq. In.
Square Meter Sq. M.
Square Yard Sq. Yd.
Length Centimeter cm
Decimeter dm
Foot Ft
Inch in
Meter m
Millimeter mm
Yard yd
Weight Gram gm
Hundredweight (UK) cwt
Hundredweight (US) cwt
Kilogram Kg
Milligram mg
Ounce Avoirdupois oz
Pound Avoirdupois lb
Stone st
Short Ton (UK) ton
Long Ton (US) ton
Metric Tonne tonne
Misc Each ea
Volume Box of 6 small
Box of 12 medium
Box of 24 large
Currency UK Pounds GBP
US Dollar USD
Euro EUR
Utlisation per Kilogram pkg
per Kilometer pkm
per Mile pm
per Page Hit hit

UOM_CONVERSION table (and EXCHANGE_RATE table)

This provides the means to convert a quantity in one unit of measure to the equivalent quantity in a different unit of measure. For example, there may be several products of "Henry #2 pencils" that have different units of measure such as "each", "small box" and "large box". In many cases organisations need to show total inventories, costs and sales for all of a product regardless of its unit of measure. By defining a common unit of measure, such as "each", and including a conversion factor (e.g. 6 for "small box" and 24 for "large box"), it is possible to determine the total amount of "Henry #2 pencils" there are in inventory and how many have been sold.

The ability to specify a different conversion factor for a different set of dates is intended for use with currencies as the exchange rates will fluctuate over time. For all other units of measure a single factor without an end date will suffice.

FieldTypeDescription
uom_id_from string Links to an entry on the UNIT_OF_MEASURE table.
uom_id_to string Links to an entry on the UNIT_OF_MEASURE table.
seq_no number A unique number assigned by the system.
conversion_factor number When multiplied by the number of FROM units it will provide the equivalent number in the TO units.
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.

Here are some examples:

FROM UOMFactorTO UOM
Centimeter 0.1 Millimeter
10 Decimeter
100 Meter
Meter 0.001 Millimeter
0.01 Centimeter
0.1 Decimeter
Millimeter 10 Centimeter
100 Decimeter
1000 Meter
Foot 0.333333 Yard
12 Inch
Inch 0.027778 Yard
0.083333 Foot
Yard 3 Foot
36 Inch
Box of 6 6 Each
Box of 12 12 Each
Box of 24 24 Each
UK Pounds 1.9733 US Dollar
UK Pounds 1.28025 Euro
UK Pounds 207.976 Japanese Yen

Here are some examples of currency conversions:

FROM UOMTO UOMFactorStart dateEnd date
UK Pounds Euro 1.2714 2008-04-01 2008-05-18
1.2580 2008-05-19 2008-05-26
1.2556 2008-05-27
UK Pounds US Dollar 1.9828 2008-04-01 2008-05-18
1.9488 2008-05-19 2008-05-26
1.9677 2008-05-27

Product Pricing and Price Components

Every organisation seems to have different mechanisms for pricing its products, and it is a challenge to produce a single data model which can cater for all the possible variations.

For most organisations there are several aspects to pricing a product:

The entity is named PRICE_COMPONENT and not PRODUCT_PRICE as it is also used for other circumstances, such as agreement or contract pricing, and for discounts and surcharges (such as government taxes) which are applied at the order level instead of the product/item level.

Figure 6 - Price Components

product-06 (3K)

PRICE_COMPONENT table

This holds all the price components (product prices, discounts and surcharges) which are used in the compilation of sales orders. Each entry is only valid for a particular time period, so it is possible to have different entries for different dates.

Note that this table does not specify any currency codes for monetary values as every price is deemed to be in the currency of the Functional Unit which created it. If a document requires values to be expressed in a foreign currency this is handled differently depending on the subsystem:

Price components can be divided into the following categories:

FieldTypeDescription
price_component_id number Unique identity which is assigned by the system.
price_component_desc string Description
start_date date The start date for this entry.
end_date date Optional. The end date for this entry. Blank signifies an unspecified date in the future.
value numeric Required for a base price, but other components can be specified as either a value or a percentage.
percent numeric Optional. For some price components such a order adjustments or item adjustments this can be used instead of a value.
rounding_method string Required. This is the method used when rounding numbers to the specified number of decimal places. Allowed values are:
  • S = Standard (values of 0.4 and below will be rounded DOWN, 0.5 and above will be rounded UP)
  • D = DOWN (values of 0.1 to 0.9 will always be rounded DOWN)
  • U = UP (values of 0.1 to 0.9 will always be rounded UP)

The default value is 'S' (Standard).

This is designed to be used primarily for tax calculations where the tax authority allows a choice, although it can be used in other circumstances where appropriate.

price_type string Must be one of the following:
  • Base Price
  • Surcharge
  • Discount
  • Early Payment Discount
  • MRP (Manufacturer's Recommended Price)
  • Hire Charge
  • Sample Price
  • Commission
  • Withholding Tax
price_frequency string Must be one of the following:
  • One Time Charge
  • Recurring Charge - for charges that repeat for a unit of time such as per week, month, or quarter. This also requires the input of a unit of measurement.
  • Utilisation Charge - for charges that repeat for units other than time such as "internet hits". This also requires the input of a unit of measurement.
order_adjustment_type_id string Optional. Links to an entry on the ORDER_ADJUSTMENT_TYPE table.
item_adjustment_type_id string Optional. Links to an entry on the ITEM_ADJUSTMENT_TYPE table.
quantity_break_id string Optional. Links to an entry on the QUANTITY_BREAK table.
value_break_id string Optional. Links to an entry on the VALUE_BREAK table.
free_units numeric This can be used with quantity breaks such as "buy 10 of these and get n free" where 'n' can be any number not greater than the lower limit of the range.
product_id_free string Optional. Links to an entry on the PRODUCT table. This can be used with quantity breaks to specify one free unit of a different product instead of 'n' free units of the same product.
uom_id string Optional. Links to an entry on the UNIT_OF_MEASURE table. This is only used if the price_frequency indicates a recurring charge or a utilisation charge.
prod_cat_id string Optional. Links to an entry on the PRODUCT_CATEGORY table.
product_id string Optional. Links to an entry on the PRODUCT table.
prod_feature_cat_id string Optional. Links to an entry on the PRODUCT_FEATURE_CATEGORY table.
prod_feature_id numeric Optional. Links to an entry on the PRODUCT_FEATURE table.
supplier_id numeric Optional. Links to an entry on the PARTY table. This identifies the supplier to which the entry belongs.
customer_id numeric Optional. Links to an entry on the PARTY table. This identifies the customer to which the entry belongs.
party_id_functional numeric Not used at present.
party_class_id string Optional. Links to an entry on the PARTY_SUBCLASS table.
party_subclass_id string Optional. Links to an entry on the PARTY_SUBCLASS table.
area_id numeric Optional. Links to an entry on the GEOGRAPHIC_AREA table.
sale_type_id string Optional. Links to an entry on the SALE_TYPE table.
price_notes string Optional notes concerning this entry.

Although it is possible to have many combinations of identifiers on each price component record it should be noted that the following validation rules apply:


Base Prices

These identify the starting price for a product before the addition of any Feature Prices or Item Adjustments. Several variations are possible.

  1. The default price for a product

    field value
    price_type Set to "Base Price".
    price_frequency Set to "One Time Charge".
    product_id The product identity
    value The base price, in home currency (or the currency of the Functional Unit).
    sale_type_id Optional. See SALE_TYPE for a possible range of values.
    start_date The date on which this price comes into effect.
  2. The default price for a product for a customer (agreement pricing or contract pricing)

    field value
    price_type Set to "Base Price".
    price_frequency Set to "One Time Charge".
    product_id The product identity
    value The agreed price for this customer, in home currency (or the currency of the Functional Unit).
    customer_id The customer (party) identity.
    sale_type_id Optional. See SALE_TYPE for a possible range of values.
    start_date The date on which this price comes into effect.
  3. The default price for a product for a customer class

    field value
    price_type Set to "Base Price".
    price_frequency Set to "One Time Charge".
    product_id The product identity
    value The base price, in home currency (or the currency of the Functional Unit).
    party_subclass_id The party classification.
    sale_type_id Optional. See SALE_TYPE for a possible range of values.
    start_date The date on which this price comes into effect.

It is therefore possible to set up different base prices for the following:

When a product is added to a sales order a search is made for the base price which applies on the current date in the following sequence, with the search terminating at the first successful lookup:

  1. Lookup using product_id, customer_id, and sale_type_id (if one has been supplied).
  2. Lookup using product_id, customer_id, but without sale_type_id.
  3. Lookup using product_id, party_subclass_id, and sale_type_id (if one has been supplied).
  4. Lookup using product_id, party_subclass_id, but without sale_type_id.
  5. Lookup using product_id, and sale_type_id (if one has been supplied).
  6. Lookup using product_id, but without sale_type_id.

Order Adjustments

These are discounts or surcharges which are applied to the total net value of a sales order, and not just an individual item within that order. A discount or surcharge may be defined either as a fixed amount or a percentage. A discount may also be be defined as one or more value breaks where each entry should be for a different and non-overlapping range of values. Discounts and surcharges will be applied unconditionally, whereas a value break will only be applied when the total value for that order falls within the range on that entry.

For discounts and surcharges one of the following must be specified:

For value breaks one of the following must be specified:

These adjustments will be applied in the following order:

  1. Discounts
  2. Surcharges
  3. Sales Taxes

Note that the following rules apply to entries where order_adjustment_type_id begins with 'TAX':

Note that the following rules apply to entries where order_adjustment_type_id begins with 'DELIVERY':

Note that entries with the following price_types will be handled separately:

For the UK there are currently four tax categories - Standard rate, Reduced rate, Zero rated and Exempt - and the tax amount for each category will be calculated on the net total for products within that category. All products will default to the Standard rate (VAT-S) unless they have been assigned to a different category.

  1. A discount to be applied to the total value of a order

    field value
    order_adjustment_type_id Required. Select one that has discount_or_surcharge set to "Discount".
    price_type Set to "Discount".
    price_frequency Set to "One Time Charge".
    prod_cat_id Must be empty.
    value_break_id Optional. This identifies the range of values for which this discount applies.
    value Optional. Either value or percent must be supplied.
    percent Optional. Either value or percent must be supplied.
    area_id Optional. Cannot be used with customer_id or party_subclass_id.
    customer_id Optional. Cannot be used with area_id or party_subclass_id.
    party_subclass_id Optional. Cannot be used with area_id or customer_id.
    sale_type_id Optional. See SALE_TYPE for a possible range of values.
    start_date The date on which this discount comes into effect.

    There is another type of order discount known as a Discount Code (or Voucher). This is only added to an order upon the input of a valid Discount Code. These codes are only valid for a particular time period or up to a particular quantity, and may be published in various promotional materials.

  2. A surcharge to be applied to the total value of a order.

    field value
    order_adjustment_type_id Required. Select one that has discount_or_surcharge set to "Surcharge".
    price_type Set to "Surcharge".
    price_frequency Set to "One Time Charge".
    prod_cat_id Must be empty.
    value_break_id Must be empty.
    value Optional. Either value or percent must be supplied.
    percent Optional. Either value or percent must be supplied.
    area_id Optional. Cannot be used with customer_id or party_subclass_id.
    customer_id Optional. Cannot be used with area_id or party_subclass_id.
    party_subclass_id Optional. Cannot be used with area_id or customer_id.
    sale_type_id Optional. See SALE_TYPE for a possible range of values.
    start_date The date on which this surcharge comes into effect.
  3. A Sales Tax to be applied to the total value of a order (may have a different entry for each tax category)

    field value
    order_adjustment_type_id Required. Select "Sales Tax".
    price_type Set to "Surcharge".
    price_frequency Set to "One Time Charge".
    prod_cat_id Required. Select one of the product categories which has been set up for Sales Tax. Please refer to FAQ #1 for details.

    value_break_id Must be empty.
    value Optional. Either value or percent must be supplied.
    percent Optional. Either value or percent must be supplied.
    area_id Required.
    customer_id Must be empty.
    party_subclass_id Must be empty
    sale_type_id Optional. See SALE_TYPE for a possible range of values.
    start_date The date on which this surcharge comes into effect.

When a sales order is created a search is made for any order adjustments which are applicable on the current date. This search has to take into account a combination of the following:

Each combination of these values will involve a separate database lookup which will be given a priority number with the narrowest of selections having lower numbers than the broadest. Thus a value for a particular product and particular customer will have a higher priority than a value for all products and all customers. This priority number will be allocated as follows:

  1. Deal with adjustments which are not TAX and not DELIVERY
    1. All adjustments for a specific customer_id.
    2. All adjustments for customers within a particular area_id.
    3. All adjustments for customers with a particular party_subclass_id.
    4. All adjustments for all customers.
  2. Deal with TAX adjustments
    1. All adjustments for customers whose delivery address is within a particular area_id.
  3. Deal with DELIVERY adjustments
    1. All adjustments for customers whose delivery address is within a particular area_id.

Each of these lookups will be performed twice - once with a sale_type_id and once without.

If multiple entries for the same order_adjustment_type_id are found with different priorities then only those entries with the lowest priority will be added to the ORDER_ADJUSTMENT table.

Note also that if any price component record has related entries on the PARTY_PRICE_EXCLUSION table then any customer who has any of the same party_subclass_id entries will be excluded from that adjustment.


Item Adjustments

These are discounts or surcharges which apply to a particular product (item) within a sales order. If the discount/surcharge is a value or a percentage it will be applied to the unit price (which may also include any feature prices) before being multiplied by the order quantity to give the extended price (item value). A discount may also be be defined as one or more quantity breaks where each entry should be for a different and non-overlapping range of quantities. Discounts and surcharges will be applied unconditionally, whereas a quantity break will only be applied when the total quantity for that product_id falls within the range on that entry.

For discounts and surcharges one of the following must be specified:

For quantity breaks one of the following must be specified:

  1. A surcharge to be applied to an order item

    field value
    item_adjustment_type_id Required. Select one that has discount_or_surcharge set to "Surcharge".
    price_type Set to "Surcharge".
    price_frequency Set to "One Time Charge".
    EITHER: product_id A single product identity or '*' to signify ALL products.
    OR: prod_cat_id To signify ALL products which have this prod_cat_id on the PROD_CAT_CLASS table.
    quantity_break_id Must be empty.
    value Optional. Either value or percent must be supplied.
    percent Optional. Either value or percent must be supplied.
    area_id Optional.
    customer_id Optional. Cannot be used with area_id or party_subclass_id.
    party_subclass_id Optional. Cannot be used with area_id or customer_id.
    sale_type_id Optional. See SALE_TYPE for a possible range of values.
    start_date The date on which this surcharge comes into effect.
  2. A discount to be applied to an order item

    field value
    item_adjustment_type_id Required. Select one that has discount_or_surcharge set to "Discount".
    price_type Set to "Discount".
    price_frequency Set to "One Time Charge".
    EITHER: product_id A single product identity or '*' to signify ALL products.
    OR: prod_cat_id To signify ALL products which have this prod_cat_id on the PROD_CAT_CLASS table.
    quantity_break_id Must be empty.
    value Optional. Either value or percent must be supplied.
    percent Optional. Either value or percent must be supplied.
    area_id Optional.
    customer_id Optional. Cannot be used with area_id or party_subclass_id.
    party_subclass_id Optional. Cannot be used with area_id or customer_id.
    sale_type_id Optional. See SALE_TYPE for a possible range of values.
    start_date The date on which this discount comes into effect.
  3. A quantity break to be applied to an order item

    field value
    item_adjustment_type_id Required. Select one that has discount_or_surcharge set to "Discount".
    price_type Set to "Discount".
    price_frequency Set to "One Time Charge".
    EITHER: product_id A single product identity or '*' to signify ALL products.
    OR: prod_cat_id To signify ALL products which have this prod_cat_id on the PROD_CAT_CLASS table.
    quantity_break_id Required. This identifies the range of quantities for which this discount applies.
    value Optional. Either value, percent, free_units or product_id_free must be supplied.
    percent Optional. Either value, percent, free_units or product_id_free must be supplied.
    free_units Optional. Either value, percent, free_units or product_id_free must be supplied.
    product_id_free Optional. Either value, percent, free_units or product_id_free must be supplied.
    area_id Optional.
    customer_id Optional. Cannot be used with area_id or party_subclass_id.
    party_subclass_id Optional. Cannot be used with area_id or customer_id.
    sale_type_id Optional. See SALE_TYPE for a possible range of values.
    start_date The date on which this discount comes into effect.

When a product is added to a sales order a search is made for any item adjustments which are applicable on the current date. This search has to take into account a combination of the following:

Each combination of these values will involve a separate database lookup which will be given a priority number with the narrowest of selections having lower numbers than the broadest. Thus a value for a particular product and particular customer will have a higher priority than a value for all products and all customers. This priority number will be allocated as follows:

  1. A specific product for a specific customer_id.
  2. A specific product for customers within a particular area_id.
  3. A specific product for customers with a particular party_subclass_id.
  4. A specific product for all customers.
  5. All products within a particular prod_cat_id for a specific customer_id.
  6. All products within a particular prod_cat_id for customers within a particular area_id.
  7. All products within a particular prod_cat_id for customers with a particular party_subclass_id.
  8. All products within a particular prod_cat_id for all customers.
  9. All products for a specific customer_id.
  10. All products for customers within a particular area_id.
  11. All products for customers with a particular party_subclass_id.
  12. All products for all customers.

Each of these lookups will be performed twice - once with a sale_type_id and once without.

Note also that if any price component record has related entries on the PARTY_PRICE_EXCLUSION table then any customer who has any of the same party_subclass_id entries will be excluded from that adjustment.

If multiple entries for the same item_adjustment_type_id are found with different priorities then only those entries with the lowest priority will be added to the ORDER_ITEM_ADJUSTMENT table.


Feature Prices

A product may come with a number of features which may be selected in a sales order, and these will be treated as free unless a feature price has been defined. A feature price may be either a discount or a surcharge, and will be added to the unit price for that product before the effects of any Item adjustments are calculated. Several variations are possible.

  1. The price for a feature with a particular product

    field value
    item_adjustment_type_id Set to "Feature Charge".
    price_type Set to discount_or_surcharge value on associated ITEM_ADJUSTMENT_TYPE table for this item_adjustment_type_id.
    price_frequency Set to "One Time Charge".
    product_id The product identity. Must not be '*'.
    prod_feature_id The feature identity.
    value The feature price, in home currency (or the currency of the Functional Unit).
    start_date The date on which this price comes into effect.
  2. The price for a feature regardless of product

    field value
    item_adjustment_type_id Set to "Feature Charge".
    price_type Set to discount_or_surcharge value on associated ITEM_ADJUSTMENT_TYPE table for this item_adjustment_type_id.
    price_frequency Set to "One Time Charge".
    product_id Set to '*' to mean "all products".
    prod_feature_id The feature identity.
    value The feature price, in home currency (or the currency of the Functional Unit).
    start_date The date on which this price comes into effect.

When a feature is added to a product in a sales order a search is made for any price adjustment which applies on the current date in the following sequence, with the search terminating at the first successful lookup:

  1. Lookup using prod_feature_id and product_id.
  2. Lookup using prod_feature_id and product_id = '*'.

PARTY_PRICE_EXCLUSION table

This identifies all those classes of party who are excluded from particular price components (order adjustments or item adjustments) when a sales order is being compiled. Each entry is only valid for a particular time period, so it is possible to have different entries for different dates.

FieldTypeDescription
price_component_id numeric Links to an entry on the PRICE_COMPONENT table.
party_class_id string Links to an entry on the PARTY_SUBCLASS table.
party_subclass_id string Links to an entry on the PARTY_SUBCLASS table.
start_date date The start date for this entry.
end_date date Optional. The end date for this entry. Blank signifies an unspecified date in the future.

A customer (party) can be classified with any number of different PARTY_SUBCLASS_LINK entries. When order adjustments or item adjustments are defined on the PRICE_COMPONENT table they automatically apply to every customer. However, it may be required to exclude particular parties from certain price adjustments. This can be done as follows:

When looking for either order adjustments or item adjustments during the compilation of sales orders, these will automatically apply to every customer except those who share a party classification which has been defined on the exclusion table.


Product Supplier

This shows which suppliers are identified with which product, with their lead times. A product may be available from more than one supplier, so entries can be sorted by preference.

Figure 7 - Product Supplier

product-07 (2K)

PREFERENCE_TYPE table

This identifies a preference type or priority that may be linked with product replenishment details.

FieldTypeDescription
preference_type_id string Identity
preference_type_desc string Description

Here are some examples:

RATING_TYPE table

This is used to rate the overall performance of a product which is obtained from a particular supplier.

FieldTypeDescription
rating_type_id string Identity
rating_type_desc string Description

Here are some examples:

PRODUCT_SUPPLIER table

This identifies which products are available from which suppliers.

FieldTypeDescription
product_id string Links to an entry on the PRODUCT table.
party_id numeric Links to an entry on the PARTY table.
preference_type_id string Links to an entry on the PREFERENCE_TYPE table.
rating_type_id string Links to an entry on the RATING_TYPE table.
supplier_part_no string Optional. When ordering this product from this supplier it may be necessary to use the supplier's own part number instead of the organisation's internal part number.
available_from_date date Indicates the date from which this product is available from this supplier.
available_to_date date Indicates the after which this product is no longer available from this supplier.
standard_lead_time numeric The lead time, or number of days required between placing the order and having it delivered.
product_notes string Optional text.

Product Extra Values

This database may be used by other systems, such as a web front end, which may have a requirement for extra fields to be held for each product. There is a NAMES table which holds the names of any such extra fields, with their validation types, and a VALUES table which holds a corresponding value for each product.

Although these values can be held in the database they cannot be considered when processing any business rules as their names and meanings are not part of the standard software.

Figure 8 - Product Extra Values

product-08 (2K)

PRODUCT_EXTRA_NAMES table

This identifies the names of extra fields which can be held for each product.

FieldTypeDescription
extra_id string Identity
extra_name string Short Name
extra_desc string Optional. Long Description
extra_type string Validation type. Allowable values are:
  • string (the default)
  • boolean
  • date
  • number(P) - a number with P digits
  • number(P,S) - a number with P digits, including S decimals
sort_seq numeric Optional. Specifies the sequence in which the items will be arranged on the 'Maintain Product Extra Values' screen.

PRODUCT_EXTRA_VALUES table

This holds the values for any extra fields for each product.

FieldTypeDescription
product_id string Links to an entry on the PRODUCT table.
extra_id string Links to an entry on the PRODUCT_EXTRA_NAMES table.
extra_value string This holds the value for this Extra Name with this Product.

Compatible Products

There may be circumstances where you wish to identify where one product is compatible with another. This will enable you, for example, to suggest one or more compatible products whenever a customer makes a purchase.

When two products are associated in this way the association need only be made once, yet it will be available whichever of the two records is selected. Thus if you link 'product-A' with 'product-B' it will also serve as a link between 'product-B' and 'product-A'.

Figure 9 - Compatible Products

product-09 (2K)

COMPATIBLE_PRODUCTS table

This identifies where one product is compatible with another.

FieldTypeDescription
product_id_1 string Links to an entry on the PRODUCT table.
product_id_2 string Links to an entry on the PRODUCT table.

Product Components (BOM) and Revisions

As well as selling individual products, an organisation may sell products which are collections of or assembled from other products. This may be something as simple as a gift box which contains a mixture of items, or it may be used in a manufacturing environment to indicate which items are needed in order to assemble a finished product. These are sometimes known as Bill of Materials or BOM.

It is possible for a product to have different types of BOM for different purposes.

Certain products may also be the subject of various revisions during their lifetime, in which case a history of the various revision numbers and their effective dates will need to be maintained.

Figure 10 - Product Components and Revisions

product-10 (3K)

BOM_TYPE table

This identifies the different Bill Of Material (BOM) types which are available. At least one entry must exist in this table otherwise the system will not allow PRODUCT_COMPONENT entries to be created. If only one entry exists then the system will automatically treat it as the default, whether or not it is so marked.

Note that it is possible for a single PRODUCT to have multiple BILL OF MATERIAL TYPEs, depending upon business requirements. For example a single PRODUCT could have an engineering bill of material as well as a manufacturing bill of material. If that PRODUCT is revision controlled then multiple versions of either its engineering bill or material or its manufacturing bill of material could exist.

FieldTypeDescription
bom_type_id string Identity.
bom_type_name string Short Name.
bom_type_desc string Optional. Long description.
is_revision_controlled boolean A YES/NO flag which indicates that if new PRODUCTs are created during an automated process which uses this BOM_TYPE then that PRODUCT will require entries on the PRODUCT_REVISION table.
is_default boolean A YES/NO flag which indicates if this is the default bom_type_id when adding new PRODUCT_COMPONENTs. Note that only one BOM_TYPE can be marked as the default.

Here are some examples:

BOM Type IdDescriptionRevision
Controlled?
Default?
ASSY Assembly or sub-assembly bill of materials Yes No
ENGR Engineering bill of materials Yes Yes
KIT Kitting bill of materials No No
MFG Manufacturing bill of materials No No
PLNG Planning bill of materials No No
RECIPE Recipe or formulation Yes No
SALES Assortment bill of materials for sale Yes No
SERVICE Bill of materials for maintenance, repairs or overhauls Yes No
CBOM Configurable bill of materials No No

PRODUCT_BOM_TYPE table

This identifies which BILL OF MATERIAL TYPEs are allowed for each PRODUCT.

When new PRODUCT COMPONENTs are added for a product, only the PRODUCT BILL OF MATERIAL TYPEs for the senior product can be selected. If one of the available BILL OF MATERIAL TYPEs is marked as the default, it will be pre-selected. The user may select a different BILL OF MATERIAL TYPE before the PRODUCT COMPONENT is added. Otherwise the system will add the default BILL OF MATERIAL TYPE to the PRODUCT BILL OF MATERIAL TYPE table if it does not already exist.

FieldTypeDescription
product_id string Links to an entry on the PRODUCT table.
bom_type_id string Links to an entry on the BOM_TYPE table.
yield number Optional. This is used in the product conversion process.

PRODUCT_COMPONENT table

This identifies where one product is comprised of other components.

FieldTypeDescription
product_id_snr string This identifies the product (senior) which is comprised of a number of components. Links to an entry on the PRODUCT table.
bom_type_id_snr string Links to an entry on the PRODUCT_BOM_TYPE table for product_id_snr.
product_id_jnr string This identifies the component product (junior) which is contained within the senior product. Links to an entry on the PRODUCT table.
seq_no number A unique number assigned by the system.
bom_type_id_jnr string Optional. Links to an entry on the PRODUCT_BOM_TYPE table for product_id_jnr. This is used in the Tree View to signify that there are no components below this one - in other words that it is a "leaf" and not a "branch".
revision_id_snr string Optional. Points to an entry on the PRODUCT_REVISION table for product_id_snr. Required if is_revision_controlled is set to 'Yes' for product_id_snr
revision_id_jnr string Optional. Points to an entry on the PRODUCT_REVISION table for product_id_jnr. Required if is_revision_controlled is set to 'Yes' for product_id_jnr.
quantity number The count of this junior product which is contained within this senior product.
scrap number Optional. This is the standard scrap or yield loss for this component product, expressed as a percentage. The minimum allowable value is zero and the maximum allowable value is 99.999. Scrap is assumed to be 0% if zero, blank or NULL. This is used in the product conversion process.
cmp_comment string Optional. A comment on this entry.
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.
condition_type_id string Optional. Links to an entry on the CONFIG_CONDITION_TYPE table.
condition_subype_id string Optional. Links to an entry on the CONFIG_CONDITION_SUBTYPE table.
config_condition string Optional. Free format text.
config_remarks string Optional. Free format text.
bom_type_condition string Optional. Free format text.

CONFIG_CONDITION_TYPE table

This identifies the different product configuration condition types which may exist.

FieldTypeDescription
condition_type_id string Identification.
condition_type_desc string Description.

Here are some examples:

CONFIG_CONDITION_SUBTYPE table

This identifies the different product configuration condition subtypes which may exist.

FieldTypeDescription
condition_type_id string Links to an entry on the CONFIG_CONDITION_TYPE table.
condition_subtype_id string Identification.
condition_subtype_desc string Description.

PRODUCT_REVISION table

This identifies the different revisions or versions through which a product may progress during its lifetime. Entries on this table are only valid if the is_revision_controlled flag on the PRODUCT table is set to 'Yes'. Note that more than one revision can be valid at any one time, thus allowing a period of overlap between one revision and another. However, each revision must have a different effective_date otherwise it will not be possible to identify which one is the latest.

FieldTypeDescription
product_id string Links to an entry on the PRODUCT table.
revision_id string This identifies the revision or version number for this product.
revision_desc string Optional. A description or name for this revision.
effective_date date The date from which this revision becomes effective.
discontinue_date date Optional. Indicates the date beyond which this entry is no longer valid. Blank signifies an unspecified date in the future.
prod_rev_status_id string Optional. Links to an entry on the PROD_REV_STATUS table.

PROD_REV_STATUS table

This identifies the different revision status values that may exist.

FieldTypeDescription
prod_rev_status_id string Identification.
prod_rev_status_desc string Description.
processing_seq number Optional. Allows the entries to be sorted into a particular order before being displayed in a dropdown list.

Here are some examples:

PROD_REV_STATUS_HIST table

This identifies the history of status changes for each product revision.

FieldTypeDescription
product_id string Links to an entry on the PRODUCT_REVISION table.
revision_id string Links to an entry on the PRODUCT_REVISION table.
seq_no number A unique number assigned by the system.
prod_rev_status_id string Links to an entry on the PROD_REV_STATUS table.
status_date date The date on which this change was made.
status_comment string Optional. The reason why this change was made.

Phantom Products

According to APICS The Association for Operations Management (section 5.5.7.1), Phantom bills are a coding and structuring technique used primarily for transient sub assemblies. The phantom bill represents an item that may not exist physically but is treated as an accounting unit.

A phantom bill of materials is a logical BOM representing:

As such, phantom items never actually exist.

The GM-X ERP application uses the following rules for phantom products:

These rules are enforced for phantom products; and also whenever at attempt is made to change the product_subtype from 'G' (Good) or 'S' (Service) to 'P' (Phantom), except that changes from 'G' (Good) or 'S' (Service) to 'P' (Phantom) are allowed even if price component records exist for the affected product but in this case those price component records will not be utilised for any subsequent orders or invoices.

Otherwise, the GM-X ERP application allows phantom products to be used in the same way as any other product:


Product Costing

Introduction

A product costing system (also called a cost accounting system or costing system) is a framework used by firms to estimate the cost of their products for profitability analysis, inventory valuation and cost control.

Estimating the accurate cost of products is critical for profitable operations. A firm must know which products are profitable and which ones are not, and this can be ascertained only when the costs of each product are estimated correctly. Further, a product costing system helps in estimating the closing value of materials inventory, work-in-progress and finished goods inventory for the purpose of financial statement preparation.

Many firms select "standard cost" as the valuation type for product costing. A standard cost system determines cost per unit based on some reasonable historical or expected cost. Studies of past and estimated future cost data can then provide the basis for standard costs. Because the results of such studies will fluctuate over time, many firms also differentiate between:

The "actual cost" is a valuation type which reflects the actual out-of-pocket expense per unit incurred for procuring or making a batch or lot of a product (such as the average cost per unit of a purchase or production run), or an individual product unit. The actual cost to produce a product may differ from the estimated standard cost. For management control, the actual cost is compared to the standard cost for a specific item and differences, or "variances", are identified and analysed.

Product costs are better understood and controlled when they are broken down according to "cost elements" which are the factors of production or activities that are the fundamental drivers of cost performance. In their most basic form, these are:

In the GM-X ERP application, these basic elements are known as "cost element types" and are system-defined. Users may identify any number of cost elements reflecting material consumption, yield losses, material overhead consumption, labour expenditure, machinery and equipment utilisation and labour overhead consumption which can be defined as production factors or as activity cost pools for activity-based costing. Each such cost element is linked to a cost element type.

Manufacturers, and firms which perform kitting of purchased products or engage contract manufacturers to make semi-finished and finished products, will utilise bills of material (BOMs) which allow costs to be further broken down by level:

When rolling up costs through a BOM structure, some firms find it useful to combine labour and overhead with material costs at prior levels, whilst others do not. An indicator for this purpose is defined in the Product Controls task. Note that in this context "prior" level means a "lower" level in the BOM hierarchy.

Organisational Structure

The PARTY and ORGANISATION tables contain entries for every organisation which is required to be known to the GM-X application.

At least one of these parties is an organisation which is the "client" and it is the one for which the application is being run. This organisation is known as the "functional unit" and can be identified by adding it to the PARTY and ORGANISATION tables using a single party_id. This data provides the identity of the internal party in various transactions, such as sales orders and invoices.

It is also possible for a GM-X installation to handle the business for a group of organisations which do business under separate names, possibly using different functional currencies. Those organisations can be added as functional units to the PARTY and ORGANISATION tables. Each of them is identified in those tables by its own party_id. However, because all these organisations share the same product data, they will also share the same standard costs which, in turn, must be denominated in a common currency. The currency in which GM-X product costs are denominated is defined in the Product Controls task.

The GM-X application allows revision control to be enforced for specific products. Total cost per unit could vary for each revision of the same product due to BOM differences, as well as process differences that affect resource utilisation, yields or scrap.

The GM-X application also allows alternate BOM types to be defined for each product, or product revision. Total cost per unit could vary for each BOM type due to BOM differences, and those BOM differences might in turn introduce process differences.

Figure 11 - Product Costing

product-11 (3K)

COST_ELEMENT table

This identifies cost elements reflecting material consumption, yield or scrap losses, material overhead consumption, labour expenditure, machinery and equipment utilisation and labour overhead consumption which can be defined as production factors or as activity cost pools for activity-based costing.

FieldTypeDescription
cost_element_id string Unique identity.
cost_element_name string Short name.
cost_element_name string Optional. Long description.
cost_element_type string Must be one of the following:
  • M - Material
  • L - Labour
  • O - Overhead
  • Y - Yield Loss

PRODUCT_COST table

This identifies the history of status changes for each product revision.

FieldTypeDescription
product_id string Links to an entry on the PRODUCT table.
valuation_type string Must be one of the following:
  • A - Actual
  • F - Frozen Standard
  • S - Standard
cost_element_id string Links to an entry on the COST_ELEMENT table.
seq_no number A number assigned by the system so that variations with the optional bom_type_id and revision_id components can be kept unique.
bom_type_id string Optional. Links to an entry on the PRODUCT_BOM_TYPE table.
revision_id string Optional. Links to an entry on the PRODUCT_REVISION table.
value_this_level number Display only. The cost per unit at this level.
value_prior_levels number Display only. The cost per unit at prior level.
status_comment number Display only. The cost per unit at all previous BOM levels.

The PRODUCT_COST table also an alternate unique index comprising the product_id, bom_type_id, revision_id, valuation_type and cost_element_id to include the optional bom_type_id and revision_id elements.


Emission Factors

EMISSION_FACTOR table

This table identifies the emission factors for carbon dioxide (CO2), methane (CH4), and nitrous oxide (N2O) greenhouse gases (GHG) associated with a particular PRODUCT (for fuels), VEHICLE (for transport vehicles), or FACILITY (for energy consuming facilities).

An emission factor (EF) is a representative value that relates the quantity of a pollutant released to the atmosphere with an activity associated with the release of that pollutant. For GHG, EFs are typically expressed as the mass of a gas per unit of the emissions-producing activity or material input, such as kilograms of carbon dioxide (CO2) emitted per tonne of bituminous coal combusted.

To estimate emissions, an EF is multiplied by the corresponding activity data such as the energy contained in a mass of fuel combusted, or the amount of electricity consumed. Activity data need to be converted to match the units used by the EF to calculate GHG emissions. The basic formula is:

    Activity data x Emission factor = GHG emissions

FieldTypeDescription
emission_factor_id number Identity number which is generated automatically by the system.
emission_factor_desc string Description
start_year number The first year for which these emission factors apply. Zero by default.
end_year number The last year for which these emission factors apply. 9999 by default.
fossil_co2_emission_factor number Carbon dioxide (CO2) emission factor for fossil fuel.
uom_numerator_fossil_co2 string The unit of measure in which the numerator of fossil_co2_emission_factor is denominated (Kilograms by default). Links to an entry on the UNIT_OF_MEASURE table.
uom_denominator_fossil_co2 string The unit of measure in which the denominator of fossil_co2_emission_factor is denominated (Kilograms by default). Links to an entry on the UNIT_OF_MEASURE table.
ch4_emission_factor number Methane (CH4) emission factor.
uom_numerator_ch4 string The unit of measure in which the numerator of ch4_emission_factor is denominated (Kilograms by default). Links to an entry on the UNIT_OF_MEASURE table.
uom_denominator_ch4 string The unit of measure in which the denominator of ch4_emission_factor is denominated (Kilograms by default). Links to an entry on the UNIT_OF_MEASURE table.
n2o_emission_factor number Nitrous oxide (N2O) emission factor.
uom_numerator_n2o string The unit of measure in which the numerator of n2o_emission_factor is denominated (Kilograms by default). Links to an entry on the UNIT_OF_MEASURE table.
uom_denominator_n2o string The unit of measure in which the denominator of n2o_emission_factor is denominated (Kilograms by default). Links to an entry on the UNIT_OF_MEASURE table.
biofuel_co2_emission_factor number Optional. Carbon dioxide (CO2) emission factor for biofuel.
uom_numerator_biofuel_co2 string The unit of measure in which the numerator of biofuel_co2_emission_factor is denominated (Kilograms by default). Links to an entry on the UNIT_OF_MEASURE table.
uom_denominator_bilfuel_co2 string The unit of measure in which the denominator of biofuel_co2_emission_factor is denominated (Kilograms by default). Links to an entry on the UNIT_OF_MEASURE table.
fuel_notes string Optional notes.
source string Optional source of information.

Product Controls

Various configuration options may sometimes be required for which there is no suitable place to hold them. In this case they are held within the MNU_CONTROL table in the MENU database which acts a as KEY-VALUE store.

PRODUCT_CONTROLS table

This holds various configuration settings.

FieldTypeDescription
record_id string "PRODUCT"
currency_code_costing string Links to an entry on the CURRENCY_CODE table. This identifies the currency to be used on the PRODUCT_COST table.
roll_prior_level_to_material boolean "YES" or "NO". Indicates if prior-level Labour and Overhead costs should be rolled up into the Material costs at the current level. Default is "NO".
roll_to_material_cost_element string If roll_prior_level_to_material is "YES" then this must link to an entry on the COST_ELEMENT table which has a cost_element_type of "M" (Material). This is because there could be several of such entries.
valuation_type string Product Cost Valuation Type Used in General Ledger.
cost_element_id string Product Cost Element Id Used in General Ledger.
product_bom_type string Product BOM Type Used in General Ledger.

Date created: 6th August 2007

Amendment history:

30 Mar 2024 Updated the PRODUCT table to include the fuel_type, emission_factor_id, and heating_value_basis columns.
Added the EMISSION_FACTOR table.
01 Sep 2022 Updated the PRICE_COMPONENT table to include the rounding_method column.
01 Aug 2022 Updated Order Adjustments and Item Adjustments to expand the list of pricing options.
20 Feb 2022 Updated the Product Controls to add VALUATION_TYPE, COST_ELEMENT_ID and PRODUCT_BOM_TYPE which have been moved from Accounts Payable Control data.
22 Feb 2021 Moved SEO columns from the PRODUCT table to the PRODUCT_SEO table.
Moved SEO columns from the PRODUCT_CATEGORY table to the PRODUCT_CATEGORY_SEO table.
08 Feb 2019 Updated the PRODUCT_COMPONENT table to include the scrap column.
Updated the PRODUCT_BOM_TYPE table to include the yield column.
05 Feb 2019 Added the COST_ELEMENT table.
Added the PRODUCT_COST table.
28 Jun 2018 Updated the PRODUCT table to include the shelf_life_days column and change the options for the inventory_type column.
01 May 2018 Updated the UNIT_OF_MEASURE table to include the decimal_point and thousands_separator columns.
04 Oct 2017 Updated the PRICE_COMPONENT table to include the prod_feature_cat_id column.
03 Apr 2017 Added the PROD_FEAT_CAT_UOM table.
Added the PROD_FEAT_CAT_CUSTOMISATION table.
Updated the PRODUCT_FEATURE_CATEGORY table to remove the uom_id, uom_id_2, uom_id_3, measurement_label, measurement_label_2, measurement_label_3, customisation_allowed, customisation2_allowed, customisation_label and customisation_label_2 columns.
Added the PROD_FEATURE_UOM table.
Updated the PRODUCT_FEATURE table to remove the measurement, measurement_2, measurement_3, customisation_allowed and customisation2_allowed columns.
Added the PROD_FEATURE_CUSTOMISATION table.
11 Dec 2016 Added the PROD_REV_STATUS, PROD_REV_STATUS_HIST, CONFIG_CONDITION_TYPE and CONFIG_CONDITION_SUBTYPE tables.
Updated the PRODUCT_COMPONENT table to include the condition_type_id, condition_subtype_id, config_condition, config_remarks and bom_type_condition columns.
Updated the PRODUCT_REVISION table to include the prod_rev_status_id column.
03 Nov 2016 Added the BOM_TYPE and PRODUCT_BOM_TYPE tables.
Added the bom_type_id_snr and bom_type_id_jnr columns to the PRODUCT_COMPONENT table
21 Sep 2016 Renamed the GOOD_IDENTITY_TYPE table to PRODUCT_IDENTITY_TYPE.
Renamed the GOOD_IDENTIFICATION table to PRODUCT_IDENTIFICATION.
21 Apr 2016 Added the GTIN table.
10 Feb 2016 Removed the PRODUCT_URL table.
Removed the PRODUCT_URL_CANONICAL table.
20 Aug 2015 Amended the PRODUCT_FEATURE_CATEGORY table to include the customisation_label and customisation_label_2 columns.
17 May 2015 Amended the PRODUCT_EXTRA_NAMES table to include the sort_seq column.
21 Mar 2015 Added the PRODUCT_CATEGORY_PARTY table.
08 Aug 2014 Amended the PRODUCT_FEATURE_CATEGORY table to include the uom_id_2, uom_id_3, measurement_label, measurement_label_2 and measurement_label_3 columns.
24 Jul 2014 Added the PRODUCT_REVISION table.
Added the PRODUCT_URL_CANONICAL table.
Amended the PRODUCT table to include the is_revision_controlled column.
Amended the PRODUCT_COMPONENT table to include the revision_id_snr and revision_id_jnr columns.
18 Jun 2014 Amended the UNIT_OF_MEASURE table to include the scale column.
Amended the PRICE_COMPONENT table to include the party_id_functional column.
04 Jul 2013 Amended the PRODUCT_CATEGORY table to remove price_calculation_id.
Amended the PROD_CAT_CLASS table to add second_flag and third_flag.
21 May 2014 Added the DEFAULT_FEATURE table.
17 Mar 2014 Amended the PRODUCT_CATEGORY table to include banner_text_upper.
12 Feb 2014 Added the PRODUCT_URL table.
21 Oct 2013 Added the PROD_FEATURE_COMPONENT table.
05 Oct 2013 Added the PROD_CAT_EXTRA_NAMES and PROD_CAT_EXTRA_VALUES tables.
08 Aug 2013 Amended the PRODUCT_FEATURE table to add prod_feature_id_url.
06 Aug 2013 Amended the PROD_CAT_ROLLUP table to add hierarchy_id.
10 Jul 2013 Amended the PRODUCT_FEATURE table to add measurement_3.
08 Jul 2013 Amended the PROD_CAT_FEATURE_APPLICABILITY table to include is_default.
05 Jul 2013 Added the PROD_CAT_FEATURE_APPLICABILITY table.
Amended the PRODUCT_FEATURE_CATEGORY table to remove measurement_reqd and replace it with uom_id.
Amended the PRODUCT_FEATURE table to remove uom_id and add measurement_2.
04 Jul 2013 Amended the PRODUCT_CATEGORY table to include price_calculation_id.
30 May 2013 Amended the PRODUCT_CATEGORY table to include short_name, filter_image, promo_image and product_example_image.
18 Dec 2012 Amended the PRODUCT_CATEGORY table to include seo_heading.
Amended the PRODUCT table to include seo_heading.
17 Nov 2012 Amended the PRODUCT_CATEGORY table to include banner_title.
04 July 2012 Amended the PRODUCT table to include product_id_url.
24 May 2012 Amended the PRODUCT table to include lead_time.
03 May 2012 Amended the PRODUCT_CATEGORY table to include banner_text.
29 Nov 2011 Added the PRODUCT_COMPONENT table.
08 Dec 2010 Amended the PRODUCT_CATEGORY table to include sort_seq.
09 Jul 2010 Amended the PRODUCT_FEATURE table to include start_date and end_date.
21 Jun 2010 Added the COMPATIBLE_PRODUCT table.
07 Jul 2008 Amended the PRODUCT table to include seo_image_alt.
20 May 2008 Amended the PRICE_COMPONENT table to add 'Hire Charge' to price_type.
03 May 2008 Amended the UOM_CONVERSION table to include seq_no, start_date and end_date.
Amended the UNIT_OF_MEASURE table to include uom_symbol.
04 Mar 2008 Amended the PRODUCT table to include seo_title, seo_desc and seo_keywords.
Amended the PRODUCT_CATEGORY table to include seo_title, seo_desc and seo_keywords.
09 Dec 2007 Amended the PRODUCT_FEATURE_CATEGORY table to include customisation_allowed.
11 Nov 2007 Added the PROD_FEATURE_CAT_APPLIC table.
27 Oct 2007 Added the PRODUCT_EXTRA_NAMES and PRODUCT_EXTRA_VALUES tables.
13 Oct 2007 Moved the PREFERENCE_TYPE, RATING_TYPE and PRODUCT_SUPPLIER tables from the INVENTORY database.
Added column supplier_part_no to the PRODUCT_SUPPLIER table.
10 Oct 2007 Added the PROD_CAT_LEVEL table.
Updated PRODUCT_CATEGORY to include a foreign key to PROD_CAT_LEVEL. Also added the prod_cat_name column.
Updated PRODUCT_FEATURE_CATEGORY to include the prod_feature_cat_name column.
Updated PRODUCT_FEATURE to include the prod_feature_name column, and the prod_feature_code column as an optional unique key.
Updated PRODUCT to include the product_desc column.

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