Cómo integrar con CSM Servicios de CT

Esta página explica cómo integrar una aplicación cliente con CSM Servicios CT. Proporciona interfaces (CSMCTClient Adapter, CSMClient Validation Response Adapter y CSMCTAdapter) que los clientes deben implementar para manejar diversos message type s y API flujos relacionados con el procesamiento de pagos, liquidación y validación de reglas del esquema dentro del CSM sistema.

CSMCTClient Adapter

El CSM El adaptador está esperando que los clientes proporcionen una implementación para `CSMCTClientAdapter:

public interface CSMCTClientAdapter {

    /**
     * @see CSMClientValidationResponseAdapter#handleSchemeRulesResponse(ReceivingContext, ValidateSchemeRulesResponse)
     * @deprecated
     */
    default CompletionStage<Void> handleSchemeRulesResponse(ReceivingContext receivingContext, ValidateSchemeRulesResponse schemeRulesResponse) {
        throw new IconRuntimeException("Please implement the CSMClientAdapter's handleSchemeRulesResponse");
    }

    default CompletionStage<Void> handleClearAndSettleResponse(ReceivingContext receivingContext, ClearAndSettleResponse clearAndSettleResponse) {
        throw new IconRuntimeException("Please implement the CSMClientAdapter's handleClearAndSettleResponse");
    }

    default CompletionStage<Void> handleReceivePaymentSettledRequest(ReceivingContext receivingContext, ReceivePaymentSettledRequest receivePaymentSettledRequest) {
        throw new IconRuntimeException("Please implement the CSMClientAdapter's handleReceivePaymentSettledRequest");
    }

    default CompletionStage<Void> handleTechnicalResponse(ReceivingContext receivingContext, TechnicalResponse technicalResponse) {
        throw new IconRuntimeException("Please implement the CSMClientAdapter's handleTechnicalResponse");
    }

    default CompletionStage<Void> handleReceivePayment(ReceivingContext receivingContext, ReceivePaymentRequest receivePaymentRequest) {
        throw new IconRuntimeException("Please implement the CSMClientAdapter's handleReceivePayment");
    }

    default CompletionStage<Void> handleTimeout(ReceivingContext receivingContext, ReceivePaymentTimeout csmTimeout) {
        throw new IconRuntimeException("Please implement the CSMClientAdapter's handleTimeout");
    }

    default CompletionStage<Void> handleReceivePaymentStatusInquiryRequest(ReceivingContext receivingContext, ReceivePaymentStatusInquiryRequest receivePaymentStatusInquiryRequest) {
        throw new IconRuntimeException("Please implement the CSMClientAdapter's handleReceivePaymentStatusInquiryRequest");
    }

    default CompletionStage<Void> handleStatusRequestResponse(ReceivingContext receivingContext, StatusRequestResponse statusRequestResponse) {
        throw new IconRuntimeException("Please implement the CSMClientAdapter's handleStatusRequestResponse");
    }

    default CompletionStage<Void> handleCreditorStatusRequestResponse(ReceivingContext receivingContext, CreditorStatusRequestResponse creditorStatusRequestResponse) {
        throw new IconRuntimeException("Please implement the CSMClientAdapter's handleCreditorStatusRequestResponse");
    }

    default CompletionStage<Void> handleCreditorRequestToPay(ReceivingContext receivingContext, CreditorRequestToPayResponse creditorRequestToPayResponse) {
        throw new IconRuntimeException("Please implement the CSMClientAdapter's creditorRequestToPayResponse");
    }

    default CompletionStage<Void> handleDebtorRequestToPay(ReceivingContext receivingContext, DebtorRequestToPayRequest debtorRequestToPayRequest) {
        throw new IconRuntimeException("Please implement the CSMClientAdapter's handleDebtorRequestToPayResponse");
    }

    default CompletionStage<Void> handleReceiveLiquidityPositionNotification(ReceivingContext receivingContext, LiquidityPositionNotification notification) {
        // returning completed future to avoid forcing downstream consumers to implement no-op receivers
        return CompletableFuture.completedStage(null);
    }

    default CompletionStage<Void> handleReceiveLiquidityAdjustmentNotification(ReceivingContext receivingContext, LiquidityAdjustmentNotification notification) {
        return CompletableFuture.completedStage(null);
    }

    default CompletionStage<Void> handleReceiveParticipantUnavailableNotification(ReceivingContext receivingContext, ParticipantUnavailableNotification notification) {
        return CompletableFuture.completedStage(null);
    }
}

Al anular los métodos, el cliente puede procesar mensajes distintos de la CSM Service, para un procesamiento adicional.

Método API Flujos

handleSchemeRulesResponse -Deprecado

Clear and Settle API

Acreedor CT, Deudor CT, Acreedor RRR y Deudor RRR

handleClearAndSettleResponse

Clear and Settle API

Deudor CT

handleReceivePaymentSettledRequest

Credit Transfer API

Acreedor CT

handleTechnicalResponse

Pago API

Deudor CT, Acreedor RRR y Deudor RRR

manejarRecibirPago

Credit Transfer API

Acreedor CT

handleTimeout

Credit Transfer API

Acreedor CT

manejar Consulta Estado Recepción Pago

Credit Transfer API

Acreedor CT

handleStatusRequestResponse

Payment Status API

Deudor CT

handleCreditorStatusRequestResponse

Payment Status API

Acreedor CT

handleCreditorRequestToPay

Clear and Settle API

Acreedor CT

handleDebtorRequestToPay

Clear and Settle API

Deudor CT

handleReceiveLiquidityPositionNotification

Clear and Settle API

No aplicable aún

handleReceiveLiquidityAdjustmentNotification

Clear and Settle API

No aplicable aún

handleReceiveParticipantUnavailableNotification

Clear and Settle API

No aplicable aún

CSMClient Validation Response Adapter

El CSM El adaptador espera que los clientes proporcionen una implementación para CSMClient Validation Response Adapter:

public interface CSMClientValidationResponseAdapter {
    default CompletionStage<Void> handleSchemeRulesResponse(ReceivingContext receivingContext, ValidateSchemeRulesResponse response) {
        ValidatedIsoType validatedIsoType = ValidatedIsoTypeExtractor.extract(response);
        return switch (validatedIsoType) {
            case PACS_002 -> handlePacs002ValidationResponse(receivingContext, response);
            case PACS_004 -> handlePacs004ValidationResponse(receivingContext, response);
            case PACS_008 -> handlePacs008ValidationResponse(receivingContext, response);
            case PACS_028 -> handlePacs028ValidationResponse(receivingContext, response);
            case CAMT_029 -> handleCamt029ValidationResponse(receivingContext, response);
            case CAMT_056 -> handleCamt056ValidationResponse(receivingContext, response);
            case PACS_003, PACS_007, UNKNOWN -> handleUnexpectedValidationResponse(receivingContext, response);
        };
    }

    default CompletionStage<Void> handleUnexpectedValidationResponse(ReceivingContext receivingContext, ValidateSchemeRulesResponse validateSchemeRulesResponse){
        return CompletableFuture.failedStage(new IconRuntimeException("Please implement the CSMClientValidationResponseAdapter's handleUnexpectedValidationResponse"));
    }

    default CompletionStage<Void> handlePacs002ValidationResponse(ReceivingContext receivingContext, ValidateSchemeRulesResponse validateSchemeRulesResponse) {
        return CompletableFuture.failedStage(new IconRuntimeException("Please implement the CSMClientValidationResponseAdapter's handlePacs002ValidationResponse"));
    }

    default CompletionStage<Void> handlePacs004ValidationResponse(ReceivingContext receivingContext, ValidateSchemeRulesResponse validateSchemeRulesResponse) {
        return CompletableFuture.failedStage(new IconRuntimeException("Please implement the CSMClientValidationResponseAdapter's handlePacs004ValidationResponse"));
    }

    default CompletionStage<Void> handlePacs008ValidationResponse(ReceivingContext receivingContext, ValidateSchemeRulesResponse validateSchemeRulesResponse) {
        return CompletableFuture.failedStage(new IconRuntimeException("Please implement the CSMClientValidationResponseAdapter's handlePacs008ValidationResponse"));
    }

    default CompletionStage<Void> handlePacs028ValidationResponse(ReceivingContext receivingContext, ValidateSchemeRulesResponse validateSchemeRulesResponse) {
        return CompletableFuture.failedStage(new IconRuntimeException("Please implement the CSMClientValidationResponseAdapter's handlePacs028ValidationResponse"));
    }

    default CompletionStage<Void> handleCamt029ValidationResponse(ReceivingContext receivingContext, ValidateSchemeRulesResponse validateSchemeRulesResponse) {
        return CompletableFuture.failedStage(new IconRuntimeException("Please implement the CSMClientValidationResponseAdapter's handleCamt029ValidationResponse"));
    }

    default CompletionStage<Void> handleCamt056ValidationResponse(ReceivingContext receivingContext, ValidateSchemeRulesResponse validateSchemeRulesResponse) {
        return CompletableFuture.failedStage(new IconRuntimeException("Please implement the CSMClientValidationResponseAdapter's handleCamt056ValidationResponse"));
    }
}

Al sobrescribir los métodos, el cliente puede procesar distintos `ValidateSchemeRuleResponse ` messages from the CSM Service. Clients can choose to implement the ISO type-specific handler methods or override default ` método handleSchemeRulesResponse()

