Documentation for a newer release is available. View Latest

Summary Mapping

Las summaries son "proyecciones" de una unidad de trabajo y se basan en datos recibidos por ODS. Representan el estado actual de una unidad de trabajo y se pueden buscar por varios campos.

Estos datos se "mapean" a campos de summary predefinidos y, por extensión, a algunos campos de búsqueda indexados, mediante una combinación de mapeos core, predeterminados y personalizados.

  • Los core mappings suelen ser esenciales para la funcionalidad de ODS y no pueden anularse ni personalizarse.

  • Los default mappings son los que proporciona ODS out-of-the-box y se aplican a tipos MDS ISO20022 y tipos PDS.

  • Los custom mappings son específicos de la solución y pueden anular mapeos predeterminados.

Source Data Core Mappings Default Mappings Customisable

ISO20022 MDS

Yes

Yes

Yes

IPF PDS

Yes

Yes

Yes

Custom PDS

No

No

Yes

IPF Processing Data

Yes

No

No

Tanto los mapeos MDS/PDS tienen valores predeterminados como mapeos personalizados.

Core Mappings

ISO20022 MDS

Field Name Source Notes Sequence

instructionReceivedAt

pain.001 (source event timestamp)

pacs.008 (source event timestamp)

pacs.004 (source event timestamp)

camt.029 (Assgnmt.CreDtTm)

camt.056 (Assgnmt.CreDtTm)

Populated on receipt of each message

Earliest

executionStartedAt

pacs.008 (source event timestamp)

Populated on receipt of each message

Earliest

settlementCompletedAt

pacs.002 (source event timestamp)

Populated on receipt of each message

Latest

IPF PDS

Field Name Source Sequence

journeyType

JourneyType.value

Always updates if there’s a change

paymentType

PaymentType.value

Latest

csm

Csm.value

Latest

timeZone

TimeZone.value

Latest

priority

Priority.value

Latest

relatedUnitOfWorkId

RelatedUnitOfWork.value

Always updates if there’s a change, but shouldn’t change over the lifetime of a unit of work

Process Flow Event

Field Name Source Sequence Notes

journeyType

ProcessFlowEvent.journeyType

Always updates if there’s a change

Deprecated

paymentType

ProcessFlowEvent.paymentType

Latest

Deprecated

csm

ProcessFlowEvent.csm

Latest

Deprecated

timeZone

ProcessFlowEvent.timeZone

Latest

Deprecated

priority

ProcessFlowEvent.priority

Latest

Deprecated

relatedUnitOfWorkId

ProcessFlowEvent.relatedUnitOfWorkId

Always updates if there’s a change, but shouldn’t change over the lifetime of a unit of work

Deprecated

reasonText

ProcessFlowEvent.reasonText

Latest

reasonCode

ProcessFlowEvent.reasonText

Latest

startedAt

ProcessFlowEvent.createdAt

Earliest

Typically the timestamp of the first event

terminal

ProcessFlowEvent.status

Latest

Looks up the process flow status from process flow definitions to determine if the state change is terminal

failure

ProcessFlowEvent.status

Latest

Looks up the process flow status from process flow definitions to determine if the state change is a failure

Custom Data

Field Name Source Notes

alternativeIds

AlternativeId

Populated from each alternative id published per unit of work

Default Mappings

Summary Field Sources

acceptanceDateTime

CreditTransferTransaction{pain.001.001.09}@[/accptncDtTm]

CreditTransferTransaction{pacs.008.001.08}@[/accptncDtTm]

batchBooking

PaymentInstruction{pain.001.001.09}@[/btchBookg]

cancellationId

PaymentTransaction{camt.056.001.08}@[/cxlId]

chargeAmount

PaymentTransaction{pacs.004.001.09}@[/chrgsInf/0/amt/value]

chargeAmountCurrency

PaymentTransaction{pacs.004.001.09}@[/chrgsInf/0/amt/ccy]

controlSum

CustomerCreditTransferInitiation{pain.001.001.09}@[/grpHdr/ctrlSum]

PaymentInstruction{pain.001.001.09}@[/ctrlSum]

convertedTransactionAmount

Fx@[/convertedCurrencyAndAmount/value]

convertedTransactionAmountCurrency

Fx@[/convertedCurrencyAndAmount/ccy]

creditAccount

AccountNotification{camt.054.001.10}@[/acct/id/othr/id or /acct/prxy/id or /acct/id/iban] when @[/ntry/0/cdtDbtInd] == "CRDT"

creditAmount

AccountNotification{camt.054.001.10}@[/ntry/0/ntryDtls/0/txDtls/0/amtDtls/anncdPstngAmt/amt/value] when @[/ntry/0/cdtDbtInd] == "CRDT"

creditAmountCurrency

AccountNotification{camt.054.001.10}@[/ntry/0/ntryDtls/0/txDtls/0/amtDtls/anncdPstngAmt/amt/ccy] when @[/ntry/0/cdtDbtInd] == "CRDT"

creditorAccount

CreditTransferTransaction{pain.001.001.09}@[/cdtrAcct/id/iban or /cdtrAcct/id/othr/id]

CreditTransferTransaction{pacs.008.001.08}@[/cdtrAcct/id/iban or /cdtrAcct/id/othr/id]

PaymentTransaction{pacs.004.001.09}@[/orgnlTxRef/cdtrAcct/id/iban or /orgnlTxRef/cdtrAcct/id/othr/id]

PaymentTransaction{camt.029.001.09}@[/orgnlTxRef/cdtrAcct/id/iban or /orgnlTxRef/cdtrAcct/id/othr/id]

PaymentTransaction{camt.056.001.08}@[/orgnlTxRef/cdtrAcct/id/iban or /orgnlTxRef/cdtrAcct/id/othr/id]

RequestToModifyPayment{camt.087.001.06}@[/mod/cdtrAcct/id/iban or /mod/cdtrAcct/id/othr/id]

