Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add variable fares by time or day #357

Merged
Merged
Changes from 1 commit
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
94d15cb
Added timeframes
omar-kabbani Aug 4, 2022
bfc2b12
Add date-based fares
omar-kabbani Aug 5, 2022
713e91c
Update timeframes.txt description
isabelle-dr Nov 14, 2022
5a8ca38
Change end time from required to optional
isabelle-dr Nov 14, 2022
0b7c9e2
Records with the same timeframe id must cover a 24h period
isabelle-dr Nov 14, 2022
fd2eb13
no overlap
isabelle-dr Nov 14, 2022
991ccba
remove requirement on 24h coverage and overlapping
isabelle-dr Nov 15, 2022
d2e89a6
fix typo
isabelle-dr Nov 21, 2022
710be10
Revert changes in timeframes.end_time
isabelle-dr Nov 23, 2022
f9a4a1d
move service_id to timeframes.txt
isabelle-dr Mar 10, 2023
84da99f
Move timeframes to the fares v2 section
isabelle-dr Mar 10, 2023
b8aad98
rename timeframe_id to timeframe_group_id
isabelle-dr Mar 10, 2023
438dbf2
Merge branch 'master' into GTFS-Fares-v2-time-variable-fares
isabelle-dr Mar 15, 2023
d68c3fd
place timeframes.txt with other Fares v2 files
isabelle-dr Mar 15, 2023
50e60c8
Rename from/to fields + change empty semantics
isabelle-dr Mar 21, 2023
d42bfdf
add line break
isabelle-dr Mar 21, 2023
50a080d
Add timeframes description
isabelle-dr Mar 23, 2023
19dae72
Make timeframe fields required
isabelle-dr Mar 23, 2023
0222fff
service_id references calendar or calendar_dates
isabelle-dr Mar 23, 2023
27f5c06
Add requirements
isabelle-dr Mar 23, 2023
9bd26d0
typo
isabelle-dr Mar 23, 2023
acd9d0d
Update timeframe fields description
isabelle-dr Apr 4, 2023
a182e6c
end time is not included in the interval
isabelle-dr Apr 4, 2023
e8463ce
Add timeframe_type field
isabelle-dr Apr 4, 2023
477ab30
Overlapping time frames must not be defined
isabelle-dr Apr 5, 2023
c34bfed
introduce override
isabelle-dr Apr 5, 2023
d4afc6e
improve override description
isabelle-dr Apr 7, 2023
55679c9
Revert "improve override description"
isabelle-dr Apr 7, 2023
189822f
improve override description
isabelle-dr Apr 7, 2023
f0e18a8
update timeframe fields description
isabelle-dr Apr 7, 2023
0aedadc
remove timeframe fields for no exact matched found
isabelle-dr Apr 11, 2023
91bda27
Update descriptions for empty values:
isabelle-dr Apr 11, 2023
af4b67b
Both values need to be empty or neither should be empty
isabelle-dr May 24, 2023
fe45e7e
Change to local time semantics
isabelle-dr May 24, 2023
045258f
Changed name start/end_timeframe_group_id
tzujenchanmbd May 24, 2023
ad54f36
Remove timeframe_type & priority fields
tzujenchanmbd May 24, 2023
518578b
revise "start" to "end"
tzujenchanmbd May 25, 2023
f33a935
Remove "initial" after Gavriel's comment
isabelle-dr Jun 25, 2023
4bf749f
Remove unnecessary empty description
tzujenchanmbd Jul 19, 2023
0007c89
Changes based on Jeremy's feedback
tzujenchanmbd Jul 20, 2023
1a65d75
Modify empty wording
tzujenchanmbd Jul 20, 2023
12c3bb7
Move overlapping requirement out of service_id description
isabelle-dr Jul 27, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
Added timeframes
  • Loading branch information
