From 4f5bed9735f110f62506191fc0d6bdb3bef35dd4 Mon Sep 17 00:00:00 2001 From: isabelle-dr Date: Mon, 12 Jan 2026 08:21:55 -0500 Subject: [PATCH 1/2] Add links to references of fare_leg_rules.txt References to GTFS files are now linked directly to the appropriate file. This PR adds links for instances of fare_leg_rules.txt that didn't have a link. --- gtfs/spec/en/reference.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/gtfs/spec/en/reference.md b/gtfs/spec/en/reference.md index b4569a54..384b5801 100644 --- a/gtfs/spec/en/reference.md +++ b/gtfs/spec/en/reference.md @@ -198,7 +198,7 @@ Primary key (`agency_id`) | `agency_phone` | Phone number | Optional | A voice telephone number for the specified agency. This field is a string value that presents the telephone number as typical for the agency's service area. It may contain punctuation marks to group the digits of the number. Dialable text (for example, TriMet's "503-238-RIDE") is permitted, but the field must not contain any other descriptive text. | | `agency_fare_url` | URL | Optional | URL of a web page where a rider can purchase tickets or other fare instruments for that agency, or a web page containing information about that agency's fares. | | `agency_email` | Email | Optional | Email address actively monitored by the agency’s customer service department. This email address should be a direct contact point where transit riders can reach a customer service representative at the agency. | -| `cemv_support` | Enum | Optional | Indicates if riders can access a transit service (i.e., trip) associated with this agency by using a contactless EMV (Europay, Mastercard, and Visa) card or mobile device as fare media at a fare validator (such as in pay-as-you-go or open-loop systems). This field does not indicate that cEMV can be used to purchase other fare products or to add value to another fare media.

Support for cEMVs should only be indicated if all services under this agency are accessible with the use of cEMV cards or mobile devices as fare media.

Valid options are:

`0` or empty - No cEMV information for trips associated with this agency.
`1` - Riders may use cEMVs as fare media for trips associated with this agency.
`2` - cEMVs are not supported as fare media for trips associated with this agency.

If both `agency.cemv_support` and `routes.cemv_support` are provided for the same service, the value in `routes.cemv_support` shall take precedence.

This field is independent of all other fare-related files and may be used separately. If there is conflicting information between this field and any fare-related file (such as `fare_media.txt`, `fare_products.txt`, or `fare_leg_rules.txt`), the information in those files shall take precedence over `agency.cemv_support`.| +| `cemv_support` | Enum | Optional | Indicates if riders can access a transit service (i.e., trip) associated with this agency by using a contactless EMV (Europay, Mastercard, and Visa) card or mobile device as fare media at a fare validator (such as in pay-as-you-go or open-loop systems). This field does not indicate that cEMV can be used to purchase other fare products or to add value to another fare media.

Support for cEMVs should only be indicated if all services under this agency are accessible with the use of cEMV cards or mobile devices as fare media.

Valid options are:

`0` or empty - No cEMV information for trips associated with this agency.
`1` - Riders may use cEMVs as fare media for trips associated with this agency.
`2` - cEMVs are not supported as fare media for trips associated with this agency.

If both `agency.cemv_support` and `routes.cemv_support` are provided for the same service, the value in `routes.cemv_support` shall take precedence.

This field is independent of all other fare-related files and may be used separately. If there is conflicting information between this field and any fare-related file (such as [`fare_media.txt`](#fare_mediatxt), [`fare_products.txt`](#fare_productstxt), or [`fare_leg_rules.txt`](#fare_leg_rulestxt)), the information in those files shall take precedence over `agency.cemv_support`.| ### stops.txt @@ -246,7 +246,7 @@ Primary key (`route_id`) | `continuous_pickup` | Enum | **Conditionally Forbidden** | Indicates that the rider can board the transit vehicle at any point along the vehicle’s travel path as described by [shapes.txt](#shapestxt), on every trip of the route. Valid options are:

`0` - Continuous stopping pickup.
`1` or empty - No continuous stopping pickup.
`2` - Must phone agency to arrange continuous stopping pickup.
`3` - Must coordinate with driver to arrange continuous stopping pickup.

Values for `routes.continuous_pickup` may be overridden by defining values in `stop_times.continuous_pickup` for specific `stop_time`s along the route.

**Conditionally Forbidden**:
- Any value other than `1` or empty is **Forbidden** if `stop_times.start_pickup_drop_off_window` or `stop_times.end_pickup_drop_off_window` are defined for any trip of this route.
- Optional otherwise. | | `continuous_drop_off` | Enum | **Conditionally Forbidden** | Indicates that the rider can alight from the transit vehicle at any point along the vehicle’s travel path as described by [shapes.txt](#shapestxt), on every trip of the route. Valid options are:

`0` - Continuous stopping drop off.
`1` or empty - No continuous stopping drop off.
`2` - Must phone agency to arrange continuous stopping drop off.
`3` - Must coordinate with driver to arrange continuous stopping drop off.

Values for `routes.continuous_drop_off` may be overridden by defining values in `stop_times.continuous_drop_off` for specific `stop_time`s along the route.

**Conditionally Forbidden**:
- Any value other than `1` or empty is **Forbidden** if `stop_times.start_pickup_drop_off_window` or `stop_times.end_pickup_drop_off_window` are defined for any trip of this route.
- Optional otherwise. | | `network_id` | ID | **Conditionally Forbidden** | Identifies a group of routes. Multiple rows in [routes.txt](#routestxt) may have the same `network_id`.

Conditionally Forbidden:
- **Forbidden** if the [route_networks.txt](#route_networkstxt) or [networks.txt](#networkstxt) file exists.
- Optional otherwise. -| `cemv_support` | Enum | Optional | Indicates if riders can access a transit service (i.e., trip) associated with this route by using a contactless EMV (Europay, Mastercard, and Visa) card or mobile device as fare media at a fare validator (such as in pay-as-you-go or open-loop systems). This field does not indicate that cEMV can be used to purchase other fare products or to add value to another fare media.

Support for cEMVs should only be indicated if all services under this route are accessible with the use of cEMV cards or mobile devices as fare media.

Valid options are:

`0` or empty - No cEMV information for trips associated with this route.
`1` - Riders may use cEMVs as fare media for trips associated with this route.
`2` - cEMVs are not supported as fare media for trips associated with this route.

If both `agency.cemv_support` and `routes.cemv_support` are provided for the same service, the value in `routes.cemv_support` shall take precedence.

This field is independent of all other fare-related files and may be used separately. If there is conflicting information between this field and any fare-related file (such as `fare_media.txt`, `fare_products.txt`, or `fare_leg_rules.txt`), the information in those files shall take precedence over `agency.cemv_support`. +| `cemv_support` | Enum | Optional | Indicates if riders can access a transit service (i.e., trip) associated with this route by using a contactless EMV (Europay, Mastercard, and Visa) card or mobile device as fare media at a fare validator (such as in pay-as-you-go or open-loop systems). This field does not indicate that cEMV can be used to purchase other fare products or to add value to another fare media.

Support for cEMVs should only be indicated if all services under this route are accessible with the use of cEMV cards or mobile devices as fare media.

Valid options are:

`0` or empty - No cEMV information for trips associated with this route.
`1` - Riders may use cEMVs as fare media for trips associated with this route.
`2` - cEMVs are not supported as fare media for trips associated with this route.

If both `agency.cemv_support` and `routes.cemv_support` are provided for the same service, the value in `routes.cemv_support` shall take precedence.

This field is independent of all other fare-related files and may be used separately. If there is conflicting information between this field and any fare-related file (such as [`fare_media.txt`](#fare_mediatxt), [`fare_products.txt`](#fare_productstxt), or [`fare_leg_rules.txt`](#fare_leg_rulestxt)), the information in those files shall take precedence over `agency.cemv_support`. | ### trips.txt @@ -513,7 +513,7 @@ To process the cost of a leg: | `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. | +| `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`](#fare_leg_rulestxt) 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 @@ -543,7 +543,7 @@ Fare rules for transfers between legs of travel defined in [`fare_leg_rules.txt` To process the cost of a multi-leg journey: -1. The applicable fare leg groups defined in `fare_leg_rules.txt` should be determined for all individual legs or effective fare legs of travel based on the rider’s journey. +1. The applicable fare leg groups defined in [`fare_leg_rules.txt`](#fare_leg_rulestxt) should be determined for all individual legs or effective fare legs of travel based on the rider’s journey. 2. The file [fare_transfer_rules.txt](#fare_transfer_rulestxt) must be filtered by the fields that define the characteristics of the transfer, these fields are: - `fare_transfer_rules.from_leg_group_id` - `fare_transfer_rules.to_leg_group_id`
From 7ca9493d58339a7cbdfbcf4f7ec848817f937f47 Mon Sep 17 00:00:00 2001 From: isabelle-dr Date: Mon, 12 Jan 2026 12:53:15 -0500 Subject: [PATCH 2/2] Remove code formatting to files --- gtfs/spec/en/reference.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/gtfs/spec/en/reference.md b/gtfs/spec/en/reference.md index 384b5801..e4ef7a64 100644 --- a/gtfs/spec/en/reference.md +++ b/gtfs/spec/en/reference.md @@ -198,7 +198,7 @@ Primary key (`agency_id`) | `agency_phone` | Phone number | Optional | A voice telephone number for the specified agency. This field is a string value that presents the telephone number as typical for the agency's service area. It may contain punctuation marks to group the digits of the number. Dialable text (for example, TriMet's "503-238-RIDE") is permitted, but the field must not contain any other descriptive text. | | `agency_fare_url` | URL | Optional | URL of a web page where a rider can purchase tickets or other fare instruments for that agency, or a web page containing information about that agency's fares. | | `agency_email` | Email | Optional | Email address actively monitored by the agency’s customer service department. This email address should be a direct contact point where transit riders can reach a customer service representative at the agency. | -| `cemv_support` | Enum | Optional | Indicates if riders can access a transit service (i.e., trip) associated with this agency by using a contactless EMV (Europay, Mastercard, and Visa) card or mobile device as fare media at a fare validator (such as in pay-as-you-go or open-loop systems). This field does not indicate that cEMV can be used to purchase other fare products or to add value to another fare media.

Support for cEMVs should only be indicated if all services under this agency are accessible with the use of cEMV cards or mobile devices as fare media.

Valid options are:

`0` or empty - No cEMV information for trips associated with this agency.
`1` - Riders may use cEMVs as fare media for trips associated with this agency.
`2` - cEMVs are not supported as fare media for trips associated with this agency.

If both `agency.cemv_support` and `routes.cemv_support` are provided for the same service, the value in `routes.cemv_support` shall take precedence.

This field is independent of all other fare-related files and may be used separately. If there is conflicting information between this field and any fare-related file (such as [`fare_media.txt`](#fare_mediatxt), [`fare_products.txt`](#fare_productstxt), or [`fare_leg_rules.txt`](#fare_leg_rulestxt)), the information in those files shall take precedence over `agency.cemv_support`.| +| `cemv_support` | Enum | Optional | Indicates if riders can access a transit service (i.e., trip) associated with this agency by using a contactless EMV (Europay, Mastercard, and Visa) card or mobile device as fare media at a fare validator (such as in pay-as-you-go or open-loop systems). This field does not indicate that cEMV can be used to purchase other fare products or to add value to another fare media.

Support for cEMVs should only be indicated if all services under this agency are accessible with the use of cEMV cards or mobile devices as fare media.

Valid options are:

`0` or empty - No cEMV information for trips associated with this agency.
`1` - Riders may use cEMVs as fare media for trips associated with this agency.
`2` - cEMVs are not supported as fare media for trips associated with this agency.

If both `agency.cemv_support` and `routes.cemv_support` are provided for the same service, the value in `routes.cemv_support` shall take precedence.

This field is independent of all other fare-related files and may be used separately. If there is conflicting information between this field and any fare-related file (such as [fare_media.txt](#fare_mediatxt), [fare_products.txt](#fare_productstxt), or [fare_leg_rules.txt](#fare_leg_rulestxt)), the information in those files shall take precedence over `agency.cemv_support`.| ### stops.txt @@ -246,7 +246,7 @@ Primary key (`route_id`) | `continuous_pickup` | Enum | **Conditionally Forbidden** | Indicates that the rider can board the transit vehicle at any point along the vehicle’s travel path as described by [shapes.txt](#shapestxt), on every trip of the route. Valid options are:

`0` - Continuous stopping pickup.
`1` or empty - No continuous stopping pickup.
`2` - Must phone agency to arrange continuous stopping pickup.
`3` - Must coordinate with driver to arrange continuous stopping pickup.

Values for `routes.continuous_pickup` may be overridden by defining values in `stop_times.continuous_pickup` for specific `stop_time`s along the route.

**Conditionally Forbidden**:
- Any value other than `1` or empty is **Forbidden** if `stop_times.start_pickup_drop_off_window` or `stop_times.end_pickup_drop_off_window` are defined for any trip of this route.
- Optional otherwise. | | `continuous_drop_off` | Enum | **Conditionally Forbidden** | Indicates that the rider can alight from the transit vehicle at any point along the vehicle’s travel path as described by [shapes.txt](#shapestxt), on every trip of the route. Valid options are:

`0` - Continuous stopping drop off.
`1` or empty - No continuous stopping drop off.
`2` - Must phone agency to arrange continuous stopping drop off.
`3` - Must coordinate with driver to arrange continuous stopping drop off.

Values for `routes.continuous_drop_off` may be overridden by defining values in `stop_times.continuous_drop_off` for specific `stop_time`s along the route.

**Conditionally Forbidden**:
- Any value other than `1` or empty is **Forbidden** if `stop_times.start_pickup_drop_off_window` or `stop_times.end_pickup_drop_off_window` are defined for any trip of this route.
- Optional otherwise. | | `network_id` | ID | **Conditionally Forbidden** | Identifies a group of routes. Multiple rows in [routes.txt](#routestxt) may have the same `network_id`.

Conditionally Forbidden:
- **Forbidden** if the [route_networks.txt](#route_networkstxt) or [networks.txt](#networkstxt) file exists.
- Optional otherwise. -| `cemv_support` | Enum | Optional | Indicates if riders can access a transit service (i.e., trip) associated with this route by using a contactless EMV (Europay, Mastercard, and Visa) card or mobile device as fare media at a fare validator (such as in pay-as-you-go or open-loop systems). This field does not indicate that cEMV can be used to purchase other fare products or to add value to another fare media.

Support for cEMVs should only be indicated if all services under this route are accessible with the use of cEMV cards or mobile devices as fare media.

Valid options are:

`0` or empty - No cEMV information for trips associated with this route.
`1` - Riders may use cEMVs as fare media for trips associated with this route.
`2` - cEMVs are not supported as fare media for trips associated with this route.

If both `agency.cemv_support` and `routes.cemv_support` are provided for the same service, the value in `routes.cemv_support` shall take precedence.

This field is independent of all other fare-related files and may be used separately. If there is conflicting information between this field and any fare-related file (such as [`fare_media.txt`](#fare_mediatxt), [`fare_products.txt`](#fare_productstxt), or [`fare_leg_rules.txt`](#fare_leg_rulestxt)), the information in those files shall take precedence over `agency.cemv_support`. +| `cemv_support` | Enum | Optional | Indicates if riders can access a transit service (i.e., trip) associated with this route by using a contactless EMV (Europay, Mastercard, and Visa) card or mobile device as fare media at a fare validator (such as in pay-as-you-go or open-loop systems). This field does not indicate that cEMV can be used to purchase other fare products or to add value to another fare media.

Support for cEMVs should only be indicated if all services under this route are accessible with the use of cEMV cards or mobile devices as fare media.

Valid options are:

`0` or empty - No cEMV information for trips associated with this route.
`1` - Riders may use cEMVs as fare media for trips associated with this route.
`2` - cEMVs are not supported as fare media for trips associated with this route.

If both `agency.cemv_support` and `routes.cemv_support` are provided for the same service, the value in `routes.cemv_support` shall take precedence.

This field is independent of all other fare-related files and may be used separately. If there is conflicting information between this field and any fare-related file (such as [fare_media.txt](#fare_mediatxt), [fare_products.txt](#fare_productstxt), or [fare_leg_rules.txt](#fare_leg_rulestxt)), the information in those files shall take precedence over `agency.cemv_support`. | ### trips.txt @@ -472,7 +472,7 @@ Primary key (`network_id, from_area_id, to_area_id, from_timeframe_group_id, to_ Fare rules for individual legs of travel. -Fares in [`fare_leg_rules.txt`](#fare_leg_rulestxt) must be queried by filtering all the records in the file to find rules that match the leg to be traveled by the rider. +Fares in [fare_leg_rules.txt](#fare_leg_rulestxt) must be queried by filtering all the records in the file to find rules that match the leg to be traveled by the rider. To process the cost of a leg: @@ -513,7 +513,7 @@ To process the cost of a leg: | `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`](#fare_leg_rulestxt) 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. | +| `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](#fare_leg_rulestxt) 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 @@ -521,7 +521,7 @@ 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). +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**. @@ -539,11 +539,11 @@ File: **Optional** Primary key (`from_leg_group_id, to_leg_group_id, fare_product_id, transfer_count, duration_limit`) -Fare rules for transfers between legs of travel defined in [`fare_leg_rules.txt`](#fare_leg_rulestxt). +Fare rules for transfers between legs of travel defined in [fare_leg_rules.txt](#fare_leg_rulestxt). To process the cost of a multi-leg journey: -1. The applicable fare leg groups defined in [`fare_leg_rules.txt`](#fare_leg_rulestxt) should be determined for all individual legs or effective fare legs of travel based on the rider’s journey. +1. The applicable fare leg groups defined in [fare_leg_rules.txt](#fare_leg_rulestxt) should be determined for all individual legs or effective fare legs of travel based on the rider’s journey. 2. The file [fare_transfer_rules.txt](#fare_transfer_rulestxt) must be filtered by the fields that define the characteristics of the transfer, these fields are: - `fare_transfer_rules.from_leg_group_id` - `fare_transfer_rules.to_leg_group_id`