Skip to content

Supporting grace_period field in the system pricing plans #802

@elouanlbrs

Description

@elouanlbrs

Have you read our FAQ? It's possible your question can be answered there!
Yes

If you are new to the specification, please introduce yourself (name and organization/link to GBFS). It's helpful to know who we're chatting with!
My name is Elouan LE BRAS, and I am currently a backend developer at Ecovelo, a French organization that provides all-inclusive shared mobility solutions focused on e-bikes for cities and metropolitan areas.

What is the issue and why is it an issue?
We recently implemented a new pricing option following a request from one of our customers: a grace_period feature. This grace_period allows cyclists with certain plans to receive X minutes of free trips each day/week/month. However, we cannot properly represent this behavior within the current GBFS per_min_pricing structure. The current per_min_pricing model charges from the first minute of usage, but our grace_period feature needs to provide a certain number of free minutes that reset at regular intervals (day, week, ...). This could be an interesting pricing model to implement in bike-sharing systems that cannot be accurately expressed with the existing specification.

Please describe some potential solutions you have considered (even if they aren't related to GBFS).
We propose adding optional grace_periodand grace_distance fields to the system_pricing_plans.json specification. While we specifically need the grace_period for our implementation, we believe grace_distance could also be valuable for operators who want to offer free distance-based allowances.
Here is our proposed solution:
system_pricing_plans.json

Field Name REQUIRED Type Defines
plans REQUIRED Array<Object> Contains one object per pricing plan.
... ... ... All existing defined properties
plans[].grace_period OPTIONAL Object Period of time for which the trip is not charged, resetting at a given interval.
plans[].grace_period.interval REQUIRED String Interval at which the grace_period is reset (possible values: day, week, month).
plans[].grace_period.interval_count REQUIRED Non-Negative Integer Number of interval units before resetting the grace_period.
plans[].grace_period.minutes REQUIRED Non-Negative Integer Number of charge-free minutes provided to the cyclist, reset at the specified interval.
plans[].grace_distance OPTIONAL Object Distance for which the trip is not charged, resetting at a given interval.
plans[].grace_distance.interval REQUIRED String Interval at which the grace_distance is resetted (Could be : day, week, month, ...).
plans[].grace_distance.interval_count REQUIRED Non-Negative Integer Number of interval units (
day, week, ...) before resetting the grace_distance.
plans[].grace_distance.kilometers REQUIRED Non-Negative Float Number of charge-free kilometers provided to the cyclist, reset at the specified interval.

Example usage:

{
  "plan_id": "daily_commuter",
  "grace_period": {
    "interval": "day",
    "interval_count": 1,
    "minutes": 30
  }
}

This would provide 30 minutes of free usage per day before standard pricing applies.

Is your potential solution a breaking change?
[ ] Yes
[X] No
[ ] Unsure

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions