CALIDUS ePOD Interfacing: Difference between revisions

From EPOD
(Generic Interfaces Documentation)
 
(Clarified WSDL for web service. Added details of photo requests. Added reference to standing data imports. Updated based on version 4.5.00.02: Added Export Report web service method))
 
(8 intermediate revisions by the same user not shown)
Line 1: Line 1:
__NOTOC__
{{#vardefine:System|''CALIDUS'' ePOD}}
{{#vardefine:System|''CALIDUS'' ePOD}}
== Solution Overview  ==
== Solution Overview  ==
Line 7: Line 8:
The layout of the {{#var:System}} system is as follows:
The layout of the {{#var:System}} system is as follows:


[[File:EPOD-ERD-1.PNG|border]]
[[File:EPOD-ERD-1.PNG|border|600px]]


Most of the tables in the structure can be configured through the interface with the exception of:
Most of the tables in the structure can be configured through the interface with the following exceptions:
* Job Group
* Job Group - this can be created automatically as part of the job interface. However, the job group within the site will then need to be configured.
* User Access Group
* User Access Group - users' access to jobs will be automatically created when job groups are created.
* Service Vehicle Product
* Service Vehicle Product.
* Service Activity.


As can be seen, the basic structure is:
As can be seen, the basic structure is:
* Load - a collection of jobs of any type to be completed by the PDA user.
* Load - a collection of jobs of any type to be completed by the PDA user.
* Job - a specific task for a customer (i.e. collect order A from point X at this time, deliver order A to point Y at this time).
* Job - a specific task for a customer (i.e. collect order A from point X at this time, deliver order A to point Y at this time).
* Container - any unique item to be delivered, for example, barcoded pallets, cartons, packages, trolleys, A-frames, etc.  
* Container - any unique item to be delivered, for example, bar-coded pallets, cartons, packages, trolleys, A-frames, etc.  
* Product - any product to be delivered, plus a quantity. Can be contained withing the containers, or can be Loose products.
* Product - any product to be delivered, plus a quantity. Can be contained within the containers, or can be Loose products.
Notes:
 
{{Note|
* Each Load or Work List will be assigned to a user for completion. Many can be created and assigned to users - only the earliest will be active.
* Each Load or Work List will be assigned to a user for completion. Many can be created and assigned to users - only the earliest will be active.
* Each job will be listed in sequence, or planned start time. It is configurable whether the user is forced to complete tasks in sequence.
* Each job will be listed in sequence, or planned start time. It is configurable whether the user is forced to complete tasks in sequence.
* Each container and product must be actioned by the user (i.e. enter/scan each container for delivery, or say why each container was not delivered).
* Each container and product must be actioned by the user (i.e. enter/scan each container for delivery, or say why each container was not delivered).
* If a container has products, each of these must be actioned by the user. It is configurable whether products are required to be entered.
* If a container has products, each of these must be actioned by the user. It is configurable whether products are required to be entered.
* If products are defined without a container (i.e. Loose Products), they must be entered. {{#var:System}} assumes a Loose Product container of '000000000000', so that the table data structure is preserved.
* If products are defined without a container (i.e. Loose Products), they must be entered. {{#var:System}} assumes a Loose Product container of '000000000000000', so that the table data structure is preserved.}}
 


== Scope  ==
== Scope  ==
There are interfaces into {{#var:System}} for Standing Data.
{{Note}} All web service requests and XML formats are fully documented in the supporting documentation. XML files have associated XSDs, for appropriate validation.


{{Note}} It is not deemed necessary at this time to map interfaces from the TMS for Standing Data, as this can be maintained separately and manually within {{#var:System}}. Those flows are:
{{Note}} There are interfaces into {{#var:System}} for Standing Data. This document does not yet show these interfaces, as this can be maintained separately and manually within {{#var:System}}. Those flows are:
* Vehicles
* Vehicles
* Reason Codes (used when cancelling jobs or pallets)
* Reason Codes (used when cancelling jobs or pallets)
* Users (Drivers/Engineers)
* Users (Drivers/Engineers)
* Customers
* Customers
The system can be configured to automatically create the Vehicles and Users with very basic information based off the received values in the Load and Job messages. Customers will be created as part of the information received through the Job messages.
Interfaces do exist for this standing data upload through the Web Services, used in exactly the same way as described for the Load and Job interfaces below. The interface formats are described in detail in the supporting documentation, referenced in the appendices.
 
The system can be configured to automatically create the Job Groups, Vehicles and Users with very basic information based off the received values in the Load and Job messages. Customers will be created as part of the information received through the Job messages.  


{{Note}} The document does not at this time define the interface required for Service-type jobs, as this is currently in significant development within the product. A basic interface does exist and is described in detail in the supporting documentation, referenced in the appendices.
{{Note}} The document does not at this time define the interface required for Service-type jobs, as this is currently in significant development within the product. A basic interface does exist and is described in detail in the supporting documentation, referenced in the appendices.


<!-- NEW PAGE -->  
<!-- NEW PAGE -->  
Line 47: Line 54:
The Web Services are hosted as part of the main {{#var:System}} server and run as SOAP or HTML Web Services. Data is formatted in a strongly-typed XML file, validated by a full XSD. Data can be passed either as a string or as an XML object.
The Web Services are hosted as part of the main {{#var:System}} server and run as SOAP or HTML Web Services. Data is formatted in a strongly-typed XML file, validated by a full XSD. Data can be passed either as a string or as an XML object.


The data defined in this XSD can be modified by development for customers who require additional data sent to and from the ''CALIDUS'' ePOD system.
The data defined in this XSD can be modified by development for customers who require additional data sent to and from the {{#var:System}} system.


The Bespoke automatic and manual file uploads are written on demand for customers who require it.  
The Bespoke automatic and manual file uploads are written on demand for customers who require it.  
Line 65: Line 72:
** Customers
** Customers
** Reason Codes
** Reason Codes
Import files can contain any or all of these import elements.


Export of data from the system can be through several mechanisms:
Export of data from the system can be through several mechanisms:
Line 71: Line 80:
* Palletforce Extract
* Palletforce Extract


Web Services are supplied for external systems to request information on Loads and Jobs, by ID or Date Since. The Web Services are hosted as part of the main ''CALIDUS'' ePOD server, are written in Microsoft C#.NET and run as SOAP or HTML Web Services. Response Data is formatted in a strongly-typed XML file, validated by a full XSD.  
Web Services are supplied for external systems to request information on Loads and Jobs, by ID or Date Since. The Web Services are hosted as part of the main {{#var:System}} server and run as SOAP or HTML Web Services. Response Data is formatted in a strongly-typed XML file, validated by a full XSD.  


Standard requested data to export supports:
Standard requested data to export supports:
Line 78: Line 87:
* Current Vehicle information
* Current Vehicle information


Auto-export of data can be configured to push the XML data automatically to the client system, via 2 mechanisms:
Auto-export of data can be configured to push the XML data automatically to the client system, via several mechanisms:
* Web Service
* Web Service (SOAP or POST/REST)
* Email
* Email
* Flat-file copy, local, remote or FTP
* Flat-file copy, local, remote or FTP
Line 87: Line 96:


The Auto-export process supports:
The Auto-export process supports:
* Automatic emailing of Completion reports to customers (if configured)
* Automatic emailing of Completion reports to customers (if configured).
* Load (header or with all Job information)
* Load (header or with all Job information).
* Jobs (Completed or Cancelled) with all details
* Jobs (Completed or Cancelled) with all details.
* Palletforce
* Pallet Network Tracking systems, including:
* OEM bespoke interfaces
** Palletforce.
* Other OBS Logistics products
** Pallex.
** TPN.
** Hazchem.
** Palletline.
* OEM bespoke interfaces.
* Other OBS Logistics products, including:
** ''CALIDUS'' TMS.
** ''CALIDUS'' Portal TTM.


The Auto-Export process is run as a scheduled task on the main {{#var:System}} server.
The Auto-Export process is run as a scheduled task on the main {{#var:System}} server.


== Message Content ==
 
A basic list if all the fields in the interface for Load (Manifest) and Job follows. A full spreadsheet of all the import flows and fields containing all the limitations on length and defaulted values is provided separately.
== Import Message Content ==
A basic list of fields that may be used in the interface for the Load (Manifest) and the Job follows. A full spreadsheet of all the import flows and fields containing all the limitations on length and defaulted values is provided separately.
 
{{Note}} You can configure the system to create standing data as part of the load and jobs import. Alternatively, you can create the standing data through the import process for the following elements:
* Users.
* Vehicles.
* Service Products.
* Customers.
* Reason Codes.
These imports are straightforward and follow the guidelines that are laid out in this document. The allowable fields are in the spreadsheet, and many examples exist to view how these might work and will be provided to you with this documentation. These imports are not covered in this guide.
 
 
{{Note}} The content of the imported data varies and expands as the {{#var:System}} product expands. As new items are added to the application, the spreadsheet will be modified and issued to you, to aid in any mapping of data into the application. The Import Spreadsheet is referenced in [[#Appendix A: Document References|Appendix A]].  


'''EPOD_LOAD'''
'''EPOD_LOAD'''
<table border="1" width="100%"><tr>
{| class="wikitable" border="1"
<td bgcolor="silver" width="15%">Name</td><td bgcolor="silver" width="35%">Description</td><td bgcolor="silver" width="15%">External Field</td><td bgcolor="silver" width="35%">Notes</td></tr><tr>
|- bgcolor="silver"
<td>EPL_SITE_ID</td><td>EPL_SITE_ID: Unique reference of the site that the Load belongs to.</td><td>&nbsp;</td><td>&nbsp;</td></tr><tr>
! Name !! Description
<td>EPL_LOAD_ID</td><td>EPL_LOAD_ID: Unique reference of the Load.</td><td>&nbsp;</td><td>&nbsp;</td></tr><tr>
|-
<td>EPL_LOAD_START_PLANNED_DATE</td><td>The planned start date and time. This is used to sequence the load, and decide which load is provided to the user.</td><td>&nbsp;</td><td>These times will be defaulted by the EPOD system to the earliest and latest dates and times against the jobs provided, unless this information can be provided by the TMS</td></tr><tr>
|EPL_SITE_ID ||EPL_SITE_ID: Unique reference of the site that the Load belongs to.
<td>EPL_LOAD_START_PLANNED_TIME</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr><tr>
|-
<td>EPL_LOAD_END_PLANNED_DATE</td><td>The planned end date and time</td><td>&nbsp;</td><td>&nbsp;</td></tr><tr>
|EPL_LOAD_ID ||EPL_LOAD_ID: Unique reference of the Load.
<td>EPL_LOAD_END_PLANNED_TIME</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr><tr>
|-
<td>EPL_LOAD_DISTANCE_PLANNED</td><td>The distance planned by the route planner</td><td>&nbsp;</td><td>N/A</td></tr><tr>
|EPL_DELETE_LOAD ||If "Y", the specified load will be deleted from ''CALIDUS'' ePOD.
<td>EPL_USER_ID</td><td>To be used if a user is predefined as assigned to complete this Load.</td><td>&nbsp;</td><td>&nbsp;</td></tr><tr>
|-
<td>EPL_VEHICLE_ID</td><td>To be used if a vehicle is predefined as assigned to complete this Load.</td><td>&nbsp;</td><td>&nbsp;</td></tr><tr>
|EPL_LOAD_START_PLANNED_DATE ||Load Duration.
<td>EPOD_JOBS</td><td>EPOD_JOBS contains a series of EPOD_JOB objects.</td><td>&nbsp;</td><td>&nbsp;</td></tr>
|-
</table>
|EPL_LOAD_START_PLANNED_TIME ||Load Duration.
|-
|EPL_LOAD_END_PLANNED_DATE ||Load Duration.
|-
|EPL_LOAD_END_PLANNED_TIME ||Load Duration.
|-
|EPL_LOAD_DISTANCE_PLANNED ||For Information Only.
|-
|EPL_VEHICLE_ID ||To be used if a vehicle is predefined as assigned to complete this load.
|-
|EPL_USER_ID ||To be used if a user is predefined as assigned to complete this load.
Loads are automatically allocated to users in the following way:
* Site, User and Vehicle match, earliest selected.
* Site and User match, vehicle is blank, earliest selected.
* Site and Vehicle match, user is blank, earliest selected.
Once allocated to a user, the load is stamped with the driver and vehicle set when the load is requested.
It is recommended to NOT mix modes above, as this can lead to unpredictable results.
|-
|EPL_TRAILER_ID ||EPL_TRAILER_ID: Trailer Number. To be used if the vehicle being used to fulfil the load is a Tractor unit.
|-
|EPL_LOAD_INFORMATION ||To be populated with any information to be displayed to the user regarding the Load.
|-
|EPL_TIMEZONE ||To be populated with the timezone for the load in Olsen ID format.
|-
|EPL_STATUS ||Can be used to cancel the Load. If used, set the status to "X".
|-
|EPL_ROUTE_CODE ||Route identifier against the trip.
|-
|EPOD_JOBS ||EPOD_JOBS contains a series of EPOD_JOB objects. In standard operation, ALL jobs on a load must be refreshed if any are being changed. Any jobs that are omitted under a load will be deleted.
If a single job is to be updated, this single change may be interfaced using the EPOD_JOBS top-level tag, rather than this tag embedded under the load.
|}
 
 
 
'''EPOD_JOB'''
{| class="wikitable" border="1"
|- bgcolor="silver"
! Name !! Description
|-
|EPL_SITE_ID ||Unique Reference for the Site that the Job belongs to.
|-
|EPL_LOAD_ID ||Unique Reference for the Load that the Job belongs to. If not provided, defaulted from the enclosing EPOD_LOAD.
|-
|EPL_JOB_ID ||Unique reference for the job. {{Warning}} DO NOT PROVIDE THIS TAG - this will be generated by C-ePOD.
|-
|EPL_JOB_CODE ||External reference for the Job. This element can be used to link a collection and delivery together under the same reference. So, if an order is being collected at A and delivered at B, there are 2 jobs, each with a unique Job ID, but with the same Job Code. Optionally, C-ePOD will keep the Delivery leg of a linked job updated with the information captured from the collection.
|-
|EPL_JOB_TYPE ||"D"-Delivery, "C"-Collection, "S"-Service.
|-
|EPL_JOB_GROUP ||This is setup within the Admin system. Each job group has its own settings and will determine how the Job is processed dependant on these settings.
|-
|EPL_CUST_REF ||Customer's Order Reference.
|-
|EPL_JOB_INSTRUCTION ||Free text that will be shown to the driver on the mobile device.
|-
|EPL_OFFICE_INSTRUCTION ||Free text that will ''not'' be shown on the mobile device, but will be visible within the Admin system.
|-
|EPL_START_PLANNED_DATE ||Collection/Delivery Window.
|-
|EPL_START_PLANNED_TIME ||Collection/Delivery Window.
|-
|EPL_END_PLANNED_DATE ||Collection/Delivery Window.
|-
|EPL_END_PLANNED_TIME ||Collection/Delivery Window.
|-
|EPL_DISTANCE_PLANNED ||Planned distance. Can be used to compare Planned vs Actuals if the system is configured for telematics update from an external system. Otherwise for information only.
|-
|EPOD_CUSTOMER ||This tag may be used to specify a Customer separately. If this is used, and the address and contact information on the job below is different, the EPOD system will create a Job Address specifically for this job, whilst maintaining the Customer information separately, as an Invoice address.
Note that this will happen if the Customer has been created previously either through another Job, another Customer Tag in a Job or a Customer Tag alone.
|-
|EPL_CUSTOMER_CODE ||Customer Code from external system. If not provided, one will be generated from EPL_CUSTOMER_NAME
|-
|EPL_CUSTOMER_NAME ||The Name of the customer
|-
|EPL_ADDRESS_1 || &nbsp;
|-
|EPL_ADDRESS_2 || &nbsp;
|-
|EPL_ADDRESS_3 || &nbsp;
|-
|EPL_ADDRESS_4 || &nbsp;
|-
|EPL_ADDRESS_5 || &nbsp;
|-
|EPL_POSTCODE || &nbsp;
|-
|EPL_CONTACT ||Contact on site for the job. Can be changed at Job completion.
|-
|EPL_TELEPHONE ||The Customer's Contact Telephone number
|-
|EPL_EMAIL ||Contact Email address. Can be used to automatically send Job Completion documents to the customer.
|-
|EPL_SO_NUMBER ||Sales Order Reference.
|-
|EPL_EXT_REF ||An external ref to be stored, reported and returned only.
|-
|EPL_ORDER_DATE ||Date Order created - defaulted to Now()
|-
|EPL_SALES_CONTACT ||The operative who took the order. Can be used as a display field for documentation
|-
|EPL_SERVICE_LEVEL || &nbsp;
|-
|EPL_JOB_STATUS ||A user-enterable Job Status, to help identify further processing back in the admin system, specifically to reschedule another service if this job is incomplete.
|-
|EPL_USER_ID ||To be used if a user is pre-assigned to complete this job. Only for Services without a LOAD.
|-
|EPL_COL_DATE ||Date Order Collected. Can be used for any date field
|-
|EPL_SEQUENCE ||The sequence in which the jobs are to be completed. If this is not provided, the system will allocate the jobs in the sequence in which they were provided in this interface i.e. first is ""0001"", second is ""0002"", etc.
If Delivery and Collection jobs are specified with the same sequence, the delivery job is completed first.
|-
|EPL_LINKED_ID ||An identifier that informs the system that this job should be linked (consolidated) with other jobs.
The format is irrelevant - if multiple jobs on the same load have the same link ID, they will be consolidated. Link only jobs on the same load with the same job type.
|-
|EPL_UDF_JOBDETS ||EPL_UDF_JOBDETS: To be used to specify user definable fields (UDF) against job details
|-
|EPOD_JOB_ADDRESS ||Any Job address against the job, if different to the customer address or address on the job. Typically, this is used to provide additional addresses on a job, so that the driver can view them. For example, providing a Final Delivery address when picking up a parcel, or providing the origin address when delivering a parcel. Consisting of the following tags if present:
|-
|EPL_ADDRESS_TYPE ||"D" - Delivery Address, "C" - Collection Address, "O" - Original Collection Address, "F" - Final Delivery Address.
|-
|EPL_NAME || &nbsp;
|-
|EPL_ADDRESS_1 || &nbsp;
|-
|EPL_ADDRESS_2 || &nbsp;
|-
|EPL_ADDRESS_3 || &nbsp;
|-
|EPL_ADDRESS_4 || &nbsp;
|-
|EPL_ADDRESS_5 || &nbsp;
|-
|EPL_POSTCODE || &nbsp;
|-
|EPL_CONTACT || &nbsp;
|-
|EPL_TELEPHONE || &nbsp;
|-
|EPL_EMAIL || &nbsp;
|-
|EPL_LAT ||The Latitude in degrees
|-
|EPL_LONG ||The Longitude in degrees
|-
|EPL_OWNER_NAME ||Can be used as a display field for documentation
|-
|EPL_TRAILER_ID ||To be used if the vehicle being used to fulfil the job is a Tractor unit, and requires a trailer ID. This can be left blank to have this entered by the driver on demand.
|-
|EPL_TIMEZONE ||To be populated with the timezone for the job.
|-
|EPL_LOADING_TYPE ||Controls whether this job is seen to be a Loading task  at a depot (Job Type = "C") or unloading at a depot (Job Type = "D"). Values can be "L" or "U" or ""
|-
|EPL_SWAP_VEHICLE ||Indicates whether the job is a vehicle swap (i.e. requires no item-related action in C-EPOD)
|-
|EPL_ACCOUNT || &nbsp;
|-
|EPL_ORDER_TIME ||Time Order created - defaulted to the time that the job was received.
|-
|EPL_EXPIRY_DATE || &nbsp;
|-
|EPL_EXPIRY_TIME || &nbsp;
|-
|EPL_PF_DEPOT ||For Pallet Networks: The Depot
|-
|EPL_PF_TRACKING_NO ||For Pallet Networks: The Tracking Number
|-
|EPL_TRAVEL_PLANNED ||Planned travel time in minutes
|-
|EPL_WORK_PLANNED ||Planned work time in minutes
|-
|EPOD_TIME_WINDOWS || &nbsp;
|-
|EPOD_TIME_WINDOW ||This defines the arrival time window.
|-
|ETW_TIME_START ||The Start window time, in HHMMNNSS format.
|-
|ETW_TIME_END ||The End window time, in HHMMNNSS format.
|-
|EPL_LAT ||The Latitude in degrees
|-
|EPL_LONG ||The Longitude in degrees
|-
|EPOD_CONTAINERS ||Contains a series of EPOD_CONTAINER objects
|-
|EPOD_PRODUCTS ||Contains a series of EPOD_PRODUCT objects (Loose Products)
|-
|EPOD_SERVICES ||Contains a series of EPOD_SERVICE objects
|}
 


'''EPOD_CONTAINER'''
'''EPOD_CONTAINER'''
<table border="1" width="100%"><tr>
{| class="wikitable" border="1"
<td bgcolor="silver" width="15%">Name</td><td bgcolor="silver" width="35%">Description</td><td bgcolor="silver" width="15%">External Field</td><td bgcolor="silver" width="35%">Notes</td></tr>
|- bgcolor="silver"
<tr><td>EPL_SITE_ID</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
! Name !! Description
<tr><td>EPL_JOB_ID</td><td>&nbsp;</td><td>&nbsp;</td><td>From Job record</td></tr>
|-
<tr><td>EPL_CONTAINER_ID</td><td>EPL_CONTAINER_ID: The unique identifier for a container.</td><td>&nbsp;</td><td>&nbsp;.</td></tr>
|EPL_SITE_ID || &nbsp;
<tr><td>EPL_SEQUENCE</td><td>The sequence in which the containers should be unloaded.</td><td>&nbsp;</td><td>&nbsp;</td></tr>
|-
<tr><td>EPL_CONTAINER_PACKAGE_CODE</td><td>Container Type Code</td><td>&nbsp;</td><td>&nbsp;</td></tr>
|EPL_JOB_ID ||Not In Use
<tr><td>EPL_CONTAINER_PACKAGE_DESC</td><td>Container Type Description</td><td>&nbsp;</td><td>&nbsp;</td></tr>
|-
<tr><td>EPL_GROSS_WEIGHT</td><td>Gross weight of the container</td><td>&nbsp;</td><td>&nbsp;</td></tr>
|EPL_CONTAINER_ID ||The unique identifier for a container. Note that this is the value that will be compared to the scanned barcode. If this is different to a visible container number, this should be provided in one of the other tags on this record, for example, CODE_1/2/3.
<tr><td>EPL_DESCRIPTION_LONG</td><td>Long description of the container</td><td>&nbsp;</td><td>&nbsp;</td></tr>
|-
<tr><td>EPL_CODE_1</td><td>Additional code field used for any purpose</td><td>&nbsp;</td><td>&nbsp;</td></tr>
|EPL_SEQUENCE ||The sequence in which the containers should be unloaded. This should be numeric, i.e. "1", "0004", etc.
<tr><td>EPL_CODE_2</td><td>Additional code field used for any purpose</td><td>&nbsp;</td><td>&nbsp;</td></tr>
|-
<tr><td>EPL_CODE_3</td><td>Additional code field used for any purpose</td><td>&nbsp;</td><td>&nbsp;</td></tr>
|EPL_CONTAINER_PACKAGE_CODE ||Container Type Code
<tr><td>EPOD_PRODUCTS</td><td>EPOD_PRODUCTS contains a series of EPOD_PRODUCT objects associated to the container.</td><td>&nbsp;</td><td>&nbsp;</td></tr>
|-
</table>
|EPL_CONTAINER_PACKAGE_DESC ||Container Type Description
|-
|EPL_GROSS_WEIGHT ||Gross weight of the container
|-
|EPL_CODE_1 ||Additional code field used for any purpose
|-
|EPL_CODE_2 ||Additional code field used for any purpose
|-
|EPL_CODE_3 ||Additional code field used for any purpose
|-
|EPL_DESCRIPTION_LONG ||Long description of the container
|-
|EPL_FLAGS ||EPL_FLAGS contains flags used to indicate hazardous, gel, ice, radioactive etc - it is not used in EPOD, but is stored for reporting purposes. Content is XML with it's own configurable XSD
|-
|EPL_VALID_DATE ||The date up until the contents of the package are valid - controls warnings at delivery.
|-
|EPL_VALID_TIME ||The time up until the contents of the package are valid - controls warnings at delivery.
|-
|EPL_CONTAINER_ONLY ||Controls whether a container with products inside it has the contents scanned at initial unloading. This is controlled at a job group level, but may be over-ridden per container, to support bulk consolidated pallets, mixed product in totes, etc.
Multiple values:
* If omitted or blank - behaviour inherited from the job group
* "Y" - contents are never scanned on initial unloading
* "N" - contents are always scanned on initial unloading
|-
|EPOD_PRODUCTS ||EPOD_PRODUCTS contains a series of EPOD_PRODUCT objects associated to the container.
|}
 


'''EPOD_PRODUCT'''
'''EPOD_PRODUCT'''
<table border="1" width="100%"><tr>
{| class="wikitable" border="1"
<td bgcolor="silver" width="15%">Name</td><td bgcolor="silver" width="35%">Description</td><td bgcolor="silver" width="15%">External Field</td><td bgcolor="silver" width="35%">Notes</td></tr>
|- bgcolor="silver"
<tr><td>EPL_SITE_ID</td><td>Unique Reference for the Site that the Job belongs to</td><td>&nbsp;</td><td>&nbsp;</td></tr>
! Name !! Description
<tr><td>EPL_JOB_ID</td><td>Unique reference for the job. If not provided on Import, this will be generated by EPOD</td><td>&nbsp;</td><td>&nbsp;</td></tr>
|-
<tr><td>EPL_CONTAINER_ID</td><td>EPL_CONTAINER_ID: The unique identifier for a cotainer.</td><td>&nbsp;</td><td>&nbsp;</td></tr>
|EPL_SITE_ID || &nbsp;
<tr><td>EPL_PRODUCT_CODE</td><td>The unique identifier for the product delivered/collected</td><td>&nbsp;</td><td>&nbsp;</td></tr>
|-
<tr><td>EPL_SEQUENCE</td><td>A unique sequence for the product.</td><td>&nbsp;</td><td>&nbsp;</td></tr>
|EPL_JOB_ID ||Not In Use
<tr><td>EPL_CUST_REF</td><td>Customer's Order Reference</td><td>&nbsp;</td><td>&nbsp;</td></tr>
|-
<tr><td>EPL_DESCRIPTION</td><td>A 40-character description of the product</td><td>&nbsp;</td><td>&nbsp;</td></tr>
|EPL_CONTAINER_ID ||Not In Use
<tr><td>EPL_PRODUCT_QTY_PLANNED</td><td>The quantity of the product to be delivered/collected</td><td>&nbsp;</td><td>&nbsp;</td></tr>
|-
<tr><td>EPL_PRODUCT_QTY_ORDERED</td><td>The quantity of the product ordered.</td><td>&nbsp;</td><td>&nbsp;</td></tr>
|EPL_PRODUCT_CODE ||Product Code
<tr><td>EPL_ITEM_TYPE</td><td>A group defining the Product Type.</td><td>&nbsp;</td><td>&nbsp;</td></tr>
|-
<tr><td>EPL_UNIT_TYPE</td><td>The Product UOM.</td><td>&nbsp;</td><td>&nbsp;</td></tr>
|EPL_SEQUENCE ||Sequence for display on device and screens. This should be in numeric format e.g. "1", "0004", etc.
<tr><td>EPL_DESCRIPTION_LONG</td><td>A 255 character long description. Can be used to extend the description above.</td><td>&nbsp;</td><td>&nbsp;</td></tr>
|-
<tr><td>EPL_PRODUCT_WEIGHT</td><td>The item weight of this product</td><td>&nbsp;</td><td>&nbsp;</td></tr>
|EPL_CUST_REF ||For display on device
</table>
|-
|EPL_DESCRIPTION ||Product Description
|-
|EPL_PRODUCT_QTY_PLANNED ||Planned collection/delivery quantity
|-
|EPL_PRODUCT_QTY_ORDERED ||Ordered product quantity, if required. For display on POD, if required
|-
|EPL_ITEM_TYPE ||Product Item Type (DU or Category), for display on device and POD, if required.
|-
|EPL_UNIT_TYPE ||Product Unit Type (UOM), for display on device and POD, if required.
|-
|EPL_DESCRIPTION_LONG ||Long Product Description
|-
|EPL_PRODUCT_WEIGHT ||Weight
|-
|EPL_UNIT_PRICE ||Nett price per unit. Note: Do not provide this or Unit VAT if a priced POD is not required. If provided, and the POD format configured for this job supports price, the system will display the Price columns and Totals of Price and VAT. If not provided, the default value 0 will be used to calculate the totals.
|-
|EPL_UNIT_VAT ||VAT per unit.
|}


Notes:
{{Note|
* The jobs should be sent through in the order in which they should be completed. The Sequence field should be sent with a numeric padded value as described in the description.  
* The jobs should be sent through in the order in which they should be completed. The Sequence field should be sent with a numeric padded value as described in the description.  
* Loads and the contained jobs will be sent as one message. Multiple loads can be built into one XML message structure.
* Loads and the contained jobs will be sent as one message. Multiple loads can be built into one XML message structure.
* XSDs for validating the XML structure will be provided.
* XSDs for validating the XML structure will be provided.
}}
A sample of a single load with multiple jobs of many types are shown below - a brief description of the job type is shown in the office instructions:
A sample of a single load with multiple jobs of many types are shown below - a brief description of the job type is shown in the office instructions:
<pre>
<pre>
Line 176: Line 437:
           <EPL_CUST_REF>CR-TEST001001</EPL_CUST_REF>
           <EPL_CUST_REF>CR-TEST001001</EPL_CUST_REF>
           <EPL_JOB_INSTRUCTION>Free Text Instructions</EPL_JOB_INSTRUCTION>
           <EPL_JOB_INSTRUCTION>Free Text Instructions</EPL_JOB_INSTRUCTION>
           <EPL_OFFICE_INSTRUCTION>Multiple container collection with multiple products.</EPL_OFFICE_INSTRUCTION>
           <EPL_OFFICE_INSTRUCTION>Multiple container collection with multiple products.
          </EPL_OFFICE_INSTRUCTION>
           <EPL_START_PLANNED_DATE>20120320</EPL_START_PLANNED_DATE>
           <EPL_START_PLANNED_DATE>20120320</EPL_START_PLANNED_DATE>
           <EPL_START_PLANNED_TIME>00000000</EPL_START_PLANNED_TIME>
           <EPL_START_PLANNED_TIME>00000000</EPL_START_PLANNED_TIME>
Line 339: Line 601:
           <EPL_CUST_REF>CR-LOAD 46</EPL_CUST_REF>
           <EPL_CUST_REF>CR-LOAD 46</EPL_CUST_REF>
           <EPL_JOB_INSTRUCTION>Free Text Instructions</EPL_JOB_INSTRUCTION>
           <EPL_JOB_INSTRUCTION>Free Text Instructions</EPL_JOB_INSTRUCTION>
           <EPL_OFFICE_INSTRUCTION>Containers and loose products. Linked to collection through Job Code</EPL_OFFICE_INSTRUCTION>
           <EPL_OFFICE_INSTRUCTION>Containers and loose products. Linked to collection  
          through Job Code</EPL_OFFICE_INSTRUCTION>
           <EPL_START_PLANNED_DATE>20120320</EPL_START_PLANNED_DATE>
           <EPL_START_PLANNED_DATE>20120320</EPL_START_PLANNED_DATE>
           <EPL_START_PLANNED_TIME>00000000</EPL_START_PLANNED_TIME>
           <EPL_START_PLANNED_TIME>00000000</EPL_START_PLANNED_TIME>
Line 492: Line 755:
           <EPL_CUST_REF>CR-LOAD 46</EPL_CUST_REF>
           <EPL_CUST_REF>CR-LOAD 46</EPL_CUST_REF>
           <EPL_JOB_INSTRUCTION>Free Text Instructions</EPL_JOB_INSTRUCTION>
           <EPL_JOB_INSTRUCTION>Free Text Instructions</EPL_JOB_INSTRUCTION>
           <EPL_OFFICE_INSTRUCTION>Containers and loose products. Linked to collection through Job Code</EPL_OFFICE_INSTRUCTION>
           <EPL_OFFICE_INSTRUCTION>Containers and loose products. Linked to collection
          through Job Code</EPL_OFFICE_INSTRUCTION>
           <EPL_START_PLANNED_DATE>20120320</EPL_START_PLANNED_DATE>
           <EPL_START_PLANNED_DATE>20120320</EPL_START_PLANNED_DATE>
           <EPL_START_PLANNED_TIME>00000000</EPL_START_PLANNED_TIME>
           <EPL_START_PLANNED_TIME>00000000</EPL_START_PLANNED_TIME>
Line 660: Line 924:
</pre>
</pre>


== Sending Mechanism ==
{{Note}} The content of the imported data varies and expands as the the {{#var:System}} product expands. As new items are added to the application, the Import XSD will be modified and issued to you, for informational purposes. The Import XML Schema is referenced in [[#Appendix A: Document References|Appendix A]].
The system provides web services for importing data.
 
 
== Mechanism for Sending Import Files to Web Services ==
The system provides web services for importing and exporting data.
 
There are two mechanisms:
There are two mechanisms:
* Passing the data as a string, through Web Service EPOD_dataservice.asmx
* Passing the data as a string, through Web Service EPOD_dataservice.asmx
* Passing the data as an XML object, through EPOD_dataservice2.asmx
* Passing the data as an XML object, through EPOD_dataservice2.asmx
The IP or web address of the {{#var:System}} server is not mapped into the Partnerlink network at this time, so the exact URL is unknown. This will be confirmed at a later date, for testing purposes.
 
You will be provided a URL to your system implementation - the access to this will be whitelisted and secured through HTTPS.
 
The WSDL for the web services can be found by appending "?wsdl" to the end of the provided web service URL.
 


For each data service, data can be sent via multiple methods, as shown below:
For each data service, data can be sent via multiple methods, as shown below:
Line 671: Line 943:
SOAP 1.1
SOAP 1.1


The following is a sample SOAP 1.1 request and response. The placeholders shown need to be replaced with actual values.
The following is a sample SOAP 1.1 request and response. The place-holders shown need to be replaced with actual values.
<pre>
<pre>
POST /webservices/dataservice/EPOD_dataservice.asmx HTTP/1.1
POST /webservices/dataservice/EPOD_dataservice.asmx HTTP/1.1
Line 847: Line 1,119:
</pre>
</pre>


== Processing Responses ==
== Processing Responses through Web Services ==
The response data is an XML file (either string data or an XML object), as shown in the calling methods above. The result is governed by a schema, in the same way that the import files are. All XSD schemas will be provided to you.
The response data is an XML file (either string data or an XML object), as shown in the calling methods above. The result is governed by a schema, in the same way that the import files are. All XSD schemas will be provided to you.


Line 866: Line 1,138:
<EPOD_IMPORT_RESPONSE RESULT="NAK">
<EPOD_IMPORT_RESPONSE RESULT="NAK">
     <ERRORS>
     <ERRORS>
         <ERROR error="The element 'EPOD_LOAD' has invalid child element 'EPL_SITE_IDX'. List of possible elements expected: 'EPL_SITE_ID'." exception="System.Xml.Schema.XmlSchemaValidationException: The element 'EPOD_LOAD' has invalid child element 'EPL_SITE_IDX'. List of possible elements expected: 'EPL_SITE_ID'."/>
         <ERROR error="The element 'EPOD_LOAD' has invalid child element 'EPL_SITE_IDX'.  
                      List of possible elements expected: 'EPL_SITE_ID'."  
            exception="System.Xml.Schema.XmlSchemaValidationException:  
                      The element 'EPOD_LOAD' has invalid child element 'EPL_SITE_IDX'.  
                      List of possible elements expected: 'EPL_SITE_ID'."/>
     </ERRORS>
     </ERRORS>
</EPOD_IMPORT_RESPONSE>
</EPOD_IMPORT_RESPONSE>
Line 921: Line 1,197:
</pre>
</pre>


== Importing into {{#var:System}} ==
== Export Process ==
== {{#var:System}} Export Process ==
A process runs on a timed schedule within the {{#var:System}} application, to pick up any jobs that have been completed and export them to external systems.
A process runs on a timed schedule within the {{#var:System}} application, to pick up any jobs that have been completed and export them to external systems.


The system be configured to ensure that updates are sent.
== Export Message Content ==
A basic list if all the fields in the interface for Job follows. A full spreadsheet of all the export flows and fields containing all the limitations on length and defaulted values is provided separately.
 
{{Note}} The content of the exported data varies and expands as the {{#var:System}} product expands. As new items are added to the application, the spreadsheet will be modified and issued to you, to aid in any mapping of data into your application. The Export Spreadsheet is referenced in [[#Appendix A: Document References|Appendix A]].  
 


The exporting of this data will be modified to include:
'''EPOD_LOAD'''
* Entered Trailer ID (at Job level).
{| class="wikitable" border="1"
* Clause information (per pallet)
|- bgcolor="silver"
! Name !! Description
|-
|EPL_SITE_ID ||Unique reference of the site that the Load belongs to.
|-
|EPL_LOAD_ID ||Unique reference of the Load.
|-
|EPL_LOAD_START_PLANNED_DATE ||The planned start date and time. This is used to sequence the load, and decide which load is provided to the user.
|-
|EPL_LOAD_START_PLANNED_TIME || &nbsp;
|-
|EPL_LOAD_END_PLANNED_DATE ||The planned end date and time
|-
|EPL_LOAD_END_PLANNED_TIME || &nbsp;
|-
|EPL_VEHICLE_ID ||The Vehicle ID used for completion of this Load
|-
|EPL_USER_ID ||The user who completed the load
|-
|EPL_STATUS ||EPL_STATUS: Status of the current load
|-
|EPL_LOAD_START_ACTUAL_DATE ||The actual start date and time
|-
|EPL_LOAD_START_ACTUAL_TIME || &nbsp;
|-
|EPL_LOAD_END_ACTUAL_DATE ||The actual end date and time
|-
|EPL_LOAD_END_ACTUAL_TIME || &nbsp;
|-
|EPL_LOAD_DISTANCE_PLANNED ||The distance planned by the route planner
|-
|EPL_LOAD_DISTANCE_ACTUAL ||The actual distance travelled (not used)
|-
|EPL_MILEAGE_START ||The mileage taken at the start and end of the load. If enabled, this replaces distance actual.
|-
|EPL_MILEAGE_END || &nbsp;
|-
|EPL_LAST_CHANGED_DATE || &nbsp;
|-
|EPL_LAST_CHANGED_TIME || &nbsp;
|-
|EPL_UDF_LOAD_START ||Contains a UDF XML string of any metrics entered at Load Start
|-
|EPL_UDF_LOAD_END ||Contains a UDF XML string of any metrics entered at Load End
|-
|EPL_LOAD_INFORMATION ||To be populated with any information to be displayed to the user regarding the Load.
|-
|EPL_TIMEZONE || &nbsp;
|-
|EPL_TRAILER_ID ||Trailer Number. To be used if the vehicle being used to fulfil the load is a Tractor unit.
|-
|EPL_ROUTE_CODE ||Route identifier against the trip
|-
|EPOD_JOBS ||Contains a series of EPOD_JOB objects, detailing all the jobs assigned to this load.
|}


== {{#var:System}} Export Message Content ==
A basic list if all the fields in the interface for Job follows. A full spreadsheet of all the export flows and fields containing all the limitations on length and defaulted values is provided separately.


'''EPOD_JOB'''
'''EPOD_JOB'''
<table border="1" width="100%"><tr>
{| class="wikitable" border="1"
<td bgcolor="silver" width="15%">Name</td><td bgcolor="silver" width="35%">Description</td><td bgcolor="silver" width="15%">External Field</td><td bgcolor="silver" width="35%">Notes</td></tr>
|- bgcolor="silver"
<tr><tr><td>EPL_SITE_ID</td><td>Unique Reference for the Site that the Job belongs to</td><td>&nbsp;</td><td>&nbsp;</td></tr>
! Name !! Description
<tr><td>EPL_JOB_ID</td><td>Unique reference for the job. If not provided on Import, this will be generated by EPOD</td><td>&nbsp;</td><td>&nbsp;</td></tr>
|-
<tr><td>EPL_LOAD_ID</td><td>Unique Reference for the Load that the Job belongs to. If not provided, defaulted from the enclosing EPOD_LOAD</td><td>&nbsp;</td><td>As Sent</td></tr>
|EPL_SITE_ID ||Unique Reference for the Site that the Job belongs to
<tr><td>EPL_JOB_TYPE</td><td>D=Delivery, C=Collection, S=Service</td><td>"D" or "C"</td><td>As Sent</td></tr>
|-
<tr><td>EPL_JOB_GROUP</td><td>&nbsp;</td><td>&nbsp;</td><td>As Sent</td></tr>
|EPL_JOB_ID ||Unique reference for the job. If not provided on Import, this will be generated by EPOD
<tr><td>EPL_JOB_INSTRUCTION</td><td>Instructions for the Driver</td><td>&nbsp;</td><td>As Sent</td></tr>
|-
<tr><td>EPL_JOB_SIGNATURE</td><td>The signature taken from the customer when the job was completed. This is in the form of a Base64-encrypted Jpeg file</td><td>&nbsp;</td><td>x</td></tr>
|EPL_LOAD_ID ||Unique Reference for the Load that the Job belongs to. If not provided, defaulted from the enclosing EPOD_LOAD
<tr><td>EPL_REASON_CODE</td><td>If a job has been cancelled, the reason code entered by the user is held here.</td><td>&nbsp;</td><td>x</td></tr>
|-
<tr><td>EPL_LINKED_REASON</td><td>If the job is a delivery, and a collection of the same load with the same EPL_JOB_CODE is cancelled, this delivery will be cancelled, and this field will be set to "Y"</td><td>&nbsp;</td><td>&nbsp;</td></tr>
|EPL_JOB_TYPE ||"D"-Delivery, "C"-Collection, "S"-Service
<tr><td>EPL_STATUS</td><td>C- complete, X cancelled</td><td>&nbsp;</td><td>x</td></tr>
|-
<tr><td>EPL_CUSTOMER_CODE</td><td>Customer Code from external system. If not provided, one will be generated from EPL_CUSTOMER_NAME</td><td>&nbsp;</td><td>&nbsp;</td></tr>
|EPL_JOB_GROUP ||This is setup within the Admin system. Each job group has its own settings and will determine how the Job is processed dependant on these settings.
<tr><td>EPL_PHOTO_ID</td><td>If cancelled, a photo may have been taken by the user. If so, this field is populated with a unique ID.</td><td>&nbsp;</td><td>x</td></tr>
|-
<tr><td>EPL_PHOTO</td><td>The photo taken for the exception. This is in the form of a Base64-encrypted Jpeg file</td><td>&nbsp;</td><td>x</td></tr>
|EPL_CUSTOMER_CODE ||Customer Code from external system. If not provided, one will be generated from EPL_CUSTOMER_NAME
<tr><td>EPL_ENG_SIGNATURE</td><td>The signature taken from the driver/engineer when the job was completed, if required. This is in the form of a Base64-encrypted Jpeg file</td><td>&nbsp;</td><td>x</td></tr>
|-
<tr><td>EPL_SEQUENCE</td><td>The sequence of the job. This could be the sequence sent on Import, a pre-defined sequence (if one was not provided) or a user-changed value (if enabled)</td><td>&nbsp;</td><td>&nbsp;</td></tr>
|EPL_SEQUENCE ||The sequence of the job. This could be the sequence sent on Import, a pre-defined sequence (if one was not provided) or a user-changed value (if enabled)
<tr><td>EPL_START_PLANNED_DATE</td><td>&nbsp;</td><td>&nbsp;</td><td>As Sent</td></tr>
|-
<tr><td>EPL_START_PLANNED_TIME</td><td>&nbsp;</td><td>&nbsp;</td><td>As Sent</td></tr>
|EPL_START_PLANNED_DATE ||Collection/Delivery Window
<tr><td>EPL_END_PLANNED_DATE</td><td>&nbsp;</td><td>&nbsp;</td><td>As Sent</td></tr>
|-
<tr><td>EPL_END_PLANNED_TIME</td><td>&nbsp;</td><td>&nbsp;</td><td>As Sent</td></tr>
|EPL_START_PLANNED_TIME ||Collection/Delivery Window
<tr><td>EPL_START_ACTUAL_DATE</td><td>The date the user actually chose to start the job. Format: YYYYMMDD</td><td>&nbsp;</td><td>x</td></tr>
|-
<tr><td>EPL_START_ACTUAL_TIME</td><td>The time the user actually chose to start the job. Format HHMMSSNN</td><td>&nbsp;</td><td>x</td></tr>
|EPL_END_PLANNED_DATE ||Collection/Delivery Window
<tr><td>EPL_ARRIVED_DATE</td><td>The date the user indicated they arrived at the destination. Format: YYYYMMDD</td><td>&nbsp;</td><td>x</td></tr>
|-
<tr><td>EPL_ARRIVED_TIME</td><td>The time the user indicated they arrived at the destination. Format HHMMSSNN</td><td>&nbsp;</td><td>x</td></tr>
|EPL_END_PLANNED_TIME ||Collection/Delivery Window
<tr><td>EPL_END_ACTUAL_DATE</td><td>The date the user completed or cancelled the job. Format: YYYYMMDD</td><td>&nbsp;</td><td>x</td></tr>
|-
<tr><td>EPL_END_ACTUAL_TIME</td><td>The time the user completed or cancelled the job. Format HHMMSSNN</td><td>&nbsp;</td><td>x</td></tr>
|EPL_JOB_ADDRESS ||A flag indicating whether this is a default Customer Address or a specific address for this job alone.
<tr><td>EPL_DISTANCE_PLANNED</td><td>&nbsp;</td><td>&nbsp;</td><td>As Sent</td></tr>
|-
<tr><td>EPL_DISTANCE_ACTUAL</td><td>&nbsp;</td><td>&nbsp;</td><td>N/A</td></tr>
|EPL_CUSTOMER_NAME ||The Name of the customer
<tr><td>EPL_DRIVING_TIME</td><td>&nbsp;</td><td>&nbsp;</td><td>N/A</td></tr>
|-
<tr><td>EPL_CUSTOMER_NAME</td><td>The Name of the customer</td><td>&nbsp;</td><td>As Sent</td></tr>
|EPL_ADDRESS_1 || &nbsp;
<tr><td>EPL_JOB_ADDRESS</td><td>A flag indicating whether this is a default Customer Address or a specific address for this job alone.</td><td>&nbsp;</td><td>N/A</td></tr>
|-
<tr><td>EPL_ADDRESS_1</td><td>&nbsp;</td><td>&nbsp;</td><td>As Sent</td></tr>
|EPL_ADDRESS_2 || &nbsp;
<tr><td>EPL_ADDRESS_2</td><td>&nbsp;</td><td>&nbsp;</td><td>As Sent</td></tr>
|-
<tr><td>EPL_ADDRESS_3</td><td>&nbsp;</td><td>&nbsp;</td><td>As Sent</td></tr>
|EPL_ADDRESS_3 || &nbsp;
<tr><td>EPL_ADDRESS_4</td><td>&nbsp;</td><td>&nbsp;</td><td>As Sent</td></tr>
|-
<tr><td>EPL_ADDRESS_5</td><td>&nbsp;</td><td>&nbsp;</td><td>N/A</td></tr>
|EPL_ADDRESS_4 || &nbsp;
<tr><td>EPL_POSTCODE</td><td>&nbsp;</td><td>&nbsp;</td><td>As Sent</td></tr>
|-
<tr><td>EPL_CONTACT</td><td>&nbsp;</td><td>&nbsp;</td><td>As Sent</td></tr>
|EPL_ADDRESS_5 || &nbsp;
<tr><td>EPL_TELEPHONE</td><td>&nbsp;</td><td>&nbsp;</td><td>As Sent</td></tr>
|-
<tr><td>EPL_EMAIL</td><td>&nbsp;</td><td>&nbsp;</td><td>As Sent</td></tr>
|EPL_POSTCODE || &nbsp;
<tr><td>EPL_INVOICED</td><td>&nbsp;</td><td>&nbsp;</td><td>N/A</td></tr>
|-
<tr><td>EPL_CUST_SIGNATORY</td><td>The name of the customer signatory on the job.</td><td>&nbsp;</td><td>x</td></tr>
|EPL_CONTACT || &nbsp;
<tr><td>EPL_JOB_CODE</td><td>External reference for the Job. This element can be used to link a collection and delivery together under the same reference. So, if an order is being collected at A and delivered at B, there are 2 jobs, each with a unique Job ID, but with the same Job Code. Optionally, EPOD will keep the Delivery leg of a linked job updated with the information captured from the collection.</td><td>&nbsp;</td><td>As Sent</td></tr>
|-
<tr><td>EPL_CUST_REF</td><td>Customer's Order Reference</td><td>&nbsp;</td><td>As Sent</td></tr>
|EPL_TELEPHONE || &nbsp;
<tr><td>EPL_OFFICE_INSTRUCTION</td><td>Instructions for Admin staff</td><td>&nbsp;</td><td>As Sent</td></tr>
|-
<tr><td>EPL_SIGNED_UNCHECKED</td><td>An indication whether the customer signed for the goods without checking them first. Note that this field can be used for any check-box entry, as this is configurable.</td><td>&nbsp;</td><td>x</td></tr>
|EPL_EMAIL || &nbsp;
<tr><td>EPL_SO_NUMBER</td><td>Sales Order Reference.</td><td>&nbsp;</td><td>As Sent</td></tr>
|-
<tr><td>EPL_TNCS</td><td>An XML fragment, displaying the Terms and Conditions agreed to by the customer when signing for the goods. This can also include up to 3 configurable check-boxes that the user may check.</td><td>&nbsp;</td><td>x</td></tr>
|EPL_LAT ||Latitude of the address for the job - used to create addresses
<tr><td>EPL_ORDER_DATE</td><td>Date Order created - defaulted to the date the order was received if not provided</td><td>&nbsp;</td><td>As Sent</td></tr>
|-
<tr><td>EPL_SALES_CONTACT</td><td>The operative who took the order. Can be used as a display field for documentation</td><td>&nbsp;</td><td>As Sent</td></tr>
|EPL_LONG ||Longitude of the address for the job - used to create addresses
<tr><td>EPL_USER_NOTES</td><td>Optional Notes entered by the driver while completing the job.</td><td>&nbsp;</td><td>x</td></tr>
|-
<tr><td>EPL_OWNER_NAME</td><td>&nbsp;</td><td>&nbsp;</td><td>As Sent</td></tr>
|EPL_JOB_CODE ||External reference for the Job. This element can be used to link a collection and delivery together under the same reference. So, if an order is being collected at A and delivered at B, there are 2 jobs, each with a unique Job ID, but with the same Job Code. Optionally, EPOD will keep the Delivery leg of a linked job updated with the information captured from the collection.
<tr><td>EPL_SERVICE_LEVEL</td><td>&nbsp;</td><td>&nbsp;</td><td>As Sent</td></tr>
|-
<tr><td>EPL_LAST_CHANGED_DATE</td><td>The date the record was last updated. Auditing use only.</td><td>&nbsp;</td><td>N/A</td></tr>
|EPL_CUST_REF ||Customer's Order Reference
<tr><td>EPL_LAST_CHANGED_TIME</td><td>The time the record was last updated. Auditing use only.</td><td>&nbsp;</td><td>N/A</td></tr>
|-
<tr><td>EPOD_CONTAINERS</td><td>Contains a series of EPOD_CONTAINER objects, detailing all the deliverable items on this load. If there are loose products, there will also be a container with ID '000000000' holding these products.</td><td>&nbsp;</td><td>A collection of pallets that were part of the job, plus the status.</td></tr>
|EPL_SO_NUMBER ||Sales Order Reference.
<tr><td>EPOD_SERVICE</td><td>If the job is a Service, this object holds all the service-related information. In that case, no containers or products will be specified against the job.</td><td>&nbsp;</td><td>Applicable only to ''CALIDUS'' eSERV</td></tr>
|-
</table>
|EPL_ORDER_DATE ||Date Order created - defaulted to the date the order was received if not provided
|-
|EPL_OWNER_NAME ||Can be used as a display field for documentation, or indicating another Site ID that owns the job that is being executed by this site.
|-
|EPL_EXT_REF ||An external reference for the host system if required. For Partnerlink, this will be the PartnerJobID.
|-
|EPL_STATUS ||EPL_STATUS: Status of the job.
"C" for any items delivered/collected with any quantity, "X" if cancelled
|-
|EPL_LINKED_ID ||An identifier that informs the system that this job has been linked (consolidated) with other jobs manually by the driver.  
The format is irrelevant - if multiple jobs on the same load have the same linked ID, they were consolidated.
|-
|EPL_JOB_INSTRUCTION ||Instructions for the Driver
|-
|EPL_REASON_CODE ||If a job has been cancelled, the Job-level reason code entered by the user is held here.
|-
|EPL_LINKED_REASON ||If the job is a delivery, and a collection of the same load with the same EPL_JOB_CODE is cancelled, this delivery will be cancelled, and this field will be set to "Y"
|-
|EPL_PHOTO_ID ||N/A
|-
|EPL_PHOTO_DESCRIPTION ||N/A
|-
|EPL_START_ACTUAL_DATE ||The date the user actually chose to start the job. Format: YYYYMMDD
|-
|EPL_START_ACTUAL_TIME ||The time the user actually chose to start the job. Format HHMMSSNN
|-
|EPL_END_ACTUAL_DATE ||The date the user completed or cancelled the job. Format: YYYYMMDD
|-
|EPL_END_ACTUAL_TIME ||The time the user completed or cancelled the job. Format HHMMSSNN
|-
|EPL_DISTANCE_PLANNED || &nbsp;
|-
|EPL_DISTANCE_ACTUAL || &nbsp;
|-
|EPL_DRIVING_TIME || &nbsp;
|-
|EPL_INVOICED ||A flag indicating the driver ticked an Invoiced box when completing the job.
|-
|EPL_CUST_SIGNATORY ||The name of the customer signatory on the job.
|-
|EPL_OFFICE_INSTRUCTION ||Instructions for Admin staff
|-
|EPL_SIGNED_UNCHECKED ||An indication whether the customer signed for the goods without checking them first. Note that this field can be used for any check-box entry, as this is configurable.
|-
|EPL_TNCS ||An XML fragment, displaying the Terms and Conditions agreed to by the customer when signing for the goods. This can also include up to 3 configurable check-boxes that the user may check.
|-
|EPL_ORDER_TIME ||Time Order Created
|-
|EPL_SALES_CONTACT ||The operative who took the order. Can be used as a display field for documentation
|-
|EPL_USER_NOTES ||Optional Notes entered by the driver while completing the job.
|-
|EPL_SERVICE_LEVEL ||Display field, containing Service Level text
|-
|EPL_LAST_CHANGED_DATE || &nbsp;
|-
|EPL_LAST_CHANGED_TIME || &nbsp;
|-
|EPL_ARRIVAL_DATE ||The date the user indicated they arrived at the destination. Format: YYYYMMDD
|-
|EPL_ARRIVAL_TIME ||The time the user indicated they arrived at the destination. Format HHMMSSNN
|-
|EPL_XF_VALUES || &nbsp;
|-
|EPL_TRAILER_ID ||To be used if the vehicle being used to fulfil the job is a Tractor unit, and a trailer ID has been entered by the user.
|-
|EPL_PF_DEPOT || &nbsp;
|-
|EPL_PF_TRACKING_NO || &nbsp;
|-
|EPL_JOB_STATUS ||A Job Status entered by the driver, usually to indicate whether a job should be re-scheduled. Optional.
|-
|EPL_UDF_JOBDETS ||Contains user-defined fields entered when processing Collections and Deliveries on the Job Details tab, in UDF formatted XML
|-
|EPL_TIMEZONE ||TimeZone
|-
|EPL_LOADING_TYPE ||Controls whether this job is seen to be a Loading task  at a depot (Job Type = "C") or unloading at a depot (Job Type = "D"). Values can be "Y" or "N" or "" - only "Y" indicates whether the job is a loading/unloading task.
|-
|EPL_GENERATED ||Indicates whether the job is generated within C-EPOD.
|-
|EPL_SWAP_VEHICLE ||Whether the vehicle was swapped
|-
|EPL_COL_DATE ||Collection Date
|-
|EPL_ACCOUNT ||Account Name
|-
|EPL_JOB_SIGNATURE ||The signature taken from the customer when the job was completed. This is in the form of a Base64-encrypted Jpeg file
|-
|EPL_PHOTO ||N/A
|-
|EPL_ENG_SIGNATURE ||The signature taken from the driver/engineer when the job was completed, if required. This is in the form of a Base64-encrypted Jpeg file
|-
|EPL_APPROVED_IND ||If set to 1, the job has been approved in EPOD and no more time/expense entries can be added against the job.
|-
|EPL_APPROVED_EMAIL_IND ||If set to 1, an automatic email will also be sent by EPOD once the job is approved.
|-
|EPL_SUBMITTED_IND ||If set to 1, the EPOD device has finished sending time/expense entries against the job.
|-
|EPOD_JOB_ADDRESS ||Any Job address against the job, if different to the customer address. Consisting of the following tags if present:
|-
|EPL_ADDRESS_TYPE ||"D" - Delivery, "C" - Collection, "O" - Origin, "F" Final Destination.
|-
|EPL_NAME || &nbsp;
|-
|EPL_ADDRESS_1 || &nbsp;
|-
|EPL_ADDRESS_2 || &nbsp;
|-
|EPL_ADDRESS_3 || &nbsp;
|-
|EPL_ADDRESS_4 || &nbsp;
|-
|EPL_ADDRESS_5 || &nbsp;
|-
|EPL_POSTCODE || &nbsp;
|-
|EPL_CONTACT || &nbsp;
|-
|EPL_TELEPHONE || &nbsp;
|-
|EPL_EMAIL || &nbsp;
|-
|EPL_LAT ||Latitude of the address
|-
|EPL_LONG ||Longitude of the address
|-
|EPL_TRAVEL_PLANNED ||Planned travel time in minutes
|-
|EPL_WORK_PLANNED ||Planned work time in minutes
|-
|EPL_WORK_ACTUAL ||Actual work time in minutes
|-
|EPL_ODO_START ||Start Odometer reading
|-
|EPL_ODO_END ||End Odometer reading
|-
|EPOD_TIME_WINDOWS ||Time windows associated to the job
|-
|EPOD_TIME_WINDOW || &nbsp;
|-
|ETW_TIME_START ||Start time for the window
|-
|ETW_TIME_END ||End time for the window
|-
|EPOD_CONTAINERS ||Contains a series of EPOD_CONTAINER objects, detailing all the deliverable items on this load. If there are loose products, there will also be a container with ID '000000000000000' holding these products.
|-
|EPOD_SERVICES ||If the job is a Service, this object contains a series of EPOD_SERVICE objects, each holding all the service-related information for each service item. In that case, no containers or products will be specified against the job.
|}
 


'''EPOD_CONTAINER'''
'''EPOD_CONTAINER'''
<table border="1" width="100%"><tr>
{| class="wikitable" border="1"
<td bgcolor="silver" width="15%">Name</td><td bgcolor="silver" width="35%">Description</td><td bgcolor="silver" width="15%">External Field</td><td bgcolor="silver" width="35%">Notes</td></tr>
|- bgcolor="silver"
<tr><td>EPL_SITE_ID</td><td>Unique Reference for the Site that the Job belongs to</td><td>&nbsp;</td><td>&nbsp;</td></tr>
! Name !! Description
<tr><td>EPL_JOB_ID</td><td>Unique reference for the job. If not provided on Import, this will be generated by EPOD</td><td>&nbsp;</td><td>&nbsp;</td></tr>
|-
<tr><td>EPL_CONTAINER_ID</td><td>EPL_CONTAINER_ID: The unique identifier for a cotainer.</td><td>&nbsp;</td><td>&nbsp;</td></tr>
|EPL_SITE_ID ||Unique Reference for the Site that the Job belongs to
<tr><td>EPL_SEQUENCE</td><td>A sequence for the containers to be shown on the user's device.</td><td>&nbsp;</td><td>As Sent</td></tr>
|-
<tr><td>EPL_CONTAINER_PACKAGE_CODE</td><td>&nbsp;</td><td>&nbsp;</td><td>As Sent</td></tr>
|EPL_JOB_ID ||Unique reference for the job. If not provided on Import, this will be generated by EPOD
<tr><td>EPL_CONTAINER_PACKAGE_DESC</td><td>&nbsp;</td><td>&nbsp;</td><td>As Sent</td></tr>
|-
<tr><td>EPL_REASON_CODE</td><td>If a container has been cancelled, the reason code entered by the user is held here.</td><td>&nbsp;</td><td>x</td></tr>
|EPL_CONTAINER_ID ||The unique identifier for a container.
<tr><td>EPL_LINKED_REASON</td><td>If the job is a delivery, and a collection of this container on the same load with the same EPL_JOB_CODE is cancelled, this container will be cancelled, and this field will be set to "Y"</td><td>&nbsp;</td><td>x</td></tr>
|-
<tr><td>EPL_STATUS</td><td>EPL_STATUS: Status of the current Container. C-Completed, X-Cancelled.</td><td>&nbsp;</td><td>x</td></tr>
|EPL_STATUS ||Status of the current Container. "C"-Completed, "X"-Cancelled.
<tr><td>EPL_PHOTO_ID</td><td>If cancelled, or received with a clause, a photo may have been taken by the user. If so, this field is populated with a unique ID.</td><td>&nbsp;</td><td>x</td></tr>
|-
<tr><td>EPL_PHOTO</td><td>The photo taken for the exception. This is in the form of a Base64-encrypted Jpeg file</td><td>&nbsp;</td><td>x</td></tr>
|EPL_SEQUENCE ||A sequence for the containers to be shown on the user's device, in numeric format.
<tr><td>EPL_CUST_COMMENTS</td><td>Optional entry by the user, indicating whether the customer has identified an issue with the received item (a claused receipt). If present, the customer may have requested an image, which would be contained in EPL_PHOTO.</td><td>&nbsp;</td><td>&nbsp;</td></tr>
|-
<tr><td>EPL_DESCRIPTION_LONG</td><td>&nbsp;</td><td>&nbsp;</td><td>As Sent</td></tr>
|EPL_CONTAINER_PACKAGE_CODE || &nbsp;
<tr><td>EPL_CODE_1</td><td>Multi-purpose field</td><td>&nbsp;</td><td>As Sent</td></tr>
|-
<tr><td>EPL_CODE_2</td><td>Multi-purpose field</td><td>&nbsp;</td><td>As Sent</td></tr>
|EPL_CONTAINER_PACKAGE_DESC || &nbsp;
<tr><td>EPL_CODE_3</td><td>Multi-purpose field</td><td>&nbsp;</td><td>As Sent</td></tr>
|-
<tr><td>EPL_LAST_CHANGED_DATE</td><td>The date the record was last updated. Auditing use only.</td><td>&nbsp;</td><td>N/A</td></tr>
|EPL_REASON_CODE ||If a job has been cancelled, the reason code entered by the user is held here.
<tr><td>EPL_LAST_CHANGED_TIME</td><td>The time the record was last updated. Auditing use only.</td><td>&nbsp;</td><td>N/A</td></tr>
|-
<tr><td>EPOD_PRODUCTS</td><td>Contains a series of EPOD_PRODUCTS objects, detailing the products within the container, or loose products</td><td>&nbsp;</td><td>N/A</td></tr>
|EPL_LINKED_REASON ||If the job is a delivery, and a collection of this container on the same load with the same EPL_JOB_CODE is cancelled, this container will be cancelled, and this field will be set to "Y"
</table>
|-
|EPL_PHOTO_ID ||N/A
|-
|EPL_PHOTO ||N/A
|-
|EPL_PHOTO_DESCRIPTION ||N/A
|-
|EPL_GROSS_WEIGHT ||Gross Weight
|-
|EPL_DESCRIPTION_LONG || &nbsp;
|-
|EPL_CODE_1 ||Multi-purpose field
|-
|EPL_CODE_2 ||Multi-purpose field
|-
|EPL_CODE_3 ||Multi-purpose field
|-
|EPL_LAST_CHANGED_DATE || &nbsp;
|-
|EPL_LAST_CHANGED_TIME || &nbsp;
|-
|EPL_CUST_COMMENTS ||Optional entry by the user, indicating whether the customer has identified an issue with the received item (a claused receipt).
|-
|EPL_VALID_DATE ||The date up until the contents of the package are valid - controls warnings at delivery.
|-
|EPL_VALID_TIME ||The time up until the contents of the package are valid - controls warnings at delivery.
|-
|EPL_TYPE ||Shows whether this container was Ad Hoc Scanned ("A") or was preplanned (blank)
|-
|EPL_CONTAINER_ONLY ||Controls whether a container with products inside it has the contents scanned at initial unloading. This is controlled at a job group level, but may be over-ridden per container, to support bulk consolidated pallets, mixed product in totes, etc.
Multiple values:
If omitted or blank - behaviour inherited from the job group
Y - contents are never scanned on initial unloading
N - contents are always scanned on initial unloading
|-
|EPOD_PRODUCTS ||Contains a series of EPOD_PRODUCTS objects, detailing the products within the container, or loose products
|}
 


'''EPOD_PRODUCT'''
'''EPOD_PRODUCT'''
<table border="1" width="100%"><tr>
{| class="wikitable" border="1"
<td bgcolor="silver" width="15%">Name</td><td bgcolor="silver" width="35%">Description</td><td bgcolor="silver" width="15%">External Field</td><td bgcolor="silver" width="35%">Notes</td></tr>
|- bgcolor="silver"
<tr><td>EPL_SITE_ID</td><td>Unique Reference for the Site that the Job belongs to</td><td>&nbsp;</td><td>As Sent</td></tr>
! Name !! Description
<tr><td>EPL_JOB_ID</td><td>Unique reference for the job. If not provided on Import, this will be generated by EPOD</td><td>&nbsp;</td><td>As Sent</td></tr>
|-
<tr><td>EPL_CONTAINER_ID</td><td>EPL_CONTAINER_ID: The unique identifier for a cotainer.</td><td>&nbsp;</td><td>As Sent</td></tr>
|EPL_SITE_ID ||Unique reference of the site that the Product belongs to.
<tr><td>EPL_PRODUCT_CODE</td><td>The unique identifier for the product delivered/collected</td><td>&nbsp;</td><td>As Sent</td></tr>
|-
<tr><td>EPL_SEQUENCE</td><td>A unique sequence for the product.</td><td>&nbsp;</td><td>N/A</td></tr>
|EPL_JOB_ID ||Unique reference of the job that the Product belongs to.
<tr><td>EPL_DESCRIPTION</td><td>A 40-character description of the product</td><td>&nbsp;</td><td>As Sent</td></tr>
|-
<tr><td>EPL_DESCRIPTION_LONG</td><td>A 255 character long description. Can be used to extend the description above.</td><td>&nbsp;</td><td>As Sent</td></tr>
|EPL_CONTAINER_ID ||Unique reference of the container that the Product belongs to. If this is loose product, the container will be "000000000000"
<tr><td>EPL_PRODUCT_QTY_PLANNED</td><td>The quantity of the product to be delivered/collected</td><td>&nbsp;</td><td>As Sent</td></tr>
|-
<tr><td>EPL_PRODUCT_QTY_ACTUAL</td><td>The actual quantity delivered/collected.</td><td>&nbsp;</td><td>x</td></tr>
|EPL_PRODUCT_CODE ||Unique reference of the Product
<tr><td>EPL_PRODUCT_QTY_CASE</td><td>DESC</td><td>Not in use</td><td>N/A</td></tr>
|-
<tr><td>EPL_PRODUCT_QTY_ORDERED</td><td>DESC</td><td>The quantity of the product ordered.</td><td>As Sent</td></tr>
|EPL_SEQUENCE ||The sequence of the products within the container. Value must be numeric in the range 0-9999
<tr><td>EPL_REASON_CODE</td><td>If a product has been cancelled or the quantity has been chanegd, the reason code entered by the user is held here.</td><td>&nbsp;</td><td>x</td></tr>
|-
<tr><td>EPL_LINKED_REASON</td><td>If the job is a delivery, and a collection of this product on the same load with the same EPL_JOB_CODE and EPL_CONTAINER_ID is cancelled, this product will be cancelled, and this field will be set to "Y"</td><td>&nbsp;</td><td>x</td></tr>
|EPL_DESCRIPTION ||Description of the product
<tr><td>EPL_STATUS</td><td>EPL_STATUS: Status of the current Product. C-Completed, X-Cancelled.</td><td>&nbsp;</td><td>x</td></tr>
|-
<tr><td>EPL_PHOTO_ID</td><td>If cancelled, or received with a clause, a photo may have been taken by the user. If so, this field is populated with a unique ID.</td><td>&nbsp;</td><td>x</td></tr>
|EPL_DESCRIPTION_LONG ||Long description of the product
<tr><td>EPL_PHOTO</td><td>The photo taken for the exception. This is in the form of a Base64-encrypted Jpeg file</td><td>&nbsp;</td><td>x</td></tr>
|-
<tr><td>EPL_PRODUCT_WEIGHT</td><td>The item weight of this product</td><td>&nbsp;</td><td>As Sent</td></tr>
|EPL_PRODUCT_QTY_PLANNED || &nbsp;
<tr><td>EPL_CUST_REF</td><td>Customer's Order Reference</td><td>&nbsp;</td><td>As Sent</td></tr>
|-
<tr><td>EPL_ITEM_TYPE</td><td>A group defining the Product Type.</td><td>&nbsp;</td><td>As Sent</td></tr>
|EPL_PRODUCT_QTY_ACTUAL ||Actually delivered quantity
<tr><td>EPL_UNIT_TYPE</td><td>The Product UOM.</td><td>&nbsp;</td><td>As Sent</td></tr>
|-
<tr><td>EPL_LAST_CHANGED_DATE</td><td>The date the record was last updated. Auditing use only.</td><td>&nbsp;</td><td>N/A</td></tr>
|EPL_PRODUCT_QTY_CASE || &nbsp;
<tr><td>EPL_LAST_CHANGED_TIME</td><td>The time the record was last updated. Auditing use only.</td><td>&nbsp;</td><td>N/A</td></tr>
|-
</table>
|EPL_PRODUCT_QTY_ORDERED || &nbsp;
|-
|EPL_REASON_CODE ||If the quantity has changed or the product line has been cancelled, a Detail-level reason code will be present
|-
|EPL_LINKED_REASON ||EPL_LINKED_REASON: Y if the reason code is carried from the linked collection - defaults to N
|-
|EPL_STATUS ||EPL_STATUS: Status of the current product.
"C" for delivered with any quantity, "X" if cancelled
|-
|EPL_PHOTO_ID ||N/A
|-
|EPL_PHOTO ||N/A
|-
|EPL_PHOTO_DESCRIPTION ||N/A
|-
|EPL_PRODUCT_WEIGHT || &nbsp;
|-
|EPL_CUST_REF || &nbsp;
|-
|EPL_ITEM_TYPE || &nbsp;
|-
|EPL_UNIT_TYPE || &nbsp;
|-
|EPL_CUST_COMMENTS ||Optional entry by the user, indicating whether the customer has identified an issue with the received item (a claused receipt).  
|-
|EPL_LAST_CHANGED_DATE || &nbsp;
|-
|EPL_LAST_CHANGED_TIME || &nbsp;
|-
|EPL_UNIT_PRICE ||Nett price per unit.
|-
|EPL_UNIT_VAT ||VAT per unit.
|}
 


{{Note}} Regarding Signature and Photo data formats in this message:
{{Note}} Regarding Signature and Photo data formats in this message:
Line 1,134: Line 1,683:
{{Note}} The signature has been shortened for the purposes of this document.
{{Note}} The signature has been shortened for the purposes of this document.


== {{#var:System}} Export Mechanism ==
{{Note}} The content of the exported data varies and expands as the {{#var:System}} product expands. As new items are added to the application, a full XSD will be modified and issued to you, to aid in validating data passed into your application. The Import XSD is referenced in [[#Appendix A: Document References|Appendix A]].  
The system will be configured to send to a web service, requiring a string (rather than an XML object) input.  


The identity of the web service will be defined by the TMS team as part of this development.
 
=== Vehicle Checks Format ===
Vehicle Defect Checks are configurable within {{#var:System}}. The resulting checks are stored naturally within the database as XML fragments, which may be validated with its own XSD. The vehicle checks may only be requested through the EPOD_EXPORT_VEHICLE_CHECKS webservice request, and the response XSD is referenced in [[#Appendix A: Document References|Appendix A]].
 
Vehicle Checks XML exports as a series of questions and answers from the device and may be of several different types:
* Numeric - the user will be prompted to enter a number only as the response , for example, What is the current Mileage?
* Text - The user will be prompted to enter a text response.
* Boolean - The user is prompted to enter a yes or no response, for example, Does the Windscreen have any cracks. The options allowed can be cycled through by pressing on the button.
* Option - The user will be prompted with a number of boxes that must be checked. The options allowed can be cycled through by pressing on the button.
* Multi-state Check boxes - the user can cycle through all available values on the check-box, for example, unchecked (blank), Failed (N), Not Applicable (Y), Passed (Y), etc.
 
An example export is shown below:
<EPOD_EXPORT_VEHICLECHECKS_RESPONSE RESULT="ACK">
    <EPOD_VEHICLE_CHECKS>
        <EPOD_VEHICLE_CHECK>
            <EPL_SITE_ID>DEMO</EPL_SITE_ID>
            <EPL_VEHICLE_ID>VAN</EPL_VEHICLE_ID>
            <EPL_VEHICLE_CHECK_DATE>20141217</EPL_VEHICLE_CHECK_DATE>
            <EPL_VEHICLE_CHECK_TIME>0</EPL_VEHICLE_CHECK_TIME>
            <EPL_USER_ID>MATT</EPL_USER_ID>
            <VEHICLE_CHECK_DATA>
                <QUESTION ID="0001">
                    <TEXT>Please check the following items.</TEXT>
                    <FORMAT>X</FORMAT>
                    <SKIPABLE>N</SKIPABLE>
                    <ITEMS>
                        <ITEM ANSWER="Y">Oil Level</ITEM>
                        <ITEM ANSWER="Y">Tyres</ITEM>
                        <ITEM ANSWER="Y">Brakes</ITEM>
                        <ITEM ANSWER="Y">Water</ITEM>
                        <ITEM ANSWER="Y">Lights</ITEM>
                    </ITEMS>
                </QUESTION>
                <QUESTION ID="0002">
                    <TEXT>Please enter any comments.</TEXT>
                    <FORMAT>T</FORMAT>
                    <SKIPABLE>Y</SKIPABLE>
                    <ANSWER>na</ANSWER>
                </QUESTION>
                <QUESTION ID="0003">
                    <TEXT>What is the current Mileage?</TEXT>
                    <FORMAT>N</FORMAT>
                    <SKIPABLE>N</SKIPABLE>
                    <ANSWER>1000</ANSWER>
                </QUESTION>
            </VEHICLE_CHECK_DATA>
        </EPOD_VEHICLE_CHECK>
    </EPOD_VEHICLE_CHECKS>
</EPOD_EXPORT_VEHICLECHECKS_RESPONSE>
 
 
=== UDF Format ===
The {{#var:System}} product can be configured to accept data entry of any non-critical field at several major points in processing jobs, for example:
* Load Start/End Metrics
* General Job Details
* Service:
** Prework/Postwork checks
** Diagnosis/Report fields
 
The mechanism of User-defined Fields (UDF) allows this configuration.
 
Similarly to Vehicle Checks, UDF responses are held natively within the database as XML fragments, which may be validated with its own XSD. The vehicle checks may only be requested through the EPOD_EXPORT_VEHICLE_CHECKS webservice request, and the response XSD is referenced in [[#Appendix A: Document References|Appendix A]].
 
The allowed field types are extended from Vehicle Checks, allowing also:
* Label.
* Numeric.
* Text.
* Text Area.
* Checks.
* Options.
* Tri-state Checks.
* Tri-state Options.
* Drop-down lists.
 
The format differs slightly - a sample is shown below:
<FORM NAME="Job Details" REQUIRED="Y">
  <FIELD ID="WEIGHBRIDGE_WEIGHT">
      <TEXT>Weight</TEXT>
      <FORMAT>N</FORMAT>
      <REQUIRED>^0*[1-9][0-9]{2,4}$</REQUIRED>
      <VALUE>123.45</VALUE>
  </FIELD>
  <FIELD ID="WEIGHBRIDGE_TICKET">
      <TEXT>Weighbridge Number</TEXT>
      <FORMAT>T</FORMAT>
      <REQUIRED>Y</REQUIRED>
      <VALUE>162553</VALUE>
  </FIELD>
</FORM>
 
{{Note}} The UDF data may be HTML-safe encoded.
 
 
=== Terms & Conditions ===
Terms and Conditions displayed to customers are configurable within {{#var:System}}. The format is similar to the above XML extracts, with a simple HTML-style INPUT tag, as follows:
<TERMS_CONDITIONS>
    <TEXT>I certify that the information in A, B and C is correct, and that the carrier
          is registered.&lt;br /&gt;
          I confirm that I have fulfilled my duty to apply the waste hierarchy as required by
          Regulation 12 of the Waste (England and Wales) Regulations 2011.</TEXT>
    <CHECKS>
        <INPUT type="checkbox">CHECK1</INPUT>
        <INPUT type="checkbox">CHECK2</INPUT>
        <INPUT type="checkbox">CHECK3</INPUT>
    </CHECKS>
</TERMS_CONDITIONS>
 
{{Note}} The Terms and Conditions data may be HTML-safe encoded.
 
{{Note}} Terms and Conditions may also be configured as UDF. See the UDF Format section above for details on how this may be formatted.
 
 
== Export Mechanisms ==
=== Web Services (Push) ===
The identity of the web service will be defined by the TMS team, requiring a string (rather than an XML object) input.


Each job will be sent independently, resulting in a single call to the external web service to add this job.
Each job will be sent independently, resulting in a single call to the external web service to add this job.


When the file is received and processed by the web service, the system expects the web service to respond in the format, as shown in previous sections. The exact same format and structure should be used as described here. The content may be as detailed as required by the TMS system.
When the file is received and processed by the web service, the system expects the web service to respond in the format, as shown in previous sections. The exact same format and structure should be used as described here. The content may be as detailed as required by the TMS system.
=== Web Services (Pull) ===
Web Services are supplied for external systems to request information on Loads and Jobs, by ID or Date Since. The Web Services are hosted as part of the main {{#var:System}} server and run as SOAP or HTML Web Services. Response Data is formatted in a strongly-typed XML file, validated by a full XSD.
The web service supports the following methods:
* Loads (including all Jobs underneath) by ID or Date
** EPOD_XML_EXPORT_LOAD
** EPOD_XML_EXPORT_LOAD_DATE
** EPOD_XML_EXPORT_LOAD_DATE_RANGE
* Jobs by ID or Date
** EPOD_XML_EXPORT_JOB
** EPOD_XML_EXPORT_JOB_DATE
** EPOD_XML_EXPORT_JOB_DATE_RANGE
* Vehicle information
** EPOD_XML_EXPORT_VEHICLE_REQUEST
** EPOD_XML_EXPORT_VEHICLE_CHECKS
* Other
** EPOD_XML_EXPORT_REPORT - running and exporting report results
** EPOD_XML_EXPORT_PHOTO - exporting photos from loads, jobs, containers, products, services, etc.
<!--
** EPOD_DATA_SERVICE -->
{{Note}} When pulling data from {{#var:System}}, the web service will pass out the data matching the criteria in a single response. Subsequent requests will pass out the same data - when the process exports the load and/or jobs, they are not marked as exported by the system.
Each web service method requires a specific XML request payload, detailed in the following sections.
==== EPOD_XML_EXPORT_LOAD ====
This web service method allows requesting the details of a load (and all jobs within it) by the Load ID.
The following is a sample request to this web service method:
<EPOD_EXPORT_LOAD EPL_SITE_ID="DEMO" EPL_USER_ID="ADM" EPL_USER_PASSWORD="TEST">
    <EPOD_LOADS>
        <EPOD_LOAD>
            <EPL_SITE_ID>DEMO</EPL_SITE_ID>
            <EPL_LOAD_ID>00000000000T</EPL_LOAD_ID>
            </EPOD_LOAD>
        </EPOD_LOADS>
</EPOD_EXPORT_LOAD>
The web service will respond as follows:
Load found:
<EPOD_EXPORT_LOAD_RESPONSE RESULT="ACK">
    <EPOD_LOADS>
            ....
    </EPOD_LOADS>
</EPOD_EXPORT_LOAD_RESPONSE>
Errors:
<EPOD_EXPORT_LOAD_RESPONSE RESULT="NAK">
    <ERRORS>
        <ERROR error="USER DETAILS NOT VALID"/>
    </ERRORS>
</EPOD_EXPORT_LOAD_RESPONSE>
==== EPOD_XML_EXPORT_LOAD_DATE ====
This web service method allows requesting the details of a load (and all jobs within it) by the Planned Start Date.
The following is a sample request to this web service method:
<EPOD_EXPORT_LOAD_DATE EPL_SITE_ID="DEMO" EPL_USER_ID="ADM" EPL_USER_PASSWORD="TEST">
    <EPL_LOAD_START_PLANNED_DATE>20181217</EPL_LOAD_START_PLANNED_DATE>
</EPOD_EXPORT_LOAD_DATE>
{{Note}} This web service method is a form of request EPOD_EXPORT_LOAD and responds with this root response tag ''without'' "DATE".
Load found:
<EPOD_EXPORT_LOAD_RESPONSE RESULT="ACK">
    <EPOD_LOADS>
            ....
    </EPOD_LOADS>
</EPOD_EXPORT_LOAD_RESPONSE>
Errors:
<EPOD_EXPORT_LOAD_RESPONSE RESULT="NAK">
    <ERRORS>
        <ERROR error="Specified argument was out of the range of valid values. Parameter name: index"></ERROR>
    </ERRORS>
</EPOD_EXPORT_LOAD_RESPONSE>
==== EPOD_XML_EXPORT_LOAD_DATE_RANGE ====
This web service method allows requesting the details of a load (and all jobs within it) by a range of dates when the load was last modified.
The following is a sample request to this web service method:
<EPOD_EXPORT_LOAD_CHANGED EPL_SITE_ID="DEMO" EPL_USER_ID="ADM" EPL_USER_PASSWORD="TEST">
    <DATE_TIME_FROM>2016-11-18T00:00:00</DATE_TIME_FROM>
    <DATE_TIME_TO>2017-11-19T00:00:00</DATE_TIME_TO>
</EPOD_EXPORT_LOAD_CHANGED>
{{Note}} This web service method is a form of request EPOD_EXPORT_LOAD and responds with this root response tag ''without'' "DATE".
Load found:
<EPOD_EXPORT_LOAD_RESPONSE RESULT="ACK">
    <EPOD_LOADS>
            ....
    </EPOD_LOADS>
</EPOD_EXPORT_LOAD_RESPONSE>
Errors:
<EPOD_EXPORT_LOAD_RESPONSE RESULT="NAK">
    <ERRORS>
        <ERROR error="USER DETAILS NOT VALID"/>
    </ERRORS>
</EPOD_EXPORT_LOAD_RESPONSE>
==== EPOD_XML_EXPORT_JOB ====
This web service method allows requesting the details of a job by the specific job ID, which will have been provided to the system creating the job when the job was initially created.
The following is a sample request to this web service method:
<EPOD_EXPORT_JOB EPL_SITE_ID="DEMO" EPL_USER_ID="ADM" EPL_USER_PASSWORD="TEST">
    <EPOD_JOBS>
        <EPOD_JOB>
            <EPL_SITE_ID>DEMO</EPL_SITE_ID>
            <EPL_JOB_ID>12345678CR</EPL_JOB_ID>
        </EPOD_JOB>
    </EPOD_JOBS>
</EPOD_EXPORT_JOB>
Job Found:
<EPOD_EXPORT_JOB_RESPONSE RESULT="ACK">
    <EPOD_JOBS>
    ...
    </EPOD_JOBS>
</EPOD_EXPORT_JOB_RESPONSE>
Errors:
<EPOD_EXPORT_JOB_RESPONSE RESULT="NAK">
    <ERRORS>
        <ERROR error="NO VALUE FOR EPL_JOB_ID"></ERROR>
    </ERRORS>
</EPOD_EXPORT_JOB_RESPONSE>
==== EPOD_XML_EXPORT_JOB_DATE ====
This web service method allows requesting the details of a job by the Planned Start Date.
The following is a sample request to this web service method:
<EPOD_EXPORT_JOB_DATE EPL_SITE_ID="DEMO" EPL_USER_ID="ADM" EPL_USER_PASSWORD="TEST">
    <EPL_START_PLANNED_DATE>20161118</EPL_START_PLANNED_DATE>
</EPOD_EXPORT_JOB_DATE>
{{Note}} This web service method is a form of request EPOD_EXPORT_JOB and responds with this root response tag ''without'' "DATE".
Jobs found:
<EPOD_EXPORT_JOB_RESPONSE RESULT="ACK">
    <EPOD_JOBS>
    ....
    </EPOD_JOBS>
</EPOD_EXPORT_JOB_RESPONSE>
Errors:
<EPOD_EXPORT_JOB_RESPONSE RESULT="NAK">
    <ERRORS>
        <ERROR error="NO VALUE FOR EPL_START_DATE"></ERROR>
    </ERRORS>
</EPOD_EXPORT_JOB_RESPONSE>
==== EPOD_XML_EXPORT_JOB_DATE_RANGE ====
This web service method allows requesting the details of a job by a range of dates when the job was last modified.
The following is a sample request to this web service method:
<EPOD_EXPORT_JOB_CHANGED EPL_SITE_ID="DEMO" EPL_USER_ID="ADM" EPL_USER_PASSWORD="TEST">
    <DATE_TIME_FROM>2016-12-16T17:38:46</DATE_TIME_FROM>
    <DATE_TIME_TO>2017-12-16T19:12:44</DATE_TIME_TO>
</EPOD_EXPORT_JOB_CHANGED>
{{Note}} This web service method is a form of request EPOD_EXPORT_JOB and responds with this root response tag ''without'' "DATE".
Jobs found:
<EPOD_EXPORT_JOB_RESPONSE RESULT="ACK">
    <EPOD_JOBS>
    ....
    </EPOD_JOBS>
</EPOD_EXPORT_JOB_RESPONSE>
Errors:
<EPOD_EXPORT_JOB_RESPONSE RESULT="NAK">
    <ERRORS>
        <ERROR error="Column &amp;#39;EPL_INVOICED_IND&amp;#39; does not belong to table ."></ERROR>
    </ERRORS>
</EPOD_EXPORT_JOB_RESPONSE>
==== EPOD_XML_EXPORT_REPORT ====
This web service method allows you to request a report to be run.
{{Note}} At this time, only the Mash OTIF report is available to be run through this method.
The core parameter of the request is Report Type - this currently only supports the value "MASHOTIFREPORT".
The parameters required for the report type selected are then included.
For the Mash OTIF report, they are:
{| class="wikitable" border="1"
|- bgcolor="silver"
! Parameter !! Name !! Reqd !! Notes
|-
| Date Type || DATE_TYPE || Y || Values "PLANNED" or "ACTUAL".
|-
| Date From || DATE_FROM || Y || Format "DD/MM/YYYY".
|-
| Date To || DATE_TO || Y || Format "DD/MM/YYYY".
|-
| Customer Code || EPL_CUSTOMER_CODE || N || &nbsp;
|-
| Load ID || EPL_LOAD_ID || N || &nbsp;
|-
| Route Code || EPL_ROUTE_CODE || N || &nbsp;
|}
The following is a sample request to this web service method:
    <EPOD_EXPORT_REPORT EPL_SITE_ID="" EPL_USER_ID="" EPL_USER_PASSWORD="">
        <REPORT_TYPE>MASHOTIFREPORT</REPORT_TYPE>
        <DATE_TYPE>PLANNED</DATE_TYPE>
        <DATE_FROM>16/12/2008</DATE_FROM>
        <DATE_TO>16/12/2019</DATE_TO>
        <EPL_CUSTOMER_CODE></EPL_CUSTOMER_CODE>
        <EPL_LOAD_ID></EPL_LOAD_ID>
        <EPL_ROUTE_CODE></EPL_ROUTE_CODE>
    </EPOD_EXPORT_REPORT>
The process will return the report results as an XML payload.
Report run:
    <EPOD_EXPORT_REPORT_RESPONSE RESULT="ACK">
        <NewDataSet>
            <MashOTIFReport>
                <Customer_Code>M1</Customer_Code>
                <Customer_Name>Manchester Blood Centre</Customer_Name>
                <Load_ID>TRN-00001432</Load_ID>
                <Job_Code>AHC01_TRN-00001432</Job_Code>
                <Status>C</Status>
                <Reason/>
                <Sequence>5</Sequence>
                <Service/>
                <Planned_Date/>
                <Planned_Time/>
                <Arrival_Date/>
                <Arrival_Time/>
                <On_Time>Y</On_Time>
            </MashOTIFReport>
            <MashOTIFReport>
                <Customer_Code>M1</Customer_Code>
                <Customer_Name>Manchester Blood Centre</Customer_Name>
                <Load_ID>TRN-00001432</Load_ID>
                <Job_Code>NHS1432-1</Job_Code>
                <Status>C</Status>
                <Reason/>
                <Sequence>1</Sequence>
                <Service/>
                <Planned_Date>23/10/2014</Planned_Date>
                <Planned_Time>14:44</Planned_Time>
                <Arrival_Date/>
                <Arrival_Time/>
                <On_Time>N</On_Time>
            </MashOTIFReport>
            ...
        </NewDataSet>
    </EPOD_EXPORT_REPORT_RESPONSE>
The data returned depends on the report being run. Commonly:
* the report data will be encapsulated by the tag <NewDataSet>.
* each row of the report will be encapsulated by the dataset name. For a single tab report, this is typically the report name. For a multi-tab report, this is typically the tab name.
* multi-tab reports will have multiple row tags, one for each tab in the report.
* data tags will be named as per the column in the report, with special characters and white-space replaced with underscore (_) characters.
Error example:
    <EPOD_EXPORT_REPORT_RESPONSE RESULT="NAK">
        <ERRORS>
            <ERROR error="USER DETAILS NOT VALID"></ERROR>
        </ERRORS>
    </EPOD_EXPORT_REPORT_RESPONSE>
==== EPOD_XML_EXPORT_VEHICLE_REQUEST ====
This web service method allows requesting the details of vehicles in {{#var:System}}.
The following is a sample request to this web service method:
<EPOD_EXPORT_VEHICLE_REQUEST EPL_SITE_ID="DEMO" EPL_USER_ID="ADM" EPL_USER_PASSWORD="TEST">
    <EPL_VEHICLE_ID>27</EPL_VEHICLE_ID>
</EPOD_EXPORT_VEHICLE_REQUEST>
Vehicle found:
<EPOD_EXPORT_VEHICLE_RESPONSE RESULT="ACK">
    <EPOD_VEHICLE>
    ...
    </EPOD_VEHICLE>
</EPOD_EXPORT_VEHICLE_RESPONSE>
Data returned:
{| class="wikitable" border="1"
|- bgcolor="silver"
! Name !! Description
|-
|EPL_SITE_ID || Unique reference of the site to which the vehicle belongs.
|-
|EPL_VEHICLE_REG || The vehicle registration plate.
|-
|EPL_DESCRIPTION || A description of the vehicle, usually used for the vehicle type.
|-
|EPL_VEHICLE_MILEAGE || N/A
|-
|EPL_VEHICLE_CHECK_DATE  || The date that this vehicle was last checked for defects, in format YYYYMMDD.
|-
|EPL_VEHICLE_CHECK_TIME  || The time that this vehicle was last updated, in format YYYYMMDD.
|-
|EPL_VEHICLE_CHECK_DRIVER    || The user ID of the driver that last checked this vehicle for defects.
|-
|EPL_STATUS  || The status of the vehicle with the values: "Y" - Active; "N" - Inactive and; "X" - Deleted.
|-
|EPL_LAST_CHANGED_DATE  || The date that this vehicle was last updated, in format YYYYMMDD.
|-
|EPL_LAST_CHANGED_TIME  || The time that this vehicle was last updated, in format HHMMSSNN.
|-
|EPL_LAST_POSITION  || Last known position of the vehicle in a pair of Decimal Degrees format e.g. 53.3491645,-2.852224
|-
|EPL_LAST_POSITION_DATE  || The date that this vehicle's position was last updated, in format YYYYMMDD.
|-
|EPL_LAST_POSITION_TIME  || The time that this vehicle's position was last updated, in format HHMMSSNN
|-
|EPL_EXT_REF || If {{#var:System}} is configured for connection to an external tracking sustem (such as TomTom WEBFLEET), this will contain the the vehicle's ID from this system.
|}
Errors:
<EPOD_EXPORT_VEHICLE_RESPONSE RESULT="NAK">
    <ERRORS>
        <ERROR error="NO VALUE FOR EPL_VEHICLE_ID" ></ERROR>
    </ERRORS>
</EPOD_EXPORT_VEHICLE_RESPONSE>
==== EPOD_XML_EXPORT_VEHICLE_CHECKS ====
This web service method allows requesting the details of the vehicle checks for a site.
{{Note}} This request differs to the other requests in that, once vehicle check data has been served in response to a request, it is marked as processed and will not be returned again.
The following is a sample request to this web service method:
<EPOD_EXPORT_VEHICLECHECKS EPL_SITE_ID="DEMO" EPL_USER_ID="ADM" EPL_USER_PASSWORD="TEST">
</EPOD_EXPORT_VEHICLECHECKS>
Checks found:
<EPOD_EXPORT_VEHICLECHECKS_RESPONSE RESULT="ACK">
    <EPOD_VEHICLE_CHECKS>
    ...
    </EPOD_VEHICLE_CHECKS>
</EPOD_EXPORT_VEHICLECHECKS_RESPONSE>
Data returned:
{| class="wikitable" border="1"
|- bgcolor="silver"
! Name !! Description
|-
|EPL_SITE_ID    || Unique reference of the site to which the vehicle belongs.
|-
|EPL_VEHICLE_ID || The site's unique vehicle ID, typically the vehicle registration plate.
|-
|EPL_USER_ID    || The user ID of the driver that completed this vehicle defect check.
|-
|EPL_VEHICLE_CHECK_DATE || The date that this vehicle defect was completed, in format YYYYMMDD.
|-
|EPL_VEHICLE_CHECK_TIME || The time that this vehicle defect was completed, in format HHMMSSNN.
|-
|EPL_VEHICLE_CHECK_DATA || The vehicle checks themselves, in UDF format.
|-
|EPL_XFER_FLAG  || N/A
|-
|EPL_STATUS || The status of the defect check. One of: "P" - Passed; "D" - Defects Raised and; "R" - Defects resolved.
|-
|EPL_RES_USER_ID    || If defects have been raised and resolved, the {{#var:System}} user ID that resolved them.
|-
|EPL_RES_DATE  || If defects have been raised and resolved, the date that the resolution took place, in YYYYMMDD format.
|-
|EPL_RES_TIME  || If defects have been raised and resolved, the time that the resolution took place, in HHMMSSNN format.
|-
|EPL_RES_COMMENT    || If defects have been or are in the process of being resolved, comments from the resolvers.
|}
Errors:
<EPOD_EXPORT_VEHICLECHECKS_RESPONSE RESULT="NAK">
    <ERRORS>
        <ERROR error="USER DETAILS NOT VALID"></ERROR>
    </ERRORS>
</EPOD_EXPORT_VEHICLECHECKS_RESPONSE>
==== EPOD_XML_EXPORT_PHOTO_REQUEST ====
This web service method allows requesting the details of photos in {{#var:System}}.
The following is a sample request to this web service method:
<EPOD_EXPORT_PHOTO EPL_SITE_ID="DEMO" EPL_USER_ID="ADM" EPL_USER_PASSWORD="TEST">
  <EPL_SITE_ID>DEMO</EPL_SITE_ID>
  <EPL_JOB_CODE>1280076</EPL_JOB_CODE>
  <EPL_JOB_TYPE>C</EPL_JOB_TYPE>
</EPOD_EXPORT_PHOTO>
Parameters:
{| class="wikitable" border="1"
|- bgcolor="silver"
! Name !! Description
|-
|EPL_SITE_ID || Must supply Site
|-
|EPL_LOAD_ID || Can select load by load ID - returns all load level images for that load.
|-
|EPL_JOB_ID || Can select job by job ID - returns all job-level photos for that job, and all child photos (if a collection or delivery, all container and product photos, if a service, all service photos).
|-
|EPL_JOB_CODE || Can select job by job code and type - returns all job-level photos for that job, and all child photos (if a collection or delivery, all container and product photos, if a service, all service photos).
|-
|EPL_JOB_TYPE || Type for above, one of "C" - collection, "D" - delivery or "S" - service.
|-
|EPL_CONTAINER_ID || Can select container by container ID from specified job - returns all container-level photos for that container.
|-
|EPL_PRODUCT_CODE || Can select product by product ID and sequence from specified job and container - returns all product-level photos for that product/sequence. If container specified, selects product from that container, otherwise loose products.
|-
|EPL_SEQUENCE || Product Sequence
|-
|EPL_SERVICE_ID || Can select service by service ID - returns all service-level photos for that service item.
|-
|EPL_PHOTO_TYPE || Can filter photos returned by photo type:
* For load-only photos, "L".
* For load start UDF-only photos, "LSU".
* For load end UDF-only photos, "LEU".
* For job-only photos, "J".
* For job UDF-only photos, "JU".
* For container-only photos, "C".
* For container UDF-only photos, "CU".
* For product-only photos, "P".
* For product UDF-only photos, "PU".
* For service-only photos, "S".
* For service information-only photos, "SI".
* For service information UDF-only photos, "SIU".
* For service post-check UDF-only photos, "SPO".
* For service pre-check UDF-only photos, "SPR".
* For service diagnosis UDF-only photos, "SDU".
Note: Photo Type MUST be specified if retrieving Container, Product, Service or UDF photos.
|-
|EPL_PHOTO_ID || Can select photo by photo ID - returns that photo.
|-
|EPL_UDF_ID || Can filter photos returned by UDF ID.
|}}
A sample response, when a photo is found:
<EPOD_EXPORT_PHOTO_RESPONSE RESULT="ACK">
    <EPOD_PHOTOS>
      <EPOD_PHOTO>
      ...
      </EPOD_PHOTO>
    </EPOD_PHOTOS>
</EPOD_EXPORT_PHOTO_RESPONSE>
Data returned per photo (EPOD_PHOTO):
{| class="wikitable" border="1"
|- bgcolor="silver"
! Name !! Description
|-
|EPL_SITE_ID || The site ID.
|-
|EPL_PHOTO_ID || The unique photo ID.
|-
|EPL_DESCRIPTION || The entered description of the photo.
|-
|EPL_PHOTO || Base64 JPEG.
|-
|EPL_IMAGE_TYPE || The photo type, as above.
|-
|EPL_LAST_CHANGED_DATE || Format YYYYMMDD
|-
|EPL_LAST_CHANGED_TIME || Format HHMMSSNN
|-
|EPL_KEYVAL_1 || Load ID for type "L" or "LU", else Job ID for others.
|-
|EPL_KEYVAL_2 || UDF ID for type "JU", Service ID for type "S", "SI, "SIU", "SPO", "SPR" or "SDU", else Container ID for type "C", "CU", "P" or "PU".
|-
|EPL_KEYVAL_3 || UDF ID for type "CU", "SIU", "SPO", "SPR" or "SDU", Product ID for type "P" or "PU".
|-
|EPL_KEYVAL_4 || Product Sequence for type "P" or "PU".
|-
|EPL_KEYVAL_5 || UDF ID for type "PU".
|}
Sample error response:
<EPOD_EXPORT_PHOTO_RESPONSE RESULT="NAK">
  <ERRORS>
    <ERROR error="INVALID VALUE FOR EPL_JOB_ID"></ERROR>
  </ERRORS>
</EPOD_EXPORT_PHOTO_RESPONSE>
=== Flat-file Processing ===
The FTP server or File-system can be identified by the TMS team, or supplied by OBS Logistics.
Each job will be sent independently, resulting in a single XML file created in the destination folder. The naming of the file is configurable.
No confirmation of processing is required - this is expected to be handled by the host system. Files processed can be deleted or moved to an archive folder, as required by the host system.

Latest revision as of 11:00, 6 October 2021


Solution Overview

CALIDUS ePOD provides an electronic proof of delivery execution layer to existing TMS systems or a stand-alone execution and basic Admin layer for stand-alone customers.

For those customers who require an interface into and out of CALIDUS ePOD, a standard interface format is defined here.

The layout of the CALIDUS ePOD system is as follows:

EPOD-ERD-1.PNG

Most of the tables in the structure can be configured through the interface with the following exceptions:

  • Job Group - this can be created automatically as part of the job interface. However, the job group within the site will then need to be configured.
  • User Access Group - users' access to jobs will be automatically created when job groups are created.
  • Service Vehicle Product.
  • Service Activity.

As can be seen, the basic structure is:

  • Load - a collection of jobs of any type to be completed by the PDA user.
  • Job - a specific task for a customer (i.e. collect order A from point X at this time, deliver order A to point Y at this time).
  • Container - any unique item to be delivered, for example, bar-coded pallets, cartons, packages, trolleys, A-frames, etc.
  • Product - any product to be delivered, plus a quantity. Can be contained within the containers, or can be Loose products.
Note Note:
  • Each Load or Work List will be assigned to a user for completion. Many can be created and assigned to users - only the earliest will be active.
  • Each job will be listed in sequence, or planned start time. It is configurable whether the user is forced to complete tasks in sequence.
  • Each container and product must be actioned by the user (i.e. enter/scan each container for delivery, or say why each container was not delivered).
  • If a container has products, each of these must be actioned by the user. It is configurable whether products are required to be entered.
  • If products are defined without a container (i.e. Loose Products), they must be entered. CALIDUS ePOD assumes a Loose Product container of '000000000000000', so that the table data structure is preserved.


Scope

Note Note: All web service requests and XML formats are fully documented in the supporting documentation. XML files have associated XSDs, for appropriate validation.

Note Note: There are interfaces into CALIDUS ePOD for Standing Data. This document does not yet show these interfaces, as this can be maintained separately and manually within CALIDUS ePOD. Those flows are:

  • Vehicles
  • Reason Codes (used when cancelling jobs or pallets)
  • Users (Drivers/Engineers)
  • Customers

Interfaces do exist for this standing data upload through the Web Services, used in exactly the same way as described for the Load and Job interfaces below. The interface formats are described in detail in the supporting documentation, referenced in the appendices.

The system can be configured to automatically create the Job Groups, Vehicles and Users with very basic information based off the received values in the Load and Job messages. Customers will be created as part of the information received through the Job messages.

Note Note: The document does not at this time define the interface required for Service-type jobs, as this is currently in significant development within the product. A basic interface does exist and is described in detail in the supporting documentation, referenced in the appendices.


Functional Description

Import of data into the system can be through several mechanisms:

  • Web Services standard interface
  • Bespoke manual file upload, through CSV or Microsoft Excel file
  • Bespoke automatic file upload, through CSV, XML or Microsoft Excel file

The Web Services are hosted as part of the main CALIDUS ePOD server and run as SOAP or HTML Web Services. Data is formatted in a strongly-typed XML file, validated by a full XSD. Data can be passed either as a string or as an XML object.

The data defined in this XSD can be modified by development for customers who require additional data sent to and from the CALIDUS ePOD system.

The Bespoke automatic and manual file uploads are written on demand for customers who require it.

The standard Web Services import interface supports:

  • Loads
  • Jobs (stand-alone or within a Load)
    • Collections
    • Deliveries
      • Containers (Pallets, boxes, etc)
      • Products (both within containers and loose products)
    • Services
  • Standing Data
    • Users
    • Vehicles
    • Service Products
    • Customers
    • Reason Codes

Import files can contain any or all of these import elements.

Export of data from the system can be through several mechanisms:

  • Request of data from a Web Service
  • Auto-export of data
  • Palletforce Extract

Web Services are supplied for external systems to request information on Loads and Jobs, by ID or Date Since. The Web Services are hosted as part of the main CALIDUS ePOD server and run as SOAP or HTML Web Services. Response Data is formatted in a strongly-typed XML file, validated by a full XSD.

Standard requested data to export supports:

  • Loads (including all Jobs underneath) by ID or Date
  • Jobs by ID or Date
  • Current Vehicle information

Auto-export of data can be configured to push the XML data automatically to the client system, via several mechanisms:

  • Web Service (SOAP or POST/REST)
  • Email
  • Flat-file copy, local, remote or FTP

If configured as a Web Service, the Auto-Export process will connect to the defined web service and push the data to it in the XML format defined above. If configured as an Email address, the XML file will be emailed to the defined address.

This process can also (if configured) automatically produce and email Completion Documents (defined POD, POC or Service reports) to customers, on successful completion of a job.

The Auto-export process supports:

  • Automatic emailing of Completion reports to customers (if configured).
  • Load (header or with all Job information).
  • Jobs (Completed or Cancelled) with all details.
  • Pallet Network Tracking systems, including:
    • Palletforce.
    • Pallex.
    • TPN.
    • Hazchem.
    • Palletline.
  • OEM bespoke interfaces.
  • Other OBS Logistics products, including:
    • CALIDUS TMS.
    • CALIDUS Portal TTM.

The Auto-Export process is run as a scheduled task on the main CALIDUS ePOD server.


Import Message Content

A basic list of fields that may be used in the interface for the Load (Manifest) and the Job follows. A full spreadsheet of all the import flows and fields containing all the limitations on length and defaulted values is provided separately.

Note Note: You can configure the system to create standing data as part of the load and jobs import. Alternatively, you can create the standing data through the import process for the following elements:

  • Users.
  • Vehicles.
  • Service Products.
  • Customers.
  • Reason Codes.

These imports are straightforward and follow the guidelines that are laid out in this document. The allowable fields are in the spreadsheet, and many examples exist to view how these might work and will be provided to you with this documentation. These imports are not covered in this guide.


Note Note: The content of the imported data varies and expands as the CALIDUS ePOD product expands. As new items are added to the application, the spreadsheet will be modified and issued to you, to aid in any mapping of data into the application. The Import Spreadsheet is referenced in Appendix A.

EPOD_LOAD

Name Description
EPL_SITE_ID EPL_SITE_ID: Unique reference of the site that the Load belongs to.
EPL_LOAD_ID EPL_LOAD_ID: Unique reference of the Load.
EPL_DELETE_LOAD If "Y", the specified load will be deleted from CALIDUS ePOD.
EPL_LOAD_START_PLANNED_DATE Load Duration.
EPL_LOAD_START_PLANNED_TIME Load Duration.
EPL_LOAD_END_PLANNED_DATE Load Duration.
EPL_LOAD_END_PLANNED_TIME Load Duration.
EPL_LOAD_DISTANCE_PLANNED For Information Only.
EPL_VEHICLE_ID To be used if a vehicle is predefined as assigned to complete this load.
EPL_USER_ID To be used if a user is predefined as assigned to complete this load.

Loads are automatically allocated to users in the following way:

  • Site, User and Vehicle match, earliest selected.
  • Site and User match, vehicle is blank, earliest selected.
  • Site and Vehicle match, user is blank, earliest selected.

Once allocated to a user, the load is stamped with the driver and vehicle set when the load is requested. It is recommended to NOT mix modes above, as this can lead to unpredictable results.

EPL_TRAILER_ID EPL_TRAILER_ID: Trailer Number. To be used if the vehicle being used to fulfil the load is a Tractor unit.
EPL_LOAD_INFORMATION To be populated with any information to be displayed to the user regarding the Load.
EPL_TIMEZONE To be populated with the timezone for the load in Olsen ID format.
EPL_STATUS Can be used to cancel the Load. If used, set the status to "X".
EPL_ROUTE_CODE Route identifier against the trip.
EPOD_JOBS EPOD_JOBS contains a series of EPOD_JOB objects. In standard operation, ALL jobs on a load must be refreshed if any are being changed. Any jobs that are omitted under a load will be deleted.

If a single job is to be updated, this single change may be interfaced using the EPOD_JOBS top-level tag, rather than this tag embedded under the load.


EPOD_JOB

Name Description
EPL_SITE_ID Unique Reference for the Site that the Job belongs to.
EPL_LOAD_ID Unique Reference for the Load that the Job belongs to. If not provided, defaulted from the enclosing EPOD_LOAD.
EPL_JOB_ID Unique reference for the job. Warning Warning: DO NOT PROVIDE THIS TAG - this will be generated by C-ePOD.
EPL_JOB_CODE External reference for the Job. This element can be used to link a collection and delivery together under the same reference. So, if an order is being collected at A and delivered at B, there are 2 jobs, each with a unique Job ID, but with the same Job Code. Optionally, C-ePOD will keep the Delivery leg of a linked job updated with the information captured from the collection.
EPL_JOB_TYPE "D"-Delivery, "C"-Collection, "S"-Service.
EPL_JOB_GROUP This is setup within the Admin system. Each job group has its own settings and will determine how the Job is processed dependant on these settings.
EPL_CUST_REF Customer's Order Reference.
EPL_JOB_INSTRUCTION Free text that will be shown to the driver on the mobile device.
EPL_OFFICE_INSTRUCTION Free text that will not be shown on the mobile device, but will be visible within the Admin system.
EPL_START_PLANNED_DATE Collection/Delivery Window.
EPL_START_PLANNED_TIME Collection/Delivery Window.
EPL_END_PLANNED_DATE Collection/Delivery Window.
EPL_END_PLANNED_TIME Collection/Delivery Window.
EPL_DISTANCE_PLANNED Planned distance. Can be used to compare Planned vs Actuals if the system is configured for telematics update from an external system. Otherwise for information only.
EPOD_CUSTOMER This tag may be used to specify a Customer separately. If this is used, and the address and contact information on the job below is different, the EPOD system will create a Job Address specifically for this job, whilst maintaining the Customer information separately, as an Invoice address.

Note that this will happen if the Customer has been created previously either through another Job, another Customer Tag in a Job or a Customer Tag alone.

EPL_CUSTOMER_CODE Customer Code from external system. If not provided, one will be generated from EPL_CUSTOMER_NAME
EPL_CUSTOMER_NAME The Name of the customer
EPL_ADDRESS_1  
EPL_ADDRESS_2  
EPL_ADDRESS_3  
EPL_ADDRESS_4  
EPL_ADDRESS_5  
EPL_POSTCODE  
EPL_CONTACT Contact on site for the job. Can be changed at Job completion.
EPL_TELEPHONE The Customer's Contact Telephone number
EPL_EMAIL Contact Email address. Can be used to automatically send Job Completion documents to the customer.
EPL_SO_NUMBER Sales Order Reference.
EPL_EXT_REF An external ref to be stored, reported and returned only.
EPL_ORDER_DATE Date Order created - defaulted to Now()
EPL_SALES_CONTACT The operative who took the order. Can be used as a display field for documentation
EPL_SERVICE_LEVEL  
EPL_JOB_STATUS A user-enterable Job Status, to help identify further processing back in the admin system, specifically to reschedule another service if this job is incomplete.
EPL_USER_ID To be used if a user is pre-assigned to complete this job. Only for Services without a LOAD.
EPL_COL_DATE Date Order Collected. Can be used for any date field
EPL_SEQUENCE The sequence in which the jobs are to be completed. If this is not provided, the system will allocate the jobs in the sequence in which they were provided in this interface i.e. first is ""0001"", second is ""0002"", etc.

If Delivery and Collection jobs are specified with the same sequence, the delivery job is completed first.

EPL_LINKED_ID An identifier that informs the system that this job should be linked (consolidated) with other jobs.

The format is irrelevant - if multiple jobs on the same load have the same link ID, they will be consolidated. Link only jobs on the same load with the same job type.

EPL_UDF_JOBDETS EPL_UDF_JOBDETS: To be used to specify user definable fields (UDF) against job details
EPOD_JOB_ADDRESS Any Job address against the job, if different to the customer address or address on the job. Typically, this is used to provide additional addresses on a job, so that the driver can view them. For example, providing a Final Delivery address when picking up a parcel, or providing the origin address when delivering a parcel. Consisting of the following tags if present:
EPL_ADDRESS_TYPE "D" - Delivery Address, "C" - Collection Address, "O" - Original Collection Address, "F" - Final Delivery Address.
EPL_NAME  
EPL_ADDRESS_1  
EPL_ADDRESS_2  
EPL_ADDRESS_3  
EPL_ADDRESS_4  
EPL_ADDRESS_5  
EPL_POSTCODE  
EPL_CONTACT  
EPL_TELEPHONE  
EPL_EMAIL  
EPL_LAT The Latitude in degrees
EPL_LONG The Longitude in degrees
EPL_OWNER_NAME Can be used as a display field for documentation
EPL_TRAILER_ID To be used if the vehicle being used to fulfil the job is a Tractor unit, and requires a trailer ID. This can be left blank to have this entered by the driver on demand.
EPL_TIMEZONE To be populated with the timezone for the job.
EPL_LOADING_TYPE Controls whether this job is seen to be a Loading task at a depot (Job Type = "C") or unloading at a depot (Job Type = "D"). Values can be "L" or "U" or ""
EPL_SWAP_VEHICLE Indicates whether the job is a vehicle swap (i.e. requires no item-related action in C-EPOD)
EPL_ACCOUNT  
EPL_ORDER_TIME Time Order created - defaulted to the time that the job was received.
EPL_EXPIRY_DATE  
EPL_EXPIRY_TIME  
EPL_PF_DEPOT For Pallet Networks: The Depot
EPL_PF_TRACKING_NO For Pallet Networks: The Tracking Number
EPL_TRAVEL_PLANNED Planned travel time in minutes
EPL_WORK_PLANNED Planned work time in minutes
EPOD_TIME_WINDOWS  
EPOD_TIME_WINDOW This defines the arrival time window.
ETW_TIME_START The Start window time, in HHMMNNSS format.
ETW_TIME_END The End window time, in HHMMNNSS format.
EPL_LAT The Latitude in degrees
EPL_LONG The Longitude in degrees
EPOD_CONTAINERS Contains a series of EPOD_CONTAINER objects
EPOD_PRODUCTS Contains a series of EPOD_PRODUCT objects (Loose Products)
EPOD_SERVICES Contains a series of EPOD_SERVICE objects


EPOD_CONTAINER

Name Description
EPL_SITE_ID  
EPL_JOB_ID Not In Use
EPL_CONTAINER_ID The unique identifier for a container. Note that this is the value that will be compared to the scanned barcode. If this is different to a visible container number, this should be provided in one of the other tags on this record, for example, CODE_1/2/3.
EPL_SEQUENCE The sequence in which the containers should be unloaded. This should be numeric, i.e. "1", "0004", etc.
EPL_CONTAINER_PACKAGE_CODE Container Type Code
EPL_CONTAINER_PACKAGE_DESC Container Type Description
EPL_GROSS_WEIGHT Gross weight of the container
EPL_CODE_1 Additional code field used for any purpose
EPL_CODE_2 Additional code field used for any purpose
EPL_CODE_3 Additional code field used for any purpose
EPL_DESCRIPTION_LONG Long description of the container
EPL_FLAGS EPL_FLAGS contains flags used to indicate hazardous, gel, ice, radioactive etc - it is not used in EPOD, but is stored for reporting purposes. Content is XML with it's own configurable XSD
EPL_VALID_DATE The date up until the contents of the package are valid - controls warnings at delivery.
EPL_VALID_TIME The time up until the contents of the package are valid - controls warnings at delivery.
EPL_CONTAINER_ONLY Controls whether a container with products inside it has the contents scanned at initial unloading. This is controlled at a job group level, but may be over-ridden per container, to support bulk consolidated pallets, mixed product in totes, etc.

Multiple values:

  • If omitted or blank - behaviour inherited from the job group
  • "Y" - contents are never scanned on initial unloading
  • "N" - contents are always scanned on initial unloading
EPOD_PRODUCTS EPOD_PRODUCTS contains a series of EPOD_PRODUCT objects associated to the container.


EPOD_PRODUCT

Name Description
EPL_SITE_ID  
EPL_JOB_ID Not In Use
EPL_CONTAINER_ID Not In Use
EPL_PRODUCT_CODE Product Code
EPL_SEQUENCE Sequence for display on device and screens. This should be in numeric format e.g. "1", "0004", etc.
EPL_CUST_REF For display on device
EPL_DESCRIPTION Product Description
EPL_PRODUCT_QTY_PLANNED Planned collection/delivery quantity
EPL_PRODUCT_QTY_ORDERED Ordered product quantity, if required. For display on POD, if required
EPL_ITEM_TYPE Product Item Type (DU or Category), for display on device and POD, if required.
EPL_UNIT_TYPE Product Unit Type (UOM), for display on device and POD, if required.
EPL_DESCRIPTION_LONG Long Product Description
EPL_PRODUCT_WEIGHT Weight
EPL_UNIT_PRICE Nett price per unit. Note: Do not provide this or Unit VAT if a priced POD is not required. If provided, and the POD format configured for this job supports price, the system will display the Price columns and Totals of Price and VAT. If not provided, the default value 0 will be used to calculate the totals.
EPL_UNIT_VAT VAT per unit.
Note Note:
  • The jobs should be sent through in the order in which they should be completed. The Sequence field should be sent with a numeric padded value as described in the description.
  • Loads and the contained jobs will be sent as one message. Multiple loads can be built into one XML message structure.
  • XSDs for validating the XML structure will be provided.

A sample of a single load with multiple jobs of many types are shown below - a brief description of the job type is shown in the office instructions:

<EPOD_IMPORT EPL_SITE_ID="TEST" EPL_USER_ID="ADM" EPL_USER_PASSWORD="TEST">
  <EPOD_LOADS>
    <EPOD_LOAD>
      <EPL_SITE_ID>TEST</EPL_SITE_ID>
      <EPL_LOAD_ID>TEST001</EPL_LOAD_ID>
      <EPL_LOAD_START_PLANNED_DATE>20120320</EPL_LOAD_START_PLANNED_DATE>
      <EPL_LOAD_START_PLANNED_TIME>16450000</EPL_LOAD_START_PLANNED_TIME>
      <EPL_LOAD_END_PLANNED_DATE>20120320</EPL_LOAD_END_PLANNED_DATE>
      <EPL_LOAD_END_PLANNED_TIME>16590000</EPL_LOAD_END_PLANNED_TIME>
      <EPL_LOAD_DISTANCE_PLANNED>212</EPL_LOAD_DISTANCE_PLANNED>
      <EPL_USER_ID></EPL_USER_ID>
      <EPOD_JOBS>
        <EPOD_JOB>
          <EPL_SITE_ID>TEST</EPL_SITE_ID>
          <EPL_LOAD_ID>TEST001</EPL_LOAD_ID>
          <EPL_JOB_ID>TEST001001</EPL_JOB_ID>
          <EPL_JOB_CODE>TEST001001</EPL_JOB_CODE>
          <EPL_JOB_TYPE>C</EPL_JOB_TYPE>
          <EPL_JOB_GROUP>JG01</EPL_JOB_GROUP>
          <EPL_CUST_REF>CR-TEST001001</EPL_CUST_REF>
          <EPL_JOB_INSTRUCTION>Free Text Instructions</EPL_JOB_INSTRUCTION>
          <EPL_OFFICE_INSTRUCTION>Multiple container collection with multiple products.
          </EPL_OFFICE_INSTRUCTION>
          <EPL_START_PLANNED_DATE>20120320</EPL_START_PLANNED_DATE>
          <EPL_START_PLANNED_TIME>00000000</EPL_START_PLANNED_TIME>
          <EPL_END_PLANNED_DATE>20120320</EPL_END_PLANNED_DATE>
          <EPL_END_PLANNED_TIME>00000000</EPL_END_PLANNED_TIME>
          <EPL_DISTANCE_PLANNED>212</EPL_DISTANCE_PLANNED>
          <EPOD_CUSTOMER>
            <EPL_CUSTOMER_CODE>Cust001</EPL_CUSTOMER_CODE>
            <EPL_CUSTOMER_NAME>Customer Jones</EPL_CUSTOMER_NAME>
            <EPL_ADDRESS_1>15 TEST ROAD</EPL_ADDRESS_1>
            <EPL_ADDRESS_2>TESTINGTON</EPL_ADDRESS_2>
            <EPL_ADDRESS_3>TEST</EPL_ADDRESS_3>
            <EPL_ADDRESS_4>TESTside</EPL_ADDRESS_4>
            <EPL_POSTCODE>CH62 9GR</EPL_POSTCODE>
            <EPL_CONTACT>TESTER Jones</EPL_CONTACT>
            <EPL_TELEPHONE>08458795846</EPL_TELEPHONE>
            <EPL_EMAIL>[email protected]</EPL_EMAIL>
          </EPOD_CUSTOMER>
           <EPL_CUSTOMER_CODE>Cust001</EPL_CUSTOMER_CODE>
           <EPL_CUSTOMER_NAME>Customer Jones</EPL_CUSTOMER_NAME>
          <EPL_ADDRESS_1>16 Speke Boulevard</EPL_ADDRESS_1>
          <EPL_ADDRESS_2>Speke</EPL_ADDRESS_2>
          <EPL_ADDRESS_3>Liverpool</EPL_ADDRESS_3>
          <EPL_ADDRESS_4>United Kingdom</EPL_ADDRESS_4>
          <EPL_POSTCODE>CH62 9GR</EPL_POSTCODE>
          <EPL_CONTACT>TESTER Jones</EPL_CONTACT>
          <EPL_TELEPHONE>08458795846</EPL_TELEPHONE>
          <EPL_EMAIL>[email protected]</EPL_EMAIL>
          <EPL_SO_NUMBER>SO-LOAD 46</EPL_SO_NUMBER>
          <EPL_ORDER_DATE>20120319</EPL_ORDER_DATE>
          <EPL_SALES_CONTACT>Jenny</EPL_SALES_CONTACT>
          <EPOD_CONTAINERS>
            <EPOD_CONTAINER>
              <EPL_SITE_ID>TEST</EPL_SITE_ID>
              <EPL_JOB_ID>TEST001001</EPL_JOB_ID>
              <EPL_CONTAINER_ID>TEST001001-01</EPL_CONTAINER_ID>
              <EPL_SEQUENCE>0001</EPL_SEQUENCE>
              <EPL_CONTAINER_PACKAGE_CODE>XX00</EPL_CONTAINER_PACKAGE_CODE>
              <EPL_CONTAINER_PACKAGE_DESC>Test Container</EPL_CONTAINER_PACKAGE_DESC>
              <EPL_GROSS_WEIGHT>100.14</EPL_GROSS_WEIGHT>
              <EPL_DESCRIPTION_LONG>1 PLT 800</EPL_DESCRIPTION_LONG>
              <EPOD_PRODUCTS>
                <EPOD_PRODUCT>
                  <EPL_SITE_ID>TEST</EPL_SITE_ID>
                  <EPL_JOB_ID>TEST001001</EPL_JOB_ID>
                  <EPL_CONTAINER_ID>TEST001001-01</EPL_CONTAINER_ID>
                  <EPL_PRODUCT_CODE>TESTPROD1</EPL_PRODUCT_CODE>
                  <EPL_SEQUENCE>0001</EPL_SEQUENCE>
                  <EPL_DESCRIPTION>TEST ITEM</EPL_DESCRIPTION>
                  <EPL_PRODUCT_QTY_PLANNED>1</EPL_PRODUCT_QTY_PLANNED>
                  <EPL_PRODUCT_QTY_ORDERED>1</EPL_PRODUCT_QTY_ORDERED>
                  <EPL_ITEM_TYPE>X</EPL_ITEM_TYPE>
                  <EPL_UNIT_TYPE>X</EPL_UNIT_TYPE>
                  <EPL_DESCRIPTION_LONG>Long Description</EPL_DESCRIPTION_LONG>
                  <EPL_PRODUCT_WEIGHT>12.3</EPL_PRODUCT_WEIGHT>
                </EPOD_PRODUCT>
                <EPOD_PRODUCT>
                  <EPL_SITE_ID>TEST</EPL_SITE_ID>
                  <EPL_JOB_ID>TEST001001</EPL_JOB_ID>
                  <EPL_CONTAINER_ID>TEST001001-01</EPL_CONTAINER_ID>
                  <EPL_PRODUCT_CODE>TESTPROD2</EPL_PRODUCT_CODE>
                  <EPL_SEQUENCE>0001</EPL_SEQUENCE>
                  <EPL_DESCRIPTION>TEST ITEM</EPL_DESCRIPTION>
                  <EPL_PRODUCT_QTY_PLANNED>12</EPL_PRODUCT_QTY_PLANNED>
                  <EPL_PRODUCT_QTY_ORDERED>1</EPL_PRODUCT_QTY_ORDERED>
                  <EPL_ITEM_TYPE>X</EPL_ITEM_TYPE>
                  <EPL_UNIT_TYPE>Y</EPL_UNIT_TYPE>
                  <EPL_DESCRIPTION_LONG>Long Description 2</EPL_DESCRIPTION_LONG>
                  <EPL_PRODUCT_WEIGHT>4.56</EPL_PRODUCT_WEIGHT>
                </EPOD_PRODUCT>
              </EPOD_PRODUCTS>
            </EPOD_CONTAINER>
            <EPOD_CONTAINER>
              <EPL_SITE_ID>TEST</EPL_SITE_ID>
              <EPL_JOB_ID>TEST001001</EPL_JOB_ID>
              <EPL_CONTAINER_ID>TEST001001-02</EPL_CONTAINER_ID>
              <EPL_SEQUENCE>0001</EPL_SEQUENCE>
              <EPL_CONTAINER_PACKAGE_CODE>XX00</EPL_CONTAINER_PACKAGE_CODE>
              <EPL_CONTAINER_PACKAGE_DESC>Test Container</EPL_CONTAINER_PACKAGE_DESC>
              <EPL_GROSS_WEIGHT>100.14</EPL_GROSS_WEIGHT>
              <EPL_DESCRIPTION_LONG>1 PLT 800</EPL_DESCRIPTION_LONG>
              <EPOD_PRODUCTS>
                <EPOD_PRODUCT>
                  <EPL_SITE_ID>TEST</EPL_SITE_ID>
                  <EPL_JOB_ID>TEST001001</EPL_JOB_ID>
                  <EPL_CONTAINER_ID>TEST001001-02</EPL_CONTAINER_ID>
                  <EPL_PRODUCT_CODE>TESTPROD1</EPL_PRODUCT_CODE>
                  <EPL_SEQUENCE>0001</EPL_SEQUENCE>
                  <EPL_DESCRIPTION>TEST ITEM</EPL_DESCRIPTION>
                  <EPL_PRODUCT_QTY_PLANNED>1</EPL_PRODUCT_QTY_PLANNED>
                  <EPL_PRODUCT_QTY_ORDERED>1</EPL_PRODUCT_QTY_ORDERED>
                  <EPL_ITEM_TYPE>X</EPL_ITEM_TYPE>
                  <EPL_UNIT_TYPE>X</EPL_UNIT_TYPE>
                  <EPL_DESCRIPTION_LONG>Long Description</EPL_DESCRIPTION_LONG>
                  <EPL_PRODUCT_WEIGHT>12.3</EPL_PRODUCT_WEIGHT>
                </EPOD_PRODUCT>
                <EPOD_PRODUCT>
                  <EPL_SITE_ID>TEST</EPL_SITE_ID>
                  <EPL_JOB_ID>TEST001001</EPL_JOB_ID>
                  <EPL_CONTAINER_ID>TEST001001-02</EPL_CONTAINER_ID>
                  <EPL_PRODUCT_CODE>TESTPROD2</EPL_PRODUCT_CODE>
                  <EPL_SEQUENCE>0001</EPL_SEQUENCE>
                  <EPL_DESCRIPTION>TEST ITEM</EPL_DESCRIPTION>
                  <EPL_PRODUCT_QTY_PLANNED>12</EPL_PRODUCT_QTY_PLANNED>
                  <EPL_PRODUCT_QTY_ORDERED>1</EPL_PRODUCT_QTY_ORDERED>
                  <EPL_ITEM_TYPE>X</EPL_ITEM_TYPE>
                  <EPL_UNIT_TYPE>Y</EPL_UNIT_TYPE>
                  <EPL_DESCRIPTION_LONG>Long Description 2</EPL_DESCRIPTION_LONG>
                  <EPL_PRODUCT_WEIGHT>4.56</EPL_PRODUCT_WEIGHT>
                </EPOD_PRODUCT>
              </EPOD_PRODUCTS>
            </EPOD_CONTAINER>
            <EPOD_CONTAINER>
              <EPL_SITE_ID>TEST</EPL_SITE_ID>
              <EPL_JOB_ID>TEST001001</EPL_JOB_ID>
              <EPL_CONTAINER_ID>TEST001001-03</EPL_CONTAINER_ID>
              <EPL_SEQUENCE>0001</EPL_SEQUENCE>
              <EPL_CONTAINER_PACKAGE_CODE>XX00</EPL_CONTAINER_PACKAGE_CODE>
              <EPL_CONTAINER_PACKAGE_DESC>Test Container</EPL_CONTAINER_PACKAGE_DESC>
              <EPL_GROSS_WEIGHT>100.14</EPL_GROSS_WEIGHT>
              <EPL_DESCRIPTION_LONG>1 PLT 800</EPL_DESCRIPTION_LONG>
              <EPOD_PRODUCTS>
                <EPOD_PRODUCT>
                  <EPL_SITE_ID>TEST</EPL_SITE_ID>
                  <EPL_JOB_ID>TEST001001</EPL_JOB_ID>
                  <EPL_CONTAINER_ID>TEST001001-03</EPL_CONTAINER_ID>
                  <EPL_PRODUCT_CODE>TESTPROD1</EPL_PRODUCT_CODE>
                  <EPL_SEQUENCE>0001</EPL_SEQUENCE>
                  <EPL_DESCRIPTION>TEST ITEM</EPL_DESCRIPTION>
                  <EPL_PRODUCT_QTY_PLANNED>1</EPL_PRODUCT_QTY_PLANNED>
                  <EPL_PRODUCT_QTY_ORDERED>1</EPL_PRODUCT_QTY_ORDERED>
                  <EPL_ITEM_TYPE>X</EPL_ITEM_TYPE>
                  <EPL_UNIT_TYPE>X</EPL_UNIT_TYPE>
                  <EPL_DESCRIPTION_LONG>Long Description</EPL_DESCRIPTION_LONG>
                  <EPL_PRODUCT_WEIGHT>12.3</EPL_PRODUCT_WEIGHT>
                </EPOD_PRODUCT>
                <EPOD_PRODUCT>
                  <EPL_SITE_ID>TEST</EPL_SITE_ID>
                  <EPL_JOB_ID>TEST001001</EPL_JOB_ID>
                  <EPL_CONTAINER_ID>TEST001001-03</EPL_CONTAINER_ID>
                  <EPL_PRODUCT_CODE>TESTPROD2</EPL_PRODUCT_CODE>
                  <EPL_SEQUENCE>0001</EPL_SEQUENCE>
                  <EPL_DESCRIPTION>TEST ITEM</EPL_DESCRIPTION>
                  <EPL_PRODUCT_QTY_PLANNED>12</EPL_PRODUCT_QTY_PLANNED>
                  <EPL_PRODUCT_QTY_ORDERED>1</EPL_PRODUCT_QTY_ORDERED>
                  <EPL_ITEM_TYPE>X</EPL_ITEM_TYPE>
                  <EPL_UNIT_TYPE>Y</EPL_UNIT_TYPE>
                  <EPL_DESCRIPTION_LONG>Long Description 2</EPL_DESCRIPTION_LONG>
                  <EPL_PRODUCT_WEIGHT>4.56</EPL_PRODUCT_WEIGHT>
                </EPOD_PRODUCT>
              </EPOD_PRODUCTS>
            </EPOD_CONTAINER>
          </EPOD_CONTAINERS>
        </EPOD_JOB>
        <EPOD_JOB>
          <EPL_SITE_ID>TEST</EPL_SITE_ID>
          <EPL_LOAD_ID>TEST001</EPL_LOAD_ID>
          <EPL_JOB_ID>TEST001002</EPL_JOB_ID>
          <EPL_JOB_CODE>LINK-47</EPL_JOB_CODE>
          <EPL_JOB_TYPE>D</EPL_JOB_TYPE>
          <EPL_JOB_GROUP>JG01</EPL_JOB_GROUP>
          <EPL_CUST_REF>CR-LOAD 46</EPL_CUST_REF>
          <EPL_JOB_INSTRUCTION>Free Text Instructions</EPL_JOB_INSTRUCTION>
          <EPL_OFFICE_INSTRUCTION>Containers and loose products. Linked to collection 
          through Job Code</EPL_OFFICE_INSTRUCTION>
          <EPL_START_PLANNED_DATE>20120320</EPL_START_PLANNED_DATE>
          <EPL_START_PLANNED_TIME>00000000</EPL_START_PLANNED_TIME>
          <EPL_END_PLANNED_DATE>20120320</EPL_END_PLANNED_DATE>
          <EPL_END_PLANNED_TIME>00000000</EPL_END_PLANNED_TIME>
          <EPL_DISTANCE_PLANNED>0</EPL_DISTANCE_PLANNED>
          <EPOD_CUSTOMER>
            <EPL_CUSTOMER_CODE>Cust001</EPL_CUSTOMER_CODE>
            <EPL_CUSTOMER_NAME>Customer Jones</EPL_CUSTOMER_NAME>
            <EPL_ADDRESS_1>15 TEST ROAD</EPL_ADDRESS_1>
            <EPL_ADDRESS_2>TESTINGTON</EPL_ADDRESS_2>
            <EPL_ADDRESS_3>TEST</EPL_ADDRESS_3>
            <EPL_ADDRESS_4>TESTside</EPL_ADDRESS_4>
            <EPL_POSTCODE>CH62 9GR</EPL_POSTCODE>
            <EPL_CONTACT>TESTER Jones</EPL_CONTACT>
            <EPL_TELEPHONE>08458795846</EPL_TELEPHONE>
            <EPL_EMAIL>[email protected]</EPL_EMAIL>
          </EPOD_CUSTOMER>
           <EPL_CUSTOMER_CODE>Cust001</EPL_CUSTOMER_CODE>
           <EPL_CUSTOMER_NAME>Customer Jones</EPL_CUSTOMER_NAME>
          <EPL_ADDRESS_1>16 Speke Boulevard</EPL_ADDRESS_1>
          <EPL_ADDRESS_2>Speke</EPL_ADDRESS_2>
          <EPL_ADDRESS_3>Liverpool</EPL_ADDRESS_3>
          <EPL_ADDRESS_4>United Kingdom</EPL_ADDRESS_4>
          <EPL_POSTCODE>CH62 9GR</EPL_POSTCODE>
          <EPL_CONTACT>TESTER Jones</EPL_CONTACT>
          <EPL_TELEPHONE>08458795846</EPL_TELEPHONE>
          <EPL_EMAIL>[email protected]</EPL_EMAIL>
          <EPL_SO_NUMBER>SO-LOAD 46</EPL_SO_NUMBER>
          <EPL_ORDER_DATE>20120319</EPL_ORDER_DATE>
          <EPL_SALES_CONTACT>Jenny</EPL_SALES_CONTACT>
          <EPOD_CONTAINERS>
            <EPOD_CONTAINER>
              <EPL_SITE_ID>TEST</EPL_SITE_ID>
              <EPL_JOB_ID>TEST001002</EPL_JOB_ID>
              <EPL_CONTAINER_ID>TEST001002-01</EPL_CONTAINER_ID>
              <EPL_SEQUENCE>0001</EPL_SEQUENCE>
              <EPL_CONTAINER_PACKAGE_CODE>XX00</EPL_CONTAINER_PACKAGE_CODE>
              <EPL_CONTAINER_PACKAGE_DESC>Test Container</EPL_CONTAINER_PACKAGE_DESC>
              <EPL_GROSS_WEIGHT>100.14</EPL_GROSS_WEIGHT>
              <EPL_DESCRIPTION_LONG>1 PLT 800</EPL_DESCRIPTION_LONG>
            </EPOD_CONTAINER>
            <EPOD_CONTAINER>
              <EPL_SITE_ID>TEST</EPL_SITE_ID>
              <EPL_JOB_ID>TEST001002</EPL_JOB_ID>
              <EPL_CONTAINER_ID>TEST001002-02</EPL_CONTAINER_ID>
              <EPL_SEQUENCE>0001</EPL_SEQUENCE>
              <EPL_CONTAINER_PACKAGE_CODE>XX00</EPL_CONTAINER_PACKAGE_CODE>
              <EPL_CONTAINER_PACKAGE_DESC>Test Container</EPL_CONTAINER_PACKAGE_DESC>
              <EPL_GROSS_WEIGHT>100.14</EPL_GROSS_WEIGHT>
              <EPL_DESCRIPTION_LONG>1 PLT 800</EPL_DESCRIPTION_LONG>
            </EPOD_CONTAINER>
            <EPOD_CONTAINER>
              <EPL_SITE_ID>TEST</EPL_SITE_ID>
              <EPL_JOB_ID>TEST001002</EPL_JOB_ID>
              <EPL_CONTAINER_ID>TEST001002-03</EPL_CONTAINER_ID>
              <EPL_SEQUENCE>0001</EPL_SEQUENCE>
              <EPL_CONTAINER_PACKAGE_CODE>XX00</EPL_CONTAINER_PACKAGE_CODE>
              <EPL_CONTAINER_PACKAGE_DESC>Test Container</EPL_CONTAINER_PACKAGE_DESC>
              <EPL_GROSS_WEIGHT>100.14</EPL_GROSS_WEIGHT>
              <EPL_DESCRIPTION_LONG>1 PLT 800</EPL_DESCRIPTION_LONG>
            </EPOD_CONTAINER>
          </EPOD_CONTAINERS>
          <EPOD_PRODUCTS>
            <EPOD_PRODUCT>
              <EPL_SITE_ID>TEST</EPL_SITE_ID>
              <EPL_JOB_ID>TEST001002</EPL_JOB_ID>
              <EPL_PRODUCT_CODE>TESTPROD1</EPL_PRODUCT_CODE>
              <EPL_SEQUENCE>0001</EPL_SEQUENCE>
              <EPL_DESCRIPTION>TEST ITEM</EPL_DESCRIPTION>
              <EPL_PRODUCT_QTY_PLANNED>1</EPL_PRODUCT_QTY_PLANNED>
              <EPL_PRODUCT_QTY_ORDERED>1</EPL_PRODUCT_QTY_ORDERED>
              <EPL_ITEM_TYPE>X</EPL_ITEM_TYPE>
              <EPL_UNIT_TYPE>X</EPL_UNIT_TYPE>
              <EPL_DESCRIPTION_LONG>Long Description</EPL_DESCRIPTION_LONG>
              <EPL_PRODUCT_WEIGHT>12.3</EPL_PRODUCT_WEIGHT>
            </EPOD_PRODUCT>
            <EPOD_PRODUCT>
              <EPL_SITE_ID>TEST</EPL_SITE_ID>
              <EPL_JOB_ID>TEST001002</EPL_JOB_ID>
              <EPL_PRODUCT_CODE>TESTPROD2</EPL_PRODUCT_CODE>
              <EPL_SEQUENCE>0001</EPL_SEQUENCE>
              <EPL_DESCRIPTION>TEST ITEM</EPL_DESCRIPTION>
              <EPL_PRODUCT_QTY_PLANNED>12</EPL_PRODUCT_QTY_PLANNED>
              <EPL_PRODUCT_QTY_ORDERED>1</EPL_PRODUCT_QTY_ORDERED>
              <EPL_ITEM_TYPE>X</EPL_ITEM_TYPE>
              <EPL_UNIT_TYPE>Y</EPL_UNIT_TYPE>
              <EPL_DESCRIPTION_LONG>Long Description 2</EPL_DESCRIPTION_LONG>
              <EPL_PRODUCT_WEIGHT>4.56</EPL_PRODUCT_WEIGHT>
            </EPOD_PRODUCT>
            <EPOD_PRODUCT>
              <EPL_SITE_ID>TEST</EPL_SITE_ID>
              <EPL_JOB_ID>TEST001002</EPL_JOB_ID>
              <EPL_PRODUCT_CODE>TESTPROD3</EPL_PRODUCT_CODE>
              <EPL_SEQUENCE>0001</EPL_SEQUENCE>
              <EPL_DESCRIPTION>TEST ITEM</EPL_DESCRIPTION>
              <EPL_PRODUCT_QTY_PLANNED>1</EPL_PRODUCT_QTY_PLANNED>
              <EPL_PRODUCT_QTY_ORDERED>1</EPL_PRODUCT_QTY_ORDERED>
              <EPL_ITEM_TYPE>X</EPL_ITEM_TYPE>
              <EPL_UNIT_TYPE>X</EPL_UNIT_TYPE>
              <EPL_DESCRIPTION_LONG>Long Description</EPL_DESCRIPTION_LONG>
              <EPL_PRODUCT_WEIGHT>12.3</EPL_PRODUCT_WEIGHT>
            </EPOD_PRODUCT>
            <EPOD_PRODUCT>
              <EPL_SITE_ID>TEST</EPL_SITE_ID>
              <EPL_JOB_ID>TEST001002</EPL_JOB_ID>
              <EPL_PRODUCT_CODE>TESTPROD4</EPL_PRODUCT_CODE>
              <EPL_SEQUENCE>0001</EPL_SEQUENCE>
              <EPL_DESCRIPTION>TEST ITEM</EPL_DESCRIPTION>
              <EPL_PRODUCT_QTY_PLANNED>12</EPL_PRODUCT_QTY_PLANNED>
              <EPL_PRODUCT_QTY_ORDERED>1</EPL_PRODUCT_QTY_ORDERED>
              <EPL_ITEM_TYPE>X</EPL_ITEM_TYPE>
              <EPL_UNIT_TYPE>Y</EPL_UNIT_TYPE>
              <EPL_DESCRIPTION_LONG>Long Description 2</EPL_DESCRIPTION_LONG>
              <EPL_PRODUCT_WEIGHT>4.56</EPL_PRODUCT_WEIGHT>
            </EPOD_PRODUCT>
            <EPOD_PRODUCT>
              <EPL_SITE_ID>TEST</EPL_SITE_ID>
              <EPL_JOB_ID>TEST001002</EPL_JOB_ID>
              <EPL_PRODUCT_CODE>TESTPROD5</EPL_PRODUCT_CODE>
              <EPL_SEQUENCE>0001</EPL_SEQUENCE>
              <EPL_DESCRIPTION>TEST ITEM</EPL_DESCRIPTION>
              <EPL_PRODUCT_QTY_PLANNED>1</EPL_PRODUCT_QTY_PLANNED>
              <EPL_PRODUCT_QTY_ORDERED>1</EPL_PRODUCT_QTY_ORDERED>
              <EPL_ITEM_TYPE>X</EPL_ITEM_TYPE>
              <EPL_UNIT_TYPE>X</EPL_UNIT_TYPE>
              <EPL_DESCRIPTION_LONG>Long Description</EPL_DESCRIPTION_LONG>
              <EPL_PRODUCT_WEIGHT>12.3</EPL_PRODUCT_WEIGHT>
            </EPOD_PRODUCT>
            <EPOD_PRODUCT>
              <EPL_SITE_ID>TEST</EPL_SITE_ID>
              <EPL_JOB_ID>TEST001002</EPL_JOB_ID>
              <EPL_PRODUCT_CODE>TESTPROD6</EPL_PRODUCT_CODE>
              <EPL_SEQUENCE>0001</EPL_SEQUENCE>
              <EPL_DESCRIPTION>TEST ITEM</EPL_DESCRIPTION>
              <EPL_PRODUCT_QTY_PLANNED>12</EPL_PRODUCT_QTY_PLANNED>
              <EPL_PRODUCT_QTY_ORDERED>1</EPL_PRODUCT_QTY_ORDERED>
              <EPL_ITEM_TYPE>X</EPL_ITEM_TYPE>
              <EPL_UNIT_TYPE>Y</EPL_UNIT_TYPE>
              <EPL_DESCRIPTION_LONG>Long Description 2</EPL_DESCRIPTION_LONG>
              <EPL_PRODUCT_WEIGHT>4.56</EPL_PRODUCT_WEIGHT>
            </EPOD_PRODUCT>
          </EPOD_PRODUCTS>
        </EPOD_JOB>
        <EPOD_JOB>
          <EPL_SITE_ID>TEST</EPL_SITE_ID>
          <EPL_LOAD_ID>TEST001</EPL_LOAD_ID>
          <EPL_JOB_ID>TEST001003</EPL_JOB_ID>
          <EPL_JOB_CODE>LINK-47</EPL_JOB_CODE>
          <EPL_JOB_TYPE>C</EPL_JOB_TYPE>
          <EPL_JOB_GROUP>JG01</EPL_JOB_GROUP>
          <EPL_CUST_REF>CR-LOAD 46</EPL_CUST_REF>
          <EPL_JOB_INSTRUCTION>Free Text Instructions</EPL_JOB_INSTRUCTION>
          <EPL_OFFICE_INSTRUCTION>Containers and loose products. Linked to collection
          through Job Code</EPL_OFFICE_INSTRUCTION>
          <EPL_START_PLANNED_DATE>20120320</EPL_START_PLANNED_DATE>
          <EPL_START_PLANNED_TIME>00000000</EPL_START_PLANNED_TIME>
          <EPL_END_PLANNED_DATE>20120320</EPL_END_PLANNED_DATE>
          <EPL_END_PLANNED_TIME>00000000</EPL_END_PLANNED_TIME>
          <EPL_DISTANCE_PLANNED>212</EPL_DISTANCE_PLANNED>
          <EPOD_CUSTOMER>
            <EPL_CUSTOMER_CODE>WAREHOUSE1</EPL_CUSTOMER_CODE>
            <EPL_CUSTOMER_NAME>TEST Jones</EPL_CUSTOMER_NAME>
            <EPL_ADDRESS_1>15 TEST ROAD</EPL_ADDRESS_1>
            <EPL_ADDRESS_2>TESTINGTON</EPL_ADDRESS_2>
            <EPL_ADDRESS_3>TEST</EPL_ADDRESS_3>
            <EPL_ADDRESS_4>TESTside</EPL_ADDRESS_4>
            <EPL_POSTCODE>CH62 9GR</EPL_POSTCODE>
            <EPL_CONTACT>TESTER Jones</EPL_CONTACT>
            <EPL_TELEPHONE>08458795846</EPL_TELEPHONE>
            <EPL_EMAIL>[email protected]</EPL_EMAIL>
          </EPOD_CUSTOMER>
          <EPL_CUSTOMER_CODE>WAREHOUSE1</EPL_CUSTOMER_CODE>
          <EPL_CUSTOMER_NAME>TEST Jones</EPL_CUSTOMER_NAME>
          <EPL_ADDRESS_1>15 TEST ROAD</EPL_ADDRESS_1>
          <EPL_ADDRESS_2>TESTINGTON</EPL_ADDRESS_2>
          <EPL_ADDRESS_3>TEST</EPL_ADDRESS_3>
          <EPL_ADDRESS_4>TESTside</EPL_ADDRESS_4>
          <EPL_POSTCODE>CH62 9GR</EPL_POSTCODE>
          <EPL_CONTACT>TESTER Jones</EPL_CONTACT>
          <EPL_TELEPHONE>08458795846</EPL_TELEPHONE>
          <EPL_EMAIL>[email protected]</EPL_EMAIL>
          <EPL_SO_NUMBER>SO-LOAD 46</EPL_SO_NUMBER>
          <EPL_ORDER_DATE>20120319</EPL_ORDER_DATE>
          <EPL_SALES_CONTACT>Jenny</EPL_SALES_CONTACT>
          <EPOD_PRODUCTS>
            <EPOD_PRODUCT>
              <EPL_SITE_ID>TEST</EPL_SITE_ID>
              <EPL_JOB_ID>TEST001003</EPL_JOB_ID>
              <EPL_PRODUCT_CODE>TESTPROD1</EPL_PRODUCT_CODE>
              <EPL_SEQUENCE>0001</EPL_SEQUENCE>
              <EPL_DESCRIPTION>TEST ITEM</EPL_DESCRIPTION>
              <EPL_PRODUCT_QTY_PLANNED>1</EPL_PRODUCT_QTY_PLANNED>
              <EPL_PRODUCT_QTY_ORDERED>1</EPL_PRODUCT_QTY_ORDERED>
              <EPL_ITEM_TYPE>X</EPL_ITEM_TYPE>
              <EPL_UNIT_TYPE>X</EPL_UNIT_TYPE>
              <EPL_DESCRIPTION_LONG>Long Description</EPL_DESCRIPTION_LONG>
              <EPL_PRODUCT_WEIGHT>12.3</EPL_PRODUCT_WEIGHT>
            </EPOD_PRODUCT>
            <EPOD_PRODUCT>
              <EPL_SITE_ID>TEST</EPL_SITE_ID>
              <EPL_JOB_ID>TEST001003</EPL_JOB_ID>
              <EPL_PRODUCT_CODE>TESTPROD2</EPL_PRODUCT_CODE>
              <EPL_SEQUENCE>0001</EPL_SEQUENCE>
              <EPL_DESCRIPTION>TEST ITEM</EPL_DESCRIPTION>
              <EPL_PRODUCT_QTY_PLANNED>12</EPL_PRODUCT_QTY_PLANNED>
              <EPL_PRODUCT_QTY_ORDERED>1</EPL_PRODUCT_QTY_ORDERED>
              <EPL_ITEM_TYPE>X</EPL_ITEM_TYPE>
              <EPL_UNIT_TYPE>Y</EPL_UNIT_TYPE>
              <EPL_DESCRIPTION_LONG>Long Description 2</EPL_DESCRIPTION_LONG>
              <EPL_PRODUCT_WEIGHT>4.56</EPL_PRODUCT_WEIGHT>
            </EPOD_PRODUCT>
            <EPOD_PRODUCT>
              <EPL_SITE_ID>TEST</EPL_SITE_ID>
              <EPL_JOB_ID>TEST001003</EPL_JOB_ID>
              <EPL_PRODUCT_CODE>TESTPROD3</EPL_PRODUCT_CODE>
              <EPL_SEQUENCE>0001</EPL_SEQUENCE>
              <EPL_DESCRIPTION>TEST ITEM</EPL_DESCRIPTION>
              <EPL_PRODUCT_QTY_PLANNED>1</EPL_PRODUCT_QTY_PLANNED>
              <EPL_PRODUCT_QTY_ORDERED>1</EPL_PRODUCT_QTY_ORDERED>
              <EPL_ITEM_TYPE>X</EPL_ITEM_TYPE>
              <EPL_UNIT_TYPE>X</EPL_UNIT_TYPE>
              <EPL_DESCRIPTION_LONG>Long Description</EPL_DESCRIPTION_LONG>
              <EPL_PRODUCT_WEIGHT>12.3</EPL_PRODUCT_WEIGHT>
            </EPOD_PRODUCT>
            <EPOD_PRODUCT>
              <EPL_SITE_ID>TEST</EPL_SITE_ID>
              <EPL_JOB_ID>TEST001003</EPL_JOB_ID>
              <EPL_PRODUCT_CODE>TESTPROD4</EPL_PRODUCT_CODE>
              <EPL_SEQUENCE>0001</EPL_SEQUENCE>
              <EPL_DESCRIPTION>TEST ITEM</EPL_DESCRIPTION>
              <EPL_PRODUCT_QTY_PLANNED>12</EPL_PRODUCT_QTY_PLANNED>
              <EPL_PRODUCT_QTY_ORDERED>1</EPL_PRODUCT_QTY_ORDERED>
              <EPL_ITEM_TYPE>X</EPL_ITEM_TYPE>
              <EPL_UNIT_TYPE>Y</EPL_UNIT_TYPE>
              <EPL_DESCRIPTION_LONG>Long Description 2</EPL_DESCRIPTION_LONG>
              <EPL_PRODUCT_WEIGHT>4.56</EPL_PRODUCT_WEIGHT>
            </EPOD_PRODUCT>
            <EPOD_PRODUCT>
              <EPL_SITE_ID>TEST</EPL_SITE_ID>
              <EPL_JOB_ID>TEST001003</EPL_JOB_ID>
              <EPL_PRODUCT_CODE>TESTPROD5</EPL_PRODUCT_CODE>
              <EPL_SEQUENCE>0001</EPL_SEQUENCE>
              <EPL_DESCRIPTION>TEST ITEM</EPL_DESCRIPTION>
              <EPL_PRODUCT_QTY_PLANNED>1</EPL_PRODUCT_QTY_PLANNED>
              <EPL_PRODUCT_QTY_ORDERED>1</EPL_PRODUCT_QTY_ORDERED>
              <EPL_ITEM_TYPE>X</EPL_ITEM_TYPE>
              <EPL_UNIT_TYPE>X</EPL_UNIT_TYPE>
              <EPL_DESCRIPTION_LONG>Long Description</EPL_DESCRIPTION_LONG>
              <EPL_PRODUCT_WEIGHT>12.3</EPL_PRODUCT_WEIGHT>
            </EPOD_PRODUCT>
            <EPOD_PRODUCT>
              <EPL_SITE_ID>TEST</EPL_SITE_ID>
              <EPL_JOB_ID>TEST001003</EPL_JOB_ID>
              <EPL_PRODUCT_CODE>TESTPROD6</EPL_PRODUCT_CODE>
              <EPL_SEQUENCE>0001</EPL_SEQUENCE>
              <EPL_DESCRIPTION>TEST ITEM</EPL_DESCRIPTION>
              <EPL_PRODUCT_QTY_PLANNED>12</EPL_PRODUCT_QTY_PLANNED>
              <EPL_PRODUCT_QTY_ORDERED>1</EPL_PRODUCT_QTY_ORDERED>
              <EPL_ITEM_TYPE>X</EPL_ITEM_TYPE>
              <EPL_UNIT_TYPE>Y</EPL_UNIT_TYPE>
              <EPL_DESCRIPTION_LONG>Long Description 2</EPL_DESCRIPTION_LONG>
              <EPL_PRODUCT_WEIGHT>4.56</EPL_PRODUCT_WEIGHT>
            </EPOD_PRODUCT>
          </EPOD_PRODUCTS>
        </EPOD_JOB>
        <EPOD_JOB>
          <EPL_SITE_ID>TEST</EPL_SITE_ID>
          <EPL_LOAD_ID>TEST001</EPL_LOAD_ID>
          <EPL_JOB_ID>TEST001004</EPL_JOB_ID>
          <EPL_JOB_CODE>SERVICE</EPL_JOB_CODE>
          <EPL_JOB_TYPE>S</EPL_JOB_TYPE>
          <EPL_JOB_GROUP>JG01</EPL_JOB_GROUP>
          <EPL_CUST_REF>CR-LOAD 46</EPL_CUST_REF>
          <EPL_JOB_INSTRUCTION>Free Text Instructions</EPL_JOB_INSTRUCTION>
          <EPL_OFFICE_INSTRUCTION>Service job</EPL_OFFICE_INSTRUCTION>
          <EPL_START_PLANNED_DATE>20120320</EPL_START_PLANNED_DATE>
          <EPL_START_PLANNED_TIME>00000000</EPL_START_PLANNED_TIME>
          <EPL_END_PLANNED_DATE>20120320</EPL_END_PLANNED_DATE>
          <EPL_END_PLANNED_TIME>00000000</EPL_END_PLANNED_TIME>
          <EPL_DISTANCE_PLANNED>0</EPL_DISTANCE_PLANNED>
          <EPOD_CUSTOMER>
            <EPL_CUSTOMER_CODE>Cust001</EPL_CUSTOMER_CODE>
            <EPL_CUSTOMER_NAME>Customer Jones</EPL_CUSTOMER_NAME>
            <EPL_ADDRESS_1>15 TEST ROAD</EPL_ADDRESS_1>
            <EPL_ADDRESS_2>TESTINGTON</EPL_ADDRESS_2>
            <EPL_ADDRESS_3>TEST</EPL_ADDRESS_3>
            <EPL_ADDRESS_4>TESTside</EPL_ADDRESS_4>
            <EPL_POSTCODE>CH62 9GR</EPL_POSTCODE>
            <EPL_CONTACT>TESTER Jones</EPL_CONTACT>
            <EPL_TELEPHONE>08458795846</EPL_TELEPHONE>
            <EPL_EMAIL>[email protected]</EPL_EMAIL>
          </EPOD_CUSTOMER>
           <EPL_CUSTOMER_CODE>Cust001</EPL_CUSTOMER_CODE>
           <EPL_CUSTOMER_NAME>Customer Jones</EPL_CUSTOMER_NAME>
          <EPL_ADDRESS_1>16 Speke Boulevard</EPL_ADDRESS_1>
          <EPL_ADDRESS_2>Speke</EPL_ADDRESS_2>
          <EPL_ADDRESS_3>Liverpool</EPL_ADDRESS_3>
          <EPL_ADDRESS_4>United Kingdom</EPL_ADDRESS_4>
          <EPL_POSTCODE>CH62 9GR</EPL_POSTCODE>
          <EPL_CONTACT>TESTER Jones</EPL_CONTACT>
          <EPL_TELEPHONE>08458795846</EPL_TELEPHONE>
          <EPL_EMAIL>[email protected]</EPL_EMAIL>
          <EPL_SO_NUMBER>SO-LOAD 46</EPL_SO_NUMBER>
          <EPL_ORDER_DATE>20120319</EPL_ORDER_DATE>
          <EPL_SALES_CONTACT>Jenny</EPL_SALES_CONTACT>
          <EPOD_SERVICE>
            <EPL_SITE_ID>TEST</EPL_SITE_ID>
            <EPL_JOB_ID>TEST001004</EPL_JOB_ID>
            <EPL_SERVICE_ID>SID-TEST001004</EPL_SERVICE_ID>
            <EPL_SERVICE_TYPE>I</EPL_SERVICE_TYPE>
            <EPL_REG_NUMBER>X502ACB</EPL_REG_NUMBER>
            <EPL_VIN_NUMBER>X502ACB</EPL_VIN_NUMBER>
            <EPL_SIM_NUMBER>X502ACB</EPL_SIM_NUMBER>
          </EPOD_SERVICE>
        </EPOD_JOB>
      </EPOD_JOBS>
    </EPOD_LOAD>
  </EPOD_LOADS>
</EPOD_IMPORT>

Note Note: The content of the imported data varies and expands as the the CALIDUS ePOD product expands. As new items are added to the application, the Import XSD will be modified and issued to you, for informational purposes. The Import XML Schema is referenced in Appendix A.


Mechanism for Sending Import Files to Web Services

The system provides web services for importing and exporting data.

There are two mechanisms:

  • Passing the data as a string, through Web Service EPOD_dataservice.asmx
  • Passing the data as an XML object, through EPOD_dataservice2.asmx

You will be provided a URL to your system implementation - the access to this will be whitelisted and secured through HTTPS.

The WSDL for the web services can be found by appending "?wsdl" to the end of the provided web service URL.


For each data service, data can be sent via multiple methods, as shown below:

  • EPOD_dataservice.asmx

SOAP 1.1

The following is a sample SOAP 1.1 request and response. The place-holders shown need to be replaced with actual values.

POST /webservices/dataservice/EPOD_dataservice.asmx HTTP/1.1
Host: www.calidus-web.com
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "ePOD_DataService/EPOD_XML_IMPORT"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <EPOD_XML_IMPORT xmlns="ePOD_DataService">
      <IMPORT>string</IMPORT>
    </EPOD_XML_IMPORT>
  </soap:Body>
</soap:Envelope>

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <EPOD_XML_IMPORTResponse xmlns="ePOD_DataService">
      <EPOD_XML_IMPORTResult>string</EPOD_XML_IMPORTResult>
    </EPOD_XML_IMPORTResponse>
  </soap:Body>
</soap:Envelope>

SOAP 1.2

The following is a sample SOAP 1.2 request and response. The placeholders shown need to be replaced with actual values.

POST /webservices/dataservice/EPOD_dataservice.asmx HTTP/1.1
Host: www.calidus-web.com
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
  <soap12:Body>
    <EPOD_XML_IMPORT xmlns="ePOD_DataService">
      <IMPORT>string</IMPORT>
    </EPOD_XML_IMPORT>
  </soap12:Body>
</soap12:Envelope>

HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
  <soap12:Body>
    <EPOD_XML_IMPORTResponse xmlns="ePOD_DataService">
      <EPOD_XML_IMPORTResult>string</EPOD_XML_IMPORTResult>
    </EPOD_XML_IMPORTResponse>
  </soap12:Body>
</soap12:Envelope>

HTTP GET

The following is a sample HTTP GET request and response. The placeholders shown need to be replaced with actual values.

GET /webservices/dataservice/EPOD_dataservice.asmx/EPOD_XML_IMPORT?IMPORT=string HTTP/1.1
Host: www.calidus-web.com

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<string xmlns="ePOD_DataService">string</string>

HTTP POST

The following is a sample HTTP POST request and response. The placeholders shown need to be replaced with actual values.

POST /webservices/dataservice/EPOD_dataservice.asmx/EPOD_XML_IMPORT HTTP/1.1
Host: www.calidus-web.com
Content-Type: application/x-www-form-urlencoded
Content-Length: length

IMPORT=string

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<string xmlns="ePOD_DataService">string</string>
  • EPOD_dataservice2.asmx

SOAP 1.1

The following is a sample SOAP 1.1 request and response. The placeholders shown need to be replaced with actual values.

POST /webservices/dataservice/EPOD_dataservice2.asmx HTTP/1.1
Host: www.calidus-web.com
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "ePOD_DataService/EPOD_XML_IMPORT"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <EPOD_XML_IMPORT xmlns="ePOD_DataService">
      <IMPORT>xml</IMPORT>
    </EPOD_XML_IMPORT>
  </soap:Body>
</soap:Envelope>

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <EPOD_XML_IMPORTResponse xmlns="ePOD_DataService">
      <EPOD_XML_IMPORTResult>xml</EPOD_XML_IMPORTResult>
    </EPOD_XML_IMPORTResponse>
  </soap:Body>
</soap:Envelope>

SOAP 1.2

The following is a sample SOAP 1.2 request and response. The placeholders shown need to be replaced with actual values.

POST /webservices/dataservice/EPOD_dataservice2.asmx HTTP/1.1
Host: www.calidus-web.com
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
  <soap12:Body>
    <EPOD_XML_IMPORT xmlns="ePOD_DataService">
      <IMPORT>xml</IMPORT>
    </EPOD_XML_IMPORT>
  </soap12:Body>
</soap12:Envelope>

HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
  <soap12:Body>
    <EPOD_XML_IMPORTResponse xmlns="ePOD_DataService">
      <EPOD_XML_IMPORTResult>xml</EPOD_XML_IMPORTResult>
    </EPOD_XML_IMPORTResponse>
  </soap12:Body>
</soap12:Envelope>

Processing Responses through Web Services

The response data is an XML file (either string data or an XML object), as shown in the calling methods above. The result is governed by a schema, in the same way that the import files are. All XSD schemas will be provided to you.

The import processor will validate the entire file to the import schema. If this fails, the file will be rejected - all errors found will be exported in the response file.

If the pre-process is successful, each record will then be attempted to be loaded. If any of these fail for any reason, the discovered error will be reported in the response file.

If the loading of all records proceeds without an issue, the acknowledged response will be sent.

Note Note: It is not recommended to attempt to resend files unless the errors have been investigated and resolved. This is the responsibility of the sending system or the users of that system to do this.

Note Note: It is recommended that this XML Response fragment is stored for later auditing of potential issues.

Note Note: The Result and Error tags will not be checked for content, only structure. Therefore these tags can contain any informative data that the producing system deems adequate for identifying issues.

An example of an Success and Failure response to an import into CALIDUS ePOD are shown below:

<EPOD_IMPORT_RESPONSE RESULT="NAK">
    <ERRORS>
        <ERROR error="The element 'EPOD_LOAD' has invalid child element 'EPL_SITE_IDX'. 
                      List of possible elements expected: 'EPL_SITE_ID'." 
            exception="System.Xml.Schema.XmlSchemaValidationException: 
                       The element 'EPOD_LOAD' has invalid child element 'EPL_SITE_IDX'. 
                       List of possible elements expected: 'EPL_SITE_ID'."/>
    </ERRORS>
</EPOD_IMPORT_RESPONSE>
<EPOD_IMPORT_RESPONSE RESULT="ACK">
    <RESULTS>
        <RESULT>
            <ID>Load: LOAD001</ID>
            <STATUS>Status: Load updated and at status C</STATUS>
        </RESULT>
        <RESULT>
            <ID>Job: JOB001</ID>
            <STATUS>Status: Job updated and at status P</STATUS>
        </RESULT>
        <RESULT>
            <ID>EPOD_CUSTOMER: Cust001</ID>
            <STATUS>Status: EPOD_CUSTOMER Updated</STATUS>
        </RESULT>
        <RESULT>
            <ID>Container: JOB001-01</ID>
            <STATUS>Status: Container created on Job: JOB001</STATUS>
        </RESULT>
        <RESULT>
            <ID>Container: JOB001-02</ID>
            <STATUS>Status: Container created on Job: JOB001</STATUS>
        </RESULT>
        <RESULT>
            <ID>Container: JOB001-03</ID>
            <STATUS>Status: Container created on Job: JOB001</STATUS>
        </RESULT>
        <RESULT>
            <ID>Job: JOB002</ID>
            <STATUS>Status: Job updated and at status X</STATUS>
        </RESULT>
        <RESULT>
            <ID>EPOD_CUSTOMER: Cust001</ID>
            <STATUS>Status: EPOD_CUSTOMER Updated</STATUS>
        </RESULT>
        <RESULT>
            <ID>Container: JOB002-01</ID>
            <STATUS>Status: Container created on Job: JOB002</STATUS>
        </RESULT>
        <RESULT>
            <ID>Container: JOB002-02</ID>
            <STATUS>Status: Container created on Job: JOB002</STATUS>
        </RESULT>
        <RESULT>
            <ID>Container: JOB002-03</ID>
            <STATUS>Status: Container created on Job: JOB002</STATUS>
        </RESULT>
    </RESULTS>
</EPOD_IMPORT_RESPONSE>

Export Process

A process runs on a timed schedule within the CALIDUS ePOD application, to pick up any jobs that have been completed and export them to external systems.

Export Message Content

A basic list if all the fields in the interface for Job follows. A full spreadsheet of all the export flows and fields containing all the limitations on length and defaulted values is provided separately.

Note Note: The content of the exported data varies and expands as the CALIDUS ePOD product expands. As new items are added to the application, the spreadsheet will be modified and issued to you, to aid in any mapping of data into your application. The Export Spreadsheet is referenced in Appendix A.


EPOD_LOAD

Name Description
EPL_SITE_ID Unique reference of the site that the Load belongs to.
EPL_LOAD_ID Unique reference of the Load.
EPL_LOAD_START_PLANNED_DATE The planned start date and time. This is used to sequence the load, and decide which load is provided to the user.
EPL_LOAD_START_PLANNED_TIME  
EPL_LOAD_END_PLANNED_DATE The planned end date and time
EPL_LOAD_END_PLANNED_TIME  
EPL_VEHICLE_ID The Vehicle ID used for completion of this Load
EPL_USER_ID The user who completed the load
EPL_STATUS EPL_STATUS: Status of the current load
EPL_LOAD_START_ACTUAL_DATE The actual start date and time
EPL_LOAD_START_ACTUAL_TIME  
EPL_LOAD_END_ACTUAL_DATE The actual end date and time
EPL_LOAD_END_ACTUAL_TIME  
EPL_LOAD_DISTANCE_PLANNED The distance planned by the route planner
EPL_LOAD_DISTANCE_ACTUAL The actual distance travelled (not used)
EPL_MILEAGE_START The mileage taken at the start and end of the load. If enabled, this replaces distance actual.
EPL_MILEAGE_END  
EPL_LAST_CHANGED_DATE  
EPL_LAST_CHANGED_TIME  
EPL_UDF_LOAD_START Contains a UDF XML string of any metrics entered at Load Start
EPL_UDF_LOAD_END Contains a UDF XML string of any metrics entered at Load End
EPL_LOAD_INFORMATION To be populated with any information to be displayed to the user regarding the Load.
EPL_TIMEZONE  
EPL_TRAILER_ID Trailer Number. To be used if the vehicle being used to fulfil the load is a Tractor unit.
EPL_ROUTE_CODE Route identifier against the trip
EPOD_JOBS Contains a series of EPOD_JOB objects, detailing all the jobs assigned to this load.


EPOD_JOB

Name Description
EPL_SITE_ID Unique Reference for the Site that the Job belongs to
EPL_JOB_ID Unique reference for the job. If not provided on Import, this will be generated by EPOD
EPL_LOAD_ID Unique Reference for the Load that the Job belongs to. If not provided, defaulted from the enclosing EPOD_LOAD
EPL_JOB_TYPE "D"-Delivery, "C"-Collection, "S"-Service
EPL_JOB_GROUP This is setup within the Admin system. Each job group has its own settings and will determine how the Job is processed dependant on these settings.
EPL_CUSTOMER_CODE Customer Code from external system. If not provided, one will be generated from EPL_CUSTOMER_NAME
EPL_SEQUENCE The sequence of the job. This could be the sequence sent on Import, a pre-defined sequence (if one was not provided) or a user-changed value (if enabled)
EPL_START_PLANNED_DATE Collection/Delivery Window
EPL_START_PLANNED_TIME Collection/Delivery Window
EPL_END_PLANNED_DATE Collection/Delivery Window
EPL_END_PLANNED_TIME Collection/Delivery Window
EPL_JOB_ADDRESS A flag indicating whether this is a default Customer Address or a specific address for this job alone.
EPL_CUSTOMER_NAME The Name of the customer
EPL_ADDRESS_1  
EPL_ADDRESS_2  
EPL_ADDRESS_3  
EPL_ADDRESS_4  
EPL_ADDRESS_5  
EPL_POSTCODE  
EPL_CONTACT  
EPL_TELEPHONE  
EPL_EMAIL  
EPL_LAT Latitude of the address for the job - used to create addresses
EPL_LONG Longitude of the address for the job - used to create addresses
EPL_JOB_CODE External reference for the Job. This element can be used to link a collection and delivery together under the same reference. So, if an order is being collected at A and delivered at B, there are 2 jobs, each with a unique Job ID, but with the same Job Code. Optionally, EPOD will keep the Delivery leg of a linked job updated with the information captured from the collection.
EPL_CUST_REF Customer's Order Reference
EPL_SO_NUMBER Sales Order Reference.
EPL_ORDER_DATE Date Order created - defaulted to the date the order was received if not provided
EPL_OWNER_NAME Can be used as a display field for documentation, or indicating another Site ID that owns the job that is being executed by this site.
EPL_EXT_REF An external reference for the host system if required. For Partnerlink, this will be the PartnerJobID.
EPL_STATUS EPL_STATUS: Status of the job.

"C" for any items delivered/collected with any quantity, "X" if cancelled

EPL_LINKED_ID An identifier that informs the system that this job has been linked (consolidated) with other jobs manually by the driver.

The format is irrelevant - if multiple jobs on the same load have the same linked ID, they were consolidated.

EPL_JOB_INSTRUCTION Instructions for the Driver
EPL_REASON_CODE If a job has been cancelled, the Job-level reason code entered by the user is held here.
EPL_LINKED_REASON If the job is a delivery, and a collection of the same load with the same EPL_JOB_CODE is cancelled, this delivery will be cancelled, and this field will be set to "Y"
EPL_PHOTO_ID N/A
EPL_PHOTO_DESCRIPTION N/A
EPL_START_ACTUAL_DATE The date the user actually chose to start the job. Format: YYYYMMDD
EPL_START_ACTUAL_TIME The time the user actually chose to start the job. Format HHMMSSNN
EPL_END_ACTUAL_DATE The date the user completed or cancelled the job. Format: YYYYMMDD
EPL_END_ACTUAL_TIME The time the user completed or cancelled the job. Format HHMMSSNN
EPL_DISTANCE_PLANNED  
EPL_DISTANCE_ACTUAL  
EPL_DRIVING_TIME  
EPL_INVOICED A flag indicating the driver ticked an Invoiced box when completing the job.
EPL_CUST_SIGNATORY The name of the customer signatory on the job.
EPL_OFFICE_INSTRUCTION Instructions for Admin staff
EPL_SIGNED_UNCHECKED An indication whether the customer signed for the goods without checking them first. Note that this field can be used for any check-box entry, as this is configurable.
EPL_TNCS An XML fragment, displaying the Terms and Conditions agreed to by the customer when signing for the goods. This can also include up to 3 configurable check-boxes that the user may check.
EPL_ORDER_TIME Time Order Created
EPL_SALES_CONTACT The operative who took the order. Can be used as a display field for documentation
EPL_USER_NOTES Optional Notes entered by the driver while completing the job.
EPL_SERVICE_LEVEL Display field, containing Service Level text
EPL_LAST_CHANGED_DATE  
EPL_LAST_CHANGED_TIME  
EPL_ARRIVAL_DATE The date the user indicated they arrived at the destination. Format: YYYYMMDD
EPL_ARRIVAL_TIME The time the user indicated they arrived at the destination. Format HHMMSSNN
EPL_XF_VALUES  
EPL_TRAILER_ID To be used if the vehicle being used to fulfil the job is a Tractor unit, and a trailer ID has been entered by the user.
EPL_PF_DEPOT  
EPL_PF_TRACKING_NO  
EPL_JOB_STATUS A Job Status entered by the driver, usually to indicate whether a job should be re-scheduled. Optional.
EPL_UDF_JOBDETS Contains user-defined fields entered when processing Collections and Deliveries on the Job Details tab, in UDF formatted XML
EPL_TIMEZONE TimeZone
EPL_LOADING_TYPE Controls whether this job is seen to be a Loading task at a depot (Job Type = "C") or unloading at a depot (Job Type = "D"). Values can be "Y" or "N" or "" - only "Y" indicates whether the job is a loading/unloading task.
EPL_GENERATED Indicates whether the job is generated within C-EPOD.
EPL_SWAP_VEHICLE Whether the vehicle was swapped
EPL_COL_DATE Collection Date
EPL_ACCOUNT Account Name
EPL_JOB_SIGNATURE The signature taken from the customer when the job was completed. This is in the form of a Base64-encrypted Jpeg file
EPL_PHOTO N/A
EPL_ENG_SIGNATURE The signature taken from the driver/engineer when the job was completed, if required. This is in the form of a Base64-encrypted Jpeg file
EPL_APPROVED_IND If set to 1, the job has been approved in EPOD and no more time/expense entries can be added against the job.
EPL_APPROVED_EMAIL_IND If set to 1, an automatic email will also be sent by EPOD once the job is approved.
EPL_SUBMITTED_IND If set to 1, the EPOD device has finished sending time/expense entries against the job.
EPOD_JOB_ADDRESS Any Job address against the job, if different to the customer address. Consisting of the following tags if present:
EPL_ADDRESS_TYPE "D" - Delivery, "C" - Collection, "O" - Origin, "F" Final Destination.
EPL_NAME  
EPL_ADDRESS_1  
EPL_ADDRESS_2  
EPL_ADDRESS_3  
EPL_ADDRESS_4  
EPL_ADDRESS_5  
EPL_POSTCODE  
EPL_CONTACT  
EPL_TELEPHONE  
EPL_EMAIL  
EPL_LAT Latitude of the address
EPL_LONG Longitude of the address
EPL_TRAVEL_PLANNED Planned travel time in minutes
EPL_WORK_PLANNED Planned work time in minutes
EPL_WORK_ACTUAL Actual work time in minutes
EPL_ODO_START Start Odometer reading
EPL_ODO_END End Odometer reading
EPOD_TIME_WINDOWS Time windows associated to the job
EPOD_TIME_WINDOW  
ETW_TIME_START Start time for the window
ETW_TIME_END End time for the window
EPOD_CONTAINERS Contains a series of EPOD_CONTAINER objects, detailing all the deliverable items on this load. If there are loose products, there will also be a container with ID '000000000000000' holding these products.
EPOD_SERVICES If the job is a Service, this object contains a series of EPOD_SERVICE objects, each holding all the service-related information for each service item. In that case, no containers or products will be specified against the job.


EPOD_CONTAINER

Name Description
EPL_SITE_ID Unique Reference for the Site that the Job belongs to
EPL_JOB_ID Unique reference for the job. If not provided on Import, this will be generated by EPOD
EPL_CONTAINER_ID The unique identifier for a container.
EPL_STATUS Status of the current Container. "C"-Completed, "X"-Cancelled.
EPL_SEQUENCE A sequence for the containers to be shown on the user's device, in numeric format.
EPL_CONTAINER_PACKAGE_CODE  
EPL_CONTAINER_PACKAGE_DESC  
EPL_REASON_CODE If a job has been cancelled, the reason code entered by the user is held here.
EPL_LINKED_REASON If the job is a delivery, and a collection of this container on the same load with the same EPL_JOB_CODE is cancelled, this container will be cancelled, and this field will be set to "Y"
EPL_PHOTO_ID N/A
EPL_PHOTO N/A
EPL_PHOTO_DESCRIPTION N/A
EPL_GROSS_WEIGHT Gross Weight
EPL_DESCRIPTION_LONG  
EPL_CODE_1 Multi-purpose field
EPL_CODE_2 Multi-purpose field
EPL_CODE_3 Multi-purpose field
EPL_LAST_CHANGED_DATE  
EPL_LAST_CHANGED_TIME  
EPL_CUST_COMMENTS Optional entry by the user, indicating whether the customer has identified an issue with the received item (a claused receipt).
EPL_VALID_DATE The date up until the contents of the package are valid - controls warnings at delivery.
EPL_VALID_TIME The time up until the contents of the package are valid - controls warnings at delivery.
EPL_TYPE Shows whether this container was Ad Hoc Scanned ("A") or was preplanned (blank)
EPL_CONTAINER_ONLY Controls whether a container with products inside it has the contents scanned at initial unloading. This is controlled at a job group level, but may be over-ridden per container, to support bulk consolidated pallets, mixed product in totes, etc.

Multiple values: If omitted or blank - behaviour inherited from the job group Y - contents are never scanned on initial unloading N - contents are always scanned on initial unloading

EPOD_PRODUCTS Contains a series of EPOD_PRODUCTS objects, detailing the products within the container, or loose products


EPOD_PRODUCT

Name Description
EPL_SITE_ID Unique reference of the site that the Product belongs to.
EPL_JOB_ID Unique reference of the job that the Product belongs to.
EPL_CONTAINER_ID Unique reference of the container that the Product belongs to. If this is loose product, the container will be "000000000000"
EPL_PRODUCT_CODE Unique reference of the Product
EPL_SEQUENCE The sequence of the products within the container. Value must be numeric in the range 0-9999
EPL_DESCRIPTION Description of the product
EPL_DESCRIPTION_LONG Long description of the product
EPL_PRODUCT_QTY_PLANNED  
EPL_PRODUCT_QTY_ACTUAL Actually delivered quantity
EPL_PRODUCT_QTY_CASE  
EPL_PRODUCT_QTY_ORDERED  
EPL_REASON_CODE If the quantity has changed or the product line has been cancelled, a Detail-level reason code will be present
EPL_LINKED_REASON EPL_LINKED_REASON: Y if the reason code is carried from the linked collection - defaults to N
EPL_STATUS EPL_STATUS: Status of the current product.

"C" for delivered with any quantity, "X" if cancelled

EPL_PHOTO_ID N/A
EPL_PHOTO N/A
EPL_PHOTO_DESCRIPTION N/A
EPL_PRODUCT_WEIGHT  
EPL_CUST_REF  
EPL_ITEM_TYPE  
EPL_UNIT_TYPE  
EPL_CUST_COMMENTS Optional entry by the user, indicating whether the customer has identified an issue with the received item (a claused receipt).
EPL_LAST_CHANGED_DATE  
EPL_LAST_CHANGED_TIME  
EPL_UNIT_PRICE Nett price per unit.
EPL_UNIT_VAT VAT per unit.


Note Note: Regarding Signature and Photo data formats in this message: This data is stored and transmitted as a text string, Base64-encrypted. This data can be decoded and saved as binary data once received if required.

A sample of a single job with a single pallet is shown below:

<EPOD_EXPORT_JOB>
  <EPOD_JOBS>
    <EPOD_JOB>
      <EPL_SITE_ID>L03</EPL_SITE_ID>
      <EPL_JOB_ID>0000000001</EPL_JOB_ID>
      <EPL_LOAD_ID>000000000002</EPL_LOAD_ID>
      <EPL_JOB_TYPE>D</EPL_JOB_TYPE>
      <EPL_JOB_GROUP>L03</EPL_JOB_GROUP>
      <EPL_JOB_INSTRUCTION>Very Fragile Parcel..Please handle with Care</EPL_JOB_INSTRUCTION>
      <EPL_JOB_SIGNATURE>R0lGODlh4AB4APcA...NKdJTY4EBAA7</EPL_JOB_SIGNATURE>
      <EPL_REASON_CODE></EPL_REASON_CODE>
      <EPL_LINKED_REASON>N</EPL_LINKED_REASON>
      <EPL_STATUS>C</EPL_STATUS>
      <EPL_CUSTOMER_CODE>OBS</EPL_CUSTOMER_CODE>
      <EPL_PHOTO_ID></EPL_PHOTO_ID>
      <EPL_ENG_SIGNATURE></EPL_ENG_SIGNATURE>
      <EPL_SEQUENCE>1</EPL_SEQUENCE>
      <EPL_START_PLANNED_DATE>20111108</EPL_START_PLANNED_DATE>
      <EPL_START_PLANNED_TIME>12000000</EPL_START_PLANNED_TIME>
      <EPL_END_PLANNED_DATE>0</EPL_END_PLANNED_DATE>
      <EPL_END_PLANNED_TIME>0</EPL_END_PLANNED_TIME>
      <EPL_START_ACTUAL_DATE>20111108</EPL_START_ACTUAL_DATE>
      <EPL_START_ACTUAL_TIME>10490000</EPL_START_ACTUAL_TIME>
      <EPL_END_ACTUAL_DATE>20111108</EPL_END_ACTUAL_DATE>
      <EPL_END_ACTUAL_TIME>10520000</EPL_END_ACTUAL_TIME>
      <EPL_DISTANCE_PLANNED>0</EPL_DISTANCE_PLANNED>
      <EPL_DISTANCE_ACTUAL>0</EPL_DISTANCE_ACTUAL>
      <EPL_DRIVING_TIME>0</EPL_DRIVING_TIME>
      <EPL_CUSTOMER_NAME>OBS Logistics</EPL_CUSTOMER_NAME>
      <EPL_JOB_ADDRESS>N</EPL_JOB_ADDRESS>
      <EPL_ADDRESS_1>Southern Gateway</EPL_ADDRESS_1>
      <EPL_ADDRESS_2>Speke Boulevard</EPL_ADDRESS_2>
      <EPL_ADDRESS_3>Liverpool</EPL_ADDRESS_3>
      <EPL_ADDRESS_4>Merseyside</EPL_ADDRESS_4>
      <EPL_ADDRESS_5></EPL_ADDRESS_5>
      <EPL_POSTCODE>L24 9HZ</EPL_POSTCODE>
      <EPL_CONTACT>Xavier Wai</EPL_CONTACT>
      <EPL_TELEPHONE>01514480331</EPL_TELEPHONE>
      <EPL_EMAIL>[email protected]</EPL_EMAIL>
      <EPL_INVOICED></EPL_INVOICED>
      <EPL_CUST_SIGNATORY></EPL_CUST_SIGNATORY>
      <EPL_JOB_CODE>L03</EPL_JOB_CODE>
      <EPL_CUST_REF></EPL_CUST_REF>
      <EPL_OFFICE_INSTRUCTION></EPL_OFFICE_INSTRUCTION>
      <EPL_SIGNED_UNCHECKED></EPL_SIGNED_UNCHECKED>
      <EPL_SO_NUMBER></EPL_SO_NUMBER>
      <EPL_TNCS></EPL_TNCS>
      <EPL_ORDER_DATE>0</EPL_ORDER_DATE>
      <EPL_SALES_CONTACT></EPL_SALES_CONTACT>
      <EPL_USER_NOTES></EPL_USER_NOTES>
      <EPL_OWNER_NAME></EPL_OWNER_NAME>
      <EPL_SERVICE_LEVEL></EPL_SERVICE_LEVEL>
      <EPL_LAST_CHANGED_DATE>20120314</EPL_LAST_CHANGED_DATE>
      <EPL_LAST_CHANGED_TIME>9420098</EPL_LAST_CHANGED_TIME>
      <EPOD_CONTAINERS>
        <EPOD_CONTAINER>
          <EPL_SITE_ID>L03</EPL_SITE_ID>
          <EPL_JOB_ID>0000000001</EPL_JOB_ID>
          <EPL_CONTAINER_ID>000000000000001</EPL_CONTAINER_ID>
          <EPL_SEQUENCE>0</EPL_SEQUENCE>
          <EPL_CONTAINER_PACKAGE_CODE>XX</EPL_CONTAINER_PACKAGE_CODE>
          <EPL_CONTAINER_PACKAGE_DESC>Pallet</EPL_CONTAINER_PACKAGE_DESC>
          <EPL_REASON_CODE></EPL_REASON_CODE>
          <EPL_LINKED_REASON></EPL_LINKED_REASON>
          <EPL_STATUS>C</EPL_STATUS>
          <EPL_PHOTO_ID></EPL_PHOTO_ID>
          <EPL_CUST_COMMENTS></EPL_CUST_COMMENTS>
          <EPL_GROSS_WEIGHT>120</EPL_GROSS_WEIGHT>
          <EPL_DESCRIPTION_LONG></EPL_DESCRIPTION_LONG>
          <EPL_CODE_1>1</EPL_CODE_1>
          <EPL_CODE_2></EPL_CODE_2>
          <EPL_CODE_3></EPL_CODE_3>
          <EPL_LAST_CHANGED_DATE>20120614</EPL_LAST_CHANGED_DATE>
          <EPL_LAST_CHANGED_TIME>16362322</EPL_LAST_CHANGED_TIME>
        </EPOD_CONTAINER>
      </EPOD_CONTAINERS>
      <EPOD_SERVICES></EPOD_SERVICES>
    </EPOD_JOB>
  </EPOD_JOBS>
</EPOD_EXPORT_JOB>

Note Note: The signature has been shortened for the purposes of this document.

Note Note: The content of the exported data varies and expands as the CALIDUS ePOD product expands. As new items are added to the application, a full XSD will be modified and issued to you, to aid in validating data passed into your application. The Import XSD is referenced in Appendix A.


Vehicle Checks Format

Vehicle Defect Checks are configurable within CALIDUS ePOD. The resulting checks are stored naturally within the database as XML fragments, which may be validated with its own XSD. The vehicle checks may only be requested through the EPOD_EXPORT_VEHICLE_CHECKS webservice request, and the response XSD is referenced in Appendix A.

Vehicle Checks XML exports as a series of questions and answers from the device and may be of several different types:

  • Numeric - the user will be prompted to enter a number only as the response , for example, What is the current Mileage?
  • Text - The user will be prompted to enter a text response.
  • Boolean - The user is prompted to enter a yes or no response, for example, Does the Windscreen have any cracks. The options allowed can be cycled through by pressing on the button.
  • Option - The user will be prompted with a number of boxes that must be checked. The options allowed can be cycled through by pressing on the button.
  • Multi-state Check boxes - the user can cycle through all available values on the check-box, for example, unchecked (blank), Failed (N), Not Applicable (Y), Passed (Y), etc.

An example export is shown below:

<EPOD_EXPORT_VEHICLECHECKS_RESPONSE RESULT="ACK">
    <EPOD_VEHICLE_CHECKS>
       <EPOD_VEHICLE_CHECK>
           <EPL_SITE_ID>DEMO</EPL_SITE_ID>
           <EPL_VEHICLE_ID>VAN</EPL_VEHICLE_ID>
           <EPL_VEHICLE_CHECK_DATE>20141217</EPL_VEHICLE_CHECK_DATE>
           <EPL_VEHICLE_CHECK_TIME>0</EPL_VEHICLE_CHECK_TIME>
           <EPL_USER_ID>MATT</EPL_USER_ID>
           <VEHICLE_CHECK_DATA>
               <QUESTION ID="0001">
                   <TEXT>Please check the following items.</TEXT>
                   <FORMAT>X</FORMAT>
                   <SKIPABLE>N</SKIPABLE>
                   <ITEMS>
                       <ITEM ANSWER="Y">Oil Level</ITEM>
                       <ITEM ANSWER="Y">Tyres</ITEM>
                       <ITEM ANSWER="Y">Brakes</ITEM>
                       <ITEM ANSWER="Y">Water</ITEM>
                       <ITEM ANSWER="Y">Lights</ITEM>
                   </ITEMS>
               </QUESTION>
               <QUESTION ID="0002">
                   <TEXT>Please enter any comments.</TEXT>
                   <FORMAT>T</FORMAT>
                   <SKIPABLE>Y</SKIPABLE>
                   <ANSWER>na</ANSWER>
               </QUESTION>
               <QUESTION ID="0003">
                   <TEXT>What is the current Mileage?</TEXT>
                   <FORMAT>N</FORMAT>
                   <SKIPABLE>N</SKIPABLE>
                   <ANSWER>1000</ANSWER>
               </QUESTION>
           </VEHICLE_CHECK_DATA>
       </EPOD_VEHICLE_CHECK>
   </EPOD_VEHICLE_CHECKS>
</EPOD_EXPORT_VEHICLECHECKS_RESPONSE>


UDF Format

The CALIDUS ePOD product can be configured to accept data entry of any non-critical field at several major points in processing jobs, for example:

  • Load Start/End Metrics
  • General Job Details
  • Service:
    • Prework/Postwork checks
    • Diagnosis/Report fields

The mechanism of User-defined Fields (UDF) allows this configuration.

Similarly to Vehicle Checks, UDF responses are held natively within the database as XML fragments, which may be validated with its own XSD. The vehicle checks may only be requested through the EPOD_EXPORT_VEHICLE_CHECKS webservice request, and the response XSD is referenced in Appendix A.

The allowed field types are extended from Vehicle Checks, allowing also:

  • Label.
  • Numeric.
  • Text.
  • Text Area.
  • Checks.
  • Options.
  • Tri-state Checks.
  • Tri-state Options.
  • Drop-down lists.

The format differs slightly - a sample is shown below:

<FORM NAME="Job Details" REQUIRED="Y">
  <FIELD ID="WEIGHBRIDGE_WEIGHT">
      <TEXT>Weight</TEXT>
      <FORMAT>N</FORMAT>
      <REQUIRED>^0*[1-9][0-9]{2,4}$</REQUIRED>
      <VALUE>123.45</VALUE>
  </FIELD>
  <FIELD ID="WEIGHBRIDGE_TICKET">
      <TEXT>Weighbridge Number</TEXT>
      <FORMAT>T</FORMAT>
      <REQUIRED>Y</REQUIRED>
      <VALUE>162553</VALUE>
  </FIELD>
</FORM>

Note Note: The UDF data may be HTML-safe encoded.


Terms & Conditions

Terms and Conditions displayed to customers are configurable within CALIDUS ePOD. The format is similar to the above XML extracts, with a simple HTML-style INPUT tag, as follows:

<TERMS_CONDITIONS>
   <TEXT>I certify that the information in A, B and C is correct, and that the carrier 
         is registered.<br />
         I confirm that I have fulfilled my duty to apply the waste hierarchy as required by
         Regulation 12 of the Waste (England and Wales) Regulations 2011.</TEXT>
   <CHECKS>
       <INPUT type="checkbox">CHECK1</INPUT>
       <INPUT type="checkbox">CHECK2</INPUT>
       <INPUT type="checkbox">CHECK3</INPUT>
   </CHECKS>
</TERMS_CONDITIONS>

Note Note: The Terms and Conditions data may be HTML-safe encoded.

Note Note: Terms and Conditions may also be configured as UDF. See the UDF Format section above for details on how this may be formatted.


Export Mechanisms

Web Services (Push)

The identity of the web service will be defined by the TMS team, requiring a string (rather than an XML object) input.

Each job will be sent independently, resulting in a single call to the external web service to add this job.

When the file is received and processed by the web service, the system expects the web service to respond in the format, as shown in previous sections. The exact same format and structure should be used as described here. The content may be as detailed as required by the TMS system.


Web Services (Pull)

Web Services are supplied for external systems to request information on Loads and Jobs, by ID or Date Since. The Web Services are hosted as part of the main CALIDUS ePOD server and run as SOAP or HTML Web Services. Response Data is formatted in a strongly-typed XML file, validated by a full XSD.

The web service supports the following methods:

  • Loads (including all Jobs underneath) by ID or Date
    • EPOD_XML_EXPORT_LOAD
    • EPOD_XML_EXPORT_LOAD_DATE
    • EPOD_XML_EXPORT_LOAD_DATE_RANGE
  • Jobs by ID or Date
    • EPOD_XML_EXPORT_JOB
    • EPOD_XML_EXPORT_JOB_DATE
    • EPOD_XML_EXPORT_JOB_DATE_RANGE
  • Vehicle information
    • EPOD_XML_EXPORT_VEHICLE_REQUEST
    • EPOD_XML_EXPORT_VEHICLE_CHECKS
  • Other
    • EPOD_XML_EXPORT_REPORT - running and exporting report results
    • EPOD_XML_EXPORT_PHOTO - exporting photos from loads, jobs, containers, products, services, etc.

Note Note: When pulling data from CALIDUS ePOD, the web service will pass out the data matching the criteria in a single response. Subsequent requests will pass out the same data - when the process exports the load and/or jobs, they are not marked as exported by the system.


Each web service method requires a specific XML request payload, detailed in the following sections.


EPOD_XML_EXPORT_LOAD

This web service method allows requesting the details of a load (and all jobs within it) by the Load ID.

The following is a sample request to this web service method:

<EPOD_EXPORT_LOAD EPL_SITE_ID="DEMO" EPL_USER_ID="ADM" EPL_USER_PASSWORD="TEST">
   <EPOD_LOADS>
       <EPOD_LOAD>
           <EPL_SITE_ID>DEMO</EPL_SITE_ID>
           <EPL_LOAD_ID>00000000000T</EPL_LOAD_ID>
           </EPOD_LOAD>
       </EPOD_LOADS>
</EPOD_EXPORT_LOAD>

The web service will respond as follows:

Load found:

<EPOD_EXPORT_LOAD_RESPONSE RESULT="ACK">
   <EPOD_LOADS>
           ....
   </EPOD_LOADS>
</EPOD_EXPORT_LOAD_RESPONSE>

Errors:

<EPOD_EXPORT_LOAD_RESPONSE RESULT="NAK">
   <ERRORS>
       <ERROR error="USER DETAILS NOT VALID"/>
   </ERRORS>
</EPOD_EXPORT_LOAD_RESPONSE>


EPOD_XML_EXPORT_LOAD_DATE

This web service method allows requesting the details of a load (and all jobs within it) by the Planned Start Date.

The following is a sample request to this web service method:

<EPOD_EXPORT_LOAD_DATE EPL_SITE_ID="DEMO" EPL_USER_ID="ADM" EPL_USER_PASSWORD="TEST">
   <EPL_LOAD_START_PLANNED_DATE>20181217</EPL_LOAD_START_PLANNED_DATE>
</EPOD_EXPORT_LOAD_DATE>

Note Note: This web service method is a form of request EPOD_EXPORT_LOAD and responds with this root response tag without "DATE".

Load found:

<EPOD_EXPORT_LOAD_RESPONSE RESULT="ACK">
   <EPOD_LOADS>
           ....
   </EPOD_LOADS>
</EPOD_EXPORT_LOAD_RESPONSE>

Errors:

<EPOD_EXPORT_LOAD_RESPONSE RESULT="NAK">
   <ERRORS>
       <ERROR error="Specified argument was out of the range of valid values. Parameter name: index"></ERROR>
   </ERRORS>
</EPOD_EXPORT_LOAD_RESPONSE>


EPOD_XML_EXPORT_LOAD_DATE_RANGE

This web service method allows requesting the details of a load (and all jobs within it) by a range of dates when the load was last modified.

The following is a sample request to this web service method:

<EPOD_EXPORT_LOAD_CHANGED EPL_SITE_ID="DEMO" EPL_USER_ID="ADM" EPL_USER_PASSWORD="TEST">
   <DATE_TIME_FROM>2016-11-18T00:00:00</DATE_TIME_FROM>
   <DATE_TIME_TO>2017-11-19T00:00:00</DATE_TIME_TO>
</EPOD_EXPORT_LOAD_CHANGED>

Note Note: This web service method is a form of request EPOD_EXPORT_LOAD and responds with this root response tag without "DATE".

Load found:

<EPOD_EXPORT_LOAD_RESPONSE RESULT="ACK">
   <EPOD_LOADS>
           ....
   </EPOD_LOADS>
</EPOD_EXPORT_LOAD_RESPONSE>

Errors:

<EPOD_EXPORT_LOAD_RESPONSE RESULT="NAK">
   <ERRORS>
       <ERROR error="USER DETAILS NOT VALID"/>
   </ERRORS>
</EPOD_EXPORT_LOAD_RESPONSE>


EPOD_XML_EXPORT_JOB

This web service method allows requesting the details of a job by the specific job ID, which will have been provided to the system creating the job when the job was initially created.

The following is a sample request to this web service method:

<EPOD_EXPORT_JOB EPL_SITE_ID="DEMO" EPL_USER_ID="ADM" EPL_USER_PASSWORD="TEST">
   <EPOD_JOBS>
       <EPOD_JOB>
           <EPL_SITE_ID>DEMO</EPL_SITE_ID>
           <EPL_JOB_ID>12345678CR</EPL_JOB_ID>
       </EPOD_JOB>
   </EPOD_JOBS>
</EPOD_EXPORT_JOB>

Job Found:

<EPOD_EXPORT_JOB_RESPONSE RESULT="ACK">
   <EPOD_JOBS>
   ...
   </EPOD_JOBS>
</EPOD_EXPORT_JOB_RESPONSE>

Errors:

<EPOD_EXPORT_JOB_RESPONSE RESULT="NAK">
   <ERRORS>
       <ERROR error="NO VALUE FOR EPL_JOB_ID"></ERROR>
   </ERRORS>
</EPOD_EXPORT_JOB_RESPONSE>


EPOD_XML_EXPORT_JOB_DATE

This web service method allows requesting the details of a job by the Planned Start Date.

The following is a sample request to this web service method:

<EPOD_EXPORT_JOB_DATE EPL_SITE_ID="DEMO" EPL_USER_ID="ADM" EPL_USER_PASSWORD="TEST">
   <EPL_START_PLANNED_DATE>20161118</EPL_START_PLANNED_DATE>
</EPOD_EXPORT_JOB_DATE>

Note Note: This web service method is a form of request EPOD_EXPORT_JOB and responds with this root response tag without "DATE".

Jobs found:

<EPOD_EXPORT_JOB_RESPONSE RESULT="ACK">
   <EPOD_JOBS>
   ....
   </EPOD_JOBS>
</EPOD_EXPORT_JOB_RESPONSE>

Errors:

<EPOD_EXPORT_JOB_RESPONSE RESULT="NAK">
    <ERRORS>
        <ERROR error="NO VALUE FOR EPL_START_DATE"></ERROR>
    </ERRORS>
</EPOD_EXPORT_JOB_RESPONSE>


EPOD_XML_EXPORT_JOB_DATE_RANGE

This web service method allows requesting the details of a job by a range of dates when the job was last modified.

The following is a sample request to this web service method:

<EPOD_EXPORT_JOB_CHANGED EPL_SITE_ID="DEMO" EPL_USER_ID="ADM" EPL_USER_PASSWORD="TEST">
   <DATE_TIME_FROM>2016-12-16T17:38:46</DATE_TIME_FROM>
   <DATE_TIME_TO>2017-12-16T19:12:44</DATE_TIME_TO>
</EPOD_EXPORT_JOB_CHANGED>

Note Note: This web service method is a form of request EPOD_EXPORT_JOB and responds with this root response tag without "DATE".

Jobs found:

<EPOD_EXPORT_JOB_RESPONSE RESULT="ACK">
   <EPOD_JOBS>
   ....
   </EPOD_JOBS>
</EPOD_EXPORT_JOB_RESPONSE>

Errors:

<EPOD_EXPORT_JOB_RESPONSE RESULT="NAK">
   <ERRORS>
       <ERROR error="Column &#39;EPL_INVOICED_IND&#39; does not belong to table ."></ERROR>
   </ERRORS>
</EPOD_EXPORT_JOB_RESPONSE>


EPOD_XML_EXPORT_REPORT

This web service method allows you to request a report to be run.

Note Note: At this time, only the Mash OTIF report is available to be run through this method.

The core parameter of the request is Report Type - this currently only supports the value "MASHOTIFREPORT".

The parameters required for the report type selected are then included.

For the Mash OTIF report, they are:

Parameter Name Reqd Notes
Date Type DATE_TYPE Y Values "PLANNED" or "ACTUAL".
Date From DATE_FROM Y Format "DD/MM/YYYY".
Date To DATE_TO Y Format "DD/MM/YYYY".
Customer Code EPL_CUSTOMER_CODE N  
Load ID EPL_LOAD_ID N  
Route Code EPL_ROUTE_CODE N  


The following is a sample request to this web service method:

   <EPOD_EXPORT_REPORT EPL_SITE_ID="" EPL_USER_ID="" EPL_USER_PASSWORD="">
       <REPORT_TYPE>MASHOTIFREPORT</REPORT_TYPE>
       <DATE_TYPE>PLANNED</DATE_TYPE>
       <DATE_FROM>16/12/2008</DATE_FROM>
       <DATE_TO>16/12/2019</DATE_TO>
       <EPL_CUSTOMER_CODE></EPL_CUSTOMER_CODE>
       <EPL_LOAD_ID></EPL_LOAD_ID>
       <EPL_ROUTE_CODE></EPL_ROUTE_CODE>
   </EPOD_EXPORT_REPORT>


The process will return the report results as an XML payload.


Report run:

   <EPOD_EXPORT_REPORT_RESPONSE RESULT="ACK">
       <NewDataSet>
           <MashOTIFReport>
               <Customer_Code>M1</Customer_Code>
               <Customer_Name>Manchester Blood Centre</Customer_Name>
               <Load_ID>TRN-00001432</Load_ID>
               <Job_Code>AHC01_TRN-00001432</Job_Code>
               <Status>C</Status>
               <Reason/>
               <Sequence>5</Sequence>
               <Service/>
               <Planned_Date/>
               <Planned_Time/>
               <Arrival_Date/>
               <Arrival_Time/>
               <On_Time>Y</On_Time>
           </MashOTIFReport>
           <MashOTIFReport>
               <Customer_Code>M1</Customer_Code>
               <Customer_Name>Manchester Blood Centre</Customer_Name>
               <Load_ID>TRN-00001432</Load_ID>
               <Job_Code>NHS1432-1</Job_Code>
               <Status>C</Status>
               <Reason/>
               <Sequence>1</Sequence>
               <Service/>
               <Planned_Date>23/10/2014</Planned_Date>
               <Planned_Time>14:44</Planned_Time>
               <Arrival_Date/>
               <Arrival_Time/>
               <On_Time>N</On_Time>
           </MashOTIFReport>
           ...
       </NewDataSet>
   </EPOD_EXPORT_REPORT_RESPONSE>


The data returned depends on the report being run. Commonly:

  • the report data will be encapsulated by the tag <NewDataSet>.
  • each row of the report will be encapsulated by the dataset name. For a single tab report, this is typically the report name. For a multi-tab report, this is typically the tab name.
  • multi-tab reports will have multiple row tags, one for each tab in the report.
  • data tags will be named as per the column in the report, with special characters and white-space replaced with underscore (_) characters.


Error example:

   <EPOD_EXPORT_REPORT_RESPONSE RESULT="NAK">
       <ERRORS>
           <ERROR error="USER DETAILS NOT VALID"></ERROR>
       </ERRORS>
   </EPOD_EXPORT_REPORT_RESPONSE>


EPOD_XML_EXPORT_VEHICLE_REQUEST

This web service method allows requesting the details of vehicles in CALIDUS ePOD.

The following is a sample request to this web service method:

<EPOD_EXPORT_VEHICLE_REQUEST EPL_SITE_ID="DEMO" EPL_USER_ID="ADM" EPL_USER_PASSWORD="TEST">
   <EPL_VEHICLE_ID>27</EPL_VEHICLE_ID>
</EPOD_EXPORT_VEHICLE_REQUEST>

Vehicle found:

<EPOD_EXPORT_VEHICLE_RESPONSE RESULT="ACK">
   <EPOD_VEHICLE>
   ...
    </EPOD_VEHICLE>
</EPOD_EXPORT_VEHICLE_RESPONSE>

Data returned:

Name Description
EPL_SITE_ID Unique reference of the site to which the vehicle belongs.
EPL_VEHICLE_REG The vehicle registration plate.
EPL_DESCRIPTION A description of the vehicle, usually used for the vehicle type.
EPL_VEHICLE_MILEAGE N/A
EPL_VEHICLE_CHECK_DATE The date that this vehicle was last checked for defects, in format YYYYMMDD.
EPL_VEHICLE_CHECK_TIME The time that this vehicle was last updated, in format YYYYMMDD.
EPL_VEHICLE_CHECK_DRIVER The user ID of the driver that last checked this vehicle for defects.
EPL_STATUS The status of the vehicle with the values: "Y" - Active; "N" - Inactive and; "X" - Deleted.
EPL_LAST_CHANGED_DATE The date that this vehicle was last updated, in format YYYYMMDD.
EPL_LAST_CHANGED_TIME The time that this vehicle was last updated, in format HHMMSSNN.
EPL_LAST_POSITION Last known position of the vehicle in a pair of Decimal Degrees format e.g. 53.3491645,-2.852224
EPL_LAST_POSITION_DATE The date that this vehicle's position was last updated, in format YYYYMMDD.
EPL_LAST_POSITION_TIME The time that this vehicle's position was last updated, in format HHMMSSNN
EPL_EXT_REF If CALIDUS ePOD is configured for connection to an external tracking sustem (such as TomTom WEBFLEET), this will contain the the vehicle's ID from this system.

Errors:

<EPOD_EXPORT_VEHICLE_RESPONSE RESULT="NAK">
   <ERRORS>
       <ERROR error="NO VALUE FOR EPL_VEHICLE_ID" ></ERROR>
   </ERRORS>
</EPOD_EXPORT_VEHICLE_RESPONSE>


EPOD_XML_EXPORT_VEHICLE_CHECKS

This web service method allows requesting the details of the vehicle checks for a site.

Note Note: This request differs to the other requests in that, once vehicle check data has been served in response to a request, it is marked as processed and will not be returned again.

The following is a sample request to this web service method:

<EPOD_EXPORT_VEHICLECHECKS EPL_SITE_ID="DEMO" EPL_USER_ID="ADM" EPL_USER_PASSWORD="TEST">
</EPOD_EXPORT_VEHICLECHECKS>

Checks found:

<EPOD_EXPORT_VEHICLECHECKS_RESPONSE RESULT="ACK">
    <EPOD_VEHICLE_CHECKS>
    ...
    </EPOD_VEHICLE_CHECKS>
</EPOD_EXPORT_VEHICLECHECKS_RESPONSE>

Data returned:

Name Description
EPL_SITE_ID Unique reference of the site to which the vehicle belongs.
EPL_VEHICLE_ID The site's unique vehicle ID, typically the vehicle registration plate.
EPL_USER_ID The user ID of the driver that completed this vehicle defect check.
EPL_VEHICLE_CHECK_DATE The date that this vehicle defect was completed, in format YYYYMMDD.
EPL_VEHICLE_CHECK_TIME The time that this vehicle defect was completed, in format HHMMSSNN.
EPL_VEHICLE_CHECK_DATA The vehicle checks themselves, in UDF format.
EPL_XFER_FLAG N/A
EPL_STATUS The status of the defect check. One of: "P" - Passed; "D" - Defects Raised and; "R" - Defects resolved.
EPL_RES_USER_ID If defects have been raised and resolved, the CALIDUS ePOD user ID that resolved them.
EPL_RES_DATE If defects have been raised and resolved, the date that the resolution took place, in YYYYMMDD format.
EPL_RES_TIME If defects have been raised and resolved, the time that the resolution took place, in HHMMSSNN format.
EPL_RES_COMMENT If defects have been or are in the process of being resolved, comments from the resolvers.

Errors:

<EPOD_EXPORT_VEHICLECHECKS_RESPONSE RESULT="NAK">
   <ERRORS>
       <ERROR error="USER DETAILS NOT VALID"></ERROR>
   </ERRORS>
</EPOD_EXPORT_VEHICLECHECKS_RESPONSE>


EPOD_XML_EXPORT_PHOTO_REQUEST

This web service method allows requesting the details of photos in CALIDUS ePOD.

The following is a sample request to this web service method:

<EPOD_EXPORT_PHOTO EPL_SITE_ID="DEMO" EPL_USER_ID="ADM" EPL_USER_PASSWORD="TEST">
  <EPL_SITE_ID>DEMO</EPL_SITE_ID>
  <EPL_JOB_CODE>1280076</EPL_JOB_CODE>
  <EPL_JOB_TYPE>C</EPL_JOB_TYPE>
</EPOD_EXPORT_PHOTO>


Parameters:

Name Description
EPL_SITE_ID Must supply Site
EPL_LOAD_ID Can select load by load ID - returns all load level images for that load.
EPL_JOB_ID Can select job by job ID - returns all job-level photos for that job, and all child photos (if a collection or delivery, all container and product photos, if a service, all service photos).
EPL_JOB_CODE Can select job by job code and type - returns all job-level photos for that job, and all child photos (if a collection or delivery, all container and product photos, if a service, all service photos).
EPL_JOB_TYPE Type for above, one of "C" - collection, "D" - delivery or "S" - service.
EPL_CONTAINER_ID Can select container by container ID from specified job - returns all container-level photos for that container.
EPL_PRODUCT_CODE Can select product by product ID and sequence from specified job and container - returns all product-level photos for that product/sequence. If container specified, selects product from that container, otherwise loose products.
EPL_SEQUENCE Product Sequence
EPL_SERVICE_ID Can select service by service ID - returns all service-level photos for that service item.
EPL_PHOTO_TYPE Can filter photos returned by photo type:
  • For load-only photos, "L".
  • For load start UDF-only photos, "LSU".
  • For load end UDF-only photos, "LEU".
  • For job-only photos, "J".
  • For job UDF-only photos, "JU".
  • For container-only photos, "C".
  • For container UDF-only photos, "CU".
  • For product-only photos, "P".
  • For product UDF-only photos, "PU".
  • For service-only photos, "S".
  • For service information-only photos, "SI".
  • For service information UDF-only photos, "SIU".
  • For service post-check UDF-only photos, "SPO".
  • For service pre-check UDF-only photos, "SPR".
  • For service diagnosis UDF-only photos, "SDU".

Note: Photo Type MUST be specified if retrieving Container, Product, Service or UDF photos.

EPL_PHOTO_ID Can select photo by photo ID - returns that photo.
EPL_UDF_ID Can filter photos returned by UDF ID.

}


A sample response, when a photo is found:

<EPOD_EXPORT_PHOTO_RESPONSE RESULT="ACK">
   <EPOD_PHOTOS>
     <EPOD_PHOTO>
     ...
      </EPOD_PHOTO>
    </EPOD_PHOTOS>
</EPOD_EXPORT_PHOTO_RESPONSE>


Data returned per photo (EPOD_PHOTO):

Name Description
EPL_SITE_ID The site ID.
EPL_PHOTO_ID The unique photo ID.
EPL_DESCRIPTION The entered description of the photo.
EPL_PHOTO Base64 JPEG.
EPL_IMAGE_TYPE The photo type, as above.
EPL_LAST_CHANGED_DATE Format YYYYMMDD
EPL_LAST_CHANGED_TIME Format HHMMSSNN
EPL_KEYVAL_1 Load ID for type "L" or "LU", else Job ID for others.
EPL_KEYVAL_2 UDF ID for type "JU", Service ID for type "S", "SI, "SIU", "SPO", "SPR" or "SDU", else Container ID for type "C", "CU", "P" or "PU".
EPL_KEYVAL_3 UDF ID for type "CU", "SIU", "SPO", "SPR" or "SDU", Product ID for type "P" or "PU".
EPL_KEYVAL_4 Product Sequence for type "P" or "PU".
EPL_KEYVAL_5 UDF ID for type "PU".


Sample error response:

<EPOD_EXPORT_PHOTO_RESPONSE RESULT="NAK">
  <ERRORS>
    <ERROR error="INVALID VALUE FOR EPL_JOB_ID"></ERROR>
  </ERRORS>
</EPOD_EXPORT_PHOTO_RESPONSE>


Flat-file Processing

The FTP server or File-system can be identified by the TMS team, or supplied by OBS Logistics.

Each job will be sent independently, resulting in a single XML file created in the destination folder. The naming of the file is configurable.

No confirmation of processing is required - this is expected to be handled by the host system. Files processed can be deleted or moved to an archive folder, as required by the host system.