Release Notes

This section documents changes introduced since release 25.7.0.

26.1.0

New Features and Improvements

Improve Fscd-Adapter Auto-Configuration (PNC-3031)

A new auto-configuration module de.faktorzehn.fscd-adapter:fscd-adapter-autoconfigure has been introduced to ease customization of fscd-adapter beans. All beans are now auto-configured with @ConditionalOnMissingBean and can thus be easily replaced.

As a result, some configuration properties have been moved and renamed.

Old Property Name New Property Name

fscd-adapter.account-balance-function-name

fscd-adapter.jco.functions.read-account-balances

fscd-adapter.read-business-lock-function-name

fscd-adapter.jco.functions.read-business-locks

fscd-adapter.write-business-lock-function-name

fscd-adapter.jco.functions.manage-business-lock

fscd-adapter.document-function-name

fscd-adapter.jco.functions.read-documents

fscd-adapter.dunning-info-function-name

fscd-adapter.jco.functions.read-dunning-infos

fscd-adapter.get-insurance-object-function-name

fscd-adapter.jco.functions.read-insurance-object-details

fscd-adapter.list-insurance-object-function-name

fscd-adapter.jco.functions.read-insurance-objects

fscd-adapter.manage-insurance-object-function-name

fscd-adapter.jco.functions.manage-insurance-object

fscd-adapter.posting-function-name

fscd-adapter.jco.functions.post-postings

fscd-adapter.create-sepa-mandate-function-name

fscd-adapter.jco.functions.create-sepa-mandate

fscd-adapter.read-sepa-mandate-function-name

fscd-adapter.jco.functions.read-sepa-mandates

fscd-adapter.available-business-lock-types

fscd-adapter.jco.available-business-lock-types

Kafka Listener for Payment Returns from FS-CD (PNC-2539)

The FS-CD Adapter now processes payment return notifications from FS-CD and automatically reports them to the appropriate ICS system via REST API. This enables automated handling of failed payments (e.g., SEPA returns) by notifying the claims system when payments cannot be processed.

Functionality

When FS-CD detects a payment return (Zahlungsrückläufer), it publishes an Info Container message to the Kafka topic de.faktorzehn.fscd.payment-returned. The FS-CD Adapter processes these messages and calls the ICS REST endpoint /rest/paymentupdate to report the payment failure.

The adapter automatically:

  • Extracts claim number and position number from the Info Container

  • Maps FS-CD return reason codes (RLGRD) to ICS payment failure types (SEPA codes)

  • Resolves the target ICS system using the business system identifier (BCON_BUSSYS)

  • Reports the payment failure to the appropriate ICS instance

Configuration
fscd-adapter:
  payment-returned:
    enabled: true # enables the listener
    return-reasons:
      "901": "AC01"  # IBAN incorrect
      "902": "AC04"  # Account closed
      "903": "AC06"  # Konto blocked
      # ... additional mappings

The return-reasons mapping translates FS-CD return reason codes to SEPA failure codes as required by the ICS payment update API.

Error Handling

The listener uses Spring Kafka’s retry mechanism with exponential backoff for transient failures. Messages that cannot be processed after all retries are forwarded to a dead letter topic for manual investigation.

Improve Modularity by Splitting Kafka Module (PNC-2824)

The Maven module fscd-adapter-kafka has been split into multiple, focused modules to improve modularity, reduce transitive dependencies, and better separate domain-specific concerns.

New Module Structure
Module Description

fscd-adapter-kafka

Shared foundation providing base classes, interfaces, and common utilities for Kafka event processing

fscd-adapter-kafka-ics-core

ICS event processing including claim payments, receivables, reserve changes, and failed payments

fscd-adapter-kafka-ipm-core

Core IPM policy editing event processing with baseline mapping logic

fscd-adapter-kafka-ipm-base

IPM-Base (IB) specific policy editing customizations and auto-configuration

fscd-adapter-kafka-ipm-basis

IPM-Basis (VB) specific policy editing customizations and auto-configuration

This modular structure allows projects to include only the event listeners they need, reducing dependency footprint and clarifying architectural boundaries.

Package Restructuring

The package de.faktorzehn.fscdadapter.kafka.shared has been merged into de.faktorzehn.fscdadapter.kafka, providing a cleaner package structure.

