Sepa CT Extension Punto Cliente

Sepa CT Extension El Punto Cliente consiste en Receive Connector con transportes kafka/jms para consumir mensajes ExtensionPointRequest publicados por Sepa CT CSM Service y un Send Connector para enviar ExtensionPointResponse. El cliente también se encargará de aspectos de bajo nivel, como la construcción de un mensaje ISO completo para el cual el cliente puede implementar el controlador apropiado.

Configuración

Property Grouping: ipf.csm.sepa-ct.extension-point

Key Description Default Value

ipf.csm.sepa-ct.extension-point.enabled

When enabled, ExtensionPointRequest messages will be processed and ExtensionPointResponse will be sent.

true

Kafka Dependencia del Cliente

<dependency>
    <groupId>com.iconsolutions.ipf.payments.csm.sepact</groupId>
    <artifactId>sepact-csm-extension-point-client-kafka</artifactId>
</dependency>

Property Grouping: ipf.csm.sepa-ct.extension-point.kafka

Key Description Default Value

ipf.csm.sepa-ct.extension-point.kafka.consumer.kafka-clients.group.id

"sepa-csm-extension-point-group"

ipf.csm.sepa-ct.extension-point.kafka.consumer.restart-settings.max-backoff

"5s"

ipf.csm.sepa-ct.extension-point.kafka.consumer.restart-settings.max-restarts

5

ipf.csm.sepa-ct.extension-point.kafka.consumer.restart-settings.max-restarts-within

"10m"

ipf.csm.sepa-ct.extension-point.kafka.consumer.restart-settings.min-backoff

"1s"

ipf.csm.sepa-ct.extension-point.kafka.consumer.restart-settings.random-factor

0.25

ipf.csm.sepa-ct.extension-point.kafka.consumer.topic

"SEPA_EXTENSION_POINT_REQUEST"

ipf.csm.sepa-ct.extension-point.kafka.producer.kafka-clients.client.id

"sepa-csm-extension-point-client"

ipf.csm.sepa-ct.extension-point.kafka.producer.restart-settings.max-backoff

"5s"

ipf.csm.sepa-ct.extension-point.kafka.producer.restart-settings.max-restarts

5

ipf.csm.sepa-ct.extension-point.kafka.producer.restart-settings.max-restarts-within

"10m"

ipf.csm.sepa-ct.extension-point.kafka.producer.restart-settings.min-backoff

"1s"

ipf.csm.sepa-ct.extension-point.kafka.producer.restart-settings.random-factor

0.25

ipf.csm.sepa-ct.extension-point.kafka.producer.topic

"SEPA_EXTENSION_POINT_RESPONSE"

Dependencia del Cliente Jms

<dependency>
    <groupId>com.iconsolutions.ipf.payments.csm.sepact</groupId>
    <artifactId>sepact-csm-extension-point-client-jms</artifactId>
</dependency>

Property Grouping: ipf.csm.sepa-ct.extension-point.jms

Key Description Default Value

ipf.csm.sepa-ct.extension-point.jms.consumer-window-size

0

ipf.csm.sepa-ct.extension-point.jms.failover-timeout

5000

ipf.csm.sepa-ct.extension-point.jms.request.queue

Queue to receive ExtensionPointRequest

"SEPA_EXTENSION_POINT_RESPONSE"

ipf.csm.sepa-ct.extension-point.jms.response.queue

Queue to send ExtensionPointResponse

"SEPA_EXTENSION_POINT_REQUEST"

Cómo Utilizar

Agregue ya sea Kafka or Jms sepact-csm-extension-point-client dependencia y ipf-component-store-mongo a su aplicación IPF.

<dependency>
    <groupId>com.iconsolutions.ipf.componentstore</groupId>
    <artifactId>ipf-component-store-mongo</artifactId>
</dependency>

Validando Mensajes

El Extension El Punto Cliente construirá una representación de objeto java del mensaje ISO a partir de ExtensionPointRequest y los componentes secundarios que se almacenan en ipf-component-store y envíelo a MessageHandler implementación. En caso de que MessageHandler no esté definido para un mensaje ISO específico, el cliente siempre responderá con un resultado de ACEPTAR.