CSM Proyecto Inicial del Cliente

El siguiente maven dependency es un proyecto inicial e incluye código base que acelerará la integración de una aplicación cliente con un CSM service. Este es el método preferido y facilita las cosas. Sin embargo, no es técnicamente obligatorio utilizarlo.

<dependency>
    <groupId>com.iconsolutions.ipf.payments.csm</groupId>
    <artifactId>csm-client-starter-all</artifactId>
</dependency>

CSMCTAdapter

Cuando el csm-client-starter-all se añade la dependencia, una implementación de CSMCTAdapter también está disponible:

public interface CSMCTAdapter {

    CompletionStage<DeliveryReport> clearAndSettle(ClearAndSettleRequest clearAndSettleRequest);

    CompletionStage<DeliveryReport> validateAgainstSchemeRules(ValidateSchemeRulesRequest validateSchemeRulesRequest);

    CompletionStage<DeliveryReport> validateDebtorAgainstSchemeRules(ValidateSchemeRulesRequest validateSchemeRulesRequest);

    CompletionStage<DeliveryReport> validateCreditorAgainstSchemeRules(ValidateSchemeRulesRequest validateSchemeRulesRequest);

    CompletionStage<DeliveryReport> confirmReceivePayment(ReceivePaymentResponse receivePaymentResponse);

