This document describes the different steps an Equipment Operator needs to perform in order to plan a load based on information they received from a seller/loader.
As per process flow description of step D, the following API calls needs to be performed in sequence to "assign a load":
-
search the equipment
-
open the booklet
-
get equipment cleanliness
-
define what type of document to use for the load to consume (eECD/ePPL/eECO)
-
assign a planned load to the equipment ID (= Create Planned Load)
-
create load assignment as per manual process
-
manual assign load
-
-
create load assignment as per integrated process using Elemica or other transport message integration partners
-
get a transport order
-
-
Search the Equipment
GET {eecdapi}/equipment/paged?operatorId={operatorId}&search={search}
Usage
-
Identify the equipment. You will need the retrieved equipment ID later in the cleaning process.
Information
-
Retrieves the information about a specific equipment
-
Either license plate or container ID will be returned, but never both
Query string parameters
-
OperatorId: ID of an operator
-
Search: A way to uniquely identify the equipment. This may be either the license plate or the container ID.
Response: Get equipment
Search equipment response
[
{
"id": "Guid"
"operatorId": "Guid",
"equipmentType": "string",
"subGroup": "string",
"numberOfManholes": 0,
"numberOfCompartments": 0,
"compartments": [
{
"key": "1",
"volume": 0,
"baffles": 0
}
],
"licensePlate": "string",
"internalEquipmentCode": "string",
"containerId": "string",
"isIso6346Compliant": true
}
]
Open the booklet
GET {eecdapi}/equipment/{equipmentId}/history
Usage
-
Opens the booklet to view the load-, eppl-, and cleaning history
-
The amount of loads/eppls/cleanings visible in the history depends on the license of the user opening the booklet
-
A maximum of 3 relevant cleaning cycles per compartment is available
Information
-
Depending on your license and your relation to the equipment, you may see only certain parts of the booklet
-
Equipment operators can view their own equipment history at all times.
Response
Get equipment history response
{
"equipmentId": "string",
"compartments": [
{
"key": "string",
"loads": [
{
"id": "string",
"lastStatusDate": "2021-05-12T06:48:54.696Z",
"status": "PLANNED",
"product": {
"productId": "string",
"sellerId": "string",
"sellerName": "string",
"productType": "CHEMICAL",
"articleNumber": "string",
"articleName": "string",
"unNr": "string"
},
"loadDetails": {
"loadPlannedAt": "2021-05-12T06:48:54.696Z",
"loaderId": "string",
"loaderName": "string",
"loadingLocation": "string",
"transportOrderId": "string"
},
"loadProcessStates": [
{
"status": "PLANNED",
"fullName": "string",
"userId": "string",
"timeStamp": "2021-05-12T06:48:54.696Z",
"comment": "string"
}
],
"customerReference": "string",
"outboundDeliveryReference": "string",
"outboundDeliveryReferenceItemLine": "string",
"attachments": [
{
"id": "string",
"originalFilename": "string"
}
],
"extraTask": "NONE",
"epplId": "string",
"referenceDate": "2021-05-12T06:48:54.696Z"
}
],
"cleanings": [
{
"id": "string",
"lastStatusDate": "2021-05-12T06:48:54.696Z",
"status": "REQUESTED",
"cleanedBy": {
"locationId": "string",
"locationName": "string",
"supervisor": "string",
"organisationId": "string",
"organisationName": "string",
"addressLines": {
"additionalProp1": "string",
"additionalProp2": "string",
"additionalProp3": "string"
},
"phone": "string",
"fax": "string",
"website": "string"
},
"references": {
"customerReference": "string",
"internalReference": "string"
},
"process": {
"startedAt": "2021-05-12T06:48:54.696Z",
"endedAt": "2021-05-12T06:48:54.696Z",
"completedAt": "2021-05-12T06:48:54.696Z",
"representativeName": "string",
"createdBy": "string",
"createdById": "string",
"createdAt": "2021-05-12T06:48:54.696Z",
"cleaningPerformedBy": "string"
},
"signoff": {
"driverName": "string",
"signature": "string",
"signedAt": "2021-05-12T06:48:54.696Z",
"driverComments": "string"
},
"eEcd": {
"reference": "string",
"valid": true,
"expired": true
},
"attachments": [
{
"id": "string",
"originalFilename": "string"
}
],
"cleanerComments": "string",
"type": "STANDARD",
"isUnaccompanied": true,
"eEco": {
"reference": "string",
"estimatedTimeOfArrival": "2021-05-12T06:48:54.696Z",
"estimatedTimeOfPickup": "2021-05-12T06:48:54.696Z",
"safetyInfo": {
"tankUnderPressure": true,
"nitrogenInTank": true,
"solidNoPressure": true
},
"agentRequest": "string",
"otherRequests": "string",
"issueDate": "2021-05-12T06:48:54.696Z"
},
"cleaning": {
"codes": [
"string"
],
"additional": "string",
"commentsPerCode": {
"additionalProp1": "string",
"additionalProp2": "string",
"additionalProp3": "string"
}
},
"valid": true,
"previousLoad": {
"productId": "string",
"sellerId": "string",
"sellerName": "string",
"productType": "CHEMICAL",
"articleNumber": "string",
"articleName": "string",
"unNr": "string"
},
"comments": [
{
"comment": "string",
"createdById": "string",
"createdBy": "string",
"createdOn": "2021-05-12T06:48:54.696Z"
}
],
"referenceDate": "2021-05-12T06:48:54.696Z"
}
],
"ePpls": [
{
"id": "string",
"createdOn": "2021-05-12T06:48:54.696Z",
"lastStatusDate": "2021-05-12T06:48:54.696Z",
"reference": "string",
"status": "SIGNEDOFF",
"loads": [
{
"id": "string",
"numberOfAllowedPreviousLoads": 0,
"maxHoursWithoutCleaning": 0,
"maxHoursPreviousLoad": 0,
"articleNumber": "string",
"productId": "string",
"productName": "string",
"loaderReference": "string",
"loaderId": "string",
"equipmentOperatorReference": "string",
"loadingDate": "2021-05-12T06:48:54.696Z",
"unNumber": "string",
"adrClass": "string"
}
],
"nextLoadId": "string",
"ePplLoadCounter": 0,
"lastCleaningTime": "2021-05-12T06:48:54.696Z",
"referenceDate": "2021-05-12T06:48:54.696Z"
}
]
}
]
}
Get equipment cleanliness
GET {eecdapi}/equipment/{equipmentId}/cleanliness (Github link)
Usage
-
Determines the cleanliness state of a piece of equipment within the eECD platform
Information
-
If all compartments are clean, the equipment is considered clean; if all compartments are dirty, it is considered dirty.
-
Equipment can also be partially dirty. Compartments are either clean or dirty, there is no middle ground.
-
For polymer cleanings, the polymer completeness state is added as well. Regardless of whether a cleaning was polymer complete or not; if the cleaning was performed, it is still considered as clean..
-
In order to retrieve the ID of the equipment, please refer to the Equipment management section.
As not all loads and cleaning actions are necessarily processed through the eECD platform, it might occur that the eECD platform returns a clean state when this API call is made. If a previous load was not registered and the cleanliness of the equipment is not correct, this needs to be solved by adding one or more unregistered loads.
Response
Create Equipment response
{
"state": "CompletelyClean",
"compartments": {
"additionalProp1": {
"cleanliness": "Clean",
"polymerCompleteness": "PolymerComplete"
},
"additionalProp2": {
"cleanliness": "Clean",
"polymerCompleteness": "PolymerComplete"
},
"additionalProp3": {
"cleanliness": "Clean",
"polymerCompleteness": "PolymerComplete"
}
}
}
Get a transport order
GET {eecdapi}/organisations/{sellerId}/transportorders/{transportReference}
Usage
-
Retrieves the information of a transport order from a Seller.
Information
-
This only works for sellers that share their transport order through a 3rd party connector such as Elemica.
-
The information from the transport order can be used to retrieve information when assigning loads to equipments.
Query string parameters
-
sellerID: the ID of the seller that sent the transport order (get id is explained in the "Manage Equipment Master Data" section)
-
transportReference: The unique transport reference as provided by the seller. In the case of Elemica, this concerns the Shipment number
Response
Get Transport order
{
"id": "string",
"createdOn": "2019-12-05T12:26:49.078Z",
"lastUpdatedOn": "2019-12-05T12:26:49.078Z",
"version": "string",
"documentIdentifier": "string",
"status": "ORIGINAL",
"sentOn": "2019-12-05T12:26:49.078Z",
"transportReference": "string",
"seller": {
"id": "string",
"name": "string",
"subgroup": "string"
},
"equipmentOperator": {
"id": "string",
"name": "string",
"subgroup": "string"
},
"deliveryNotes": [
{
"identifier": "string",
"lines": [
{
"identifier": "string",
"isValid": true,
"quantity": 0,
"unitOfMeasure": "string",
"customerName": "string",
"customerIdentifier": "string",
"reference": "string",
"loadingDate": "2019-12-05T12:26:49.079Z",
"product": {
"productId": "string",
"sellerId": "string",
"sellerName": "string",
"productType": "CHEMICAL",
"articleNumber": "string",
"articleName": "string",
"unNr": "string"
},
"loadingLocation": {
"loaderId": "string",
"loaderName": "string",
"specifiers": {
"additionalProp1": "string",
"additionalProp2": "string",
"additionalProp3": "string"
},
"description": "string",
"uniqueReference": "string"
}
}
]
}
]
}
Assign a load
POST {eecdapi}/equipment/{equipmentId}/loads/assign
Usage
-
Plans a load on an equipment owned by the Equipment operator
-
Each load should "consume" a document that proves that the current load can be loaded. This document can be an eECD or an ePPL
Information
-
It is possible to plan a load to an equipment that is not clean or that has compartments that are not cleaned
Validation
-
A load must be planned for one or more compartments
-
A load must be planned in the future.
-
None of the selected compartments of the equipment may already have a planned load
-
The load will contain a log entry to indicate it being created
-
ProductID needs to be a valid product
-
Seller ID needs to be a valid seller with an active license
-
Loader ID needs to be a valid loader with an active license
-
The extraTask is used to specify wheter we want to:
-
Use the existing eECD: ExtraTask = NONE
-
Issue a proof of previous load (ePPL): ExtraTask = ISSUEPPL
-
Request a cleaning (eECO): ExtraTask = ISSUEECO
-
Body
Plan a load
{
"productId": "string",
"sellerId": "string",
"loadDetails": {
"loadPlannedAt": "2019-12-05T12:33:17.009Z",
"loaderId": "string",
"loaderName": "string",
"loadingLocation": "string"
},
"references": {
"customerReference": "string",
"internalReference": "string",
"outboundDeliveryReference": "string",
"outboundDeliveryReferenceItemLine": "string"
},
"compartments": [
"string"
],
"extraTask": "NONE"
}
Response
Planned load
{
"id": "string",
"lastStatusDate": "2019-12-05T12:56:33.027Z",
"isAcceptedByPaper": true,
"status": "PLANNED",
"product": {
"productId": "string",
"sellerId": "string",
"sellerName": "string",
"productType": "CHEMICAL",
"articleNumber": "string",
"articleName": "string",
"unNr": "string"
},
"loadDetails": {
"loadPlannedAt": "2019-12-05T12:56:33.027Z",
"loaderId": "string",
"loaderName": "string",
"loadingLocation": "string",
"transportOrderId": "string"
},
"references": {
"customerReference": "string",
"internalReference": "string",
"outboundDeliveryReference": "string",
"outboundDeliveryReferenceItemLine": "string"
},
"compartments": [
"string"
],
"processStates": [
{
"status": "PLANNED",
"fullName": "string",
"userId": "string",
"timeStamp": "2019-12-05T12:56:33.027Z",
"comment": "string"
}
],
"attachments": [
{
"id": "string",
"originalFilename": "string"
}
],
"ePplId": "string",
"extraTask": "NONE",
"extraTaskError": {
"message": "string",
"messageCode": "string",
"parameters": [
null
],
"messageTemplate": "string"
}
}
Status:
-
PLANNED
-
ACCEPTED
-
COMPLETED
-
REJECTED
-
CANCELLED
-
NONREGISTERED
ProductType
-
CHEMICAL
-
FOOD
-
FEED
-
PHARMA
ProcessStates
-
PLANNED
-
ACCEPTED
-
COMPLETED
-
REJECTED
-
CANCELLED
-
NONREGISTERED
-
MOVED
-
UPDATED
ExtraTask
-
NONE
-
ISSUEPPL
-
ISSUEECO