Projekte

ios-basis-ipm-adapter

Dieser Adapter ist kompatibel zum alten Schnittstellenmodell des Versicherungsmodells. Weitere Informationen hierzu befinden sich in der Dokumentation des F10-Versicherungsmodells
  • definiert Abhängigkeiten zu den Faktor-IPM Basis Schnittstellenobjekten sowie den entsprechenden Mappern aus dem Versicherungsmodell

<dependency>
    <groupId>de.faktorzehn.ipm-shu</groupId>
    <artifactId>ipm-basis-extapi</artifactId>
</dependency>
<dependency>
    <groupId>de.faktorzehn.versicherungsmodell</groupId>
    <artifactId>vm-basis-extapimapper</artifactId>
</dependency>
  • bietet eine abstrakte Implementierung AbstractIpmFacade des Interface IPolicyManagementFacade für die Übertragung der Polcierungssdaten nach IPM

AbstractIpmFacade

Abstrakte Implementierung des Interface IPolicyManagementFacade. Vor der Übertragung wird ein Mappen der Angebotsdaten (Offer) zu Ableitungen von PolicyEditingDto durchgeführt.

Wichtige Methoden:

  • MessageList check(Offer offer) - Validierung der gewählten Angebotsvariante

  • PolicyReference submit(Offer offer, MessageList messages) - Übertragung der DTO-Klassen an IPM

    • abstract V mapInternal(OfferVariant chosenVariant, MappingContext ctx) - abstrakte Methode, um die Konvertierung in Ableitungen zu den konkreten Mappern zu ermöglichen

    • PolicyEditingResultDto callServer(PolicyEditingDto dto, Offer offer, AdditionalPolicyData additionalPolicyData) - Aufruf der IPM-Schnittstelle

IpmPolicyRestService

Abstrakte Klasse und Erweiterung von AbstractIpmFacade um per REST-Client auf IPM zuzugreifen. Die wichtigsten Methoden sind callServer für den Aufruf des Neu- und Änderungsservice und die Methode loadPolicy, um eine Police aus dem Bestandsservice zu laden.

Folgende Query-Parameter werden bei der Übertragung des Antrags (Neu- und Änderungsservice) an IPM gesetzt (fett default-Wert):

  • abschlussTyp - wird dynamisch ermittelt über die Methode ermittleAbschlussTyp - mögliche Werte sind ABSCHLUSS oder SCHWEBE

  • verhaltenAbschlussNichtMoeglich - wird dynamisch ermittelt über die Methode ermittleVerhaltenAbschlussNichtMoeglich- mögliche Werte sind SCHWEBE oder ABBRECHEN

Query-Parameter beim Änderungsservice:

  • policenNr - Nummer der Police, für die eine Änderung durchgeführt werden soll

  • aenderungsDatum - Datum, ab wann die Änderung gültig ist

  • verhaltenRueckwirkendeAenderungen - wird dynamisch ermittelt über die Methode ermittleVerhaltenRueckwirkendeAenderungen - mögliche Werte sind ABSCHLIESSEN, NICHT_ABSCHLIESSEN oder AUTOMATISIERTE_PROZESSE_ABSCHLIESSEN

Beim Query-Parameter abschlussTyp existiert zusätzlich die Methode sindAbschlussbedingungenErfuellt. Bei Rückgabe von true (default) wird in IPM ein Abschluss durchgeführt. Bei Rückgabe von false wird der Antrag in IPM in Schwebe gestellt.

IpmPolicyMapper

Die Klasse bietet Methoden zum Mappen der DTOs von IPM bzw. das Mappen des Modells in Dtos an.

Wichtige Methoden:

  • mapToModel(String policyManagementSystemId,PolicyInformationResultDto resultDto, MappingContext ctx) - mappt das DTO PolicyInformationResultDto zur einer Policy und liefert das Ergebnis als LookupResult<Policy> zurück. Dies wird im Kontext der Bestandsauskunft aus IPM verwendet.

  • mapVersicherungToDto(PolicyEditingDto editingDto, Versicherung versicherung, MappingContext ctx) - wird im Kundenprojekt implementiert. Dies wird im Kontext der Übertragung von Policendaten nach IPM nach Abschluss eines Angebotes verwendet.

