Introduction
The Flow Contribution Calculation on the Stock Projection represents the number at current time, of expected containers to depart from origin and arrive at destination. In simple terms, if a future OTT of 100 x 40HIGH containers are planned from BEANT01 on 1/1/22 to DEBRVTM 2/1/22, then we will expect 100 units will be loaded/gate-out and 100 units will be discharged/gate-in the day later. While this is the most common calculation, there are several important refinements to be applied, in order to have a meaningful flow contribution. These refinement are explained on this page.
Flow Considerations
Projection Cut-Off
When OTTs are executed, the load/discharge moves will be reconciled to the OTT (see Reconciliation) in the same pace as the moves are inserted in RKEM. Sometimes if will take a while before operations are complete and all moves are completely inserted into RKEM and received in ROCK. During the period where load operations are happening ROCK must still assume the planned number on the OTT will reach the destination, and (Planned - Loaded) containers will still be loaded from the origin. To simplify these calculations, ROCK uses an Origin LoadCutOff and a Destination DischargeCutOff timestamp for each OTT. The rules to identify these discharge cut-offs are described below.
The following checks are also included in the rules to determine the CutOffs.
Check | Description |
|---|---|
RKEM Latency | By default, ROCK uses a 24 hour cutoff rule vessel based OTTs. However, for terminals where moves are updated quickly in RKEM, a better cutoff can be assumed (see Calculating RKEM Latency). Furthermore, once a week ROCK marks the sites which are using RKEM reconcilation workaround (read more in Reconciliation regarding booking workaround). Both inputs helps to refine the cut-off. |
Reconciliation Enabled | If site is using booking workaround we have more confidence in the origin and destination. Thus we can use a cut-off which is closer to the timestamp of the load/discharge operations. |
Origin and Destination CutOff Formulas
CASE | OTT Type | Mode | RE* | Origin CutOff Formula** | Destination CutOff Formula | Comment |
|---|---|---|---|---|---|---|
1 | Marine | * | * | OriginDeparture + ISNULL(RKEMLatency, 24) | DestDeparture+168 | (Load) If the we the RKEM latency has been calculated for a terminal, that number will be used over the default load cutoff of 24. |
2 | Intermodal | Vessel | * | FromDate+24 | ToDate+24 | On terminals we are more confident in the destination, thus we load and discharge operations to be updated in RKEM within 24 hours |
3 | Intermodal | <>Vessel | No | FromDate+120 | ToDate+72 | If site is not using the booking workaround we will assume loaded containers to finally reach destination within 72 hours (3 days), and use a large cut-off of 120 hours (5 days) as many OTTs are used are used to track volume for a full week. |
4 | Intermodal | <>Vessel | Yes | FromDate+24 | ToDate+24 | If site is using booking workaround we have more confidence in the origin and destination. Thus we expect operations to be updated in RKEM within 24 hours |
5 | Dummy | * | * | 0 | 0 | If OTT is dummy (infleeting/outfleeting/oneways) we are not able to reconcile load/discharge moves. Thus we will stop expecting containers at the moment load operations complete. |
* Reconciliation Enabled | ||||||
** The Origin CutOff Timestamp is capped to never be greater than the Destination CutOff Timestamp | ||||||
Origin and Destination CutOff Examples
Column | Case 1 | Case 2 | Case 3 | Case 4 | Case 5 |
|---|---|---|---|---|---|
OTTnumber | R20089288 | R20083020 | R20006921 | R20089360 | R19248266 |
PlaceFrom | SAJEDRGT | DEWVNTM | CNLUZCT | DEBRVTM | XXLEASE |
PlaceTo | DEWVNTM | RUPLPTM | CNNNTSIN | DEBRV03 | CNIWNGH |
OriginTimeZone | 6 | 2 | 16 | 2 | 16 |
DestinationTimeZone | 2 | 6 | 16 | 2 | 16 |
FromDate | 11-02-20 00:36 | 19-02-20 12:00 | 07-02-20 00:00 | 17-02-20 12:00 | 02-06-19 12:00 |
FromDateUTC | 11-02-20 03:36 | 19-02-20 13:00 | 07-02-20 08:00 | 17-02-20 13:00 | 31-05-19 11:00 |
ToDate | 29-02-20 04:00 | 29-02-20 14:00 | 29-02-20 00:00 | 21-02-20 12:00 | 03-06-19 00:00 |
ToDateUTC | 29-02-20 05:00 | 29-02-20 17:00 | 29-02-20 08:00 | 21-02-20 13:00 | 03-06-19 08:00 |
IsDummyOtt | 0 | 0 | 0 | 0 | 1 |
IsMarineOtt | 1 | 0 | 0 | 0 | 0 |
IsOriginUsingBookingCode | 0 | 1 | 0 | 1 | 0 |
Transport | MVS | VESSEL | INLAND | INLAND | BARGE |
OriginLatency | 1 | 24 | 120 | 24 | 0 |
DestLatency | 168 | 24 | 72 | 24 | 0 |
LoadCutOffTimestampUTC | 11-02-20 04:36 | 20-02-20 13:00 | 12-02-20 08:00 | 18-02-20 13:00 | 31-05-19 11:00 |
DischargeCutOffTimestampUTC | 07-03-20 05:00 | 01-03-20 17:00 | 03-03-20 08:00 | 22-02-20 13:00 | 03-06-19 08:00 |
CurrentTimeUTC | 21-02-20 08:19 | 21-02-20 08:19 | 21-02-20 08:19 | 21-02-20 08:19 | 21-02-20 08:19 |
IsLoadCutOffPassed | 1 | 1 | 1 | 1 | 1 |
IsDischargeCutOffPassed | 0 | 0 | 0 | 0 | 1 |
Unplanned Subtype Volume
In many cases, the equipment planner wants to move containers of a certain group (e.g. 40REEF* or 40HIGH*). In these cases, loading any of the subtypes under the group is an acceptable substitute. To prevent "over" projecting flows, the flow contribution logic will identify the unplanned subtypes that have been loaded and subtract it from the maintype of the equipment group (i.e. 40HIGH is maintype of 40HIGH* group).
In the example below, the plan is to move 250x40HCRF* regardless of which subtype, where 228 units of the maintype is loaded (40HCRF), with an additional 16 unplanned 40MGRF are also loaded. The USV associated to 40HCRF* is set to 16 using logic described in the business rules. Consequently as load operations are ongoing we can subtract the USV from the maintype (40HCRF) when projecting how many additional 40HCRF are expected to be loaded: COALESCE(A,S,) - L - USV = 250 - 228 - 16 = 6.
Equipment | S | A | L | USV |
|---|---|---|---|---|
40HCRF* | 250 | 250 | 244 |
|
40HCRF | 250 | 250 | 228 | 16 |
40MGRF | 16 |
Flow Contribution Formulas
Flow Contribution is calculated as two numbers: OriginEvacProjection which is the projection of units yet to be evacuated from the origin, and DestSupplyProjection which is the projection of units yet to be supplied to the destination. The code is straightforward is run for each equipment type on each OTT using the below code in SQL, which is fairly self-explanatory.
The formulas are simplified to allow negative numbers. As a last step, each projection will be capped to 0 to prevent negative projections (we shouldn't expect negative numbers to be loaded or discharged).
Origin Evacution Formulas
[OriginEvacProjection] =
CASE
WHEN OTTStatus = 'C' OR IsGSISmatched=0 THEN 0 -- Cancelled and mismatched OTTs will project 0 units
WHEN OTTStatus IN ('S', 'A') AND OriginOmit=1 THEN 0 -- Planned OTTs with Origin OMIT will project 0 units
WHEN OTTStatus IN ('L', 'D') AND DestinationOmit=1 THEN 0 -- OTTs in progress with Dest OMIT will project 0
WHEN IsLoadCutOffPassed = 0 THEN
CASE
WHEN COALESCE([A],[S],0) < ISNULL([L],0) THEN 0 -- Planned-L
ELSE COALESCE([A],[S],0) - ISNULL([L],0) - ISNULL([USV],0) -- Planned-L-USV
END
ELSE 0 -- after cut-off, we expect 0 more to be loaded
END
Destination Supply Formulas
[DestSupplyProjection] =
CASE
WHEN OTTStatus = 'C' OR IsGSISmatched=0 THEN 0
WHEN OTTStatus IN ('S', 'A') AND OriginOmit=1 THEN 0
WHEN OTTStatus IN ('L', 'D') AND DestinationOmit=1 THEN 0
WHEN IsLoadCutOffPassed = 0 THEN
CASE
WHEN COALESCE([A],[S],0) < ISNULL([L],0) THEN
COALESCE([L],0) - ISNULL([D],0) - ISNULL([USV],0) -- loaded more than planned L-D-USV
ELSE COALESCE([A],[S],0) - ISNULL([D],0) - ISNULL([USV],0) -- loaded less than planned (Planned-D-USV)
END
WHEN IsDischargeCutOffPassed = 0 THEN
ISNULL([L],0) - ISNULL([D],0) - ISNULL([USV],0)
ELSE 0
END