Settings is where you have detailed controls over the application.
REF:
The following references are allowed to be put in the Settings which specifies how the number generation routine works which generate bookings, various voucher types, and specific document types such as BillOfLading. The following keys are allowed.
All reference number generation can specify the following in the first array element. REF:XXX is not specified, it will generate a shortid
nanoid or shortid
You can also specify a custom token which is described further below.
CUSTOM REF:
The following custom references is allowed:
- transactionType - for vouchers only. the type of transaction, i.e. AP or AR. You can set DEFAULT which will resolve to the appropriate key if nothing is matched.
- creditNote - for vouchers only. If "true" or "false", will resolve the correct value, DEFAULT can also be used.
- bookingType - for vouchers and bookings. If voucher, it will use the first booking as the type.
- shipmentType - for vouchers and bookings. If voucher, it will use the first booking as the type.
- serviceTypes - for vouchers and bookings. If voucher, it will use the first booking as the type.
- YY - Year value of the last two decimal places.
- YYYY - Year value of the entire year.
- MM - Month value in two decimal places.
- XXXX/ZZZZ - Running number based on the number of padded decimal places. i.e. if you put XXX, it will put 001.
REF:BOOKING
The following example is how a booking setting can be used. The first array element in the settings will be the key/template it will follow. For the {{bookingType}}, referenceNumber generator routine will find booking.bookingType. Then it will look up the second array element object, which will do a lookup, i.e. IMPORT type, therefore insert "I" into the {{bookingType}} separator. Same goes for ServiceTypes.
Other flags such as {{YY}} or {{YYYY}}
REF:INVOICE:AP & REF:INVOICE:AR
Voucher AP and AR's are very similar to booking, but takes into account the voucherTypes
REF:CONSOLE_INVOICE
See an example of a consolidated invoice number generator.
REF:QUOTATION
REF:BILL_OF_LADING
REF:INCENTIVE_VOUCHER
This is to set the running number for Incentive Voucher. It is used in a similar fashion where they key should be similar to PCVBB{{YY}}{MM}}{{XXXXX}} . Do not forget to add the second row as {} with type JSON.
requestOfTransport
This is a legacy system where a Request of Transport is generated. This may no longer be supported.
REF:EMPTY_TRIP_ZONE_CONVERTER
This is to overwrite or set the settings for the graph.
For example, user does not want to see "SIN", therefore user can reassigned "SIN" as "S".
Process Flow - (processFlows)
[DEPRECATED] please note processFlows set in baseCompanySettings is deprecated due to it's hard coded nature. It is now set in BookingType and can be dynamically changed in manage > Process Flows.
This is the most important variable in setting. It determines which flow/booking type is allowed to be made. The flow which determines the required documents/processes etc are currently hardcoded and any changes will need to contact the developer. The types allowed are as follows. If the keys are not followed exactly, the system will fail.
- fwdMysExport- For EXPORT Type.
- fwdMysImport - For IMPORT Type.
- transMys - For Transport Type
- fwdMysFinance - For Finance.
- fwdMysTransFinance - For Finance.
The keys allowed are the same as the supported booking types:
- IMPORT - For Import Bookings.
- EXPORT - For Export Bookings.
- TRANSPORT - For Transport Bookings
- FINANCE - this supported type is just a decorator to populate the dashboard. It doesn't have a specific flow associated to it.
Transport Activities - (transportActivities)
This setting specifies which activities (steps) are required for a TRANSPORT Booking. This is required if the processflow setting specifies a transport.
For each activity, the following are required.
- code - the code is just a way to identify the activity. It can be up to the company to determine the code.
- name - name or description of the activity.
- next - array that specifies the next activity based on the code. Users will not be able to update any other activities.
- short - short name to be displayed in the table headings.
Optional values are:
- compile - Compile code for the system to trigger.
- TRANS_BOOKED - this code is required where it will take the date value of when the booking was created.
- TRANS_PLANNED - when the booking has been planned. No current triggers are developed for this.
- TRANS_ENROUTE - Tells the booking that the system is in route. No current triggers are built for this.
- TRANS_STAGED - Tells the booking that the system is in staging. No current triggers are built for this.
- TRANS_ENROUTE - Tells the booking that the system is in route. No current triggers are built for this.
- TRANS_COMPLETED - Tells the booking that the system completed. The system will compute incentives when this is completed.
- shipXTrigger - is a system where it dictates which Booking.Job.Trip.Leg to update. When the legs are updated, it will compute which state the booking is in the transport System.
- {"date": "start","type": "shipper"} - Tells the shipper leg to update the start date.
- {"date": "end","type": "shipper"} - Tells the shipper leg to update the end date.
- {"date": "start","type": "consignee"} - Tells the consignee leg to update the start date.
- {"date": "end","type": "consignee"} - Tells the consignee leg to update the end date.
Compile and shipXTrigger are two different ways the system informs the main API of changes. They are very distinct and works independent of each other.
An example of the transport activity can be found here.
[
{
"code": "C01",
"name": "Created",
"next": [
"P01"
],
"short": "Crt",
"compile": "TRANS_BOOKED"
},
{
"code": "P01",
"name": "Planning",
"next": [
"O01"
],
"short": "Pln",
"compile": "TRANS_PLANNED"
},
{
"code": "O01",
"name": "Shipper In",
"next": [
"O03"
],
"short": "Ship In",
"compile": "TRANS_ENROUTE",
"shipXTrigger": {
"date": "start",
"type": "shipper"
}
},
{
"code": "O03",
"name": "Shipper out",
"next": [
"D01",
"STG01"
],
"short": "Ship Out",
"shipXTrigger": {
"date": "end",
"type": "shipper"
}
},
{
"code": "STG01",
"name": "Stage In",
"next": [
"STG02"
],
"short": "StgIn",
"compile": "TRANS_STAGED"
},
{
"code": "STG02",
"name": "Stage Out",
"next": [
"D01"
],
"short": "StgOut",
"compile": "TRANS_ENROUTE"
},
{
"code": "D01",
"name": "Consignee In",
"next": [
"D02"
],
"short": "Con In",
"shipXTrigger": {
"date": "start",
"type": "consignee"
}
},
{
"code": "D02",
"name": "Consignee Out",
"short": "Con Out",
"compile": "TRANS_COMPLETED",
"shipXTrigger": {
"date": "end",
"type": "consignee"
}
}
]
AreaCode Requirements (areaCodeInputRequirement)
This settings will enforce the areaCode input to the following settings. The value should be put into the first settings element value. For example, this is used when a user is trying to select/enter the Area Code when creating a Transport Rate.
- FREETEXT - users are allowed to enter any value for the areaCode.
- OPTIONAL - users may select values in the AreaCode table, OR any other free text. If they enter free text, it will not be added to the AreaCode Table.
- STRICT - users may ONLY select values that exist in the AreaCode Table.
AreaCode Lookup URL (areaCodeLookupUrl)
This settings will give the users a way to automatically lookup the AreaCode based on the Lat/Lng or PlusCode. When adding a new address, the system will check if the lat/lng field or plusCode field is populated & AreaCode is empty. If this is the case, the system will query the URL specified in this setting and return the plus code.
This URL is a user generated service, i.e. a serverless function. It must be a GET method with the string ${lat}, ${lng} or ${plusCode} inside it. Which the system will replace the lat/lng/plusCode values in the string when querying. If a plusCode is specified, it will take precedence over the lat/lng. The URL must return an object with "code" inside it that matches an TransportAreaCode.code in the manage data.
{
"uri":"https://get-area-code-shermanl-yoozrr1.vercel.app/api?lat=${lat}&lng=${lng}&plusCode=${plusCode}",
"method":"GET"
}
Banking Details - (bankingDetails)
This setting is for specifying the associated banks that would be passed to the invoice. The object below should match the documentCreator template variables (voucher templates).
Booking Departments - (bookingDepartments)
This optional setting is for specifying the departments within your organisation. The bookings can then be categorised based on the departments set here. For example:
{
"departments": [
"TEKV",
"TEOS",
"TESJ",
"EAST",
"NORTH",
"SOUTH"
],
"isRequired": true
}
Note: Only the first setting will work so do not add multiple records in this setting
- departments - list of available department name/code
- isRequired
- true - departments field must be filled on submit/update Booking
- false - no department checking on submit/update Booking
When creating a booking, the departments will be available for selection.
Voucher Approval, delete when revert to draft - (deleteApprovalOnDraft)
This setting will delete all Approvals associated to the Voucher when it is reverted to Draft. Therefore all approvals are required to be done again. Simply set the first variable to true or false. The default setting is false.
One Time Vendor Code - (oneTimeVendorCreditorCode)
When a One Time Vendor Payment Voucher is generated, it will transact to the integrated finance system using this Code. To Set this:
Planner Empty Trip Cancel/validate Reason - (plannerEmptyTripCancelReason / plannerEmptyTripValidateReason)
This setting allows you to customize options for planner Empty Trip cancellation or validation reason.
This will display the following on the Empty Trip:
Transport Rate Code - (transportRateCodes)
This setting specifies which Charge Item Code will be used when the transport rate is computed. You may add multiple keys if you want to add more costItems. This code MUST match an existing code in the chargeItem. It is loosely validated so it needs to be sure. If you specify "rateType": "Rate", the system will query the transportRate table to match. If it does not match, it will put the ChargeItem base rates (sell & cost) into the booking CostItem.
This is only required in TRANSPORT.
Transport rate codes has a special flag that allows to change the charge code based on which department the vehicle was completed in.
One would put byVehicleDepartment that would change the chargeCode if an only if no valid voucherItems have been created with it. In the example below, if a vehicle with "E" department completes the job, it will change the current CostItem to "TPT-ECS", or if "N" department, will convert to "CS-ID (N)" , or "if "S" department will convert to "CS- (S)". Otherwise will default to "ID-CS".
Another option is to put the type byBillingCustomerTags where the keys would match any tags found in the BillingCompany, and use the associated costItem code. The tags will chose in order of companies.tags array.
Order will be byVehicleDepartment then byBillingCustomerTags.
{
"haulageChargeCode": {
"code": "ID-CS",
"rateType": "Rate",
"byVehicleDepartment": {
"E": "TPT-ECS",
"N": "CS-ID (N)",
"S": "CS- (S)",
"default": "ID-CS"
}, "byBillingCustomerTags": { "isInterCompany": "0596-INTER_COMP", "isInterBranch": "0596-INTER_BRANCH" }
}
}
Transport Is Empty Generate Empty Trips - (transportIsGenerateEmptyTrips)
This setting specifies if the system should generate empty trips. Set the value to 1 and leave the type as "empty" if you want to turn ON empty trip Generation.
Reports Filter - (reportsToShow)
This setting will filter and only show relevant reports to the user found in the link: https://shipx.cc/reports.. You would put the key of the report in a comma separated string in the first line such as: containerDeliveryPerformance, documentCreators, voucherDetailsListing. The list of reports can be seen if you remove this setting and you'll see the full list of codes. The codes are camel case version of the name of the report OR can be found in the URL when you click onto the report.

