vortexasdk.endpoints.cargo_movements

Try me out in your browser:

Binder

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 = None, filter_time_min: datetime.datetime = datetime.datetime(2024, 11, 15, 14, 14, 46, 758877), filter_time_max: datetime.datetime = datetime.datetime(2024, 11, 15, 14, 14, 46, 758879), 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_vessel_owners: Union[str, List[str]] = None, filter_time_charterers: Union[str, List[str]] = None, filter_effective_controllers: Union[str, List[str]] = None, filter_products: Union[str, List[str]] = None, filter_vessels: Union[str, List[str]] = None, filter_vessel_classes: 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_vessel_classes: Union[str, List[str]] = None, exclude_charterers: Union[str, List[str]] = None, exclude_owners: Union[str, List[str]] = None, exclude_effective_controllers: Union[str, List[str]] = None, exclude_filter_vessel_owners: Union[str, List[str]] = None, exclude_filter_time_charterers: 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, intra_movements: str = None, quantity_at_time_of: str = 'load') -> 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', 'oil_on_water_state', 'waypoint_start,waypoint_end`].

  • 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_effective_controllers: An effective controller ID, or list of effective controller IDs to filter on.

  • filter_vessel_owners: An vessel owner ID, or list of vessel owners IDs to filter on.

  • filter_time_charterers: An time charterer ID, or list of time charterers 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_vessel_classes: A vessel class, or list of vessel classes 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 vessel flag, or list of vessel flags 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_vessel_classes: A vessel class, or list of vessel classes to exclude.

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

  • exclude_filter_effective_controllers: An effective controller ID, or list of effective controller IDs to exclude.

  • exclude_filter_vessel_owners: An vessel owner ID, or list of vessel owners IDs to filter on.

  • exclude_filter_time_charterers: An time charterer ID, or list of time charterers IDs to filter on.

  • 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.

  • intra_movements: This enum controls a popular industry term intra-movements and determines the filter behaviour for cargo leaving then entering the same geographic area. One of all, exclude_intra_country or exclude_intra_geography

  • quantity_at_time_of: This parameter is designed for LNG cargo and gives the user the freedom to choose whether to create the time series based on the load volume or discharged volumes, as we consider the discharge quantities to differ from load quantities due to boil-off gas.

  • One of: load - represents the quantity of the selected unit at the time of the loading event. unload - represents the quantity of the selected unit at the time of the unloading event.

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="oil_vlcc").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 oil_suezmax COSGLORY LAKE oil_vlcc nan nan Crude 700614
1 BUKHA oil_vlcc nan nan nan nan Crude 1896374
2 ATHENIAN FREEDOM oil_vlcc nan nan nan nan Crude 183537
3 ATINA oil_suezmax DONAT oil_suezmax DS VISION oil_vlcc Crude 896773
4 MINERVA MARINA oil_suezmax COSGLORY LAKE oil_vlcc nan nan Crude 405724
5 MASAL oil_suezmax EKTA oil_vlcc nan nan Crude 997896
6 ATHENIAN FREEDOM oil_vlcc nan nan nan nan Crude 120812

Cargo Movements Endpoint Further Documentation

record

CargoMovements.record(self, id: str, params: Dict = {}) -> Dict

Perform a cargo movement lookup.

Arguments

  • id: Cargo movement ID to lookup (long_id or short_id)

  • params: Supported search params:

  • 'unit': enter 'b' for barrels, 't' for tonnes and 'cbm' for cubic meters

Returns

Cargo movement record matching the ID

Further Documentation:

VortexaAPI Cargo Movement

vortexasdk.endpoints.cargo_movements_result

CargoMovementsResult

CargoMovementsResult(__pydantic_self__, **data: Any) -> 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=['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', 'discharge_quantity', 'vessels.0.name', 'events.cargo_port_load_event.0.end_timestamp', 'events.cargo_port_unload_event.0.start_timestamp']) -> 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 effective controller, 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',
    'discharge_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',
    'discharge_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.effective_controller.id',
    'vessels.0.corporate_entities.effective_controller.label',
    'vessels.0.corporate_entities.effective_controller.layer',
    'vessels.0.corporate_entities.effective_controller.probability',
    'vessels.0.corporate_entities.effective_controller.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.effective_controller.id',
    'vessels.1.corporate_entities.effective_controller.label',
    'vessels.1.corporate_entities.effective_controller.layer',
    'vessels.1.corporate_entities.effective_controller.probability',
    'vessels.1.corporate_entities.effective_controller.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.effective_controller.id',
    'vessels.2.corporate_entities.effective_controller.label',
    'vessels.2.corporate_entities.effective_controller.layer',
    'vessels.2.corporate_entities.effective_controller.probability',
    'vessels.2.corporate_entities.effective_controller.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.effective_controller.id',
    'vessels.3.corporate_entities.effective_controller.label',
    'vessels.3.corporate_entities.effective_controller.layer',
    'vessels.3.corporate_entities.effective_controller.probability',
    'vessels.3.corporate_entities.effective_controller.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',
    'parent_ids.0.id',
    'parent_ids.0.splinter_timestamp',
    'parent_ids.1.id',
    'parent_ids.1.splinter_timestamp',
]