vortexasdk.endpoints.cargo_movements

Cargo Movements Endpoint.

CargoMovements

CargoMovements(self)

Cargo Movements Endpoint, use this to search through Vortexa's cargo movements.

A detailed explanation of Cargo/Vessel Movements can be found here.

search

CargoMovements.search(self, filter_activity: str, filter_time_min: datetime.datetime = datetime.datetime(2019, 10, 1, 0, 0), filter_time_max: datetime.datetime = datetime.datetime(2019, 10, 1, 1, 0), cm_unit: str = 'b', filter_charterers: Union[str, List[str]] = None, filter_destinations: Union[str, List[str]] = None, filter_origins: Union[str, List[str]] = None, filter_owners: Union[str, List[str]] = None, filter_products: Union[str, List[str]] = None, filter_vessels: Union[str, List[str]] = None, filter_storage_locations: Union[str, List[str]] = None, filter_ship_to_ship_locations: Union[str, List[str]] = None, filter_waypoints: Union[str, List[str]] = None, filter_vessel_age_min: int = None, filter_vessel_age_max: int = None, filter_vessel_scrubbers: str = 'disabled', filter_vessel_flags: Union[str, List[str]] = None, filter_vessel_ice_class: Union[str, List[str]] = None, filter_vessel_propulsion: Union[str, List[str]] = None, exclude_origins: Union[str, List[str]] = None, exclude_destinations: Union[str, List[str]] = None, exclude_products: Union[str, List[str]] = None, exclude_vessels: Union[str, List[str]] = None, exclude_charterers: Union[str, List[str]] = None, exclude_owners: Union[str, List[str]] = None, exclude_vessel_flags: Union[str, List[str]] = None, exclude_vessel_ice_class: Union[str, List[str]] = None, exclude_vessel_propulsion: Union[str, List[str]] = None, disable_geographic_exclusion_rules: bool = None, timeseries_activity_time_span_min: int = None, timeseries_activity_time_span_max: int = None) -> vortexasdk.endpoints.cargo_movements_result.CargoMovementsResult

Find CargoMovements matching the given search parameters.

Arguments

  • filter_activity: Movement activity on which to base the time filter. Must be one of ['loading_state', 'loading_start', 'loading_end', 'identified_for_loading_state', 'unloading_state', 'unloading_start', 'unloading_end', 'unloaded_state', 'storing_state', 'storing_start', 'storing_end', 'transiting_state', 'any_activity'].

  • filter_time_min: The UTC start date of the time filter.

  • filter_time_max: The UTC end date of the time filter.

  • cm_unit: Unit of measurement. Enter 'b' for barrels or 't' for tonnes.

  • filter_charterers: A charterer ID, or list of charterer IDs to filter on.

  • filter_destinations: A geography ID, or list of geography IDs to filter on.

  • filter_origins: A geography ID, or list of geography IDs to filter on.

  • filter_owners: An owner ID, or list of owner IDs to filter on.

  • filter_products: A product ID, or list of product IDs to filter on.

  • filter_vessels: A vessel ID, or list of vessel IDs to filter on.

  • filter_storage_locations: A geography ID, or list of geography IDs to filter on.

  • filter_ship_to_ship_locations: A geography ID, or list of geography IDs to filter on.

  • filter_waypoints: A geography ID, or list of geography IDs to filter on.

  • filter_vessel_age_min: A number between 1 and 100 (representing years).

  • filter_vessel_age_max: A number between 1 and 100 (representing years).

  • filter_vessel_scrubbers: Either inactive 'disabled', or included 'inc' or excluded 'exc'.

  • filter_vessel_flags: A geography ID, or list of geography IDs to filter on.

  • filter_vessel_ice_class: An attribute ID, or list of attribute IDs to filter on.

  • filter_vessel_propulsion: An attribute ID, or list of attribute IDs to filter on.

  • exclude_origins: A geography ID, or list of geography IDs to exclude.

  • exclude_destinations: A geography ID, or list of geography IDs to exclude.

  • exclude_products: A product ID, or list of product IDs to exclude.

  • exclude_vessels: A vessel ID, or list of vessel IDs to exclude.

  • exclude_charterers: A charterer ID, or list of charterer IDs to exclude.

  • exclude_owners: An owner ID, or list of owner IDs to exclude.

  • exclude_vessel_flags: A geography ID, or list of geography IDs to exclude.

  • exclude_vessel_ice_class: An attribute ID, or list of attribute IDs to exclude.

  • exclude_vessel_propulsion: An attribute ID, or list of attribute IDs to exclude.

  • disable_geographic_exclusion_rules: This controls a popular industry term "intra-movements" and determines the filter behaviour for cargo leaving then entering the same geographic area.

  • timeseries_activity_time_span_min: The minimum amount of time in milliseconds accounted for in a time series activity. Can be used to request long-term floating storage. For example, to only return floating storage movements that occured for more than 14 days enter timeseries_activity_time_span_min=1000 * 60 * 60 * 24 * 14 in conjunction with filter_activity='storing_state'.

  • timeseries_activity_time_span_max: The maximum amount of time in milliseconds accounted for in a time series activity. Can be used to request short-term floating storage. For example, to only return floating storage movements that occured for less than 14 days enter timeseries_activity_time_span_max=1000 * 60 * 60 * 24 * 14 in conjunction with filter_activity='storing_state'.

