Zum Hauptinhalt springen

Fallanlage

Ziel

Du willst wissen, wie ein Fall entsteht, wie deine Integration selbst einen anlegt und wie sie mitbekommt, dass es neue Fälle gibt.

Wie Fälle entstehen

WegWerErgebnisstatus
Fallformular in der OberflächeStandort-Nutzer_in, Fallabwickler_in, Gutachter_in, AdminWORK_IN_PROGRESS
Tally-Webhook (Online-Schadenformular des Standorts)Kund_in bzw. StandortWORK_IN_PROGRESS
Kundenportal „Kunde hilft mit" (sofern für den Standort verfügbar)Plattform bei der EinladungWAITING_FOR_CUSTOMER, nach Portal-Freigabe WORK_IN_PROGRESS
Externe API: POST /api/external/v1/casesIntegration (Werkstatt-, Fallabwickler-, Gutachter- oder Admin-Mandant)WORK_IN_PROGRESS

Ein neuer Fall trägt in allen Fällen mindestens locationId (Standort) und damageType (THIRD_PARTY_LIABILITY oder OWN_FAULT); der Fallabwickler (caseHandler) wird serverseitig aus dem Standort abgeleitet. Alles Weitere kann leer sein — genau das ist typischerweise die Lücke, die deine Integration füllt.

Fall per API anlegen

Sicht: Werkstatt · Fallabwickler · Gutachterbüro (· Admin) — jede Sicht mit eigener Regel, siehe Tabelle unten.

POST /api/external/v1/cases (Scope cases:write)

Die Anlage läuft durch denselben internen Pfad wie das Fallformular der Plattform: der Server leitet den Fallabwickler aus locationId + damageType ab, startet die Fallhistorie und benachrichtigt wie bei jeder anderen Anlage. Antwort ist 201 mit dem vollständigen Fall — inklusive der serververgebenen id und dem ersten lastModifiedDate (deine Baseline für das erste PUT).

curl -sS -X POST "$USP_BASE/cases" \
-H "Authorization: Bearer $USP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"locationId": "musterhaus",
"damageType": "THIRD_PARTY_LIABILITY",
"vehicleLicensePlate": "B-XY 123",
"injuredParty": { "firstName": "Erika", "lastName": "Musterfrau" }
}' | jq '{id, status, caseHandler, lastModifiedDate}'

Die Regeln:

RegelVerhalten
Der neue Fall muss zum Mandanten deines Keys gehörenWerkstatt-Key: locationId liegt im eigenen Teilbaum. Fallabwickler-Key: das Routing aus locationId + damageType landet bei dir — du legst genau dort an, wo Standort und Schadenart dir zugeordnet sind (nie OWN_PROCESSING, das hat kein Routing). Gutachter-Key: dem Standort ist dein Büro als Gutachter zugewiesen — dein Büro ist am neuen Fall dann automatisch als Gutachter (expertOfficeCode) vorausgewählt. Admin-Mandant: keine Teilbaum-Schranke. Alles andere ist 404 NOT_FOUND
Die Person hinter dem Grant muss für den Standort berechtigt seinsonst 403 ACCESS_DENIED
Startstatus ist fix WORK_IN_PROGRESSein anderer status im Rumpf ist 400 — Statuswechsel laufen danach über PUT /cases/{caseId}/status samt aller Guards
Die id vergibt der Servereine id im Rumpf ist 400
damageType ist Pflicht (außer OWN_PROCESSING)sonst 400 — ohne Schadenart kann das Fallabwickler-Routing nicht auflösen
Routing-/Lifecycle-Felder sind server-managedcaseHandler, expertOfficeCode, closedDate, releaseDate, externalId, tallyResponseId aus dem Rumpf werden verworfen
OWN_PROCESSING verlangt Admin-Rechtewie in der Plattform: USP_ADMIN-Rolle + ein Standort mit erlaubter Eigenabwicklung, sonst 403
Kein Fallabwickler für Standort+Schadenart konfiguriert400 VALIDATION — der Standort ist dann fachlich nicht fertig eingerichtet

Fälle im Status WAITING_FOR_CUSTOMER erscheinen in deiner Liste, sind aber nicht editierbar: solange die Kund_in am Portal arbeitet, antwortet PUT /cases/{caseId} mit 409. Warte, bis der Fall auf WORK_IN_PROGRESS wechselt.

Neue Fälle finden

Der empfohlene Weg: Delta-Abholung

GET /api/external/v1/cases?changedSince=2026-07-20T06:00:00 (Scope cases:read)

Liefert unpaginiert alle Fälle des Mandanten, deren lastModifiedDate am oder nach dem Zeitstempel liegt, älteste Änderung zuerst. Neu angelegte Fälle sind darin automatisch enthalten — ihre Anlage ist ihre erste Änderung. Details, Grenzen und die Zeitstempel-Fortschreibung stehen unter Übersicht und Bearbeitung und im Integrator-Kochbuch.

Der Weg für den Erstabgleich: seitenweise nach Anlagedatum

GET /api/external/v1/cases?sort=CREATION_DATE&direction=ASC&page=0&size=200

Beim initialen Befüllen deines Zielsystems willst du chronologisch von vorne durchlaufen. size ist auf 200 gedeckelt; blättere über page, bis page + 1 == totalPages.

Das Feld opened jedes Listeneintrags ist der Anlagezeitpunkt, updated der aus der Fallhistorie abgeleitete Änderungszeitpunkt.

Was du an einem frischen Fall tun kannst

AbsichtEndpunktScope
Vollständige Falldaten lesenGET /cases/{caseId}cases:read
Felder ergänzen (Aktenzeichen, IBAN, Unfalldaten …)PUT /cases/{caseId}cases:write
Dokumente anhängenPOST /cases/{caseId}/attachmentsattachments:write
Dokumente klassifizierenPUT /attachments/{attachmentId}/tagattachments:write
Sachstand kommentierenPOST /cases/{caseId}/commentscomments:write
Fortschritt markierenPUT /cases/{caseId}/tagscases:write
Freigeben / abschließen / stornierenPUT /cases/{caseId}/statuscases:status

Für das Zurückschreiben gilt die Optimistic-Lock-Regel: lies den Fall, ändere die Felder am gelesenen Objekt, schicke es komplett zurück — inklusive lastModifiedDate und locationId. Siehe Übersicht und Bearbeitung.

Noch nicht verfügbar

FähigkeitStand
Fahrzeugschein-Scan / KI-Extraktionexistiert extern nicht. Der Scope extraction:execute ist im Katalog reserviert, aber kein Endpunkt nutzt ihn
Vollmacht/RKÜ, Gutachtenauftrag oder Reparaturablaufplan erzeugenexistiert extern nicht
Dokumente signieren oder an die Kund_in sendenexistiert extern nicht
Fallhistorie lesenexistiert extern nicht
Kundenportal steuernexistiert extern nicht

Der einzige verlässliche Weg, an Dokumente eines Falls zu kommen, ist deshalb die Anhangsliste: Anhänge verwalten.

Sequenzdiagramm