creditorAgentBIC

CreditTransferTransaction{pain.001.001.09}@[/cdtrAgt/finInstnId/bicfi]

CreditTransferTransaction{pacs.008.001.08}@[/cdtrAgt/finInstnId/bicfi]

PaymentTransaction{pacs.004.001.09}@[/orgnlTxRef/cdtrAgt/finInstnId/bicfi]

PaymentTransaction{camt.029.001.09}@[/orgnlTxRef/cdtrAgt/finInstnId/bicfi]

PaymentTransaction{camt.056.001.08}@[/orgnlTxRef/cdtrAgt/finInstnId/bicfi]

creditorBIC

CreditTransferTransaction{pain.001.001.09}@[/cdtr/id/orgId/anyBIC]

CreditTransferTransaction{pacs.008.001.08}@[/cdtr/id/orgId/anyBIC]

RequestToModifyPayment{camt.087.001.06}@[/mod/cdtr/id/orgId/anyBIC]

creditorName

CreditTransferTransaction{pain.001.001.09}@[/cdtr/nm]

CreditTransferTransaction{pacs.008.001.08}@[/cdtr/nm]

PaymentTransaction{pacs.004.001.09}@[/orgnlTxRef/cdtr/pty/nm]

PaymentTransaction{camt.029.001.09}@[/orgnlTxRef/cdtr/pty/nm]

PaymentTransaction{camt.056.001.08}@[/orgnlTxRef/cdtr/pty/nm]

RequestToModifyPayment{camt.087.001.06}@[/mod/cdtr/nm]

csm

Csm@[/value]

debitAccount

AccountNotification{camt.054.001.10}@[/acct/id/othr/id or /acct/prxy/id or /acct/id/iban] when @[/ntry/0/cdtDbtInd] == "DBIT"

debitAmount

AccountNotification{camt.054.001.10}@[/ntry/0/ntryDtls/0/txDtls/0/amtDtls/anncdPstngAmt/amt/value] when @[/ntry/0/cdtDbtInd] == "DBIT"

debitAmountCurrency

AccountNotification{camt.054.001.10}@[/ntry/0/ntryDtls/0/txDtls/0/amtDtls/anncdPstngAmt/amt/ccy] when @[/ntry/0/cdtDbtInd] == "DBIT"

debtorAccount

CreditTransferTransaction{pain.001.001.09}@[/dbtrAcct/id/iban or /dbtrAcct/id/othr/id]

PaymentInstruction{pain.001.001.09}@[/dbtrAcct/id/iban or /dbtrAcct/id/othr/id]

CreditTransferTransaction{pacs.008.001.08}@[/dbtrAcct/id/iban or /dbtrAcct/id/othr/id]

PaymentTransaction{pacs.004.001.09}@[/orgnlTxRef/dbtrAcct/id/iban or /orgnlTxRef/dbtrAcct/id/othr/id]

PaymentTransaction{camt.029.001.09}@[/orgnlTxRef/dbtrAcct/id/iban or /orgnlTxRef/dbtrAcct/id/othr/id]

PaymentTransaction{camt.056.001.08}@[/orgnlTxRef/dbtrAcct/id/iban or /orgnlTxRef/dbtrAcct/id/othr/id]

RequestToModifyPayment{camt.087.001.06}@[/mod/dbtrAcct/id/iban or /mod/dbtrAcct/id/othr/id]

debtorAgentBIC

CreditTransferTransaction{pain.001.001.09}@[/dbtrAgt/finInstnId/bicfi]

PaymentInstruction{pain.001.001.09}@[/dbtrAgt/finInstnId/bicfi]

CreditTransferTransaction{pacs.008.001.08}@[/dbtrAgt/finInstnId/bicfi]

PaymentTransaction{pacs.004.001.09}@[/orgnlTxRef/dbtrAgt/finInstnId/bicfi]

PaymentTransaction{camt.029.001.09}@[/orgnlTxRef/dbtrAgt/finInstnId/bicfi]

PaymentTransaction{camt.056.001.08}@[/orgnlTxRef/dbtrAgt/finInstnId/bicfi]

debtorBIC

CreditTransferTransaction{pain.001.001.09}@[/dbtr/id/orgId/anyBIC]

PaymentInstruction{pain.001.001.09}@[/dbtr/id/orgId/anyBIC]

CreditTransferTransaction{pacs.008.001.08}@[/dbtr/id/orgId/anyBIC]

RequestToModifyPayment{camt.087.001.06}@[/mod/dbtr/id/orgId/anyBIC]

debtorName

CreditTransferTransaction{pain.001.001.09}@[/dbtr/nm]

PaymentInstruction{pain.001.001.09}@[/dbtr/nm or /dbtrAcct/nm]

CreditTransferTransaction{pacs.008.001.08}@[/dbtr/nm]

PaymentTransaction{pacs.004.001.09}@[/orgnlTxRef/dbtr/pty/nm]

PaymentTransaction{camt.029.001.09}@[/orgnlTxRef/dbtr/pty/nm]

PaymentTransaction{camt.056.001.08}@[/orgnlTxRef/dbtr/pty/nm]

RequestToModifyPayment{camt.087.001.06}@[/mod/dbtr/nm]

exchangeRate

Fx@[/exchangeRate]

initiatingPartyName

CustomerCreditTransferInitiation{pain.001.001.09}@[/grpHdr/initgPty/nm]

instructedAgent

FIToFICustomerCreditTransfer{pacs.008.001.08}@[/grpHdr/instdAgt/finInstnId/bicfi]

PaymentReturn{pacs.004.001.09}@[/grpHdr/instdAgt/finInstnId/bicfi]

PaymentTransaction{pacs.004.001.09}@[/instdAgt/finInstnId/bicfi]

instructedAmount

CreditTransferTransaction{pain.001.001.09}@[/amt/instdAmt/value]

