Das demo Projekt implementiert ein beispielhaftes Prozess zur verarbeitung eines Versicherungsanspruchs (z.B. KFZ-Schaden). Der Prozess ist durch das folgende BPMN Diagramm beschrieben:
Camunda ist ein Open Source Workflow- und Decision-Automatisierungs-Plattform. Es bietet eine Benutzeroberfläche zur Modellierung und Ausführung von Prozessen, sowie eine REST API zur Interaktion mit der Engine. Camunda kann in Java Applikationen eingebettet werden, oder als eigenständiger Prozess auf einem Server laufen.
Die Benutzeroberfläche von Camunda bietet eine Übersicht über laufende Prozessinstanzen (Cockpit), sowie die Möglichkeit Benutzeraufgaben zu bearbeiten (Tasklist). Für kurze Anleitung zur Benutzung der Benutzeroberfläche siehe CamundaWebApps. Selbstverständlich kann eigene UI implementiert werden, die mit der Camunda Engine über REST kommuniziert.
Projektstruktur:
- insurance-claim-demo: Embedded Camunda Engine in form von einer Spring Boot App.
- Die Process- und Entscheidungsmodelle liegen unter
src/main/resources/models
. So werden die Modelle automatisch bei Start der App in die Camunda Engine geladen.
- Die Process- und Entscheidungsmodelle liegen unter
Folgende Module repräsentieren beispielhafte Services die an Camunda angeschlossen werden können:
- risk: ein Teil des Processes bewertet das Risiko (Dubiosität) des Versicherungsfalls, unter
/risk
liegt ein Springboot Projekt welches über Rest die Möglichkeit zur Verfügung stellt, eine fiktive Risikobewertung durchzuführen. - external_task_client: eine Sammlung von External Task Workers zur Bearbeitung von Service Tasks. Die Workers erledigen einzelne Aufgaben, z.B. Emailversand, Dokumentenvalidierung, Risikobewertung.
- express_server: gibt eine Übersicht über alle Prozessinstanzen (einzelne Versicherungsfälle) und deren Status. Die Daten werden aus der Camunda Engine über Rest abgefragt.
Ablauf:
- Der Prozess fängt an mit Einreichen von Versicherungsanspruchsdaten durch den Versicherungsnehmer. Die beispielhafte Daten findet man unter ./demoData.json.
- Die Daten werden durch einen External Task Worker validiert und gespeichert
- Der Anspruch wird durch einen Mitarbeiter (implementiert als User Task) registriert, falls die Daten valide sind, andererfals wird ein Error Boundary Event den Prozess in andere Richtung führen. Versicherungsnehmer wird durch einen Mitarbeiter für Unterstützung kontaktiert. In beiden Fällen bekommt der Versicherungsnehmer entsprechende Nachricht, die auch vom External Task Worker verschickt wird.
-
- Nachricht über Erfolgreiche Registrierung des Anspruchs wird verschickt.
- Das Risiko (Dubiosität) des Anspruchs wird geschätzt. External Task Worker schickt eine Anfrage ans Risikobewertungservice.
- Ein Mitarbeiter lädt Dokumente hoch.
- Dokumente werden validiert (nur PDF ist akzeptiert, Ergebniss der Validierung sieht man in den external_task_client Log), falls eine nicht-PDF Datei hochgeladen wurde, geht der Prozess zurück zum letzten Schritt.
- Durch das folgende DMN Modell wird entschieden ob Automatische Genehmigung des Anspruchs
- Falls Automatische Genehmigung möglich ist, wird gleich eine Bezahlung an den Versicherungsnehmer initiiert (implementiert durch Java Delegate)
- Falls keine Automatische Genehmigung möglich ist, wird der Anspruch manuell durch einen Mitarbeiter Genehmigt oder Abgelehnt
- In beiden Fällen wird an den Versicherungsnehmer eine entsprechende Nachricht verschickt.
Somit endet Der Prozess
Schritte zum Ausführen:
- external_task_client/emailConfig.yaml muss mit Email Zugangsdaten konfiguriert werden (sonst wird Email nicht verschickt und der Prozess wird einfach weitergeführt)
docker-compose up
im Root-Directory- Warten bis
Camunda engine has started. Subscribing to tasks...
im Log erscheint - Camunda Benutzeroberfläche (Tasklist, Cockpit, Admin) läuft unter
localhost:8080
. Username und Password sind jeweilsdemo
- Zum Starten einer Prozessintanz muss ein REST Request folgender form verschickt werden:
curl --location 'http://localhost:8080/engine-rest/process-definition/key/insuranceClaim/start' \
--header 'Content-Type: application/json' \
--data-raw '{
"variables": {
"claimData": {
"value": "{\"policyHolder\":{\"fullName\":\"Kyrylo Zakurdaiev\",\"dob\":\"27-01-1997\",\"address\":\"Musterstraße 123, Stadtstadt, Bundesland\",\"contactNumber\":\"+49123456789\",\"email\":\"[email protected]\"},\"incident\":{\"date\":\"05-03-2024\",\"location\":\"Eichenweg 12, Stadtstadt, Bundesland\",\"description\":\"Autounfall auf dem Weg zur Arbeit\"},\"damageDetails\":{\"estimatedCost\":6000.00,\"description\":\"Beschädigung der vorderen Stoßstange und des linken Scheinwerfers\",\"photos\":[\"https://example.de/foto1.jpg\",\"https://example.de/foto2.jpg\"]}}",
"type": "json"
}
}
}'
Wie oben beschrieben
- Daten werden automatisch Validiert
- User geht zu
http://localhost:8080/camunda/app/tasklist/
und erledigt die Usertask (oben recht Claim anclicken, checkboxen checken, Task completen) - Risiko wird bewertet und Benutzer benachrichtigt (automatisch)
http://localhost:8080/camunda/app/tasklist/
, User lädt ein Dokument hoch (oben recht Claim anclicken, PDF Dokument wählen, Task completen)- Es wird über automatische Genehmigung in dem DMN Task entschieden (automatisch)
- Falls keine automatische Genehmigung möglich, erledigt der User den Task "Manual Review":
http://localhost:8080/camunda/app/tasklist/
, oben recht Claim anclicken, Checkbox anclicken, Task completen (die Claim Daten kann man im Cockpit ansehen, siehe Anleitung unten)
- Alle historischen Prozessinstanzen kann man unter
localhost:8081
einsehen.
CamundaWebApps:
- Tasklist:
http://localhost:8080/camunda/app/tasklist/
- Cockpit:
http://localhost:8080/camunda/app/cockpit/
Weitere Infos:
- die Oben erwähnten Embedded Camunda Engine sowie Java Delegate Pattern werden nicht mehr von Camunda empfohlen, siehe Blogpost. Da es immer noch ein verbreitetes Pattern ist (insb. bei L21s Kunden), haben wir den hier zum Demonstrationzweck implementiert