Completed vehicle plannings

This report contains details and metrics on distance driven and passenger transport performance for completed vehicle plannings.

  • The period type is monthly.
  • The default query timeframe is seven days.
  • The row access mode is product and operator based.

Permissions: access_reports

A vehicle planning must be fully completed to be considered. Past tasks that have not been marked as completed by the driver can be retroactively marked as completed in ioki Operator under vehicle planning details and ride details. Be sure to set a realistic past timestamp to ensure the most accurate calculation of distances and durations.

All completed or considered completed tasks are taken into account. Tasks considered as completed include no-shows and other cancellations at fault of the passenger where the vehicle had already reached the pickup location. Operationally mandated legs are also factored in, such as repositioning, as well as breaks and shift ends.

The metrics are calculated in two variants: actual and plan.

Actual metrics

The actual metrics are based on the actual times and locations at which the tasks were marked as completed. The actual distances are based on all position data recorded between task completions.

Actual distances are used to assess the distance driven, passenger transport performance and the efficiency of a service.

Plan metrics

The plan metrics are based on the planned times and locations of tasks in a vehicle planning. Plan distances are calculated by default as the shortest route between the tasks of a vehicle planning. The type of routing can be adjusted to your needs.

Plan distances are frequently used for billing purposes because they are well-suited to measure the commissioned passenger transport. They are verifiable and independent of traffic conditions.

Location-bound pause and shift end: If you want to operate on plan distances, you should always define a place for pause and shift end tasks in the vehicle planning.

Report columns

Field nameDefinitionAttribute / Calculation
Task list ID (task_list_id)Unique ID of the vehicle planning in the ioki system.ride.matched_task_list
Planned shift beginning (planned_shift_beginning) defaultPlanned start of the vehicle planning.task_list.starts_at
Planned shift end (planned_shift_end)Planned end of the vehicle planning.task_list.ends_at
Planned start place (planned_start_place)Planned place where the vehicle planning should have started.task_list.start_location.location_name
Actual shift beginning (actual_shift_beginning)The time the shift start task was completed or for which it was reported as completed.start_task.resolved_completed_at
Actual shift end (actual_shift_end)The time the shift end task was completed or for which it was reported as completed.end_task.resolved_completed_at
Started by type (started_by_type)Type of who completed the start of shift task. Admin, Driver or Platform.start_task.completer_type
Ended by type (ended_by_type)Type of who completed the end of shift task. Admin, Driver or Platform.end_task.completer_type
Product ID (product_id)Unique ID of the product in which the task list was completed.product.id
Product name (product_name)Name of the product the task list was completed in.product.name
Matching configuration ID (matching_config_id)ID of the applied matching configuration.matching_configuration.id
Matching configuration name (matching_config_name)Name of the matching configuration which was associated with the vehicle planning.matching_configuration.name
Operator ID (operator_id)Unique ID of the operator associated to the vehicle planning.operator.id
Operator name (operator_name)Name of the operator associated to the vehicle planning.operator.name
Vehicle ID (vehicle_id)Unique ID of the vehicle that was planned.vehicle.id
License plate (license_plate) defaultLicense plate of the vehicle that was planned.ride.vehicle.license_plate
Driver ID (driver_id)Unique ID of driver that completed the dropoff task.task_list.tasks.find(&:end_of_shift?).final_driver
Actual shift duration [min] (actual_shift_duration)Time difference between the completion or the reported completion of the start of shift and end of shift task in minutes.eos_task.resolved_completed_at - sos_task.resolved_completed_at where eos/sos_task are end_of_shift / start_of_shift, respectively
Actual pause duration [min] (actual_pause_duration)Sum of the time differences between the completion of the reported completion of all pairs of pause start and pause end tasks minus overlapping deactivation times.task_list.analyzed_task_list.actual_pause_duration - deactivated_pause_duration
Actual deactivation duration [min] (actual_deactivation_duration)Total time the vehicle was deactivated during a shift, combining idle and pause periods, but excluding deactivation during rides.deactivated_idle_duration + deactivated_pause_duration
Actual service duration [min] (actual_service_duration) defaultTotal time of a shift, minus the time spent on reported pauses and minus the time the vehicle was deactivated (both while idle and during pauses)actual_shift_duration - reported_pause_duration - reported_deactivation_duration
Actual occupied duration [min] (actual_occupied_duration)Sum over all legs with passengers on board.task_list.analyzed_task_list.actual_occupied_duration
Actual empty duration [min] (actual_empty_duration) actual_empty_duration - reported_pause_duration - reported_deactivation_duration
Number of rides (number_of_rides)Number of completed rides (pick ups) served within this vehicle planning.analyzed_task_list.num_served_rides
Rides per service hour (rides_per_service_hour)Mean of rides in one hour of the actual / reported service duration.(num_served_rides / (reported_service_duration.to_f / 3600.0)).round(2)
Number of passengers (number_of_passengers)Sum of all passengers of all completed rides of the vehicle planning.analyzed_task_list.num_served_passengers
Passengers per service hour (passengers_per_service_hour)Mean of served passengers in one hour of the actual/ reported service duration.(num_served_passengers / (reported_service_duration.to_f / 3600)).round(2)
Actual vehicle distance [km] (actual_vehicle_distance) defaultSum of all meters of legs the vehicle drove during the shift without the ones in pauses.actual_occupied_distance + actual_empty_distance - actual_pause_distance
Actual empty distance [km] (actual_empty_distance)Sum over all unoccupied legs minus the ones in a pause.actual_empty_distance - actual_pause_distance
Actual occupied distance [km] (actual_occupied_distance)Sum over all analyzed legs with passengers on board.analyzed_task_list.actual_occupied_distance
Actual rides-distance [km] (actual_ride_distance)Sum over all legs of the vehicle planning which are occupied.analyzed_task_list.actual_ride_distance
Actual passenger-distance [km] (actual_passenger_distance) defaultThe sum of vehicle-distance times the number of passengers boarded on each leg of the journey.analyzed_task_list.actual_passenger_distance
Occupancy rate (occupancy_rate)The ratio between kms with passengers on board and total kms of the vehicle planning.(actual_occupied_distance / reported_vehicle_distance.to_f).round(2)
Bundling rate (bundling_rate) defaultOver the entire vehicle-distance (including non occupied legs) there were on average this many passengers in the vehicle.(actual_passenger_distance / reported_vehicle_distance.to_f).round(2)
Passenger pooling rate (passenger_pooling_rate)When transporting passengers, there were on average this many passengers in the vehicle.(actual_passenger_distance / actual_occupied_distance.to_f).round(2)
Ride pooling rate (ride_pooling_rate) defaultWhen transporting passengers, there were on average this many individually booked rides in the vehicle(actual_ride_distance / actual_occupied_distance.to_f).round(2)
Planned vehicle distance [km] (planned_vehicle_distance)Sum over all analyzed legs planned distance of the complete shift.planned_occupied_distance + planned_empty_distance
Planned empty distance [km] (planned_empty_distance)Sum over all analyzed legs planned without passengers on the shift.analyzed_task_list.planned_empty_distance
Planned occupied distance [km] (planned_occupied_distance)Sum over all analyzed legs planned transporting passengers on the shift.analyzed_task_list.planned_occupied_distance
Plan rides-distance [km] (planned_ride_distance)Planned distance summed up over all analyzed legs of rides (some rides do have shared legs, so this is supposed to be higher than occupied distance when pooling occurs.)analyzed_task_list.planned_rides_distance
Planned passenger distance [km] (planned_passenger_distance)Planned distance summed up over all analyzed legs multiplied by the number of passengers.analyzed_task_list.planned_passenger_distance