Returns

CargoMovementsResult, containing all the cargo movements matching the given search terms.

Example

  • Which cargoes were loaded from Rotterdam on the morning of 1st December 2018?
>>> from vortexasdk import CargoMovements, Geographies
>>> rotterdam = [g.id for g in Geographies().search("rotterdam").to_list() if "port" in g.layer]
>>> search_result = CargoMovements().search(
...    filter_origins=rotterdam,
...    filter_activity='loading_state',
...    filter_time_min=datetime(2018, 12, 1),
...    filter_time_max=datetime(2018, 12, 1, 12))
>>> df = search_result.to_df(columns=['product.grade.label', 'product.group.label', 'vessels.0.vessel_class'])

product.group.label product.grade.label vessels.0.vessel_class
0 Clean products Pygas general_purpose
1 Clean products Chemicals tiny_tanker
2 Clean products Chemicals tiny_tanker
3 Dirty products Low Sulphur VGO (LSVGO) general_purpose
4 Clean products ULSD (Ultra Low Sulphur Diesel) general_purpose
5 Clean products Chemicals tiny_tanker
6 Clean products Finished Gasoline handymax
  • Which VLCC cargoes passed through the Suez canal en route to China?

Note here we include vessels.0..., vessels.1..., vessels.2... columns. This lets us view all vessels present in any STS operations.

>>> from vortexasdk import CargoMovements, Geographies, Vessels
>>> suez = [g.id for g in Geographies().search("suez").to_list()]
>>> china = [g.id for g in Geographies().search("china").to_list() if "country" in g.layer]
>>> vlccs = [v.id for v in Vessels().search(vessel_classes="vlcc_plus").to_list()]
>>> cargo_movement_search_result = CargoMovements().search(
...    filter_destinations=china,
...    filter_activity="loading_state",
...    filter_waypoints=suez,
...    filter_vessels=vlccs,
...    filter_time_min=datetime(2018, 12, 1),
...    filter_time_max=datetime(2018, 12, 1))
>>> cols = ['vessels.0.name', 'vessels.0.vessel_class', 'vessels.1.name', 'vessels.1.vessel_class',  'vessels.2.name', 'vessels.2.vessel_class', 'product.group.label', 'quantity']
>>> cargo_movements_df = cargo_movement_search_result.to_df(columns=cols)

vessels.0.name vessels.0.vessel_class vessels.1.name vessels.1.vessel_class vessels.2.name vessels.2.vessel_class product.group.label quantity
0 MINERVA MARINA suezmax COSGLORY LAKE vlcc_plus nan nan Crude 700614
1 BUKHA vlcc_plus nan nan nan nan Crude 1896374
2 ATHENIAN FREEDOM vlcc_plus nan nan nan nan Crude 183537
3 ATINA suezmax DONAT suezmax DS VISION vlcc_plus Crude 896773
4 MINERVA MARINA suezmax COSGLORY LAKE vlcc_plus nan nan Crude 405724
5 MASAL suezmax EKTA vlcc_plus nan nan Crude 997896
6 ATHENIAN FREEDOM vlcc_plus nan nan nan nan Crude 120812

Cargo Movements Endpoint Further Documentation

vortexasdk.endpoints.cargo_movements_result

CargoMovementsResult

CargoMovementsResult(self, _records: List) -> None

Container class holdings search results returns from the cargo movements endpoint.

This class has two methods, to_list(), and to_df(), allowing search results to be represented as a list of CargoMovements, or as a pd.DataFrame , respectively.

to_list

CargoMovementsResult.to_list(self) -> List[vortexasdk.api.cargo_movement.CargoMovement]

Represent cargo movements as a list of CargoMovementEntitys.

to_df

CargoMovementsResult.to_df(self, columns=None) -> pandas.core.frame.DataFrame

Represent cargo movements as a pd.DataFrame.

Arguments

  • columns: Output columns present in the pd.DataFrame. Enter columns='all' to return all available columns. Enter columns=None to use cargo_movements.DEFAULT_COLUMNS.

