{
  "agency": {
    "id": "patco-speedline",
    "name": "PATCO Speedline"
  },
  "autofix": {
    "available": false
  },
  "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_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,
        "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": 53,
        "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_type": "fixed"
      },
      "findings": [],
      "name": "freshness",
      "score": 88.3,
      "status": "measured",
      "summary": "Service data covers the next 53 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": true,
    "criteria": [
      {
        "detail": "Passes validation with no errors.",
        "key": "valid",
        "met": true
      },
      {
        "detail": "Service data covers the next 54 days.",
        "key": "current",
        "met": true
      },
      {
        "detail": "States wheelchair access on 100% of stops and 100% of trips.",
        "key": "accessible",
        "met": true
      }
    ],
    "status": "awarded",
    "summary": "This feed earns the conformance mark: valid, current, and stating wheelchair access on nearly every stop and trip."
  },
  "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",
    "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-07-08T00:00:00+00:00",
  "geo": {
    "bbox": [
      -75.16779,
      39.83381,
      -75.00033,
      39.95531
    ],
    "lat": 39.93274,
    "lon": -75.10562,
    "stop_count": 14
  },
  "ntd_id_alignment": {
    "detail": "Setting your GTFS agency_id to your five-digit NTD ID is an optional way to line a feed up with its National Transit Database record. FTA links the two on your P-50 form, so it is not a required feed change. We don't have your NTD ID on file, so this 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 covers the next 54 days.",
        "key": "current",
        "status": "ready"
      }
    ],
    "status": "ready",
    "summary": "Published at a public URL, valid, and current: the three things the NTD GTFS requirement asks of a feed all hold here. Only your own D-10 certification makes that official; this is a heads-up, not a determination."
  },
  "overall": {
    "grade": "A",
    "margin_to_lower_band": 3.6,
    "margin_to_next_band": null,
    "score": 93.6
  },
  "recommendations": [],
  "recompute": {
    "as_of": "2026-07-09",
    "feed_fetched_date": "2026-07-08",
    "kind": "freshness"
  },
  "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.1",
  "schema_version": "1.7",
  "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-07-09",
  "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"
}