Driver App Settings - (driverAppSettings)
This setting is for entering the contact numbers in the "Contact Us" screen in the mobile app and to enter the list of types of documents. For example:
Conta
Types Of Documents
This is also used to enable features on the app for each base company by adding "enabledFeatures" field. For example:
Currently available features and their keys are:
- Jobs = "JOBS"
- PDC = "PDC"
- Incentive = "INCENTIVE"
- Shifts = "SHIFTS"
- Settings = "SETTINGS"
Features that will be made available in the future:
- Manifest = "MANIFEST"
* Adding unavailable features like "MANIFEST", "TRACKING", etc. to the list of enabled features will not break the app.
Timeline Query Date Type
User can choose to use the shipperRequired or activityDate by set in the settings called timelineQueryDate
This will take effect on the transport/operations page. In specific, the timeline page and the vehicleDriverModal page.
Dashboard Table
User can choose which rows show up by setting transportDashboardTable. This will affect the main Dashboard page from the menu on the top right. Set to -1 if you want to hide the column. Available columns to toggle would be:
- mtdDel
- totalDel
- teu
- mtdCost
- totalCost
- mtdSell
- totalSell
- mtdRevenue
- totalRevenue
Whatsapp Message Generation (transportTrackingUpdateTemplate)
This setting transportTrackingUpdateTemplate allows you to create a template when you click the phone icon on the top right of the Vehicle Driver Map Modal. A recommended template could be:
`${shipperName} to ${consigneeName} ${containerNumber} ${vehicleReg} - ${trailerCode} ${driverPhone} ${driverName} ${status}`
Search Results Settings Page - (overviewPageSettings)
This settings is a JSON that allows you too customize the search results page.
It is a JSON for each column. The following fields are as follows:
- key - key for the table which needs to be unique for each column.
- title - what to display on the column header.
- dataIndex - the field from the Elastic Booking search results. You can use the . operator to have sub fields, and [0] for array items.
- width - Width to display the column in string with px, eg "30px".
- fnc - Special helper functions to handle special cases. Can only support: shortLink, shortCntr, etaEtd, date, bookingStatus, stringArray.
- convert - special rename function if the key matches the result from dataIndex, it will rename the column.
Example:
[ { "fnc": "shortLink", "key": "no", "title": "No.", "width": "120px" }, { "key": "billTo", "title": "Bill To", "dataIndex": "billTo.name" }, { "key": "shipperName", "title": "Shipper", "dataIndex": "shipper.name" }, { "key": "consigneeName", "title": "Consignee", "dataIndex": "consignee.name" }, { "fnc": "shortCntr", "key": "shortCntr", "title": "ShortCntr", "width": "140px", "dataIndex": "shortCntr" }, { "fnc": "etaEtd", "key": "etaEtd", "title": "ESTPick/ESTDrop", "width": "160px" }, { "fnc": "date", "key": "createdAt", "title": "Created", "width": "90px", "dataIndex": "createdAt" }, { "key": "Transport", "title": "TransportStatus", "width": "30px", "convert": { "transHlgStart": "Received", "transHlgComplete": "Complete", "transHlgTransDelPlan": "Planned", "transHlgTransDelStart": "Started", "transHlgPendTransPodSubmitted": "POD Req.", "transHlgPendTransDeliveryComplete": "Delivered" }, "dataIndex": "state[0].value" }, { "key": "Invoice", "title": "InvoiceStatus", "width": "60px", "convert": { "transCompArComplete": "Complete", "transCompPendStartAr": "Received", "transCompPendDeliveryComplete": "Delivered", "transCompPendCustomerVoucherOprAaApproval": "Invoiced", "transCompPendOutstandingConsigneeInvoiceVoucher": "Pending Approval" }, "dataIndex": "state[1].value" }, { "fnc": "bookingStatus", "key": "status", "title": "Status", "width": "50px", "dataIndex": "status" } ]