diff --git a/docs/en/documentation/realtime/change-history/revision-history.md b/docs/en/documentation/realtime/change-history/revision-history.md
index 73801f67..755b1409 100644
--- a/docs/en/documentation/realtime/change-history/revision-history.md
+++ b/docs/en/documentation/realtime/change-history/revision-history.md
@@ -2,6 +2,10 @@
### Revision History
+#### December 2024
+
+* Added new string field that matches feed_info.feed_version from the GTFS Schedule feed that the realtime data is based on. See [discussion](https://github.com/google/transit/pull/434).
+
#### October 2024
* Clarification and small changes for Trip Modifications. See [discussion](https://github.com/google/transit/pull/497).
diff --git a/docs/en/documentation/realtime/gtfs-realtime.proto b/docs/en/documentation/realtime/gtfs-realtime.proto
index 501c15d8..34a8a20a 100644
--- a/docs/en/documentation/realtime/gtfs-realtime.proto
+++ b/docs/en/documentation/realtime/gtfs-realtime.proto
@@ -73,6 +73,11 @@ message FeedHeader {
// January 1st 1970 00:00:00 UTC).
optional uint64 timestamp = 3;
+ // String that matches the feed_info.feed_version from the GTFS feed that the real
+ // time data is based on. Consumers can use this to identify which GTFS feed is
+ // currently active or when a new one is available to download.
+ optional string feed_version = 4;
+
// The extensions namespace allows 3rd-party developers to extend the
// GTFS Realtime specification in order to add and evaluate new features and
// modifications to the spec.
diff --git a/docs/en/documentation/realtime/proto.md b/docs/en/documentation/realtime/proto.md
index d33bd51f..93dd4eca 100644
--- a/docs/en/documentation/realtime/proto.md
+++ b/docs/en/documentation/realtime/proto.md
@@ -77,6 +77,11 @@ message FeedHeader {
// January 1st 1970 00:00:00 UTC).
optional uint64 timestamp = 3;
+ // String that matches the feed_info.feed_version from the GTFS feed that the real
+ // time data is based on. Consumers can use this to identify which GTFS feed is
+ // currently active or when a new one is available to download.
+ optional string feed_version = 4;
+
// The extensions namespace allows 3rd-party developers to extend the
// GTFS Realtime specification in order to add and evaluate new features and
// modifications to the spec.
diff --git a/docs/en/documentation/realtime/reference.md b/docs/en/documentation/realtime/reference.md
index ea27ebb6..4795a669 100644
--- a/docs/en/documentation/realtime/reference.md
+++ b/docs/en/documentation/realtime/reference.md
@@ -107,6 +107,7 @@ Metadata about a feed, included in feed messages.
| **gtfs_realtime_version** | [string](https://protobuf.dev/programming-guides/proto2/#scalar) | Required | One | Version of the feed specification. The current version is 2.0. |
| **incrementality** | [Incrementality](#enum-incrementality) | Required | One |
| **timestamp** | [uint64](https://protobuf.dev/programming-guides/proto2/#scalar) | Required | One | This timestamp identifies the moment when the content of this feed has been created (in server time). In POSIX time (i.e., number of seconds since January 1st 1970 00:00:00 UTC). To avoid time skew between systems producing and consuming realtime information it is strongly advised to derive timestamp from a time server. It is completely acceptable to use Stratum 3 or even lower strata servers since time differences up to a couple of seconds are tolerable. |
+| **feed_version** | [string](https://protobuf.dev/programming-guides/proto2/#scalar) | Optional | One | String that matches the `feed_info.feed_version` from the GTFS feed that the realtime data is based on. Consumers can use this to identify which GTFS feed is currently active or when a new one is available to download. |
### _enum_ Incrementality
diff --git a/docs/en/documentation/schedule/change-history/revision-history.md b/docs/en/documentation/schedule/change-history/revision-history.md
index f7c39a3b..aae48503 100644
--- a/docs/en/documentation/schedule/change-history/revision-history.md
+++ b/docs/en/documentation/schedule/change-history/revision-history.md
@@ -2,6 +2,9 @@
### Revision History
+#### December 2024
+* Added `fare_leg_join_rules.txt` and introduced the concept of Effective Fare Leg. See [discussion](https://github.com/google/transit/pull/439).
+
#### September 2024
* Clarify presence and use of from/to_stop_id & from/to_trip_id fields in transfers.txt. See [discussion](https://github.com/google/transit/pull/455).
* Added validity rules for polygons in GeoJSON files. See [discussion](https://github.com/google/transit/pull/476)
diff --git a/docs/en/documentation/schedule/reference.md b/docs/en/documentation/schedule/reference.md
index 900491ce..b5a5590a 100644
--- a/docs/en/documentation/schedule/reference.md
+++ b/docs/en/documentation/schedule/reference.md
@@ -1,6 +1,6 @@
## General Transit Feed Specification Reference
-**Revised Oct 16, 2024. See [Revision History](../change_history/revision_history) for more details.**
+**Revised Dec 5, 2024. See [Revision History](../change-history/revision-history) for more details.**
This document defines the format and structure of the files that comprise a GTFS dataset.
@@ -15,16 +15,17 @@ This document defines the format and structure of the files that comprise a GTFS
- [stops.txt](#stopstxt)
- [routes.txt](#routestxt)
- [trips.txt](#tripstxt)
- - [stop\_times.txt](#stop_timestxt)
+ - [stop_times.txt](#stop_timestxt)
- [calendar.txt](#calendartxt)
- - [calendar\_dates.txt](#calendar_datestxt)
- - [fare\_attributes.txt](#fare_attributestxt)
- - [fare\_rules.txt](#fare_rulestxt)
+ - [calendar_dates.txt](#calendar_datestxt)
+ - [fare_attributes.txt](#fare_attributestxt)
+ - [fare_rules.txt](#fare_rulestxt)
- [timeframes.txt](#timeframestxt)
- - [fare\_media.txt](#fare_mediatxt)
- - [fare\_products.txt](#fare_productstxt)
- - [fare\_leg\_rules.txt](#fare_leg_rulestxt)
- - [fare\_transfer\_rules.txt](#fare_transfer_rulestxt)
+ - [fare_media.txt](#fare_mediatxt)
+ - [fare_products.txt](#fare_productstxt)
+ - [fare_leg_rules.txt](#fare_leg_rulestxt)
+ - [fare_leg_join_rules.txt](#fare_leg_join_rulestxt)
+ - [fare_transfer_rules.txt](#fare_transfer_rulestxt)
- [areas.txt](#areastxt)
- [stop_areas.txt](#stop_areastxt)
- [networks.txt](#networkstxt)
@@ -39,7 +40,7 @@ This document defines the format and structure of the files that comprise a GTFS
- [locations.geojson](#locationsgeojson)
- [booking_rules.txt](#booking_rulestxt)
- [translations.txt](#translationstxt)
- - [feed\_info.txt](#feed_infotxt)
+ - [feed_info.txt](#feed_infotxt)
- [attributions.txt](#attributionstxt)
## Document Conventions
@@ -60,6 +61,8 @@ This section defines terms that are used throughout this document.
* **Journey** - Overall travel from origin to destination, including all legs and transfers in-between.
* **Sub-journey** - Two or more legs that comprise a subset of a journey.
* **Fare product** - Purchassable fare products that can be used to pay for or validate travel.
+* **Effective Fare Leg** - A sub-journey of two or more legs that should be treated as a single leg for matching rules in [fare_leg_rules.txt](#fare_leg_rulestxt) for the purposes of fare calculation.
+
### Presence
Presence conditions applicable to fields and files:
@@ -123,6 +126,7 @@ This specification defines the following files:
| [fare_media.txt](#fare_mediatxt) | Optional | To describe the fare media that can be employed to use fare products.
File [fare_media.txt](#fare_mediatxt) describes concepts that are not represented in [fare_attributes.txt](#fare_attributestxt) and [fare_rules.txt](#fare_rulestxt). As such, the use of [fare_media.txt](#fare_mediatxt) is entirely separate from files [fare_attributes.txt](#fare_attributestxt) and [fare_rules.txt](#fare_rulestxt). |
| [fare_products.txt](#fare_productstxt) | Optional | To describe the different types of tickets or fares that can be purchased by riders.
File [fare_products.txt](#fare_productstxt) describes fare products that are not represented in [fare_attributes.txt](#fare_attributestxt) and [fare_rules.txt](#fare_rulestxt). As such, the use of [fare_products.txt](#fare_productstxt) is entirely separate from files [fare_attributes.txt](#fare_attributestxt) and [fare_rules.txt](#fare_rulestxt). |
| [fare_leg_rules.txt](#fare_leg_rulestxt) | Optional | Fare rules for individual legs of travel.
File [fare_leg_rules.txt](#fare_leg_rulestxt) provides a more detailed method for modeling fare structures. As such, the use of [fare_leg_rules.txt](#fare_leg_rulestxt) is entirely separate from files [fare_attributes.txt](#fare_attributestxt) and [fare_rules.txt](#fare_rulestxt). |
+| [fare_leg_join_rules.txt](#fare_leg_join_rulestxt) | Optional | Rules for defining two or more legs should be considered as a single **effective fare leg** for the purposes of matching against rules in [fare_leg_rules.txt](#fare_leg_rulestxt)|
| [fare_transfer_rules.txt](#fare_transfer_rulestxt) | Optional | Fare rules for transfers between legs of travel.
Along with [fare_leg_rules.txt](#fare_leg_rulestxt), file [fare_transfer_rules.txt](#fare_transfer_rulestxt) provides a more detailed method for modeling fare structures. As such, the use of [fare_transfer_rules.txt](#fare_transfer_rulestxt) is entirely separate from files [fare_attributes.txt](#fare_attributestxt) and [fare_rules.txt](#fare_rulestxt). |
| [areas.txt](#areastxt) | Optional | Area grouping of locations. |
| [stop_areas.txt](#stop_areastxt) | Optional | Rules to assign stops to areas. |
@@ -480,14 +484,33 @@ To process the cost of a leg:
| Field Name | Type | Presence | Description |
| ------ | ------ | ------ | ------ |
| `leg_group_id` | ID | Optional | Identifies a group of entries in [fare_leg_rules.txt](#fare_leg_rulestxt).
Used to describe fare transfer rules between `fare_transfer_rules.from_leg_group_id` and `fare_transfer_rules.to_leg_group_id`.
Multiple entries in [fare_leg_rules.txt](#fare_leg_rulestxt) may belong to the same `fare_leg_rules.leg_group_id`.
The same entry in [fare_leg_rules.txt](#fare_leg_rulestxt) (not including `fare_leg_rules.leg_group_id`) must not belong to multiple `fare_leg_rules.leg_group_id`.|
-| `network_id` | Foreign ID referencing `routes.network_id` or `networks.network_id`| Optional | Identifies a route network that applies for the fare leg rule.
If the `rule_priority` field does not exist AND 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.
An empty entry in `fare_leg_rules.network_id` corresponds to all networks defined in [routes.txt](#routestxt) or [networks.txt](#networkstxt) excluding the ones listed under `fare_leg_rules.network_id`
If the `rule_priority` field exists in the file, an empty `fare_leg_rules.network_id` indicates that the route network of the leg does not affect the matching of this rule. |
-| `from_area_id` | Foreign ID referencing `areas.area_id` | Optional | Identifies a departure area.
If the `rule_priority` field does not exist AND 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.
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`
If the `rule_priority` field exists in the file, an empty `fare_leg_rules.from_area_id` indicates that the departure area of the leg does not affect the matching of this rule. |
-| `to_area_id` | Foreign ID referencing `areas.area_id` | Optional | Identifies an arrival area.
If the `rule_priority` field does not exist AND 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.
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`
If the `rule_priority` field exists in the file, an empty `fare_leg_rules.to_area_id` indicates that the arrival area of the leg does not affect the matching of this rule. |
-| `from_timeframe_group_id` | Foreign ID referencing `timeframes.timeframe_group_id` | Optional | Defines the timeframe for the fare validation event at the start of the fare leg.
The “start time” of the fare leg is the time at which the event is scheduled to occur. For example, the time could be the scheduled departure time of a bus at the start of a fare leg where the rider boards and validates their fare. For the rule matching semantics below, the start time is computed in local time, as determined by [Local Time Semantics](#timeframe-local-time-semantics) of [timeframes.txt](#timeframestxt). The stop or station of the fare leg’s departure event should be used for timezone resolution, where appropriate.
For a fare leg rule that specifies a `from_timeframe_group_id`, that rule will match a particular leg if there exists at least one record in [timeframes.txt](#timeframestxt) where all of the following conditions are true
- The value of `timeframe_group_id` is equal to the `from_timeframe_group_id` value.
- The set of days identified by the record’s `service_id` contains the “current day” of the fare leg’s start time.
- The “time-of-day” of the fare leg's start time is greater than or equal to the record’s `timeframes.start_time` value and less than the `timeframes.end_time` value.
An empty `fare_leg_rules.from_timeframe_group_id` indicates that the start time of the leg does not affect the matching of this rule. |
-| `to_timeframe_group_id` | Foreign ID referencing `timeframes.timeframe_group_id` | Optional | Defines the timeframe for the fare validation event at the end of the fare leg.
The “end time” of the fare leg is the time at which the event is scheduled to occur. For example, the time could be the scheduled arrival time of a bus at the end of a fare leg where the rider gets off and validates their fare. For the rule matching semantics below, the end time is computed in local time, as determined by [Local Time Semantics](#timeframe-local-time-semantics) of [timeframes.txt](#timeframestxt). The stop or station of the fare leg’s arrival event should be used for timezone resolution, where appropriate.
For a fare leg rule that specifies a `to_timeframe_group_id`, that rule will match a particular leg if there exists at least one record in [timeframes.txt](#timeframestxt) where all of the following conditions are true
- The value of `timeframe_group_id` is equal to the `to_timeframe_group_id` value.
- The set of days identified by the record’s `service_id` contains the “current day” of the fare leg’s end time.
- The “time-of-day” of the fare leg's end time is greater than or equal to the record’s `timeframes.start_time` value and less than the `timeframes.end_time` value.
An empty `fare_leg_rules.to_timeframe_group_id` indicates that the end time of the leg does not affect the matching of this rule. |
+| `network_id` | Foreign ID referencing `routes.network_id` or `networks.network_id`| Optional | Identifies a route network that applies for the fare leg rule.
If the `rule_priority` field does not exist AND 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.
An empty entry in `fare_leg_rules.network_id` corresponds to all networks defined in [routes.txt](#routestxt) or [networks.txt](#networkstxt) excluding the ones listed under `fare_leg_rules.network_id`
If the `rule_priority` field exists in the file, an empty `fare_leg_rules.network_id` indicates that the route network of the leg does not affect the matching of this rule.
When matching against an [effective fare leg of multiple legs](#fare_leg_join_rulestxt), each leg must have the same `network_id` which will be used for matching. |
+| `from_area_id` | Foreign ID referencing `areas.area_id` | Optional | Identifies a departure area.
If the `rule_priority` field does not exist AND 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.
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`
If the `rule_priority` field exists in the file, an empty `fare_leg_rules.from_area_id` indicates that the departure area of the leg does not affect the matching of this rule.
When matching against an [effective fare leg of multiple legs](#fare_leg_join_rulestxt), the first leg of the effective fare leg is used for determining the departure area. |
+| `to_area_id` | Foreign ID referencing `areas.area_id` | Optional | Identifies an arrival area.
If the `rule_priority` field does not exist AND 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.
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`
If the `rule_priority` field exists in the file, an empty `fare_leg_rules.to_area_id` indicates that the arrival area of the leg does not affect the matching of this rule.
When matching against an [effective fare leg of multiple legs](#fare_leg_join_rulestxt), the last leg of the effective fare leg is used for determining the arrival area. |
+| `from_timeframe_group_id` | Foreign ID referencing `timeframes.timeframe_group_id` | Optional | Defines the timeframe for the fare validation event at the start of the fare leg.
The “start time” of the fare leg is the time at which the event is scheduled to occur. For example, the time could be the scheduled departure time of a bus at the start of a fare leg where the rider boards and validates their fare. For the rule matching semantics below, the start time is computed in local time, as determined by [Local Time Semantics](#localtimesemantics) of [timeframes.txt](#timeframestxt). The stop or station of the fare leg’s departure event should be used for timezone resolution, where appropriate.
For a fare leg rule that specifies a `from_timeframe_group_id`, that rule will match a particular leg if there exists at least one record in [timeframes.txt](#timeframestxt) where all of the following conditions are true
- The value of `timeframe_group_id` is equal to the `from_timeframe_group_id` value.
- The set of days identified by the record’s `service_id` contains the “current day” of the fare leg’s start time.
- The “time-of-day” of the fare leg's start time is greater than or equal to the record’s `timeframes.start_time` value and less than the `timeframes.end_time` value.
An empty `fare_leg_rules.from_timeframe_group_id` indicates that the start time of the leg does not affect the matching of this rule.
When matching against an [effective fare leg of multiple legs](#fare_leg_join_rulestxt), the first leg of the effective fare leg is used for determining the starting fare validation event. |
+| `to_timeframe_group_id` | Foreign ID referencing `timeframes.timeframe_group_id` | Optional | Defines the timeframe for the fare validation event at the end of the fare leg.
The “end time” of the fare leg is the time at which the event is scheduled to occur. For example, the time could be the scheduled arrival time of a bus at the end of a fare leg where the rider gets off and validates their fare. For the rule matching semantics below, the end time is computed in local time, as determined by [Local Time Semantics](#localtimesemantics) of [timeframes.txt](#timeframestxt). The stop or station of the fare leg’s arrival event should be used for timezone resolution, where appropriate.
For a fare leg rule that specifies a `to_timeframe_group_id`, that rule will match a particular leg if there exists at least one record in [timeframes.txt](#timeframestxt) where all of the following conditions are true
- The value of `timeframe_group_id` is equal to the `to_timeframe_group_id` value.
- The set of days identified by the record’s `service_id` contains the “current day” of the fare leg’s end time.
- The “time-of-day” of the fare leg's end time is greater than or equal to the record’s `timeframes.start_time` value and less than the `timeframes.end_time` value.
An empty `fare_leg_rules.to_timeframe_group_id` indicates that the end time of the leg does not affect the matching of this rule.
When matching against an [effective fare leg of multiple legs](#fare_leg_join_rulestxt), the last leg of the effective fare leg is used for determining the ending fare validation event. |
| `fare_product_id` | Foreign ID referencing `fare_products.fare_product_id` | **Required** | The fare product required to travel the leg. |
| `rule_priority` | Non-negative integer | Optional | Defines the order of priority in which matching rules are applied to legs, allowing certain rules to take precedence over others. When multiple entries in `fare_leg_rules.txt` match, the rule or set of rules with the highest value for `rule_priority` will be selected.
An empty value for `rule_priority` is treated as zero. |
+### fare_leg_join_rules.txt
+
+File: **Optional**
+
+Primary Key (`from_network_id, to_network_id, from_stop_id, to_stop_id`)
+
+For a sub-journey of two consecutive legs with a transfer, if the transfer matches all matching predicates specified by a particular record in the file, then those two legs should be considered as a single **effective fare leg** for the purposes of matching against rules in [`fare_leg_rules.txt`](#fare_leg_rulestxt).
+
+- Unless overridden explicitly by `from_stop_id` and `to_stop_id`, the last station of the pre-transfer leg and the first station of the post-transfer leg must be the same for the record.
+- If a matching predicate field value is blank or unspecified for a particular record in the file, then that field should be ignored for the purposes of matching.
+- When a sub-journey contains consecutive transfers that each match a join rule, then the entire sub-journey should be considered as a single **effective fare leg**.
+
+| Field Name | Type | Presence | Description |
+| ------ | ------ | ------ | ------ |
+| `from_network_id` | Foreign ID referencing `routes.network_id` or `networks.network_id`| **Required** | Matches a pre-transfer leg that uses the specified route network. If specified, the same `to_network_id` must also be specified. |
+| `to_network_id` | Foreign ID referencing `routes.network_id` or `networks.network_id`| **Required** | Matches a post-transfer leg that uses the specified route network. If specified, the same `from_network_id` must also be specified. |
+| `from_stop_id` | Foreign ID referencing `stops.stop_id`| **Conditionally Required** | Matches a pre-transfer leg that ends at the specified stop (`location_type=0` or empty) or station (`location_type=1`).
Conditionally Required:
- **Required** if `to_stop_id` is defined.
- Optional otherwise. |
+| `to_stop_id` | Foreign ID referencing `stops.stop_id`| **Conditionally Required** | Matches a post-transfer leg that starts at the specified stop (`location_type=0` or empty) or station (`location_type=1`).
Conditionally Required:
- **Required** if `from_stop_id` is defined.
- Optional otherwise. |
+
### fare_transfer_rules.txt
File: **Optional**
diff --git a/docs/es/documentation/realtime/change-history/revision-history.md b/docs/es/documentation/realtime/change-history/revision-history.md
index 379d0971..204ff47d 100644
--- a/docs/es/documentation/realtime/change-history/revision-history.md
+++ b/docs/es/documentation/realtime/change-history/revision-history.md
@@ -2,13 +2,17 @@
## Historial de revisiones
+#### Diciembre de 2024
+
+* Se agregó un nuevo campo de string que coincide con feed_info.feed_version de la fuente de GTFS Schedule en la que se basan los datos en tiempo real. Consulte la [discusión](https://github.com/google/transit/pull/434).
+
#### Octubre de 2024
* Aclaraciones y pequeños cambios para las modificaciones de viaje (Trip Modifications). Consulte la [discusión](https://github.com/google/transit/pull/497).
#### Marzo 2024
- * Modificaciones de viaje adoptadas. Consulte la [discusión](https://github.com/google/transit/pull/403).
+ * Modificaciones de viaje (trip modifications) adoptado. Consulte la [discusión](https://github.com/google/transit/pull/403).
#### Noviembre 2022
@@ -16,7 +20,7 @@
#### Julio 2022
- * Añadir cause_detail y effect_detail. Ver [discusión](https://github.com/google/transit/pull/332)
+ * Se agregó cause_detail y effect_detail. Ver [discusión](https://github.com/google/transit/pull/332)
* Se agregó la capacidad de especificar un valor accesible para sillas de ruedas en un TripUpdate. VehicleDescriptor. Consulte la [discusión](https://github.com/google/transit/pull/340).
#### Septiembre 2021
@@ -25,11 +29,11 @@
#### Agosto de 2021
- * Agregar GTFS-NewShapes como experimental. Consulte la [discusión](https://github.com/google/transit/pull/272).
+ * Se agregó GTFS-NewShapes como experimental. Consulte la [discusión](https://github.com/google/transit/pull/272).
#### Abril de 2021
- * Agregar return_occupancy_status a TripUpdate. Consulte la [discusión](https://github.com/google/transit/pull/260).
+ * Se agregó return_occupancy_status a TripUpdate. Consulte la [discusión](https://github.com/google/transit/pull/260).
#### Febrero 2021
@@ -37,26 +41,26 @@
#### Septiembre 2020
- * Soporta aglomeración de varios autos. Consulte la [discusión](https://github.com/google/transit/pull/237).
+ * Soporte para la aglomeración de varios autos (multi-car crowding). Consulte la [discusión](https://github.com/google/transit/pull/237).
#### Abril 2020
- *Asignaciones de parada de soporte. Consulte la [discusión](https://github.com/google/transit/pull/219).
+ * Soporte para asignaciones de parada. Consulte la [discusión](https://github.com/google/transit/pull/219).
#### Julio 2020
- * Soporta viajes DUPLICADOS. Consulte la [discusión](https://github.com/google/transit/pull/221).
+ * Soporte para viajes DUPLICADOS. Consulte la [discusión](https://github.com/google/transit/pull/221).
* Alerta tts_header_text, tts_description_text ya no es experimental. Consulte la [discusión](https://github.com/google/transit/pull/229).
- * Etiquete los viajes GTFS-RT AGREGADOS como no completamente especificados. Consulte la [discusión](https://github.com/google/transit/pull/230).
+ * Etiqueta los viajes GTFS-RT AGREGADOS como no completamente especificados. Consulte la [discusión](https://github.com/google/transit/pull/230).
#### Abril 2020
- * Marcar SeverityLevel como final. Consulte la [discusión](https://github.com/google/transit/pull/214).
+ * Marca SeverityLevel como final. Consulte la [discusión](https://github.com/google/transit/pull/214).
* Agregar porcentaje_ocupación. Consulte la [discusión](https://github.com/google/transit/pull/213).
#### 12 de marzo de 2020
- *Recomendar proporcionar predicciones de TripUpdate para el próximo viaje en bloque. Consulte la [discusión](https://github.com/google/transit/pull/206).
+ * Recomendar proporcionar predicciones de TripUpdate para el próximo viaje en bloque. Consulte la [discusión](https://github.com/google/transit/pull/206).
#### Agosto de 2019
@@ -65,13 +69,13 @@
#### Mayo de 2019
- * Agregar efecto de alerta de problema de accesibilidad. Consulte la [discusión](https://github.com/google/transit/pull/164).
+ * Se agregó efecto de alerta de problema de accesibilidad. Consulte la [discusión](https://github.com/google/transit/pull/164).
#### Febrero de 2019
- * Agregar opción de efecto NO_EFFECT para alerta de servicio GTFS en tiempo real. Consulte la [discusión](https://github.com/google/transit/pull/137).
- * Agregar un nuevo campo opcional SeverityLevel al feed de alertas de servicio. Consulte la [discusión](https://github.com/google/transit/pull/136).
- * Agregar nuevos campos opcionales para la funcionalidad de Texto a Voz en el feed de alertas de servicio. Consulte la [discusión](https://github.com/google/transit/pull/135).
+ * Se agregó opción de efecto NO_EFFECT para alerta de servicio GTFS en tiempo real. Consulte la [discusión](https://github.com/google/transit/pull/137).
+ * Se agregó un nuevo campo opcional SeverityLevel al feed de alertas de servicio. Consulte la [discusión](https://github.com/google/transit/pull/136).
+ * Se agregó nuevos campos opcionales para la funcionalidad de Texto a Voz en el feed de alertas de servicio. Consulte la [discusión](https://github.com/google/transit/pull/135).
#### Abril 2018
diff --git a/docs/es/documentation/realtime/gtfs-realtime.proto b/docs/es/documentation/realtime/gtfs-realtime.proto
index 501c15d8..34a8a20a 100644
--- a/docs/es/documentation/realtime/gtfs-realtime.proto
+++ b/docs/es/documentation/realtime/gtfs-realtime.proto
@@ -73,6 +73,11 @@ message FeedHeader {
// January 1st 1970 00:00:00 UTC).
optional uint64 timestamp = 3;
+ // String that matches the feed_info.feed_version from the GTFS feed that the real
+ // time data is based on. Consumers can use this to identify which GTFS feed is
+ // currently active or when a new one is available to download.
+ optional string feed_version = 4;
+
// The extensions namespace allows 3rd-party developers to extend the
// GTFS Realtime specification in order to add and evaluate new features and
// modifications to the spec.
diff --git a/docs/es/documentation/realtime/proto.md b/docs/es/documentation/realtime/proto.md
index a29f7af6..6c9ebccd 100644
--- a/docs/es/documentation/realtime/proto.md
+++ b/docs/es/documentation/realtime/proto.md
@@ -77,6 +77,11 @@ message FeedHeader {
// January 1st 1970 00:00:00 UTC).
optional uint64 timestamp = 3;
+ // String that matches the feed_info.feed_version from the GTFS feed that the real
+ // time data is based on. Consumers can use this to identify which GTFS feed is
+ // currently active or when a new one is available to download.
+ optional string feed_version = 4;
+
// The extensions namespace allows 3rd-party developers to extend the
// GTFS Realtime specification in order to add and evaluate new features and
// modifications to the spec.
diff --git a/docs/es/documentation/realtime/reference.md b/docs/es/documentation/realtime/reference.md
index b57cf149..137ae454 100644
--- a/docs/es/documentation/realtime/reference.md
+++ b/docs/es/documentation/realtime/reference.md
@@ -107,6 +107,7 @@
| **gtfs_realtime_version** | [string](https://protobuf.dev/programming-guides/proto2/#scalar) | Obligatorio | Uno | Versión de la especificación del feed. La versión actual es 2.0. |
| **incrementality** | [Incrementality](#enum-incrementality) | Obligatorio | Uno |
| **timestamp** | [uint64](https://protobuf.dev/programming-guides/proto2/#scalar) | Obligatorio | Uno | Esta marca de tiempo identifica el momento en que se creó el contenido de este feed (en hora del servidor). En hora POSIX (es decir, número de segundos desde el 1 de enero de 1970 a las 00:00:00 UTC). Para evitar el desfase temporal entre los sistemas que producen y consumen información en tiempo real, se recomienda encarecidamente derivar la marca de tiempo de un servidor de tiempo. Es completamente aceptable utilizar servidores de estrato 3 o incluso de estratos inferiores, ya que las diferencias horarias de hasta un par de segundos son tolerables. |
+ |**feed_version**| [string](https://protobuf.dev/programming-guides/proto2/#scalar) | Opcional | Una | Cadena que coincide con `feed_info.feed_version` de la fuente GTFS en la que se basan los datos en tiempo real. Los consumidores pueden usar esto para identificar qué fuente GTFS está activa actualmente o cuándo hay una nueva disponible para descargar. |
### _enum_ Incrementality
diff --git a/docs/es/documentation/schedule/change-history/revision-history.md b/docs/es/documentation/schedule/change-history/revision-history.md
index fef35cbf..13f9c001 100644
--- a/docs/es/documentation/schedule/change-history/revision-history.md
+++ b/docs/es/documentation/schedule/change-history/revision-history.md
@@ -1,7 +1,10 @@
-# Calendario GTFS
+# GTFS Schedule
### Historial de revisiones
+#### Diciembre de 2024
+* Se agregó `fare_leg_join_rules.txt` e introdujo el concepto de tramo de tarifa efectiva. Consulte [discusión](https://github.com/google/transit/pull/439).
+
#### Septiembre de 2024
* Aclarar la presencia y el uso de los campos from/to_stop_id y from/to_trip_id en transfers.txt. Ver [discusión](https://github.com/google/transit/pull/455).
* Se agregaron reglas de validez para polígonos en archivos GeoJSON. Ver [discusión](https://github.com/google/transit/pull/476)
diff --git a/docs/es/documentation/schedule/reference.md b/docs/es/documentation/schedule/reference.md
index 402c86fd..e2ffea82 100644
--- a/docs/es/documentation/schedule/reference.md
+++ b/docs/es/documentation/schedule/reference.md
@@ -1,6 +1,6 @@
## Referencia de General Transit Feed Specification
- **Revisado el 16 de octubre de 2024. Consulte [Historial de revisiones](../change-history/revision_history) para obtener más detalles.**
+ **Revisado el 5 de diciembre de 2024. Consulte [Historial de revisiones](../change-history/revision-history) para obtener más detalles.**
Este documento define el formato y la estructura de los archivos que componen un conjunto de datos GTFS.
@@ -15,16 +15,17 @@
- [stops.txt](#stopstxt)
- [routes.txt](#routestxt)
- [trips.txt](#tripstxt)
- - [parada\_times.txt](#stop_timestxt)
+ - [parada_times.txt](#stop_timestxt)
- [calendar.txt](#calendartxt)
- - [calendar\_dates.txt](#calendar_datestxt)
- - [fare\_attributes.txt](#fare_attributestxt)
- - [fare\_rules.txt](#fare_rulestxt)
+ - [calendar_dates.txt](#calendar_datestxt)
+ - [fare_attributes.txt](#fare_attributestxt)
+ - [fare_rules.txt](#fare_rulestxt)
- [timeframes.txt](#timeframestxt)
- - [fare\_media.txt](#fare_mediatxt)
- - [fare\_products.txt](#fare_productstxt)
- - [fare\ _leg\_rules.txt](#fare_leg_rulestxt)
- - [fare\_transfer\_rules.txt](#fare_transfer_rulestxt)
+ - [fare_media.txt](#fare_mediatxt)
+ - [fare_products.txt](#fare_productstxt)
+ - [fare_leg_rules.txt](#fare_leg_rulestxt)
+ - [fare_leg_join_rules.txt.txt](#fare_leg_join_rulestxt)
+ - [fare_transfer_rules.txt](#fare_transfer_rulestxt)
- [areas.txt](#areastxt)
- [stop_areas.txt](#stop_areastxt)
- [networks.txt](#networkstxt)
@@ -39,7 +40,7 @@
- [locations.geojson](#locationsgeojson)
- [booking_rules.txt](#booking_rulestxt)
- [translations.txt](#translationstxt)
- - [feed\ _info.txt](#feed_infotxt)
+ - [feed_info.txt](#feed_infotxt)
- [attributions.txt](#attributionstxt)
## Convenciones de documentos
@@ -60,6 +61,7 @@
* **Viaje**: viaje general desde el origen hasta el destino, incluidos todos los tramos y traslados intermedios.
* **Subviaje** - Dos o más tramos que componen un subconjunto de un viaje.
* **Producto tarifario**: productos tarifarios adquiribles que se pueden utilizar para pagar o validar el viaje.
+ * **Tramo de tarifa efectiva**: un subtrayecto de dos o más tramos que debe tratarse como un solo tramo para las reglas de coincidencia en [fare_leg_rules.txt](#fare_leg_rulestxt) para fines de cálculo de tarifas.
### Presencia
Condiciones de presencia aplicables a campos y archivos:
@@ -123,6 +125,7 @@ La **clave principal** de un conjunto de datos es el campo o combinación de cam
| [fare_media.txt](#fare_mediatxt) | Opcional | Describir los medios tarifarios que se pueden emplear para utilizar productos tarifarios.
El archivo [fare_media.txt](#fare_mediatxt) describe conceptos que no están representados en [fare_attributes.txt](#fare_attributestxt) y [fare_rules.txt](#fare_rulestxt). Como tal, el uso de [fare_media.txt](#fare_mediatxt) es completamente independiente de los archivos [fare_attributes.txt](#fare_attributestxt) y [fare_rules.txt](#fare_rulestxt). |
| [fare_products.txt](#fare_productstxt) | Opcional | Describir los diferentes tipos de billetes o tarifas que pueden adquirir los pasajeros.
El archivo [fare_products.txt](#fare_productstxt) describe productos de tarifas que no están representados en [fare_attributes.txt](#fare_attributestxt) y [fare_rules.txt](#fare_rulestxt). Como tal, el uso de [fare_products.txt](#fare_productstxt) es completamente independiente de los archivos [fare_attributes.txt](#fare_attributestxt) y [fare_rules.txt](#fare_rulestxt). |
| [fare_leg_rules.txt](#fare_leg_rulestxt) | Opcional | Reglas de tarifas para tramos individuales de viaje.
El archivo [fare_leg_rules.txt](#fare_leg_rulestxt) proporciona un método más detallado para modelar estructuras de tarifas. Como tal, el uso de [fare_leg_rules.txt](#fare_leg_rulestxt) es completamente independiente de los archivos [fare_attributes.txt](#fare_attributestxt) y [fare_rules.txt](#fare_rulestxt). |
+ | [fare_leg_join_rules.txt](#fare_leg_join_rulestxt) | Opcional | Las reglas para definir dos o más tramos deben considerarse como un solo **tramo de tarifa efectiva** para fines de comparación con las reglas en [fare_leg_rules.txt](#fare_leg_rulestxt)|
| [fare_transfer_rules.txt](#fare_transfer_rulestxt) | Opcional | Normas tarifarias para traslados entre tramos de viaje.
Junto con [fare_leg_rules.txt](#fare_leg_rulestxt), el archivo [fare_transfer_rules.txt](#fare_transfer_rulestxt) proporciona un método más detallado para modelar estructuras de tarifas. Como tal, el uso de [fare_transfer_rules.txt](#fare_transfer_rulestxt) es completamente independiente de los archivos [fare_attributes.txt](#fare_attributestxt) y [fare_rules.txt](#fare_rulestxt). |
| [areas.txt](#areastxt) | Opcional | Agrupación zonal de localizaciones. |
| [stop_areas.txt](#stop_areastxt) | Opcional | Reglas para asignar paradas a áreas. |
@@ -479,14 +482,33 @@ La **clave principal** de un conjunto de datos es el campo o combinación de cam
| Nombre del campo | Tipo | Presencia | Descripción |
|------|------|------|------|
| `leg_group_id` | ID | Opcional | Identifica un grupo de entradas en [fare_leg_rules.txt](#fare_leg_rulestxt).
Se utiliza para describir las reglas de transferencia de tarifas entre `fare_transfer_rules.from_leg_group_id` y `fare_transfer_rules.to_leg_group_id`.
Varias entradas en [fare_leg_rules.txt](#fare_leg_rulestxt) pueden pertenecer al mismo `fare_leg_rules.leg_group_id`.
La misma entrada en [fare_leg_rules.txt](#fare_leg_rulestxt) (sin incluir `fare_leg_rules.leg_group_id`) no debe pertenecer a múltiples `fare_leg_rules.leg_group_id`.|
- | `network_id` | ID externo que hace referencia a `routes.network_id` o `networks.network_id`| Opcional | Identifica una red de rutas que se aplica a la regla de tramo de tarifa.
Si el campo `rule_priority` no existe Y no hay valores `fare_leg_rules.network_id` que coincidan con el `network_id` que se está filtrando, `fare_leg_rules.network_id` vacío coincidirá de forma predeterminada.
Una entrada vacía en `fare_leg_rules.network_id` corresponde a todas las redes definidas en [routes.txt](#routestxt) o [networks.txt](#networkstxt), excluyendo las que figuran en `fare_leg_rules.network_id`
Si el campo `rule_priority` existe en el archivo, un `fare_leg_rules.network_id` vacío indica que la red de rutas del tramo no afecta la coincidencia de esta regla. |
- | `from_area_id` | ID extranjera que hace referencia a `areas.area_id` | Opcional | Identifica una zona de salida.
Si el campo `rule_priority` no existe Y no hay valores `fare_leg_rules.from_area_id` que coincidan con el `area_id` que se está filtrando, `fare_leg_rules.from_area_id` vacío coincidirá de forma predeterminada.
Una entrada vacía en `fare_leg_rules.from_area_id` corresponde a todas las áreas definidas en `areas.area_id`, excluyendo las que figuran en `fare_leg_rules.from_area_id`
Si el campo `rule_priority` existe en el archivo, un `fare_leg_rules.from_area_id` vacío indica que el área de salida del tramo no afecta la coincidencia de esta regla. |
- | `to_area_id` | ID extranjera que hace referencia a `areas.area_id` | Opcional | Identifica una zona de llegada.
Si el campo `rule_priority` no existe Y no hay valores `fare_leg_rules.to_area_id` que coincidan con el `area_id` que se está filtrando, `fare_leg_rules.to_area_id` vacío coincidirá de forma predeterminada.
Una entrada vacía en `fare_leg_rules.to_area_id` corresponde a todas las áreas definidas en `areas.area_id`, excluyendo las que figuran en `fare_leg_rules.to_area_id`
Si el campo `rule_priority` existe en el archivo, un `fare_leg_rules.to_area_id` vacío indica que el área de llegada del tramo no afecta la coincidencia de esta regla. |
- | `from_timeframe_group_id` | ID extranjero que hace referencia a `timeframes.timeframe_group_id` | Opcional | Define el período de tiempo para el evento de validación de tarifa al inicio del tramo de tarifa.
La “hora de inicio” del tramo de tarifa es la hora en la que está programado que ocurra el evento. Por ejemplo, la hora podría ser la hora de salida programada de un autobús al inicio de un tramo de tarifa donde el pasajero sube y valida su tarifa. Para la semántica de coincidencia de reglas a continuación, la hora de inicio se calcula en hora local, según lo determinado por [Semántica de hora local](#semantica-de-la-hora-local-del-marco-temporal) de [timeframes.txt](#timeframestxt). La parada o estación del evento de salida del tramo de tarifa debe usarse para la resolución de zona horaria, cuando corresponda.
Para una regla de tramo de tarifa que especifica un `from_timeframe_group_id`, esa regla coincidirá con un tramo en particular si existe al menos un registro en [timeframes.txt](#timeframestxt) donde se cumplan todas las condiciones siguientes
- El valor de `timeframe_group_id` es igual al valor de `from_timeframe_group_id` .
- El conjunto de días identificado por el `service_id` del registro contiene el “día actual” de la hora de inicio del tramo de tarifa.
- La “hora del día” de inicio del tramo de tarifa es mayor o igual que el valor `timeframes.start_time` del registro y menor que el valor `timeframes.end_time` .
Un `fare_leg_rules.from_timeframe_group_id` vacío indica que la hora de inicio del tramo no afecta la coincidencia de esta regla. |
- | `to_timeframe_group_id` | ID extranjero que hace referencia a `timeframes.timeframe_group_id` | Opcional | Define el período de tiempo para el evento de validación de tarifa al final del tramo de tarifa.
La “hora de finalización” del tramo de tarifa es la hora en la que está programado que ocurra el evento. Por ejemplo, la hora podría ser la hora de llegada programada de un autobús al final de un tramo de tarifa donde el pasajero se baja y valida su tarifa. Para la semántica de coincidencia de reglas a continuación, la hora de finalización se calcula en hora local, según lo determinado por [Semántica de hora local](#semantica-de-la-hora-local-del-marco-temporal) de [timeframes.txt](#timeframestxt). La parada o estación del evento de llegada del tramo de tarifa debe usarse para la resolución de zona horaria, cuando corresponda.
Para una regla de tramo de tarifa que especifica un `to_timeframe_group_id`, esa regla coincidirá con un tramo en particular si existe al menos un registro en [timeframes.txt](#timeframestxt) donde se cumplan todas las condiciones siguientes
- El valor de `timeframe_group_id` es igual al valor de `to_timeframe_group_id` .
- El conjunto de días identificado por el `service_id` del registro contiene el “día actual” de la hora de finalización del tramo de tarifa.
- La “hora del día” de finalización del tramo de tarifa es mayor o igual que el valor `timeframes.start_time` del registro y menor que el valor `timeframes.end_time` .
Un `fare_leg_rules.to_timeframe_group_id` vacío indica que la hora de finalización del tramo no afecta la coincidencia de esta regla. |
+ | `network_id` | Identificación externa que hace referencia a `routes.network_id` o `networks.network_id`| Opcional | Identifica una red de ruta que aplica para la regla de tramo de tarifa.
Si el campo `rule_priority` no existe Y no hay valores `fare_leg_rules.network_id` coincidentes con el `network_id` que se está filtrando, se utilizará un `fare_leg_rules.network_id` vacío de manera predeterminada.
Una entrada vacía en `fare_leg_rules.network_id` corresponde a todas las redes definidas en [routes.txt](#routestxt) o [networks.txt](#networkstxt), excluyendo las que figuran en `fare_leg_rules.network_id`.
Si el campo `rule_priority` existe en el archivo, un `fare_leg_rules.network_id` vacío indica que la red de ruta del tramo no afecta la coincidencia de esta regla.
Al realizar una coincidencia con un [tramo de tarifa efectiva de varios tramos](#fare_leg_join_rulestxt), cada tramo debe tener el mismo `network_id` que se usará para la coincidencia. |
+ | `from_area_id` | Identificación extranjera que hace referencia a `areas.area_id` | Opcional | Identifica un área de salida.
Si el campo `rule_priority` no existe Y no hay valores `fare_leg_rules.from_area_id` coincidentes con el `area_id` que se está filtrando, se usará `fare_leg_rules.from_area_id` vacío de manera predeterminada.
Una entrada vacía en `fare_leg_rules.from_area_id` corresponde a todas las áreas definidas en `areas.area_id` excluyendo las que figuran en `fare_leg_rules.from_area_id`
Si el campo `rule_priority` existe en el archivo, un `fare_leg_rules.from_area_id` vacío indica que el área de salida del tramo no afecta la coincidencia de esta regla.
Cuando se realiza una comparación con un [tramo de tarifa efectiva de varios tramos](#fare_leg_join_rulestxt), se utiliza el primer tramo del tramo de tarifa efectiva para determinar el área de salida. |
+ | `to_area_id` | ID extranjero que hace referencia a `areas.area_id` | Opcional | Identifica un área de llegada.
Si el campo `rule_priority` no existe Y no hay valores `fare_leg_rules.to_area_id` coincidentes con el `area_id` que se está filtrando, se buscará un `fare_leg_rules.to_area_id` vacío de manera predeterminada.
Una entrada vacía en `fare_leg_rules.to_area_id` corresponde a todas las áreas definidas en `areas.area_id` excluyendo las que figuran en `fare_leg_rules.to_area_id`
Si el campo `rule_priority` existe en el archivo, un `fare_leg_rules.to_area_id` vacío indica que el área de llegada del tramo no afecta la coincidencia de esta regla.
Al hacer una coincidencia con un [tramo de tarifa efectiva de varios tramos](#fare_leg_join_rulestxt), se utiliza el último tramo del tramo de tarifa efectiva para determinar el área de llegada. |
+ | `from_timeframe_group_id` | ID externo que hace referencia a `timeframes.timeframe_group_id` | Opcional | Define el período de tiempo para el evento de validación de tarifa al inicio del tramo de tarifa.
La “hora de inicio” del tramo de tarifa es la hora en la que está previsto que ocurra el evento. Por ejemplo, la hora podría ser la hora de salida programada de un autobús al inicio de un tramo de tarifa donde el pasajero sube y valida su tarifa. Para la semántica de coincidencia de reglas que se muestra a continuación, la hora de inicio se calcula en hora local, según lo determinado por [Semántica de hora local](#localtimesemantics) de [timeframes.txt](#timeframestxt). La parada o estación del evento de salida del tramo de tarifa se debe utilizar para la resolución de la zona horaria, cuando corresponda.
Para una regla de tramo de tarifa que especifica un `from_timeframe_group_id`, esa regla coincidirá con un tramo en particular si existe al menos un registro en [timeframes.txt](#timeframestxt) donde todas las siguientes condiciones sean verdaderas
- El valor de `timeframe_group_id` es igual al valor de `from_timeframe_group_id` .
- El conjunto de días identificados por el `service_id` del registro contiene el “día actual” de la hora de inicio del tramo de tarifa.
- La “hora del día” de la hora de inicio del tramo de tarifa es mayor o igual al valor de `timeframes.start_time` del registro y menor que el valor de `timeframes.end_time` .
Un `fare_leg_rules.from_timeframe_group_id` vacío indica que la hora de inicio del tramo no afecta la coincidencia de esta regla.
Al hacer una coincidencia con un [tramo de tarifa efectiva de varios tramos](#fare_leg_join_rulestxt), se utiliza el primer tramo del tramo de tarifa efectiva para determinar el evento de validación de tarifa inicial. |
+ | `to_timeframe_group_id` | ID externo que hace referencia a `timeframes.timeframe_group_id` | Opcional | Define el período de tiempo para el evento de validación de tarifa al final del tramo de tarifa.
La “hora de finalización” del tramo de tarifa es la hora en la que está previsto que ocurra el evento. Por ejemplo, la hora podría ser la hora de llegada programada de un autobús al final de un tramo de tarifa, donde el pasajero se baja y valida su tarifa. Para la semántica de coincidencia de reglas que se muestra a continuación, la hora de finalización se calcula en hora local, según lo determinado por [Semántica de hora local](#localtimesemantics) de [timeframes.txt](#timeframestxt). La parada o estación del evento de llegada del tramo de tarifa se debe utilizar para la resolución de la zona horaria, cuando corresponda.
Para una regla de tramo de tarifa que especifica un `to_timeframe_group_id`, esa regla coincidirá con un tramo en particular si existe al menos un registro en [timeframes.txt](#timeframestxt) donde todas las siguientes condiciones sean verdaderas
- El valor de `timeframe_group_id` es igual al valor de `to_timeframe_group_id` .
- El conjunto de días identificados por el `service_id` del registro contiene el “día actual” de la hora de finalización del tramo de tarifa.
- La “hora del día” de la hora de finalización del tramo de tarifa es mayor o igual al valor de `timeframes.start_time` del registro y menor que el valor de `timeframes.end_time` .
Un `fare_leg_rules.to_timeframe_group_id` vacío indica que la hora de finalización del tramo no afecta la coincidencia de esta regla.
Cuando se realiza una coincidencia con un [tramo de tarifa efectiva de varios tramos](#fare_leg_join_rulestxt), el último tramo del tramo de tarifa efectiva se utiliza para determinar el evento de validación de tarifa final. |
| `fare_product_id` | ID extranjera que hace referencia a `fare_products.fare_product_id` | **Obligatorio** | El producto tarifario requerido para viajar el tramo. |
- | `prioridad_regla` | Entero no negativo | Opcional | Define el orden de prioridad en el que se aplican las reglas de coincidencia a los tramos, permitiendo que ciertas reglas tengan prioridad sobre otras. Cuando coincidan varias entradas en `fare_leg_rules.txt`, se seleccionará la regla o conjunto de reglas con el valor más alto para `rule_priority`.
Un valor vacío para `rule_priority` se trata como cero. |
+ | `rule_priority` | Entero no negativo | Opcional | Define el orden de prioridad en el que se aplican las reglas de coincidencia a los tramos, permitiendo que ciertas reglas tengan prioridad sobre otras. Cuando coincidan varias entradas en `fare_leg_rules.txt`, se seleccionará la regla o conjunto de reglas con el valor más alto para `rule_priority`.
Un valor vacío para `rule_priority` se trata como cero. |
+### fare_leg_join_rules.txt
+
+Archivo: **Opcional**
+Clave principal (`from_network_id, to_network_id, from_stop_id, to_stop_id`)
+
+Para un sub-viaje de dos tramos consecutivos con una transferencia, si la transferencia coincide con todos los predicados coincidentes especificados por un registro particular en el archivo, entonces esos dos tramos deben considerarse como un solo **tramo de tarifa efectiva** para los fines de la coincidencia con las reglas en [`fare_leg_rules.txt`](#fare_leg_rulestxt).
+
+- A menos que se anule explícitamente por `from_stop_id` y `to_stop_id`, la última estación del tramo anterior a la transferencia y la primera estación del tramo posterior a la transferencia deben ser las mismas que las del sub-viaje.lo mismo para el registro.
+- Si un valor de campo de predicado coincidente está en blanco o no se especifica para un registro particular en el archivo, entonces ese campo debe ignorarse para los fines de la coincidencia.
+- Cuando un sub-viaje contiene transferencias consecutivas que coinciden cada una con una regla de unión, entonces todo el sub-viaje debe considerarse como un solo **tramo de tarifa efectiva**.
+
+| Nombre del campo | Tipo | Presencia | Descripción |
+|------|------|------|------|
+| `from_network_id` | ID externo que hace referencia a `routes.network_id` o `networks.network_id`|**Obligatorio**| Coincide con un tramo previo a la transferencia que utiliza la red de ruta especificada. Si se especifica, también se debe especificar el mismo `to_network_id`. |
+| `to_network_id` | ID externo que hace referencia a `routes.network_id` o `networks.network_id`|**Obligatorio**| Coincide con un tramo posterior a la transferencia que utiliza la red de ruta especificada. Si se especifica, también se debe especificar el mismo `from_network_id`. |
+| `from_stop_id` | ID externo que hace referencia a `stops.stop_id`|**Condicionalmente Obligatorio**| Coincide con un tramo anterior a la transferencia que finaliza en la parada especificada (`location_type=0` o vacía) o estación (`location_type=1`).
Condicionalmente Obligatorio:
-**Obligatorio**si se define `to_stop_id` .
- Opcional en caso contrario. |
+| `to_stop_id` | ID externo que hace referencia a `stops.stop_id`|**Condicionalmente Obligatorio**| Coincide con un tramo posterior a la transferencia que comienza en la parada especificada (`location_type=0` o vacía) o estación (`location_type=1`).
Condicionalmente Obligatorio:
-**Obligatorio**si se define `from_stop_id` .
- Opcional en caso contrario. |
+
+
### fare_transfer_rules.txt
Archivo: **Opcional**
diff --git a/docs/fr/documentation/realtime/change-history/revision-history.md b/docs/fr/documentation/realtime/change-history/revision-history.md
index 7e29ac30..dda268ca 100644
--- a/docs/fr/documentation/realtime/change-history/revision-history.md
+++ b/docs/fr/documentation/realtime/change-history/revision-history.md
@@ -2,6 +2,10 @@
### Historique des révisions
+#### Décembre 2024
+
+* Ajout d’un nouveau champ de string qui correspond à feed_info.feed_version du flux de GTFS Schedule sur lequel les données en temps réel sont basées. Voir [discussion](https://github.com/google/transit/pull/434).
+
#### Octobre 2024
* Clarification et petits changements pour les modifications de voyage (Trip Modifications). Voir [discussion](https://github.com/google/transit/pull/497).
@@ -16,7 +20,7 @@
#### Juillet 2022
- * Ajoutez cause_detail et effect_detail. Voir [discussion](https://github.com/google/transit/pull/332)
+ * Ajout de cause_detail et effect_detail. Voir [discussion](https://github.com/google/transit/pull/332)
* Ajout de la possibilité de spécifier une valeur accessible en fauteuil roulant dans un TripUpdate. VehicleDescriptor. Voir [discussion](https://github.com/google/transit/pull/340).
#### Septembre 2021
@@ -25,11 +29,11 @@
#### Août 2021
- * Ajouter GTFS-NewShapes comme expérimental. Voir [discussion](https://github.com/google/transit/pull/272).
+ * Ajout de GTFS-NewShapes comme expérimental. Voir [discussion](https://github.com/google/transit/pull/272).
#### Avril 2021
- * Ajoutez exit_occupancy_status à TripUpdate. Voir [discussion](https://github.com/google/transit/pull/260).
+ * Ajout de exit_occupancy_status à TripUpdate. Voir [discussion](https://github.com/google/transit/pull/260).
#### Février 2021
@@ -52,7 +56,7 @@
#### Avril 2020
* Marquer SeverityLevel comme final. Voir [discussion](https://github.com/google/transit/pull/214).
- * Ajoutez occupation_percentage. Voir [discussion](https://github.com/google/transit/pull/213).
+ * Ajout de occupation_percentage. Voir [discussion](https://github.com/google/transit/pull/213).
#### 12 mars 2020
@@ -61,17 +65,17 @@
#### Août 2019
* Documenter que les trip_updates ne doivent pas nécessairement se produire dans le flux en ordre de bloc. Voir [discussion](https://github.com/google/transit/pull/176).
- * Ajouter StopTimeUpdate. Valeur UNSCHEDULED de ScheduleRelationship. Voir [discussion](https://github.com/google/transit/pull/173).
+ * Ajout de StopTimeUpdate. Valeur UNSCHEDULED de ScheduleRelationship. Voir [discussion](https://github.com/google/transit/pull/173).
#### Mai 2019
- * Ajouter un effet d’alerte de problème d’accessibilité. Voir [discussion](https://github.com/google/transit/pull/164).
+ * Ajout d'un effet d’alerte de problème d’accessibilité. Voir [discussion](https://github.com/google/transit/pull/164).
#### Février 2019
* Ajout de l’option d’effet NO_EFFECT pour l’alerte de service GTFS Realtime. Voir [discussion](https://github.com/google/transit/pull/137).
- * Ajouter un nouveau champ facultatif SeverityLevel au flux d’alertes de service. Voir [discussion](https://github.com/google/transit/pull/136).
- * Ajoutez de nouveaux champs facultatifs pour la fonctionnalité de Synthèse Vocale dans le flux d’alertes de service. Voir [discussion](https://github.com/google/transit/pull/135).
+ * Ajout d'un nouveau champ facultatif SeverityLevel au flux d’alertes de service. Voir [discussion](https://github.com/google/transit/pull/136).
+ * Ajout de nouveaux champs facultatifs pour la fonctionnalité de Synthèse Vocale dans le flux d’alertes de service. Voir [discussion](https://github.com/google/transit/pull/135).
#### Avril 2018
diff --git a/docs/fr/documentation/realtime/gtfs-realtime.proto b/docs/fr/documentation/realtime/gtfs-realtime.proto
index 501c15d8..34a8a20a 100644
--- a/docs/fr/documentation/realtime/gtfs-realtime.proto
+++ b/docs/fr/documentation/realtime/gtfs-realtime.proto
@@ -73,6 +73,11 @@ message FeedHeader {
// January 1st 1970 00:00:00 UTC).
optional uint64 timestamp = 3;
+ // String that matches the feed_info.feed_version from the GTFS feed that the real
+ // time data is based on. Consumers can use this to identify which GTFS feed is
+ // currently active or when a new one is available to download.
+ optional string feed_version = 4;
+
// The extensions namespace allows 3rd-party developers to extend the
// GTFS Realtime specification in order to add and evaluate new features and
// modifications to the spec.
diff --git a/docs/fr/documentation/realtime/proto.md b/docs/fr/documentation/realtime/proto.md
index 333ab27f..6f3c3782 100644
--- a/docs/fr/documentation/realtime/proto.md
+++ b/docs/fr/documentation/realtime/proto.md
@@ -77,6 +77,11 @@ message FeedHeader {
// January 1st 1970 00:00:00 UTC).
optional uint64 timestamp = 3;
+ // String that matches the feed_info.feed_version from the GTFS feed that the real
+ // time data is based on. Consumers can use this to identify which GTFS feed is
+ // currently active or when a new one is available to download.
+ optional string feed_version = 4;
+
// The extensions namespace allows 3rd-party developers to extend the
// GTFS Realtime specification in order to add and evaluate new features and
// modifications to the spec.
diff --git a/docs/fr/documentation/realtime/reference.md b/docs/fr/documentation/realtime/reference.md
index 59496bab..a3385a7f 100644
--- a/docs/fr/documentation/realtime/reference.md
+++ b/docs/fr/documentation/realtime/reference.md
@@ -107,7 +107,8 @@
| **gtfs_realtime_version** | [string](https://protobuf.dev/programming-guides/proto2/#scalar) | Requis | Un | Version de la spécification du flux. La version actuelle est la 2.0. |
| **incrementality** | [Incrementality](#enum-incrementality) | Requis | Un |
| **timestamp** | [uint64](https://protobuf.dev/programming-guides/proto2/#scalar) | Requis | Un | Cet horodatage identifie le moment où le contenu de ce flux a été créé (en heure du serveur). En temps POSIX (c’est-à-dire nombre de secondes depuis le 1er janvier 1970 00:00:00 UTC). Pour éviter les décalages horaires entre les systèmes produisant et consommant des informations en temps réel, il est fortement conseillé de dériver l’horodatage d’un serveur de temps. Il est tout à fait acceptable d’utiliser des serveurs de strate 3 ou même inférieure, car des différences horaires allant jusqu’à quelques secondes sont tolérables. |
-
+ |**feed_version**| [string](https://protobuf.dev/programming-guides/proto2/#scalar) | Optionnel | Un | Chaîne qui correspond à `feed_info.feed_version` du flux GTFS sur lequel les données en temps réel sont basées. Les consommateurs peuvent l’utiliser pour identifier quel flux GTFS est actuellement actif ou quand un nouveau est disponible au téléchargement. |
+
### _enum_ Incrementality
Détermine si la récupération actuelle est incrémentielle.
diff --git a/docs/fr/documentation/schedule/change-history/revision-history.md b/docs/fr/documentation/schedule/change-history/revision-history.md
index 20a192d1..6e29e9f4 100644
--- a/docs/fr/documentation/schedule/change-history/revision-history.md
+++ b/docs/fr/documentation/schedule/change-history/revision-history.md
@@ -2,6 +2,9 @@
### Historique des révisions
+#### Décembre 2024
+* Ajout de `fare_leg_join_rules.txt` et introduction du concept de segment tarifaire effectif. Voir [discussion](https://github.com/google/transit/pull/439).
+
#### Septembre 2024
* Clarifier la présence et l’utilisation des champs from/to_stop_id et from/to_trip_id dans transfers.txt. Voir [discussion](https://github.com/google/transit/pull/455).
* Ajout de règles de validité pour les polygones dans les fichiers GeoJSON. Voir [discussion](https://github.com/google/transit/pull/476)
diff --git a/docs/fr/documentation/schedule/reference.md b/docs/fr/documentation/schedule/reference.md
index ae98806c..aec803dc 100644
--- a/docs/fr/documentation/schedule/reference.md
+++ b/docs/fr/documentation/schedule/reference.md
@@ -1,6 +1,6 @@
## Référence de General Transit Feed Specification
- **Révisé le 16 octobre 2024. Voir [Historique des révisions](../change_history/revision_history) pour plus de détails.**
+ **Révisé le 5 décembre 2024. Voir [Historique des révisions](../change-history/revision-history) pour plus de détails.**
Ce document définit le format et la structure de les fichiers qui composent un jeu de données GTFS.
@@ -11,36 +11,37 @@
3. [Exigences relatives aux fichiers](#exigences-relatives-aux-fichiers)
4. [Publication des jeux de données et pratiques générales](#publication-des-jeux-de-donnees-et-pratiques-generales)
5. [Définitions des champs](#definitions-des-champs)
- - [agency.txt](#agencytxt)
- - [stops.txt](#stopstxt)
- - [routes.txt](#routestxt)
- - [trips.txt](#tripstxt)
- - [stop\_times.txt](#stop_timestxt)
- - [calendar.txt](#calendartxt)
- - [calendar\_dates.txt](#calendar_datestxt)
- - [fare\_attributes.txt](#fare_attributestxt)
- - [fare\_rules.txt](#fare_rulestxt)
- - [timeframes.txt](#timeframestxt)
- - [fare\_media.txt](#fare_mediatxt)
- - [fare\_products.txt](#fare_productstxt)
- - [tarif\ _leg\_rules.txt](#fare_leg_rulestxt)
- - [fare\_transfer\_rules.txt](#fare_transfer_rulestxt)
- - [areas.txt](#areastxt)
- - [stop_areas.txt](#stop_areastxt)
- - [networks.txt](#networkstxt)
- - [route_networks.txt](#route_networkstxt)
- - [shapes.txt](#shapestxt)
- - [frequencies.txt](#frequenciestxt)
- - [transfers.txt](#transferstxt)
- - [pathways.txt](#pathwaystxt)
- - [levels.txt](#levelstxt)
- - [location_groups.txt](#location_groupstxt)
- - [location_group_stops.txt](#location_group_stopstxt)
- - [locations.geojson](#locationsgeojson)
- - [booking_rules.txt](#booking_rulestxt)
- - [translations.txt](#translationstxt)
- - [flux\ _info.txt](#feed_infotxt)
- - [attributions.txt](#attributionstxt)
+ - [agency.txt](#agencytxt)
+ - [stops.txt](#stopstxt)
+ - [routes.txt](#routestxt)
+ - [trips.txt](#tripstxt)
+ - [stop_times.txt](#stop_timestxt)
+ - [calendar.txt](#calendartxt)
+ - [calendar_dates.txt](#calendar_datestxt)
+ - [fare_attributes.txt](#fare_attributestxt)
+ - [fare_rules.txt](#fare_rulestxt)
+ - [timeframes.txt](#timeframestxt)
+ - [fare_media.txt](#fare_mediatxt)
+ - [fare_products.txt](#fare_productstxt)
+ - [tarif _leg_rules.txt](#fare_leg_rulestxt)
+ - [fare_leg_join_rules.txt](#fare_leg_join_rulestxt)
+ - [fare_transfer_rules.txt](#fare_transfer_rulestxt)
+ - [areas.txt](#areastxt)
+ - [stop_areas.txt](#stop_areastxt)
+ - [networks.txt](#networkstxt)
+ - [route_networks.txt](#route_networkstxt)
+ - [shapes.txt](#shapestxt)
+ - [frequencies.txt](#frequenciestxt)
+ - [transfers.txt](#transferstxt)
+ - [pathways.txt](#pathwaystxt)
+ - [levels.txt](#levelstxt)
+ - [location_groups.txt](#location_groupstxt)
+ - [location_group_stops.txt](#location_group_stopstxt)
+ - [locations.geojson](#locationsgeojson)
+ - [booking_rules.txt](#booking_rulestxt)
+ - [translations.txt](#translationstxt)
+ - [feed_info.txt](#feed_infotxt)
+ - [attributions.txt](#attributionstxt)
## Conventions du document
Les mots clés "DOIT", "NE DOIT PAS", "OBLIGATOIRE", "DEVRA", "NE DEVRA PAS", "DEVRAIT", "NE DEVRAIT PAS", "RECOMMANDÉ", "PEUT" et "OPTIONNELLE" dans ce document doivent être interprétés comme décrit dans la [RFC 2119](https://tools.ietf.org/html/rfc2119).
@@ -60,7 +61,9 @@
* **Voyage** - Voyage global de l’origine à la destination, y compris tous les tronçons et transferts intermédiaires.
* **Sous-voyage** - Deux tronçons ou plus qui constituent un sous-ensemble d’un voyage.
* **Produit tarifaire** - Produits tarifaires achetables qui peuvent être utilisés pour payer ou valider un voyage.
-
+ * **Tronçon tarifaire effectif** - Un sous-trajet de deux ou plusieurs tronçons qui doit être traité comme un seul tronçon pour les règles de correspondance dans [fare_leg_rules.txt](#fare_leg_rulestxt) aux fins du calcul du tarif.
+
+
### Présence
Conditions de présence applicables aux champs et fichiers :
@@ -123,6 +126,7 @@
| [fare_media.txt](#fare_mediatxt) | Optionnel | Décrire les supports tarifaires qui peuvent être utilisés pour utiliser les produits tarifaires.
Le fichier [fare_media.txt](#fare_mediatxt) décrit les concepts qui ne sont pas représentés dans [fare_attributes.txt](#fare_attributestxt) et [fare_rules.txt](#fare_rulestxt). En tant que tel, l’utilisation de [fare_media.txt](#fare_mediatxt) est entièrement distincte des fichiers [fare_attributes.txt](#fare_attributestxt) et [fare_rules.txt](#fare_rulestxt). |
| [fare_products.txt](#fare_productstxt) | Optionnel | Décrire les différents types de billets ou de tarifs pouvant être achetés par les passagers.
Le fichier [fare_products.txt](#fare_productstxt) décrit les produits tarifaires qui ne sont pas représentés dans [fare_attributes.txt](#fare_attributestxt) et [fare_rules.txt](#fare_rulestxt). En tant que tel, l’utilisation de [fare_products.txt](#fare_productstxt) est entièrement distincte des fichiers [fare_attributes.txt](#fare_attributestxt) et [fare_rules.txt](#fare_rulestxt). |
| [fare_leg_rules.txt](#fare_leg_rulestxt) | Optionnel | Règles tarifaires pour les différents tronçons du voyage.
Le fichier [fare_leg_rules.txt](#fare_leg_rulestxt) fournit une méthode plus détaillée pour modéliser les structures tarifaires. En tant que tel, l’utilisation de [fare_leg_rules.txt](#fare_leg_rulestxt) est entièrement distincte des fichiers [fare_attributes.txt](#fare_attributestxt) et [fare_rules.txt](#fare_rulestxt). |
+ | [fare_leg_join_rules.txt](#fare_leg_join_rulestxt) | Optionnel | Les règles de définition de deux ou plusieurs segments doivent être considérées comme un seul**segment tarifaire effectif**aux fins de la correspondance avec les règles de [fare_leg_rules.txt](#fare_leg_rulestxt)|
| [fare_transfer_rules.txt](#fare_transfer_rulestxt) | Optionnel | Règles tarifaires pour les transferts entre les tronçons du voyage.
Avec [fare_leg_rules.txt](#fare_leg_rulestxt), le fichier [fare_transfer_rules.txt](#fare_transfer_rulestxt) fournit une méthode plus détaillée pour modéliser les structures tarifaires. En tant que tel, l’utilisation de [fare_transfer_rules.txt](#fare_transfer_rulestxt) est entièrement distincte des fichiers [fare_attributes.txt](#fare_attributestxt) et [fare_rules.txt](#fare_rulestxt). |
| [areas.txt](#areastxt) | Optionnel | Regroupement de zones d’emplacements. |
| [stop_areas.txt](#stop_areastxt) | Optionnel | Règles pour attribuer des arrêts aux zones. |
@@ -477,17 +481,34 @@
- | Nom du champ | Tapez | Présence | Descriptif |
- |------|------|------|------|
- | `leg_group_id` | ID | Optionnel | Identifie un groupe d’entrées dans [fare_leg_rules.txt](#fare_leg_rulestxt).
Utilisé pour décrire les règles de transfert tarifaire entre `fare_transfer_rules.from_leg_group_id` et `fare_transfer_rules.to_leg_group_id`.
Plusieurs entrées dans [fare_leg_rules.txt](#fare_leg_rulestxt) peuvent appartenir au même `fare_leg_rules.leg_group_id`.
La même entrée dans [fare_leg_rules.txt](#fare_leg_rulestxt) (sans compter `fare_leg_rules.leg_group_id`) ne doit pas appartenir à plusieurs `fare_leg_rules.leg_group_id`.|
- | `network_id` | ID étranger faisant référence à `routes.network_id` ou `networks.network_id`| Optionnel | Identifie un réseau d’itinéraires qui s’applique à la règle du segment tarifaire.
Si le champ `rule_priority` n’existe pas ET qu’il n’y a pas de valeurs `fare_leg_rules.network_id` correspondant au `network_id` filtré, `fare_leg_rules.network_id` vide sera mis en correspondance par défaut.
Une entrée vide dans `fare_leg_rules.network_id` correspond à tous les réseaux définis dans [routes.txt](#routestxt) ou [networks.txt](#networkstxt) à l’exclusion de ceux répertoriés sous `fare_leg_rules.network_id`
Si le champ `rule_priority` existe dans le fichier, un `fare_leg_rules.network_id` vide indique que le réseau de routes du tronçon n’affecte pas la correspondance de cette règle. |
- | `from_area_id` | ID étranger faisant référence à `areas.area_id` | Optionnel | Identifie une zone de départ.
Si le champ `rule_priority` n’existe pas ET qu’il n’y a pas de valeurs `fare_leg_rules.from_area_id` correspondant à la `area_id` filtrée, `fare_leg_rules.from_area_id` vide sera mis en correspondance par défaut.
Une entrée vide dans `fare_leg_rules.from_area_id` correspond à toutes les zones définies dans `areas.area_id` à l’exclusion de celles répertoriées sous `fare_leg_rules.from_area_id`
Si le champ `rule_priority` existe dans le fichier, un `fare_leg_rules.from_area_id` vide indique que la zone de départ du tronçon n’affecte pas la correspondance de cette règle. |
- | `to_area_id` | ID étranger faisant référence à `areas.area_id` | Optionnel | Identifie une zone d’arrivée.
Si le champ `rule_priority` n’existe pas ET qu’il n’y a pas de valeurs `fare_leg_rules.to_area_id` correspondant à la `area_id` filtrée, `fare_leg_rules.to_area_id` vide sera mis en correspondance par défaut.
Une entrée vide dans `fare_leg_rules.to_area_id` correspond à toutes les zones définies dans `areas.area_id` à l’exclusion de celles répertoriées sous `fare_leg_rules.to_area_id`
Si le champ `rule_priority` existe dans le fichier, un `fare_leg_rules.to_area_id` vide indique que la zone d’arrivée du tronçon n’affecte pas la correspondance de cette règle. |
- | `from_timeframe_group_id` | ID étranger faisant référence à `timeframes.timeframe_group_id` | Optionnel | Définit la période de l’événement de validation tarifaire au début du segment tarifaire.
L’« heure de début » du trajet tarifaire est l’heure à laquelle l’événement est prévu pour avoir lieu. Par exemple, l’heure peut être l’heure de départ prévue d’un bus au début d’un trajet tarifaire où le passager embarque et valide son tarif. Pour la sémantique de correspondance de règle ci-dessous, l’heure de début est calculée en heure locale, comme déterminé par la [Sémantique de l’heure locale](#semantique-de-lheure-locale-de-la-periode) de [timeframes.txt](#timeframestxt). L’arrêt ou la gare de l’événement de départ du tronçon tarifaire doit être utilisé pour la résolution du fuseau horaire, le cas échéant.
Pour une règle de segment tarifaire qui spécifie un `from_timeframe_group_id`, cette règle correspondra à un segment particulier s’il existe au moins une entrée dans [timeframes.txt](#timeframestxt) où toutes les conditions suivantes sont vraies
- La valeur de `timeframe_group_id` est égale à la valeur `from_timeframe_group_id` .
- L’ensemble de jours identifiés par le `service_id` de l'entrée contient le « jour actuel » de l’heure de début du segment tarifaire.
- L’« heure du jour » de l’heure de début du trajet tarifaire est supérieure ou égale à la valeur `timeframes.start_time` de l'entrée et inférieure à la valeur `timeframes.end_time`.
Un `fare_leg_rules.from_timeframe_group_id` vide indique que l’heure de début du tronçon n’affecte pas la correspondance de cette règle. |
- | `to_timeframe_group_id` | ID étranger faisant référence à `timeframes.timeframe_group_id` | Optionnel | Définit la période de temps pour l’événement de validation tarifaire à la fin du segment tarifaire.
L’« heure de fin » du trajet tarifaire est l’heure à laquelle l’événement est prévu pour avoir lieu. Par exemple, l’heure peut être l’heure d’arrivée prévue d’un bus à la fin d’un trajet tarifaire où le passager descend et valide son tarif. Pour la sémantique de correspondance de règle ci-dessous, l’heure de fin est calculée en heure locale, comme déterminé par la [Sémantique de l’heure locale](#semantique-de-lheure-locale-de-la-periode) de [timeframes.txt](#timeframestxt). L’arrêt ou la gare de l’événement d’arrivée du tronçon tarifaire doit être utilisé pour la résolution du fuseau horaire, le cas échéant.
Pour une règle de segment tarifaire qui spécifie un `to_timeframe_group_id`, cette règle correspondra à un segment particulier s’il existe au moins une entrée dans [timeframes.txt](#timeframestxt) où toutes les conditions suivantes sont vraies
- La valeur de `timeframe_group_id` est égale à la valeur `to_timeframe_group_id` .
- L’ensemble de jours identifiés par le `service_id` de l'entrée contient le « jour en cours » de l’heure de fin du trajet tarifaire.
- L’« heure du jour » de l’heure de fin du trajet tarifaire est supérieure ou égale à la valeur `timeframes.start_time` de l'entrée et inférieure à la valeur `timeframes.end_time`.
Un `fare_leg_rules.to_timeframe_group_id` vide indique que l’heure de fin du tronçon n’affecte pas la correspondance de cette règle. |
- | `fare_product_id` | ID étranger faisant référence à `fare_products.fare_product_id` | **Requis** | Le produit tarifaire requis pour parcourir le tronçon. |
- | `rule_priority` | Entier non négatif | Optionnel | Définit l’ordre de priorité dans lequel les règles de correspondance sont appliquées aux segments, permettant à certaines règles d’avoir priorité sur d’autres. Lorsque plusieurs entrées dans `fare_leg_rules.txt` correspondent, la règle ou l’ensemble de règles avec la valeur la plus élevée pour `rule_priority` sera sélectionné.
Une valeur vide pour `rule_priority` est traitée comme zéro. |
-
+| Nom du champ | Tapez | Présence | Descriptif |
+|------|------|------|------|
+| `leg_group_id` | ID | Optionnel | Identifie un groupe d’entrées dans [fare_leg_rules.txt](#fare_leg_rulestxt).
Utilisé pour décrire les règles de transfert tarifaire entre `fare_transfer_rules.from_leg_group_id` et `fare_transfer_rules.to_leg_group_id`.
Plusieurs entrées dans [fare_leg_rules.txt](#fare_leg_rulestxt) peuvent appartenir au même `fare_leg_rules.leg_group_id`.
La même entrée dans [fare_leg_rules.txt](#fare_leg_rulestxt) (sans compter `fare_leg_rules.leg_group_id`) ne doit pas appartenir à plusieurs `fare_leg_rules.leg_group_id`.|
+| `network_id` | ID étranger référençant `routes.network_id` ou `networks.network_id`| Optionnel | Identifie un réseau de lignes qui s’applique à la règle de segment tarifaire.
Si le champ `rule_priority` n’existe pas ET qu’il n’y a pas de valeurs `fare_leg_rules.network_id` correspondantes au `network_id` filtré, les valeurs `fare_leg_rules.network_id` vides seront mises en correspondance par défaut.
Une entrée vide dans `fare_leg_rules.network_id` correspond à tous les réseaux définis dans [routes.txt](#routestxt) ou [networks.txt](#networkstxt) à l’exclusion de ceux répertoriés sous `fare_leg_rules.network_id`
Si le champ `rule_priority` existe dans le fichier, un `fare_leg_rules.network_id` vide indique que le réseau routier du tronçon n’affecte pas la correspondance de cette règle.
Lors de la correspondance avec un [tarif effectif de plusieurs segments](#fare_leg_join_rulestxt), chaque segment doit avoir le même `network_id` qui sera utilisé pour la correspondance. |
+| `from_area_id` | ID étranger référençant `areas.area_id` | Optionnel | Identifie une zone de départ.
Si le champ `rule_priority` n’existe pas ET qu’il n’y a pas de valeurs `fare_leg_rules.from_area_id` correspondantes à `area_id` filtrées, les valeurs `fare_leg_rules.from_area_id` vides seront mises en correspondance par défaut.
Une entrée vide dans `fare_leg_rules.from_area_id` correspond à toutes les zones définies dans `areas.area_id` à l’exclusion de celles répertoriées sous `fare_leg_rules.from_area_id`
Si le champ `rule_priority` existe dans le fichier, un `fare_leg_rules.from_area_id` vide indique que la zone de départ du trajet n’affecte pas la correspondance de cette règle.
Lors de la correspondance avec un [tronçon tarifaire effectif de plusieurs tronçons](#fare_leg_join_rulestxt), le premier tronçon du tronçon tarifaire effectif est utilisé pour déterminer la zone de départ. |
+| `to_area_id` | ID étranger référençant `areas.area_id` | Optionnel | Identifie une zone d’arrivée.
Si le champ `rule_priority` n’existe pas ET qu’il n’y a pas de valeurs `fare_leg_rules.to_area_id` correspondantes à `area_id` filtrées, les valeurs `fare_leg_rules.to_area_id` vides seront mises en correspondance par défaut.
Une entrée vide dans `fare_leg_rules.to_area_id` correspond à toutes les zones définies dans `areas.area_id` à l’exclusion de celles répertoriées sous `fare_leg_rules.to_area_id`
Si le champ `rule_priority` existe dans le fichier, un `fare_leg_rules.to_area_id` vide indique que la zone d’arrivée du trajet n’affecte pas la correspondance de cette règle.
Lors de la correspondance avec un [tronçon tarifaire effectif de plusieurs tronçons](#fare_leg_join_rulestxt), le dernier tronçon du tronçon tarifaire effectif est utilisé pour déterminer la zone d’arrivée. |
+| `from_timeframe_group_id` | ID étranger référençant `timeframes.timeframe_group_id` | Optionnel | Définit le délai pour l’événement de validation du tarif au début du tronçon tarifaire.
L’« heure de début » du segment tarifaire est l’heure à laquelle l’événement est prévu de se produire. Par exemple, l’heure peut être l’heure de départ prévue d’un bus au début d’un segment tarifaire où le passager monte à bord et valide son tarif. Pour la sémantique de correspondance des règles ci-dessous, l’heure de début est calculée en heure locale, comme déterminé par [Sémantique de l’heure locale](#localtimesemantics) de [timeframes.txt](#timeframestxt). L’arrêt ou la station de l’événement de départ du segment tarifaire doit être utilisé pour la résolution du fuseau horaire, le cas échéant.
Pour une règle de segment tarifaire qui spécifie un `from_timeframe_group_id`, cette règle correspondra à un segment particulier s’il existe au moins un enregistrement dans [timeframes.txt](#timeframestxt) où toutes les conditions suivantes sont vraies
- La valeur de `timeframe_group_id` est égale à la valeur `from_timeframe_group_id` .
- L’ensemble des jours identifiés par le « `service_id` » de l’enregistrement contient le « jour actuel » de l’heure de début du tronçon tarifaire.
- L’« heure du jour » de l’heure de début du segment tarifaire est supérieure ou égale à la valeur « `timeframes.start_time` » de l’enregistrement et inférieure à la valeur « `timeframes.end_time` » .
Un `fare_leg_rules.from_timeframe_group_id` vide indique que l’heure de début de l’étape n’affecte pas la correspondance de cette règle.
Lors de la correspondance avec un [tronçon tarifaire effectif de plusieurs tronçons](#fare_leg_join_rulestxt), le premier tronçon du tronçon tarifaire effectif est utilisé pour déterminer l’événement de validation tarifaire de départ. |
+| `to_timeframe_group_id` | ID étranger référençant `timeframes.timeframe_group_id` | Optionnel | Définit le délai pour l’événement de validation tarifaire à la fin du tronçon tarifaire.
L’« heure de fin » du segment tarifaire est l’heure à laquelle l’événement est prévu de se produire. Par exemple, l’heure peut être l’heure d’arrivée prévue d’un bus à la fin d’un segment tarifaire où le passager descend et valide son tarif. Pour la sémantique de correspondance des règles ci-dessous, l’heure de fin est calculée en heure locale, comme déterminé par [Sémantique de l’heure locale](#localtimesemantics) de [timeframes.txt](#timeframestxt). L’arrêt ou la station de l’événement d’arrivée du segment tarifaire doit être utilisé pour la résolution du fuseau horaire, le cas échéant.
Pour une règle de segment tarifaire qui spécifie un `to_timeframe_group_id`, cette règle correspondra à un segment particulier s’il existe au moins un enregistrement dans [timeframes.txt](#timeframestxt) où toutes les conditions suivantes sont vraies
- La valeur de `timeframe_group_id` est égale à la valeur `to_timeframe_group_id` .
- L’ensemble des jours identifiés par le « `service_id` » de l’enregistrement contient le « jour actuel » de l’heure de fin du tronçon tarifaire.
- L’« heure du jour » de l’heure de fin du segment tarifaire est supérieure ou égale à la valeur « `timeframes.start_time` » de l’enregistrement et inférieure à la valeur « `timeframes.end_time` » .
Un `fare_leg_rules.to_timeframe_group_id` vide indique que l’heure de fin de l’étape n’affecte pas la correspondance de cette règle.
Lors de la correspondance avec un [tronçon tarifaire effectif de plusieurs tronçons](#fare_leg_join_rulestxt), le dernier tronçon du tronçon tarifaire effectif est utilisé pour déterminer l’événement de validation tarifaire final. |
+| `fare_product_id` | ID étranger faisant référence à `fare_products.fare_product_id` | **Requis** | Le produit tarifaire requis pour parcourir le tronçon. |
+| `rule_priority` | Entier non négatif | Optionnel | Définit l’ordre de priorité dans lequel les règles de correspondance sont appliquées aux segments, permettant à certaines règles d’avoir priorité sur d’autres. Lorsque plusieurs entrées dans `fare_leg_rules.txt` correspondent, la règle ou l’ensemble de règles avec la valeur la plus élevée pour `rule_priority` sera sélectionné.
Une valeur vide pour `rule_priority` est traitée comme zéro. |
+
+### fare_leg_join_rules.txt
+
+Fichier :**Optionnel**Clé primaire (`from_network_id, to_network_id, from_stop_id, to_stop_id`)
+
+Pour un sous-trajet de deux segments consécutifs avec un transfert, si le transfert correspond à tous les prédicats correspondants spécifiés par un enregistrement particulier dans le fichier, alors ces deux segments doivent être considérés comme un seul**segment tarifaire effectif**aux fins de la correspondance avec les règles de [`fare_leg_rules.txt`](#fare_leg_rulestxt).
+
+- Sauf remplacement explicite par `from_stop_id` et `to_stop_id`, la dernière station du segment pré-transfert et la première station du segment post-transfert doit être le même pour l’enregistrement.
+- Si une valeur de champ de prédicat correspondante est vide ou non spécifiée pour un enregistrement particulier dans le fichier, alors ce champ doit être ignoré aux fins de la correspondance.
+- Lorsqu’un sous-trajet contient des transferts consécutifs qui correspondent chacun à une règle de jointure, alors l’ensemble du sous-trajet doit être considéré comme un seul**tronçon de tarif effectif**.
+
+| Nom du champ | Type | Présence | Description |
+|------|------|------|------|
+| `from_network_id` | ID étranger référençant `routes.network_id` ou `networks.network_id`|**Requis**| Correspond à un tronçon de pré-transfert qui utilise le réseau de route spécifié. S’il est spécifié, le même `to_network_id` doit également être spécifié. |
+| `to_network_id` | ID étranger référençant `routes.network_id` ou `networks.network_id`|**Requis**| Correspond à un segment post-transfert qui utilise le réseau d’itinéraires spécifié. S’il est spécifié, le même `from_network_id` doit également être spécifié. |
+| `from_stop_id` | ID étranger référençant `stops.stop_id`|**Requis sous condition**| Correspond à un segment pré-transfert qui se termine à l’arrêt (`location_type=0` ou vide) ou à la station (`location_type=1`) spécifié.
Requis sous condition:
- **Requis** si `to_stop_id` est défini.
- Optionnel sinon. |
+| `to_stop_id` | ID étranger référençant `stops.stop_id`|**Requis sous condition**| Correspond à une étape post-transfert qui démarre à l’arrêt (`location_type=0` ou vide) ou à la station (`location_type=1`) spécifié.
Requis sous condition:
- **Requis** si `from_stop_id` est défini.
- Optionnel sinon. |
+
### fare_transfer_rules.txt
Fichier : **Optionnel**
diff --git a/docs/ja/documentation/realtime/change-history/revision-history.md b/docs/ja/documentation/realtime/change-history/revision-history.md
index 96daf771..14ba0a48 100644
--- a/docs/ja/documentation/realtime/change-history/revision-history.md
+++ b/docs/ja/documentation/realtime/change-history/revision-history.md
@@ -2,6 +2,10 @@
### 改訂履歴
+#### 2024年12月
+
+* リアルタイム データのベースとなるGTFS Scheduleフィードの feed_info.feed_version に一致する新しいstringフィールドを追加しました。 [ディスカッション](https://github.com/google/transit/pull/434) を参照してください。
+
#### 2024年10月
* 旅行の変更に関する明確化と小さな変更。[ディスカッション](https://github.com/google/transit/pull/497)を参照してください。
diff --git a/docs/ja/documentation/realtime/gtfs-realtime.proto b/docs/ja/documentation/realtime/gtfs-realtime.proto
index 501c15d8..34a8a20a 100644
--- a/docs/ja/documentation/realtime/gtfs-realtime.proto
+++ b/docs/ja/documentation/realtime/gtfs-realtime.proto
@@ -73,6 +73,11 @@ message FeedHeader {
// January 1st 1970 00:00:00 UTC).
optional uint64 timestamp = 3;
+ // String that matches the feed_info.feed_version from the GTFS feed that the real
+ // time data is based on. Consumers can use this to identify which GTFS feed is
+ // currently active or when a new one is available to download.
+ optional string feed_version = 4;
+
// The extensions namespace allows 3rd-party developers to extend the
// GTFS Realtime specification in order to add and evaluate new features and
// modifications to the spec.
diff --git a/docs/ja/documentation/realtime/proto.md b/docs/ja/documentation/realtime/proto.md
index 69671d14..596de4dc 100644
--- a/docs/ja/documentation/realtime/proto.md
+++ b/docs/ja/documentation/realtime/proto.md
@@ -78,6 +78,11 @@ message FeedHeader {
// January 1st 1970 00:00:00 UTC).
optional uint64 timestamp = 3;
+ // String that matches the feed_info.feed_version from the GTFS feed that the real
+ // time data is based on. Consumers can use this to identify which GTFS feed is
+ // currently active or when a new one is available to download.
+ optional string feed_version = 4;
+
// The extensions namespace allows 3rd-party developers to extend the
// GTFS Realtime specification in order to add and evaluate new features and
// modifications to the spec.
diff --git a/docs/ja/documentation/realtime/reference.md b/docs/ja/documentation/realtime/reference.md
index 66d83036..0621df44 100644
--- a/docs/ja/documentation/realtime/reference.md
+++ b/docs/ja/documentation/realtime/reference.md
@@ -107,6 +107,7 @@ GTFS リアルタイム v2.0 以降では、*必須* 列は、交通事業者デ
| **gtfs_realtime_version** | [string](https://protobuf.dev/programming-guides/proto2/#scalar) | 必須 | 1つ | フィード仕様のバージョン。現在のバージョンは 2.0 です。 |
| **incrementality** | [Incrementality](#enum-incrementality) | 必須 | 1 |
| **timestamp** | [uint64](https://protobuf.dev/programming-guides/proto2/#scalar) | 必須 | 1 | このタイムスタンプは、このフィードの内容が作成された瞬間を識別します (サーバー時間)。POSIX 時間 (つまり、1970年1月1日 00:00:00UTC からの秒数)。リアルタイム情報を生成するシステムと消費するシステム間の時間のずれを回避するには、タイム サーバーからタイムスタンプを取得することを強くお勧めします。数秒までの時間差は許容されるため、Stratum 3 またはそれより低い Strata サーバーを使用することはまったく問題ありません。 |
+|**feed_version**| [string](https://protobuf.dev/programming-guides/proto2/#scalar) |任意| 1 つ | リアルタイム データのベースとなる GTFS フィードの `feed_info.feed_version` に一致する文字列。ユーザーはこれを使用して、現在アクティブな GTFS フィードや、ダウンロード可能な新しいフィードを識別できます。 |
### _enum_ Incrementality
diff --git a/docs/ja/documentation/schedule/change-history/revision-history.md b/docs/ja/documentation/schedule/change-history/revision-history.md
index bf0eead3..1c80529b 100644
--- a/docs/ja/documentation/schedule/change-history/revision-history.md
+++ b/docs/ja/documentation/schedule/change-history/revision-history.md
@@ -2,6 +2,9 @@
### 改訂履歴
+#### 2024 年 12 月
+* `fare_leg_join_rules.txt` を追加し、実効運賃区間の概念を導入しました。[ディスカッション](https://github.com/google/transit/pull/439) を参照してください。
+
#### 2024年9月
* transfers.txt の from/to_stop_id および from/to_trip_id フィールドの存在と使用を明確にします。[ディスカッション](https://github.com/google/transit/pull/455) を参照してください。
* GeoJSON ファイルのポリゴンの有効性ルールを追加しました。[ディスカッション](https://github.com/google/transit/pull/476) を参照してください。
diff --git a/docs/ja/documentation/schedule/reference.md b/docs/ja/documentation/schedule/reference.md
index 28f96496..69570bb7 100644
--- a/docs/ja/documentation/schedule/reference.md
+++ b/docs/ja/documentation/schedule/reference.md
@@ -5,7 +5,7 @@ description: GTFS scheduleの詳細を確認し、リファレンス ドキュ
##General Transit Feed Specificationリファレンス
-**2024 年 10 月 16 日に改訂されました。詳細については、[改訂履歴](../change_history/revision_history) を参照してください。**
+**2024 年 12 月 5 日に改訂されました。詳細については、[改訂履歴](../change-history/revision-history) を参照してください。**
このドキュメントでは、GTFS データセットを構成するファイルの形式と構造を定義します。
@@ -20,16 +20,17 @@ description: GTFS scheduleの詳細を確認し、リファレンス ドキュ
- [stops.txt](#stopstxt)
- [routes.txt](#routestxt)
- [trips.txt](#tripstxt)
- - [stop\_times.txt](#stop_timestxt)
+ - [stop_times.txt](#stop_timestxt)
- [calendar.txt](#calendartxt)
- - [calendar\_dates.txt](#calendar_datestxt)
- - [fare\_attributes.txt](#fare_attributestxt)
- - [fare\_rules.txt](#fare_rulestxt)
+ - [calendar_dates.txt](#calendar_datestxt)
+ - [fare_attributes.txt](#fare_attributestxt)
+ - [fare_rules.txt](#fare_rulestxt)
- [timeframes.txt](#timeframestxt)
- - [fare\_media.txt](#fare_mediatxt)
- - [fare\_products.txt](#fare_productstxt)
- - [fare\_leg\_rules.txt](#fare_leg_rulestxt)
- - [fare\_transfer\_rules.txt](#fare_transfer_rulestxt)
+ - [fare_media.txt](#fare_mediatxt)
+ - [fare_products.txt](#fare_productstxt)
+ - [fare_leg_rules.txt](#fare_leg_rulestxt)
+ - [fare_leg_join_rules.txt](#fare_leg_join_rulestxt)
+ - [fare_transfer_rules.txt](#fare_transfer_rulestxt)
- [areas.txt](#areastxt)
- [stop_areas.txt](#stop_areastxt)
- [networks.txt](#networkstxt)
@@ -44,7 +45,7 @@ description: GTFS scheduleの詳細を確認し、リファレンス ドキュ
- [locations.geojson](#locationsgeojson)
- [booking_rules.txt](#booking_rulestxt)
- [translations.txt](#translationstxt)
- - [feed\_info.txt](#feed_infotxt)
+ - [feed_info.txt](#feed_infotxt)
- [attributions.txt](#attributionstxt)
## ドキュメントの規則
@@ -64,6 +65,7 @@ description: GTFS scheduleの詳細を確認し、リファレンス ドキュ
* **旅程** - 出発地から目的地までの全体的な旅行で、途中のすべての区間と乗り換えが含まれます。
* **サブ旅程** - 旅程のサブセットを構成する 2 つ以上の区間。
* **チケット商品** - 旅行の支払いや検証に使用できる購入可能なチケット商品。
+* **有効な運賃区間** - 運賃計算の目的で [fare_leg_rules.txt](#fare_leg_rulestxt) のマッチングルールで 1 つの区間として扱われる 2 つ以上の区間のサブ旅程計算。
### 存在
フィールドとファイルに適用可能な存在条件:
@@ -128,6 +130,7 @@ _例: `trip_id` フィールドと `stop_sequence` フィールドは、[stop_ti
| [fare_media.txt](#fare_mediatxt) |任意|チケット商品を使用するために使用できる運賃メディアを説明します。
ファイル [fare_media.txt](#fare_mediatxt) は、[fare_attributes.txt](#fare_attributestxt) および [fare_rules.txt](#fare_rulestxt) に示されていない概念を説明しています。そのため、[fare_media.txt](#fare_mediatxt) の使用は、ファイル [fare_attributes.txt](#fare_attributestxt) および [fare_rules.txt](#fare_rulestxt) とは完全に独立しています。|
| [fare_products.txt](#fare_productstxt) |任意| 乗客が購入できるさまざまな種類のチケットまたは運賃を説明しています。
ファイル [fare_products.txt](#fare_productstxt) には、[fare_attributes.txt](#fare_attributestxt) および [fare_rules.txt](#fare_rulestxt) に示されていないチケット商品が記載されています。そのため、[fare_products.txt](#fare_productstxt) の使用は、ファイル [fare_attributes.txt](#fare_attributestxt) および [fare_rules.txt](#fare_rulestxt) とは完全に独立しています。|
| [fare_leg_rules.txt](#fare_leg_rulestxt) |任意| 個々の旅行区間の運賃規則。
ファイル [fare_leg_rules.txt](#fare_leg_rulestxt) は、運賃構造をモデル化するためのより詳細な方法を提供します。そのため、[fare_leg_rules.txt](#fare_leg_rulestxt) の使用は、ファイル [fare_attributes.txt](#fare_attributestxt) および [fare_rules.txt](#fare_rulestxt) とは完全に別です。 |
+| [fare_leg_join_rules.txt](#fare_leg_join_rulestxt) |任意| 2 つ以上の区間を定義するルールは、[fare_leg_rules.txt](#fare_leg_rulestxt)|
| [fare_transfer_rules.txt](#fare_transfer_rulestxt) |任意| 旅行区間間の乗り換えに関する運賃規則。
[fare_leg_rules.txt](#fare_leg_rulestxt) とともに、ファイル [fare_transfer_rules.txt](#fare_transfer_rulestxt) は、運賃構造をモデル化するより詳細な方法を提供します。そのため、[fare_transfer_rules.txt](#fare_transfer_rulestxt) の使用は、ファイル [fare_attributes.txt](#fare_attributestxt) および [fare_rules.txt](#fare_rulestxt) とは完全に別です。 |
| [areas.txt](#areastxt) |任意| 場所のエリアグループ化。 |
| [stop_areas.txt](#stop_areastxt) |任意|停留所等をエリアに割り当てるルール。 |
@@ -337,7 +340,7 @@ _例: `trip_id` フィールドと `stop_sequence` フィールドは、[stop_ti
[calendar_dates.txt](#calendar_datestxt) テーブルは、dateによってサービスを明示的に有効または無効にします。2 つの方法で使用してもよい。
-* 推奨: [calendar.txt](#calendar_datestxt) を [calendar.txt](#calendartxt) と組み合わせて使用します。サービスが一般的に定期的で、明示的な日付にいくつかの変更がある場合 (たとえば、特別なイベント サービスや学校のスケジュールに対応するため)、これは適切なアプローチです。この場合、 `calendar_dates.service_id`は`calendar.service_id`部` IDです。
+* 推奨: [calendar.txt](#calendar_datestxt) を [calendar.txt](#calendartxt) と組み合わせて使用します。サービスが一般的に定期的で、明示的な日付にいくつかの変更がある場合 (たとえば、特別なイベント サービスや学校のスケジュールに対応するため)、これは適切なアプローチです。この場合、 `calendar_dates.service_id`は`calendar.service_id`部 IDです。
* 代替: [calendar.txt](#calendartxt) を省略し、[calendar_dates.txt](#calendar_datestxt) で各サービスのdateを指定します。これにより、かなりのサービスバリエーションが可能になり、通常の週次スケジュールのないサービスに対応できます。この場合、 `service_id`はIDです。
| フィールド名 | タイプ | 存在 | 説明 |
@@ -436,7 +439,7 @@ _例: `trip_id` フィールドと `stop_sequence` フィールドは、[stop_ti
|------|------|------|------|
| `fare_product_id` | ID |**必須**| チケット商品またはチケット商品のセットを識別します。
[fare_products.txt](#fare_productstxt) 内の複数のレコードが同じ`fare_product_id`を共有するしてもよい。その場合、別のファイルから参照されたときに、そのIDを持つすべてのレコードが取得されます。
複数のレコードが同じ`fare_product_id` を共有してしてもよいても、異なる`fare_media_id`を持つ場合があります。これは、チケット商品を使用するために利用できるさまざまな方法 (潜在的に異なる価格) を示します。|
| `fare_product_name` |Text|任意| 乗客に表示されるチケット商品の名前。|
-| `fare_media_id` | `fare_media.fare_media_id`部` ID |任意| 便中にチケット商品を使用するために使用できる運賃メディアを識別します。`fare_media_id` が空の場合、運賃メディアは不明であると見なされます。|
+| `fare_media_id` | `fare_media.fare_media_id`部 ID |任意| 便中にチケット商品を使用するために使用できる運賃メディアを識別します。`fare_media_id` が空の場合、運賃メディアは不明であると見なされます。|
| `amount` |通貨金額 |**必須**| チケット商品のコスト。乗り継ぎ割引を表す場合は負の値になる場合がしてもよい。無料のチケット商品を表す場合はゼロになる場合がしてもよい。|
| `currency` | 通貨コード |**必須**| チケット商品のコストの通貨。 |
@@ -484,14 +487,31 @@ _例: `trip_id` フィールドと `stop_sequence` フィールドは、[stop_ti
| フィールド名 | タイプ | 存在 | 説明 |
| ------ | ------ | ------ | ------ |
| `leg_group_id` | ID | 任意 | [fare_leg_rules.txt](#fare_leg_rulestxt) 内のエントリのグループを識別します。
`fare_transfer_rules.from_leg_group_id` と `fare_transfer_rules.to_leg_group_id` 間の運賃転送ルールを記述するために使用されます。
[fare_leg_rules.txt](#fare_leg_rulestxt) 内の複数のエントリが同じ `fare_leg_rules.leg_group_id` に属することができます。
[fare_leg_rules.txt](#fare_leg_rulestxt) 内の同じエントリ (`fare_leg_rules.leg_group_id` を含まない) が複数の `fare_leg_rules.leg_group_id` に属することはできません。|
-| `network_id` | `routes.network_id` または `networks.network_id` を参照する外部 ID | 任意 |運賃区間ルールに適用される路線ネットワークを識別します。
`rule_priority` フィールドが存在せず、フィルタリングされている `network_id` に一致する `fare_leg_rules.network_id` 値がない場合、デフォルトで空の `fare_leg_rules.network_id` が一致します。
`fare_leg_rules.network_id` の空のエントリは、[routes.txt](#routestxt) または [networks.txt](#networkstxt) で定義されているすべてのネットワークに対応しますが、`fare_leg_rules.network_id` の下にリストされているものは除きます。
ファイルに `rule_priority` フィールドが存在する場合、空の `fare_leg_rules.network_id` は、区間の路線ネットワークがこのルールの一致に影響しないことを示します。|
-| `from_area_id` | `areas.area_id` を参照する外部 ID | 任意 | 出発エリアを識別します。
`rule_priority` フィールドが存在せず、フィルタリングされている `area_id` に一致する `fare_leg_rules.from_area_id` 値がない場合、デフォルトで空の `fare_leg_rules.from_area_id` が一致します。
`fare_leg_rules.from_area_id` の空のエントリは、`fare_leg_rules.from_area_id` の下にリストされているものを除き、`areas.area_id` で定義されているすべてのエリアに対応します。
ファイルに `rule_priority` フィールドが存在する場合、空の `fare_leg_rules.from_area_id` は、区間の出発エリアがこのルールの一致に影響しないことを示します。|
-| `to_area_id` | `areas.area_id` を参照する外部 ID | 任意 | 到着エリアを識別します。
`rule_priority` フィールドが存在せず、フィルタリングされている `area_id` に一致する `fare_leg_rules.to_area_id` 値がない場合、デフォルトで空の `fare_leg_rules.to_area_id` が一致します。
`fare_leg_rules.to_area_id` の空のエントリは、`fare_leg_rules.to_area_id` の下にリストされているものを除き、`areas.area_id` で定義されているすべてのエリアに対応します。
ファイルに `rule_priority` フィールドが存在する場合、空の `fare_leg_rules.to_area_id` は、区間の到着エリアがこのルールの一致に影響しないことを示します。|
-| `from_timeframe_group_id` | `timeframes.timeframe_group_id` を参照する外部 ID | 任意 | 運賃区間の開始時に運賃検証イベントのタイムフレームを定義します。
運賃区間の「開始時刻」は、イベントが発生するようにスケジュールされている時刻です。たとえば、乗客が乗車して運賃を検証する運賃区間の開始時のバスの予定出発時刻が時刻になります。以下のルール マッチング セマンティクスでは、開始時刻は [timeframes.txt](#timeframestxt) の [ローカル時間セマンティクス](#_14) によって決定されるローカル時間で計算されます。適切な場合、運賃区間の出発イベントの停車駅または駅がタイムゾーン解決に使用されます。
`from_timeframe_group_id` を指定する運賃区間ルールの場合、[timeframes.txt](#timeframestxt) に次の条件がすべて当てはまるレコードが少なくとも 1 つ存在する場合、そのルールは特定の区間に一致します。
- `timeframe_group_id` の値は `from_timeframe_group_id` の値と同じです。
- レコードの `service_id` によって識別される日のセットには、運賃区間の開始時刻の「現在の日」が含まれます。
- 運賃区間の開始時刻の「時刻」は、レコードの `timeframes.start_time` 値以上であり、`timeframes.end_time` 値未満です。
空の `fare_leg_rules.from_timeframe_group_id` は、レグの開始時間は、このルールのマッチングには影響しません。 |
-| `to_timeframe_group_id` | `timeframes.timeframe_group_id` を参照する外部 ID | 任意 | 運賃区間の終了時に運賃検証イベントのタイムフレームを定義します。
運賃区間の「終了時刻」は、イベントが発生するようにスケジュールされている時刻です。たとえば、乗客が降車して運賃を検証する運賃区間の終了時にバスが到着する予定時刻などです。以下のルール マッチング セマンティクスでは、終了時刻は [timeframes.txt](#timeframestxt) の [ローカル時間セマンティクス](#_14) によって決定されるローカル時間で計算されます。適切な場合、運賃区間の到着イベントの停車駅または駅がタイムゾーン解決に使用されます。
`to_timeframe_group_id` を指定する運賃区間ルールの場合、[timeframes.txt](#timeframestxt) に次の条件がすべて当てはまるレコードが少なくとも 1 つ存在すると、そのルールは特定の区間に一致します。
- `timeframe_group_id` の値は `to_timeframe_group_id` の値と等しい。
- レコードの `service_id` によって識別される日のセットには、運賃区間の終了時刻の「現在の日」が含まれます。
- 運賃区間の終了時刻の「時刻」は、レコードの `timeframes.start_time` 値以上であり、`timeframes.end_time` 値未満です。
空の `fare_leg_rules.to_timeframe_group_id` は、区間の終了時間は、このルールのマッチングには影響しません。 |
+| `network_id` | `routes.network_id`または`networks.network_id`部 ID |任意| 運賃区間ルールに適用されるルート ネットワークを識別します。
`rule_priority` フィールドが存在せず、フィルタリングされている`network_id`に一致する`fare_leg_rules.network_id`値がない場合、デフォルトで空の`fare_leg_rules.network_id`が一致します。
`fare_leg_rules.network_id`の空のエントリは、[routes.txt](#routestxt) または [networks.txt](#networkstxt) で定義されているすべてのネットワークに対応しますが、 `fare_leg_rules.network_id`の下にリストされているネットワークは除きます。
ファイルに `rule_priority` フィールドが存在する場合、空の`fare_leg_rules.network_id`は、区間のルート ネットワークがこのルールの一致に影響しないことを示します。
[複数の区間の有効な運賃区間](#fare_leg_join_rulestxt)と照合する場合、各区間には、照合に使用される同じ`network_id`が必要です。 |
+| `from_area_id` | `areas.area_id`部 ID |任意| 出発エリアを識別します。
`rule_priority` フィールドが存在せず、フィルタリングされている`area_id`に一致する`fare_leg_rules.from_area_id`値がない場合、デフォルトで空の`fare_leg_rules.from_area_id`が一致します。
`fare_leg_rules.from_area_id`の空のエントリは、` `fare_leg_rules.from_area_id`の下にリストされているものを除く、 `areas.area_id`で定義されているすべてのエリアに対応します。
ファイルに `rule_priority` フィールドが存在する場合、空の`fare_leg_rules.from_area_id`は、区間の出発エリアがこのルールの一致に影響しないことを示します。
[複数の区間の有効な運賃区間](#fare_leg_join_rulestxt)と照合する場合、有効な運賃区間の最初の区間が出発エリアの決定に使用されます。 |
+| `to_area_id` | `areas.area_id`部 ID |任意| 到着エリアを識別します。
`rule_priority` フィールドが存在せず、フィルタリングされている`area_id`に一致する`fare_leg_rules.to_area_id`値がない場合、デフォルトで空の`fare_leg_rules.to_area_id`が一致します。
`fare_leg_rules.to_area_id`の空のエントリは、` `fare_leg_rules.to_area_id`の下にリストされているものを除く、 `areas.area_id`で定義されているすべてのエリアに対応します。
ファイルに `rule_priority` フィールドが存在する場合、空の`fare_leg_rules.to_area_id`は、区間の到着エリアがこのルールの一致に影響しないことを示します。
[複数の区間の有効な運賃区間](#fare_leg_join_rulestxt)と照合する場合、有効な運賃区間の最後の区間が到着エリアの決定に使用されます。 |
+| `from_timeframe_group_id` | `timeframes.timeframe_group_id`部 ID |任意| 運賃区間の開始時の運賃検証イベントのタイムフレームを定義します。
運賃区間の`開始時間`は、イベントの発生が予定されている時間です。たとえば、乗客が乗車して運賃を確認する運賃区間の開始時のバスの予定出発時刻がその時間になります。以下のルール マッチング セマンティクスでは、開始時間は [timeframes.txt](#timeframestxt) の [ローカル時間セマンティクス](#localtimesemantics) によって決定されるローカル時間で計算されます。運賃区間の出発イベントの停留所または駅は、必要に応じてタイムゾーン解決に使用する必要があります。
`from_timeframe_group_id`を指定する運賃区間ルールの場合、[timeframes.txt](#timeframestxt) に以下の条件がすべて満たされるレコードが少なくとも 1 つ存在する場合、そのルールは特定の区間と一致します。
- `timeframe_group_id`の値は`from_timeframe_group_id`の値と同じです。
- レコードの`service_id`によって識別される日のセットには、運賃区間の開始時刻の`現在の日`が含まれます。
- 運賃区間の開始時間の`時刻`は、レコードの`timeframes.start_time`値以上であり、 `timeframes.end_time`値未満です。
空の`fare_leg_rules.from_timeframe_group_id`は、区間の開始時刻がこのルールの一致に影響しないことを示します。
[複数の区間の有効な運賃区間](#fare_leg_join_rulestxt)と照合する場合、有効な運賃区間の最初の区間が運賃検証イベントの開始を決定するために使用されます。 |
+| `to_timeframe_group_id` | `timeframes.timeframe_group_id` を参照する外部 ID |任意| 運賃区間の終了時の運賃検証イベントのタイムフレームを定義します。
運賃区間の`終了時間`は、イベントの発生が予定されている時間です。たとえば、乗客が降りて運賃を確認する運賃区間の終了時のバスの予定到着時間などが考えられます。以下のルールマッチングセマンティクスでは、終了時間は [timeframes.txt](#timeframestxt) の [ローカルタイムセマンティクス](#localtimesemantics) によって決定されるローカルタイムで計算されます。運賃区間の到着イベントの停留所または駅は、必要に応じてタイムゾーン解決に使用する必要があります。
`to_timeframe_group_id`を指定する運賃区間ルールの場合、[timeframes.txt](#timeframestxt) に以下の条件がすべて満たされるレコードが少なくとも 1 つ存在する場合、そのルールは特定の区間と一致します。
- `timeframe_group_id`の値は`to_timeframe_group_id`の値と同じです。
- レコードの`service_id`によって識別される日のセットには、運賃区間の終了時刻の`現在の日`が含まれます。
- 運賃区間の終了時間の`時刻`は、レコードの`timeframes.start_time`値以上であり、 `timeframes.end_time`値未満です。
空の`fare_leg_rules.to_timeframe_group_id`は、区間の終了時刻がこのルールの一致に影響しないことを示します。
[複数の区間の有効な運賃区間](#fare_leg_join_rulestxt)と照合する場合、有効な運賃区間の最後の区間が終了運賃検証イベントの決定に使用されます。 |
| `fare_product_id` | `fare_products.fare_product_id` を参照する外部 ID | **必須** | 区間を移動するために必要なチケット商品。 |
| `rule_priority` | 負でない整数 | 任意 | マッチング ルールが区間に適用される優先順位を定義し、特定のルールを他のルールよりも優先できるようにします。`fare_leg_rules.txt` 内の複数のエントリが一致する場合、`rule_priority` の値が最も高いルールまたはルール セットが選択されます。
`rule_priority` の値が空の場合、ゼロとして扱われます。 |
+### fare_leg_join_rules.txt
+
+ファイル:**任意**主キー (`from_network_id、to_network_id、from_stop_id、to_stop_id`)
+
+乗り換えを含む 2 つの連続する区間のサブ旅程の場合、乗り換えがファイル内の特定のレコードで指定されたすべての一致する述語に一致する場合、それらの 2 つの区間は、[`fare_leg_rules.txt`](#fare_leg_rulestxt) 内のルールとの照合の目的で、単一の**有効な運賃区間**と見なされます。
+
+- `from_stop_id`および`to_stop_id`によって明示的に上書きされない限り、乗り換え前の区間の最後の駅と乗り換え後の区間の最初の駅は、レコードに対して同じである必要があります。
+- ファイル内の特定のレコードに対して一致する述語フィールド値が空白または未指定の場合、そのフィールドは一致の目的で無視されます。
+- サブ旅程に、それぞれが結合ルールに一致する連続した乗り換えが含まれる場合、サブ旅程全体を 1 つの**有効な運賃区間**と見なす必要があります。
+
+| フィールド名 | タイプ | 存在 | 説明 |
+|------|------|------|------|
+| `from_network_id` | `routes.network_id`または`networks.network_id`部 ID |**必須**| 指定されたルート ネットワークを使用する乗り換え前の区間と一致します。指定されている場合は、同じ `to_network_id` も指定する必要があります。 |
+| `to_network_id` | `routes.network_id`または`networks.network_id`部 ID |**必須**|指定されたルート ネットワークを使用する乗り換え後の区間と一致します。指定する場合は、同じ `from_network_id` も指定する必要があります。|
+| `from_stop_id` | `stops.stop_id`部 ID |**条件付きで必須**| 指定された停留所 (`location_type=0`または空) または駅 (`location_type=1`) で終了する乗り換え前の区間と一致します。
条件付きで必須:
-**`to_stop_id`が定義されている場合は必須**です。
- それ以外の場合は任意。 |
+| `to_stop_id` | `stops.stop_id`部 ID |**条件付きで必須**| 指定された停留所 (`location_type=0`または空) または駅 (`location_type=1`) で開始する乗り換え後の区間と一致します。
条件付きで必須:
-**`from_stop_id`が定義されている場合は必須。
- それ以外の場合は任意。 |
+
### fare_transfer_rules.txt
ファイル: **任意**
@@ -524,7 +544,7 @@ _例: `trip_id` フィールドと `stop_sequence` フィールドは、[stop_ti
| `duration_limit` | 正の整数 |任意| 乗り換えの期間制限を定義します。
秒単位の整数増分で表現するしなければならない。
期間制限がない場合は、 `fare_transfer_rules.duration_limit` は空にするしなければならない。 |
| `duration_limit_type` | 列挙型 |**条件付きで必須**| `fare_transfer_rules.duration_limit`の相対的な開始と終了を定義します。
有効なオプションは次のとおりです。
`0` - 現在の区間の出発運賃の検証と次の区間の到着運賃の検証の間。
`1` - 現在の区間の出発運賃の検証と次の区間の出発運賃の検証の間。
`2` - 現在の区間の到着運賃の検証と次の区間の出発運賃の検証の間。
`3` - 現在の区間の到着運賃の検証と次の区間の到着運賃の検証の間。
条件付きで必須:
-** `fare_transfer_rules.duration_limit`が定義されている場合は必須。
- `fare_transfer_rules.duration_limit`が空の場合は**禁止**です。 |
| `fare_transfer_type` | 列挙型 |**必須**| 旅程中の区間間の乗り換えのコスト処理方法を示します。
![](../../assets/2-leg.svg)
有効なオプションは次のとおりです。
`0` - 出発区間`fare_leg_rules.fare_product_id`と`fare_transfer_rules.fare_product_id`を加算したもの。A + AB。
`1` - 出発区間の`fare_leg_rules.fare_product_id`と`fare_transfer_rules.fare_product_id`と到着区間の`fare_leg_rules.fare_product_id` を加算します。A + AB + B。
`2` - `fare_transfer_rules.fare_product_id`; AB.
旅程中の複数の乗り換え間のコスト処理のやり取り:
![](../../assets/3-leg.svg)
`fare_transfer_type` | 処理A > B | 処理B > C |
---|---|---|
`0` | A + A +B プラス | S + BC |
`1` | A + AB + B | S + BC + C |
`2` | AB | S + BC |