{
  "generated": "2026-10-03",
  "criticality": {
    "critical": "Critical",
    "important": "Important",
    "informational": "Informational"
  },
  "sensitivity": {
    "public": "Public",
    "internal": "Internal",
    "restricted": "Restricted"
  },
  "products": {
    "eta": "Regional ETA",
    "otp": "On-time performance",
    "od": "Origin–destination",
    "demand": "Demand forecasting",
    "crowding": "Crowding",
    "revenue": "Revenue & transfers",
    "journey": "Journey recommendation",
    "twin": "Digital twin",
    "anomaly": "Anomaly detection"
  },
  "datasets": [
    {
      "slug": "avl",
      "title": "Vehicle location (AVL)",
      "note": "26 columns, no header row, semicolon-delimited. One row per trip per stop.",
      "fields": [
        {
          "field": "CALENDAR_ID",
          "criticality": "critical",
          "sensitivity": "internal",
          "why": "Date key (1YYYYMMDD). Every join, every daily product.",
          "products": [
            "eta",
            "otp",
            "od",
            "demand",
            "crowding",
            "twin",
            "anomaly"
          ]
        },
        {
          "field": "TIME_TABLE_VERSION_NAME",
          "criticality": "important",
          "sensitivity": "internal",
          "why": "Board period; ties rows to the GTFS service in force.",
          "products": [
            "eta",
            "otp"
          ]
        },
        {
          "field": "BLOCK_ABBR",
          "criticality": "important",
          "sensitivity": "internal",
          "why": "Vehicle block. Vehicle-level products only.",
          "products": [
            "twin",
            "anomaly"
          ]
        },
        {
          "field": "TRIP_ID",
          "criticality": "critical",
          "sensitivity": "internal",
          "why": "Joins AVL to APC. Must map to the GTFS trip; today it does not.",
          "products": [
            "eta",
            "otp",
            "od",
            "crowding",
            "twin"
          ]
        },
        {
          "field": "ROUTE_ABBR",
          "criticality": "critical",
          "sensitivity": "internal",
          "why": "Route key. Regional ETA, on-time performance, forecasting.",
          "products": [
            "eta",
            "otp",
            "demand",
            "twin",
            "anomaly"
          ]
        },
        {
          "field": "ROUTE_DIRECTION_ABBR",
          "criticality": "important",
          "sensitivity": "internal",
          "why": "Direction. ETA and origin–destination by direction.",
          "products": [
            "eta",
            "od"
          ]
        },
        {
          "field": "VARIANT",
          "criticality": "informational",
          "sensitivity": "internal",
          "why": "Pattern letter shown on the bus.",
          "products": []
        },
        {
          "field": "GEO_NODE_ABBR",
          "criticality": "critical",
          "sensitivity": "internal",
          "why": "Stop key; equals GTFS stop_code. Every stop-level product.",
          "products": [
            "eta",
            "otp",
            "od",
            "twin"
          ]
        },
        {
          "field": "GEO_NAME",
          "criticality": "informational",
          "sensitivity": "internal",
          "why": "Sequence plus stop name, for display.",
          "products": []
        },
        {
          "field": "START_TERMINAL, END_TERMINAL",
          "criticality": "informational",
          "sensitivity": "internal",
          "why": "Display.",
          "products": []
        },
        {
          "field": "TRIP_EDGE",
          "criticality": "important",
          "sensitivity": "internal",
          "why": "First, middle or last stop. Needed to compute trip duration correctly.",
          "products": [
            "otp"
          ]
        },
        {
          "field": "TIME_POINT_ID, _ABBR, _NAME",
          "criticality": "important",
          "sensitivity": "internal",
          "why": "Timepoint reference; NULL between timepoints.",
          "products": [
            "otp"
          ]
        },
        {
          "field": "SERVICE_ABBR",
          "criticality": "important",
          "sensitivity": "internal",
          "why": "Weekday, Saturday, Sunday, holiday.",
          "products": [
            "demand",
            "twin"
          ]
        },
        {
          "field": "SCHED_TRIP_START, _END, _DURATION",
          "criticality": "important",
          "sensitivity": "internal",
          "why": "Derivable from GTFS.",
          "products": []
        },
        {
          "field": "SCHED_TIME_PER_STOP",
          "criticality": "critical",
          "sensitivity": "internal",
          "why": "The plan at this stop. Adherence is measured against it.",
          "products": [
            "eta",
            "otp",
            "twin"
          ]
        },
        {
          "field": "ACTUAL_ARRIVAL_TIME",
          "criticality": "critical",
          "sensitivity": "internal",
          "why": "Regional ETA, on-time performance, digital twin.",
          "products": [
            "eta",
            "otp",
            "twin",
            "anomaly"
          ]
        },
        {
          "field": "ACTUAL_DEPARTURE_TIME",
          "criticality": "critical",
          "sensitivity": "internal",
          "why": "Same, plus dwell.",
          "products": [
            "eta",
            "otp",
            "twin",
            "anomaly"
          ]
        },
        {
          "field": "ACTUAL_TRIP_DURATION, DWELLING_TIME",
          "criticality": "important",
          "sensitivity": "internal",
          "why": "Derivable; recompute regionally.",
          "products": [
            "otp"
          ]
        },
        {
          "field": "ADHERENCE_IN_SECS",
          "criticality": "important",
          "sensitivity": "internal",
          "why": "Derivable. The file's sign is the reverse of the dictionary's; recompute from the critical fields.",
          "products": [
            "otp"
          ]
        },
        {
          "field": "KPI",
          "criticality": "informational",
          "sensitivity": "internal",
          "why": "Vendor's On-Time / Early / Late label. Thresholds differ by agency; never shared as-is.",
          "products": []
        }
      ]
    },
    {
      "slug": "apc",
      "title": "Passenger counting (APC)",
      "note": "18 columns, no header row. The first two columns are in the opposite order to AVL.",
      "fields": [
        {
          "field": "TIME_TABLE_VERSION_NAME",
          "criticality": "important",
          "sensitivity": "internal",
          "why": "Board period.",
          "products": [
            "demand"
          ]
        },
        {
          "field": "CALENDAR_ID",
          "criticality": "critical",
          "sensitivity": "internal",
          "why": "Date key.",
          "products": [
            "od",
            "demand",
            "crowding",
            "twin",
            "anomaly"
          ]
        },
        {
          "field": "BLOCK_ABBR",
          "criticality": "important",
          "sensitivity": "internal",
          "why": "Vehicle block.",
          "products": [
            "twin"
          ]
        },
        {
          "field": "TRIP_ID",
          "criticality": "critical",
          "sensitivity": "internal",
          "why": "Joins to AVL.",
          "products": [
            "od",
            "crowding",
            "twin"
          ]
        },
        {
          "field": "ROUTE_ABBR",
          "criticality": "critical",
          "sensitivity": "internal",
          "why": "Route key.",
          "products": [
            "od",
            "demand",
            "crowding",
            "twin"
          ]
        },
        {
          "field": "ROUTE_DIRECTION_ABBR",
          "criticality": "important",
          "sensitivity": "internal",
          "why": "Direction.",
          "products": [
            "od"
          ]
        },
        {
          "field": "VARIANT",
          "criticality": "informational",
          "sensitivity": "internal",
          "why": "Pattern letter.",
          "products": []
        },
        {
          "field": "PATTERN_STOP_SEQUENCE",
          "criticality": "important",
          "sensitivity": "internal",
          "why": "Stop order along the trip. Origin–destination chains.",
          "products": [
            "od"
          ]
        },
        {
          "field": "STOP_NUMBER",
          "criticality": "critical",
          "sensitivity": "internal",
          "why": "Stop key; equals GTFS stop_code.",
          "products": [
            "od",
            "demand",
            "crowding",
            "twin"
          ]
        },
        {
          "field": "STOP_NAME",
          "criticality": "informational",
          "sensitivity": "internal",
          "why": "Display.",
          "products": []
        },
        {
          "field": "TOTAL_CAPACITY, SEATING_CAPACITY",
          "criticality": "important",
          "sensitivity": "internal",
          "why": "Crowding ratios.",
          "products": [
            "crowding"
          ]
        },
        {
          "field": "BOARD",
          "criticality": "critical",
          "sensitivity": "internal",
          "why": "Demand forecasting, origin–destination, crowding.",
          "products": [
            "od",
            "demand",
            "crowding",
            "twin",
            "anomaly"
          ]
        },
        {
          "field": "ALIGHT",
          "criticality": "critical",
          "sensitivity": "internal",
          "why": "Same.",
          "products": [
            "od",
            "demand",
            "crowding",
            "twin"
          ]
        },
        {
          "field": "DEPARTURE_LOAD",
          "criticality": "important",
          "sensitivity": "internal",
          "why": "Derivable; sensors drift, so recompute and reconcile.",
          "products": [
            "crowding"
          ]
        },
        {
          "field": "SERVICE_ABBR",
          "criticality": "important",
          "sensitivity": "internal",
          "why": "Service day type.",
          "products": [
            "demand"
          ]
        },
        {
          "field": "TRIP_BEGIN_TIME, TRIP_END_TIME",
          "criticality": "important",
          "sensitivity": "internal",
          "why": "Seconds past midnight. The only time in this file.",
          "products": [
            "demand",
            "crowding"
          ]
        }
      ]
    },
    {
      "slug": "afc",
      "title": "Fare transactions (AFC)",
      "note": "18 columns, comma-delimited, with a header. The only file that can point to a person.",
      "fields": [
        {
          "field": "GSN",
          "criticality": "critical",
          "sensitivity": "restricted",
          "why": "Card serial. Links taps into a person's trail over time. Never crosses raw; pseudonymised per agreement or clean room only.",
          "products": [
            "od",
            "revenue"
          ]
        },
        {
          "field": "Date, Time",
          "criticality": "critical",
          "sensitivity": "internal",
          "why": "When. With GSN it becomes a trail, so the pair is governed together.",
          "products": [
            "od",
            "demand",
            "revenue",
            "anomaly"
          ]
        },
        {
          "field": "TransactionID",
          "criticality": "important",
          "sensitivity": "internal",
          "why": "De-duplication.",
          "products": [
            "revenue"
          ]
        },
        {
          "field": "UniversalClass, SpecificClass",
          "criticality": "important",
          "sensitivity": "restricted",
          "why": "Fare class can reveal a concession: senior, student, low income.",
          "products": [
            "revenue"
          ]
        },
        {
          "field": "TrxTypeID",
          "criticality": "important",
          "sensitivity": "internal",
          "why": "Tap type.",
          "products": [
            "revenue",
            "od"
          ]
        },
        {
          "field": "TransitAuthority_ID",
          "criticality": "critical",
          "sensitivity": "internal",
          "why": "Which agency. Regional revenue split.",
          "products": [
            "revenue"
          ]
        },
        {
          "field": "CashFare, oppaymentamount",
          "criticality": "important",
          "sensitivity": "internal",
          "why": "Revenue reporting.",
          "products": [
            "revenue"
          ]
        },
        {
          "field": "ServiceProvider",
          "criticality": "critical",
          "sensitivity": "internal",
          "why": "Operator of this tap.",
          "products": [
            "od",
            "revenue",
            "journey"
          ]
        },
        {
          "field": "TransferServiceProviderID, _Name",
          "criticality": "critical",
          "sensitivity": "internal",
          "why": "The transfer from another operator. The one field that links two parties' legs of a journey; the core of regional origin–destination.",
          "products": [
            "od",
            "revenue",
            "journey"
          ]
        },
        {
          "field": "ProductOwnerID",
          "criticality": "important",
          "sensitivity": "internal",
          "why": "Who sold the product.",
          "products": [
            "revenue"
          ]
        },
        {
          "field": "TrxStatus",
          "criticality": "important",
          "sensitivity": "internal",
          "why": "Accepted or declined.",
          "products": [
            "revenue",
            "anomaly"
          ]
        },
        {
          "field": "ProductID",
          "criticality": "important",
          "sensitivity": "restricted",
          "why": "Product can reveal a concession.",
          "products": [
            "revenue"
          ]
        },
        {
          "field": "TrxLocationID",
          "criticality": "critical",
          "sensitivity": "internal",
          "why": "Device or stop. Joins to stops.",
          "products": [
            "od",
            "demand"
          ]
        },
        {
          "field": "LineID",
          "criticality": "critical",
          "sensitivity": "internal",
          "why": "Route.",
          "products": [
            "od",
            "demand",
            "revenue"
          ]
        }
      ]
    },
    {
      "slug": "gtfs",
      "title": "Timetable (GTFS)",
      "note": "Eight files in a zip. The only one of the four that is already an open standard, and already public.",
      "fields": [
        {
          "field": "stops: stop_id, stop_code, stop_lat, stop_lon",
          "criticality": "critical",
          "sensitivity": "public",
          "why": "Where. Every map, every join from AVL and APC.",
          "products": [
            "eta",
            "otp",
            "od",
            "journey",
            "twin"
          ]
        },
        {
          "field": "routes: route_id, route_short_name",
          "criticality": "critical",
          "sensitivity": "public",
          "why": "Route key.",
          "products": [
            "eta",
            "otp",
            "demand",
            "journey",
            "twin"
          ]
        },
        {
          "field": "trips: trip_id, service_id, direction_id",
          "criticality": "critical",
          "sensitivity": "public",
          "why": "Trip key; the one operations data must map to.",
          "products": [
            "eta",
            "otp",
            "journey",
            "twin"
          ]
        },
        {
          "field": "stop_times: arrival, departure, stop_sequence",
          "criticality": "critical",
          "sensitivity": "public",
          "why": "The plan. ETA and adherence are measured against it.",
          "products": [
            "eta",
            "otp",
            "journey",
            "twin"
          ]
        },
        {
          "field": "calendar_dates",
          "criticality": "critical",
          "sensitivity": "public",
          "why": "Which days service runs. This feed has no calendar.txt.",
          "products": [
            "eta",
            "otp",
            "journey"
          ]
        },
        {
          "field": "shapes, shape_id",
          "criticality": "important",
          "sensitivity": "public",
          "why": "Route geometry for maps and distance.",
          "products": [
            "journey",
            "twin"
          ]
        },
        {
          "field": "trip_headsign, stop_desc, URLs",
          "criticality": "informational",
          "sensitivity": "public",
          "why": "Display.",
          "products": []
        }
      ]
    }
  ]
}
