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ängen (optional gleich mit tag)POST /cases/{caseId}/attachmentsattachments:write
Dokumente nachträglich 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​