From 8e27b49ed79a7e16a5dc6e165c476937a7c41a30 Mon Sep 17 00:00:00 2001 From: Mitch Vars Date: Fri, 14 Oct 2022 15:52:09 -0500 Subject: [PATCH 1/4] reservation price Adds fields to system_pricing_plans.json to describe cost of reserving a vehicle, charged either as a flat rate or per minute of reserve time. --- gbfs.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/gbfs.md b/gbfs.md index d22e236c..7cd45d7a 100644 --- a/gbfs.md +++ b/gbfs.md @@ -963,6 +963,8 @@ Field Name | REQUIRED | Type | Defines \- `name` | Yes | String | Name of this pricing plan. \- `currency` | Yes | String | Currency used to pay the fare.

This pricing is in ISO 4217 code: http://en.wikipedia.org/wiki/ISO_4217
(for example, `CAD` for Canadian dollars, `EUR` for euros, or `JPY` for Japanese yen.) \- `price` | Yes | Non-Negative Float | Fare price, in the unit specified by `currency`.
*(added in v2.2)* In case of non-rate price, this field is the total price. In case of rate price, this field is the base price that is charged only once per trip (typically the price for unlocking) in addition to `per_km_pricing` and/or `per_min_pricing`. +\- `reservation_price_per_min` | OPTIONAL | Non-Negative Float | The cost, described as per minute rate, to reserve the vehicle prior to beginning a rental. This amount is charged for each minute of the vehicle reservation until the rental is initiated, or until the number of minutes defined in `vehicle_types.json#default_reserve_time` elapses, whichever comes first. When using this field, you MUST declare a value in `vehicle_types.json#default_reserve_time`. This field MUST NOT be combined in a single pricing plan with `reservation_price_flat_rate`. +\- `reservation_price_flat_rate` | OPTIONAL | Non-Negative Float | The cost, described as a flat rate, to reserve the vehicle prior to beginning a rental. This amount is charged once to reserve the vehicle for the duration of the time defined by `vehicle_types/json#default_reserve_time`. When using this field, you MUST declare a value in `vehicle_types/json#default_reserve_time`.This field MUST NOT be combined in a single pricing plan with `reservation_price_per_min`. \- `is_taxable` | Yes | Boolean | Will additional tax be added to the base price?

`true` - Yes.
`false` - No.

`false` MAY be used to indicate that tax is not charged or that tax is included in the base price. \- `description` | Yes | String | Customer-readable description of the pricing plan. This SHOULD include the duration, price, conditions, etc. that the publisher would like users to see. \- `per_km_pricing`
*(added in v2.2)* | OPTIONAL | Array | Array of segments when the price is a function of distance traveled, displayed in kilometers.

