Calculation as a Service (CaaS)

Allgemeines

Für einige Vergleichsrechner kann die Berechnung getrennt über eine API konsumiert werden. Erwartet man als Endergebnis einen Vergleichsrechner, muss man also alles außer der Berechnungen selbst kreieren.

Authentifizierung und Autorisierung

Für die Autorisierung der Zugriffe auf die Rechner wird ein JSON Web Token nach RFC7519 verwendet.

Einen Token erhält man nach einer erfolgreichen Authentifizierung.

Authentifizierung

Die Authentifizierung erfolgt mit Benutzername und Passwort.

Hierzu senden Sie einen POST-Request an /api/login mit ihren JSON-kodierten Zugangsdaten im Body.

Bei erfolgreicher Authentifizierung erhalten Sie eine Response mit einem Autorisierungstoken.

Beispiel Request:

POST /api/login
{
  "username": "Bob",
  "password": "BobsPassword"
}

Beispiel Response:

Transfer-Encoding: chunked
Content-Type: application/json
Expires: Tue, 05 Dec 2017 15:17:17 GMT

{
"token": "eyJhbGciOiJSUzI1NiJ9.ey..."
}

Autorisierung

Senden Sie den erhaltenen Token als Bearer-Token im Authorisation-Header mit jedem weiteren Request.

Bsp. für den Aufruf zur Berechnung einer Privathaftpflicht-Versicherung:

POST api/v1/calculate/private-liability
Authorisation: "Bearer eyJhbGciOiJSUzI1NiJ9.ey..."
Content-Type: "application/json"

{
  "policyholder":  {"birthdate":315529200,"sex":"female","name":"Kiefer"},
  "subject_matter": {
      "policyholder": {"civil_servant":false}
   }, 
  "previous_insurance_exists":false,
  "previous_damages_exist":false,
  "desired_payment_mode":"monatlich"
}

Token erneuern

Bitte beachten Sie, dass der Token nur eine begrenzte Zeit gültig ist und erneuert werden muss. Die relevanten Daten sind JWT-konform im Token enkodiert.

Um einen neuen Token zu erhalten, führen Sie die Authentifizierung erneut aus.

API

Die Definition der API ist nach der OpenAPI 3.0 Spezifikation dokumentiert und im JSON-Format unter https://calculation.dionera.com/api/doc/v1/swagger.json abrufbar.

Beispiel Privathaftpflicht

Die Anfrage zur Berechnung ist in 3 Bereiche unterteilt.

Allgemeine Angaben zum Versicherungsnehmer (Name, Vorname, Geschlecht und Geburtsdatum) erfolgen im Attribut „policyholder“. Hierbei ist die Angabe des Geburtsdatums Pflicht und es wird ein Fehler ausgegeben, wenn diese Angabe fehlt.

Angaben zu den versicherten Personen erfolgen im Attribut „subject_matter“. Hier werden auch tarifrelevante Angaben (z.B. im öffentlichen Dienst beschäftigt oder Einschluss einer Diensthaftpflicht gewünscht) zum Versicherungsnehmer, sowie zu weiteren zu versichernden Personen gemacht. Für den Versicherungsnehmer und ggf. dessen Partner ist die Angabe des Status „civil_servant“ Pflichtangabe. Sollte eine Diensthaftpflicht („include_civil_service_liability“) mit eingeschlossen werden, dann ist auch die Angabe der Tätigkeit („civil_service_occupation“) (zulässige Werte siehe components/schemas/CivilServiceOccuption aus der oben verlinkten json) auszufüllen.

Im 3. Teil befinden sich allgemeine Angaben wie die gewünschte Zahlweise.

Request

Bsp.-Request für einen Versicherungsnehmer, der nicht im öffentl. Dienst beschäftigt ist und keine weiteren Personen mitversichert werden sollen.

POST /v1/calculate/private-liability
Authorization: "Bearer eyJhbGciOiJSUzI1NiJ9.ey..."
Content-Type: "application/json"

{
"policyholder": {"birthdate":315529200,"sex":"female","name":"Kiefer"},
"subject_matter": 
    {
        "policyholder": {
            "civil_servant": false
        },
    },
"previous_insurance_exists": false,
"previous_damages_exist": false,
"desired_payment_mode": "monthly"
}

Bsp für eine Familie, bei der Versicherungsnehmer im öffentl. Dienst beschäftigt ist, und den Einschluss einer Diensthaftpflicht haben möchte.

POST /v1/calculate/private-liability
Authorization: "Bearer eyJhbGciOiJSUzI1NiJ9.ey..."
Content-Type: "application/json"

{
"policyholder": {"birthdate":315529200},
"subject_matter": 
    {
        "policyholder": {
           "civil_servant":true,
           "civil_service_occupation": "lehrer",
           "include_civil_service_liability": true
        },
        "partner": {
            "civil_servant": false
        },
        "include_children": true
    },
"previous_insurance_exists": false,
"previous_damages_exist": false,
"desired_payment_mode": "monthly"
}

Response

Die Antwort des Services für eine Berechnungsanfrage ist in zwei Bereiche unterteilt.

In calculation_parameters sind die Daten der Anfrage enthalten. Dabei ist zu beachten, dass die Daten vom Service transformiert und mit Standard-Werten ergänzt werden können.

In calculation_result sind unter success die Tarife, welche erfolgreich berechnet werden konnten. Die Struktur ist an das BiPRO-Modell für Produkte angelehnt. Unter errors sind Produkte, welche mit den Daten der Anfrage nicht berechnet werden konnten.

{
  "calculation_parameters": {
    "policyholder": {
      "birthdate": 315529200,
      "sex": "female"
    },
    "subject_matter": {
      "policyholder": {
        "civil_servant": false
      },
      "partner": {
        "civil_servant": true,
        "birthdate": 631148400,
        "include_civil_service_liability": false,
        "civil_service_occupation": "lehrer"
      },
      "include_children": true
    },
    "previous_insurance": {
      "damage_free": false,
      "pre_insured": true
    },
    "desired_payment_mode": "yearly"
  },
  "calculation_result": {
    "success": [
      {
        "name": null,
        "provider": null,
        "duration": null,
        "contract_commencement": null,
        "policyholder": {
          "birthdate": 315529200,
          "first_name": null,
          "last_name": null,
          "sex": null,
          "postal_address": null
        },
        "products": [
          {
            "subject_matter": {
              "policyholder": {
                "civil_servant": false
              },
              "children": {
                "civil_servant": false
              },
              "partner": {
                "birthdate": 631148400,
                "civil_servant": true,
                "civil_service_occupation": "lehrer"
              }
            },
            "previous_insurance": true,
            "previous_damage": true,
            "name": "Einfach Komplett",
            "provider": {
              "name": "Konzept & Marketing GmbH",
              "origin_id": "10002"
            },
            "duration": null,
            "fees": [
              {
                "amount": {
                  "amount": "5899",
                  "currency": "EUR"
                },
                "payment_mode": "yearly",
                "taxes": [
                  {
                    "type": "percent",
                    "amount": 19
                  }
                ]
              }
            ],
            "product_attributes": {
              ....
            },
            "origin_id": "13360",
            "insurance_commencement": null
          }
        ]
      }
    ],
    "errors": [
      {
        "title": "Excellent ",
        "sub_title": "",
        "product": "Excellent ",
        "id": "15111",
        "messages": [
          "Es konnte kein Beitrag ermittelt werden"
        ]
      }
    ]
  }
}