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:

Sourcing and scheduling process 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:
Table 1. Data captured for scheduleOrder transaction
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.
Table 2. 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:
Table 3. Exclusion Reasons defined for Exclusion Levels
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.
The sample data for a location exclusion is as follows:
<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>