Erste Schritte mit Levy Compliance
Dieser Artikel fuehrt Sie durch das Onboarding einer einzelnen Zustaendigkeit (eine Stadt). Das Endergebnis: MDS-Endpunkte sind aktiv, der Policy-Feed der Stadt wird jede Minute abgefragt, Geofences aktivieren sich planmaessig und der Stadtkontakt erhaelt taegliche/woechentliche/monatliche Digest-E-Mails.
Voraussetzungen
Bevor Sie beginnen, bestaetigen Sie Folgendes:
| Anforderung | Wo zu pruefen |
|---|---|
| Sie halten eine aktive Betriebsgenehmigung (oder sind in der Antragsphase) | Stadt-Genehmigungsbuero |
Ihre Flotte hat mindestens ein Fahrzeug mit gesetzter iot_imei | /dashboard/vehicles |
| Ihr Subaccount hat ein MDS-Bearer-Token | Einstellungen -> API & Integrationen |
| Sie haben die Policy-Feed-URL der Stadt (und ein Auth-Token, falls privat) | Stadtkontakt |
| Sie haben mindestens eine Stadtkontakt-E-Mail fuer Digest-Zustellung | Stadtkontakt |
MDS-Bearer-Token
Levy Compliance verwendet weiterhin die bestehende Bearer-Token-Tabelle (mds_city_tokens) als Primaerauthentifizierung. Die neue JWT-Schicht wird zusaetzlich zu jeder Antwort signiert -- Staedte koennen entweder weiterhin Bearer-Tokens nutzen oder den JWT gegen Ihre JWKS-URL verifizieren. Siehe JWKS-Schluesselverwaltung.
Schritt 1 -- Zustaendigkeit anlegen
Compliance-Dashboard oeffnen
Gehen Sie zu Dashboard -> Compliance unter /dashboard/compliance. Sie sehen einen Zustaendigkeitsindex (leer, falls dies die erste ist) plus ein Konflikt-Hinweisbanner oben.
Auf 'Zustaendigkeit hinzufuegen' klicken
Navigiert zu /dashboard/compliance/new. Die Formularfelder entsprechen 1:1 der mds_jurisdictions-Tabelle.
Formular ausfuellen
| Feld | Beispiel | Hinweise |
|---|---|---|
| Name | Boulder, CO | Anzeigename fuer Betreiber und Staedte. |
| Slug | boulder-co | Wird in der oeffentlichen URL verwendet: /city/boulder-co. Kleinbuchstaben, mit Bindestrich getrennt, muss eindeutig sein. |
| Policy-Feed-URL | https://populus.cityofboulder.org/mds/policy | Der veroeffentlichte Policy-Endpunkt der Stadt. |
| Policy-Feed-Auth-Token | bearer xyz... | Optional. Verschluesselt gespeichert. |
| Poll-Intervall (s) | 60 | Standard 60s. Staedte mit haeufigen Aktualisierungen koennen niedriger gehen; ruhige Staedte hoeher. |
| Aktiv | true | Deaktivieren, um Polling zu pausieren ohne zu loeschen. |
Speichern
Die Zustaendigkeit wird angelegt. Das erste JWKS-Schluesselpaar wird beim naechsten Aufruf von /api/mds/{subaccountId}/.well-known/jwks.json lazy generiert -- Sie koennen es jetzt ausloesen, indem Sie diese URL im Browser oeffnen.
Schritt 2 -- Bestaetigen, dass MDS-Endpunkte antworten
Jede Zustaendigkeit erbt unter Ihrem Subaccount dieselbe MDS-Endpunkt-Basis:
GET /api/mds/{subaccountId}/provider/v2/vehicles
GET /api/mds/{subaccountId}/provider/v2/vehicles/status
GET /api/mds/{subaccountId}/provider/v2/trips
GET /api/mds/{subaccountId}/provider/v2/events
GET /api/mds/{subaccountId}/provider/v2/telemetry/{vehicle_id}
GET /api/mds/{subaccountId}/provider/v2/stops
GET /api/mds/{subaccountId}/provider/v2/reports
GET /api/mds/{subaccountId}/.well-known/jwks.json
Rufen Sie vehicles/status mit Ihrem Bearer-Token zur Bestaetigung auf:
curl -H "Authorization: Bearer <YOUR_MDS_TOKEN>" \
https://fleets.levyelectric.com/api/mds/<subaccountId>/provider/v2/vehicles/status
Eine erfolgreiche Antwort enthaelt:
- HTTP 200
Content-Type: application/vnd.mds+json;version=2.0MDS-JWT-Header (signierter Beweis des Response-Body-sha256)- Ein
version-Feld mit Wert2.0.1im JSON-Envelope
Siehe MDS Provider-Einrichtung fuer die vollstaendige Endpunkt-Referenz.
Schritt 3 -- URLs an die Stadt uebergeben
Senden Sie dem Stadtkontakt eine kurze E-Mail mit diesen vier Angaben:
| Element | Wert |
|---|---|
| MDS Provider-Basis | https://fleets.levyelectric.com/api/mds/<subaccountId>/provider/v2/ |
| JWKS-URL | https://fleets.levyelectric.com/api/mds/<subaccountId>/.well-known/jwks.json |
| Bearer-Token | (aus Einstellungen -> API & Integrationen ausstellen) |
| GBFS 3.0-Stamm | https://fleets.levyelectric.com/api/gbfs/v3/<subaccountId>/gbfs.json |
Die Populus-/Ride-Report-/Lacuna-Instanz der Stadt validiert die Endpunkte gegen den MobilityData-GBFS-Validator und den OMF-mds-provider-validator, bevor Ihre Flotte als aktiv im Stadt-Dashboard erscheint. Beide Validatoren sollten ohne Warnungen bestehen.
Schritt 4 -- Den ersten Policy-Poll beobachten
Der mds-policy-poll-Cron laeuft jede Minute. Innerhalb von 60 Sekunden nach dem Speichern der Zustaendigkeit:
- Der Poller ruft den Policy-Feed der Stadt ab.
- Die Rohnutzlast wird sha256-gehasht und mit dem letzten bekannten Hash verglichen.
- Bei Aenderung parsen der Zod-Validator
policies[]undgeographies[]. - Policies werden upgesertet; Regeln vollstaendig ersetzt;
policy_geofences-Zeilen aus den referenzierten Geografien materialisiert. - Ein Eintrag landet in
mds_policy_auditmitrun_id,diff-JSON undapplied_at.
Oeffnen Sie /dashboard/compliance/{jurisdiction-id} und Sie sollten die aktive Policy-Liste sehen. Siehe Policy-Aufnahme von Staedten fuer den Diff-Viewer.
Keine Policies sichtbar?
Drei haeufige Ursachen: (1) die Feed-URL der Stadt ist falsch oder hinter einer nicht konfigurierten Auth, (2) der Feed validiert, enthaelt aber keine Policies fuer Ihre Fahrzeugtypen, oder (3) der Feed antwortet, das Schema entspricht aber nicht MDS 2.0. Das Audit-Log erfasst den Parse-Fehler; pruefen Sie dort zuerst.
Schritt 5 -- Stadtkontakte einrichten
Stadtkontakte erhalten Magic-Link-Zugang zum Stadt-Portal und Digest-E-Mails in der von Ihnen festgelegten Kadenz.
Auf der Zustaendigkeitsseite 'Stadtkontakt hinzufuegen' klicken
Fuegt eine Zeile zu city_contacts hinzu, die auf diese Zustaendigkeit beschraenkt ist.
Name, E-Mail, Rolle und digest_frequency festlegen
| Feld | Beispiel |
|---|---|
sarah@bouldercolorado.gov | |
| Name | Sarah Johnson |
| Rolle | City Compliance Officer |
| Portal-Zugang | true |
| Digest-Frequenz | weekly (Optionen: daily, weekly, monthly) |
Speichern und den Kontakt benachrichtigen
Der Kontakt kann jetzt zu /city/{slug} gehen, seine E-Mail eingeben und einen Magic-Link erhalten. Er erhaelt zudem Digest-E-Mails in der gewaehlten Kadenz.
Schritt 6 -- Genehmigungsbedingungen definieren
Falls Ihre Genehmigung durchsetzbare Bedingungen vorgibt (Flotten-Cap, Equity-Zonen-Anteil, Beschwerde-SLA), erfassen Sie diese in permit_conditions. Der Compliance-Reporter wertet sie bei jedem Digest-Lauf aus.
condition_type | Was geprueft wird |
|---|---|
fleet_cap | COUNT(aktive Fahrzeuge in Zustaendigkeit) <= Cap |
equity_zone_pct | % der eingesetzten Flotte innerhalb Equity-Geografien >= Schwellwert |
complaint_sla | responded_at jeder Beschwerde innerhalb N Stunden nach created_at |
trip_report_eod | Eine Trip-CSV wird taeglich um 23:59 Ortszeit der Zustaendigkeit generiert |
corral_utilization | Stuendliche Momentaufnahme der Parkstellplatzauslastung |
Siehe Genehmigungs-Konditionsberichte fuer die Evaluator-Details.
Schritt 7 -- Den ersten Digest verifizieren
Der compliance-digest-Cron laeuft stuendlich und geht jeden city_contacts-Eintrag durch, dessen Kadenzfenster abgelaufen ist. Fuer einen heute angelegten daily-Kontakt landet die erste E-Mail innerhalb einer Stunde nach Schluss der Digest-Periode (typischerweise Mitternacht Ortszeit der Zustaendigkeit).
Wenn die E-Mail rausgeht:
- Eine Zeile wird in
city_compliance_reportsmitpayload(gerendertes JSON) undpdf_url(falls monatliches PDF angehaengt) geschrieben. - Das
last_digest_sent_atdes Kontakts wird aktualisiert.
Wenn die Stadt die E-Mail nach dem erwarteten Fenster nicht sieht, pruefen Sie zunaechst Spam, dann last_digest_sent_at in city_contacts -- wenn veraltet, hat der Cron nicht gefeuert oder der Sender hat einen Fehler erzeugt. Siehe Fehlerbehebung.
Was Sie erreicht haben
Nach den Schritten 1-7:
- Ihr Subaccount veroeffentlicht einen konformen MDS 2.0 Provider-Feed
- Ein GBFS 3.0-Feed (mit
vehicle_type_idpro Zonenregel) ist parallel zum 2.x-Feed aktiv - Der Policy-Feed der Stadt wird jede Minute abgefragt und gegen letzten bekannten Stand verglichen
- Gestapelte Geofences mit korrekter Prioritaet materialisieren sich aus staedtischen Regeln
- Der Stadtkontakt kann sich via Magic-Link am Portal anmelden
- Digest-E-Mails fliessen in der konfigurierten Kadenz
- Genehmigungs-Konditions-Pass/Fail wird taeglich berechnet und in Betreiber-Dashboard und Stadt-Portal angezeigt
Sie koennen Ihren staedtischen Genehmigungsbeauftragten jetzt auf die oeffentlichen MDS-Endpunkte und den GBFS 3.0-Stamm verweisen.
Was kommt als naechstes?
- MDS Provider-Einrichtung -- Endpunkt-Referenz und Signierdetails.
- Policy-Aufnahme von Staedten -- Diff-Viewer, Audit, Aktivierung.
- Prioritaet gestapelter Geofences -- wie staedtische Regeln Ihre Betreiberzonen ueberlagern.
- Fehlerbehebung -- wenn Polls oder Digests nicht ausgeloest werden.