From 41a3bdde0ebcdd5a1dd3f47348f289438097978f Mon Sep 17 00:00:00 2001 From: Mitch Vars Date: Tue, 6 Jul 2021 14:16:13 -0500 Subject: [PATCH 1/5] Add pricing plans to vehicle types Adds pricing_plans and default_pricng_plan to vehicle types --- gbfs.md | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/gbfs.md b/gbfs.md index f5e53e26..7170195f 100644 --- a/gbfs.md +++ b/gbfs.md @@ -395,7 +395,8 @@ Field Name | REQUIRED | Type | Defines \- `propulsion_type` | Yes | Enum | The primary propulsion type of the vehicle.

Current valid values are:
This field was inspired by, but differs from the propulsion types field described in the [Open Mobility Foundation Mobility Data Specification](https://github.com/openmobilityfoundation/mobility-data-specification/blob/master/provider/README.md#propulsion-types). \- `max_range_meters` | Conditionally REQUIRED | Non-negative float | If the vehicle has a motor (as indicated by having a value other than `human` in the `propulsion_type` field), this field is REQUIRED. This represents the furthest distance in meters that the vehicle can travel without recharging or refueling when it has the maximum amount of energy potential (for example, a full battery or full tank of gas). \- `name` | OPTIONAL | String | The public name of this vehicle type. - +\- `default_pricing_plan`| Conditionally REQUIRED | ID | REQUIRED if `system_pricing_plans` and `vehicle_types.json` are defined. A `plan_id` as defined in `system_pricing_plans.json` that identifies a default pricing plan for this vehicle to be used by trip planning applications for purposes of calculating the cost of a single trip using this vehicle type. This default pricing plan is superseded by `pricing_plan_id` when it is defined in `free_bike_status.json`. +\- `pricing_plans` | OPTIONAL | Array | Array of all pricing plan IDs as defined in `system_pricing_plans.json` that are applied to this vehicle type.

This array SHOULD be published when there are multiple pricing plans defined in `system_prcing_plans.json` that apply to a single vehicle type. ##### Example: ```jsonc @@ -409,21 +410,29 @@ Field Name | REQUIRED | Type | Defines "vehicle_type_id": "abc123", "form_factor": "bicycle", "propulsion_type": "human", - "name": "Example Basic Bike" + "name": "Example Basic Bike", + "default_pricing_plan": "bike_plan_1", + "pricing_plans": [ + "bike_plan_1", + "bike_plan_2", + "bike_plan_3" + ] }, { "vehicle_type_id": "def456", "form_factor": "scooter", "propulsion_type": "electric", "name": "Example E-scooter V2", - "max_range_meters": 12345 + "max_range_meters": 12345, + "default_pricing_plan": "scooter_plan_1" }, { "vehicle_type_id": "car1", "form_factor": "car", "propulsion_type": "combustion", "name": "Four-door Sedan", - "max_range_meters": 523992 + "max_range_meters": 523992, + "default_pricing_plan": "car_plan_1" } ] } @@ -655,7 +664,7 @@ Field Name | REQUIRED | Type | Defines \- `last_reported`
*(added in v2.1)* | OPTIONAL | Timestamp | The last time this vehicle reported its status to the operator's backend. \- `current_range_meters`
*(added in v2.1)* | Conditionally REQUIRED | Non-negative float | If the corresponding `vehicle_type` definition for this vehicle has a motor, then this field is REQUIRED. This value represents the furthest distance in meters that the vehicle can travel without recharging or refueling with the vehicle's current charge or fuel. \- `station_id`
*(added in v2.1)* | Conditionally REQUIRED | ID | Identifier referencing the `station_id` field in [station_information.json](#station_informationjson). REQUIRED only if the vehicle is currently at a station and the [vehicle_types.json](#vehicle_typesjson) file has been defined. -\- `pricing_plan_id`
*(added in v2.1)* | OPTIONAL | ID | The `plan_id` of the pricing plan this vehicle is eligible for as described in [system_pricing_plans.json](#system_pricing_plans.json). +\- `pricing_plan_id`
*(added in v2.1)* | OPTIONAL | ID | The `plan_id` of the pricing plan this vehicle is eligible for as described in [system_pricing_plans.json](#system_pricing_plans.json). If this field is defined it supersedes `default_pricing_plan` in `vehicle_types.json`. ##### Example: From 98316ee5cff37ac24d299e1164cd6f514c3d30ff Mon Sep 17 00:00:00 2001 From: Mitch Vars Date: Wed, 14 Jul 2021 13:52:03 -0500 Subject: [PATCH 2/5] Fix typo --- gbfs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gbfs.md b/gbfs.md index 7170195f..a2d36e0b 100644 --- a/gbfs.md +++ b/gbfs.md @@ -396,7 +396,7 @@ Field Name | REQUIRED | Type | Defines \- `max_range_meters` | Conditionally REQUIRED | Non-negative float | If the vehicle has a motor (as indicated by having a value other than `human` in the `propulsion_type` field), this field is REQUIRED. This represents the furthest distance in meters that the vehicle can travel without recharging or refueling when it has the maximum amount of energy potential (for example, a full battery or full tank of gas). \- `name` | OPTIONAL | String | The public name of this vehicle type. \- `default_pricing_plan`| Conditionally REQUIRED | ID | REQUIRED if `system_pricing_plans` and `vehicle_types.json` are defined. A `plan_id` as defined in `system_pricing_plans.json` that identifies a default pricing plan for this vehicle to be used by trip planning applications for purposes of calculating the cost of a single trip using this vehicle type. This default pricing plan is superseded by `pricing_plan_id` when it is defined in `free_bike_status.json`. -\- `pricing_plans` | OPTIONAL | Array | Array of all pricing plan IDs as defined in `system_pricing_plans.json` that are applied to this vehicle type.

This array SHOULD be published when there are multiple pricing plans defined in `system_prcing_plans.json` that apply to a single vehicle type. +\- `pricing_plans` | OPTIONAL | Array | Array of all pricing plan IDs as defined in `system_pricing_plans.json` that are applied to this vehicle type.

This array SHOULD be published when there are multiple pricing plans defined in `system_pricing_plans.json` that apply to a single vehicle type. ##### Example: ```jsonc From f501e579ca0a014270ce1bae35528a82bd2eafe6 Mon Sep 17 00:00:00 2001 From: Mitch Vars Date: Thu, 2 Sep 2021 13:46:00 -0500 Subject: [PATCH 3/5] update field name and definition Updates field name default_pricing_plan to default_pricing_plan_id, clarifies definition giving preference to defining default_pricing_plan_id --- gbfs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gbfs.md b/gbfs.md index a2d36e0b..bf825e04 100644 --- a/gbfs.md +++ b/gbfs.md @@ -395,7 +395,7 @@ Field Name | REQUIRED | Type | Defines \- `propulsion_type` | Yes | Enum | The primary propulsion type of the vehicle.

Current valid values are:
  • `human` _(Pedal or foot propulsion)_
  • `electric_assist` _(Provides power only alongside human propulsion)_
  • `electric` _(Contains throttle mode with a battery-powered motor)_
  • `combustion` _(Contains throttle mode with a gas engine-powered motor)_
This field was inspired by, but differs from the propulsion types field described in the [Open Mobility Foundation Mobility Data Specification](https://github.com/openmobilityfoundation/mobility-data-specification/blob/master/provider/README.md#propulsion-types). \- `max_range_meters` | Conditionally REQUIRED | Non-negative float | If the vehicle has a motor (as indicated by having a value other than `human` in the `propulsion_type` field), this field is REQUIRED. This represents the furthest distance in meters that the vehicle can travel without recharging or refueling when it has the maximum amount of energy potential (for example, a full battery or full tank of gas). \- `name` | OPTIONAL | String | The public name of this vehicle type. -\- `default_pricing_plan`| Conditionally REQUIRED | ID | REQUIRED if `system_pricing_plans` and `vehicle_types.json` are defined. A `plan_id` as defined in `system_pricing_plans.json` that identifies a default pricing plan for this vehicle to be used by trip planning applications for purposes of calculating the cost of a single trip using this vehicle type. This default pricing plan is superseded by `pricing_plan_id` when it is defined in `free_bike_status.json`. +\- `default_pricing_plan_id`| Conditionally REQUIRED | ID | REQUIRED if both `system_pricing_plans` and `vehicle_types.json` are defined. A `plan_id` as defined in `system_pricing_plans.json` that identifies a default pricing plan for this vehicle to be used by trip planning applications for purposes of calculating the cost of a single trip using this vehicle type. This default pricing plan is superseded by `pricing_plan_id` when it is defined in `free_bike_status.json` Publishers SHOULD define `default_pricing_plan_id` first and then override it using `pricing_plan_id` in `free_bike_status.json` when necessary. \- `pricing_plans` | OPTIONAL | Array | Array of all pricing plan IDs as defined in `system_pricing_plans.json` that are applied to this vehicle type.

This array SHOULD be published when there are multiple pricing plans defined in `system_pricing_plans.json` that apply to a single vehicle type. ##### Example: From 577858f2ce18cae6cc820ffa8ca7e943ce8181a7 Mon Sep 17 00:00:00 2001 From: Mitch Vars Date: Thu, 2 Sep 2021 14:12:57 -0500 Subject: [PATCH 4/5] Add v2.3-RC labels Add V2.3-RC label and clarify use of pricing_plan_id --- gbfs.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gbfs.md b/gbfs.md index bf825e04..9d9766ab 100644 --- a/gbfs.md +++ b/gbfs.md @@ -395,7 +395,7 @@ Field Name | REQUIRED | Type | Defines \- `propulsion_type` | Yes | Enum | The primary propulsion type of the vehicle.

Current valid values are:
  • `human` _(Pedal or foot propulsion)_
  • `electric_assist` _(Provides power only alongside human propulsion)_
  • `electric` _(Contains throttle mode with a battery-powered motor)_
  • `combustion` _(Contains throttle mode with a gas engine-powered motor)_
This field was inspired by, but differs from the propulsion types field described in the [Open Mobility Foundation Mobility Data Specification](https://github.com/openmobilityfoundation/mobility-data-specification/blob/master/provider/README.md#propulsion-types). \- `max_range_meters` | Conditionally REQUIRED | Non-negative float | If the vehicle has a motor (as indicated by having a value other than `human` in the `propulsion_type` field), this field is REQUIRED. This represents the furthest distance in meters that the vehicle can travel without recharging or refueling when it has the maximum amount of energy potential (for example, a full battery or full tank of gas). \- `name` | OPTIONAL | String | The public name of this vehicle type. -\- `default_pricing_plan_id`| Conditionally REQUIRED | ID | REQUIRED if both `system_pricing_plans` and `vehicle_types.json` are defined. A `plan_id` as defined in `system_pricing_plans.json` that identifies a default pricing plan for this vehicle to be used by trip planning applications for purposes of calculating the cost of a single trip using this vehicle type. This default pricing plan is superseded by `pricing_plan_id` when it is defined in `free_bike_status.json` Publishers SHOULD define `default_pricing_plan_id` first and then override it using `pricing_plan_id` in `free_bike_status.json` when necessary. +\- `default_pricing_plan_id`
*(added in v2.3-RC)*| Conditionally REQUIRED | ID | REQUIRED if both `system_pricing_plans` and `vehicle_types.json` are defined. A `plan_id` as defined in `system_pricing_plans.json` that identifies a default pricing plan for this vehicle to be used by trip planning applications for purposes of calculating the cost of a single trip using this vehicle type. This default pricing plan is superseded by `pricing_plan_id` when it is defined in `free_bike_status.json` Publishers SHOULD define `default_pricing_plan_id` first and then override it using `pricing_plan_id` in `free_bike_status.json` when necessary. \- `pricing_plans` | OPTIONAL | Array | Array of all pricing plan IDs as defined in `system_pricing_plans.json` that are applied to this vehicle type.

This array SHOULD be published when there are multiple pricing plans defined in `system_pricing_plans.json` that apply to a single vehicle type. ##### Example: @@ -664,7 +664,7 @@ Field Name | REQUIRED | Type | Defines \- `last_reported`
*(added in v2.1)* | OPTIONAL | Timestamp | The last time this vehicle reported its status to the operator's backend. \- `current_range_meters`
*(added in v2.1)* | Conditionally REQUIRED | Non-negative float | If the corresponding `vehicle_type` definition for this vehicle has a motor, then this field is REQUIRED. This value represents the furthest distance in meters that the vehicle can travel without recharging or refueling with the vehicle's current charge or fuel. \- `station_id`
*(added in v2.1)* | Conditionally REQUIRED | ID | Identifier referencing the `station_id` field in [station_information.json](#station_informationjson). REQUIRED only if the vehicle is currently at a station and the [vehicle_types.json](#vehicle_typesjson) file has been defined. -\- `pricing_plan_id`
*(added in v2.1)* | OPTIONAL | ID | The `plan_id` of the pricing plan this vehicle is eligible for as described in [system_pricing_plans.json](#system_pricing_plans.json). If this field is defined it supersedes `default_pricing_plan` in `vehicle_types.json`. +\- `pricing_plan_id`
*(added in v2.2)* | OPTIONAL | ID | The `plan_id` of the pricing plan this vehicle is eligible for as described in [system_pricing_plans.json](#system_pricing_plans.json). If this field is defined it supersedes `default_pricing_plan` in `vehicle_types.json`. This field SHOULD be used to override `default_pricing_plan_id` in `vehicle_types.json` to define pricing plans for individual vehicles when necessary. ##### Example: From d397ad683b1bdcc8d714972e43c490f8d3e908c8 Mon Sep 17 00:00:00 2001 From: Mitch Vars Date: Thu, 2 Sep 2021 14:18:58 -0500 Subject: [PATCH 5/5] Label pricing_plans as v2.3-RC --- gbfs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gbfs.md b/gbfs.md index 1e7f9ce9..23ce1c3b 100644 --- a/gbfs.md +++ b/gbfs.md @@ -400,7 +400,7 @@ Field Name | REQUIRED | Type | Defines \- `max_range_meters` | Conditionally REQUIRED | Non-negative float | If the vehicle has a motor (as indicated by having a value other than `human` in the `propulsion_type` field), this field is REQUIRED. This represents the furthest distance in meters that the vehicle can travel without recharging or refueling when it has the maximum amount of energy potential (for example, a full battery or full tank of gas). \- `name` | OPTIONAL | String | The public name of this vehicle type. \- `default_pricing_plan_id`
*(added in v2.3-RC)*| Conditionally REQUIRED | ID | REQUIRED if both `system_pricing_plans` and `vehicle_types.json` are defined. A `plan_id` as defined in `system_pricing_plans.json` that identifies a default pricing plan for this vehicle to be used by trip planning applications for purposes of calculating the cost of a single trip using this vehicle type. This default pricing plan is superseded by `pricing_plan_id` when it is defined in `free_bike_status.json` Publishers SHOULD define `default_pricing_plan_id` first and then override it using `pricing_plan_id` in `free_bike_status.json` when necessary. -\- `pricing_plans` | OPTIONAL | Array | Array of all pricing plan IDs as defined in `system_pricing_plans.json` that are applied to this vehicle type.

This array SHOULD be published when there are multiple pricing plans defined in `system_pricing_plans.json` that apply to a single vehicle type. +\- `pricing_plans`
*(added in v2.3-RC)* | OPTIONAL | Array | Array of all pricing plan IDs as defined in `system_pricing_plans.json` that are applied to this vehicle type.

This array SHOULD be published when there are multiple pricing plans defined in `system_pricing_plans.json` that apply to a single vehicle type. ##### Example: ```jsonc