Swapnil Shah created OFBIZ-12054:
------------------------------------

             Summary: Solution Design - OFBIZ-12053: Promising against Future 
Supply
                 Key: OFBIZ-12054
                 URL: https://issues.apache.org/jira/browse/OFBIZ-12054
             Project: OFBiz
          Issue Type: Task
          Components: order
            Reporter: Swapnil Shah
             Fix For: Upcoming Branch


*Solution Design*
In search of answers for few basic questions around promising, here is the list 
of few possible design options to explore and build on further:
 * *How much to Promise*
Before making any systemic or manual promise its important to know how much is 
remaining to be promised for any given order(item). It could be determined as 
follows:
 ** Let system first promise out of on hand inventory using its current 
reservation mechanism.
 ** Post inventory reservation, if Order item is still found backordered (BO) 
i.e. couldn't get any promise from Inventory then it could easily be adjudged 
how much more need to be promised yet based on summing up 
ORDER_ITEM_SHIP_GRP_INV_RES(OISGIR).QUANTIT_NOT_AVAILABLE for given order item


 * *How much is 'Promisable' or 'Available to Promise' (ATP) against supply:* 
Before systemic or manual promises against new demand/orders, It must be known 
how much is left or available to be promised. To begin with, all the future 
supply scheduled to come into the system from vendors or suppliers are usually 
gauged through Advance Shipment Notifications (ASNs) which can be expressed via 
SHIPMENT model in OFBiz. Assuming this to be true, here are few possible 
options:
 ** SHIPMENT with dedicated SHIPMENT_TYPE either as 'INCOMING_SHIPMENT' or 
'PURCHASE_SHIPMENT' can be recognized as scheduled inbound supply on a certain 
ESTIMATED_ARRIVAL_DATE (EAD) 
 ** SHIPMENT_ITEM can express the Product/SKU wise details of supply in terms 
of QUANTITY 
 ** *_Extend SHIPMENT_ITEM (SI)_* _with new field_ *_'AVAILABLE_TO_PROMISE' 
(ATP)_* _to now maintain the remaining qty left to be promised at product level 
within a given shipment_ 
 ** All the promises to be made for any open demand/order can be based off 
SI.ATP. At the same time, all the promises made based on it needs to keep on 
reducing it so as to reflect correct supply snapshot (very much in line with 
ATP on Inventory Item in OFBiz)       

 * *How to Promise*
There can be many ways to promise the demand against supply. Few of the 
automated or manual ways that can be honored (in line with how on hand 
Inventory is promised in OFBiz) could be based on following criteria:
 ** *_FIFO_*: Order with earlier Estimated Ship Date (ESD) could get higher 
precedence in getting supply promised than that of later ESDs. In case of 
missing ESD, Order Date can be referred as fall back option
 ** _*Order Priority*_: Order with higher priority takes precedence in getting 
supply promised than that of lower priority order.
 ** _*Order Priority + FIFO*_ : Order with higher priority gets precedence but 
within same priority orders, FIFO based rules can be applied
 ** _*Fair Share*_: In this manual approach control could be more in hand of 
users to determine and set how much can be promised. It could come handy when 
sales reps or merchandisers have their own set of custom rules to be applied 
rather than having system making promises in automated fashion.

Depending upon the any of the preferred technique, system needs to keep pegging 
the 'Promisable Supply' against 'Yet to be promised demand'. One of the 
possible ways to maintain and capture this pegging could be:
 *  Add new table _*ORDER_ITEM_SHIP_GRP_SHIPMENT_RES (OISGSR)*_ with
 ** ORDER_ID (PK)
 ** SHIP_GROUP_SEQ_ID (PK)
 ** ORDER_ITEM_SEQ_ID (PK)
 ** SHIPMENT_ID (PK)
 ** SHIPMENT_ITEM_SEQ_ID (PK)
 ** RESERVE_ORDER_ENUM_ID (to capture the basis for promising i.e. FIFO, 
PRIORITY, FAIR_SHARE etc.)
 ** QUANTITY (Ordered Qty)
 ** QUANTITY_NOT_AVAILABLE (Un-promised Qty left if any)
 ** PROMISED_DATETIME (promised date based on S.EAD)
 ** PRIORITY (optional - to adjudge the shipment to be used first if same order 
item gets promised from multiple shipments. Lower the number, higher the 
priority)
 ** Standard 4 timestamps 
 * All the promises for an ordered item against future supply in (the form of 
inbound shipment) could be made based off SI.ATP
 * Any promise made from Inbound shipments could keep getting captured through 
