{
  "agency": {
    "country": "JP",
    "id": "ikasa-bus",
    "name": "Ikasa Bus Company (\u4e95\u7b20\u30d0\u30b9\u30ab\u30f3\u30d1\u30cb\u30fc)",
    "operating_note": "Ikasa Bus Company is based in Kasaoka, Okayama, and most of its 680 stops sit in the Kasaoka and Ibara area, so the record is filed under Okayama. Some routes cross into Fukuyama in Hiroshima, which is why the feed is published on the Hiroshima Bus Association site.",
    "subdivision_code": "JP-33",
    "subdivision_name": "Okayama"
  },
  "categories": {
    "completeness": {
      "details": {
        "accessibility": {
          "measures": "presence_not_usability",
          "score": 0.0,
          "stops_marked_accessible_pct": 0.0,
          "stops_marked_not_accessible_pct": 0.0,
          "stops_stated_pct": 0.0,
          "trips_stated_pct": 0.0
        },
        "accessibility_measures": "presence_not_usability",
        "cemv": {
          "declared": false,
          "supported": false
        },
        "components": {
          "contact": 7.5,
          "fares": 15.0,
          "headsigns": 15.0,
          "stop_names": 15.0,
          "wheelchair_stops": 0.0,
          "wheelchair_trips": 0.0
        },
        "fare_free": false,
        "fares": {
          "applied": true,
          "has_leg_rules": false,
          "has_products": false,
          "has_transfer_rules": false,
          "model": "legacy",
          "product_count": 0
        },
        "flex": {
          "booking_reachable": false,
          "booking_rule_count": 0,
          "has_booking_rules": false,
          "has_flex": false
        },
        "has_fares": true,
        "headsign_applicable_trips": 1371,
        "headsign_loop_exempt_trips": 0,
        "headsign_pct": 100.0,
        "headsign_scored_pct": 100.0,
        "mixed_case_stop_name_pct": 99.9,
        "pathways": {
          "has_entrances": false,
          "has_levels": false,
          "has_pathways": false,
          "has_stations": false,
          "has_step_free": false,
          "pathway_count": 0
        },
        "stops": 680,
        "translations": {
          "feed_lang": "ja",
          "has_translations": true,
          "languages": [
            "en",
            "ja",
            "ja-hrkt"
          ],
          "translated_tables": [
            "routes",
            "stops"
          ],
          "translation_count": 1568
        },
        "trips": 1371,
        "unmeasured_components": [],
        "wheelchair_accessible_pct": 0.0,
        "wheelchair_boarding_pct": 0.0,
        "wheelchair_marked_accessible_pct": 0.0,
        "wheelchair_marked_not_accessible_pct": 0.0
      },
      "findings": [
        {
          "code": "scorecard_wheelchair_boarding_unknown",
          "count": 680,
          "effort": "A column in stops.txt; your scheduling software likely has it.",
          "fix": "Set wheelchair_boarding to 1 (accessible) or 2 (not accessible) for every stop. A field survey can start with the busiest stops.",
          "owner": "Likely your team",
          "points": 25.0,
          "severity": "WARNING",
          "what": "680 of 680 stops don't say whether a wheelchair user can board there.",
          "why": "Riders who use wheelchairs can't plan a trip when accessibility is marked 'unknown'; apps show no information at all."
        },
        {
          "code": "scorecard_wheelchair_accessible_unknown",
          "count": 1371,
          "effort": "A default or per-trip field in your export.",
          "fix": "Set wheelchair_accessible on every trip. If every vehicle is accessible, this may be one default; otherwise use the value for each trip.",
          "owner": "Likely your export tool",
          "points": 15.0,
          "severity": "WARNING",
          "what": "1371 of 1371 trips don't say whether the vehicle is wheelchair accessible.",
          "why": "Even with accessible stops, riders need to know the bus itself can take them."
        },
        {
          "code": "scorecard_no_feed_contact",
          "count": 1,
          "effort": "One field.",
          "fix": "Add feed_contact_email to feed_info.txt.",
          "owner": "",
          "points": 7.5,
          "severity": "INFO",
          "what": "feed_info.txt has no technical contact (feed_contact_email or feed_contact_url).",
          "why": "App makers and state data programs have nobody to email when they spot a problem. Small errors then sit in the feed for months."
        }
      ],
      "name": "completeness",
      "score": 52.5,
      "status": "measured",
      "summary": "0% of stops state wheelchair accessibility (0% marked accessible, 0% marked not accessible). This measures what the feed publishes, not whether a stop is physically usable. Fare data is published.",
      "weight": 0.25
    },
    "correctness": {
      "details": {
        "distinct_codes": 12,
        "instances_by_severity": {
          "ERROR": 0,
          "INFO": 1344,
          "WARNING": 643
        },
        "validator_version": "8.0.1"
      },
      "findings": [
        {
          "code": "missing_recommended_field",
          "count": 546,
          "effort": "A field at a time; not urgent.",
          "fix": "Review the flagged fields and fill in the ones your riders would use.",
          "owner": "",
          "points": 8.0,
          "severity": "WARNING",
          "what": "Some files leave out fields that GTFS asks for but does not require.",
          "why": "Recommended fields like agency_phone or stop descriptions make the feed more useful to riders and trip planners."
        },
        {
          "code": "same_name_and_description_for_stop",
          "count": 36,
          "effort": "Varies.",
          "fix": "Review the rule documentation for 'same_name_and_description_for_stop' at https://gtfs-validator.mobilitydata.org/rules.html and check the flagged rows in your feed.",
          "owner": "",
          "points": 6.0,
          "severity": "WARNING",
          "what": "Same name and description for stop (flagged by the MobilityData validator).",
          "why": "See the linked rule for what this affects."
        },
        {
          "code": "stop_without_stop_time",
          "count": 27,
          "effort": "A review pass in your scheduling software.",
          "fix": "Remove retired stops from the export, or add them back to the trips that should serve them.",
          "owner": "Likely your export tool",
          "points": 6.0,
          "severity": "WARNING",
          "what": "Some stops exist in the feed but no trip ever stops at them.",
          "why": "Riders may walk to a stop where no bus is scheduled to arrive."
        },
        {
          "code": "mixed_case_recommended_field",
          "count": 26,
          "effort": "Often a bulk fix in your scheduling software.",
          "fix": "Use mixed case for stop names and headsigns (e.g. 'Main St & 2nd Ave', not 'MAIN ST & 2ND AVE').",
          "owner": "Likely your export tool",
          "points": 6.0,
          "severity": "WARNING",
          "what": "Some rider-facing names are in ALL CAPS or all lowercase.",
          "why": "ALL-CAPS stop and headsign names are harder to read in apps and are read awkwardly by screen readers."
        },
        {
          "code": "expired_calendar",
          "count": 6,
          "effort": "One setting in most export tools.",
          "fix": "Remove past service periods the next time you export the feed.",
          "owner": "Likely your export tool",
          "points": 6.0,
          "severity": "WARNING",
          "what": "Some service calendars in the feed have already ended.",
          "why": "Expired calendars are dead weight and can hide real schedule problems from your staff and vendors."
        },
        {
          "code": "duplicate_route_name",
          "count": 1,
          "effort": "One field per route.",
          "fix": "Give each route a distinct short or long name.",
          "owner": "",
          "points": 4.0,
          "severity": "WARNING",
          "what": "Two or more routes share the same name.",
          "why": "Riders can't tell the routes apart in apps."
        },
        {
          "code": "missing_feed_contact_email_and_url",
          "count": 1,
          "effort": "One field, set once in export settings.",
          "fix": "Add feed_contact_email or feed_contact_url to feed_info.txt.",
          "owner": "Likely your export tool",
          "points": 4.0,
          "severity": "WARNING",
          "what": "feed_info.txt lists no contact email and no contact URL.",
          "why": "Without a contact, apps like Google Maps can't reach you when they find a problem in the feed."
        },
        {
          "code": "unsorted_stop_times",
          "count": 1331,
          "effort": "Varies.",
          "fix": "Review the rule documentation for 'unsorted_stop_times' at https://gtfs-validator.mobilitydata.org/rules.html and check the flagged rows in your feed.",
          "owner": "",
          "points": 1.0,
          "severity": "INFO",
          "what": "Unsorted stop times (flagged by the MobilityData validator).",
          "why": "See the linked rule for what this affects."
        },
        {
          "code": "service_window_outside_feed_period",
          "count": 5,
          "effort": "Two fields in feed_info.txt, or one export setting.",
          "fix": "Widen feed_start_date and feed_end_date to cover all service dates, or fix the dates that fall outside.",
          "owner": "Likely your export tool",
          "points": 0.5,
          "severity": "INFO",
          "what": "Some service dates fall outside the date window set in feed_info.txt.",
          "why": "feed_info.txt should span every day your service runs, so apps know when the data applies."
        },
        {
          "code": "unknown_column",
          "count": 4,
          "effort": "A quick look at the flagged files.",
          "fix": "Check the flagged column names for misspellings of standard GTFS fields; remove them if they are vendor extras.",
          "owner": "",
          "points": 0.5,
          "severity": "INFO",
          "what": "Some files contain columns that are not part of the GTFS spec.",
          "why": "Harmless to riders, but apps ignore these columns and they can hide typos in real column names."
        },
        {
          "code": "unknown_file",
          "count": 3,
          "effort": "A quick look at the flagged file.",
          "fix": "Check the flagged file name for a typo of a standard GTFS file. Remove it if it is a vendor extra.",
          "owner": "",
          "points": 0.5,
          "severity": "INFO",
          "what": "The feed includes a file that is not part of the GTFS spec.",
          "why": "Apps ignore files they don't know, and a stray file can hide a misspelled standard file name."
        },
        {
          "code": "big_gap_in_service",
          "count": 1,
          "effort": "A review of your calendar dates.",
          "fix": "Check whether the gap is real, like a seasonal break; if not, add the missing dates to the calendar.",
          "owner": "",
          "points": 0.5,
          "severity": "INFO",
          "what": "The feed has a stretch of two weeks or more with no service running.",
          "why": "A long gap can mean dates were left out of the calendar. Apps then show no trips on those days."
        }
      ],
      "name": "correctness",
      "score": 57.0,
      "status": "measured",
      "summary": "The MobilityData validator flagged 12 kinds of issue across 1987 instances (0 error, 643 warning, 1344 informational).",
      "weight": 0.35
    },
    "freshness": {
      "details": {
        "days_until_expiry": 94,
        "effective_expiry_date": "2026-12-08",
        "feed_end_date": "2026-12-08",
        "feed_start_date": "2026-06-06",
        "feed_version": "20260606_20260905",
        "has_feed_info": true,
        "last_service_date": "2027-01-11",
        "seasonal_boundary": true,
        "service_horizon_review_years": 10,
        "service_horizon_status": "within_review_threshold",
        "service_type": "fixed"
      },
      "findings": [],
      "name": "freshness",
      "score": 100.0,
      "status": "measured",
      "summary": "Service data covers the next 94 days.",
      "weight": 0.2
    },
    "realtime": {
      "details": {
        "alerts_content": {
          "alerts": 0,
          "ended_over_30_days_ago": 0,
          "with_cause_and_effect": 0,
          "with_description": 0,
          "with_header_text": 0,
          "with_informed_entity": 0
        },
        "configured_kinds": [
          "trip_updates",
          "vehicle_positions",
          "service_alerts"
        ],
        "coverage_pct": null,
        "kinds_configured": 3,
        "kinds_reachable": 3,
        "reachable_kinds": [
          "trip_updates",
          "vehicle_positions",
          "service_alerts"
        ],
        "rt_freshness": "lapsed",
        "samples": 9,
        "scheduled_trips_in_window": 0,
        "worst_lag_seconds": 6558
      },
      "findings": [
        {
          "code": "scorecard_rt_feed_lapsed",
          "count": 1,
          "effort": "A vendor support ticket; treat it as a feed outage.",
          "fix": "Ask your AVL vendor why the feed stopped advancing; the GTFS-Realtime header timestamp should move forward on every publish.",
          "owner": "",
          "points": 50.0,
          "severity": "ERROR",
          "what": "The realtime feed's last update was about 1 hours old when sampled.",
          "why": "A realtime feed this far behind has effectively stopped. Riders see buses that already left, or apps quietly fall back to the schedule while still showing a live label."
        }
      ],
      "name": "realtime",
      "score": 50.0,
      "status": "measured",
      "summary": "Sampled 9 times outside service hours: 3 of 3 configured feeds healthy; vehicle position plausibility was not measurable.",
      "weight": 0.2
    }
  },
  "confidence": {
    "feed_age_days": 0,
    "fetch_source": "origin",
    "level": "high",
    "measured_categories": 4,
    "notes": [
      "All four score categories were measured this run.",
      "Realtime was sampled in one bounded window of 9 snapshots.",
      "The feed was downloaded from the official feed URL on file."
    ],
    "rt_windows": 1,
    "total_categories": 4
  },
  "conformance": {
    "awarded": false,
    "criteria": [
      {
        "detail": "Passes validation with no errors.",
        "key": "valid",
        "met": true
      },
      {
        "detail": "Service data covers the next 94 days.",
        "key": "current",
        "met": true
      },
      {
        "detail": "States wheelchair access on 0% of stops and 0% of trips; the mark needs 90% of each.",
        "key": "accessible",
        "met": false
      }
    ],
    "status": "not_yet",
    "summary": "One requirement remains for this feed to earn the conformance mark. States wheelchair access on 0% of stops and 0% of trips; the mark needs 90% of each.",
    "version": 2
  },
  "feed": {
    "license_note": "CC0 public domain dedication, stated on the Hiroshima Bus Association GTFS open data site that publishes the feed. No attribution is required.",
    "reachable": true,
    "sha256": "1b661a8af5d08f66ccb5a9fc1495f8cad9208745cd1f88faa14f49d8c9f1fcde",
    "size_bytes": 308243,
    "source_provenance": "official",
    "static_url": "https://bus-vision.jp/gtfs_v2/ikasabus/gtfsFeed"
  },
  "fetch": {
    "final_url": "https://bus-vision.jp/gtfs_v2/ikasabus/gtfsFeed",
    "max_attempts": 4,
    "reader_archive_profile": "raw-v1",
    "source": "origin",
    "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
  },
  "generated_at": "2026-09-05T00:00:00+00:00",
  "geo": {
    "bbox": [
      133.34859,
      34.44923,
      133.68022,
      34.62915
    ],
    "lat": 34.51105,
    "lon": 133.46519,
    "stop_count": 680
  },
  "mode_profile": {
    "ferry_only": false,
    "graded": false,
    "has_ferry": false,
    "is_multimodal": false,
    "measured": true,
    "modes": [
      {
        "key": "bus",
        "label": "Bus",
        "route_count": 21,
        "trip_count": 1371,
        "trip_share_pct": 100.0
      }
    ],
    "primary_mode": "bus",
    "primary_mode_label": "Bus",
    "route_count": 21,
    "trip_count": 1371
  },
  "overall": {
    "grade": "D",
    "margin_to_lower_band": 3.1,
    "margin_to_next_band": 6.9,
    "score": 63.1
  },
  "recommendations": [],
  "routability": {
    "boardable_stops": 680,
    "findings": [
      {
        "code": "scorecard_orphan_stops",
        "count": 27,
        "effort": "A cleanup pass in your scheduling software.",
        "fix": "Remove stops no route serves, or add the trips that should call at them.",
        "owner": "Likely your export tool",
        "points": 0.0,
        "severity": "INFO",
        "what": "27 of 680 boardable stops are never served by any trip.",
        "why": "Riders see these stops in apps and on the map but can never catch anything there, which erodes trust in the data."
      }
    ],
    "orphan_stops": 27,
    "single_stop_trips": 0,
    "trips_total": 1371
  },
  "route_map": {
    "drawn_route_count": 0,
    "has_shapes": false,
    "path": "data/artifacts/ikasa-bus/geometry.geojson",
    "route_count": 21,
    "routes": [
      {
        "color": "1A7A46",
        "color_name": "green",
        "has_shape": false,
        "id": "1_146_20260606",
        "label": "\u307e\u308f\u30ed\u30fc\u30ba(\u9752\u30eb\u30fc\u30c8\uff09",
        "long": "\u307e\u308f\u30ed\u30fc\u30ba(\u9752\u30eb\u30fc\u30c8\uff09",
        "short": "",
        "text_color": "FFFFFF",
        "type_label": "Bus"
      },
      {
        "color": "1A7A46",
        "color_name": "green",
        "has_shape": false,
        "id": "1_146_20260906",
        "label": "\u307e\u308f\u30ed\u30fc\u30ba(\u9752\u30eb\u30fc\u30c8\uff09",
        "long": "\u307e\u308f\u30ed\u30fc\u30ba(\u9752\u30eb\u30fc\u30c8\uff09",
        "short": "",
        "text_color": "FFFFFF",
        "type_label": "Bus"
      },
      {
        "color": "1A7A46",
        "color_name": "green",
        "has_shape": false,
        "id": "2_150_20260401",
        "label": "\u7b20\u5ca1\uff5e\u57ce\u898b\u53f0\u56e3\u5730\uff5e\u7dcf\u5408\u30b9\u30dd\u30fc\u30c4\u516c\u5712\uff5e\u7b20\u5ca1\u7dda",
        "long": "\u7b20\u5ca1\uff5e\u57ce\u898b\u53f0\u56e3\u5730\uff5e\u7dcf\u5408\u30b9\u30dd\u30fc\u30c4\u516c\u5712\uff5e\u7b20\u5ca1\u7dda",
        "short": "",
        "text_color": "FFFFFF",
        "type_label": "Bus"
      },
      {
        "color": "1A7A46",
        "color_name": "green",
        "has_shape": false,
        "id": "2_151_20260401",
        "label": "\u7b20\u5ca1\uff5e\u5e02\u6c11\u4f1a\u9928\uff5e\u5916\u6d66\uff5e\u5bfa\u9593\uff5e\u7b20\u5ca1\u7dda",
        "long": "\u7b20\u5ca1\uff5e\u5e02\u6c11\u4f1a\u9928\uff5e\u5916\u6d66\uff5e\u5bfa\u9593\uff5e\u7b20\u5ca1\u7dda",
        "short": "",
        "text_color": "FFFFFF",
        "type_label": "Bus"
      },
      {
        "color": "1A7A46",
        "color_name": "green",
        "has_shape": false,
        "id": "2_154_20260401",
        "label": "\u7b20\u5ca1\uff5e\u5927\u4e95\u30cf\u30a4\u30e9\u30f3\u30c9\uff5e\u5c3e\u5742\u7dda",
        "long": "\u7b20\u5ca1\uff5e\u5927\u4e95\u30cf\u30a4\u30e9\u30f3\u30c9\uff5e\u5c3e\u5742\u7dda",
        "short": "",
        "text_color": "FFFFFF",
        "type_label": "Bus"
      },
      {
        "color": "1A7A46",
        "color_name": "green",
        "has_shape": false,
        "id": "2_155_20260401",
        "label": "\u7b20\u5ca1\uff5e\u77e2\u639b\u7dda",
        "long": "\u7b20\u5ca1\uff5e\u77e2\u639b\u7dda",
        "short": "",
        "text_color": "FFFFFF",
        "type_label": "Bus"
      },
      {
        "color": "1A7A46",
        "color_name": "green",
        "has_shape": false,
        "id": "2_158_20260401",
        "label": "\u7b20\u5ca1\uff5e\u7af9\u7530\uff5e\u4e57\u6642\u7dda",
        "long": "\u7b20\u5ca1\uff5e\u7af9\u7530\uff5e\u4e57\u6642\u7dda",
        "short": "",
        "text_color": "FFFFFF",
        "type_label": "Bus"
      },
      {
        "color": "1A7A46",
        "color_name": "green",
        "has_shape": false,
        "id": "2_159_20260401",
        "label": "\u4eca\u4e95\u5faa\u74b0\u7dda",
        "long": "\u4eca\u4e95\u5faa\u74b0\u7dda",
        "short": "",
        "text_color": "FFFFFF",
        "type_label": "Bus"
      },
      {
        "color": "1A7A46",
        "color_name": "green",
        "has_shape": false,
        "id": "2_168_20260401",
        "label": "\u7b20\u5ca1\uff5e\u5e83\u6771\u7dda",
        "long": "\u7b20\u5ca1\uff5e\u5e83\u6771\u7dda",
        "short": "",
        "text_color": "FFFFFF",
        "type_label": "Bus"
      },
      {
        "color": "1A7A46",
        "color_name": "green",
        "has_shape": false,
        "id": "2_169_20260401",
        "label": "\u7b20\u5ca1\uff5e\u5c71\u738b\u53e3\uff5e\u4e95\u539f\u7dda",
        "long": "\u7b20\u5ca1\uff5e\u5c71\u738b\u53e3\uff5e\u4e95\u539f\u7dda",
        "short": "",
        "text_color": "FFFFFF",
        "type_label": "Bus"
      },
      {
        "color": "1A7A46",
        "color_name": "green",
        "has_shape": false,
        "id": "2_174_20260401",
        "label": "\u65b0\u5009\u6577\uff5e\u7389\u5cf6\u5354\u540c\u75c5\u9662\uff5e\u5bc4\u5cf6\u7dda",
        "long": "\u65b0\u5009\u6577\uff5e\u7389\u5cf6\u5354\u540c\u75c5\u9662\uff5e\u5bc4\u5cf6\u7dda",
        "short": "",
        "text_color": "FFFFFF",
        "type_label": "Bus"
      },
      {
        "color": "1A7A46",
        "color_name": "green",
        "has_shape": false,
        "id": "2_17_20260401",
        "label": "\u798f\u5c71\uff5e\u5343\u9593\u571f\u624b\u6771\uff5e\u6771\u798f\u5c71\u99c5\u53e3\uff5e\u65ed\u30f6\u4e18\u56e3\u5730\u7dda",
        "long": "\u798f\u5c71\uff5e\u5343\u9593\u571f\u624b\u6771\uff5e\u6771\u798f\u5c71\u99c5\u53e3\uff5e\u65ed\u30f6\u4e18\u56e3\u5730\u7dda",
        "short": "",
        "text_color": "FFFFFF",
        "type_label": "Bus"
      },
      {
        "color": "1A7A46",
        "color_name": "green",
        "has_shape": false,
        "id": "2_180_20260401",
        "label": "\u5927\u9580\u7dda",
        "long": "\u5927\u9580\u7dda",
        "short": "",
        "text_color": "FFFFFF",
        "type_label": "Bus"
      },
      {
        "color": "1A7A46",
        "color_name": "green",
        "has_shape": false,
        "id": "2_1_20260401",
        "label": "\u7b20\u5ca1\uff5e\u798f\u5c71\u7dda",
        "long": "\u7b20\u5ca1\uff5e\u798f\u5c71\u7dda",
        "short": "",
        "text_color": "FFFFFF",
        "type_label": "Bus"
      },
      {
        "color": "1A7A46",
        "color_name": "green",
        "has_shape": false,
        "id": "2_20_20260401",
        "label": "\u6771\u90e8\u5faa\u74b0\u7dda",
        "long": "\u6771\u90e8\u5faa\u74b0\u7dda",
        "short": "",
        "text_color": "FFFFFF",
        "type_label": "Bus"
      },
      {
        "color": "1A7A46",
        "color_name": "green",
        "has_shape": false,
        "id": "2_23_20260401",
        "label": "\u798f\u5c71\uff5e\u798f\u5c71\u5e02\u6c11\u75c5\u9662\uff5e\u4f0a\u52e2\u30f6\u4e18\u4e09\u4e01\u76ee\u7dda",
        "long": "\u798f\u5c71\uff5e\u798f\u5c71\u5e02\u6c11\u75c5\u9662\uff5e\u4f0a\u52e2\u30f6\u4e18\u4e09\u4e01\u76ee\u7dda",
        "short": "",
        "text_color": "FFFFFF",
        "type_label": "Bus"
      },
      {
        "color": "1A7A46",
        "color_name": "green",
        "has_shape": false,
        "id": "2_25_20260401",
        "label": "\u798f\u5c71\uff5e\u7be0\u5742\u7dda",
        "long": "\u798f\u5c71\uff5e\u7be0\u5742\u7dda",
        "short": "",
        "text_color": "FFFFFF",
        "type_label": "Bus"
      },
      {
        "color": "1A7A46",
        "color_name": "green",
        "has_shape": false,
        "id": "2_29_20260401",
        "label": "\u7f8e\u306e\u6d5c\u7dda",
        "long": "\u7f8e\u306e\u6d5c\u7dda",
        "short": "",
        "text_color": "FFFFFF",
        "type_label": "Bus"
      },
      {
        "color": "1A7A46",
        "color_name": "green",
        "has_shape": false,
        "id": "2_7_20260401",
        "label": "\u798f\u5c71\uff5e\u56fd\u9053\uff5e\u798f\u5c71\u5e02\u6c11\u75c5\u9662\uff5e\u4e2d\u56fd\u4e2d\u592e\u75c5\u9662\u7dda",
        "long": "\u798f\u5c71\uff5e\u56fd\u9053\uff5e\u798f\u5c71\u5e02\u6c11\u75c5\u9662\uff5e\u4e2d\u56fd\u4e2d\u592e\u75c5\u9662\u7dda",
        "short": "",
        "text_color": "FFFFFF",
        "type_label": "Bus"
      },
      {
        "color": "1A7A46",
        "color_name": "green",
        "has_shape": false,
        "id": "2_8_20260401",
        "label": "\u798f\u5c71\uff5e\u4e95\u539f\u7dda",
        "long": "\u798f\u5c71\uff5e\u4e95\u539f\u7dda",
        "short": "",
        "text_color": "FFFFFF",
        "type_label": "Bus"
      },
      {
        "color": "1A7A46",
        "color_name": "green",
        "has_shape": false,
        "id": "2_9_20260401",
        "label": "\u798f\u5c71\uff5e\u6771\u6df1\u6d25\uff5e\u4f0a\u52e2\u4e18\uff5e\u576a\u751f\u7dda",
        "long": "\u798f\u5c71\uff5e\u6771\u6df1\u6d25\uff5e\u4f0a\u52e2\u4e18\uff5e\u576a\u751f\u7dda",
        "short": "",
        "text_color": "FFFFFF",
        "type_label": "Bus"
      }
    ],
    "stop_count": 680,
    "stop_points_capped": false
  },
  "rubric_version": "1.3",
  "schema_version": "1.18",
  "scoring_profile": {
    "id": "gtfs-scorecard-1.3",
    "provenance": "GTFS Scorecard's project-authored weights, deductions, thresholds, grade bands, and fix ranking, informed by the California Transit Data Guidelines and the MobilityData gtfs-validator. It is not a worldwide standard or a compliance determination.",
    "rubric_version": "1.3"
  },
  "snapshot_date": "2026-09-05",
  "top_fixes": [
    {
      "code": "scorecard_rt_feed_lapsed",
      "count": 1,
      "effort": "A vendor support ticket; treat it as a feed outage.",
      "fix": "Ask your AVL vendor why the feed stopped advancing; the GTFS-Realtime header timestamp should move forward on every publish.",
      "owner": "",
      "points": 50.0,
      "rank": 1,
      "severity": "ERROR",
      "what": "The realtime feed's last update was about 1 hours old when sampled.",
      "why": "A realtime feed this far behind has effectively stopped. Riders see buses that already left, or apps quietly fall back to the schedule while still showing a live label."
    },
    {
      "code": "scorecard_wheelchair_boarding_unknown",
      "count": 680,
      "effort": "A column in stops.txt; your scheduling software likely has it.",
      "fix": "Set wheelchair_boarding to 1 (accessible) or 2 (not accessible) for every stop. A field survey can start with the busiest stops.",
      "owner": "Likely your team",
      "points": 25.0,
      "rank": 2,
      "severity": "WARNING",
      "what": "680 of 680 stops don't say whether a wheelchair user can board there.",
      "why": "Riders who use wheelchairs can't plan a trip when accessibility is marked 'unknown'; apps show no information at all."
    },
    {
      "code": "scorecard_wheelchair_accessible_unknown",
      "count": 1371,
      "effort": "A default or per-trip field in your export.",
      "fix": "Set wheelchair_accessible on every trip. If every vehicle is accessible, this may be one default; otherwise use the value for each trip.",
      "owner": "Likely your export tool",
      "points": 15.0,
      "rank": 3,
      "severity": "WARNING",
      "what": "1371 of 1371 trips don't say whether the vehicle is wheelchair accessible.",
      "why": "Even with accessible stops, riders need to know the bus itself can take them."
    }
  ],
  "validator_version": "8.0.1"
}