Returns

pd.DataFrame, one row per cargo movement.

Notes

A cargo movement is a complicated, nested structure. Between it's point of loading and discharge, a cargo movement may be carried by N or more vessels, with N-1 associated STS events. Each of these N vessels could have an associated corporate owner, charterer, time charterer... etc.

In order to represent a cargo movement as a flat (not nested) record in a dataframe, the sdk flattens the cargo movement, generating many columns in the process.

The columns are logically named. Let's say that a cargo is transferred between 4 vessels en route from a load in Rotterdam to a discharge in New York. This is represented as 1 cargo_port_unload_event, followed by 3 cargo_sts_events, and finally 1 cargo_port_unload_event.

In this example the name of the 1st vessel, is found in the vessels.0.name column (we're using zero-based numbering indexes). Likewise, the imo of the second vessel is found in the vessels.1.imo column.

To find the name of the country in which the second STS event occured, we'd use the events.cargo_sts_event.1.location.country.layer column.

Similarly, to find out when the first vessel started loading the cargo from Rotterdam, we'd use the events.cargo_port_load_event.0.start_timestamp column.

By default, the columns returned are something along the lines of.

DEFAULT_COLUMNS = [
    'events.cargo_port_load_event.0.location.port.label',
    'events.cargo_port_unload_event.0.location.port.label',
    'product.group.label',
    'product.grade.label',
    'quantity',
    'vessels.0.name',
    'events.cargo_port_load_event.0.end_timestamp',
    'events.cargo_port_unload_event.0.start_timestamp',
]

The exact default columns used can be found at cargo_movements.DEFAULT_COLUMNS

A near complete list of columns is given below

[
    'cargo_movement_id',
    'events.cargo_fso_load_event.0.end_timestamp',
    'events.cargo_fso_load_event.0.event_type',
    'events.cargo_fso_load_event.0.fso_vessel_id',
    'events.cargo_fso_load_event.0.fso_vessel_name',
    'events.cargo_fso_load_event.0.location.country.id',
    'events.cargo_fso_load_event.0.location.country.label',
    'events.cargo_fso_load_event.0.location.country.layer',
    'events.cargo_fso_load_event.0.location.country.probability',
    'events.cargo_fso_load_event.0.location.country.source',
    'events.cargo_fso_load_event.0.location.region.id',
    'events.cargo_fso_load_event.0.location.region.label',
    'events.cargo_fso_load_event.0.location.region.layer',
    'events.cargo_fso_load_event.0.location.region.probability',
    'events.cargo_fso_load_event.0.location.region.source',
    'events.cargo_fso_load_event.0.location.shipping_region.id',
    'events.cargo_fso_load_event.0.location.shipping_region.label',
    'events.cargo_fso_load_event.0.location.shipping_region.layer',
    'events.cargo_fso_load_event.0.location.shipping_region.probability',
    'events.cargo_fso_load_event.0.location.shipping_region.source',
    'events.cargo_fso_load_event.0.location.sts_zone.id',
    'events.cargo_fso_load_event.0.location.sts_zone.label',
    'events.cargo_fso_load_event.0.location.sts_zone.layer',
    'events.cargo_fso_load_event.0.location.sts_zone.probability',
    'events.cargo_fso_load_event.0.location.sts_zone.source',
    'events.cargo_fso_load_event.0.location.trading_block.id',
    'events.cargo_fso_load_event.0.location.trading_block.label',
    'events.cargo_fso_load_event.0.location.trading_block.layer',
    'events.cargo_fso_load_event.0.location.trading_block.probability',
    'events.cargo_fso_load_event.0.location.trading_block.source',
    'events.cargo_fso_load_event.0.location.trading_region.id',
    'events.cargo_fso_load_event.0.location.trading_region.label',
    'events.cargo_fso_load_event.0.location.trading_region.layer',
    'events.cargo_fso_load_event.0.location.trading_region.probability',
    'events.cargo_fso_load_event.0.location.trading_region.source',
    'events.cargo_fso_load_event.0.location.trading_subregion.id',
    'events.cargo_fso_load_event.0.location.trading_subregion.label',
    'events.cargo_fso_load_event.0.location.trading_subregion.layer',
    'events.cargo_fso_load_event.0.location.trading_subregion.probability',
    'events.cargo_fso_load_event.0.location.trading_subregion.source',
    'events.cargo_fso_load_event.0.pos.0',
    'events.cargo_fso_load_event.0.pos.1',
    'events.cargo_fso_load_event.0.probability',
    'events.cargo_fso_load_event.0.start_timestamp',
    'events.cargo_fso_load_event.0.to_vessel_id',
    'events.cargo_fso_load_event.0.to_vessel_name',
    'events.cargo_fso_unload_event.0.end_timestamp',
    'events.cargo_fso_unload_event.0.event_type',
    'events.cargo_fso_unload_event.0.from_vessel_id',
    'events.cargo_fso_unload_event.0.from_vessel_name',
    'events.cargo_fso_unload_event.0.fso_vessel_id',
    'events.cargo_fso_unload_event.0.fso_vessel_name',
    'events.cargo_fso_unload_event.0.location.country.id',
    'events.cargo_fso_unload_event.0.location.country.label',
    'events.cargo_fso_unload_event.0.location.country.layer',
    'events.cargo_fso_unload_event.0.location.country.probability',
    'events.cargo_fso_unload_event.0.location.country.source',
    'events.cargo_fso_unload_event.0.location.region.id',
    'events.cargo_fso_unload_event.0.location.region.label',
    'events.cargo_fso_unload_event.0.location.region.layer',
    'events.cargo_fso_unload_event.0.location.region.probability',
    'events.cargo_fso_unload_event.0.location.region.source',
    'events.cargo_fso_unload_event.0.location.shipping_region.id',
    'events.cargo_fso_unload_event.0.location.shipping_region.label',
    'events.cargo_fso_unload_event.0.location.shipping_region.layer',
    'events.cargo_fso_unload_event.0.location.shipping_region.probability',
    'events.cargo_fso_unload_event.0.location.shipping_region.source',
    'events.cargo_fso_unload_event.0.location.sts_zone.id',
    'events.cargo_fso_unload_event.0.location.sts_zone.label',
    'events.cargo_fso_unload_event.0.location.sts_zone.layer',
    'events.cargo_fso_unload_event.0.location.sts_zone.probability',
    'events.cargo_fso_unload_event.0.location.sts_zone.source',
    'events.cargo_fso_unload_event.0.location.trading_block.id',
    'events.cargo_fso_unload_event.0.location.trading_block.label',
    'events.cargo_fso_unload_event.0.location.trading_block.layer',
    'events.cargo_fso_unload_event.0.location.trading_block.probability',
    'events.cargo_fso_unload_event.0.location.trading_block.source',
    'events.cargo_fso_unload_event.0.location.trading_region.id',
    'events.cargo_fso_unload_event.0.location.trading_region.label',
    'events.cargo_fso_unload_event.0.location.trading_region.layer',
    'events.cargo_fso_unload_event.0.location.trading_region.probability',
    'events.cargo_fso_unload_event.0.location.trading_region.source',
    'events.cargo_fso_unload_event.0.location.trading_subregion.id',
    'events.cargo_fso_unload_event.0.location.trading_subregion.label',
    'events.cargo_fso_unload_event.0.location.trading_subregion.layer',
    'events.cargo_fso_unload_event.0.location.trading_subregion.probability',
    'events.cargo_fso_unload_event.0.location.trading_subregion.source',
    'events.cargo_fso_unload_event.0.pos.0',
    'events.cargo_fso_unload_event.0.pos.1',
    'events.cargo_fso_unload_event.0.probability',
    'events.cargo_fso_unload_event.0.start_timestamp',
    'events.cargo_port_load_event.0.end_timestamp',
    'events.cargo_port_load_event.0.event_type',
    'events.cargo_port_load_event.0.location.country.id',
    'events.cargo_port_load_event.0.location.country.label',
    'events.cargo_port_load_event.0.location.country.layer',
    'events.cargo_port_load_event.0.location.country.probability',
    'events.cargo_port_load_event.0.location.country.source',
    'events.cargo_port_load_event.0.location.port.id',
    'events.cargo_port_load_event.0.location.port.label',
    'events.cargo_port_load_event.0.location.port.layer',
    'events.cargo_port_load_event.0.location.port.probability',
    'events.cargo_port_load_event.0.location.port.source',
    'events.cargo_port_load_event.0.location.region.id',
    'events.cargo_port_load_event.0.location.region.label',
    'events.cargo_port_load_event.0.location.region.layer',
    'events.cargo_port_load_event.0.location.region.probability',
    'events.cargo_port_load_event.0.location.region.source',
    'events.cargo_port_load_event.0.location.shipping_region.id',
    'events.cargo_port_load_event.0.location.shipping_region.label',
    'events.cargo_port_load_event.0.location.shipping_region.layer',
    'events.cargo_port_load_event.0.location.shipping_region.probability',
    'events.cargo_port_load_event.0.location.shipping_region.source',
    'events.cargo_port_load_event.0.location.terminal.id',
    'events.cargo_port_load_event.0.location.terminal.label',
    'events.cargo_port_load_event.0.location.terminal.layer',
    'events.cargo_port_load_event.0.location.terminal.probability',
    'events.cargo_port_load_event.0.location.terminal.source',
    'events.cargo_port_load_event.0.location.trading_block.id',
    'events.cargo_port_load_event.0.location.trading_block.label',
    'events.cargo_port_load_event.0.location.trading_block.layer',
    'events.cargo_port_load_event.0.location.trading_block.probability',
    'events.cargo_port_load_event.0.location.trading_block.source',
    'events.cargo_port_load_event.0.location.trading_region.id',
    'events.cargo_port_load_event.0.location.trading_region.label',
    'events.cargo_port_load_event.0.location.trading_region.layer',
    'events.cargo_port_load_event.0.location.trading_region.probability',
    'events.cargo_port_load_event.0.location.trading_region.source',
    'events.cargo_port_load_event.0.location.trading_subregion.id',
    'events.cargo_port_load_event.0.location.trading_subregion.label',
    'events.cargo_port_load_event.0.location.trading_subregion.layer',
    'events.cargo_port_load_event.0.location.trading_subregion.probability',
    'events.cargo_port_load_event.0.location.trading_subregion.source',
    'events.cargo_port_load_event.0.pos.0',
    'events.cargo_port_load_event.0.pos.1',
    'events.cargo_port_load_event.0.probability',
    'events.cargo_port_load_event.0.start_timestamp',
    'events.cargo_port_unload_event.0.end_timestamp',
    'events.cargo_port_unload_event.0.event_type',
    'events.cargo_port_unload_event.0.location.country.id',
    'events.cargo_port_unload_event.0.location.country.label',
    'events.cargo_port_unload_event.0.location.country.layer',
    'events.cargo_port_unload_event.0.location.country.probability',
    'events.cargo_port_unload_event.0.location.country.source',
    'events.cargo_port_unload_event.0.location.port.id',
    'events.cargo_port_unload_event.0.location.port.label',
    'events.cargo_port_unload_event.0.location.port.layer',
    'events.cargo_port_unload_event.0.location.port.probability',
    'events.cargo_port_unload_event.0.location.port.source',
    'events.cargo_port_unload_event.0.location.region.id',
    'events.cargo_port_unload_event.0.location.region.label',
    'events.cargo_port_unload_event.0.location.region.layer',
    'events.cargo_port_unload_event.0.location.region.probability',
    'events.cargo_port_unload_event.0.location.region.source',
    'events.cargo_port_unload_event.0.location.shipping_region.id',
    'events.cargo_port_unload_event.0.location.shipping_region.label',
    'events.cargo_port_unload_event.0.location.shipping_region.layer',
    'events.cargo_port_unload_event.0.location.shipping_region.probability',
    'events.cargo_port_unload_event.0.location.shipping_region.source',
    'events.cargo_port_unload_event.0.location.sts_zone.id',
    'events.cargo_port_unload_event.0.location.sts_zone.label',
    'events.cargo_port_unload_event.0.location.sts_zone.layer',
    'events.cargo_port_unload_event.0.location.sts_zone.probability',
    'events.cargo_port_unload_event.0.location.sts_zone.source',
    'events.cargo_port_unload_event.0.location.terminal.id',
    'events.cargo_port_unload_event.0.location.terminal.label',
    'events.cargo_port_unload_event.0.location.terminal.layer',
    'events.cargo_port_unload_event.0.location.terminal.probability',
    'events.cargo_port_unload_event.0.location.terminal.source',
    'events.cargo_port_unload_event.0.location.trading_block.id',
    'events.cargo_port_unload_event.0.location.trading_block.label',
    'events.cargo_port_unload_event.0.location.trading_block.layer',
    'events.cargo_port_unload_event.0.location.trading_block.probability',
    'events.cargo_port_unload_event.0.location.trading_block.source',
    'events.cargo_port_unload_event.0.location.trading_region.id',
    'events.cargo_port_unload_event.0.location.trading_region.label',
    'events.cargo_port_unload_event.0.location.trading_region.layer',
    'events.cargo_port_unload_event.0.location.trading_region.probability',
    'events.cargo_port_unload_event.0.location.trading_region.source',
    'events.cargo_port_unload_event.0.location.trading_subregion.id',
    'events.cargo_port_unload_event.0.location.trading_subregion.label',
    'events.cargo_port_unload_event.0.location.trading_subregion.layer',
    'events.cargo_port_unload_event.0.location.trading_subregion.probability',
    'events.cargo_port_unload_event.0.location.trading_subregion.source',
    'events.cargo_port_unload_event.0.pos.0',
    'events.cargo_port_unload_event.0.pos.1',
    'events.cargo_port_unload_event.0.probability',
    'events.cargo_port_unload_event.0.start_timestamp',
    'events.cargo_storage_event.0.end_timestamp',
    'events.cargo_storage_event.0.event_type',
    'events.cargo_storage_event.0.location.country.id',
    'events.cargo_storage_event.0.location.country.label',
    'events.cargo_storage_event.0.location.country.layer',
    'events.cargo_storage_event.0.location.country.probability',
    'events.cargo_storage_event.0.location.country.source',
    'events.cargo_storage_event.0.location.region.id',
    'events.cargo_storage_event.0.location.region.label',
    'events.cargo_storage_event.0.location.region.layer',
    'events.cargo_storage_event.0.location.region.probability',
    'events.cargo_storage_event.0.location.region.source',
    'events.cargo_storage_event.0.location.shipping_region.id',
    'events.cargo_storage_event.0.location.shipping_region.label',
    'events.cargo_storage_event.0.location.shipping_region.layer',
    'events.cargo_storage_event.0.location.shipping_region.probability',
    'events.cargo_storage_event.0.location.shipping_region.source',
    'events.cargo_storage_event.0.location.trading_block.id',
    'events.cargo_storage_event.0.location.trading_block.label',
    'events.cargo_storage_event.0.location.trading_block.layer',
    'events.cargo_storage_event.0.location.trading_block.probability',
    'events.cargo_storage_event.0.location.trading_block.source',
    'events.cargo_storage_event.0.location.trading_region.id',
    'events.cargo_storage_event.0.location.trading_region.label',
    'events.cargo_storage_event.0.location.trading_region.layer',
    'events.cargo_storage_event.0.location.trading_region.probability',
    'events.cargo_storage_event.0.location.trading_region.source',
    'events.cargo_storage_event.0.location.trading_subregion.id',
    'events.cargo_storage_event.0.location.trading_subregion.label',
    'events.cargo_storage_event.0.location.trading_subregion.layer',
    'events.cargo_storage_event.0.location.trading_subregion.probability',
    'events.cargo_storage_event.0.location.trading_subregion.source',
    'events.cargo_storage_event.0.pos.0',
    'events.cargo_storage_event.0.pos.1',
    'events.cargo_storage_event.0.start_timestamp',
    'events.cargo_storage_event.0.vessel_id',
    'events.cargo_sts_event.0.end_timestamp',
    'events.cargo_sts_event.0.event_type',
    'events.cargo_sts_event.0.from_vessel_id',
    'events.cargo_sts_event.0.from_vessel_name',
    'events.cargo_sts_event.0.location.country.id',
    'events.cargo_sts_event.0.location.country.label',
    'events.cargo_sts_event.0.location.country.layer',
    'events.cargo_sts_event.0.location.country.probability',
    'events.cargo_sts_event.0.location.country.source',
    'events.cargo_sts_event.0.location.port.id',
    'events.cargo_sts_event.0.location.port.label',
    'events.cargo_sts_event.0.location.port.layer',
    'events.cargo_sts_event.0.location.port.probability',
    'events.cargo_sts_event.0.location.port.source',
    'events.cargo_sts_event.0.location.region.id',
    'events.cargo_sts_event.0.location.region.label',
    'events.cargo_sts_event.0.location.region.layer',
    'events.cargo_sts_event.0.location.region.probability',
    'events.cargo_sts_event.0.location.region.source',
    'events.cargo_sts_event.0.location.shipping_region.id',
    'events.cargo_sts_event.0.location.shipping_region.label',
    'events.cargo_sts_event.0.location.shipping_region.layer',
    'events.cargo_sts_event.0.location.shipping_region.probability',
    'events.cargo_sts_event.0.location.shipping_region.source',
    'events.cargo_sts_event.0.location.sts_zone.id',
    'events.cargo_sts_event.0.location.sts_zone.label',
    'events.cargo_sts_event.0.location.sts_zone.layer',
    'events.cargo_sts_event.0.location.sts_zone.probability',
    'events.cargo_sts_event.0.location.sts_zone.source',
    'events.cargo_sts_event.0.location.trading_block.id',
    'events.cargo_sts_event.0.location.trading_block.label',
    'events.cargo_sts_event.0.location.trading_block.layer',
    'events.cargo_sts_event.0.location.trading_block.probability',
    'events.cargo_sts_event.0.location.trading_block.source',
    'events.cargo_sts_event.0.location.trading_region.id',
    'events.cargo_sts_event.0.location.trading_region.label',
    'events.cargo_sts_event.0.location.trading_region.layer',
    'events.cargo_sts_event.0.location.trading_region.probability',
    'events.cargo_sts_event.0.location.trading_region.source',
    'events.cargo_sts_event.0.location.trading_subregion.id',
    'events.cargo_sts_event.0.location.trading_subregion.label',
    'events.cargo_sts_event.0.location.trading_subregion.layer',
    'events.cargo_sts_event.0.location.trading_subregion.probability',
    'events.cargo_sts_event.0.location.trading_subregion.source',
    'events.cargo_sts_event.0.pos.0',
    'events.cargo_sts_event.0.pos.1',
    'events.cargo_sts_event.0.start_timestamp',
    'events.cargo_sts_event.0.to_vessel_id',
    'events.cargo_sts_event.0.to_vessel_name',
    'events.cargo_sts_event.1.end_timestamp',
    'events.cargo_sts_event.1.event_type',
    'events.cargo_sts_event.1.from_vessel_id',
    'events.cargo_sts_event.1.from_vessel_name',
    'events.cargo_sts_event.1.location.country.id',
    'events.cargo_sts_event.1.location.country.label',
    'events.cargo_sts_event.1.location.country.layer',
    'events.cargo_sts_event.1.location.country.probability',
    'events.cargo_sts_event.1.location.country.source',
    'events.cargo_sts_event.1.location.region.id',
    'events.cargo_sts_event.1.location.region.label',
    'events.cargo_sts_event.1.location.region.layer',
    'events.cargo_sts_event.1.location.region.probability',
    'events.cargo_sts_event.1.location.region.source',
    'events.cargo_sts_event.1.location.shipping_region.id',
    'events.cargo_sts_event.1.location.shipping_region.label',
    'events.cargo_sts_event.1.location.shipping_region.layer',
    'events.cargo_sts_event.1.location.shipping_region.probability',
    'events.cargo_sts_event.1.location.shipping_region.source',
    'events.cargo_sts_event.1.location.sts_zone.id',
    'events.cargo_sts_event.1.location.sts_zone.label',
    'events.cargo_sts_event.1.location.sts_zone.layer',
    'events.cargo_sts_event.1.location.sts_zone.probability',
    'events.cargo_sts_event.1.location.sts_zone.source',
    'events.cargo_sts_event.1.location.trading_block.id',
    'events.cargo_sts_event.1.location.trading_block.label',
    'events.cargo_sts_event.1.location.trading_block.layer',
    'events.cargo_sts_event.1.location.trading_block.probability',
    'events.cargo_sts_event.1.location.trading_block.source',
    'events.cargo_sts_event.1.location.trading_region.id',
    'events.cargo_sts_event.1.location.trading_region.label',
    'events.cargo_sts_event.1.location.trading_region.layer',
    'events.cargo_sts_event.1.location.trading_region.probability',
    'events.cargo_sts_event.1.location.trading_region.source',
    'events.cargo_sts_event.1.location.trading_subregion.id',
    'events.cargo_sts_event.1.location.trading_subregion.label',
    'events.cargo_sts_event.1.location.trading_subregion.layer',
    'events.cargo_sts_event.1.location.trading_subregion.probability',
    'events.cargo_sts_event.1.location.trading_subregion.source',
    'events.cargo_sts_event.1.pos.0',
    'events.cargo_sts_event.1.pos.1',
    'events.cargo_sts_event.1.start_timestamp',
    'events.cargo_sts_event.1.to_vessel_id',
    'events.cargo_sts_event.1.to_vessel_name',
    'product.category.id',
    'product.category.label',
    'product.category.layer',
    'product.category.probability',
    'product.category.source',
    'product.grade.id',
    'product.grade.label',
    'product.grade.layer',
    'product.grade.probability',
    'product.grade.source',
    'product.group.id',
    'product.group.label',
    'product.group.layer',
    'product.group.probability',
    'product.group.source',
    'product.group_product.id',
    'product.group_product.label',
    'product.group_product.layer',
    'product.group_product.probability',
    'product.group_product.source',
    'quantity',
    'status',
    'vessels.0.corporate_entities.charterer.id',
    'vessels.0.corporate_entities.charterer.label',
    'vessels.0.corporate_entities.charterer.layer',
    'vessels.0.corporate_entities.charterer.probability',
    'vessels.0.corporate_entities.charterer.source',
    'vessels.0.corporate_entities.commercial_owner.id',
    'vessels.0.corporate_entities.commercial_owner.label',
    'vessels.0.corporate_entities.commercial_owner.layer',
    'vessels.0.corporate_entities.commercial_owner.probability',
    'vessels.0.corporate_entities.commercial_owner.source',
    'vessels.0.corporate_entities.time_charterer.end_timestamp',
    'vessels.0.corporate_entities.time_charterer.id',
    'vessels.0.corporate_entities.time_charterer.label',
    'vessels.0.corporate_entities.time_charterer.layer',
    'vessels.0.corporate_entities.time_charterer.probability',
    'vessels.0.corporate_entities.time_charterer.source',
    'vessels.0.corporate_entities.time_charterer.start_timestamp',
    'vessels.0.cubic_capacity',
    'vessels.0.dwt',
    'vessels.0.end_timestamp',
    'vessels.0.fixture_fulfilled',
    'vessels.0.fixture_id',
    'vessels.0.id',
    'vessels.0.imo',
    'vessels.0.mmsi',
    'vessels.0.name',
    'vessels.0.start_timestamp',
    'vessels.0.status',
    'vessels.0.tags.0.end_timestamp',
    'vessels.0.tags.0.start_timestamp',
    'vessels.0.tags.0.tag',
    'vessels.0.vessel_class',
    'vessels.0.voyage_id',
    'vessels.1.corporate_entities.charterer.id',
    'vessels.1.corporate_entities.charterer.label',
    'vessels.1.corporate_entities.charterer.layer',
    'vessels.1.corporate_entities.charterer.probability',
    'vessels.1.corporate_entities.charterer.source',
    'vessels.1.corporate_entities.commercial_owner.id',
    'vessels.1.corporate_entities.commercial_owner.label',
    'vessels.1.corporate_entities.commercial_owner.layer',
    'vessels.1.corporate_entities.commercial_owner.probability',
    'vessels.1.corporate_entities.commercial_owner.source',
    'vessels.1.corporate_entities.time_charterer.end_timestamp',
    'vessels.1.corporate_entities.time_charterer.id',
    'vessels.1.corporate_entities.time_charterer.label',
    'vessels.1.corporate_entities.time_charterer.layer',
    'vessels.1.corporate_entities.time_charterer.probability',
    'vessels.1.corporate_entities.time_charterer.source',
    'vessels.1.corporate_entities.time_charterer.start_timestamp',
    'vessels.1.cubic_capacity',
    'vessels.1.dwt',
    'vessels.1.end_timestamp',
    'vessels.1.fixture_fulfilled',
    'vessels.1.id',
    'vessels.1.imo',
    'vessels.1.mmsi',
    'vessels.1.name',
    'vessels.1.start_timestamp',
    'vessels.1.status',
    'vessels.1.tags.0.end_timestamp',
    'vessels.1.tags.0.start_timestamp',
    'vessels.1.tags.0.tag',
    'vessels.1.vessel_class',
    'vessels.1.voyage_id',
    'vessels.2.corporate_entities.charterer.id',
    'vessels.2.corporate_entities.charterer.label',
    'vessels.2.corporate_entities.charterer.layer',
    'vessels.2.corporate_entities.charterer.probability',
    'vessels.2.corporate_entities.charterer.source',
    'vessels.2.corporate_entities.commercial_owner.id',
    'vessels.2.corporate_entities.commercial_owner.label',
    'vessels.2.corporate_entities.commercial_owner.layer',
    'vessels.2.corporate_entities.commercial_owner.probability',
    'vessels.2.corporate_entities.commercial_owner.source',
    'vessels.2.corporate_entities.time_charterer.end_timestamp',
    'vessels.2.corporate_entities.time_charterer.id',
    'vessels.2.corporate_entities.time_charterer.label',
    'vessels.2.corporate_entities.time_charterer.layer',
    'vessels.2.corporate_entities.time_charterer.probability',
    'vessels.2.corporate_entities.time_charterer.source',
    'vessels.2.corporate_entities.time_charterer.start_timestamp',
    'vessels.2.cubic_capacity',
    'vessels.2.dwt',
    'vessels.2.end_timestamp',
    'vessels.2.id',
    'vessels.2.imo',
    'vessels.2.mmsi',
    'vessels.2.name',
    'vessels.2.start_timestamp',
    'vessels.2.status',
    'vessels.2.tags.0.start_timestamp',
    'vessels.2.tags.0.tag',
    'vessels.2.vessel_class',
    'vessels.2.voyage_id',
    'vessels.3.corporate_entities.commercial_owner.id',
    'vessels.3.corporate_entities.commercial_owner.label',
    'vessels.3.corporate_entities.commercial_owner.layer',
    'vessels.3.corporate_entities.commercial_owner.probability',
    'vessels.3.corporate_entities.commercial_owner.source',
    'vessels.3.cubic_capacity',
    'vessels.3.dwt',
    'vessels.3.id',
    'vessels.3.imo',
    'vessels.3.mmsi',
    'vessels.3.name',
    'vessels.3.start_timestamp',
    'vessels.3.status',
    'vessels.3.vessel_class',
    'vessels.3.voyage_id',
]