{
  "agency": {
    "id": "patco-speedline",
    "name": "PATCO Speedline",
    "subdivision_code": "US-NJ",
    "subdivision_name": "New Jersey"
  },
  "categories": {
    "completeness": {
      "details": {
        "accessibility": {
          "measures": "presence_not_usability",
          "score": 100.0,
          "stops_marked_accessible_pct": 57.1,
          "stops_marked_not_accessible_pct": 42.9,
          "stops_stated_pct": 100.0,
          "trips_stated_pct": 100.0
        },
        "accessibility_measures": "presence_not_usability",
        "cemv": {
          "declared": false,
          "supported": false
        },
        "components": {
          "contact": 15.0,
          "fares": 15.0,
          "headsigns": 15.0,
          "stop_names": 15.0,
          "wheelchair_stops": 25.0,
          "wheelchair_trips": 15.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": 10475,
        "headsign_loop_exempt_trips": 0,
        "headsign_pct": 100.0,
        "headsign_scored_pct": 100.0,
        "mixed_case_stop_name_pct": 100.0,
        "pathways": {
          "has_entrances": false,
          "has_levels": false,
          "has_pathways": false,
          "has_stations": false,
          "has_step_free": false,
          "pathway_count": 0
        },
        "stops": 14,
        "translations": {
          "feed_lang": "en",
          "has_translations": false,
          "languages": [],
          "translated_tables": [],
          "translation_count": 0
        },
        "trips": 10475,
        "wheelchair_accessible_pct": 100.0,
        "wheelchair_boarding_pct": 100.0,
        "wheelchair_marked_accessible_pct": 57.1,
        "wheelchair_marked_not_accessible_pct": 42.9
      },
      "findings": [],
      "name": "completeness",
      "score": 100.0,
      "status": "measured",
      "summary": "100% of stops state wheelchair accessibility (57% marked accessible, 43% 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": 1,
        "instances_by_severity": {
          "ERROR": 0,
          "INFO": 0,
          "WARNING": 90
        },
        "validator_version": "8.0.1"
      },
      "findings": [
        {
          "code": "expired_calendar",
          "count": 90,
          "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": 8.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."
        }
      ],
      "name": "correctness",
      "score": 92.0,
      "status": "measured",
      "summary": "The MobilityData validator flagged 1 kind of issue across 90 instances (0 error, 90 warning, 0 informational).",
      "weight": 0.35
    },
    "freshness": {
      "details": {
        "days_until_expiry": 30,
        "effective_expiry_date": "2026-08-31",
        "feed_end_date": "2026-08-31",
        "feed_start_date": "2015-07-02",
        "feed_version": "59",
        "has_feed_info": true,
        "last_service_date": "2026-08-31",
        "seasonal_boundary": false,
        "service_horizon_review_years": 10,
        "service_horizon_status": "within_review_threshold",
        "service_type": "fixed"
      },
      "findings": [],
      "name": "freshness",
      "score": 50.0,
      "status": "measured",
      "summary": "Service data covers the next 30 days.",
      "weight": 0.2
    },
    "realtime": {
      "name": "realtime",
      "status": "not_yet_measured",
      "summary": "Not scored yet. Nothing here counts against the grade.",
      "weight": 0.2
    }
  },
  "confidence": {
    "feed_age_days": 0,
    "fetch_source": "mirror",
    "level": "provisional",
    "measured_categories": 3,
    "notes": [
      "Realtime quality was not measured this run. It does not count against the grade.",
      "The agency's own feed URL was unreachable, so the Mobility Database's hosted mirror copy was scored instead."
    ],
    "rt_windows": 0,
    "total_categories": 4
  },
  "conformance": {
    "awarded": false,
    "criteria": [
      {
        "detail": "Passes validation with no errors.",
        "key": "valid",
        "met": true
      },
      {
        "detail": "Service data runs out in 30 days; renew to qualify.",
        "key": "current",
        "met": false
      },
      {
        "detail": "States wheelchair access on 100% of stops and 100% of trips.",
        "key": "accessible",
        "met": true
      }
    ],
    "status": "not_yet",
    "summary": "This feed is close to the conformance mark. Service data runs out in 30 days; renew to qualify."
  },
  "feed": {
    "license_note": "No stated data license in the Mobility Database; verify before publishing.",
    "reachable": true,
    "sha256": "a1bc65bf4f0c9f44893e93f6dc22686238832118ea783d5c40b3a0c6698143ad",
    "size_bytes": 773425,
    "static_url": "http://www.ridepatco.org/developers/PortAuthorityTransitCorporation.zip"
  },
  "fetch": {
    "final_url": "https://storage.googleapis.com/storage/v1/b/mdb-latest/o/us-new-jersey-patco-speedline-gtfs-505.zip?alt=media",
    "max_attempts": 1,
    "origin_error": "HTTPError",
    "reader_archive_profile": "raw-v1",
    "source": "mirror",
    "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-08-01T00:00:00+00:00",
  "geo": {
    "bbox": [
      -75.16779,
      39.83381,
      -75.00033,
      39.95531
    ],
    "lat": 39.93274,
    "lon": -75.10562,
    "stop_count": 14
  },
  "mode_profile": {
    "ferry_only": false,
    "graded": false,
    "has_ferry": false,
    "is_multimodal": false,
    "measured": true,
    "modes": [
      {
        "key": "subway",
        "label": "Subway / metro",
        "route_count": 2,
        "trip_count": 10475,
        "trip_share_pct": 100.0
      }
    ],
    "primary_mode": "subway",
    "primary_mode_label": "Subway / metro",
    "route_count": 2,
    "trip_count": 10475
  },
  "ntd_id_alignment": {
    "detail": "This feed provides agency_id. For RY2026, keep one stable value for each NTD reporter represented in the feed and crosswalk it on the P-50 form. The value does not need to equal the five-digit NTD ID; we do not have that ID on file, so the optional equality comparison is not checked yet.",
    "feed_agency_ids": [
      "PATCO"
    ],
    "status": "unknown"
  },
  "ntd_readiness": {
    "pillars": [
      {
        "detail": "Published at a public URL.",
        "key": "published",
        "status": "ready"
      },
      {
        "detail": "Passes validation with no errors.",
        "key": "valid",
        "status": "ready"
      },
      {
        "detail": "Service data runs out in 30 days; renew before you certify.",
        "key": "current",
        "status": "at_risk"
      },
      {
        "detail": "agency.txt provides agency_id. For RY2026, keep one stable value for each NTD reporter represented in the feed and crosswalk each value on the P-50 form.",
        "key": "agency_id",
        "status": "ready"
      }
    ],
    "status": "at_risk",
    "summary": "This feed is close to NTD-ready. Service data runs out in 30 days; renew before you certify."
  },
  "overall": {
    "grade": "B",
    "margin_to_lower_band": 4.0,
    "margin_to_next_band": 6.0,
    "score": 84.0
  },
  "recommendations": [],
  "routability": {
    "boardable_stops": 14,
    "findings": [],
    "orphan_stops": 0,
    "single_stop_trips": 0,
    "trips_total": 10475
  },
  "route_map": {
    "drawn_route_count": 2,
    "has_shapes": true,
    "path": "data/artifacts/patco-speedline/geometry.geojson",
    "route_count": 2,
    "routes": [
      {
        "color": "BC0035",
        "color_name": "red",
        "has_shape": true,
        "id": "1",
        "label": "PATCO",
        "long": "Eastbound to Lindenwold",
        "short": "PATCO",
        "text_color": "FFFFFF",
        "type_label": "Subway / metro"
      },
      {
        "color": "BC0035",
        "color_name": "red",
        "has_shape": true,
        "id": "2",
        "label": "PATCO",
        "long": "Westbound to Philadelphia",
        "short": "PATCO",
        "text_color": "FFFFFF",
        "type_label": "Subway / metro"
      }
    ],
    "stop_count": 14,
    "stop_points_capped": false
  },
  "rubric_version": "1.3",
  "schema_version": "1.17",
  "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"
  },
  "shapes_readiness": {
    "detail": "6333 of 10475 trips have a shape; 4142 do not.",
    "fix": "Fill in shapes.txt and trips.shape_id for the remaining trips so every trip has a path. Reduced, Rural, and Tribal NTD reporters need full coverage by Report Year 2026.",
    "status": "at_risk",
    "total_trips": 10475,
    "trips_with_shape": 6333
  },
  "snapshot_date": "2026-08-01",
  "top_fixes": [
    {
      "code": "expired_calendar",
      "count": 90,
      "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": 8.0,
      "rank": 1,
      "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."
    }
  ],
  "validator_version": "8.0.1"
}