En caso de que desee validar un pacs.008 mensaje, necesita crear una clase que implemente MessageHandler interfaz y defínala como Spring bean.

public interface MessageHandler<T> {

    CompletionStage<Outcome> handleMessage(ProcessingContext processingContext, T message);
    Class<T> forType();
    Direction forDirection();

    @Getter
    @RequiredArgsConstructor(access = AccessLevel.PRIVATE)
    class Outcome {
        private final ExtensionPointOutcome outcome;
        private final String rejectionReason;

        public static Outcome accept() {
            return new Outcome(ExtensionPointOutcome.ACCEPT, null);
        }

        public static Outcome reject(String rejectionReason) {
            return new Outcome(ExtensionPointOutcome.REJECT, rejectionReason);
        }

    }
}

Ejemplo de clase que validará NbOfTxs y TtlIntrBkSttlmAmt en Pacs. 008 GroupHeader:

@Component
public class Pacs008FromSchemeMessageHandler implements MessageHandler<SCTFIToFICustomerCreditTransferV08> {
    @Override
    public CompletionStage<Outcome> handleMessage(ProcessingContext processingContext, SCTFIToFICustomerCreditTransferV08 message) {
        BigDecimal ttlAmount = message.getGrpHdr().getTtlIntrBkSttlmAmt().getValue();
        BigDecimal transactionAmountsSum = message.getCdtTrfTxInves().stream()
                .map(transaction -> transaction.getIntrBkSttlmAmt().getValue())
                .reduce(BigDecimal.ZERO, BigDecimal::add);

        if (Integer.getInteger(message.getGrpHdr().getNbOfTxs()).equals(message.getCdtTrfTxInves().size())
                && ttlAmount.compareTo(transactionAmountsSum) == 0) {
            return CompletableFuture.completedStage(Outcome.accept());
        } else {
            return CompletableFuture.completedStage(Outcome.reject("IntrBkSttlmAmt doesn't match"));
        }
    }

    @Override
    public Class<SCTFIToFICustomerCreditTransferV08> forType() {
        return SCTFIToFICustomerCreditTransferV08.class;
    }

    @Override
    public Direction forDirection() {
        Direction.FROM_SCHEME;
    }
}

Tipos de mensajes ISO para los cuales se pueden definir controladores:

Mensaje ISO

Clase Java

Dirección Soportada

Pacs. 002

sepa.ct.iso.std.iso._20022.tech.xsd.pacs_002_001_10S2. SCTFITo FIPayment Status Report V10

DESDE_ESQUEMA

Pacs. 004

sepa.ct.iso.std.iso._20022.tech.xsd.pacs_004_001_009. SCTPayment Return V09

TO_SCHEME/FROM_SCHEME

Pacs. 008

sepa.ct.iso.std.iso._20022.tech.xsd.pacs_008_001_008. SCTFITo FICustomer Credit Transfer V08

TO_SCHEME/FROM_SCHEME

Pacs. 028

sepa.ct.iso.std.iso._20022.tech.xsd.pacs_028_001_003. SCTFITo FIPayment Status Request V03

DESDE_ESQUEMA

Camt. 027

sepa.ct.iso.std.iso._20022.tech.xsd.camt_027_001_007. SCTClaim Non Receipt V07

DESDE_ESQUEMA

Camt. 029

sepa.ct.iso.std.iso._20022.tech.xsd.camt_029_001_009. SCTResolution Of Investigation V09

TO_SCHEME/FROM_SCHEME

Camt. 056

sepa.ct.iso.std.iso._20022.tech.xsd.camt_056_001_008. SCTFITo FIPayment Cancellation Request V08

TO_SCHEME/FROM_SCHEME

Camt. 087

sepa.ct.iso.std.iso._20022.tech.xsd.camt_087_001_006. SCTRequest To Modify Payment V06

DESDE_ESQUEMA