Migration Guide
  1. Update dependency declarations
    Replace the single fscd-adapter-kafka dependency with the specific modules needed:

    <!-- Before -->
    <dependency>
        <groupId>de.faktorzehn.fscd-adapter</groupId>
        <artifactId>fscd-adapter-kafka</artifactId>
    </dependency>
    
    <!-- After: Include only what you need -->
    <dependency>
        <groupId>de.faktorzehn.fscd-adapter</groupId>
        <artifactId>fscd-adapter-kafka-ics-core</artifactId>
    </dependency>
    <dependency>
        <groupId>de.faktorzehn.fscd-adapter</groupId>
        <artifactId>fscd-adapter-kafka-ipm-base</artifactId>
    </dependency>
  2. Update static ReferenceFactory calls
    Replace static utility calls with dependency-injected instances.

Deleted Posting Tax Fields (PNC-3025)

The unused fields Posting.valueAddedTaxKey and Posting.otherTaxKey have been deleted. If required, use Posting.extensions instead.

Support for Multiple IPM/ICS Systems (PNC-2247)

The FS-CD Adapter now supports operation with multiple IPM and ICS systems.

Changes to Mapper Strategy

The mapper strategies shu and kf have been merged into a single strategy called shuk.

Origin System

New configuration properties have been introduced under fscd-adapter.origin-system, replacing the following properties:

Old Property New Property

fscd-adapter.open-policy-url

fscd-adapter.origin-system.<system id>.insurance-object-ui-path

fscd-adapter.policy-editing.mapping.ipmSystemId

fscd-adapter.origin-system.<system id>

fscd-adapter.reserve-change.mapping.icsSystemId

fscd-adapter.origin-system.<system id>

Furthermore, the name originSystem is now used consistently:

  • The property InsuranceObject.system has been renamed to InsuranceObject.originSystem.

Changes to BusinessObjectReader

To enable passing the originSystemId from a BusinessObjectReader to the InsuranceObjectMapper for persistence in FS-CD, all readers have been adjusted to return a wrapper object instead of a direct DTO response type.

Old Return Value New Return Value

PolicyEditingDto

PolicyEditingReading

ReserveChangeInformationResponseDataDto

ReserveChangeReading

If any of the following beans have been defined, the generic type T must be adjusted accordingly:

  • TxoEventListener<T>

  • BusinessObjectReader<T>

  • BusinessObjectProcessor<T>

  • ActionDetermination<T>

  • InsuranceObjectMapper<T>

  • PostingsMapper<T>

If a custom ReferenceFactory exists, it must also be adjusted to use the new types.

API Clients

The clients used to read data from ICS and IPM are now created based on the TxoEvent.baseUrl. As a result, the following properties have been removed:

fscd-adapter.policy-editing.ipmBaseUrl
fscd-adapter.policy-editing.icsRestPath
fscd-adapter.reserve-change.icsBaseUrl
fscd-adapter.reserve-change.icsRestPath

The property fscd-adapter.origin-system.<system id>.rest-path (default: /rest) is used to build API client URLs by appending the value to the baseUrl from the TxoEvent.

For this to work, clients now need to be built on demand during event processing. BusinessObjectReader therefore now requires a ClientCache<T> instead of a client directly. The new class instantiates clients based on the URL and caches the instances.

Additional Changes
  • MappingPropertiesHelper.findMapping now returns Optional<String> instead of throwing an exception when no mapping is found. A method findMappingOrThrow has been added, which behaves like the original method.

Refactor Policy Editing Integration (PNC-2491)

When processing a policy editing event from IPM, two API calls are now made to IPM to collect all relevant information.

Previously, only the PolicyEditingClient was used. Now, the PolicyVersionClient is additionally used to read the current premium payer, correspondence recipient, and policyholder. A custom ClientCache<PolicyVersionClient> bean can be defined to override the default implementation if necessary.

Balanced Accounts Support (PNC-2126)

The FS-CD Adapter and the Info Tool now support displaying and managing balanced accounts by calling 2 new FS-CD function modules.

The FscdInsuranceObjectService service has been extended:

  • FscdInsuranceObjectService.readInsuranceObject with JCo implementation for BAPI_INSOBJECT_GETDETAIL - retrieves detailed information for specific insurance objects

  • FscdInsuranceObjectService.readInsuranceObjects with JCo implementation for BAPI_INSOBJECT_GETLIST - retrieves lists of insurance objects for a partner

A new class JcoFunctionToObjectMapper has been introduced to support these BAPI calls, and as a result, JcoFunctionMapper has been renamed to ObjectToJcoFunctionMapper.