CreditTransferTransaction{pacs.008.001.08}@[/amt/instdAmt/value]

AccountNotification{camt.054.001.10}@[/ntry/0/ntryDtls/0/txDtls/0/amtDtls/instdAmt/amt/value]

RequestToModifyPayment{camt.087.001.06}@[/mod/amt/instdAmt/value]

instructedAmountCurrency

CreditTransferTransaction{pain.001.001.09}@[/amt/instdAmt/ccy]

CreditTransferTransaction{pacs.008.001.08}@[/amt/instdAmt/ccy]

AccountNotification{camt.054.001.10}@[/ntry/0/ntryDtls/0/txDtls/0/amtDtls/instdAmt/amt/ccy]

RequestToModifyPayment{camt.087.001.06}@[/mod/amt/instdAmt/ccy]

instructedParty

FIToFIPaymentCancellationRequest{camt.056.001.08}@[/assgnmt/assgne/agt/finInstnId/bicfi or /assgnmt/assgne/agt/finInstnId/lei or /assgnmt/assgne/agt/finInstnId/nm or /assgnmt/assgne/pty/id/orgId/anyBIC]

instructingAgent

FIToFICustomerCreditTransfer{pacs.008.001.08}@[/grpHdr/instgAgt/finInstnId/bicfi]

PaymentReturn{pacs.004.001.09}@[/grpHdr/instgAgt/finInstnId/bicfi]

PaymentTransaction{pacs.004.001.09}@[/instgAgt/finInstnId/bicfi]

instructingParty

FIToFIPaymentCancellationRequest{camt.056.001.08}@[/assgnmt/assgnr/agt/finInstnId/bicfi or /assgnmt/assgnr/agt/finInstnId/lei or /assgnmt/assgnr/agt/finInstnId/nm or /assgnmt/assgnr/pty/id/orgId/anyBIC]

instructionId

CreditTransferTransaction{pain.001.001.09}@[/pmtId/instrId]

CreditTransferTransaction{pacs.008.001.08}@[/pmtId/instrId]

RequestToModifyPayment{camt.087.001.06}@[/mod/instrId]

interbankSettlementDate

CreditTransferTransaction{pain.001.001.09}@[/intrBkSttlmDt]

FIToFICustomerCreditTransfer{pacs.008.001.08}@[/grpHdr/intrBkSttlmDt]

CreditTransferTransaction{pacs.008.001.08}@[/intrBkSttlmDt]

PaymentReturn{pacs.004.001.09}@[/grpHdr/intrBkSttlmDt]

RequestToModifyPayment{camt.087.001.06}@[/mod/intrBkSttlmDt]

journeyType

JourneyType@[/value]

messageId

CustomerCreditTransferInitiation{pain.001.001.09}@[/grpHdr/msgId]

FIToFICustomerCreditTransfer{pacs.008.001.08}@[/grpHdr/msgId]

PaymentReturn{pacs.004.001.09}@[/grpHdr/msgId]

numberOfTransactions

CustomerCreditTransferInitiation{pain.001.001.09}@[/grpHdr/nbOfTxs]

PaymentInstruction{pain.001.001.09}@[/nbOfTxs]

FIToFICustomerCreditTransfer{pacs.008.001.08}@[/grpHdr/nbOfTxs]

originalEndToEndId

PaymentTransaction{pacs.004.001.09}@[/orgnlEndToEndId]

PaymentTransaction{camt.029.001.09}@[/orgnlEndToEndId]

PaymentTransaction{camt.056.001.08}@[/orgnlEndToEndId]

RequestToModifyPayment{camt.087.001.06}@[/undrlyg/initn/orgnlEndToEndId or /undrlyg/intrBk/orgnlEndToEndId]

originalInstructionId

PaymentTransaction{pacs.004.001.09}@[/orgnlInstrId]

PaymentTransaction{camt.029.001.09}@[/orgnlInstrId]

PaymentTransaction{camt.056.001.08}@[/orgnlInstrId]

RequestToModifyPayment{camt.087.001.06}@[/undrlyg/initn/orgnlInstrId or /undrlyg/intrBk/orgnlInstrId]

originalInterbankSettlementDate

PaymentTransaction{pacs.004.001.09}@[/orgnlTxRef/intrBkSttlmDt or /orgnlIntrBkSttlmDt]

PaymentTransaction{camt.029.001.09}@[/orgnlTxRef/intrBkSttlmDt or /orgnlIntrBkSttlmDt]

PaymentTransaction{camt.056.001.08}@[/orgnlTxRef/intrBkSttlmDt or /orgnlIntrBkSttlmDt]

RequestToModifyPayment{camt.087.001.06}@[/undrlyg/intrBk/orgnlIntrBkSttlmDt]

originalMessageId

PaymentReturn{pacs.004.001.09}@[/orgnlGrpInf/orgnlMsgId]

PaymentTransaction{pacs.004.001.09}@[/orgnlMsgId or /orgnlGrpInf/orgnlMsgId]

PaymentTransaction{camt.029.001.09}@[/orgnlMsgId or /orgnlGrpInf/orgnlMsgId]

PaymentTransaction{camt.056.001.08}@[/orgnlMsgId or /orgnlGrpInf/orgnlMsgId]

RequestToModifyPayment{camt.087.001.06}@[/undrlyg/initn/orgnlGrpInf/orgnlMsgId or /undrlyg/intrBk/orgnlGrpInf/orgnlMsgId]

originalTransactionAmount

PaymentTransaction{pacs.004.001.09}@[/orgnlTxRef/intrBkSttlmAmt/value or /orgnlIntrBkSttlmAmt/value]

PaymentTransaction{camt.029.001.09}@[/orgnlTxRef/intrBkSttlmAmt/value or /orgnlIntrBkSttlmAmt/value]

PaymentTransaction{camt.056.001.08}@[/orgnlTxRef/intrBkSttlmAmt/value or /orgnlIntrBkSttlmAmt/value]