above table and get reflected on SI.ATP unless it gets completely exhausted 
i.e. goes down to ZERO.


 * *Where to Promise from*
At times it might be required to know from which part of supply the order is 
being promised specially in case there are multiple inbound supply from one or 
more sources. 
 ** OISGSR.SHIPMENT_ID and OISGSR.SHIPMENT_ITEM_SEQ_ID could help in 
determining supply from which source is pegged for given order (item)

 * *When to Promise*:
Once its known which part of inbound supply is being used to promise order, 
what is equally important is to know what date should be promised to customer
 ** OISGSR.PROMISED_DATETIME should be able to help in suggesting the dates to 
be promised for any given order of customer

*Points to take into consideration during implementation:*

*A) Effect on supply ATP due to change in Demand snapshot for a SKU/Product:*
 # *_Backordered (BO) line Item gets cancelled_***. It could release the ATP 
back on Scheduled Incoming Shipment item (SI) i.e. SI.ATP would increase which 
in turn might end up revising promised Qty and promised Date for other BO lines 
for same SKU through released ATP over on hand inventory and SI.
 # *_Backordered (BO) qty gets revised on line item (due to update on Order 
item's Qty)_*** . If BO qty gets added then it would consume from SI.ATP (i.e. 
reduce it) and vice versa. It might end up revising the promised date for other 
BO lines for same SKU as well
 # *_Backordered (BO) line item's ESD gets updated_***. If ESD gets revised to 
a later or earlier date than current ESD then all FIFO based promises made from 
shipments gets reshuffled and BO lines may get revised promised date. It might 
end up revising the SI.ATP on all shipments for same SKU as well.
 # As described above, please note that any of the above changes on given BO 
line item could have cascading effects on all other SI.ATP for given SKU and 
also on promised Qty and/or promised Date on all other BO lines for given SKU

*B) Effects on supply ATP due to change in Supply snapshot for a SKU/Product.*
 # 
*******_New Inventory on hand gets added (via Inventory sync or actual receipt 
or returns or inventory variance or order cancellation)_***. The BO line item 
for given SKU would get actual promise/reservation from added on hand 
Inventory. This in turn would release the SI.ATP back into system. Also at this 
point of time if there are still any BOs left for given SKU then they might end 
up getting revised promised Qty and promised Date from released SI.ATP.
 # 
*_Qty to be shipped on any Scheduled Incoming SI gets revised or new Shipment 
gets loaded_***. It would update SI.ATP which in turn might end up revising the 
promises made for the BO lines for same SKU due to change in SI.ATP.
 # 
*_EAD on scheduled Incoming SI gets revised_***. if EAD gets revised to a later 
or earlier than current EAD then FIFO based promises over BO lines made from 
shipments gets reshuffled and BO lines may get revised promised Qty and 
promised Date. This would in turn might revise SI.ATP
 # 
*_Scheduled Incoming Shipment itself gets cancelled_***. If BO lines were 
promised from it then It might end up shifting and reducing the SI.ATP from 
other shipments. Also it would end up revising the Promised Qty and Promised 
Date on BO lines for affected SKUs.
 # 
As described above, please note that any of the above changes on given 
Scheduled Incoming SI could have cascading effects on all other SI.ATP for 
given SKU and also on promised Qty and/or Promised Date on all BO lines for 
given SKU

Let's use this space to present more thoughts and possible choices before 
taking it up for implementation. 



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to