intermediate
Erste-Schritte
Zustaendigkeiten
Onboarding

Erste Schritte mit Levy Compliance

Komplettes Onboarding fuer eine neue Stadt-Zustaendigkeit -- von der Genehmigungsvergabe bis zum ersten Compliance-Digest per E-Mail an die Stadt.

Levy Fleets TeamMay 18, 202614 min read

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:

AnforderungWo 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-TokenEinstellungen -> 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-ZustellungStadtkontakt

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

1

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.

2

Auf 'Zustaendigkeit hinzufuegen' klicken

Navigiert zu /dashboard/compliance/new. Die Formularfelder entsprechen 1:1 der mds_jurisdictions-Tabelle.

3

Formular ausfuellen

FeldBeispielHinweise
NameBoulder, COAnzeigename fuer Betreiber und Staedte.
Slugboulder-coWird in der oeffentlichen URL verwendet: /city/boulder-co. Kleinbuchstaben, mit Bindestrich getrennt, muss eindeutig sein.
Policy-Feed-URLhttps://populus.cityofboulder.org/mds/policyDer veroeffentlichte Policy-Endpunkt der Stadt.
Policy-Feed-Auth-Tokenbearer xyz...Optional. Verschluesselt gespeichert.
Poll-Intervall (s)60Standard 60s. Staedte mit haeufigen Aktualisierungen koennen niedriger gehen; ruhige Staedte hoeher.
AktivtrueDeaktivieren, um Polling zu pausieren ohne zu loeschen.
4

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.0
  • MDS-JWT-Header (signierter Beweis des Response-Body-sha256)
  • Ein version-Feld mit Wert 2.0.1 im 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:

ElementWert
MDS Provider-Basishttps://fleets.levyelectric.com/api/mds/<subaccountId>/provider/v2/
JWKS-URLhttps://fleets.levyelectric.com/api/mds/<subaccountId>/.well-known/jwks.json
Bearer-Token(aus Einstellungen -> API & Integrationen ausstellen)
GBFS 3.0-Stammhttps://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:

  1. Der Poller ruft den Policy-Feed der Stadt ab.
  2. Die Rohnutzlast wird sha256-gehasht und mit dem letzten bekannten Hash verglichen.
  3. Bei Aenderung parsen der Zod-Validator policies[] und geographies[].
  4. Policies werden upgesertet; Regeln vollstaendig ersetzt; policy_geofences-Zeilen aus den referenzierten Geografien materialisiert.
  5. Ein Eintrag landet in mds_policy_audit mit run_id, diff-JSON und applied_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.

1

Auf der Zustaendigkeitsseite 'Stadtkontakt hinzufuegen' klicken

Fuegt eine Zeile zu city_contacts hinzu, die auf diese Zustaendigkeit beschraenkt ist.

2

Name, E-Mail, Rolle und digest_frequency festlegen

FeldBeispiel
E-Mailsarah@bouldercolorado.gov
NameSarah Johnson
RolleCity Compliance Officer
Portal-Zugangtrue
Digest-Frequenzweekly (Optionen: daily, weekly, monthly)
3

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_typeWas geprueft wird
fleet_capCOUNT(aktive Fahrzeuge in Zustaendigkeit) &lt;= Cap
equity_zone_pct% der eingesetzten Flotte innerhalb Equity-Geografien &gt;= Schwellwert
complaint_slaresponded_at jeder Beschwerde innerhalb N Stunden nach created_at
trip_report_eodEine Trip-CSV wird taeglich um 23:59 Ortszeit der Zustaendigkeit generiert
corral_utilizationStuendliche 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_reports mit payload (gerendertes JSON) und pdf_url (falls monatliches PDF angehaengt) geschrieben.
  • Das last_digest_sent_at des 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_id pro 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?