Thanks Saurabh, One thing I would like to add here is createATPRequirementsForOrder service runs before reservation logic. IMO, we should change that seca rule event to 'global-commit-post-run' instead of 'commit'.
In this way, requirement generation flow will run after reservation logic and shortfall calculation will become more accurate. Also, I see no reason to calculate minimum from shortfall and ordered quantity. I guess we should create requirement for shortfall quantity if results to a positive integer. HTH. -- Thanks and Regards, Suraj Khurana | Omni-channel OMS Technical Expert On Sat, Jul 14, 2018 at 2:30 PM, Saurabh Dixit < saurabh.di...@hotwaxsystems.com> wrote: > Hello All, > > While working on the Manufacturing workflow, I found a gap in the creation > of requirements using createATPRequirementsForOrder service. > > Failing Scenario: > > Consider a fresh setup up with a product of type FINISHED_GOOD with a BOM > (say product whose inventory is always 0 or less than 0) whose attributes > are as follows, > > ordered = 4 (with a check of cancelQty = null) > minimumStock = 0 > atp = 0 > previousRequirements = 0 > > So, the shortfall will be calculated as, > > shortfall = minimumStock - atp - previousRequirements = 0 (results in a > zero) > > then, the min(ordered, shortfall) is calculated which evaluates to be, > > required = min(ordered, shortfall) = min(4,0) = 0 > > This required is then compared with value ZERO, and the maximum between the > both decides the further flow. If the required is found max then, the > createRequirement is called and the requirement is created, if not, then > the requirement for that order item is skipped and the loop continues with > the next order item. > > In this case, it evaluates as, > max(0, 0) <= 0 which evaluated to true, and the loop continues to execute > for other items (if any) instead of creating the requirement for the > ordered quantity. > > If we now see the Sales Order and the quantity for which the requirement > was meant to be created (but had not), > Qty (Sales Order asks for) = 4 > Qty (Requirement is created) = 0, > > This definitely represents the flaw in the process, which is to choose the > max(ordered, shortfall) instead of min(ordered, shortfall) based on some > condition that distinguishes the scenarios, so that this case is also > considered with the previous workflow. > > Please put forth your valuable feedbacks. > > Thanks and regards > > Saurabh Dixit > Enterprise Software Engineer > HotWax Systems >