Use Actual Delivery Dates for Contracts and Invoices

Use the actual delivery date as the contract start date or on your customer's invoice.

Assume your have a contract with your customer that states you can't bill the customer until they receive the item that they purchased. You can use the Actual Delivery Date (Shipping) attribute to capture the shipment's delivery date and use it to move the sales order to invoicing.

A sales order has these attributes:

  • Actual Delivery Date (Shipping). This date comes from Oracle Shipping.
  • Actual Delivery Date (Oracle Transportation Management). This date comes from Oracle Transportation Management.

You can capture this date in Shipping when you confirm the shipment and the shipment and delivery happen at the same time, or after you confirm when you have some lead time for delivery.

Assume you need to add the AS54888 Desktop Computer and a warranty for the computer to a sales order for your Computer Service and Rentals customer. You don't want to start the warranty until the customer receives the computer. You will pause orchestration until the computer's actual delivery date is available, use that delivery date to adjust the warranty's coverage dates, and then display the coverage dates in the Order Management work area.

Try it:

  1. Set the Coverage Start Date order management parameter to Delivery Date.
  2. Add a pause step to your orchestration process.
  3. Go to the Order Management work area, create a sales order, add these order lines, then submit the order:
    Line Item
    1 AS54888 Desktop Computer
    2 Extended Warranty
  4. View the order lines.
    Order Line Item Status Contract Start Date Contract End Date Actual Delivery Date (Shipping) Actual Delivery Date (Oracle Transportation Management)
    1-1 AS54888 Desktop Computer Awaiting ePOD - - - -
    1-1-1 Extended Warranty Awaiting ePOD 10/24/24 10/23/26 - -

    Notice that the Actual Delivery Date (Shipping) attribute is empty.

  5. Go to the Inventory Management work area, click Tasks > Show Tasks > Shipments > Manage Shipments.
  6. Search for and open the sales order's shipment. Set the Customer attribute to Computer Service and Rentals when you search.
  7. On the Edit Shipment page, confirm the line's shipment. Set this value when you confirm:
    Attribute Value
    Actual Delivery Date 10/26/24
  8. Go back to the Order Management work area, then view the order lines:
    Order Line Item Status Contract Start Date Contract End Date Actual Delivery Date (Shipping) Actual Delivery Date (Oracle Transportation Management)
    1-1 AS54888 Desktop Computer Awaiting Billing - - 10/26/24 -
    1-1-1 Extended Warranty Awaiting Billing 10/26/24 10/25/26 - -

Note

  • The Actual Delivery Date (Shipping) attribute now has the value from the Edit Shipment page.
  • Order Management updated the Contract Start Date and Contract End Date according to the 10/26/24 actual delivery date. The Actual Delivery Date (Oracle Transportation Management) attribute doesn't have a value because you set up your orchestration process to get the date from Shipping instead.
  • POD means proof of delivery.

Set Contract's Start Date to Delivery Date

If you need to set the contract's start date to the actual delivery date, then set the Coverage Start Date order management parameter to Delivery Date. For background, see Set Up Coverages for Sales Orders.

Start Coverage After Customer Receives Shipment

You can set up a pause rule so the orchestration process waits until it receives the actual delivery date from Shipping. Do this when you want to start coverage only after your customer receives their shipment, or when you need the delivery date before you can move the orchestration process to the invoice step, such as when your invoice needs the actual delivery date.

  1. Open your orchestration process for editing, then add a pause step immediately after the Wait for Shipment Advice step. For example:
    Step Step Name Task Service
    10 Create Shipment Request Ship Create Shipping
    20 Wait for Shipment Advice Ship Wait for Shipment
    30 Wait for POD Pause for POD Pause Process
  2. Click Click for Rule on the Wait for POD step, then add this rule:
    IF
        Hdr is a DooSeededOrchestrationRules.DOOHeader
      and
        fline is a DooSeededOrchestrationRules.DOOFLine
      and
        hdr.childFLines RL.contains fline
      and 
        fline.actualDeliveryDate is null
    THEN
      assign new DooSeededOrchestrationRules.SacResult sac = new DooSeededOrchestrationRules.SacResult()	
      assign hdr.sacResult = sac	
      assign hdr.sacResult.sacType = DooSeededOrchestrationRules.SacResult.SAC_TYPE_EVENT	
      assign hdr.sacResult.eventName = DooSeededOrchestrationRules.SacResult.SAC_SYSTEM_EVENT_POD_PAUSE	
    

If you get the date from:

If fline.actualDeliveryDate is null, then it means the shipment task type hasn't received the actual delivery date from Shipping, and Order Management pauses orchestration. The pause continues until the task type receives the date, fline.actualDeliveryDate will no longer be null, and the flow will move to the next step in the orchestration process.

Release

If you set eventType to SAC_TYPE_EVENT, and if you set eventName to SAC_SYSTEM_EVENT_POD_PAUSE, then Order Management will automatically release the pause when it receives the actual delivery date from Shipping or from Transportation Management. POD means proof of delivery.

If you use fline.actualDeliveryDate is null but you get the actual delivery date from Transportation Management, then Order Management will release the pause.

If you use fline.transportationPlannedFlag isn't D but you get the actual delivery date from Shipping, and if you capture the delivery in the Actual Delivery Date (Shipping) attribute:

  • When you confirm the shipment. Order Management won't release the pause yet. If Transportation Management sends the delivery date, then Order Management will store it in the Actual Delivery Date (Oracle Transportation Management) attribute and release the pause.
  • After you confirm the shipment. Order Management will release the pause.

For background, see Overview of Pausing Orchestration Processes.

Import Through REST API

You can use REST API to get the actual delivery date. This example gets the date when you use Shipping:
curl: https://xxxx.fusionapps.ocs.oc-test.com/fscmRestApi/resources/11.13.18.05/salesOrdersForOrderHub/action/updateActualDeliveryDate
{
  "processRequestOfflineAfter": 1,
  "integrationContextCode": "ORA_UPDATE_ACTUAL_DEL_DATE",
  "updateActualDeliveryDateRequest": [
      {
        "FulfillLineIdentifier": "300100649702721",
        "ActualDeliveryDate": "2024-11-24T18:00:00+00:00",
        "DeliveryName": "2729631"
      },
      {
        "FulfillLineIdentifier": "300100649702986",
        "ActualDeliveryDate": "2024-11-18T18:00:00+00:00",
        "DeliveryName": "2729633"
      }
      ]
}

You must set the integrationContextCode attribute to ORA_UPDATE_ACTUAL_DEL_DATE.

This example gets the date from Oracle Transportation Management:

curl: https://xxxx.fusionapps.ocs.oc-test.com/fscmRestApi/resources/11.13.18.05/salesOrdersForOrderHub/action/updateActualDeliveryDate
{
  "processRequestOfflineAfter": 1,
  "integrationContextCode": "ORA_OTM_UPD_ACTUAL_DEL_DATE",
  "updateActualDeliveryDateRequest": [
   {
     "FulfillLineIdentifier": "300100649702721",
     "ActualDeliveryDate": "2024-11-24T18:00:00+00:00",
     "DeliveryName": "2729634"
    },
    {
      "FulfillLineIdentifier": "300100649702987",
      "ActualDeliveryDate": "2024-11-18T18:00:00+00:00",
      "DeliveryName": "2729635"
      }
      ]
}

Note

  • You must have the Update Actual Delivery Date (FOM_SALES_ORDER_REST_UPDATE_ACTUAL_DELIVERY_DATE_PRIV) privilege.
  • You must set the integrationContextCode attribute to ORA_OTM_UPD_ACTUAL_DEL_DATE.
  • The shipment must have a delivery number for the date.

Import Through Web Service