Calculation example

The vehicle planning:

  • A → B: Actual vehicle-distance = 3 km, empty leg
  • B → C: Actual vehicle-distance = 2 km, 2 rides boarded: 1 x 1 passenger and 1 x 2 passengers

results in the following metrics:

  • Actual vehicle-distance = 3 km + 2 km = 5 km
  • Actual occupied distance = 2 km
  • Actual rides-distance = 2 trips x 2 km = 4 km
  • Actual passenger-distance = 3 passengers x 2 km = 6 km
  • Occupancy rate = actual occupied distance / actual vehicle-distance = 2 km / 5 km = 40%
  • Bundling rate = actual passenger-distance / actual vehicle-distance = 6 km / 5 km = 1.2
  • Passenger pooling rate = actual passenger-distance / actual occupied distance = 6 km / 2 km = 3.0
  • Rides pooling rate = actual ride-distance / actual occupied distance = 4 km / 2 km = 2.0

Precision level

Depending on the data available, one of four models is used to determine the distances with the highest possible accuracy. For actual distances, the following models are applied (in decreasing order of precision):

  1. snapped – Based on received vehicle positions (typically every 5 seconds), the distance is calculated along the local road network.
  2. recorded – If alignment with the road network fails, the linear distance between the received vehicle positions is used. As this underestimates the true distance, an empirically determined markup of 3% is applied.

If no vehicle positions are available or if they aren’t accurate enough, the actual distance is determined in the same way as the planned distance:

  1. routed – The distance on the shortest route between the planned starting point and endpoint.
  2. estimated – If routing fails, the linear distance between the planned starting point and endpoint is used. An empirically determined markup of 48% is applied.

How can I verify the planned distance?

The routing for this report uses the start time and start location of the vehicle planning and assumes a continuous journey along all relevant tasks of the vehicle planning. The routing is optimized by default for the shortest route. The start date and time are important because the shortest route may change at times, for example, due to altered road layout.