omar-kabbani committed Aug 4, 2022
commit 94d15cb8410463db30c8a20d63ab1d045b4c33cc
27 changes: 23 additions & 4 deletions gtfs/spec/en/reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ This document defines the format and structure of the files that comprise a GTFS
- [stop\_times.txt](#stop_timestxt)
- [calendar.txt](#calendartxt)
- [calendar\_dates.txt](#calendar_datestxt)
- [timeframes.txt](#timeframestxt)
- [fare\_attributes.txt](#fare_attributestxt)
- [fare\_rules.txt](#fare_rulestxt)
- [fare\_products.txt](#fare_productstxt)
Expand Down Expand Up @@ -300,6 +301,18 @@ The [calendar_dates.txt](#calendar_datestxt) table explicitly activates or disab
| `date` | Date | **Required** | Date when service exception occurs. |
| `exception_type` | Enum | **Required** | Indicates whether service is available on the date specified in the date field. Valid options are:<br><br> `1` - Service has been added for the specified date.<br>`2` - Service has been removed for the specified date.<hr>*Example: Suppose a route has one set of trips available on holidays and another set of trips available on all other days. One `service_id` could correspond to the regular service schedule and another `service_id` could correspond to the holiday schedule. For a particular holiday, the [calendar_dates.txt](#calendar_datestxt) file could be used to add the holiday to the holiday `service_id` and to remove the holiday from the regular `service_id` schedule.* |

### timeframes.txt

File: **Optional**

Primary key (`timeframe_id`, `start_time`, `end_time`)

| Field Name | Type | Presence | Description |
| ------ | ------ | ------ | ------ |
| `timeframe_id` | ID | **Required** | Identifies a timeframe or set of timeframes. |
| `start_time` | Time | **Required** | Defines the beginning of a timeframe. |
| `end_time` | Time | **Required** | Defines the end of a timeframe. |

### fare_attributes.txt

File: **Optional**
Expand Down Expand Up @@ -362,7 +375,7 @@ To describe the different types of tickets or fares that can be purchased by rid

File: **Optional**

Primary Key (`network_id, from_area_id, to_area_id, fare_product_id`)
Primary Key (`network_id, from_area_id, to_area_id, from_timeframe_id, to_timeframe_id, fare_product_id`)

Fare rules for individual legs of travel.

Expand All @@ -373,14 +386,18 @@ To process the cost of a leg:
1. The file `fare_leg_rules.txt` must be filtered by the fields that define the characteristics of travel, these fields are:
- `fare_leg_rules.network_id`
- `fare_leg_rules.from_area_id`
- `fare_leg_rules.to_area_id`<br/>
- `fare_leg_rules.to_area_id`
- `fare_leg_rules.from_timeframe_id`
- `fare_leg_rules.to_timeframe_id`<br/>
<br/>

2. If the leg exactly matches a record in `fare_leg_rules.txt` based on the characteristics of travel, that record must be processed to determine the cost of the leg.
3. If no exact matches are found, then empty entries in `fare_leg_rules.network_id`, `fare_leg_rules.from_area_id`, and `fare_leg_rules.to_area_id` must be checked to process the cost of the leg:
3. If no exact matches are found, then empty entries in `fare_leg_rules.network_id`, `fare_leg_rules.from_area_id`, `fare_leg_rules.to_area_id`, `fare_leg_rules.from_timeframe_id`, and `fare_leg_rules.to_timeframe_id` must be checked to process the cost of the leg:
- An empty entry in `fare_leg_rules.network_id` corresponds to all networks defined in `routes.txt` excluding the ones listed under `fare_leg_rules.network_id`
- An empty entry in `fare_leg_rules.from_area_id` corresponds to all areas defined in `areas.area_id` excluding the ones listed under `fare_leg_rules.from_area_id`
- An empty entry in `fare_leg_rules.to_area_id` corresponds to all areas defined in `areas.area_id` excluding the ones listed under `fare_leg_rules.to_area_id`<br/>
- An empty entry in `fare_leg_rules.to_area_id` corresponds to all areas defined in `areas.area_id` excluding the ones listed under `fare_leg_rules.to_area_id`
- An empty entry in `fare_leg_rules.from_timeframe_id` corresponds to all timeframes defined in `timeframes.timeframe_id` excluding the ones listed under `fare_leg_rules.from_timeframe_id`
isabelle-dr marked this conversation as resolved.
Show resolved Hide resolved
- An empty entry in `fare_leg_rules.to_timeframe_id` corresponds to all timeframes defined in `timeframes.timeframe_id` excluding the ones listed under `fare_leg_rules.to_timeframe_id`<br/>
<br/>

4. If the leg does not match any of the rules described above, then the fare is unknown.
Expand All @@ -393,6 +410,8 @@ To process the cost of a leg:
| `network_id` | Foreign ID referencing `routes.network_id` | Optional | Identifies a route network that applies for the fare leg rule.<br><br>If there are no matching `fare_leg_rules.network_id` values to the `network_id` being filtered, empty `fare_leg_rules.network_id` will be matched by default.<br><br> An empty entry in `fare_leg_rules.network_id` corresponds to all networks defined in `routes.txt` excluding the ones listed under `fare_leg_rules.network_id` |
| `from_area_id` | Foreign ID referencing `areas.area_id` | Optional | Identifies a departure area.<br><br>If there are no matching `fare_leg_rules.from_area_id` values to the `area_id` being filtered, empty `fare_leg_rules.from_area_id` will be matched by default. <br><br>An empty entry in `fare_leg_rules.from_area_id` corresponds to all areas defined in `areas.area_id` excluding the ones listed under `fare_leg_rules.from_area_id` |
| `to_area_id` | Foreign ID referencing `areas.area_id` | Optional | Identifies an arrival area.<br><br>If there are no matching `fare_leg_rules.to_area_id` values to the `area_id` being filtered, empty `fare_leg_rules.to_area_id` will be matched by default.<br><br> An empty entry in `fare_leg_rules.to_area_id` corresponds to all areas defined in `areas.area_id` excluding the ones listed under `fare_leg_rules.to_area_id` |
| `from_timeframe_id` | Foreign ID referencing `timeframes.timeframe_id` | Optional | Defines a departure timeframe for the fare leg rule.<br><br>If there are no matching `fare_leg_rules.from_timeframe_id` values to the `timeframe_id` being filtered, empty `fare_leg_rules.from_timeframe_id` will be matched by default. <br><br>An empty entry in `fare_leg_rules.from_timeframe_id` corresponds to all timeframes defined in `timeframes.timeframe_id` excluding the ones listed under `fare_leg_rules.from_timeframe_id` |
| `to_timeframe_id` | Foreign ID referencing `timeframes.timeframe_id` | Optional | Defines an arrival timeframe for the fare leg rule.<br><br>If there are no matching `fare_leg_rules.to_timeframe_id` values to the `timeframe_id` being filtered, empty `fare_leg_rules.to_timeframe_id` will be matched by default. <br><br>An empty entry in `fare_leg_rules.to_timeframe_id` corresponds to all timeframes defined in `timeframes.timeframe_id` excluding the ones listed under `fare_leg_rules.to_timeframe_id` |
| `fare_product_id` | Foreign ID referencing `fare_products.fare_product_id` | **Required** | The fare product required to travel the leg. |

### fare_transfer_rules.txt
Expand Down