We recommend that you use REST API to get the date from Oracle Transportation Management, but you can also use the Order Fulfillment Response Service web service:

  1. Add a pause step after the shipment step in your orchestration process. The pause will pause the order line and prevent Order Management from closing it.
  2. Use the DOO_TransportationPlanning task type and this payload to call Order Fulfillment Response Service:
    <soapenv:Envelope xmlns:com="http://xmlns.oracle.com/apps/scm/doo/taskLayer/commonService/" xmlns:mod="http://xmlns.oracle.com/apps/scm/doo/processOrder/model/" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:typ="http://xmlns.oracle.com/apps/scm/doo/taskLayer/commonService/types/">
      <soapenv:Header></soapenv:Header>
      <soapenv:Body>
         <typ:processFulfillmentResponse>
            <typ:responseMessageHeader>
               <com:IntegrationContextCode>Pause</com:IntegrationContextCode>
               <com:FulfillmentSystemResponseIdentifier></com:FulfillmentSystemResponseIdentifier>
               <com:FulfillmentSystem>OPS</com:FulfillmentSystem>
            </typ:responseMessageHeader>
            <typ:fulfillLineList>
               <com:FulfillLineIdentifier></com:FulfillLineIdentifier>
               <com:TaskInstanceStatusCode>WAITING</com:TaskInstanceStatusCode>
               <com:FulfillmentDetail>
                  <com:TaskTypeCode>DOO_TransportationPlanning</com:TaskTypeCode>
                  <com:ActualDeliveryDate></com:ActualDeliveryDate>
               </com:FulfillmentDetail>
            </typ:fulfillLineList>
         </typ:processFulfillmentResponse>
      </soapenv:Body>
    </soapenv:Envelope>
    

Guidelines

If your orchestration process:

  • Has a planning task. We recommend that you use Oracle Transportation Management.
  • Doesn't have a planning task. We recommend you use Shipping.

Get the Actual Delivery Date

If your orchestration process specifies:

  • Shipping. You must get the date from the Edit Shipment page or REST API.
  • Transportation Management. You must get the date from REST API or the Order Fulfillment Response Service.

You can get the date from Shipping during or after you confirm the shipment and while the orchestration process is on a pause, awaiting billing, or closed step. However, if you need to send the date to Oracle Receivables or use it to update the contract start date or contract end date, then do it while the orchestration process is on the Pause for POD task.

You can use the date only for a shippable, configured item. Order Management will display the date for a nonshippable parent such as an option class but it won't store that date. If your item has more than one component, and if each of them has a different actual delivery date, then Order Management will display the latest date for the parent. For example, if the date for component x is April 1 and the date for component y is May 1, then Order Management will display May 1 for the parent.

Reference the Task Type

Order Management uses a different task type when it stores the delivery date depending on whether you use Shipping or Transportation Management. For example:

Order Number Task Type Actual Delivery Date Delivery Name Fulfill Line ID
54678 Shipment 01-01-25 296728 300100668997887
76849 DOO_TransportationPlanning 03-11-25 (null) 300100668998551

Trigger a Business Event

You can use the Actual Delivery Date attribute to trigger a business event when Order Management updates that date. For example, you need to send a notification to one of your downstream fulfillment systems that Order Management changed the date. Add this attribute to the Order Attribute Update business event:

Order Entity Attribute Name
Order Line Details Actual Delivery Date

For background, see Overview of Sending Notifications from Order Management to Other Systems.

Run the Scheduled Process

Order Management uses the Process Responses from Order Fulfillment scheduled process to automatically update the actual deliver date. In some rare cases, you might need to run it manually to process the date. If you do, set the Fulfillment Response Type parameter to one of these values when you run it:

  • Process Actual Delivery Dates for Shipping
  • Process Actual Delivery Dates for Transportation Management

For background, see Process Responses from Order Fulfillment.

More

See Capture Actual Delivery Date for a Shipment.