{
  "generated_at": "2026-06-12T11:48:38",
  "web_root": "\\\\bluemorpho\\StatsWebsiteWritable\\publictransport",
  "analysis_dir": "A:\\TrafficAnalytics\\PROJECTS\\public_transport_intel\\metadata\\web_dir_analysis",
  "local_html": "A:\\TrafficAnalytics\\PROJECTS\\public_transport_intel\\output\\html\\victorian_public_transport_consolidated_intelligence_report.html",
  "web_html": "\\\\bluemorpho\\StatsWebsiteWritable\\publictransport\\victorian_public_transport_consolidated_intelligence_report.html",
  "web_index_written": false,
  "web_index": null,
  "selection_csv": "A:\\TrafficAnalytics\\PROJECTS\\public_transport_intel\\metadata\\consolidated_publictransport_report_graph_selection.csv",
  "graph_count": 32,
  "section_count": 7,
  "missing_planned_graphs": [],
  "real_broken_refs_after_filtering_data_urls": [],
  "sections": [
    {
      "section_id": "executive-recovery",
      "section_title": "1. Patronage recovery and structural shift",
      "section_intro": "This section shows the big-system story: patronage did not simply disappear after COVID. It redistributed across modes, locations and travel purposes. CBD-heavy rail and tram activity remains weaker than 2019, while regional and outer-growth patterns are much stronger.",
      "graphs": [
        {
          "order": 1,
          "title": "Annual mode recovery heatmap",
          "rel_path": "charts/recovery_and_shift/02_annual_mode_recovery_heatmap.png",
          "name": "02_annual_mode_recovery_heatmap.png",
          "recommended_section": "",
          "score": "",
          "width": "",
          "height": "",
          "concept_key": "",
          "what": "Shows each mode's annual recovery level compared with its pre-COVID baseline.",
          "why": "This is the highest-level strategic chart because it separates the recovery story by mode instead of treating public transport as one single system.",
          "caution": "This is a mode-level recovery index, not a capacity or crowding measure."
        },
        {
          "order": 2,
          "title": "Monthly recovery index by mode",
          "rel_path": "charts/recovery_and_shift/01_monthly_recovery_index_by_mode.png",
          "name": "01_monthly_recovery_index_by_mode.png",
          "recommended_section": "",
          "score": "",
          "width": "",
          "height": "",
          "concept_key": "",
          "what": "Shows the month-by-month recovery path for major public transport modes.",
          "why": "It reveals whether recovery is stable, seasonal, still climbing, or flattening.",
          "caution": "Short-term monthly movement can reflect holidays, calendar effects and partial-month source data."
        },
        {
          "order": 3,
          "title": "Latest complete month patronage by mode",
          "rel_path": "charts/station_pressure/02_latest_complete_month_patronage_by_mode.png",
          "name": "02_latest_complete_month_patronage_by_mode.png",
          "recommended_section": "",
          "score": "",
          "width": "",
          "height": "",
          "concept_key": "",
          "what": "Compares total patronage by mode for the latest complete reporting month.",
          "why": "It gives a simple current snapshot before the report moves into station and corridor-level analysis.",
          "caution": "A single month should not be read as the whole long-term trend."
        },
        {
          "order": 4,
          "title": "Station patronage concentration",
          "rel_path": "charts/recovery_and_shift/08_station_patronage_concentration.png",
          "name": "08_station_patronage_concentration.png",
          "recommended_section": "",
          "score": "",
          "width": "",
          "height": "",
          "concept_key": "",
          "what": "Shows how strongly station entries are concentrated in the largest stations.",
          "why": "It explains why changes at a small number of central stations can dominate the public transport story.",
          "caution": "Concentration does not mean smaller stations are unimportant locally."
        }
      ]
    },
    {
      "section_id": "cbd-growth",
      "section_title": "2. CBD decline and growth winners",
      "section_intro": "This section separates the CBD commuter-station decline from the growth-station story. The result is a more nuanced picture: central city stations remain huge, but many have not returned to 2019 levels, while selected outer and growth-area stations have increased.",
      "graphs": [
        {
          "order": 5,
          "title": "CBD station patronage decline",
          "rel_path": "charts/recovery_and_shift/03_cbd_station_patronage_decline.png",
          "name": "03_cbd_station_patronage_decline.png",
          "recommended_section": "",
          "score": "",
          "width": "",
          "height": "",
          "concept_key": "",
          "what": "Shows major CBD and central stations with large patronage declines compared with pre-COVID levels.",
          "why": "This is one of the strongest public-facing charts because it makes the hybrid-work/CBD travel shift visible.",
          "caution": "A decline from 2019 does not mean these stations are small; many remain among the busiest stations in Victoria."
        },
        {
          "order": 6,
          "title": "Top station growth winners",
          "rel_path": "charts/recovery_and_shift/04_top_station_growth_winners.png",
          "name": "04_top_station_growth_winners.png",
          "recommended_section": "",
          "score": "",
          "width": "",
          "height": "",
          "concept_key": "",
          "what": "Ranks stations with the strongest growth over the comparison period.",
          "why": "This provides the counter-story to CBD decline: some stations and corridors are growing strongly.",
          "caution": "Very high percentage growth can occur from a low starting base, so absolute growth should also be considered."
        },
        {
          "order": 7,
          "title": "Top station decline",
          "rel_path": "charts/station_pressure/08_top_station_decline.png",
          "name": "08_top_station_decline.png",
          "recommended_section": "",
          "score": "",
          "width": "",
          "height": "",
          "concept_key": "",
          "what": "Ranks stations with the largest patronage decreases.",
          "why": "It provides a broader station-level decline list beyond the central-city summary.",
          "caution": "Decline should be interpreted alongside station size, land use and changes in commuter behaviour."
        },
        {
          "order": 8,
          "title": "Top station growth",
          "rel_path": "charts/station_pressure/07_top_station_growth.png",
          "name": "07_top_station_growth.png",
          "recommended_section": "",
          "score": "",
          "width": "",
          "height": "",
          "concept_key": "",
          "what": "Ranks stations with the strongest increase in station entries.",
          "why": "It identifies stations and growth areas where demand has strengthened.",
          "caution": "Growth charts should be read with absolute entries, not just percentage change."
        }
      ]
    },
    {
      "section_id": "gtfs-pressure",
      "section_title": "3. GTFS supply and station-pressure layer",
      "section_intro": "This section joins annual station-entry data to the GTFS timetable supply layer. The result is a pressure proxy: how much recorded station-entry demand sits against scheduled service supply. It is not a formal crowding measure, but it is a useful screening layer.",
      "graphs": [
        {
          "order": 9,
          "title": "GTFS station match quality",
          "rel_path": "charts/station_pressure/01_gtfs_match_quality.png",
          "name": "01_gtfs_match_quality.png",
          "recommended_section": "",
          "score": "",
          "width": "",
          "height": "",
          "concept_key": "",
          "what": "Shows how successfully station-entry rows matched to GTFS station/service supply records.",
          "why": "This is a data-quality foundation chart: it tells the reader how complete the station-supply matching process was.",
          "caution": "Unmatched or special-event stations should be handled separately before making operational conclusions."
        },
        {
          "order": 10,
          "title": "Inner-west entries per supply record",
          "rel_path": "charts/station_pressure/03_inner_west_entries_per_supply_record.png",
          "name": "03_inner_west_entries_per_supply_record.png",
          "recommended_section": "",
          "score": "",
          "width": "",
          "height": "",
          "concept_key": "",
          "what": "Shows annual station entries divided by scheduled supply records for selected inner-west stations.",
          "why": "This creates a local pressure hierarchy across Footscray, Sunshine, Newport, Spotswood and surrounding stations.",
          "caution": "Entries per supply record is a proxy. It does not include train length, cancellations, passenger loads or platform capacity."
        },
        {
          "order": 11,
          "title": "Inner-west patronage change",
          "rel_path": "charts/station_pressure/04_inner_west_patronage_change.png",
          "name": "04_inner_west_patronage_change.png",
          "recommended_section": "",
          "score": "",
          "width": "",
          "height": "",
          "concept_key": "",
          "what": "Shows how selected inner-west station entries have changed over time.",
          "why": "It helps connect local station pressure with the broader post-COVID recovery and redistribution story.",
          "caution": "Local changes can reflect nearby station competition, land use, service patterns and changing commute habits."
        },
        {
          "order": 12,
          "title": "Supply-demand pressure quadrant",
          "rel_path": "charts/recovery_and_shift/06_supply_demand_pressure_quadrant.png",
          "name": "06_supply_demand_pressure_quadrant.png",
          "recommended_section": "",
          "score": "",
          "width": "",
          "height": "",
          "concept_key": "",
          "what": "Places stations into a quadrant using demand and supply-pressure indicators.",
          "why": "It is a useful planning-style chart because it separates high-demand/high-pressure stations from lower-pressure stations.",
          "caution": "The quadrant is a screening tool, not a final priority list."
        },
        {
          "order": 13,
          "title": "Patronage pressure versus supply scatter",
          "rel_path": "charts/station_pressure/11_patronage_pressure_vs_supply_scatter.png",
          "name": "11_patronage_pressure_vs_supply_scatter.png",
          "recommended_section": "",
          "score": "",
          "width": "",
          "height": "",
          "concept_key": "",
          "what": "Plots station patronage pressure against scheduled service supply.",
          "why": "It shows outliers that may deserve deeper investigation.",
          "caution": "Scatter outliers need context before policy conclusions are drawn."
        },
        {
          "order": 14,
          "title": "GTFS route supply concentration",
          "rel_path": "charts/recovery_and_shift/09_gtfs_route_supply_concentration.png",
          "name": "09_gtfs_route_supply_concentration.png",
          "recommended_section": "",
          "score": "",
          "width": "",
          "height": "",
          "concept_key": "",
          "what": "Shows how scheduled trips are concentrated among the highest-supply routes.",
          "why": "It explains how timetable supply is distributed across the network.",
          "caution": "Scheduled trips are not the same as realised service, capacity, reliability or passenger load."
        },
        {
          "order": 15,
          "title": "Top routes by scheduled trips",
          "rel_path": "charts/station_pressure/09_top_routes_by_scheduled_trips.png",
          "name": "09_top_routes_by_scheduled_trips.png",
          "recommended_section": "",
          "score": "",
          "width": "",
          "height": "",
          "concept_key": "",
          "what": "Ranks the routes with the most scheduled trips in the GTFS feed.",
          "why": "It reveals which train, tram and bus routes dominate timetable supply.",
          "caution": "High scheduled supply does not automatically imply high crowding or high demand."
        },
        {
          "order": 16,
          "title": "Route type scheduled trip summary",
          "rel_path": "charts/station_pressure/10_route_type_scheduled_trip_summary.png",
          "name": "10_route_type_scheduled_trip_summary.png",
          "recommended_section": "",
          "score": "",
          "width": "",
          "height": "",
          "concept_key": "",
          "what": "Summarises scheduled trips by GTFS route type or mode group.",
          "why": "It gives the timetable-supply layer a simple mode-level view.",
          "caution": "Mode groups can hide strong variation between individual routes."
        }
      ]
    },
    {
      "section_id": "passenger-loads",
      "section_title": "4. Train passenger-count loads and peak pressure",
      "section_intro": "This is the new intelligence layer. It uses train service passenger-count records to move beyond station entries. The charts show boardings, alightings, maximum departure loads, AM/PM peak load directionality, day-type structure and the role of major interchange stations.",
      "graphs": [
        {
          "order": 17,
          "title": "Top stations by passenger-count boardings and alightings",
          "rel_path": "charts/train_passenger_loads_final_public/01_top_stations_boardings_alightings_final.png",
          "name": "01_top_stations_boardings_alightings_final.png",
          "recommended_section": "",
          "score": "",
          "width": "",
          "height": "",
          "concept_key": "",
          "what": "Compares passenger-count boardings and alightings at the largest station activity nodes.",
          "why": "It confirms the scale of Flinders Street and Southern Cross while showing Footscray as a major non-CBD activity node.",
          "caution": "Passenger-count boardings and station-entry validations are related but not identical datasets."
        },
        {
          "order": 18,
          "title": "Top train lines by boardings with maximum load",
          "rel_path": "charts/train_passenger_loads_final_public/02_top_train_lines_boardings_with_max_load_final.png",
          "name": "02_top_train_lines_boardings_with_max_load_final.png",
          "recommended_section": "",
          "score": "",
          "width": "",
          "height": "",
          "concept_key": "",
          "what": "Ranks train lines by passenger boardings and annotates maximum observed departure load.",
          "why": "This combines corridor scale and peak-load intensity in one graph.",
          "caution": "Maximum load is a peak observation and should not be read as the usual load on every service."
        },
        {
          "order": 19,
          "title": "AM peak maximum loads",
          "rel_path": "charts/train_passenger_loads_final_public/03_am_peak_max_loads_final.png",
          "name": "03_am_peak_max_loads_final.png",
          "recommended_section": "",
          "score": "",
          "width": "",
          "height": "",
          "concept_key": "",
          "what": "Ranks line-direction combinations by maximum observed departure load in the AM peak.",
          "why": "It shows where the strongest morning peak loads appear and highlights the dominance of Up-direction peak movement.",
          "caution": "This does not show every train; it shows the maximum observed load by line-direction grouping."
        },
        {
          "order": 20,
          "title": "PM peak maximum loads",
          "rel_path": "charts/train_passenger_loads_final_public/04_pm_peak_max_loads_final.png",
          "name": "04_pm_peak_max_loads_final.png",
          "recommended_section": "",
          "score": "",
          "width": "",
          "height": "",
          "concept_key": "",
          "what": "Ranks line-direction combinations by maximum observed departure load in the PM peak.",
          "why": "It shows the reverse afternoon pattern, where Down-direction movements dominate many of the strongest peak loads.",
          "caution": "Peak-load rankings should be read with corridor stopping patterns and service design in mind."
        },
        {
          "order": 21,
          "title": "Passenger boardings by day type",
          "rel_path": "charts/train_passenger_loads_final_public/13_day_type_boardings_final.png",
          "name": "13_day_type_boardings_final.png",
          "recommended_section": "",
          "score": "",
          "width": "",
          "height": "",
          "concept_key": "",
          "what": "Splits boardings for top lines by normal weekdays, public holidays, Saturdays, school holidays and Sundays.",
          "why": "It shows how much of the train system is still driven by ordinary weekday demand.",
          "caution": "Day-type categories can reflect calendar structure as well as passenger behaviour."
        }
      ]
    },
    {
      "section_id": "inner-west",
      "section_title": "5. Footscray and inner-west focus",
      "section_intro": "This section pulls the system-wide data down to the local inner-west story. Footscray emerges as a major interchange and passenger-count node, while Spotswood, Yarraville, Newport, Sunshine and surrounding stations sit in a clear local hierarchy.",
      "graphs": [
        {
          "order": 22,
          "title": "Footscray boardings and alightings by line and direction",
          "rel_path": "charts/train_passenger_loads_final_public/05_footscray_line_direction_boardings_alightings_final.png",
          "name": "05_footscray_line_direction_boardings_alightings_final.png",
          "recommended_section": "",
          "score": "",
          "width": "",
          "height": "",
          "concept_key": "",
          "what": "Splits Footscray passenger-count boardings and alightings by train line and direction.",
          "why": "It shows that Footscray is not just a local station; it functions as a major interchange shaped heavily by Werribee and Sunbury movements.",
          "caution": "Line-direction splits should be read with interchange and stopping-pattern effects in mind."
        },
        {
          "order": 23,
          "title": "Inner-west passenger-count activity intensity",
          "rel_path": "charts/train_passenger_loads_final_public/06_inner_west_activity_intensity_final.png",
          "name": "06_inner_west_activity_intensity_final.png",
          "recommended_section": "",
          "score": "",
          "width": "",
          "height": "",
          "concept_key": "",
          "what": "Shows boardings per passenger-count stop record for selected inner-west stations.",
          "why": "It ranks inner-west stations by passenger-count activity intensity and keeps Spotswood visible in the local comparison.",
          "caution": "This is not a crowding measure; it is an activity-intensity proxy."
        },
        {
          "order": 24,
          "title": "Inner-west strategic scatter",
          "rel_path": "charts/recovery_and_shift/07_inner_west_strategic_scatter.png",
          "name": "07_inner_west_strategic_scatter.png",
          "recommended_section": "",
          "score": "",
          "width": "",
          "height": "",
          "concept_key": "",
          "what": "Places selected inner-west stations into a strategic comparison view.",
          "why": "It helps show which local stations are large, recovering, growing or under pressure.",
          "caution": "Scatter position should be interpreted with local land use, service levels and station function."
        },
        {
          "order": 25,
          "title": "Inner-west entries per supply record",
          "rel_path": "charts/station_pressure/03_inner_west_entries_per_supply_record.png",
          "name": "03_inner_west_entries_per_supply_record.png",
          "recommended_section": "",
          "score": "",
          "width": "",
          "height": "",
          "concept_key": "",
          "what": "Compares station entries per scheduled supply record across inner-west stations.",
          "why": "It is one of the clearest local pressure-proxy charts.",
          "caution": "It should be combined with passenger-count loads before making strong operational claims."
        }
      ]
    },
    {
      "section_id": "validation-gap",
      "section_title": "6. Station-entry versus passenger-count validation-gap screening",
      "section_intro": "This section compares annual station-entry counts with train passenger-count boardings. It is useful for identifying places where datasets diverge, but it must be framed carefully. These charts do not prove fare evasion. They identify validation-gap, counting-methodology, interchange or data-quality candidates for further investigation.",
      "graphs": [
        {
          "order": 26,
          "title": "Indexed validation-gap scatter â€” mid-network",
          "rel_path": "charts/train_passenger_loads_final_public/10_station_entries_vs_boardings_indexed_scatter_mid_network_final.png",
          "name": "10_station_entries_vs_boardings_indexed_scatter_mid_network_final.png",
          "recommended_section": "",
          "score": "",
          "width": "",
          "height": "",
          "concept_key": "",
          "what": "Compares station-entry counts with passenger-count boardings while excluding the largest outliers so the mid-network can be read more clearly.",
          "why": "The numbered index makes the scatter much easier to read than station names printed over the dots.",
          "caution": "This is a validation-gap screen only, not proof of fare evasion."
        },
        {
          "order": 27,
          "title": "Largest station-entry versus boarding gaps",
          "rel_path": "charts/train_passenger_loads_final_public/07_largest_station_entry_vs_boarding_gaps_final.png",
          "name": "07_largest_station_entry_vs_boarding_gaps_final.png",
          "recommended_section": "",
          "score": "",
          "width": "",
          "height": "",
          "concept_key": "",
          "what": "Ranks the largest differences between passenger-count boardings and station-entry counts.",
          "why": "It identifies the biggest divergence points for deeper data review.",
          "caution": "Large gaps may reflect interchange, counting definitions, model methodology, or validation behaviour."
        },
        {
          "order": 28,
          "title": "Mid-tier station-entry versus boarding gaps",
          "rel_path": "charts/train_passenger_loads_final_public/08_mid_tier_station_entry_vs_boarding_gaps_final.png",
          "name": "08_mid_tier_station_entry_vs_boarding_gaps_final.png",
          "recommended_section": "",
          "score": "",
          "width": "",
          "height": "",
          "concept_key": "",
          "what": "Shows validation-gap candidates after excluding the largest outliers.",
          "why": "This is better for comparing stations below the Flinders Street / Southern Cross / Richmond scale.",
          "caution": "Mid-tier gaps should be investigated, not treated as conclusions."
        }
      ]
    },
    {
      "section_id": "technical-profiles",
      "section_title": "7. Technical appendix: corridor load-shape profiles",
      "section_intro": "These charts are useful as a technical appendix. They show maximum departure-load shape along Werribee and Sunbury line sequences. They are not the lead public story because stopping patterns, express services, branches and City Loop routing can affect the station sequence.",
      "graphs": [
        {
          "order": 29,
          "title": "Werribee Down-direction load profile",
          "rel_path": "charts/train_passenger_loads_final_public/11_werribee_down_profile_cleaner_final.png",
          "name": "11_werribee_down_profile_cleaner_final.png",
          "recommended_section": "",
          "score": "",
          "width": "",
          "height": "",
          "concept_key": "",
          "what": "Shows maximum departure-load shape across the Werribee Down-direction station sequence.",
          "why": "It helps reveal how load changes along the corridor.",
          "caution": "Interpret as an exploratory load-shape profile, not a train-by-train operational diagram."
        },
        {
          "order": 30,
          "title": "Werribee Up-direction load profile",
          "rel_path": "charts/train_passenger_loads_final_public/12_werribee_up_profile_cleaner_final.png",
          "name": "12_werribee_up_profile_cleaner_final.png",
          "recommended_section": "",
          "score": "",
          "width": "",
          "height": "",
          "concept_key": "",
          "what": "Shows maximum departure-load shape across the Werribee Up-direction station sequence.",
          "why": "It helps show how load builds toward the inner network.",
          "caution": "Stopping patterns and express services can affect the sequence."
        },
        {
          "order": 31,
          "title": "Sunbury Down-direction load profile",
          "rel_path": "charts/train_passenger_loads_final_public/14_sunbury_down_profile_cleaner_final.png",
          "name": "14_sunbury_down_profile_cleaner_final.png",
          "recommended_section": "",
          "score": "",
          "width": "",
          "height": "",
          "concept_key": "",
          "what": "Shows maximum departure-load shape across the Sunbury Down-direction station sequence.",
          "why": "It provides a western-corridor technical load-shape view.",
          "caution": "City Loop and stopping-pattern effects should be considered."
        },
        {
          "order": 32,
          "title": "Sunbury Up-direction load profile",
          "rel_path": "charts/train_passenger_loads_final_public/15_sunbury_up_profile_cleaner_final.png",
          "name": "15_sunbury_up_profile_cleaner_final.png",
          "recommended_section": "",
          "score": "",
          "width": "",
          "height": "",
          "concept_key": "",
          "what": "Shows maximum departure-load shape across the Sunbury Up-direction station sequence.",
          "why": "It helps show how load builds along the corridor toward the inner network.",
          "caution": "Use as a technical appendix chart, not a simplified public headline chart."
        }
      ]
    }
  ]
}