Sydney has recently introduced an NFC "Opal" card:
https://www.opal.com.au/en/fare-information/
- cheaper than conventional paper ticket fares
- $15 daily travel cap from Monday - Saturday
- $2.50 travel cap on Sunday
- after 8 paid journeys in a week, all journeys after that are free
- 30% off-peak discount for all journeys taken before or after weekday morning or afternoon peaks (7-9am, 4-6:30pm weekdays)
- 60 minute transfer window (starts upon arrival at end of leg)
I think most of this could be addressed by the current proposal + the additions listed below. The travel caps are a bit tricky - they'd relate to a service_id but might only apply to return trips. It would be nice to at least have a note displayed by consuming apps. The free travel after 8 paid trips feature would probably also an informational note, but ultimately it would be good if apps could inform daily commuters of all of the options with accurate pricing.
distance_mode=4 would not suit Sydney buses as currently proposed. We would need to add zone_id (or section_id) to stop_times.txt and then define fares in fare_attributes.txt for 1-2,3-5,6+ sections/zones.
I'm not sure if distance_mode=5 would suit Sydney trains, but with some clarification perhaps it would. Fares are calculated based on distance between stops (zones and stop_ids would not need to be considered) in pricing bands for 0-10km, 10-20km, 20-35km, 35-65km and 65+km
In the current proposal, transfer_duration is "from the start of the previous non-transfer leg." We need to be able to distinguish the difference between "travel for x hours" and "transfer within y minutes of arriving". Can we add "transfer_window"?
(I'm not too sure on the meaning of "previous non-transfer leg")
Transfer Window
File: fare_rules.txt
Columns: transfer_window
Matches Leg Sequences: Yes
Matches a transfer leg if the start time of the transfer leg is less than transfer_window seconds from the end of the previous non-transfer leg.
fare_rules.txt / route_type
Can we specify multiple route types in a single line using a delimiter? This is an integer field, so either a pipe or slash should be an acceptable delimiter (we'd have to choose one before publishing the spec)
File: fare_rules.txt
Column: included_trips
Not to be confused with transfers, this is could document multi-use tickets/cards which can be used again on different days or on the same day after the expiration of the transfer_duration.
Fare Attributes
You mention a "priority" field in fare_products.txt. I wonder how applications could interpret this for different users who had an NFC card, monthly pass or people visiting from out of town for the day.
extra column: included_days - eg: 7,28,90,365
extra column: included_trips - eg: 10
extra column: discount - could be positive, negative or a percentage. ("50%", "0%" or "free"?) would need to indicate which fares the discount is/not applicable to
extra column: start_time - an alternative to tying fares to service_id
extra column: end_time - eg: 28:00 indicates that a ticket is valid until 4am the following morning
Can we provide something more algorithm-friendly than "eligibility_desc" to indicate concession classes?
- disabled: 0/1
- pensioner: 0/1
- school_student: 0/1
- uni_student: 0/1
- min_age: years
- max_age: years
- conc_desc: "Student", "Pensioner/Veteran" etc