Skip to main content
 
 
Splunk Lantern

PO Monitoring: Finding transmitted order not responded by the supplier

 

This article shows you how to search for open purchase orders that haven’t been acknowledged by the supplier after receiving the order. This is a key performance indicator for companies that need to monitor purchase order (PO) lifecycles. PO monitoring plays a critical role in maintaining effective communication and coordination between buyers and suppliers, ensuring that all parties are aligned and informed throughout the process, and enhancing overall supply chain visibility. A proactive approach minimizes the risk of errors or delays, enabling businesses to maintain efficient operations and uphold customer satisfaction.

KPI search example

It is important to identify which suppliers are having trouble sending acknowledgments. To analyze this, you can focus on those suppliers who have not sent PO acknowledgments (EDI 855) and investigate further to determine which suppliers are experiencing the most issues with their EDI systems. By using the now() function to calculate the current time and comparing it with the PO transmission time, you can determine the time difference and gain visibility into orders that might be delayed due to the supplier's lack of response.

The search also uses the stats command to count transactions by each transaction ID, which allows you to identify EDI transactions for which no acknowledgment has been received. If the count is 2, then an acknowledgment has been received; if the count is 1, no acknowledgment has been received. For transactions with a count of 1, the duration between the transaction event and the current time will be calculated.

index=supply_chain_edi sourcetype="edi:x12" edi_code IN (850 855) 
| table _time edi_ack_status edi_buyer edi_code edi_code_ack edi_cont_num edi_date edi_flag edi_requestor edi_responder edi_seller edi_sequence edi_time edi_tr_id edi_type 
| eval edi_ack_status_combo=edi_code+"-"+edi_code_ack+"-"+edi_ack_status 
| eval edi_code_groupby=if(isnull(edi_code_ack), edi_code, edi_code_ack) 
| stats last(_time) AS _time, earliest(_time) AS time_po, latest(_time) AS time_po_ack, last(edi_requestor) AS edi_requestor, last(edi_responder) AS edi_responder, first(edi_code) AS edi_type, values(edi_code) AS edi_code, dc(edi_code) AS edi_code_cnt, last(edi_ack_status) AS edi_ack_status BY edi_tr_id 
| eval time_current=now()
| eval time_wait_po_ack=(time_current-time_po)/60/60/24
| eval po_ack_status=if(edi_code_cnt==2, "PO_acknowledged", "NOT_acknowledged")
| search time_wait_po_ack>=6 po_ack_status=NOT_acknowledged

The result shows which suppliers have not responded to the PO EDI 850 by comparing the current time with when the order was originally sent. This could indicate technical issues on the supplier’s side in recognizing EDIs, or business/process challenges in processing the orders. Identifying these delays early on provides a valuable opportunity to proactively address potential future disruptions.

image9.png

Search explanations

Splunk search Explanation
index=supply_chain_edi sourcetype="edi:x12" edi_code IN (850 855) Select EDI X12 data by selecting sourcetype of edi:x12.
| table _time edi_ack_status edi_buyer edi_code edi_code_ack edi_cont_num edi_date edi_flag edi_requestor edi_responder edi_seller edi_sequence edi_time edi_tr_id edi_type Format the relevant fields into a table.
| eval edi_ack_status_combo=edi_code+"-"+edi_code_ack+"-"+edi_ack_status
| eval edi_code_groupby=if(isnull(edi_code_ack), edi_code, edi_code_ack)
Create a new evaluated field edi_ack_status_combo that combines edi_code, edi_code_ack, edi_ack_statusfield. Use another evalcommand to create edi_code_groupby field to join all EDI events with EDI 997 acknowledgment events.
| stats last(_time) AS _time, earliest(_time) AS time_po, latest(_time) AS time_po_ack, last(edi_requestor) AS edi_requestor, last(edi_responder) AS edi_responder, first(edi_code) AS edi_type, values(edi_code) AS edi_code, dc(edi_code) AS edi_code_cnt, last(edi_ack_status) AS edi_ack_status BY edi_tr_id

Join all EDI events with EDI 997 (acknowledgment) events into a single event. A successfully joined event will have EDI edi_ack_status field that indicates there was a matching pair of EDI with EDI acknowledgment.

Events with null values in edi_ack_status means that there's no matching pair of EDI acknowledgments. Events with successfully joined EDIs have “A”, “E”, “R” flags indicating their status.

Add a time element into search, the first time of the event matched.

| eval time_current=now()
| eval time_wait_po_ack=(time_current-time_po)/60/60/24

Calculate time_current for the current time

Then calculatetime_wait_po_ack to calculate how long there was no response received from the supplier. This formula is current time minus the time of the initial PO EDI 850.

| eval po_ack_status=if(edi_code_cnt==2, "PO_acknowledged", "NOT_acknowledged") Create a filter criteria for not acknowledged PO.
| search time_wait_po_ack>=6 po_ack_status=NOT_acknowledged Apply the filter for EDI 850 purchase orders have no business level acknowledgement.

Next steps

When you have this search running in your Splunk platform, return to the Monitoring purchase order lifecycles use case to learn how to share the results with stakeholders and to find other KPIs you might want to measure. You can also review the Supply Chain Optimization Solution Accelerator for more great use cases to help you use the Splunk platform to be successful in your supply chain operations.