forked from ChelseaKR/gtfs-scorecard
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
146 lines (141 loc) · 10.1 KB
/
Copy pathindex.html
File metadata and controls
146 lines (141 loc) · 10.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>GTFS quality in your vendor contract — GTFS Scorecard</title>
<meta name="description" content="Copy-paste contract and RFP language for asking a GTFS vendor to deliver a feed that passes the canonical validator and stays current.">
<link rel="canonical" href="https://gtfsscorecard.org/procurement/">
<meta property="og:type" content="website">
<meta property="og:title" content="GTFS quality in your vendor contract — GTFS Scorecard">
<meta property="og:description" content="Copy-paste contract and RFP language for asking a GTFS vendor to deliver a feed that passes the canonical validator and stays current.">
<meta property="og:url" content="https://gtfsscorecard.org/procurement/">
<meta property="og:image" content="https://gtfsscorecard.org/og.png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:image" content="https://gtfsscorecard.org/og.png">
<link rel="stylesheet" href="/src/styles.css">
<link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ccircle cx='16' cy='16' r='13' fill='%23204e3a'/%3E%3Ccircle cx='16' cy='16' r='5' fill='%23f2f3ee'/%3E%3C/svg%3E">
<script>
/* Apply the saved theme before first paint to avoid a flash (WCAG 1.4.8). */
try {
var t = localStorage.getItem("scorecard-theme");
if (t && ["light", "contrast", "dark"].indexOf(t) >= 0)
document.documentElement.setAttribute("data-theme", t);
} catch (e) {}
</script>
<script src="/src/theme.js" defer></script>
<script src="/src/nav.js" defer></script>
<noscript><style>
/* Without JS the menu button cannot expand the collapsed nav, so show the
stacked nav permanently and hide the button (content stays operable
without scripting). nav.js never runs here, so nothing double-toggles. */
@media (max-width: 1040px) {
.nav-menu-btn { display: none !important; }
.nav-cluster { display: flex !important; position: static; }
}
</style></noscript>
</head>
<body>
<a class="skip-link" href="#main">Skip to main content</a>
<header class="site-header"><div class="wrap"><a class="brand" href="/"><span class="brand-mark" aria-hidden="true"></span><span class="brand-name">GTFS Scorecard</span></a><button class="nav-menu-btn" type="button" aria-expanded="false" aria-controls="nav-cluster"><span aria-hidden="true">☰</span> Menu</button><div class="nav-cluster" id="nav-cluster"><nav class="nav-stops" aria-label="Primary"><a class="nav-stop" href="/agencies/"><span class="pip" aria-hidden="true"></span>Find an agency</a><a class="nav-stop" href="/pulse/"><span class="pip" aria-hidden="true"></span>Coverage</a><a class="nav-stop" href="/focus/"><span class="pip" aria-hidden="true"></span>Focus areas</a><a class="nav-stop" href="/tools/" aria-current="page"><span class="pip" aria-hidden="true"></span>Tools</a><a class="nav-stop" href="/how-to-read/"><span class="pip" aria-hidden="true"></span>How it works</a><a class="nav-stop" href="/about/"><span class="pip" aria-hidden="true"></span>About</a></nav><div id="theme-control"></div></div></div></header>
<main id="main" class="wrap" tabindex="-1">
<nav class="breadcrumb" aria-label="Breadcrumb"><ol itemscope itemtype="https://schema.org/BreadcrumbList"><li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"><a itemprop="item" href="/"><span itemprop="name">Home</span></a><meta itemprop="position" content="1"></li><li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"><span itemprop="name" aria-current="page">For agencies: procurement</span><meta itemprop="position" content="2"></li></ol></nav>
<a class="backlink" href="/">← Home</a>
<h1 class="page-title">Put feed quality in the contract.</h1>
<p class="page-lede">A vendor builds your GTFS feed. The cleanest time to require it be
good is before you sign, not after a rider gets routed to the wrong corner. Here is
language you can paste into a contract or an <abbr title="Request for Proposal">RFP</abbr>.</p>
<section class="feed-details"><h2 class="section-title">Sample contract clause</h2>
<blockquote class="plain-summary">The vendor shall deliver a GTFS Schedule feed that produces zero errors from the current MobilityData canonical GTFS validator; includes a feed_info.txt with a service window covering at least the next 30 days at all times; populates wheelchair_boarding on stops and wheelchair_accessible on trips; and remains downloadable at a stable public URL. These are the criteria of the GTFS Scorecard conformance mark (Valid, Current, Accessible); the agency may verify the feed holds the mark at any time on its public scorecard page, at no cost to either party.</blockquote></section>
<section class="feed-details"><h2 class="section-title">Sample acceptance test</h2>
<p>Deliverables need a gate a non-developer can hold. This one is a single command the
vendor runs and hands you the output of:</p>
<blockquote class="plain-summary">Before acceptance, the vendor shall demonstrate the delivered feed earns at least grade B on the GTFS Scorecard rubric, for example by running `scorecard try <feed-url> --min-grade B` or the equivalent CI check, and shall provide the resulting report to the agency.</blockquote>
<p>The conformance mark on the agency's scorecard page is the ongoing version of the
same gate: it appears while the feed is valid, current, and carries accessibility
fields, and it disappears when any of those lapses, so a contract can reference it as
a standing condition rather than a one-time check.</p></section>
<section class="feed-details"><h2 class="section-title">What each part buys you</h2>
<ul>
<li><strong>Zero validator errors</strong> is the same baseline publishers and
trip-planning apps apply, so your feed loads everywhere riders look.</li>
<li><strong>A 30-day forward window</strong> stops the silent failure where a feed
quietly expires and trip planners drop your agency.</li>
<li><strong>Accessibility fields</strong> let a wheelchair user plan a trip at all.</li>
<li><strong>A stable public URL</strong> lets trip planners refresh the feed
reliably instead of silently retaining an obsolete copy.</li>
</ul></section>
<section class="feed-details"><h2 class="section-title">Verify it cheaply</h2>
<p>You do not need to take the vendor's word for it. Find your agency on this site to see
where the feed stands today, add a <a href="https://github.com/ChelseaKR/gtfs-scorecard/blob/main/docs/ci-action.md">GTFS
Scorecard check</a> to a build so a bad feed fails before it publishes, or
<a href="/try.html">request a one-off score</a> through the GitHub-backed path.</p></section>
<p class="fineprint">This is sample language to adapt, not legal advice. Check it against
your agency's procurement rules.</p>
</main>
<footer class="site-footer">
<div class="wrap">
<div class="footer-intro">
<a class="footer-brand" href="/">GTFS Scorecard</a>
<p>An open-source data quality tool for small and rural transit agencies.</p>
</div>
<nav class="footer-grid" aria-label="Footer">
<section aria-labelledby="footer-find-h">
<h2 id="footer-find-h">Find a scorecard</h2>
<ul>
<li><a href="/agencies/">Agency directory</a></li>
<li><a href="/app/">Interactive search</a></li>
<li><a href="/map/">Agency map</a></li>
<li><a href="/routes/">All routes</a></li>
<li><a href="/compare/">Compare two agencies</a></li>
</ul>
</section>
<section aria-labelledby="footer-improve-h">
<h2 id="footer-improve-h">Improve a feed</h2>
<ul>
<li><a href="/fix/">GTFS errors & fixes</a></li>
<li><a href="/check/">Check before publishing</a></li>
<li><a href="/try.html">Request a one-off score</a></li>
<li><a href="/subscribe.html">Feed-health alerts</a></li>
<li><a href="/submit.html">Add an agency</a></li>
<li><a href="/claim/">Correct or claim a listing</a></li>
<li><a href="/procurement/">Procurement language</a></li>
</ul>
</section>
<section aria-labelledby="footer-explore-h">
<h2 id="footer-explore-h">Explore the data</h2>
<ul>
<li><a href="/pulse/">Coverage overview</a></li>
<li><a href="/problems/">Common problems</a></li>
<li><a href="/realtime/">Realtime quality</a></li>
<li><a href="/adoption/">What feeds publish</a></li>
<li><a href="/focus/">Focus areas</a></li>
<li class="footer-subhead">United States tools</li>
<li><a href="/ntd/">U.S. NTD readiness</a></li>
<li><a href="/equity/">U.S. equity</a></li>
<li><a href="/query/">Query the dataset</a></li>
<li><a href="/data/">Open data</a></li>
</ul>
</section>
<section aria-labelledby="footer-project-h">
<h2 id="footer-project-h">Project</h2>
<ul>
<li><a href="/about/">About</a></li>
<li><a href="/status/">Status</a></li>
<li><a href="/support/">Get help or sponsor</a></li>
<li><a href="/how-to-read/">How to read a scorecard</a></li>
<li><a href="/how-to-read/#glossary">Glossary</a></li>
<li><a href="/crosswalk/">Standards crosswalk</a></li>
<li><a href="/press/">For reporters</a></li>
<li><a href="/accessibility/">Accessibility</a></li>
<li><a href="https://github.com/ChelseaKR/gtfs-scorecard/blob/main/CONTRIBUTING.md">Contribute</a></li>
<li><a href="https://github.com/ChelseaKR/gtfs-scorecard/blob/main/docs/listing-policy.md">Listing & removal policy</a></li>
</ul>
</section>
</nav>
</div>
</footer>
</body>
</html>