Data capture and exclusion levels for sourcing audit
Souring audit data is captured at each stage of the sourcing and scheduling process. Sourcing and scheduling process can be summarized in the following stages:
As part of the sourcing audit, relevant data
is captured at each ship node filtering step of the sourcing and scheduling process for the
scheduleOrder
transaction and then that data is published asynchronously through a
scheduled executor service.
The sourcing audit facilitates capturing and publishing of the data related to sourcing logic.
The sourcing audit consists of the following two tasks:
- The data capture task during the
scheduleOrder
transaction. The captured data is available as part of audit report. You can review these audit report to check the effectiveness of the sourcing and scheduling configuration setup. - Publisher task for processing and publishing collected sourcing audit data through a scheduled executor service. The collected data is stored in the audit report file. The scheduled executor service runs on the application or agent server initialization. This scheduled executor service runs a publisher task repeatedly at predefined intervals. The publisher task can invoke either a locally configured SDF service or an external REST service.
The following data is captured as part of the sourcing audit for the
scheduleOrder
transaction and is available in the audit report file:
Captured Data | Description |
---|---|
Eligible locations | The locations read from the sourcing rule details or distribution group before any exclusion. |
Excluded locations | The locations and assignments that are excluded at different stages of sourcing and scheduling. |
Evaluated assignments | Contains the assignments that are evaluated by the optimization logic. |
Options | The possible solutions that are selected by the optimization logic for the sourcing and scheduling iteration. |
Final option | The best solution that is selected by the optimization logic for the order line at the end of all the iterations. |
Exclusion Levels
The process of excluding locations and assignments can be broken down into the following
exclusion levels in the sequence in which they are run. These exclusion levels are also used to plot
the order of exclusion of nodes during the whole sourcing and scheduling process. The following
table provides details about various exclusion levels and their sequence.
Exclusion Level Sequence | Exclusion Level | Sourcing and Scheduling Process Mapping |
---|---|---|
1 | SOURCING_RULE_READ | Exclusions when deriving ship nodes from sourcing rule detail read. |
2 | INVENTORY_READ | Exclusions when reading inventory supply and demand for the required ship nodes. |
3 | ITEM_NODE_COLLECTION | Exclusions of ship nodes containing inventory for the order line item based on various eligibility criteria. |
4 | ASSIGNMENT_CREATION | Exclusions when computing the dates for the eligible ship nodes with inventory. |
5 | SOLVER | Exclusions by the application’s internal optimization logic where choices or assignments are excluded based on various parameters such as cost, distance, ship node priority, and other constraints to come up with the most optimal solution. |
Exclusion Reason identifies the reason to exclude the location or assignment. Each Exclusion
Level has one or more associated Exclusion Reason defined for it. The following table provides
details on various Exclusion Reasons that are defined for Exclusion Levels:
The sample data for a location exclusion is as
follows:
Exclusion Level | Exclusion Reason |
---|---|
SOURCING_RULE_READ | Exclusion due to an existing Inventory Node Control with type Idle Asset for the Location. |
SOURCING_RULE_READ | Exclusion on the basis of proximity. |
SOURCING_RULE_READ | Exclusion due to smart sourcing, which is used to dynamically determine the ship nodes to consider for sourcing product items. |
SOURCING_RULE_READ | Exclusion due to not enough capacity available at node. |
SOURCING_RULE_READ | Exclusion based on sourcing correction UE implementation. |
INVENTORY_READ | Exclusion based on inventory unavailability. |
ITEM_NODE_COLLECTION | Exclusion because the ship node(s) does not match the ship node in the order line. |
ITEM_NODE_COLLECTION | Exclusion because the ship node is not same as the receiving node. |
ITEM_NODE_COLLECTION | Exclusion because the ship node(s) does not belong to the configured source from organization. |
ITEM_NODE_COLLECTION | Exclusion because the ship node(s) does not allow work order creation. |
ASSIGNMENT_CREATION | Skipping assignment creation on the date and the ship node because the capacity based on sourcing rule is not enough. |
ASSIGNMENT_CREATION | Skipping assignment creation on the date and the ship node because the capacity is not available. |
ASSIGNMENT_CREATION | Skipping choice creation because the minimum ship date for the assignment is outside of the sourcing capacity window. |
ASSIGNMENT_CREATION | Skipping assignment creation on the date and the ship node because the ship date is high or low date. |
ASSIGNMENT_CREATION | Skipping assignment creation on the date and the ship node because the ship date is before the earliest possible ship date. |
ASSIGNMENT_CREATION | Skipping assignment creation on the date and the ship node because the ship date is earlier than the requested ship date for the order line. |
ASSIGNMENT_CREATION | Skipping assignment creation on the date and the ship node because the ship date is after the maximum allowed ship date. Product may be available by increasing the shipping or delivery window. |
ASSIGNMENT_CREATION | Skipping assignment creation on the date and the ship node because the quantity available is less than minimum fill quantity required per assignment. |
SOLVER | Exclusion due to all the order lines of an order cannot be shipped together from the same node and at the same time. |
SOLVER | Exclusion due to all the order lines of an order cannot be shipped from a single location on a single date. |
SOLVER | Exclusion due to all the order lines cannot be shipped completely. However, order lines could be sourced from different shipping locations. |
SOLVER | Exclusion due to all the order lines of an order cannot be delivered together. |
SOLVER | Exclusion of the assignment during landed cost comparison. |
SOLVER | Exclusion of the assignment during distance comparison. |
SOLVER | Exclusion of the assignment during delivery date comparison. |
SOLVER | Exclusion of the assignment during node priority comparison. |
<ExcludedLocation ExclusionLevel="SOURCING_RULE_READ" ExclusionLevelSequence="1" ExclusionReason="Exclusion due to not enough capacity available at node." >
<Location ShipNodeKey="DC1" />
<Location ShipNodeKey="STORE1"/>
</ExcludedLocation>
Sample Audit Report (in XML format)
Consider a basic schedule order with following sourcing rule details configured:
Distribution Rule ID | Ship Nodes |
---|---|
DG1 | N1,N2,N3(with Node Priority 1, 2 and 3 respectively) |
Sourcing Rule Detail | Sequence No | Template Type | Distribution Group |
---|---|---|---|
SRD_1 | 1 | Distribution_Group | DG1 |
Master Data:
Item ID: PROD_ITEM1
Transaction data:
Inventory data:
Ship Node | Item ID | Quantity |
---|---|---|
N1 | PROD_ITEM1 | 3 |
N2 | PROD_ITEM1 | 2 |
N3 | PROD_ITEM1 | 0 |
Order data:
Order Header Key : ORDER_1
Order Line No | Item ID | Quantity |
---|---|---|
1 | PROD_ITEM1 | 6 |
Here is the sample data from the audit report (in XML format) for a location exclusion in case of
an partially back-ordered
order:
<Promise AuditCreationTimeStamp="2017-08-01T16:33:45+05:30" OrderReference="2017080116334426666">
<PromiseLines>
<PromiseLine ItemID="PROD-ITEM1" LineId="201708011633334426669"
ProductClass="" RequestedQuantity="6.00" UOM="EACH">
<SourcingRule>
<SourcingRuleDetail Sequence="1" SourcingRuleDetailKey="SRD_1">
<EligibleLocations>
<Location ShipNodeKey="N2"/>
<Location ShipNodeKey="N3"/>
<Location ShipNodeKey="N1"/>
</EligibleLocations>
<ExcludedLocations>
<ExclusionLevel ExclusionLevel="INVENTORY_READ"
ExclusionLevelSequence="2" ExclusionReason="Exclusion based on inventory unavailability.">
<Location ShipNodeKey="N3"/>
</ExclusionLevel>
</ExcludedLocations>
<EvaluatedAssignments>
<Assignment Distance="10.00"
LandedCostPerUnit="0.00" NodePriority="2.00"
Quantity="2.00"
ShipDate="2015-08-03T12:00:00-04:00" ShipNodeKey="N2"/>
<Assignment Distance="10.00"
LandedCostPerUnit="0.00" NodePriority="1.00"
Quantity="3.00"
ShipDate="2015-08-03T12:00:00-04:00" ShipNodeKey="N1"/>
</EvaluatedAssignments>
<Options>
<Option IsBestSolution=“Y”>
<Assignment BackorderedQuantity="1.00"/>
<Assignment Distance="10.00"
NodePriority="2.00" ProcuredQty="0.00"
Quantity="2.00"
ShipDate="2015-08-03T12:00:00-04:00" ShipNodeKey="N2"/>
<Assignment Distance="10.00"
NodePriority="1.00" ProcuredQty="0.00"
Quantity="3.00"
ShipDate="2015-08-03T12:00:00-04:00" ShipNodeKey="N1"/>
</Option>
</Options>
</SourcingRuleDetail>
</SourcingRule>
<FinalOption>
<Assignment BackorderedQuantity="1.00"/>
<Assignment Distance="10.00"
NodePriority="2.00" ProcuredQty="0.00"
Quantity="2.00"
ShipDate="2015-08-03T12:00:00-04:00" ShipNodeKey="N2"/>
<Assignment Distance="10.00"
NodePriority="1.00" ProcuredQty="0.00"
Quantity="3.00"
ShipDate="2015-08-03T12:00:00-04:00" ShipNodeKey="N1"/>
</FinalOption>
</PromiseLine>
</PromiseLines>
</Promise>