RequestToModifyPayment{camt.087.001.06}@[/undrlyg/intrBk/orgnlIntrBkSttlmAmt/value]

originalTransactionAmountCurrency

PaymentTransaction{pacs.004.001.09}@[/orgnlTxRef/intrBkSttlmAmt/ccy or /orgnlIntrBkSttlmAmt/ccy]

PaymentTransaction{camt.029.001.09}@[/orgnlTxRef/intrBkSttlmAmt/ccy or /orgnlIntrBkSttlmAmt/ccy]

PaymentTransaction{camt.056.001.08}@[/orgnlTxRef/intrBkSttlmAmt/ccy or /orgnlIntrBkSttlmAmt/ccy]

RequestToModifyPayment{camt.087.001.06}@[/undrlyg/intrBk/orgnlIntrBkSttlmAmt/ccy]

originalTransactionId

PaymentTransaction{pacs.004.001.09}@[/orgnlTxId]

PaymentTransaction{camt.029.001.09}@[/orgnlTxId]

PaymentTransaction{camt.056.001.08}@[/orgnlTxId]

RequestToModifyPayment{camt.087.001.06}@[/undrlyg/intrBk/orgnlTxId]

paymentInformationId

PaymentInstruction{pain.001.001.09}@[/pmtInfId]

paymentType

PaymentType@[/value]

priority

Priority@[/value]

relatedUnitOfWork

RelatedUnitOfWork@[/value]

requestedExecutionDate

PaymentInstruction{pain.001.001.09}@[/reqdExctnDt/dtTm or /reqdExctnDt/dt]

RequestToModifyPayment{camt.087.001.06}@[/mod/reqdExctnDt/dtTm or /mod/reqdExctnDt/dt]

returnId

PaymentTransaction{pacs.004.001.09}@[/rtrId]

returnedAmount

PaymentTransaction{pacs.004.001.09}@[/rtrdIntrBkSttlmAmt/value]

returnedAmountCurrency

PaymentTransaction{pacs.004.001.09}@[/rtrdIntrBkSttlmAmt/ccy]

timeZone

TimeZone@[/value]

totalAmount

FIToFICustomerCreditTransfer{pacs.008.001.08}@[/grpHdr/ttlIntrBkSttlmAmt/value]

totalAmountCurrency

FIToFICustomerCreditTransfer{pacs.008.001.08}@[/grpHdr/ttlIntrBkSttlmAmt/ccy]

transactionAmount

CreditTransferTransaction{pain.001.001.09}@[/intrBkSttlmAmt/value]

CreditTransferTransaction{pacs.008.001.08}@[/intrBkSttlmAmt/value]

AccountNotification{camt.054.001.10}@[/ntry/0/ntryDtls/0/txDtls/0/amtDtls/txAmt/amt/value]

RequestToModifyPayment{camt.087.001.06}@[/mod/intrBkSttlmAmt/value]

Fx@[/originalCurrencyAndAmount/value]

transactionAmountCurrency

CreditTransferTransaction{pain.001.001.09}@[/intrBkSttlmAmt/ccy]

CreditTransferTransaction{pacs.008.001.08}@[/intrBkSttlmAmt/ccy]

AccountNotification{camt.054.001.10}@[/ntry/0/ntryDtls/0/txDtls/0/amtDtls/txAmt/amt/ccy]

RequestToModifyPayment{camt.087.001.06}@[/mod/intrBkSttlmAmt/ccy]

Fx@[/originalCurrencyAndAmount/ccy]

transactionId

CreditTransferTransaction{pain.001.001.09}@[/pmtId/txId]

CreditTransferTransaction{pacs.008.001.08}@[/pmtId/txId]

RequestToModifyPayment{camt.087.001.06}@[/mod/txId]

uetr

CreditTransferTransaction{pain.001.001.09}@[/pmtId/uetr]

CreditTransferTransaction{pacs.008.001.08}@[/pmtId/uetr]

Customisation

Personalizar campos y mapeos de summary requiere construir tu propio JAR que contenga los campos y mapeos personalizados e incluirlo dentro de una aplicación ODS Ingestion desplegable para que forme parte del classpath.

Es posible personalizar los mapeos predeterminados para campos de summary existentes y también definir campos de summary completamente nuevos, para los cuales necesitas definir tus propios mapeos.

Personalizar mapeos para campos de summary existentes

Todos los default mappings pueden personalizarse/anularse. Cuando un mapeo personalizado apunta al mismo campo que un mapeo predeterminado, el mapeo predeterminado se deshabilita. Un mapeo personalizado para un campo de summary podría deshabilitar uno o más mapeos predeterminados.

Dado que el campo messageId se mapea por defecto desde un pain.001 CustomerCreditTransferInitiation, un pacs.008 FIToFICustomerCreditTransfer o un pacs.004 PaymentReturn, si se definiera un mapeo personalizado que apunte al mismo campo messageId, se deshabilitarían los tres mapeos predeterminados.

Todos los mapeos, incluidos los personalizados, se definen en código, con una única fuente y un único campo objetivo de summary; hay dos tipos de mappers.

::INFO

Cuando sea posible, prefiere los mapeadores JSON. Los mapeadores de objeto directo incurren en un coste adicional de deserialización y requieren que el tipo objetivo esté disponible en tiempo de ejecución. El mapeo de objeto directo es apropiado cuando el valor debe transformarse antes de aplicarse a la summary.

JSON Mappings

El mapeo JSON es una forma flexible de mapear a campos de summary desde objetos MDS y PDS recibidos por ODS. Con este enfoque, los tipos concretos no necesitan estar disponibles en tiempo de ejecución.