    CompletionStage<DeliveryReport> statusRequest(StatusRequest statusRequest);

    CompletionStage<DeliveryReport> creditorStatusRequest(StatusRequest statusRequest);

    CompletionStage<DeliveryReport> creditorRequestToPay(CreditorRequestToPayRequest creditorRequestToPayRequest);

    CompletionStage<DeliveryReport> debtorRequestToPayStatusReport(DebtorRequestToPayResponse debtorRequestToPayResponse);

    CompletionStage<DeliveryReport> receivePaymentStatusRequestResponse(ReceivePaymentStatusInquiryResponse receivePaymentStatusInquiryResponse);

    CompletionStage<DeliveryReport> sendInformationRequestToCsm(SendInformationRequestToCSM sendInformationRequestToCSM);

    CompletionStage<DeliveryReport> sendInformationRequestResponseToCSM(SendInformationRequestResponseToCSM sendInformationRequestResponseToCSM);

    CompletionStage<DeliveryReport> sendAdditionalInformationRequestResponseToCSM(SendAdditionalInformationRequestResponseToCSM sendAdditionalInformationRequestResponseToCSM);

}

Esta interfaz puede ser inyectada en el lado del cliente y, al invocar estos métodos, se pueden enviar mensajes distintos a la CSM Service, para un procesamiento adicional.

Método API Flujos

clearAndSettle

Clear and Settle API

Deudor CT

validarContraReglasDeEsquema

Clear and Settle API

Acreedor CT

validarDeudorContraReglasDelEsquema

Clear and Settle API

Deudor CT

validarAcreedorContraReglasDelEsquema

Clear and Settle API

Acreedor CT

confirmarRecibirPago

Credit Transfer API

Acreedor CT

statusRequest

Payment Status API

Deudor CT

solicitudEstadoAcreedor

Payment Status API

Acreedor CT

solicitudDePagoACreedor

Clear And Settle API

No aplicable aún

informeDeEstadoDeSolicitudDePagoDeDeudor

Clear And Settle API

No aplicable aún

recibirRespuestaEstadoSolicitudPago

Credit Transfer API

No aplicable aún

enviar Solicitud De Información ACsm

Clear and Settle API

No aplicable aún

enviar Solicitud De Información Respuesta ACSM

Clear and Settle API

No aplicable aún

enviar Respuesta Solicitud Información Adicional ACSM

Clear and Settle API

No aplicable aún