IpmPolicySearchService

Die Klasse sucht über IPM nach Policen und liefert diese in einer Liste zurück.

IpmPolicyInfoMapper

Die Klasse mappt Information eines DTOs für eine Police aus IPM in ein Containerobjekt PolicyInfo, das sich auf Basisinformationen einer Police beschränkt.

Wichtige Methoden:

  • mapToModel(PoliciesResultDto resultdto) - mappt das DTO PoliciesResultDto bzw. die darin enthaltene Liste von PolicyInfoDto in eine Liste von PolicyInfo. Dies wird im Kontext von kurzen Policenübersichten verwendet.

Anbindung in einer Spring-Anwendung

Beispiel mit zwei IPM-Anbindungen

policy.type=IPM

# IPM Konfiguration Auskunft und Abschluss und Policensuche
ipm:
  shu:
    username: gl_sa
    password:
    base-url.intern: http://localhost:8080/ipm
    policy-search-path: /rest/policies
    base-url.extern: http://localhost:8080/ipm
  hr:
    submit-path: /rest/hr/neugeschaeft
    submit-change-path: /rest/hr/aenderung
    policy-path: /rest/hr/bestandsauskunft
    created-policy-link: /ui/policies/1/{0}/{1}
  uv:
    submit-path: /rest/uv/neugeschaeft
    submit-change-path: /rest/uv/aenderung
    policy-path: /rest/uv/bestandsauskunft
    created-policy-link: /ui/policies/1/{0}/{1}
Implementierung Policensuche

Im Projekt wird eine Ableitung der Klasse IpmPolicySearchService erstellt, in der die Konfigurationsparameter eingelesen werden. Im Prinzip ist man bei der Benennung der Konfigurationsparameter in der Konfigurationsdatei frei. Bei der Erstellung der IpmPolicySearchRestClientProperties muss dann die entsprechende Variable übergeben werden.

@Repository
@ConditionalOnProperty(prefix = "policy", name = "type", havingValue = PolicyRepositoryType.IPM_LITERAL)
public class ShuIpmPolicySearchService extends IpmPolicySearchService {

    @Autowired
    public HrIpmPolicySearchService(@Value("${ipm.shu.username}") String username,
            @Value("${ipm.shu.password}") String password,
            @Value("${ipm.shu.base-url.intern}") String basepath,
            @Value("${ipm.shu.policy-search-path}") String policySearchPath) {
        this(new SpringRestClientImpl(), IpmPolicySearchRestClientProperties.of(username, password, basepath, policySearchPath));
    }

    protected HrIpmPolicySearchService(RestClient restClient, IpmPolicySearchRestClientProperties properties) {
        super(restClient, properties);
    }
}

Beispielhafter Aufruf (anhand eines Partners): /ipm/rest/policies?partnerId=5 Beispielhafter Aufruf (anhand einer Policennummer): /ipm/rest/policies?policyNumber=143120783003

Implementierung Abschluss und Auskunft

Im Projekt wird eine Ableitung der Klasse IpmPolicyRestService erstellt, in der die Konfiguration ebenfalls eingelesen und für das Laden der Police und den Abschluss verwendet wird.

In der Ableitung müssen ebenfalls Mapper zur Verfügung gestellt werden, die die spartenspezifischen Versicherungsdaten aus der Bestandsauskunft (Ableitung von IpmPolicyMapper) und die Abschlussdaten in ein spartenspezifisches PolicyEditingDto mappen können.

Beispielhafter Aufruf:

  • Bestandsauskunft: /ipm/rest/hr/bestandsauskunft?policenNr=143645501256

  • Antrag Neugeschäft: /ipm/rest/hr/neugeschaeft?abschlussTyp=ABSCHLUSS?verhaltenAbschlussNichtMoeglich=SCHWEBE mit einem (Hr)PolicyEditingDto

  • Antrag Änderungsgeschäft: /ipm/rest/hr/aenderung?aenderungsDatum=2021-03-01?policenNr=145555867885?abschlussTyp=ABSCHLUSS?verhaltenAbschlussNichtMoeglich=SCHWEBE?verhaltenRueckwirkendeAenderungen=ABSCHLIESSEN mit einem (Hr)PolicyEditingDto