Los mapeos hacen uso de JsonPointer, que es una ruta a un campo específico dentro de un objeto JSON, p. ej., /grpHdr/msgId. El recorrido de la ruta es resistente a campos null/ausentes y el campo dentro del objeto JSON en la ruta designada se convierte/coacciona al tipo del campo de summary objetivo cuando es necesario.

  1. ej., un mapper de PaymentTransaction espera un objeto MDS con el nombre de tipo "PaymentTransaction" y que el objeto de mensaje original sea un pacs.004

new JsonMdsMapper<>("PaymentTransaction", MessageNameSpecs.pacs004(), summaryFields.chargeAmount(), from("/chrgsInf/0/amt/value"));

El mapeo se aplicará a cualquier "PaymentTransaction" que se originó en un pacs.004.

Es posible mapear desde un PaymentTransaction que se originó en cualquier objeto de mensaje, p. ej., un pacs.004 o un camt.056 o un camt.029

new JsonMdsMapper<>("PaymentTransaction", MessageNameSpecs.any(), summaryFields.originalTransactionId(), from("/orgnlTxId"));

Y lo mismo puede expresarse más explícitamente

new JsonMdsMapper<>("PaymentTransaction", pacs004().or(camt056()).or(camt029()), summaryFields.originalTransactionId(), from("/orgnlTxId"));

Los mapeos también pueden ser conscientes de la versión, utilizando la versión del objeto de mensaje original, p. ej., cuando el objeto de mensaje original es un pacs.004.xxx.09.

new JsonMdsMapper<>("PaymentTransaction", pacs004().atVersion("09"), summaryFields.interbankSettlementDate(), from("/grpHdr/intrBkSttlmDt"));

Direct Object Mappings

Los mapeos de objeto directo requieren que el tipo de objeto de origen esté disponible en tiempo de ejecución, y el objeto recibido se convierte al tipo requerido cuando el nombre del tipo coincide. Esto permite que los mapeos personalizados llamen directamente a métodos sobre el objeto de origen.

  1. ej., un mapper de pacs.008 espera el origen FIToFICustomerCreditTransferV08 y apunta al campo de summary messageId.

new MdsMapper<>(FIToFICustomerCreditTransferV08.class, summaryFields.messageId(), it -> it.getGrpHdr().getMsgId());

El mismo enfoque se usa para mapeos PDS personalizados, p. ej., un mapper que espera un tipo PDS específico del cliente y apunta al campo messageId de la summary.

new PdsMapper<>(ClientSpecificPdsType.class, "ClientSpecificPdsType", summaryFields.messageId(), it -> ClientSpecificPdsType::getValue);

Configurar mapeos personalizados

Para aplicar mapeos personalizados debes proporcionar un JAR que contenga autoconfiguración de Spring que proporcione un bean com.iconsolutions.ipf.ods.summary.SummaryMappingConfigurer.

Definir un bean de configurer de summary
package com.client.ods;

import com.iconsolutions.ipf.ods.summary.MapperRegistry;
import com.iconsolutions.ipf.ods.summary.SummaryFields;
import com.iconsolutions.ipf.ods.summary.SummaryMappingConfigurer;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.context.annotation.Bean;

@AutoConfiguration
class CustomSummaryMappingConfig {
    @Bean
    SummaryMappingConfigurer customSummaryMappingConfigurer() {
        return new SummaryMappingConfigurer() {
            @Override
            public void configure(final MapperRegistry registry, final SummaryFields summaryFields) {
                registry
                        .register(new PdsMapper<>(CustomPdsType.class, "CustomPdsType", summaryFields.messageId(), CustomPdsType::getFieldA))
                        .register(new JsonPdsMapper<>("CustomPdsType", summaryFields.transactionId(), from("/fieldB")));
            }
        };
    }

    static final class CustomPdsType {
        private String fieldA;
        private String fieldB;

        public String getFieldA() {
            return fieldA;
        }

        public void setFieldA(final String fieldA) {
            this.fieldA = fieldA;
        }

        public String getFieldB() {
            return fieldB;
        }

        public void setFieldB(final String fieldB) {
            this.fieldB = fieldB;
        }
    }
}
Crear archivo de Imports de Autoconfiguración de Spring
com.client.ods.CustomSummaryMappingConfig

Crear campos de summary personalizados

Es posible definir tus propios campos de summary y mapear a esos campos con tus propios mapeos personalizados. Tus campos personalizados y los mapeos que apuntan a esos campos son visibles en el summary layout.

Para crear campos de summary personalizados y mapeos personalizados, debes proporcionar un JAR que contenga autoconfiguración de Spring que proporcione un bean com.iconsolutions.ipf.ods.summary.CustomSummaryMappingConfigurer.

Definir una interfaz de campos de summary personalizados
package com.client.ods;

import com.iconsolutions.ipf.ods.summary.CustomSummaryFields;
import com.iconsolutions.ipf.ods.summary.Searchable;
import com.iconsolutions.ipf.ods.summary.SummaryField;

/**
 * This interface MUST directly extend CustomSummaryFields. You do not need to implement this interface.
 */
public interface MyCustomSummaryFields extends CustomSummaryFields {
    /**
     * Only fields of type StringField may be searchable. Annotating a field that is not of type StringField will
     * result in an exception at startup.
     */
    @Searchable
    SummaryField.StringField someSearchableId();

    SummaryField.StringField someName();

    SummaryField.BooleanField someFlag();

    SummaryField.LongField someLong();

    SummaryField.IntegerField someCount();

    SummaryField.BigDecimalField someAmount();

    SummaryField.DateField someDate();

    SummaryField.DateTimeField someTimestamp();

    SummaryField.DateOrDateTimeField someDateOrDateTime();
}
Definir un bean de configurer de summary personalizado
package com.client.ods;

import com.iconsolutions.ipf.ods.summary.MapperRegistry;
import com.iconsolutions.ipf.ods.summary.SummaryFields;
import com.iconsolutions.ipf.ods.summary.CustomSummaryMappingConfigurer;
import com.iconsolutions.ipf.ods.summary.TypeReference;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.context.annotation.Bean;