New REST endpoints are now available:

  • GET /partners/{partnerNo}/insurance-objects - retrieves all insurance objects for a specific partner

  • GET /partners/{partnerNo}/insurance-objects/{insuranceObjectNo} - retrieves detailed information for a specific insurance object

The tenant is now displayed in the InsuranceObjectView. A mapping can be provided to map the tenant ID to a name using a DomainValueSource attribute called tenant:

tenant.1=ConVista Holding GmbH
tenant.2=Faktor Zehn GmbH

JcoTableMapper has been extended with an additional parameter Map<String, Object> context. JcoInsuranceObjectService leverages this new parameter to pass the partnerNo to the mapper.

Claim Payments Integration (PNC-2257)

The FS-CD Adapter now supports processing of claim payments from ICS.

  • Listening to Kafka topic de.faktorzehn.ics.event.payment-transferred

  • Supporting configurable mapping properties for different claim payments types

For more customization and technical details see Customize Claim Payments.

Failed Claim Payments Integration (PNC-2503)

The FS-CD Adapter now supports processing of failed claim payment events from ICS.

  • Listening to Kafka topic de.faktorzehn.ics.event.payment-failed

  • Uses the same mapping configuration from claim payments

For more customization and technical details see Customize Failed Claim Payments.

Receivables Integration (PNC-2256)

The FS-CD Adapter now supports processing of receivables from ICS.

  • Listening to Kafka topic de.faktorzehn.ics.event.receivable-transferred

  • Supporting configurable mapping properties for different receivable types

For more customization and technical details see Customize Receivables.

Companies Configuration (PNC-1753

The company code mapping configuration for postings has been replaced by an adapter-wide configuration for companies, see Company Code Mapping.

As a result the following properties have been removed from individual listener mapping configurations:

Removed Property Affected Listener

fscd-adapter.reserve-change.mapping.companyCodeGeneralLedger

Reserve Change

fscd-adapter.reserve-change.mapping.companyCodeSubLedger

Reserve Change

fscd-adapter.policy-editing.mapping.companyCodeGeneralLedger

Policy Editing

fscd-adapter.policy-editing.mapping.companyCodeSubLedger

Policy Editing

Read and Write SEPA Mandates (PNC-2452

The FS-CD Adapter now supports reading and writing SEPA mandates via Java and REST services, see Sepa Mandates Service and OpenAPI Documentation .

Standardized Return Types (PNC-2797)

The return types of RestController and all services from the business module have been standardized to use the new generic Result<T> type instead of domain-specific result classes.

Service Return Type Changes

The following service interfaces now return generic Result<T> types:

Service Old Return Type New Return Type

FscdAccountBalanceService.readAccountBalance

AccountBalancesResult

Result<List<AccountBalance>>

FscdAccountBalanceService.readAccountBalances

AccountBalancesResult

Result<List<AccountBalance>>

FscdBusinessLockService.readBusinessLocks

BusinessLocksResult

Result<List<BusinessLock>>

FscdBusinessLockService.createBusinessLock

Result

Result<Void>

FscdBusinessLockService.updateBusinessLock

Result

Result<Void>

FscdBusinessLockService.deleteBusinessLock

Result

Result<Void>

FscdDocumentService.readDocuments

DocumentsResult

Result<List<Document>>

FscdDunningService.readDunningInfos

DunningInfosResult

Result<List<DunningInfo>>

FscdInsuranceObjectService.create

Result

Result<Void>

FscdInsuranceObjectService.update

Result

Result<Void>

FscdPostingService.post

Result

Result<Void>

Helper Methods

The FscdAccountBalanceService interface now provides new default methods for reading open account balances:

  • readOpenAccountBalance(String partnerNo, String insuranceObjectNo) - returns the first open account balance or null if none exists

  • readOpenAccountBalances(String partnerNo) - returns all open account balances for a partner

These methods replace the removed helper methods AccountBalancesResult.getAccountBalanceBy and AccountBalancesResult.findOpenByInsuranceObjectNumber.

Additionally, the ResultHelper class has been removed. Its utility methods are now available directly on the Result class.

REST API Compatibility

The REST API JSON responses remain unchanged. While the Java return types have been standardized, the serialization format stays the same, ensuring backward compatibility for REST API clients.

JcoTableMapper and JcoFunctionToObjectMapper

The JcoTableMapper.map method now returns Result<List<T>> instead of T.

Similarly, the JcoFunctionToObjectMapper.map method now returns Result<T> instead of T.