Total cost is the addition of `price` and all segments in `per_km_pricing` and `per_min_pricing`. If this array is not provided, there are no variable costs based on distance. @@ -994,6 +996,7 @@ The user does not pay more than the base price for the first 10 km. After 10 km "name": "One-Way", "currency": "USD", "price": 2.00, + "reservation_price_per_min": 0.15, "is_taxable": false, "description": "Includes 10km, overage fees apply after 10km.", "per_km_pricing": [ From 383a699948ce89768cda44ec3ddf67da8bc0b531 Mon Sep 17 00:00:00 2001 From: Mitch Vars Date: Fri, 14 Oct 2022 16:25:08 -0500 Subject: [PATCH 2/4] Update gbfs.md --- gbfs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gbfs.md b/gbfs.md index 7cd45d7a..7b2819d8 100644 --- a/gbfs.md +++ b/gbfs.md @@ -964,7 +964,7 @@ Field Name | REQUIRED | Type | Defines \- `currency` | Yes | String | Currency used to pay the fare.

This pricing is in ISO 4217 code: http://en.wikipedia.org/wiki/ISO_4217
(for example, `CAD` for Canadian dollars, `EUR` for euros, or `JPY` for Japanese yen.) \- `price` | Yes | Non-Negative Float | Fare price, in the unit specified by `currency`.
*(added in v2.2)* In case of non-rate price, this field is the total price. In case of rate price, this field is the base price that is charged only once per trip (typically the price for unlocking) in addition to `per_km_pricing` and/or `per_min_pricing`. \- `reservation_price_per_min` | OPTIONAL | Non-Negative Float | The cost, described as per minute rate, to reserve the vehicle prior to beginning a rental. This amount is charged for each minute of the vehicle reservation until the rental is initiated, or until the number of minutes defined in `vehicle_types.json#default_reserve_time` elapses, whichever comes first. When using this field, you MUST declare a value in `vehicle_types.json#default_reserve_time`. This field MUST NOT be combined in a single pricing plan with `reservation_price_flat_rate`. -\- `reservation_price_flat_rate` | OPTIONAL | Non-Negative Float | The cost, described as a flat rate, to reserve the vehicle prior to beginning a rental. This amount is charged once to reserve the vehicle for the duration of the time defined by `vehicle_types/json#default_reserve_time`. When using this field, you MUST declare a value in `vehicle_types/json#default_reserve_time`.This field MUST NOT be combined in a single pricing plan with `reservation_price_per_min`. +\- `reservation_price_flat_rate` | OPTIONAL | Non-Negative Float | The cost, described as a flat rate, to reserve the vehicle prior to beginning a rental. This amount is charged once to reserve the vehicle for the duration of the time defined by `vehicle_types.json#default_reserve_time`. When using this field, you MUST declare a value in `vehicle_types/json#default_reserve_time`.This field MUST NOT be combined in a single pricing plan with `reservation_price_per_min`. \- `is_taxable` | Yes | Boolean | Will additional tax be added to the base price?

`true` - Yes.
`false` - No.

`false` MAY be used to indicate that tax is not charged or that tax is included in the base price. \- `description` | Yes | String | Customer-readable description of the pricing plan. This SHOULD include the duration, price, conditions, etc. that the publisher would like users to see. \- `per_km_pricing`
*(added in v2.2)* | OPTIONAL | Array | Array of segments when the price is a function of distance traveled, displayed in kilometers.

Total cost is the addition of `price` and all segments in `per_km_pricing` and `per_min_pricing`. If this array is not provided, there are no variable costs based on distance. From 9a57b9cea648f88f26171b838064630841d88f10 Mon Sep 17 00:00:00 2001 From: Mitch Vars Date: Fri, 14 Oct 2022 16:30:45 -0500 Subject: [PATCH 3/4] fix typo --- gbfs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gbfs.md b/gbfs.md index 7b2819d8..4b402b74 100644 --- a/gbfs.md +++ b/gbfs.md @@ -964,7 +964,7 @@ Field Name | REQUIRED | Type | Defines \- `currency` | Yes | String | Currency used to pay the fare.

This pricing is in ISO 4217 code: http://en.wikipedia.org/wiki/ISO_4217
(for example, `CAD` for Canadian dollars, `EUR` for euros, or `JPY` for Japanese yen.) \- `price` | Yes | Non-Negative Float | Fare price, in the unit specified by `currency`.
*(added in v2.2)* In case of non-rate price, this field is the total price. In case of rate price, this field is the base price that is charged only once per trip (typically the price for unlocking) in addition to `per_km_pricing` and/or `per_min_pricing`. \- `reservation_price_per_min` | OPTIONAL | Non-Negative Float | The cost, described as per minute rate, to reserve the vehicle prior to beginning a rental. This amount is charged for each minute of the vehicle reservation until the rental is initiated, or until the number of minutes defined in `vehicle_types.json#default_reserve_time` elapses, whichever comes first. When using this field, you MUST declare a value in `vehicle_types.json#default_reserve_time`. This field MUST NOT be combined in a single pricing plan with `reservation_price_flat_rate`. -\- `reservation_price_flat_rate` | OPTIONAL | Non-Negative Float | The cost, described as a flat rate, to reserve the vehicle prior to beginning a rental. This amount is charged once to reserve the vehicle for the duration of the time defined by `vehicle_types.json#default_reserve_time`. When using this field, you MUST declare a value in `vehicle_types/json#default_reserve_time`.This field MUST NOT be combined in a single pricing plan with `reservation_price_per_min`. +\- `reservation_price_flat_rate` | OPTIONAL | Non-Negative Float | The cost, described as a flat rate, to reserve the vehicle prior to beginning a rental. This amount is charged once to reserve the vehicle for the duration of the time defined by `vehicle_types.json#default_reserve_time`. When using this field, you MUST declare a value in `vehicle_types.json#default_reserve_time`.This field MUST NOT be combined in a single pricing plan with `reservation_price_per_min`. \- `is_taxable` | Yes | Boolean | Will additional tax be added to the base price?

`true` - Yes.
`false` - No.

`false` MAY be used to indicate that tax is not charged or that tax is included in the base price. \- `description` | Yes | String | Customer-readable description of the pricing plan. This SHOULD include the duration, price, conditions, etc. that the publisher would like users to see. \- `per_km_pricing`
*(added in v2.2)* | OPTIONAL | Array | Array of segments when the price is a function of distance traveled, displayed in kilometers.

Total cost is the addition of `price` and all segments in `per_km_pricing` and `per_min_pricing`. If this array is not provided, there are no variable costs based on distance. From e45dd4df46750a5d6051571b46f114fe8457dc05 Mon Sep 17 00:00:00 2001 From: Mitch Vars Date: Tue, 17 Jan 2023 13:42:39 -0600 Subject: [PATCH 4/4] Change `default_reserve_time` to Conditionally REQUIRED Changes `default_reserve_time` to Conditionally REQUIRED when reservation price fields are used --- gbfs.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gbfs.md b/gbfs.md index 4b402b74..36ced120 100644 --- a/gbfs.md +++ b/gbfs.md @@ -455,7 +455,7 @@ Field Name | REQUIRED | Type | Defines \- `wheel_count`
*(added in v2.3-RC2)* | OPTIONAL | Non-negative Integer | Number of wheels this vehicle type has. \- `max_permitted_speed`
*(added in v2.3-RC2)* | OPTIONAL | Non-negative Integer | The maximum speed in kilometers per hour this vehicle is permitted to reach in accordance with local permit and regulations. \- `rated_power`
*(added in v2.3-RC2)* | OPTIONAL | Non-negative Integer | The rated power of the motor for this vehicle type in watts. -\- `default_reserve_time`
*(added in v2.3-RC)* | OPTIONAL | Non-negative Integer | Maximum time in minutes that a vehicle can be reserved before a rental begins. When a vehicle is reserved by a user, the vehicle remains locked until the rental begins. During this time the vehicle is unavailable and cannot be reserved or rented by other users. The vehicle status in `vehicle_status.json` MUST be set to `is_reserved = true`. If the value of `default_reserve_time` elapses without a rental beginning, the vehicle status MUST change to `is_reserved = false`. If `default_reserve_time` is set to `0`, the vehicle type cannot be reserved. +\- `default_reserve_time`
*(added in v2.3-RC)* | Conditionally REQUIRED | Non-negative Integer | REQUIRED if `reservation_price_per_min` or `reservation_price_flat_rate` are defined. Maximum time in minutes that a vehicle can be reserved before a rental begins. When a vehicle is reserved by a user, the vehicle remains locked until the rental begins. During this time the vehicle is unavailable and cannot be reserved or rented by other users. The vehicle status in `vehicle_status.json` MUST be set to `is_reserved = true`. If the value of `default_reserve_time` elapses without a rental beginning, the vehicle status MUST change to `is_reserved = false`. If `default_reserve_time` is set to `0`, the vehicle type cannot be reserved. \- `return_constraint`
*(as of v2.3-RC2)*| OPTIONAL | Enum | The conditions for returning the vehicle at the end of the rental.

Current valid values are:
  • `free_floating` _(The vehicle can be returned anywhere permitted within the service area. Note that the vehicle is subject to rules in `geofencing_zones.json` if defined.)_
  • `roundtrip_station` _(The vehicle has to be returned to the same station from which it was initially rented. Note that a specific station can be assigned to the vehicle in `free_bike_status.json` using `home_station`.)_
  • `any_station` _(The vehicle has to be returned to any station within the service area.)_
  • `hybrid` (The vehicle can be returned to any station, or anywhere else permitted within the service area. Note that the vehicle is subject to rules in `geofencing_zones.json` if defined.)
  • \- `vehicle_assets`
    *(added in v2.3-RC)*| OPTIONAL | Object | An object where each key defines one of the items listed below.   \- `icon_url`
    *(added in v2.3-RC)*| Conditionally REQUIRED | URL | REQUIRED if `vehicle_assets` is defined. A fully qualified URL pointing to the location of a graphic icon file that MAY be used to represent this vehicle type on maps and in other applications. File MUST be in SVG V1.1 format and MUST be either square or round. @@ -964,7 +964,7 @@ Field Name | REQUIRED | Type | Defines \- `currency` | Yes | String | Currency used to pay the fare.

    This pricing is in ISO 4217 code: http://en.wikipedia.org/wiki/ISO_4217
    (for example, `CAD` for Canadian dollars, `EUR` for euros, or `JPY` for Japanese yen.) \- `price` | Yes | Non-Negative Float | Fare price, in the unit specified by `currency`.
    *(added in v2.2)* In case of non-rate price, this field is the total price. In case of rate price, this field is the base price that is charged only once per trip (typically the price for unlocking) in addition to `per_km_pricing` and/or `per_min_pricing`. \- `reservation_price_per_min` | OPTIONAL | Non-Negative Float | The cost, described as per minute rate, to reserve the vehicle prior to beginning a rental. This amount is charged for each minute of the vehicle reservation until the rental is initiated, or until the number of minutes defined in `vehicle_types.json#default_reserve_time` elapses, whichever comes first. When using this field, you MUST declare a value in `vehicle_types.json#default_reserve_time`. This field MUST NOT be combined in a single pricing plan with `reservation_price_flat_rate`. -\- `reservation_price_flat_rate` | OPTIONAL | Non-Negative Float | The cost, described as a flat rate, to reserve the vehicle prior to beginning a rental. This amount is charged once to reserve the vehicle for the duration of the time defined by `vehicle_types.json#default_reserve_time`. When using this field, you MUST declare a value in `vehicle_types.json#default_reserve_time`.This field MUST NOT be combined in a single pricing plan with `reservation_price_per_min`. +\- `reservation_price_flat_rate` | OPTIONAL | Non-Negative Float | The cost, described as a flat rate, to reserve the vehicle prior to beginning a rental. This amount is charged once to reserve the vehicle for the duration of the time defined by `vehicle_types.json#default_reserve_time`. When using this field, you MUST declare a value in `vehicle_types.json#default_reserve_time`. This field MUST NOT be combined in a single pricing plan with `reservation_price_per_min`. \- `is_taxable` | Yes | Boolean | Will additional tax be added to the base price?

    `true` - Yes.
    `false` - No.

    `false` MAY be used to indicate that tax is not charged or that tax is included in the base price. \- `description` | Yes | String | Customer-readable description of the pricing plan. This SHOULD include the duration, price, conditions, etc. that the publisher would like users to see. \- `per_km_pricing`
    *(added in v2.2)* | OPTIONAL | Array | Array of segments when the price is a function of distance traveled, displayed in kilometers.

    Total cost is the addition of `price` and all segments in `per_km_pricing` and `per_min_pricing`. If this array is not provided, there are no variable costs based on distance.