Classification tags: business operations management, DES, next-event time progression
The potentially relevant object types are:
Potentially relevant types of events are:
These object and event types, with their participation associations, can be visually described in a UML class diagram, as shown below.
If a demand is greater than the current stock level, the difference counts as a lost sale. Whenever the stock level falls below a certain threshold (called reorder point)), the shop places a replenishment order with a quantity computed as the difference between an upper threshold (called target inventory) and the current stock level.
| ON (event type) | DO (event routine) | Conceptual Event Rule Diagram | 
|---|---|---|
| customer order | if there is sufficient inventory, then product handover, else customer departure | |
| product handover | customer payment | |
| customer payment | customer departure | 
The random variation of the lead time between a replenishment order and the corresponding delivery
       is modeled by a random variable with a uniform probability distribution between 1 and 3 days.
       The inventory is modelled as an object with three attributes: productQuantityInStock,
       reorderPoint and targetInventory. For simplicity, the model does not create
       replenishment order events, but instead it only schedules corresponding delivery events.
Consequently, we model just one object type: SingleProductShop, with three attributes
         quantityInStock (NonNegativeInteger),  reorderPoint (NonNegativeInteger), 
		 and targetInventory (PositiveInteger). In addition, we model two event types:
DailyDemand as an exogeneous event type with one attribute: quantity (PositiveInteger),
         and with the random variable function sampleQuantity and, as an exogeneous event type, 
		 with a recurrence function.Delivery as a caused event type with one attribute: quantity (PositiveInteger),
         and with the random variable function sampleLeadTime.When the design model is implemented with an object-oriented programming language or framework, 
	  the participation associations between DailyDemand and SingleProductShop, as well as 
	  between Delivery and SingleProductShop,	are represented with the corresponding
    reference properties shop and receiver. This is also the case when using the Object Event
	  Simulation (OES) framework OESjs available from Sim4edu, 
	  where all object types are derived from the pre-defined OES category oBJECT 
	  and all event types are derived from the pre-defined OES category eVENT, 
	  as shown in the following diagram:
oBJECT and eVENT.| ON (event type) | DO (event routine) | 
| DailyDemand( demQuant) @ t | IF demQuant <= shop.quantityInStock
THEN
  IF shop.quantityInStock − demQuant < shop.reorderPoint AND
       shop.quantityInStock > shop.reorderPoint
  THEN
    SET ordQuant TO shop.targetInventory −
          shop.quantityInStock - demQuant
    SCHEDULE Delivery( ordQuant) @ t + sampleLeadTime()
  DECREMENT shop.quantityInStock BY demQuant
ELSE (if demQuant > shop.quantityInStock)
  INCREMENT shop.lostSales BY demQuant − shop.quantityInStock
  SET shop.quantityInStock TO 0 | 
| Delivery( delQuant) @ t | INCREMENT receiver.quantityInStock BY delQuant
IF receiver.quantityInStock <= receiver.reorderPoint
THEN
  SET ordQuant TO receiver.targetInventory −
        receiver.quantityInStock
  SCHEDULE Delivery( ordQuant) @ t + sampleLeadTime()
 |