Electronic promotion system for an electronic merchant system5999914Abstract An electronic promotion system apparatus and method provide promotions across a computer network. The promotion system includes a shopper browser communicating with a merchant server. A shopper places an order using the shopper browser. The order is received by the merchant server. A purchasing pipeline executing in the merchant server process the order. The purchasing pipeline includes a promotion component. The promotion component determines the eligibility of the shopper for each one of multiple promotions using information stored in a promotion table. Furthermore, the eligibility of each item on the shopper order to trigger each one of the multiple promotions is determined. Additionally, the eligibility of each item on the shopper order to receive an award is determined. The awards are then applied appropriately. Each item may be used to trigger only one promotion where awards were granted. Furthermore, each item may only receive one award. Thus, a merchant may offer multiple promotions while ensuring the promotions are applied as intended. Claims What is claimed is: Description BACKGROUND OF THE INVENTION
TABLE I
______________________________________
PRODUCT FAMILY SCHEMA
Schema: storename.sub.-- product
Field Name Format
______________________________________
sku varchar(30) primary key not null
description varchar(255) null
dept.sub.-- id int null
manufacturer varchar(50)
date.sub.-- intro
datetime null
list.sub.-- price
int not null,
sale.sub.-- price
int null,
sale.sub.-- start
datetime null,
sale.sub.-- end datetime null,
color.sub.-- value
varchar(20) null,
size.sub.-- value
varchar(20) null,
image.sub.-- file.sub.-- name
varchar(255) null
______________________________________
In the preferred embodiment, each product table column has a corresponding schema field associated with it. The storename.sub.-- product schema fields are defined as follows: "sku" is the product's sku; "name" is the name of the product; "description" is a product description; "dept.sub.-- id" is the identification code of the department which sells the product; "manufacturer" is the manufacturer of the product; "date.sub.-- intro" is the product's first day of sale. This date is used by the preferred embodiment to determine if the product should be advertised to the shopper as a new product. Thus if, for example, the purchase date is less than thirty days after the "date.sub.-- intro" entry, the merchant can have a starburst image with the word "NEW" appearing on the product page; "list.sub.-- price" is the product's list price; "sale.sub.-- price" is the product's sale price; "sale.sub.-- start" is the date the sale price goes into effect; "sale.sub.-- end" is the date the sale price is terminated and the list price goes back into effect; "color.sub.-- value" is the product's color; "size.sub.-- value" is the product's size; "image.sub.-- file.sub.-- name" is the file name of the product image file. Each field is associated with a corresponding column in the product family table. This file is used in generating the product page to illustrate the product. The numbers within parenthesis in Table I, as well as in the tables below, indicate the maximum permissible field length of an entry in the preferred embodiment. In another preferred embodiment, two product tables, a product family table and a product variant table, are used to store product information. The product family table 1400 and the product variant table 1410, whose formats are respectively illustrated in FIGS. 14A and 14B, include multiple rows and columns. The preferred product family table stores information about a product family, while the product variant table stores information for a specific product within the product family. Each row in the product family table is a record corresponding to a particular product family, while each product family table column contains information related to the product families. Similarly, each row in the product variant table is a record corresponding to a particular product, while each product variant table column contains information related to the products. Thus, by way of example, a product family table row and associated columns may specify information relating to a shirt line family of products, such as sales information. In contrast, the product variant table row and associated columns may identify a specific shirt model, as well characteristics of the shirt model, such as shirt color or shirt size. The location of the product tables is specified in the registry. In the preferred embodiment, the information stored in the product family table is defined by the storename.sub.-- product.sub.-- family schema, illustrated in Table II-A below. Similarly, in the preferred embodiment, the information stored in the product variant table is defined by the storename.sub.-- product.sub.-- variant schema, illustrated in Table II-B below.
TABLE II-A
______________________________________
PRODUCT FAMILY SCHEMA
Schema: storename.sub.-- product.sub.-- family
Field Name Format
______________________________________
pf.sub.-- id varchar(30) primary key not null
pf.sub.-- name varchar(255) null
pf.sub.-- description
varchar(255) null
dept.sub.-- id int null
size.sub.-- type
varchar(20) null
date.sub.-- intro
datetime null
list.sub.-- price
int not null
sale.sub.-- price
int null
sale.sub.-- start
datetime null
sale.sub.-- end datetime null
image.sub.-- file.sub.-- name
varchar(255) null
______________________________________
In the preferred embodiment, each product family table column has a corresponding schema field associated with it. The storename.sub.-- product.sub.-- family schema fields are defined as follows: "pf.sub.-- id" is the product family identification code; "pf.sub.-- name" is the name of the product; "pf.sub.-- description" is a product description; "dept.sub.-- id" is the identification code of the department which sells the product; "size.sub.-- type" is the product's size type for which there is a corresponding default entry in a shopper table, as will be described in greater detail below. For example, if the product is a shoe, the size.sub.-- type will be "shoe" and there will be a corresponding "size.sub.-- shoe" entry in the shopper table specifying the shopper's shoe size. Therefore, if the shopper orders a shoe, the preferred embodiment will select the shopper's shoe size specified in the shopper table to complete the ordering information. Similarly, the "size.sub.-- type" may specify "shirt" for a shirt order, or "waist" for an order for slacks; "date.sub.-- intro" is the product's first day of sale; "list.sub.-- price" is the product's list price; "sale.sub.-- price" is the product's sale price; "sale.sub.-- start" is the date the sale price goes into effect; "sale.sub.-- end" is the date the sale price is terminated and the list price goes back into effect; "image.sub.-- file.sub.-- name" is the file name of the product image file. Each field is associated with a corresponding column in the product family table.
TABLE II-B
______________________________________
PRODUCT VARIANT SCHEMA
Schema: storename.sub.-- product.sub.-- variant
Field Name Format
______________________________________
pf.sub.-- id varchar(30) not null
sku varchar(30) primary key not null
color.sub.-- value
varchar(20) null
size.sub.-- value
varchar(20) null
______________________________________
In the preferred embodiment, each product variant table column has a corresponding schema field associated with it. The storename.sub.-- product.sub.-- variant schema fields are defined as follows: "pf.sub.-- id" is the product family identification code; "sku" is the product's sku; "color.sub.-- value" is the product's color; "size.sub.-- value" is the product's size. In the preferred embodiment, a product within a product family will have the same value in the pf.sub.-- id column in the product variant table as the corresponding pf.sub.-- id field column entry in the associated product family row in the product family table. Referring to FIG. 4, the preferred embodiment proceeds from state 310 to a merchant information stage 314 which retrieves merchant-specific information from the database 54, 56. Next, a shopper stage 316 retrieves shopper information recorded in a shopper table from one of the databases 54, 56 and stores the information on the order. The shopper table format 1500 is illustrated in FIG. 15. In the preferred embodiment, the shopper table contains shopper identification codes. Each row corresponds to a particular shopper identification code while each column contains information related to the shopper identification code. For example, the preferred shopper table contains a column with the shopper identification code and a column which defines the date the shopper identification code was created. The shopper table is preferably merchant defined and can include a wide variety of information such as columns for the consumer's password and consumer preferences. The location of the shopper table is specified in the registry. A shopper identification stored in the shopper's cookie may be used as the SQL key in retrieving the appropriate shopper information from the shopper table. Alternatively, a shopper password or account number may be used as the SQL key in retrieving the shopper information. The shopper information stored in the shopper table may include the shopper's age, sex, martial status, shopping preferences, membership status and other shopper datum. In the preferred embodiment, the information stored in the shopper table is defined by the storename.sub.-- shopper schema in Microsoft SQL Server.RTM. format, as illustrated in Table III below.
TABLE III
______________________________________
SHOPPER SCHEMA
Schema: storename.sub.-- shopper
Field Name Format
______________________________________
shopper.sub.-- id char(27) unique not null,
created datetime not null,
is.sub.-- member tinyint null,
name varchar(255) null,
street varchar(255) null,
city varchar(20) null,
state varchar(20) null,
zip varchar(10) null,
country varchar(20) null,
phone varchar(16) null,
email varchar(255) unique null,
age tinyint null,
gender tinyint null,
marital.sub.-- status
tinyint null,
salary.sub.-- range
tinyint null,
size.sub.-- shoe varchar(20) null,
size.sub.-- waist varchar(20) null,
size.sub.-- shirt varchar(20) null,
favorite.sub.-- color
varchar(20) null
______________________________________
In the preferred embodiment, each shopper table column has a corresponding schema field associated with it. The storename shopper schema fields are defined as follows: "shipper.sub.-- id is a unique shopper identification code; "created" is the date the shopper identification code was created; "is.sub.-- member" indicates if the shopper is a store member; "name" is the shopper's name; "street", "city", "state", "zip", "country" fully specify the shopper's address; "phone" specifies the shopper's phone number; "email" specifies the shopper's email address; "age" specifies the shopper' age; "gender" specifies the shopper's gender; "marital.sub.-- status" specifies the shopper's marital status; "salary.sub.-- range" specifies the range of salaries within the shopper's salary falls; "size.sub.-- shoe" specifies the shopper's shoe size; "size.sub.-- waist" specifies the shopper's waist measurement; "size.sub.-- shirt" specifies the shopper's shirt size; and "favorite.sub.-- color" specifies the shopper's favorite color. It is understood that the shopper schema could include either less fields or more fields than the schema illustrated in Table III. As an example, the shopper schema could include a shopper preference field "shopper.sub.-- preference" which would specify a favorite type of item the shopper typically purchases. The shopper schema could also include fields for the shopper's social security number, names of children, favorite clothing designer, and so forth. In the preferred embodiment, for each added schema field there would be an additional corresponding shopper table column. Once the shopper information is retrieved in stage 316, the preferred embodiment proceeds to the order initialization stage 320. The order initialization stage 320 copies order information, including the shopper's home address information for later tax calculation and the shipping address to calculate shipping costs, from the database 54, 56 onto the order 120. An order check stage 324 then verifies that the order can be processed by ensuring the order contains all the required elements for continued processing by the order processing pipeline 40. The item price adjust stage 328 and an order price adjust stage 332 are the stages of the purchasing pipeline 132 used to apply promotions to the order. The item price adjust stage 328 has a component name SaleAdjust. The order price adjust stage 332 has a component name DbOrderPromo. A promotion may be in the form of a discount (also called an "award") for all purchased items, i.e., "10% off everything in the store", or a sale price for a particular item, "leather jackets normally $300, on sale at $200", or an award such as "buy a pair of shoes and get a pair of socks for free" or "buy a hat and get a pair of gloves for half price." Furthermore, an order may be eligible for multiple awards or promotions, giving a merchant the ability to optimize his sales strategy. In the preferred embodiment, the item price adjust stage 328 determines for each item on the order 120 if the item may be eligible for a sale price on the day of the order. The item price adjust stage 328 is discussed in greater detail below. An example of an order as received by the item price adjust stage 328 after processing by the preceding stages 310, 314, 316, 320, 324 is illustrated in FIG. 17. The order 1700 includes an order blackboard 1710, an hat item blackboard 1720, a red gloves item blackboard 1730, and a blue gloves item blackboard 1740. As discussed below, the order example illustrated in FIG. 17 is an order 1700 for seven hats, two pairs of red gloves, and two pairs of blue gloves. Once the item price adjust stage 328 is complete, the order price adjust stage 332 applies sophisticated, merchant-generated rules to the order, determining the eligibility of the ordered items for multiple promotions. The order price adjust stage 332 then adjusts the price of each ordered item in accordance with a given promotion. In the preferred embodiment, if the item price adjust stage 328 set an item price to a sale price, then the promotion will be applied to the item using the sale price as the item price. The order price adjust stage 332 is discussed in greater detail below. The preferred embodiment then proceeds to shipping stage 336 which calculates the total shipping charge for the order. Similarly, a handling stage 340 calculates the total handling charge for the order. A tax stage 344 then calculates the total tax for the order. An order total stage 348 computes that total charge for the order. An inventory stage 352 verifies that every ordered item is in stock. A payment stage 356 is used to approve credit-card payments. An accept stage 360 handles the completed order and passes a message that the order to be fulfilled. IV. Implementation Of The Promotion Stages The preferred embodiment of the present invention provides a unique system and method for providing merchandising promotions over publicly accessible on-line networks 24. In general, the promotions offered by a merchant can include temporary sale pricing, volume discounts, membership discounts and cross-purchasing awards. A cross-purchasing promotion in the preferred embodiment, is an incentive which offers a discount or award on a first product type, such as a pair of gloves, when the shopper purchases a second product type, such as a hat. A. The Item Price Adjust Stage In the preferred embodiment, the item price adjust stage 328 applies simple discounts, such as a sale price, to an item on the order, without reference to any other item on the order or the quantity of the item ordered. For example, the promotions which are applied by the item price adjust stage 328 may include the following promotion: "Brand X hat, normally $11, on sale at $9". FIG. 11 is a flowchart illustrating the item price adjustment process in the preferred embodiment of the present invention. The item price adjust stage 328 reads the order 120 and for each item determines if the item is eligible for a sale price. Beginning at state 1100, the preferred embodiment proceeds to state 1110. The first item on the order is selected. Proceeding to state 1120, the preferred embodiment examines the sale.sub.-- price column entry of the product table row associated with the item, to determine if there is a sale price defined for the item. If there is a sale price defined, the preferred embodiment proceeds to state 1130, which compares the current date of the item against the dates specified in the sale.sub.-- start and sale.sub.-- end fields. If the current date falls between the sale.sub.-- start and sale.sub.-- end dates, then the sale price is used as the current price for the item. Hence, the key-value current.sub.-- price is set equal to the sale price. Thus, using the order illustrated in FIG. 17 as an example, referring to the hat item blackboard 1720, if the current date is between 10-01-1999, the date specified by the sale.sub.-- start entry, and 3-1-2000, the date specified by the sale.sub.-- end entry, then the current price current.sub.-- price of the hat item is set equal to the sale.sub.-- price entry of $9. (In the examples described below, the current.sub.-- value of the hat item is assumed to be $9) Otherwise, if the current date does not fall within the range of the sale.sub.-- start and sale.sub.-- end dates, then the price specified in the list.sub.-- price field is used as the current price for the item. Hence, in this situation, the key-value current.sub.-- price is set equal to the list price. If, instead, there is no sale price specified in the sale.sub.-- price field, then the preferred embodiment proceeds directly from state 1120 to state 1150. Similarly, if the current date does not fall within the range of the sale.sub.-- start and sale.sub.-- end dates, then the preferred embodiment proceeds directly from state 1130 to state 1150. In both the aforementioned cases, the price specified in the list.sub.-- price field is used as the item price. Thus, using the order example illustrated in FIG. 17, since the red glove item blackboard 1720 and the blue glove item blackboard 1730 do not have sale start dates then the current price current.sub.-- price of the red glove item is set equal to the corresponding list.sub.-- price of $5, and the current price current.sub.-- price of the blue glove item is set to the corresponding list.sub.-- price of $6. In another preferred embodiment, multiple simple promotions may be applied by the item price adjust stage 328. In this embodiment, the item will be evaluated to determine its eligibility for each promotion. If the item is eligible for a promotion, then the current.sub.-- price is set equal to the promotion price. If, however, the item is not eligible for any promotion, the current.sub.-- price value is left blank by each promotion. In this case, the item price adjust stage 328 sets the current.sub.-- price value equal to the list.sub.-- price value before the preferred embodiment proceeds to the next stage in the order pipeline 132. In state 1150 a determination is made if there are unevaluated items remaining on the order blackboard. If there are unevaluated items remaining, the preferred embodiment loops back to state 1110. Otherwise, the preferred embodiment proceeds to state 1160. B. The Order Price Adjust Stage The operation of the order price adjust stage 332 will now be described. The order price adjust stage 332 applies complex promotions to the order, taking into account shopper information, the quantity or dollar values of the items ordered, the types of items ordered, and so on. Furthermore, the order price adjust stage 332 permits the merchant to offer cross-purchasing incentives, such as "buy a pair of shoes and get a pair of socks for free". In the preferred embodiment, the order price adjust stage 332 retrieves a merchant-defined promotion table stored in one of the merchant system databases 54, 56. The promotion table contains rows and columns. The table contains merchant generated rules for applying promotions. FIG. 16 illustrates a preferred embodiment of the promotion table format 1600. Each row of the promotion table 1600 advantageously represents a different promotion, while the columns represent fields associated with, and defining the promotions. Table IV, below, defines in Microsoft SQL Server.RTM. format a promotion table schema, including the field associated with each column of the promotion table in the preferred embodiment. Once the promotion table has been retrieved, the field entries are used by order price adjust stage 332 in applying the promotions to the order, as described below.
TABLE IV
__________________________________________________________________________
PROMOTION TABLE
Column Name
Format Description
__________________________________________________________________________
promo.sub.-- id
int primary key
Unique id of this entry.
promo.sub.-- name
varchar(255) unique
Name for the promotion.
promo.sub.-- description
text Description of the promotion that will be shown to
shoppers.
promo.sub.-- rank
int Rank of this promotion; this determines the order in
which the promotion will be applied to the
purchase. The higher the rank, the sooner it will be
applied. When a promotion has been applied, any
product in either the condition set or the award set
is removed from further consideration for additional
promotions.
active tinyint A code indicating whether or not this promotion is
currently active; this is a convenience to the
merchant that enables them to keep promotions in
the system without having them be active.
date.sub.-- start
datetime The date at which the promotion goes into effect.
date.sub.-- end
datetime The date until which the promotion is in effect.
shopper.sub.-- all
int Indicates whether or not this promotion is available
to all shoppers.
shopper.sub.-- column
varchar(64)
If shopper.sub.-- all is false, then shopper.sub.--
column
specifies which field in the shopper record will be
used to determine whether a shopper is eligible for
the promotion.
shopper.sub.-- op
varchar(2)
If shopper.sub.-- all is false, then shopper.sub.-- op
will be used
as the operand in the comparison to determine
whether a shopper is eligible for the promotion; it
will be one of ">", "<", "=", ">=", "<=", "!=".
shopper.sub.-- value
varchar(64)
If shopper.sub.-- all is false, then shopper.sub.--
value will be
used as the reference value in the comparison to
determine whether a shopper is eligible for the
promotion.
cond.sub.-- all
int If cond.sub.-- all is true, then any product in the set
of
products to be purchased will trigger this promotion.
cond.sub.-- column
varchar(64)
If cond.sub.-- all is false, then cond.sub.-- column
specifies
which field in the product record will be used to
determine whether a product will trigger this
promotion.
cond.sub.-- op
varchar(2)
If cond.sub.- all is false, then cond.sub.- op will be
used as
the operand in the comparison to determine whether
a product will trigger the promotion; it will be one
of ">", "<", ">=", "<=", "!=".
cond.sub.-- value
varchar(64)
If cond.sub.-- all is false, then cond.sub.-- value
will be used as
the reference value in the comparison to determine
whether a product will trigger the promotion.
cond.sub.-- basis
char(1) This determines what to use as the basis for
calculating eligibility for the promotion. It will be
either "Q", which means a minimum number of
units must be purchased, or "P", which means that a
minimum dollar amount must be purchased.
cond.sub.-- min
int This specifies the minimum number of units or the
minimum dollar amount that must be purchased to
trigger the promotion.
award.sub.-- all
int If this is true, then the award can be applied to any
product.
award.sub.-- column
varchar(64)
If award.sub.-- all is false, then award.sub.-- column
specifies
which field in the product record will be used to
determine whether a product is eligible to be the
target of the award.
award.sub.-- op
varchar(2)
If award.sub.-- all is false, then award.sub.-- op will
be used as
the operand in the comparison to determine whether
a product is eligible to be the target of the
promotion; it will be one of ">", "<", "=", ">=",
"<=", "!=".
award.sub.-- value
varchar(64)
If award.sub.-- all is false, then award.sub.-- value
will be used
as the reference value in the comparison to
determine whether a product will be eligible as the
target of the promotion.
award.sub.-- max
int Indicates the maximum number of products in the
award set that are eligible to be the target of the
award.
disc.sub.-- type
char(1) A value that is either "$", indicating a fixed dollar
amount off, or "%", indicating a percentage off.
disc.sub.-- value
decimal(8,2)
The amount of the discount, either as amount off or
as percentage off.
__________________________________________________________________________
Table V illustrates an example of a hat promotion using the schema illustrated in Table IV. The promotion has a promotion identification promo.sub.-- id equal to "999". The promotion name promo.sub.-- name is "Hat promotion", and the promotion description promo.sub.-- description is "buy two hats and get a pair of gloves at half the current price!". The hat promotion may be just one of multiple promotions in a corresponding promotion table. The hat promotion illustrated in Table V is used below to illustrate a preferred embodiment of the present invention.
TABLE V
______________________________________
HAT PROMOTION
Column Name Value
______________________________________
promo.sub.-- id
999
promo.sub.-- name
Hat promotion
promo.sub.-- description
Buy two hats and get a pair of gloves at
half the current price!
promo.sub.-- rank
1
active 1
date.sub.-- start
12-01-1999
date.sub.-- end
01-31-2000
shopper.sub.-- all
0
shopper.sub.-- column
is.sub.-- member
shopper.sub.-- op
>
shopper.sub.-- value
0
cond.sub.-- all
0
cond.sub.-- column
sku
cond.sub.-- op
=
cond.sub.-- value
1234
cond.sub.-- basis
Q
cond.sub.-- min
2
award.sub.-- all
0
award.sub.-- column
dept.sub.-- id
award.sub.- op
=
award.sub.-- value
11111
award.sub.-- max
1
disc.sub.-- type
%
disc.sub.-- value
50
______________________________________
FIG. 4 is a high level flow chart illustrating the sequence of states occurring in the preferred embodiment of the order price adjust promotion stage 332. Beginning in a start state 400, the preferred embodiment proceeds to state 410. In state 410, a consideration set of all products to be considered for promotions is initialized to the complete set of items being on the order. The consideration set 1830, as well as a condition set 1810, and an award set 1820, are used to apply promotions to an order, as described below. In the preferred embodiment, the consideration set 1830, the condition set 1810, and the award set 1820, reside in memory 1800, as illustrated in FIG. 18. The consideration set is the set of order items that are evaluated when applying a promotion. Thus, initially all items on the order 120 are included in the consideration set for determining their eligibility for promotions. Using the order example illustrated in FIG. 17, the consideration set initially includes all items on the order (7 hats, 2 pairs of red gloves, and 2 pairs of blue gloves). After the consideration set is initialized, the preferred embodiment performs an SQL query, retrieving the promotion table records describing a given store's promotions, from the appropriate store database. Proceeding to state 420, a subset of the promotions within the promotion table are selected for further evaluation, and the selected promotions are sorted in the manner described below. Referring now to FIG. 5, a detailed flow chart further illustrates the selection and sorting process of state 420. Beginning in state 500, the preferred embodiment proceeds to state 510 where promotions, whose "active" column entry indicates are active, are selected. If the entry in the "active" column is a greater than zero, then the promotion is active and the promotion is selected. Thus, for example, the hat promotion illustrated in Table V would be selected, since its "active" column entry is set to a "1". If the "active" column entry is set to a "0", then the promotion is not active and hence is not selected. In the preferred embodiment, the active column entry has been set by the merchant using an administrative promotion form described below to indicate which promotions should be selected. Proceeding to state 520, the date of the purchase is compared to the respective start date, from the promotion table date.sub.-- start column, and the respective end date, from the promotion table date.sub.-- end column, of each selected promotion. If the current date falls within the start and end dates of a given promotion, then that promotion is selected for further consideration. Thus, using the hat promotion illustrated in Table V as an example, if the order is placed on Jan. 1, 2000, since the start date of the hat promotion is Dec. 1, 1999, and the end date of the hat promotion is Jan. 31, 2000, then the current date falls between the promotion start and stop date. Therefore, the hat promotion will be selected. If, instead, the order is placed on Jan. 1, 2000 and the start date of a given promotion is Jan. 15, 2000 and the end date of the promotion is Jan. 31, then the current date falls outside of the promotion start and stop dates. Therefore, that promotion will be not selected. Proceeding to state 530, the remaining selected promotions are sorted in ascending order based on the merchant-specified integer rank entry in the promo.sub.-- rank column of each of the selected promotions. In the preferred embodiment, the promotion with the lowest numerical rank number is the highest ranking promotion. Thus, for example, the hat promotion illustrated in Table V, would be the highest ranked promotion in a promotion table as it has a rank entry of "1" in the promo.sub.-- rank column. The preferred embodiment then proceeds to the return state 540. Referring to FIG. 4, once state 420 is completed, the preferred embodiment proceeds to state 430. Each promotion in the promotion table is evaluated to determine if the shopper is eligible for the promotion. Referring to the schema illustrated in Table IV, four entries associated with four column data fields from the promotion table define shopper eligibility. The four column data fields include: the shopper.sub.-- all field, the shopper.sub.-- column field, the shopper.sub.-- op field, and the shopper.sub.-- value field. First, the shopper.sub.-- all data field for each promotion is examined. If the shopper.sub.-- all entry indicates that all shoppers are eligible for the promotion, then that promotion is selected for further evaluation. Otherwise, shopper eligibility for each promotion is determined by evaluating the corresponding entries in the shopper.sub.-- column field, the shopper.sub.-- op field, and the shopper.sub.-- value field using Equation 1, as follows: Shopper is eligible if: (1) shopper[shopper.sub.-- column] shopper.sub.-- op shopper.sub.-- value=true Equation 1 compares the value specified by the shopper column entry with the shopper.sub.-- value entry, using the operator specified in the shopper.sub.-- op entry. The shopper.sub.-- column field specifies which field in the shopper record (See Table III) will be used in the above comparison to determine shopper eligibility for the promotion. The shopper.sub.-- value field entry will be used as a reference value in the comparison for the shopper eligibility determination. The shopper.sub.-- op field specifies the operand (>, <, -, >=, <=, !=, in the preferred embodiment) used in the comparison for the shopper eligibility determination. In an alternate embodiment, shopper eligibility is determined using a more complex equation than that illustrated by Equation 1, using boolean functions, such as AND, OR, XOR operators, as well as other mathematical functions. Those promotions for which the shopper is eligible are selected for further evaluation. If, as in the hat promotion example illustrated in Table V, the merchant wishes to restrict shopper eligibility for the promotion to only those shoppers who have a store membership, the merchant would set the column data field entries from the promotion table defining shopper eligibility as follows: the shopper.sub.-- column entry would be set to specify the membership field, "is.sub.-- member," of the shopper record. Any value greater than zero in the "is.sub.-- member" field indicates the shopper is a store member. The shopper.sub.-- value field entry would be set to specify a "0" as the reference field, and the shopper.sub.-- op field entry would be set to specify the ">" operator. Therefore, a shopper is eligible for the promotion only if the value stored in the shopper record membership field, "is.sub.-- member", is greater than "0", indicating the shopper is a member. Thus, for example, the order illustrated FIG. 17, meets the shopper criteria as the shopper.sub.-- id entry in the order blackboard 1710 is equal to "1". In another example, a promotion could be restricted to one specific shopper by setting the column entries as follows: the shopper.sub.-- column entry is set to specify the membership number field "shopper.sub.-- id", the shopper.sub.-- value entry is set to "1000". If the shopper.sub.-- op field entry is the "=" operator, then only a shopper having the unique membership number of "1000" would be eligible for the promotion. If, instead, in this example, the shopper.sub.-- op entry is the "<" operator, then only those shoppers whose membership number is less than 1000 would be entitled to the discount. Thus, a promotion can be easily restricted to members of long duration, i.e., those members with low membership numbers. In another example, the merchant of a record store may want to target a promotion only at regular purchasers of jazz albums. In this case the shopper.sub.-- column entry could specify a shopper preference field "shopper.sub.-- preference" in the shopper record. In this example, the shopper.sub.-- value is set to "jazz". If the shopper.sub.-- op field entry is the "=" operator, then only a shopper having the shopper.sub.-- preference field equal to "jazz" would be eligible for the promotion. Thus, a promotion could be restricted to jazz music lovers. Accordingly, in the preferred embodiment, a merchant can advantageously target feature products to specific customers based on a variety of criteria, including store membership, geographical location, demographic information such as gender and age, or shopper preferences, such as favorite musical genres. A merchant has complete flexibility in specifying numerous criteria, beyond the aforementioned categories, in defining shopper eligibility. Once all the promotions in the promotion table have been evaluated for shopper eligibility, the preferred embodiment proceeds to state 440. In state 440 the highest ranked selected promotion which has not yet been applied to the order is now applied. For example, the hat promotion illustrated in Table V has a rank of "1", thus it would be the first promotion to be applied. As will be described in greater detail below, the order is evaluated, and if the order meets promotion eligibility requirements, then appropriate awards are granted on corresponding items in the order. Any items from the order which have been used to qualify for an award or had an award applied to them may be preferably removed from the consideration set as described below. Note, that in the preferred embodiment, the application of a sale price to an item in the item price adjust stage 328 does not act to remove the product from the consideration set. In another embodiment, the merchant may specify that items used to qualify for an award or had an award applied to them may remain in the consideration set, as described below. The order price adjust stage 332 then proceeds from state 440 to state 450 where it determines if the consideration set is empty. If the consideration set is empty, and thus there are no items on the order which may be eligible for promotions, the price adjust stage 332 proceeds to state 462. If, instead, there are items remaining in the consideration set, then the preferred embodiment proceeds to state 460 which determines if there are unapplied promotions remaining in the promotion table. If there are no unapplied promotions remaining, the preferred embodiment proceeds to state 462. If, however, there are unapplied promotions remaining in the promotion table, then the preferred embodiment loops back to state 440, where the highest ranked unapplied promotion is now applied. The values, n.sub.-- condition and n.sub.-- award, will be initialized to zero before they are used by the promotion. The order price adjust stage 332 will loop from state 440 through state 460 until there are either no items remaining in the consideration set or no remaining unapplied promotions. Referring now to FIG. 6, a detailed flow chart of one preferred embodiment further illustrates the promotion application process of state 440. Beginning in state 600, the preferred embodiment proceeds to state 610. State 610 evaluates whether items in the consideration set satisfy condition criteria as defined in the promotion table and are therefore eligible to trigger a promotion and earn an award. If an item from the consideration set satisfies the condition criteria, the item is placed in the condition set. The condition set includes all those order items meeting the criteria for triggering the promotion under consideration. Referring now to FIG. 7, a detailed flow chart further illustrates the criteria evaluation process of state 610. Beginning in state 700, the preferred embodiment proceeds to state 710. An order item which has not yet been evaluated using the promotion condition set criteria is selected from the consideration set. Proceeding to state 720, the item is evaluated using the promotion table criteria to determine the item's eligibility in triggering the promotion. Referring to the schema illustrated in Table IV, six entries associated with six column data fields from the promotion table define the condition criteria. The six column data fields include: the cond.sub.-- all field, the cond.sub.-- column field, the cond.sub.-- op field, the cond.sub.-- value field, the cond.sub.-- basis field, and the cond.sub.-- min field. First, the cond.sub.-- all data field for each promotion is examined. If the cond.sub.-- all entry indicates that all items are eligible for the promotion, then the preferred embodiment proceeds to state 730, and all items in the consideration set are placed in the condition set. Otherwise, the entries in the cond.sub.-- column field, the cond.sub.-- op field, and the cond.sub.-- value field must be evaluated using Equation 2 to determine if the item may be placed in the condition set: Place item in condition set if: (2) product[cond.sub.-- column] cond.sub.-- op cond.sub.-- value=true Equation 2 compares the value specified by the cond.sub.-- column entry with the cond.sub.-- value entry, using the operator specified in the cond.sub.-- op entry. The cond.sub.-- column field specifies which field in the product record, as defined by the record schema illustrated in Table I, will be used in the above mentioned comparison to determine whether an item will trigger the promotion. The cond.sub.-- value field entry will be used as a reference value in the comparison. The cond.sub.-- op field specifies the operand (>, <, -, >=, <=, !=) used in the comparison. In an alternate embodiment, the condition set is determined using a more complex equation than that illustrated by Equation 2, using boolean functions, such as AND, OR, XOR operators, as well as other mathematical functions. Proceeding to state 730, those items which satisfy the Equation 2 are placed in the condition set. Using the condition criteria, the merchant can advantageously limit triggering of the promotion, for example, to cases where the shopper buys a specific product with a sku equal to the specified reference field entry. Thus, as in the hat promotion example illustrated in Table V, if the merchant desires to trigger the promotion only when the shopper orders a hat having a sku equal to "1234", he would set the cond.sub.-- column field to specify the sku column of the product record, the cond.sub.-- value field to specify "1234" as the reference field, and the cond.sub.-- op field to specify "=". Therefore, an ordered item meets the condition criteria only if the value stored in the product's sku field equals "1234". Applying the hat promotion, illustrated in Table V, to the order illustrated in FIG. 17, only the hat item blackboard 1720 has a sku equal to "1234" and thus only the hat item meets the hat promotion's condition criteria. The red gloves item blackboard 1730 and the blue gloves item blackboard have skus equal to "5678" and "5679" respectively, and hence do not meet the hat promotion's condition criteria. In another example, if the merchant desires to restrict the triggering of the promotion to cases where the shopper purchases an item from a specific department, such as for example a music department, he would set the cond.sub.-- column field to specify the department field, "dept.sub.-- id", of the product record, the cond.sub.-- value field to specify the music department's identification number, "456" in this example, as the reference field, and the cond.sub.-- op field to specify "=". Therefore, an ordered item meets the condition criteria for triggering the promotion only if it is purchased from the music department. If an item meets the condition criteria the preferred embodiment proceeds to state 730, where the item is placed in the condition set, and then proceeds to state 740. Otherwise, the preferred embodiment proceeds directly from state 720 to state 740. State 740 determines if there are any items remaining the consideration set which have not yet been evaluated using the condition criteria. If there are unevaluated items remaining in the consideration set, then the preferred embodiment loops back to state 710 so that the remaining items may be evaluated. If, instead, there are no unevaluated items remaining in the consideration set, then the preferred embodiment proceeds to state 750. Referring to FIG. 6, the preferred embodiment proceeds from state 610 to state 630 and state 640. In state 630 an award size is calculated based on the items in the condition set and upon entries in the promotion table, as described below. In state 640 each item in the consideration set is evaluated using award criteria to determine if the item may be eligible to receive an award or discount calculated in stage 630. Referring now to FIG. 9, a detailed flow chart further illustrates the preferred embodiment of the award calculation process of state 630. Beginning in state 900, the preferred embodiment proceeds to state 910. State 910 evaluates the cond.sub.-- basis field entry of the promotion table. The condition.sub.-- basis field specifies whether the basis for calculating promotion eligibility is based on a minimum number of item units which must be purchased or whether a minimum dollar amount of items must be purchased. If the promotion eligibility is based on quantity, then the cond.sub.-- basis field entry will be set to a "Q". If the promotion eligibility is based on a minimum dollar amount, the cond.sub.-- basis entry is set to a "P". If the cond.sub.-- basis entry is set to a "Q", for quantity, as is the case in the hat promotion example illustrated in Table V, the preferred embodiment proceeds to state 930. State 930 calculates the variable "Condition Basis Value" for each item, which is equal to the sum of the n.sub.-- unadjusted value of each item in the condition set. The key-value n.sub.-- unadjusted represents the quantity of the corresponding item which has not yet been used in triggering an award or in receiving an award. Thus, for example, applying the hat promotion to the order illustrated in FIG. 17, since only the hat item is in the condition set, the "Condition Basis Value" is equal to the value of n.sub.-- unadjusted for the hat item, which is 7. If, instead, the cond.sub.-- basis entry is set to a "P", for price, the preferred embodiment proceeds to state 920. State 920 calculates a variable "Condition Basis Value" for each item which is equal to the sum of the product of the current price of each item in the condition set and the value of n.sub.-- unadjusted corresponding to each item. Once the variable "Condition Basis Value" is calculated, the preferred embodiment proceeds to state 940, where the variable "Award Size", representing the award size, is calculated. In the preferred embodiment, the "Award Size" variable is set equal to the integer value of the division of the "Condition Basis Value" variable by a "Condition Value" variable, as illustrated in Equation 3. The "Condition Value" variable is equal to the cond.sub.-- min field entry in the promotion table, which appropriately specifies either the minimum number of units or the minimum dollar amount of items in the condition set which must be purchased to trigger the promotion. Award Size=integer value of (Condition Basis Value/Condition Value) (3) Thus, by setting the award size equal to the integer value of the division of the "Condition Basis Value" variable by the "Condition Value" variable, the merchant is assured that the award size is rounded down to the nearest integer value. This prevents a shopper from receiving an award greater than he is entitled to. In another embodiment, the award size may be rounded up to the nearest integer value, ensuring that the shopper will receive the maximum possible award. In still another embodiment, the merchant may select whether the award size may be rounded up or down to the nearest integer number. In the preferred embodiment, the award size is stored in a data structure which may reside in memory. An example of the award size calculation will now be described using the order illustrated in FIG. 17 and the hat promotion illustrated in Table V. As calculated above, the "Condition Basis" is equal to the value of n.sub.-- unadjusted of the hats, which is this example equals 7. In the hat promotion example illustrated in Table V, the cond.sub.-- min field entry is equal to 2. The award size is as follows: Award Size=The integer value of (7/2) Which, when evaluated, sets the award size equal to 3. Once the award size is calculated, the preferred embodiment proceeds to state 950. Referring now to FIG. 8, a detailed flow chart further illustrates a preferred embodiment of the award criteria evaluation process of state 640 in FIG. 6. Beginning in state 800, the preferred embodiment proceeds to state 810. An item which has not yet been evaluated against the promotion award set criteria is selected from the consideration set. Proceeding to state 820, the item is then evaluated using the promotion award criteria from the promotion table for the promotion currently being considered. A determination is made of the item's eligibility to receive the award for the promotion being considered. As illustrated in Table IV, four entries associated with four column data fields from the promotion table define the award criteria. The four data fields include: the award.sub.-- all field, the award.sub.-- column field, the award.sub.-- op field, and the award.sub.-- value field. First, the award.sub.-- all data field for the promotion being considered is examined. If the award.sub.-- all entry indicates that all items are eligible to be the target of the award, then, proceeding to state 830, the selected item is automatically placed in the award set. The award set includes all those order items eligible to receive an award. An item may be both in the award set and the condition set. Thus, for example, if the promotion is "buy two pairs of shoes, get one pair of shoes at half price", then shoes may be in the condition set, i.e., the shoes trigger the promotion and earn awards, and the shoes may be in the award set, i.e., the shoes are target of the award. If the award.sub.-- all entry indicates that all items are not eligible to be the target of the award, the entries in the award.sub.-- column field, the award.sub.-- op field, and the award.sub.-- value field must be evaluated using Equation 4, below, to determine if the item may be placed in the award set: Place item in award set if: (4) product[award.sub.-- column] award op award.sub.-- value=true Equation 4 compares the value specified by the award.sub.-- column entry with the award.sub.-- value entry using the operator specified in the award.sub.-- op entry. The award.sub.-- column field specifies which field in the product record will be used in the comparison to determine whether an item is eligible to receive a promotion. The award.sub.-- value field entry will be used as a reference value in the comparison. The award.sub.-- op field specifies the operand (>, <, -, >=, <=, !=) used in the comparison. In an alternate embodiment, the award set is determined using a more complex equation than that illustrated by Equation 4, using boolean functions, such as AND, OR, XOR operators, as well as other mathematical functions. Those items which satisfy the Equation 4 are placed in the award set in state 830. In applying the promotion under consideration, the type of award or discount is determined before the award is applied. The award is defined by the disc.sub.-- type field and the disc.sub.-- value field of the promotion table illustrated in Table IV. The disc.sub.-- type field specifies whether the award is a fixed dollar amount off the product receiving the award, or a percentage off the price of the product receiving the award. The disc.sub.-- value field specifies the amount of the discount, either as a percentage or as a dollar amount. The promotion table's award.sub.-- max field specifies the maximum number of products in the award set that are eligible to be the target of the award. Using the award criteria, the merchant can limit the granting of awards, for example, to a specific product. If, as for the hat promotion illustrated in Table V, the merchant desires to target an award only to a product from a specific department, such the glove department, having a dept.sub.-- id of "111111", he sets the award-related field entries as follows: the award.sub.-- column field is set to specify the department identification code "dept.sub.-- id", the award.sub.-- op field is set to "=", and the award reference field award.sub.-- value is set to "11111". Thus, a item may receive an award only if it has a dept.sub.-- id entry equal to "11111". Applying the hat promotion illustrated in Table V to the order illustrated in FIG. 17, both the red glove and blue glove items 1730, 1740 have a dept.sub.-- id equal to "11111", and thus both the red glove and blue glove items may receive awards. In contrast, the hat item has a dept.sub.-- id equal to "55555" and thus does not meet the award criteria. Therefore, the hat item is not eligible to receive an award. If an item meets the award criteria, the preferred embodiment next proceeds to state 830, where the item is placed in the award set. Applying the hat promotion illustrated in Table V to the order illustrated in FIG. 17, both the red glove and blue glove items are placed in the award set. The preferred embodiment then proceeds to state 840. If the item being considered does not meet the award criteria, the preferred embodiment proceeds directly from state 820 to state 840. State 840 determines if there are any items remaining in the consideration set which have not yet been evaluated using the award criteria. If there are unevaluated items remaining in the consideration set, then the preferred embodiment loops back to state 810 so that the item may be evaluated using the award criteria. If, instead, there are no unevaluated items remaining in the consideration set, then the preferred embodiment proceeds to state 850. Once the award set is determined, the preferred embodiment proceeds to state 642. In state 642 the target count is calculated. The target count is equal to the sum of the value of n.sub.-- unadjusted (the quantity of each item which has not been the target of an award and which has not earned awards which have been applied) for each item in the award set, divided by the award.sub.-- max entry. The result of the calculation is then rounded-up to the nearest integer, ensuring the order items receive the appropriate award, as illustrated in Equation 5: Target Count=rounded-up(n.sub.-- unadjusted.sub.-- award.sub.-- max) (5) The award.sub.-- max entry indicates the maximum number of items which may receive a discount for each award earned. Thus, for example, applying the hat promotion to the order illustrated in FIG. 17, since only the red gloves item and the blue gloves item is in the award set, the target count is equal to the sum of n.sub.-- unadjusted (2) for the red glove item and the n.sub.-- unadjusted for the blue glove item (2), divided by the award.sub.-- max value (1), for a total target count of 4. Referring to FIG. 6, once the award size has been calculated and the award set determined, the preferred embodiment proceeds to state 660 where the promotion award is applied to the order. Referring to FIG. 10A, a detailed flow chart further illustrates the award application process of state 660. As represented in the sample order illustrated in FIG. 17, each order item blackboard 1720, 1730, 1740 has a corresponding key-value pair n.sub.-- unadjusted associated with it. The key-value n.sub.-- unadjusted represents the quantity of the corresponding item which has not yet been used in triggering an award or in receiving an award. An n.sub.-- unadjusted value of zero indicates that the entire quantity of the corresponding item has already been used in triggering an award or in receiving an award during the application of the current promotion or during the application of a higher ranked promotion. As, in the preferred embodiment an item may only be used once to trigger an applied award or to receive an award, an item with an n.sub.-- unadjusted of zero may not be used to trigger or receive additional awards. Therefore, before the order is processed by the order pipeline 132, and thus before any awards have been applied, the key-value pair n.sub.-- unadjusted is set to the value of the quantity key-value pair of the item ordered, indicating no award has yet been applied and that every item may be used to trigger or receive awards. Thus, the key-value pair n.sub.-- unadjusted for the hat item is set equal to 7, the key-value pair n-unadjusted for the red glove item is set equal to 2, and the key-value pair n.sub.-- unadjusted for the blue glove item is set equal to 2. Thereafter, during the process of applying promotions, the value n.sub.-- unadjusted is varied appropriately to represent the unused quantity or value of the corresponding item which may be eligible to trigger lower ranked promotions or to receive awards, as described below. Each order item also has a corresponding key-value pair adjusted.sub.-- price associated with it. As discussed above, the key-value pair adjusted.sub.-- price is initialized to $0 for each item before the order is processed by the order pipeline 132. The key-value pair adjusted.sub.-- price represents the total price for the quantity of a corresponding item which has had an award applied to it plus the total price for the quantity of the corresponding item for which there is no award available to be applied. Thus, the key-value pair adjusted.sub.-- price is set to $0 before the order is processed by the order pipeline 132, as no award has yet been applied and thus no item price has been adjusted. Table VI illustrates a subset of the key-value pairs associated with each item blackboard 1720, 1730, 1740 from the example order illustrated in FIG. 17. The order illustrated in FIG. 17 includes seven hats with a current price of $9 (after the sale price has been applied in stage 328), two pairs of red gloves with a current price of $5, and two pairs of blue gloves with a current price $6. Each item has had their corresponding key-value pairs, n.sub.-- unadjusted, adjusted.sub.-- price, initialized as described above. Therefore, n.sub.-- unadjusted of each item is set equal to the corresponding item quantity, and adjusted.sub.-- price of each item is set to $0. Furthermore each item has its current price and the quantity ordered, entered. Tables VI-IX illustrate an example of the application of the hat promotion to the order illustrated in FIG. 17 in accordance with the preferred embodiment of the present invention, as described below. The hat promotion illustrated in Table V is "buy two hats and get a pair of gloves at half the current price".
TABLE VI
__________________________________________________________________________
Item #
Item current.sub.-- price
quantity
n.sub.-- unadjusted
adjusted.sub.-- price
__________________________________________________________________________
1 Hats $9.00 7 7 $0.00
2 Red Gloves
$5.00 2 2 $0.00
3 Blue Gloves
$6.00 2 2 $0.00
__________________________________________________________________________
As discussed above, the condition set for the present example includes only Item 1, the hats, as only the hats meet the condition criteria specified in the hat promotion. As illustrated above, the award set includes Item 2 and Item 3, the red gloves and the blue gloves respectively, as only the red and blue gloves meet the award set criteria specified in the hat promotion. Since the condition basis type for this promotion is quantity ("buy two hats and get a pair of gloves. . ."), the condition basis "Condition Basis Value" is, as discussed above, equal to the n.sub.-- unadjusted value of the hat item, 7. As previously described, the condition value is the minimum amount needed to qualify for an award. The condition value is set to 2 in the cond.sub.-- min entry of the hat promotion illustrated in Table V. Using Equation 4, the award size is calculated as follows: Award Size=The integer value of (7/2) The above calculation results in an award size equal to 3. Therefore, the shopper is entitled to three half-price pairs of gloves. Proceeding to state 1002, a promotion count is determined. The promotion count represents the number of awards that will be applied to the order by the promotion being considered. In the preferred embodiment, the promotion count is equal to the lesser of the award size or the target count. If the award size and target count have the same value, then the product count is set to that value. Thus, in the preferred embodiment, the award being applied to an order may not exceed the value of the target count, representing the quantity of items which have not yet received an award or been used to trigger an award, divided by the award.sub.-- max entry. Similarly, in the preferred embodiment, an order may not receive an award greater than the award size, representing the quantity of unapplied awards. Considering again the application of the hat promotion illustrated in Table V to the sample order illustrated in FIG. 17, the previously calculated award size for the order is 3, and the previously calculated target count is 4. Since the award size is smaller than the target count, the promotion count is set equal to the award size of 3. Proceeding to state 1004 a condition limit is calculated. The condition limit represents the maximum possible adjustment to the n.sub.-- unadjusted values of the condition set items by the promotion under consideration. Thus, the condition limit represents the maximum possible number of condition set items which were used to earn awards which will be actually applied to award set items, as discussed below. The condition limit is equal to the promotion count multiplied by the cond.sub.-- min value. Considering again the application of the hat promotion illustrated in Table V to the sample order illustrated in FIG. 17, the previously calculated promotion count for the order is 3, and the cond.sub.-- min value, from Table V, is 2. Thus, using the equation illustrated in state 1004, the condition limit is: Condition Limit=2.times.3 Thus, the condition limit is 6 in this example. Proceeding to state 1006, an award limit is calculated. The award limit represents the maximum possible adjustment to the n.sub.-- unadjusted values of the award set items by the promotion under consideration. Thus, the award limit represents the maximum possible number of award set items which actually may have awards applied to them by the promotion under consideration, as discussed below. The award limit is equal to the promotion count multiplied by the award.sub.-- max value. Considering again the application of the hat promotion illustrated in Table V to the sample order illustrated in FIG. 17, the previously calculated promotion count for the order is 3, and the award.sub.-- max value, from Table V, is 1. Thus, using the equation illustrated in state 1006, the award limit is: Award Limit=3.times.1 Thus, the award limit is 3 in this example. Proceeding to state 1008, the condition limit count is distributed over the condition set item, thereby determining which condition set items will have their n.sub.-- unadjusted value adjusted, as explained below. Referring to FIG. 10B, a detailed flow chart further illustrates the condition limit count distribution process of state 1008. Beginning in state 1020, the preferred embodiment proceeds to state 1022. In the preferred embodiment, the most expensive unevaluated condition set item with an n.sub.-- unadjusted value greater than zero is selected. Proceeding to state 1024, a determination is made as to whether the value of n.sub.-- unadjusted for the selected item is greater than the condition limit. If the value of n.sub.-- unadjusted is greater than the condition limit, the preferred embodiment proceeds to state 1026. In state 1026, a variable n.sub.-- condition is set equal to the condition limit. The variable n.sub.-- condition represents the amount of the selected condition set item which will be "used-up," or exhausted, when an award is applied to an award set item. Thus, if an item is not in the condition set, it will have an n.sub.-- condition value of zero. If the value of n.sub.-- unadjusted is less than the condition limit, the preferred embodiment proceeds from state 1024 to state 1028. In state 1028, the variable n.sub.-- condition is set equal to the value of n.sub.-- unadjusted for the selected item. Thus, in the preferred embodiment, the amount of the condition limit count being applied to a condition set item may not exceed the value of n.sub.-- unadjusted for the item, representing the quantity of the item which not yet received an award or been used to trigger an award. In the preferred embodiment the value of n.sub.-- condition is located in the same data structure as the order in the format of a key-value pair. In the preferred embodiment, the most expensive condition set item is selected in state 1022 to ensure the most expensive item is used to earn the award, rather than have the award applied to the most expensive item first. In another embodiment, the least expensive item may be selected first in state 1022, ensuring that the least expensive item is first used to earn the award. Proceeding to state 1030, the value of the condition limit count is decreased by the amount of the condition limit count applied to the selected item. Thus, the condition limit is reduced by the value of n.sub.-- condition. Proceeding to state 1032, if the condition limit count is still greater than zero, then the preferred embodiment proceeds to state 1022, where the process is repeated until the condition limit has been completely applied to the order. Considering again the application of the hat promotion illustrated in Table V to the sample order illustrated in FIG. 17, the previously calculated condition limit for the order is 6. The value of n.sub.-- unadjusted for the hat, the only item in the condition set, is 7. Since n.sub.-- unadjusted for the hat is greater than the condition limit count, the value of n.sub.-- condition is set equal to the condition limit count, 6. Referring to sate 1030, the new condition limit count is equal to the value of n.sub.-- condition, 6, subtracted from the previous condition limit count, 6, which is equal to zero. Thus, the condition limit count has been totally applied to the hat item. Referring to FIG. 10A, the preferred embodiment proceeds to state 1010. In state 1010 the award limit count is distributed over the award set item, thereby determining which award set items will have their n.sub.-- unadjusted value adjusted, as explained below. Referring to FIG. 10C, a detailed flow chart further illustrates the award limit count distribution process of state 1010. Beginning in state 1040, the preferred embodiment proceeds to state 1042. In the preferred embodiment, the least expensive unevaluated condition set item with an n.sub.-- unadjusted value greater than zero is selected. Proceeding to state 1044, a determination is made as to whether the value of n.sub.-- unadjusted for the selected item is greater than the award limit. If the value of n.sub.-- unadjusted is greater than the award limit, the preferred embodiment proceeds to state 1046. In state 1046, a variable n.sub.-- award is set equal to the award limit. The variable n.sub.-- award represents the amount of the selected award set item which will be have an award applied to it. Thus, if an item is not in the award set, it will have an n.sub.-- award value of zero. If the value of n.sub.-- unadjusted is less than the award limit, the preferred embodiment proceeds from state 1044 to state 1048. In state 1048, the variable n.sub.-- award is set equal to the value of n.sub.-- unadjusted for the selected item. Thus, in the preferred embodiment, the amount of the award limit count being applied to an award set item may not exceed the value of n.sub.-- unadjusted for the item, representing the quantity of the item which not yet received an award or been used to trigger an award. In the preferred embodiment the value of n.sub.-- award is located in the same data structure as the order in the format of a key-value pair. In the preferred embodiment, the least expensive award set item is selected in state 1042 to ensure the award is applied first to the least expensive item. In another embodiment, the most expensive item may be selected first in state 1042, ensuring that the most expensive item is first as an award target. Proceeding to state 1050, the value of the award limit count is decreased by the amount of the award limit count applied to the selected item. Thus, the award limit is reduced by the value of n.sub.-- award. Proceeding to state 1052, if the award limit count is still greater than zero, then the preferred embodiment proceeds to state 1042, where the process is repeated until the award count limit has been completely applied to the order. Once the award count limit is equal to zero the preferred embodiment proceeds to state 1054. Considering again the application of the hat promotion illustrated in Table V to the sample order illustrated in Table VI, the previously calculated award limit for the order is 3. The red gloves item, the least expensive item in the award set, will be selected first to be an award target. The value of n.sub.-- unadjusted for the red gloves item is 2. Since n.sub.-- unadjusted for the red gloves item is less than the award limit count, the value of n.sub.-- award is set equal to the value of n.sub.-- unadjusted for the red gloves item, 2. Referring to sate 1050, the new award limit count is equal to the value of n.sub.-- award, 2, subtracted from the previous award limit count, 3, which is equal to 1. Thus, the award limit still has a count of 1 remaining, which will be applied to the blue gloves item. The value of n.sub.-- unadjusted for the blue gloves item is 2. Since n.sub.-- unadjusted for the blue gloves item is greater than the award limit count, the value of n.sub.-- award is set equal to the award limit count, 1. Referring to state 1050, the new award limit count is equal to the value of n.sub.-- award, 1, subtracted from the previous award limit count, 1, which is equal to 0. Thus, the award has been totally used-up, and there is no remaining award to be applied. Table VII, below illustrates the sample order in FIG. 17 and in Table VI above, with the value of n.sub.-- award and n.sub.-- condition for each item entered, in accordance with the above description.
TABLE VII
__________________________________________________________________________
Item #
Item
current.sub.-- price
quantity
n.sub.-- unadjusted
adjusted.sub.-- price
n.sub.-- condition
n.sub.-- award
__________________________________________________________________________
1 Hats
$9.00 7 7 $0.00 6 0
2 Red $5.00 2 2 $0.00 0 2
Gloves
3 Blue
$6.00 2 2 $0.00 0 1
Gloves
__________________________________________________________________________
Referring to FIG. 10A, the preferred embodiment proceeds to state 1012. The adjust.sub.-- price value of each item is now calculated. Referring to FIG. 10D, a detailed flow chart further illustrates the process of determining the adjust.sub.-- price value for each item. Beginning in state 1060, the preferred embodiment proceeds to state 1062. In the preferred embodiment the first item on the order with an n.sub.-- award value greater than zero, indicating it is entitled to an award, is selected. The preferred embodiment proceeds from state 1062 to state 1064 which determines the award discount type using the disc.sub.-- type entry from the promotion table. The discount type may either be a percentage off the current item price or a flat dollar amount off the current item price. Using the hat promotion illustrated in Table V as an example, the disc.sub.-- type entry is a "%", indicating that the discount type is a percentage of the current price of the item. If the discount type is a percentage, the preferred embodiment proceeds to state 1066 which calculates a promotional price for the item. The promotional price of the item is calculated by multiplying the current price by the disc.sub.-- value, and dividing the result by one hundred. If instead, the disc.sub.-- type entry is a "$", then the preferred embodiment proceeds from state 1064 to state 1068. The promotional price of the item is calculated by subtracting the disc.sub.-- value from the current.sub.-- price. Proceeding to state 1070, the adjusted.sub.-- price is calculated by multiplying the promotional price by the value of n.sub.-- award and adding the old adjusted.sub.-- price. Proceeding to state 1072, if there are unevaluated items remaining with a n.sub.-- award value greater than zero, the preferred embodiment loops back to state 1062. Otherwise, the preferred embodiment proceeds to state 1074. Considering again the application of the hat promotion illustrated in Table V to the sample order illustrated in Table VII, the discount value disc.sub.-- value from the hat promotion table is equal to 50. The old adjusted.sub.-- price of $0, and the current.sub.-- price of $5 are retrieved from the order, illustrated in Table VII. As previously calculated, the value of n.sub.-- award for the red gloves item is 2. The promotional price of the red gloves item is calculated using the equation of step 1066, with the current.sub.-- price=$5, and the disc.sub.-- value=50, as follows: Promotional Price=($5.times.50)/100 Thus, the promotional price for the red gloves item is $2.50. The adjusted.sub.-- price of the red gloves item is calculated using the equation of step 1070, with the old adjusted.sub.-- price=$0, n.sub.-- award=2, and the promotional price=$2.50, as follows: adjusted.sub.-- price=$0+(2.times.$2.50) Thus, the new adjusted.sub.-- price value for the red gloves items is $5.00. The promotional price of the blue gloves item is calculated using the equation of step 1066, with the current.sub.-- price=$6, and the disc-value=50, as follows: Promotional Price=($6.times.50)/100 Thus, the promotional price for the blue gloves item is $3.00. The adjusted.sub.-- price of the blue gloves item is calculated using the equation of step 1070, with the old adjusted.sub.-- price=$0, | ||||||