@AutoConfiguration
class CustomSummaryMappingConfig {

    private static final TypeReference<CustomPdsType> customPdsType = new TypeReference<>() {
    };

    private static final String CUSTOM_PDS_TYPE = "CustomPdsType";

    /**
     * Your instance of CustomSummaryMappingConfigurer MUST be typed to your CustomSummaryFields subtype, in this
     * case it is MyCustomSummaryFields.
     */
    @Bean
    CustomSummaryMappingConfigurer<MyCustomSummaryFields> customSummaryMappingConfigurer() {
        return new SummaryMappingConfigurer() {
            @Override
            public void configure(final MapperRegistry registry, final MyCustomSummaryFields summaryFields) {
                registry
                        //This mapping targets an existing summary field
                        .register(new PdsMapper<>(customPdsType, CUSTOM_PDS_TYPE, summaryFields.messageId(), CustomPdsType::getFieldA))

                        //This mapping targets a custom summary field
                        .register(new JsonPdsMapper<>(CUSTOM_PDS_TYPE, summaryFields.someSearchableId(), from("/fieldB")));
            }

            @Override
            public Class<MyCustomSummaryFields> getSummaryFieldsType() {
                return MyCustomSummaryFields.class;
            }
        };
    }

    static final class CustomPdsType {
        private String fieldA;
        private String fieldB;

        public String getFieldA() {
            return fieldA;
        }

        public void setFieldA(final String fieldA) {
            this.fieldA = fieldA;
        }

        public String getFieldB() {
            return fieldB;
        }

        public void setFieldB(final String fieldB) {
            this.fieldB = fieldB;
        }
    }
}
Crear archivo de Imports de Autoconfiguración de Spring
com.client.ods.CustomSummaryMappingConfig

Los tipos de campos que definas están limitados en su tipo; el conjunto soportado actualmente es:

Type Searchable? Description

StringField

Yes

BigDecimalField

No

LongField

No

IntegerField

No

BooleanField

No

DateField

No

The underlying type is java.time.LocalDate

DateTimeField

No

A type that represents a date and time. Factory methods are present to aid creating instances from java.time types

DateOrDateTime

No

A type that can represent either a date, or a date time. Factory methods are present to aid creating instances from java.time types

Los campos de summary buscables personalizados deben estar indexados. En ODS los campos buscables en una summary se poblarán bajo searchFields, p. ej., searchFields.someId.

Despliegue de personalizaciones

Imagen Docker personalizada de ODS Ingestion

Un método para personalizar ODS es construir una imagen docker personalizada de ODS Ingestion, usando la imagen ODS Ingestion predeterminada como base. Se pueden incluir JARs adicionales en esta imagen personalizada que contengan los mapeos de summary personalizados.

Un ejemplo de tal personalización se puede ver en el repositorio ODS. Para aplicar mapeos personalizados debes proporcionar un JAR que contenga autoconfiguración de Spring que proporcione los beans SummaryMappingConfigurer y CustomSUmmaryMappingConfigurer

ODS normalmente no es consciente de tipos PDS personalizados, pero en esta configuración, tu proyecto puede incluir los tipos personalizados en código o a través de dependencias externas, y estarán disponibles en el classpath.

Los tipos PDS personalizados son recibidos por ODS como un mapa de propiedades. El tipo es en realidad Map<String, Object>. ODS convertirá este mapa al tipo deseado e invocará el mapper personalizado con el valor convertido.

Cualquier dependencia de terceros requerida por tu JAR de mapeo personalizado también deberá incluirse en la imagen docker personalizada. Dependencias como Spring/Spring Boot/Lombok, etc. no necesitarán proporcionarse, ya que ya las proporciona ODS.
Evita tener más dependencias para tus mapeadores de las absolutamente necesarias. Esto ayudará a evitar problemas de classpath.

El conjunto de dependencias recomendado del que debería depender tu JAR de mapeo personalizado es

