Interface - CTMS FleXipod Interface Guide
Aptean
Interface - CTMS FleXipod Interface Guide
Calidus TMS - 12.48
29th April 2025 - 1.1
Reference: INTERFACE
FleXipod Interface
Warning: This is an incomplete guide.
This guide shows how the Aptean Proof of Delivery system (APOD or formerly FleXipod) can be configured to be used from CTMS.
This require configuration as to when messages are sent, how they are formatted (the FleXipod attributes), at what level are messages sent (orders, stops, etc) and what information is expected to be received.
Configuration
System Parameters
Parameter | Description | Config By |
---|---|---|
FLEXIPOD | Set to Y to indicate the FlexiPod interface is active | SYSTEM |
FLEXIPOD_ACID | Flexipod acid | SYSTEM |
FLEXIPOD_BREAK_DROPS | Flexipod include breaks for the drops in the Add API call (Y/N) | SYSTEM |
FLEXIPOD_CARRIERS | Set to Y indicates the Carrier can control if a trip is sent to FlexiPod | SYSTEM |
FLEXIPOD_CLIENTNUM | FleXipod ClientNum sent in interface | SYSTEM |
FLEXIPOD_DEPOTS | Set to Y indicates the Depot can control if a trip is sent to FlexiPod | SYSTEM |
FLEXIPOD_DIRECT | Set to Y to indicate the FlexiPod interface is direct and not using Route Execution | SYSTEM |
FLEXIPOD_DROP | Determines the Drop level STOP-OMS or ITEM | SYSTEM |
FLEXIPOD_EXPIRY | Sets the expiry date for the manifest as a number of days after the end of the trip. | SYSTEM |
FLEXIPOD_EXTERNALSYSTEMUPDATE | Flexipod process the External System Update messages in the API call (Y/N) | SYSTEM |
FLEXIPOD_FORCEITEMSCAN | Force the items to be scanned separately: 0 to use the ScanLevel or 1 to force the scan by item. | SYSTEM |
FLEXIPOD_LISTPENDINGMANIFESTS | Flexipod process the List Pending Manifest Update messages in the API call (Y/N) | SYSTEM |
FLEXIPOD_MERGE_DROPS | Flexipod merge the orders on the drop in the Add API call (Y/N) | SYSTEM |
FLEXIPOD_PASSWORD | FleXipod Webservice password | SYSTEM |
FLEXIPOD_PROXY | Flexipod proxy server | SYSTEM |
FLEXIPOD_READDROP | Flexipod process the Read Drop messages in the API call (Y/N) | SYSTEM |
FLEXIPOD_SCAN_LEVEL | 1,2 or 3 to indicate line or item level scanning | SYSTEM |
FLEXIPOD_SCAN_TYPE | Contents and items | SYSTEM |
FLEXIPOD_SIGNATORY | Set to Y to store the SignedByName as the actual signatory as information for the order at its collection of delivery location | SYSTEM |
FLEXIPOD_SPLIT | Are orders to be split? | SYSTEM |
FLEXIPOD_SYSTEM | FleXipod SYSTEM ID sent in interface | SYSTEM |
FLEXIPOD_TPCLIENTNUM | FleXipod TPClientNum sent in interface | SYSTEM |
FLEXIPOD_USERCODE | FleXipod webservice usercode | SYSTEM |
FLEXIPOD_USERNAME | FleXipod webservice username | SYSTEM |
FLEXIPOD_WEBSERVICE | Flexipod webservice endpoint URL | SYSTEM |
FLEXIPOD_WEBSERVICE_TASK | Flexipod webservice endpoint URL for Tasks | SYSTEM |
FLEXIPOD_WEBSERVICE_UI | Flexipod webservice endpoint URL | SYSTEM |
FLEXIPOD_WEBSERVICE_UI_EXEC | Flexipod webservice endpoint URL for Route Execution | SYSTEM |
FLEXIPOD_X_API_KEY | Flexipod x-api-key for External System Update messages | SYSTEM |
Carrier
The FLEXIPOD flag must be enabled when configured by carrier (system parameter FLEXIPOD_CARRIERS) for carriers that require the use of FlexiPOD.
Depot Locations
The FLEXIPOD flag must be enabled when configured by depot (system parameter FLEXIPOD_DEPOTS) for depots that require the use of FlexiPOD.
EDI Processes
FLEXIPOD_OUT
This process sends the triggered manifests to APOD.
- Flow Type: PROCESS
- Package Name: PROCESS, DP_FLEXIPOD.PROCESS_FLEXIPOD_OUT
- Process: i_process_name FLEXIPOD_OUT
- Interval: 5 minutes
FLEXIPOD_SENDLISTPENDING
This process checks to see if there are any pending updates from the manifests and imports the details.
- Flow Type: PROCESS
- Package Name: PROCESS DP_FLEXIPOD.send_listpendingmanifestupdates
- Process: PROCESS FLEXIPOD_SENDLISTPENDING
- Interval: 1 minute
Reason Codes and Decodes
A decode of name "FLX_RESULT_CODES" type "REFERENCE" must be configured to map all of the reason codes from APOD into CTMS.
Several ITEM_NON_CON reason codes must be created to map to the APOD reason codes.:
Examples:
APOD | CTMS | Description | At Fault | Action | Type | CBR |
---|---|---|---|---|---|---|
1 | SD | Successful Delivery | ||||
10 | SD | Successful Delivery | ||||
2 | FV | Failed Visit | FAILURE | Y | ||
3 | SD | Successful Delivery | ||||
4 | UD | Unsuccessful Delivery | FAILURE | |||
5 | SC | Successful Collection | ||||
6 | SJ | Skipped Job | FAILURE | Y | ||
7 | NR | No Longer Required | FAILURE | |||
8 | PR | Payment Refused |
Plus any reason codes created in FlexiPOD must be created within TMS for the audit history to accurately represent any reasons selected by the driver.
Attribute Configuration
Attributes against Manifests, Drops and Items can be configured by your Aptean implementation team. Up to Warning: 10 attributes may be defined at every level.
In general, the following is allowed at each level:
- Manifest
- Information derived directly from the trip, such as route code, trailer type, driver, etc.
- Drop
- Information derived from the transport order header, such as the main references, instructions
- Information derived from the customer of the transport order, such as parameters against that customer.
- Any sub-reference held against that transport order.
- Any sub-reference held against the transport order's destination location.
- Item
- Information derived from the order items.
An example is below:
Project Name | Level | Number | Source | Target |
---|---|---|---|---|
Stapletons | Drop | 1 | so.booking_ref | |
Stapletons | Drop | 2 | so.del_point_ref | |
Stapletons | Drop | 3 | dp_flexipod.get_order_val('ORDER','PRICE', | |
Stapletons | Drop | 4 | ||
Stapletons | Drop | 5 | ||
Stapletons | Drop | 6 | dp_flexipod.get_ref('LOCATION','PERMIT_NUMBER', | |
Stapletons | Drop | 7 | oc.free_text1 | |
Stapletons | Drop | 8 | dp_flexipod.get_ref('LOCATION','UNITARY_AUTHORITY', | |
Stapletons | Drop | 9 | dp_flexipod.get_ref('LOCATION','LICENCE_NUMBER', | |
Stapletons | Drop | 10 | so.total_weight | |
Stapletons | Drop | 11 | so.total_pieces | |
Stapletons | Drop | 12 | oc.pay_on_delivery | |
Stapletons | Drop | 13 | oc.collect_casings | |
Stapletons | Drop | 14 | ||
Stapletons | Drop | 15 | ||
Stapletons | ItemAttributes | 1 | soi.du_type | |
Stapletons | ItemAttributes | 2 | soi.weight | |
Stapletons | ItemAttributes | 3 | dp_flexipod.get_order_val('ITEM','UNIT_WEIGHT', | |
Stapletons | ItemAttributes | 4 | dp_flexipod.get_order_val('ITEM','UNIT_PRICE', | |
Stapletons | Manifest | 1 | st.route_code | |
Stapletons | Manifest | 2 | st.trailer_type |
Sending Trips to FlexiPOD
Warning: This has changed
This happens automatically when:
- the trip is set to status "ACCEPTED" or "EN-ROUTE"
- when any changes happen to the trip i.e. orders are added, removed or moved on a trip that is at those statuses.
- When the driver, carrier or tractor has been added or changed on a trip that is at those statuses.
Actions Taken on Update
Gets updates from FleXipod drops and processes them
Marks message as collected
Stores order references
- TrackingID
- TrackingURL
- JobReportName
Stores signatory and filename if present
- As ord_information
- As References
- SignedByName
- SignedByFilename
- SiteImageFilename
If item details provided:
- Updates stop Actual Arrive and Actual Depart
- If scan_type = 'I'
- Creates Order Item Reasons from decoded reason code for actions against the drops and items (such as successful delivery, etc).
- Creates Order Item Reasons from decoded reason code if there are non-conformities
- Updates item delivered quantities
- Updates order line quantities
- Updates POC/POD flag against the order
- If scan_type = 'P'
- Same for each item in the pallet.
If event_name = 'Pre-Departure'
- Updates SU stop actual arrive
If event_name = 'Depot Depart'
- Updates SU stop actual arrive and actual depart
- Sets the trip status
- Updates items as despatched
- Updates lines as despatched
- Validates the order
If event_name = 'Depot Return'
- Updates CL stop actual arrive
If event_name = 'End of Trip'
- Updates CL stop actual arrive and actual depart
- Sets the trip status
For all order updates:
- Change order status to DELIVERED if anything delivered
- Change order status to FAILED if nothing delivered
Note: All changes to order are audited.