{
  "schema_version": 1,
  "generated_on": "2026-10-13",
  "precision": "minute",
  "note": "How long a train takes between adjacent stations, derived from operator figures rather than measured or modelled. A line absent from here has no published table; nothing in this file is estimated. Its own file rather than a field on the line datasets, so it carries its own verified_on and can go stale on its own without bumping their schema.",
  "source": "Differenced from data/service-hours.json, which records each operator's own posted schedule.",
  "lines": {
    "lrt1": {
      "source_url": "https://lrmc.ph/2025/03/25/lrt-1-to-extend-operating-hours-starting-26-march-2025/",
      "source_name": "Light Rail Manila Corporation",
      "verified_on": null,
      "note": "The operator publishes terminal departures only, so there is no per-station table to difference. Run times are not known and are not estimated from distance.",
      "segments": []
    },
    "lrt2": {
      "source_url": "https://www.lrta.gov.ph/train-operating-schedule/",
      "source_name": "Light Rail Transit Authority",
      "verified_on": "2026-09-20",
      "note": "Derived by differencing the operator's published last-train departure times, station by station. Each figure is departure to departure, so it includes the dwell at the far station. Recorded per segment and used in both directions; see build-run-times.mjs for why, and for what is checked before that is allowed. The published times are whole minutes, so one hop is good to about a minute — but the rounding does not compound along a journey, because a sum of consecutive differences is just the last departure minus the first.",
      "segments": [
        {
          "from_station_id": "lrt2_recto",
          "to_station_id": "lrt2_legarda",
          "minutes": 2,
          "observations": 1
        },
        {
          "from_station_id": "lrt2_legarda",
          "to_station_id": "lrt2_pureza",
          "minutes": 2,
          "observations": 2
        },
        {
          "from_station_id": "lrt2_pureza",
          "to_station_id": "lrt2_v_mapa",
          "minutes": 2,
          "observations": 2
        },
        {
          "from_station_id": "lrt2_v_mapa",
          "to_station_id": "lrt2_j_ruiz",
          "minutes": 2,
          "observations": 2
        },
        {
          "from_station_id": "lrt2_j_ruiz",
          "to_station_id": "lrt2_gilmore",
          "minutes": 2,
          "observations": 2
        },
        {
          "from_station_id": "lrt2_gilmore",
          "to_station_id": "lrt2_betty_go_belmonte",
          "minutes": 2,
          "observations": 2
        },
        {
          "from_station_id": "lrt2_betty_go_belmonte",
          "to_station_id": "lrt2_araneta_center_cubao",
          "minutes": 2,
          "observations": 2
        },
        {
          "from_station_id": "lrt2_araneta_center_cubao",
          "to_station_id": "lrt2_anonas",
          "minutes": 2,
          "observations": 2
        },
        {
          "from_station_id": "lrt2_anonas",
          "to_station_id": "lrt2_katipunan",
          "minutes": 2,
          "observations": 2
        },
        {
          "from_station_id": "lrt2_katipunan",
          "to_station_id": "lrt2_santolan",
          "minutes": 2,
          "observations": 2
        },
        {
          "from_station_id": "lrt2_santolan",
          "to_station_id": "lrt2_marikina_pasig",
          "minutes": 3,
          "observations": 2
        },
        {
          "from_station_id": "lrt2_marikina_pasig",
          "to_station_id": "lrt2_antipolo",
          "minutes": 3,
          "observations": 1
        }
      ]
    },
    "mrt3": {
      "source_url": null,
      "source_name": null,
      "verified_on": null,
      "note": "The operator publishes no schedule at all. Nothing here.",
      "segments": []
    },
    "pnr": {
      "source_url": null,
      "source_name": null,
      "verified_on": null,
      "note": "The operator publishes no schedule at all. Nothing here.",
      "segments": []
    }
  }
}