<dependencies>
    <dependency>
        <groupId>com.iconsolutions.ipf.ods</groupId>
        <artifactId>ods-summary-mapping-api</artifactId>
        <version>${ods.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-autoconfigure</artifactId>
        <version>${spring-boot.version}</version>
    </dependency>

    <!-- Optional: Only required if customising ISO20022 MDS Mappings -->
    <dependency>
        <groupId>com.iconsolutions.iso20022.model</groupId>
        <artifactId>message-model-types</artifactId>
        <version>${iso-model.version}</version>
    </dependency>
</dependencies>

Estas no necesitarán añadirse a tu imagen docker personalizada; ya estarán presentes.

Además de estas, puede que necesites depender de otras librerías que proporcionen tus tipos PDS personalizados objetivo. Estas deberán incluirse en la imagen docker personalizada junto con tus mapeadores personalizados.

Si tus tipos PDS personalizados son pequeños, puedes optar por duplicarlos junto a tus mapeadores personalizados en lugar de añadir otra dependencia. ODS podrá convertir a los tipos requeridos antes de invocar tus mapeadores.

ODS Plugin

<Not yet implemented>

Summary Layout

El summary layout, es decir, el conjunto de campos de summary predeterminados y personalizados, los mapeos MDS y PDS personalizados, cualquier mapeo predeterminado deshabilitado y el conjunto final de mapeos, está disponible en tiempo de ejecución.

Logging

El summary layout se registra al inicio.

Ejemplo de log de summary layout
2023-10-04 15:02:57.270  INFO 1 --- [           main] c.i.ipf.ods.summary.SummaryLayoutLogger  :
-------------------------------------------------------------------------------------
 Summary Layout
-------------------------------------------------------------------------------------
    ---------------------------------------------------------------------------------
     Disabled MDS Mappings
    ---------------------------------------------------------------------------------
                       Target Field                                      Source Type
    ---------------------------------------------------------------------------------
                         debtorName                             PaymentInstruction30
                                                         CreditTransferTransaction39
                                                               PaymentTransaction112
                                                               PaymentTransaction102
                                                               PaymentTransaction106

                          messageId              CustomerCreditTransferInitiationV09
                                                     FIToFICustomerCreditTransferV08
                                                                    PaymentReturnV09

                      transactionId                      CreditTransferTransaction39
                                                               PaymentTransaction112
                                                               PaymentTransaction102
                                                               PaymentTransaction106

    ---------------------------------------------------------------------------------
    ---------------------------------------------------------------------------------
     Custom PDS Mappings
    ---------------------------------------------------------------------------------
                       Target Field                                      Source Type
    ---------------------------------------------------------------------------------
                         debtorName                                    CustomPdsType

                          messageId                                    CustomPdsType

                      transactionId                                    CustomPdsType

    ---------------------------------------------------------------------------------
    ---------------------------------------------------------------------------------
     Final Mappings
    ---------------------------------------------------------------------------------
                       Target Field                                      Source Type
    ---------------------------------------------------------------------------------
                 acceptanceDateTime                      CreditTransferTransaction39

                       batchBooking                             PaymentInstruction30

                     cancellationId                            PaymentTransaction106

                       chargeAmount                            PaymentTransaction112

               chargeAmountCurrency                            PaymentTransaction112

                         controlSum              CustomerCreditTransferInitiationV09
                                                                PaymentInstruction30

                      creditAccount                            AccountNotification20

                       creditAmount                            AccountNotification20

               creditAmountCurrency                            AccountNotification20

                    creditorAccount                      CreditTransferTransaction34
                                                         CreditTransferTransaction39
                                                               PaymentTransaction112
                                                               PaymentTransaction102
                                                               PaymentTransaction106

                   creditorAgentBIC                      CreditTransferTransaction34
                                                         CreditTransferTransaction39
                                                               PaymentTransaction112
                                                               PaymentTransaction102
                                                               PaymentTransaction106

                        creditorBIC                      CreditTransferTransaction34
                                                         CreditTransferTransaction39

                       creditorName                      CreditTransferTransaction34
                                                         CreditTransferTransaction39
                                                               PaymentTransaction112
                                                               PaymentTransaction102
                                                               PaymentTransaction106

                       debitAccount                            AccountNotification20

                        debitAmount                            AccountNotification20

                debitAmountCurrency                            AccountNotification20

                      debtorAccount                             PaymentInstruction30
                                                         CreditTransferTransaction39
                                                               PaymentTransaction112
                                                               PaymentTransaction102
                                                               PaymentTransaction106

                     debtorAgentBIC                             PaymentInstruction30
                                                         CreditTransferTransaction39
                                                               PaymentTransaction112
                                                               PaymentTransaction102
                                                               PaymentTransaction106

                          debtorBIC                             PaymentInstruction30
                                                         CreditTransferTransaction39

                         debtorName                                    CustomPdsType

                initiatingPartyName              CustomerCreditTransferInitiationV09

                    instructedAgent                  FIToFICustomerCreditTransferV08
                                                                    PaymentReturnV09
                                                               PaymentTransaction112

                   instructedAmount                      CreditTransferTransaction34
                                                               AccountNotification20

           instructedAmountCurrency                      CreditTransferTransaction34
                                                               AccountNotification20

                    instructedParty              FIToFIPaymentCancellationRequestV08

                   instructingAgent                  FIToFICustomerCreditTransferV08
                                                                    PaymentReturnV09
                                                               PaymentTransaction112

                   instructingParty              FIToFIPaymentCancellationRequestV08

                      instructionId                      CreditTransferTransaction34
                                                         CreditTransferTransaction39
                                                               PaymentTransaction112
                                                               PaymentTransaction102
                                                               PaymentTransaction106

            interbankSettlementDate                  FIToFICustomerCreditTransferV08
                                                         CreditTransferTransaction39
                                                                    PaymentReturnV09

                          messageId                                    CustomPdsType

               numberOfTransactions                             PaymentInstruction30
                                                     FIToFICustomerCreditTransferV08

                 originalEndToEndId                            PaymentTransaction112
                                                               PaymentTransaction102
                                                               PaymentTransaction106

    originalInterbankSettlementDate                            PaymentTransaction112
                                                               PaymentTransaction102
                                                               PaymentTransaction106

                  originalMessageId                                 PaymentReturnV09
                                                               PaymentTransaction112
                                                               PaymentTransaction102
                                                               PaymentTransaction106

               paymentInformationId                             PaymentInstruction30

             requestedExecutionDate                             PaymentInstruction30

                           returnId                            PaymentTransaction112

                     returnedAmount                            PaymentTransaction112

             returnedAmountCurrency                            PaymentTransaction112

                        totalAmount                  FIToFICustomerCreditTransferV08

                totalAmountCurrency                  FIToFICustomerCreditTransferV08

                  transactionAmount                      CreditTransferTransaction39
                                                               PaymentTransaction112
                                                               PaymentTransaction102
                                                               PaymentTransaction106
                                                               AccountNotification20

          transactionAmountCurrency                      CreditTransferTransaction39
                                                               PaymentTransaction112
                                                               PaymentTransaction102
                                                               PaymentTransaction106
                                                               AccountNotification20

                      transactionId                                    CustomPdsType

                               uetr                      CreditTransferTransaction34
                                                         CreditTransferTransaction39

    ---------------------------------------------------------------------------------

Actuator Endpoint

El summary layout está disponible como un endpoint personalizado de Spring Boot Actuator en /actuator/summary-layout. No está habilitado por defecto.

Configura management.endpoints.web.exposure.include para incluir summary-layout, para habilitar el endpoint de summary layout, o con * para habilitar todos los endpoints de actuator.

  1. ej. management.endpoints.web.exposure.include = [health, info, prometheus, summary-layout].

Ejemplo de respuesta de summary layout
{
  "finalMappings": {
    "debtorAccount": [
      "PaymentInstruction30",
      "CreditTransferTransaction39",
      "PaymentTransaction112",
      "PaymentTransaction102",
      "PaymentTransaction106"
    ],
    "debitAccount": [
      "AccountNotification20"
    ],
    "creditorName": [
      "CreditTransferTransaction34",
      "CreditTransferTransaction39",
      "PaymentTransaction112",
      "PaymentTransaction102",
      "PaymentTransaction106"
    ],
    "chargeAmountCurrency": [
      "PaymentTransaction112"
    ],
    "instructedAmountCurrency": [
      "CreditTransferTransaction34",
      "AccountNotification20"
    ],
    "batchBooking": [
      "PaymentInstruction30"
    ],
    "instructingAgent": [
      "FIToFICustomerCreditTransferV08",
      "PaymentReturnV09",
      "PaymentTransaction112"
    ],
    "cancellationId": [
      "PaymentTransaction106"
    ],
    "totalAmountCurrency": [
      "FIToFICustomerCreditTransferV08"
    ],
    "creditorBIC": [
      "CreditTransferTransaction34",
      "CreditTransferTransaction39"
    ],
    "numberOfTransactions": [
      "PaymentInstruction30",
      "FIToFICustomerCreditTransferV08"
    ],
    "controlSum": [
      "CustomerCreditTransferInitiationV09",
      "PaymentInstruction30"
    ],
    "instructedParty": [
      "FIToFIPaymentCancellationRequestV08"
    ],
    "debtorBIC": [
      "PaymentInstruction30",
      "CreditTransferTransaction39"
    ],
    "debitAmountCurrency": [
      "AccountNotification20"
    ],
    "returnedAmountCurrency": [
      "PaymentTransaction112"
    ],
    "transactionAmount": [
      "CreditTransferTransaction39",
      "PaymentTransaction112",
      "PaymentTransaction102",
      "PaymentTransaction106",
      "AccountNotification20"
    ],
    "returnId": [
      "PaymentTransaction112"
    ],
    "instructingParty": [
      "FIToFIPaymentCancellationRequestV08"
    ],
    "chargeAmount": [
      "PaymentTransaction112"
    ],
    "acceptanceDateTime": [
      "CreditTransferTransaction39"
    ],
    "instructedAmount": [
      "CreditTransferTransaction34",
      "AccountNotification20"
    ],
    "originalMessageId": [
      "PaymentReturnV09",
      "PaymentTransaction112",
      "PaymentTransaction102",
      "PaymentTransaction106"
    ],
    "creditAmountCurrency": [
      "AccountNotification20"
    ],
    "originalEndToEndId": [
      "PaymentTransaction112",
      "PaymentTransaction102",
      "PaymentTransaction106"
    ],
    "creditAccount": [
      "AccountNotification20"
    ],
    "paymentInformationId": [
      "PaymentInstruction30"
    ],
    "instructedAgent": [
      "FIToFICustomerCreditTransferV08",
      "PaymentReturnV09",
      "PaymentTransaction112"
    ],
    "messageId": [
      "CustomPdsType"
    ],
    "transactionAmountCurrency": [
      "CreditTransferTransaction39",
      "PaymentTransaction112",
      "PaymentTransaction102",
      "PaymentTransaction106",
      "AccountNotification20"
    ],
    "debtorName": [
      "PaymentInstruction30",
      "CreditTransferTransaction39",
      "PaymentTransaction112",
      "PaymentTransaction102",
      "PaymentTransaction106"
    ],
    "debitAmount": [
      "AccountNotification20"
    ],
    "transactionId": [
      "CustomPdsType"
    ],
    "totalAmount": [
      "FIToFICustomerCreditTransferV08"
    ],
    "requestedExecutionDate": [
      "PaymentInstruction30"
    ],
    "creditorAccount": [
      "CreditTransferTransaction34",
      "CreditTransferTransaction39",
      "PaymentTransaction112",
      "PaymentTransaction102",
      "PaymentTransaction106"
    ],
    "uetr": [
      "CreditTransferTransaction34",
      "CreditTransferTransaction39"
    ],
    "originalInterbankSettlementDate": [
      "PaymentTransaction112",
      "PaymentTransaction102",
      "PaymentTransaction106"
    ],
    "instructionId": [
      "CreditTransferTransaction34",
      "CreditTransferTransaction39",
      "PaymentTransaction112",
      "PaymentTransaction102",
      "PaymentTransaction106"
    ],
    "creditorAgentBIC": [
      "CreditTransferTransaction34",
      "CreditTransferTransaction39",
      "PaymentTransaction112",
      "PaymentTransaction102",
      "PaymentTransaction106"
    ],
    "creditAmount": [
      "AccountNotification20"
    ],
    "returnedAmount": [
      "PaymentTransaction112"
    ],
    "initiatingPartyName": [
      "CustomerCreditTransferInitiationV09"
    ],
    "interbankSettlementDate": [
      "FIToFICustomerCreditTransferV08",
      "CreditTransferTransaction39",
      "PaymentReturnV09"
    ],
    "debtorAgentBIC": [
      "PaymentInstruction30",
      "CreditTransferTransaction39",
      "PaymentTransaction112",
      "PaymentTransaction102",
      "PaymentTransaction106"
    ]
  },
  "customMdsMappings": {},
  "customPdsMappings": {
    "messageId": [
      "CustomPdsType"
    ],
    "transactionId": [
      "CustomPdsType"
    ]
  },
  "disabledMdsMappings": {
    "messageId": [
      "CustomerCreditTransferInitiationV09",
      "FIToFICustomerCreditTransferV08",
      "PaymentReturnV09"
    ],
    "transactionId": [
      "CreditTransferTransaction39",
      "PaymentTransaction112",
      "PaymentTransaction102",
      "PaymentTransaction106"
    ]
  }
}