Documentation for a newer release is available. View Latest

ODS Persistence Model

Este documento describe el IPF Operational Data Store (ODS) implementado en MongoDB.

Diagrama de visión general

A continuación se muestra una vista simplificada de las principales relaciones entre las colecciones; no contiene las listas completas de campos, solo aquellos que se relacionan con asociaciones con otras colecciones a través de identidades.

bar

Patrones de uso

ODS se centra en una Unit of Work (uow). Una uow representa una única transacción que se ha procesado a través de una implementación de IPF y tiene límites bien definidos. Las Units of Work más comunes son Payments y Returns, pero una uow también puede ser otras acciones como trabajos de File Processing o Human Tasks.

El campo uowId es proporcionado por el software de procesamiento de pagos (IPF) en todos los elementos de datos emitidos al ODS a través del IPF Processing Data Egress. Una vez que hemos identificado el uowId para una unidad de trabajo dada, es trivial capturar todos los puntos de datos relacionados con ella, desde MDS, PDS, process y la colección custom.

Desde la perspectiva de consulta de datos, la ruta común es identificar el registro summary asociado, que actúa como una "columna vertebral" agregando campos importantes de los diversos puntos de datos para una unidad de trabajo dada. Esta agregación, tal como se aplica a todos los IPF processing flows, son servicios IPF: los valores capturados aquí son los campos clave por los que un usuario o sistema puede querer buscar (con un enfoque inicial en payments/returns).

Visión general de colecciones

Payments

Nombre de la colección: payments

Almacena objetos MDS individuales creados en la iniciación del pago y actualizados a lo largo del ciclo de vida del procesamiento del pago. Un "MDS Object" se identifica por su mdsObjectId, dentro del ámbito de un uowId dado. La colección está modelada como un log de solo anexado con actualizaciones a un mdsObject representadas como múltiples entradas, diferenciadas por el processObjectReference, que es la tercera parte del índice compuesto único: uowId_mdsObjectId_processObjectReference

Campos

A continuación se muestran los campos para el MdsObject.

Field Description Example

_id

PK - Autogenerated by MongoDB

63e0d35dcbd3c015141aad53

_class

Fully Qualified Java Class name of the domain type for the document entry

com.iconsolutions.ipf.ods.MdsEntry

clientRequestId

Part of the Processing Context. An external identifier may have been provided to IPF by a client during Payment Initiation to identify a payment within IPF.

d708ef96-e25f-4da2-82e1-4172c0358899

content.*

A JSON subdocument of content

<json subdocument of the content>

content._class

Fully Qualified Java Class name of the payload content

com.iconsolutions.ipf.payments.domain.payment_initiation.pain001.CustomerCreditTransferInitiation

context.associationId

Part of the Processing Context. An identifier that associates the object with a specific business process such as a Process Flow

InitiationFlow|88a40683-107f-480f-bec2-b9aaef24d3bb

context.clientRequestId

Part of the Processing Context. An external identifier may have been provided to IPF by a client during Payment Initiation to identify a payment within IPF.

d708ef96-e25f-4da2-82e1-4172c0358899

context.processingEntity

Part of the Processing Context. The financial processing entity is responsible for processing during the settlement of the payment.

UNKNOWN

context.unitOfWorkId

Part of the Processing Context. A unique IPF identifier for a given transaction/request that has been submitted to IPF and who’s uniqueness is only guaranteed by the generator and not enforced by IPF. For Instant payments this relates to a single Payment Processing, for Bulk/SCT there would be different unitOfWorkIds for each level of processing (Group, Instruction, and Transaction)

624d7fa649f0f4b37093fe30

createdAt

Timestamp at which this object was originally created by the originating system (This is NOT the time that the ODS received the object). The date-time notation as defined by https://tools.ietf.org/html/rfc3339#section-5.6.

2023-02-06T10:15:54.711+0000

objectType

Identifies the type of mds object, i.e. which ISO20022 fundamental message component

PAIN_001_PAYMENT_INSTRUCTION

paymentObjectId

A unique identifier of the mds object, provided by the payment processing service (IPF). The current identify function being used is uowId + businessDataFieldname + eventSequence + mdsObjectTypeName

bc3d6020-02c2-43e1-84ad-662267e32ba3|PaymentInitiation|1|PaymentInstruction

parentPaymentObjectId

Reference to the parent’s PaymentObjectId

bc3d6020-02c2-43e1-84ad-662267e32ba3|PaymentInitiation|0|CustomerCreditTransferInitiation

primaryAssociation

Processing Context associationId, most often the persistenceId of an IPF Processing Flow

InitiationFlow|88a40683-107f-480f-bec2-b9aaef24d3bb

processingEntity

Part of the Processing Context. The financial entity responsible for the payment processing.

UNKNOWN

processObjectReference

Identifier of the originating process object, on all current scenarios this is the EventId of the Domain Event

InitiationFlow|88a40683-107f-480f-bec2-b9aaef24d3bb|1

source

The source system that provided this object to the ODS, could most likely be an IPF Service but may be a Bank System/Operator directly.

ipf-flow

sequenceNumber

The internal sequence for the mds object, usually derived via the sequence for the source ProcessObject, e.g. the Domain Event in the context of its associated Process Flow.

2

searchFields.()*

A Set of common searchable (indexed) fields for ISO objects

-

unitOfWorkId

Part of the Processing Context. A unique IPF identifier for a given transaction/request that has been submitted to IPF and who’s uniqueness is only guaranteed by the generator and not enforced by IPF. For Instant payments this relates to a single Payment Process, for Bulk/SCT there would be different unitOfWorkId for each level of processing (Group, Instruction, and Transaction)

624d7fa649f0f4b37093fe30

A continuación se muestran los campos relacionados con el subobjeto searchFields del MdsObject; se muestran en una tabla separada únicamente para facilitar la lectura.

Field Example

searchFields.accountServicerReference

searchFields.amount

7.16

searchFields.assignmentId

searchFields.bankTransactionCode

searchFields.bookingDate

searchFields.cancellationId

searchFields.cancellationStatusId

searchFields.creationDateTime

searchFields.creditorAccount

gb24adkgjwyyhujwrobfjpgdhgtiki

searchFields.creditorAgentBIC

icongba1

searchFields.creditorBIC

icongbl0

searchFields.creditorName

adam white

searchFields.creditDebitIndicator

searchFields.currency

USD

searchFields.debtorAccount

gb74fbnfuhqjrnhbrhmxgbzcgivrdy

searchFields.debtorAgentBIC

icongba1

searchFields.debtorBIC

icongbm0

searchFields.debtorName

isabelle mitchell

searchFields.endToEndId

ANVnAMEdBCwvsNsCDUtlBRnOBMPTXGMcpaR

searchFields.entryReference

searchFields.initiatingPartyName

searchFields.initiatingPartyId

searchFields.instructedAgent

searchFields.instructingAgent

searchFields.instructionId

searchFields.messageId

XIrNfxNPubaUGFvnuntjTYWnintRDfYLKFT

searchFields.notificationIdentifier

searchFields.originalmessageId

searchFields.paymentInstructionId

ApwciBTlXXQGNckhDuhlJDnygEoDtKAbzun

searchFields.reasonCode

searchFields.reportingAccount

searchFields.returnId

searchFields.status

searchFields.statusCode

searchFields.statusRequestId

searchFields.transactionId

searchFields.uetr

Registros de ejemplo

A continuación se muestra un registro de ejemplo de un bloque Payment Instruction de pain.001.

{
  "_id" : "63e2288bbdb3835de45e3616",
  "_class" : "com.iconsolutions.ipf.ods.persistence.mongo.mds.MdsEntry",
  "clientRequestId" : "UNKNOWN",
  "content" : {
    "json" : "{\"pmtInfId\":\"ApwciBTlXXQGNckhDuhlJDnygEoDtKAbzun\",\"nbOfTxs\":\"1\",\"ctrlSum\":7.16,\"pmtTpInf\":{\"svcLvl\":[{\"cd\":\"SEPA\"}],\"lclInstrm\":{\"cd\":\"INST\"}},\"reqdExctnDt\":{\"dt\":\"2023-02-07\"},\"dbtr\":{\"nm\":\"Isabelle Mitchell\",\"id\":{\"orgId\":{\"anyBIC\":\"ICONGBM0\"}}},\"dbtrAcct\":{\"id\":{\"iban\":\"GB74FBNFUHQJRNHBRHMXGBZCGIVRDY\"}},\"dbtrAgt\":{\"finInstnId\":{\"bicfi\":\"ICONGBA1\"}}}",
    "type" : "com.iconsolutions.ipf.payments.domain.payment_initiation.pain001.PaymentInstruction"
  },
  "context" : {
    "associationId" : "InitiationFlow|f0a9684a-467e-4e60-9e6e-efe00a860305",
    "clientRequestId" : "UNKNOWN",
    "processingEntity" : "UNKNOWN",
    "unitOfWorkId" : "7515b096-b126-4e01-a732-c28d1b5f0ea6"
  },
  "createdAt" : "2023-02-07T10:31:36.718+0000",
  "objectType" : "PAIN_001_PAYMENT_INSTRUCTION",
  "parentPaymentObjectId" : "7515b096-b126-4e01-a732-c28d1b5f0ea6|PaymentInitiation|0|CustomerCreditTransferInitiation",
  "paymentObjectId" : "7515b096-b126-4e01-a732-c28d1b5f0ea6|PaymentInitiation|1|PaymentInstruction",
  "primaryAssociation" : "InitiationFlow|f0a9684a-467e-4e60-9e6e-efe00a860305",
  "processObjectReference" : "InitiationFlow|f0a9684a-467e-4e60-9e6e-efe00a860305|1",
  "processingEntity" : "UNKNOWN",
  "searchFields" : {
    "debtorBIC" : "icongbm0",
    "debtorAccount" : "gb74fbnfuhqjrnhbrhmxgbzcgivrdy",
    "amount" : 7.16,
    "paymentInstructionId" : "ApwciBTlXXQGNckhDuhlJDnygEoDtKAbzun",
    "messageId" : "XIrNfxNPubaUGFvnuntjTYWnintRDfYLKFT",
    "debtorName" : "isabelle mitchell",
    "debtorAgentBIC" : "icongba1"
  },
  "sequenceNumber" : 1,
  "source" : "ipf-flow",
  "unitOfWorkId" : "7515b096-b126-4e01-a732-c28d1b5f0ea6"
}

Índices

A continuación se muestran los índices para la colección Payments.

Index Name Fields Options

id

_id

unique

clientRequestId_1

clientRequestId (ascending)

createdAt_1__id_-1

createdAt (ascending) - _id (descending)

parentPaymentObjectId_1

parentPaymentObjectId (ascending)

paymentObjectId_1

paymentObjectId (ascending)

primaryAssociations_1

primaryAssociations (ascending)

lastUpdated_1

lastUpdated (ascending)

searchFields.assignmentId_1

searchFields.assignmentId (ascending)

searchFields.cancellationId_1

searchFields.cancellationId (ascending)

searchFields.cancellationStatusId_1

searchFields.cancellationStatusId (ascending)

searchFields.creditorAccount_1__id_-1

searchFields.creditorAccount (ascending) - _id (descending)

searchFields.creditorAgentBIC_1__id_-1

searchFields.creditorAgentBIC (ascending) - _id (descending)

searchFields.creditorName_1__id_-1

searchFields.creditorName (ascending) = -_id (descending)

searchFields.debtorAccount_1__id_-1

searchFields.debtorAccount (ascending) - _id (descending)

searchFields.debtorAgentBIC_1__id_-1

searchFields.debtorAgentBIC (ascending) - _id (descending)

searchFields.debtorName_1__id_-1

searchFields.debtorName (ascending) - _id (descending)

searchFields.endToEndId_1

searchFields.endToEndId (ascending)

searchFields.initiatingPartyId_1__id_-1

searchFields.initiatingPartyId (ascending) - _id (descending)

searchFields.initiatingPartyName_1__id_-1

searchFields.initiatingPartyName (ascending) - _id (descending)

searchFields.instructedAgent_1__id_-1

searchFields.instructedAgent (ascending) - _id (descending)

searchFields.instructingAgent_1__id_-1

searchFields.instructingAgent (ascending) - _id (descending)

searchFields.instructionId_1

searchFields.instructionId (ascending)

searchFields.messageId_1

searchFields.messageId (ascending)

searchFields.originalMessageId_1

searchFields.originalMessageId (ascending)

searchFields.paymentInstructionId_1

searchFields.paymentInstructionId (ascending)

searchFields.returnId_1

searchFields.returnId (ascending)

searchFields.statusRequestId_1

searchFields.statusRequestId (ascending)

searchFields.transactionId_1

searchFields.transactionId (ascending)

searchFields.uetr_1

searchFields.uetr (ascending)

unitOfWorkId_1

unitOfWorkId (ascending)

unitOfWorkId_1_paymentObjectId_1_processObjectReference_1

unitOfWorkId (ascending) - paymentObjectId (ascending) - procesObjectReference (ascending)

unique

PDS

Nombre de la colección: pds

Almacena objetos PDS que se han capturado durante el procesamiento de pagos. Los objetos PDS pueden ser tipos definidos por IPF o tipos PDS personalizados específicos del cliente.

Un objeto PDS se identifica por la unidad de trabajo a la que pertenece y su nombre. Las distintas versiones de ese objeto PDS se distinguen por el número de secuencia del evento del que se originaron. El mayor número de secuencia entre un conjunto de versiones de objeto PDS es la versión más reciente de ese objeto PDS.

La colección PDS es de solo anexado.

Campos

Field Description Example

_id

PK - Generated by MongoDB

63e0d35dcbd3c015141aad53

createdAt

Timestamp at which this object was originally created by the originating system, which is the time the original event was raised. The date-time notation as defined by https://tools.ietf.org/html/rfc3339#section-5.6.

2023-02-06T10:15:54.711+0000

unitOfWorkId

A unique IPF identifier for a given transaction/request that has been submitted to IPF and who’s uniqueness is only guaranteed by the generator and not enforced by IPF. For Instant payments this relates to a single Payment Process, for Bulk/SCT there would be different unitOfWorkId for each level of processing (Group, Instruction, and Transaction)

624d7fa649f0f4b37093fe30

primaryAssociation

Usually the persistenceId of an IPF Processing Flow

InitiationFlow|88a40683-107f-480f-bec2-b9aaef24d3bb

associationId

An identifier that associates the object with a specific business process such as a Process Flow

InitiationFlow|88a40683-107f-480f-bec2-b9aaef24d3bb

clientRequestId

An external identifier may have been provided to IPF by a client during Payment Initiation to identify a payment within IPF

d708ef96-e25f-4da2-82e1-4172c0358899

processingEntity

The financial entity responsible for the payment processing.

UNKNOWN

eventId

Identifier of the originating event

InitiationFlow|88a40683-107f-480f-bec2-b9aaef24d3bb|1

source

The source system that provided this object to the ODS, could most likely be an IPF Service but may be a Bank System/Operator directly.

ipf-flow

name

Identifies the PDS object, either an IPF type, such as 'Csm, or a client specific type, such as 'ClientDataType'

Csm

sequenceNumber

The internal sequence for the PDS object, usually derived via the sequence for the source event,

2

content.*

A JSON subdocument of content

<json subdocument of the content>

Ejemplo de registro PDS personalizado
{
  "_id" : "6489b5822fad5002d37baf1f",
  "clientRequestId" : "UNKNOWN",
  "content" : {
    "clientSpecificFieldName" : "A value important to the client during payment processing"
  },
  "createdAt" : "2023-06-09T09:01:00.000Z",
  "eventId" : "InitiationFlow|f0a9684a-467e-4e60-9e6e-efe00a860305|1",
  "name" : "SpecialClientBusinessData",
  "primaryAssociation" : "InitiationFlow|f0a9684a-467e-4e60-9e6e-efe00a860305",
  "processingEntity" : "UNKNOWN",
  "sequenceNumber" : 1,
  "source" : "ipf-flow",
  "unitOfWorkId" : "7afec0ea-66e7-40d6-8492-3f5c811118ea"
}
Ejemplo de registro IPF PDS
{
  "_id" : "6489b5822fad5002d37baf1f",
  "clientRequestId" : "UNKNOWN",
  "content" : {
    "value" : "RT1"
  },
  "createdAt" : "2023-06-09T09:01:00.000Z",
  "eventId" : "InitiationFlow|f0a9684a-467e-4e60-9e6e-efe00a860305|2",
  "name" : "Csm",
  "primaryAssociation" : "InitiationFlow|f0a9684a-467e-4e60-9e6e-efe00a860305",
  "processingEntity" : "UNKNOWN",
  "sequenceNumber" : 2,
  "source" : "ipf-flow",
  "unitOfWorkId" : "7afec0ea-66e7-40d6-8492-3f5c811118ea"
}

Processes

Nombre de la colección: processes

Almacena objetos de proceso individuales (captura de message log, system event o domain event, etc.) que se han capturado durante el procesamiento de pagos o en interacciones con sistemas/funciones/etc. externos al payment processing flow. Los objetos de proceso son de solo anexado con una restricción única sobre unitOfWork e idempotencyKey/objectIdentifier.

Campos

A continuación se muestran los campos para la colección processes; hay tablas separadas para campos adicionales que son condicionales al objectType. Las entradas de Processes se modelan actualmente a través de herencia de un tipo base Process Object. Aunque planeamos pasar a composición, como en la colección payments.

Field Description Example

_id

PK - Autogenerated by MongoDB

63e0d35ccbd3c015141aad30

associationId

Part of the Processing Context. An identifier that associates the object with a specifc business process such as a Process Flow

IpftutorialflowV2|d4964685-f134-40db-9bc8-77d79202cb99

clientRequestId

Part of the Processing Context. An external identifier may have been provided to IPF by a client during Payment Initiation to identify a payment within IPF.

d708ef96-e25f-4da2-82e1-4172c0358899

createdAt

Timestamp at which this object was originally created by the originating system (This is NOT the time that the ODS received the object). The date-time notation as defined by https://tools.ietf.org/html/rfc3339#section-5.6.

2023-02-06T10:15:54.711+0000

content

The raw content of the original data capture (e.g original Domain Event)

<string of json raw content of the original System Event>

objectType

An ODS label for the type of Process Object "SYSTEM_EVENT, PROCESS_FLOW_DEFINITION, MESSAGE_LOG, PROCESS_FLOW_EVENT"

SYSTEM_EVENT

idempotencyKey

An identifier, unique within the scope of a unit of work, that unambiguously identifies this Process Object

bc3d6020-02c2-43e1-84ad-662267e32ba3|639bcb7a-866d-4982-9245-b905a7b2177f

primaryAssociation

Processing Context associationId, most often the persistenceId of an IPF Processing Flow

bc3d6020-02c2-43e1-84ad-662267e32ba3

processingEntity

Part of the Processing Context. The financial processing entity responsible for processing during the settlement of the payment.

UNKNOWN

source

The source system that provided this object to the ODS, could most likely be an IPF Service but may be a Bank System/Operator directly.

0.0.0.0

unitOfWorkId

Part of the Processing Context. A unique IPF identifier for a given transaction/request that has been submitted to IPF and who’s uniqueness is only guaranteed by the generator and not enforced by IPF. For Instant payments this relates to a single Payment Process, for Bulk/SCT there would be different unitOfWorkId for each level of processing (Group, Instruction, and Transaction)

bc3d6020-02c2-43e1-84ad-662267e32ba3

ProcessFlowEvent

Campos
Field Description Example

causedBy

ProcessFlowSpecific - eventId of the causing event for the ProcessEvent

InitiationFlow|88a40683-107f-480f-bec2-b9aaef24d3bb|1

eventId

A unique identifier that unambiguously identifies an event

IpftutorialflowV2|d4964685-f134-40db-9bc8-77d79202cb99|2

eventName

The name of the Process Flow Event

Flow Initiated

hash

The hash value of the associated processing flow, can be compared with the hash of the ProcessFlowDefinition.

-101444374

originalReasonCode

originalReasonText

originalResponseCode

paymentJourneyType

paymentType

processFlowId

The Date on which the source Domain Event was created

IpftutorialflowV2|d4964685-f134-40db-9bc8-77d79202cb99

processFlowSequence

Sequence identifier to track causal ordering of Process Flow Events within the context of a Unit of Work.

2

processFlowDefinitionId

A unique identifier of the payment object, is provided by the payment processing service (IPF).Â

IpftutorialflowV2

reasonCode

Reference to the parent’s PaymentObjectId

reasonText

Processing Context associationId, most often the persistenceId of an IPF Processing Flow

responseCode

TheÂ

Accepted

status

Various Status Identifiers

"status" : { "originatingStatus" : "Initial",  "resultingStatus" : "Duplicate Checking", "globalStatus" : "PENDING" }

Registro de ejemplo
{
  "_id" : "63e2288cbdb3835de45e3623",
  "_class" : "com.iconsolutions.ipf.ods.persistence.mongo.process.ProcessFlowEventEntry",
  "associationId" : "InitiationFlow|f0a9684a-467e-4e60-9e6e-efe00a860305",
  "causedBy" : "IpftutorialflowV2|6b1b4ab0-dead-4032-b62b-eb66f677c0f1|8",
  "clientRequestId" : "UNKNOWN",
  "content" : "{\"@class\":\"com.iconsolutions.ipf.tutorial.ipftutorialmodel.initiation_flow.events.IpftutorialflowV2Complete\",\"createdAt\":\"2023-02-07T10:31:37.785Z\",\"originalCommandId\":\"HandleCallIpftutorialflowV2Response|e69a7620-6d8f-4aa9-8751-e55c6ae783a2|70c71b38-2cc8-4f08-a778-66968882724f\",\"status\":{\"originatingStatus\":\"Call Execution\",\"resultingStatus\":\"Complete\",\"globalStatus\":\"ACCEPTED\"},\"eventId\":\"InitiationFlow|f0a9684a-467e-4e60-9e6e-efe00a860305|9\",\"processingContext\":{\"associationId\":\"InitiationFlow|f0a9684a-467e-4e60-9e6e-efe00a860305\",\"unitOfWorkId\":\"7515b096-b126-4e01-a732-c28d1b5f0ea6\",\"clientRequestId\":\"UNKNOWN\",\"processingEntity\":\"UNKNOWN\"},\"initiatingId\":\"f0a9684a-467e-4e60-9e6e-efe00a860305\",\"causedByEventId\":\"IpftutorialflowV2|6b1b4ab0-dead-4032-b62b-eb66f677c0f1|8\",\"responseCode\":\"IpftutorialflowV2Complete\",\"hash\":\"-101444374\",\"failureResponse\":false}",
  "createdAt" : "2023-02-07T10:31:37.785+0000",
  "eventId" : "InitiationFlow|f0a9684a-467e-4e60-9e6e-efe00a860305|9",
  "eventName" : "Ipftutorialflow (V2) Complete",
  "hash" : "-101444374",
  "idempotencyKey" : "7515b096-b126-4e01-a732-c28d1b5f0ea6|InitiationFlow|f0a9684a-467e-4e60-9e6e-efe00a860305|9",
  "objectType" : "PROCESS_FLOW_EVENT",
  "primaryAssociation" : "InitiationFlow|f0a9684a-467e-4e60-9e6e-efe00a860305",
  "processFlowDefinitionId" : "InitiationFlow",
  "processFlowId" : "InitiationFlow|f0a9684a-467e-4e60-9e6e-efe00a860305",
  "processFlowSequence" : 9,
  "processingEntity" : "UNKNOWN",
  "responseCode" : "IpftutorialflowV2Complete",
  "source" : "ipf-flow",
  "status" : {
    "globalStatus" : "ACCEPTED",
    "originatingStatus" : "Call Execution",
    "resultingStatus" : "Complete"
  },
  "unitOfWorkId" : "7515b096-b126-4e01-a732-c28d1b5f0ea6"
}

UnitOfWorks

Nombre de la colección: unitOfWorks

Almacena metadatos a nivel de unit of work que permiten correlacionar y consultar todos los objetos relacionados.

Campos

Field Description Example

unitOfWorkId

Part of the Processing Context. A unique IPF identifier for a given transaction/request that has been submitted to IPF and who’s uniqueness is only guaranteed by the generator and not enforced by IPF. For Instant payments this relates to a single Payment Processing, for Bulk/SCT there would be different unitOfWorkIds for each level of processing (Group, Instruction, and Transaction)

bc3d6020-02c2-43e1-84ad-662267e32ba3

journeyType

The journey type of the unit of work

PAYMENT

startedAt

The datetime of the first process flow event created for this unitOfWork

2023-02-07T00:00:00.000+0000

finishedAt

The datetime of the process flow event that identifies this unitOfWork has moved into a terminal global status

2023-02-07T00:00:01.000+0000

archivedAt

The datetime the unit of work was successfully "archived"

2023-02-07T00:00:00.000+0000

Índices

Index Name Fields Options

id

_id

unique

unitOfWorkId_1

unitOfWorkId (ascending)

unique

startedAt_1

startedAt (ascending)

finishedAt_1

finishedAt (ascending)

Summaries

Nombre de la colección: summaries

Vista resumida y agregada por unit of work para búsquedas y reporting.

Campos

Field Description Example

acceptanceDateTime.lastSequenceNumber

1

acceptanceDateTime.value

2023-02-07T00:00:00.000+0000

archivedAt.value

2023-02-06T10:15:54.711+0000

batchBooking.lastSequenceNumber

1

batchBooking.value

true

cancellationId.lastSequenceNumber

1

cancellationId.value

chargeAmount.lastSequenceNumber

1

chargeAmount.value

7.16

chargeAmountCurrency.lastSequenceNumber

1

chargeAmountCurrency.value

USD

clientRequestId

Part of the Processing Context. An external identifier may have been provided to IPF by a client during Payment Initiation to identify a payment within IPF.

d708ef96-e25f-4da2-82e1-4172c0358899

controlSum.lastSequenceNumber

1

controlSum.value

123.45

creditAccount.lastSequenceNumber

1

creditAccount.value

creditAmount.lastSequenceNumber

1

creditAmount.value

7.16

creditAmountCurrency.lastSequenceNumber

1

creditAmountCurrency.value

USD

creditorAccount.lastSequenceNumber

1

creditorAccount.value

GB24ADKGJWYYHUJWROBFJPGDHGTIKI

creditorAgentBIC.lastSequenceNumber

1

creditorAgentBIC.value

ICONGBA1

creditorBIC.lastSequenceNumber

1

creditorBIC.value

ICONGBL0

creditorName.lastSequenceNumber

1

creditorName.value

csm.lastSequenceNumber

1

csm.value

debitAccount.lastSequenceNumber

1

debitAccount.value

debitAmount.lastSequenceNumber

1

debitAmount.value

debitAmountCurrency.lastSequenceNumber

1

debitAmountCurrency.value

debtorAccount.lastSequenceNumber

1

debtorAccount.value

GB74FBNFUHQJRNHBRHMXGBZCGIVRDY

debtorAgentBIC.lastSequenceNumber

1

debtorAgentBIC.value

ICONGBA1

debtorBIC.lastSequenceNumber

1

debtorBIC.value

ICONGBM0

debtorName.lastSequenceNumber

1

debtorName.value

Isabelle Mitchell

executionStartedAt.lastSequenceNumber

1

executionStartedAt.value

globalStatus.lastSequenceNumber

1

globalStatus.value

ACCEPTED

id

63e0d35dcbd3c015141aad57

instructedAgent.lastSequenceNumber

1

instructedAgent.value

instructedAmount.lastSequenceNumber

1

instructedAmount.value

7.16

instructedAmountCurrency.lastSequenceNumber

1

instructedAmountCurrency.value

USD

instructedParty.lastSequenceNumber

1

instructedParty.value

instructingAgent.lastSequenceNumber

1

instructingAgent.value

instructingParty.lastSequenceNumber

1

instructingParty.value

instructionId.lastSequenceNumber

1

instructionId.value

instructionReceivedAt.lastSequenceNumber

1

instructionReceivedAt.value

2023-02-06T10:15:54.711+0000

interbankSettlementDate.lastSequenceNumber

1

interbankSettlementDate.value

journeyType.lastSequenceNumber

1

journeyType.value

PAYMENT

lastUpdated

Updated each time a summary changes. Used to determine candidates for purging

2023-02-06T10:15:54.711+0000

messageId.lastSequenceNumber

1

messageId.value

numberOfTransactions.lastSequenceNumber

1

numberOfTransactions.value

11

originalEndToEndId.lastSequenceNumber

1

originalEndToEndId.value

originalInterbankSettlementDate.lastSequenceNumber

1

originalInterbankSettlementDate.value

originalMessageId.lastSequenceNumber

1

originalMessageId.value

paymentInformationId.lastSequenceNumber

1

paymentInformationId.value

paymentType.lastSequenceNumber

1

paymentType.value

priority.lastSequenceNumber

1

priority.value

processingEntity

Part of the Processing Context. The financial processing entity is responsible for processing during the settlement of the payment.

reasonCode.lastSequenceNumber

1

reasonCode.value

reasonText.lastSequenceNumber

1

reasonText.value

relatedUnitOfWorkId

requestedExecutionDate.lastSequenceNumber

1

requestedExecutionDate.value

2023-02-06T10:15:54.711+0000

returnId.lastSequenceNumber

1

returnId.value

returnedAmount.lastSequenceNumber

1

returnedAmount.value

returnedAmountCurrency.lastSequenceNumber

1

returnedAmountCurrency.value

searchFields.*

See table below

settlementCompletedAt.lastSequenceNumber

1

settlementCompletedAt.value

startedAt.lastSequenceNumber

1

startedAt.value

timeZone.lastSequenceNumber

1

timeZone.value

transactionAmount.lastSequenceNumber

1

transactionAmount.value

transactionAmountCurrency.lastSequenceNumber

1

transactionAmountCurrency.value

transactionId.lastSequenceNumber

1

transactionId.value

uetr.lastSequenceNumber

1

uetr.value

unitOfWorkId

Part of the Processing Context. A unique IPF identifier for a given transaction/request that has been submitted to IPF and who’s uniqueness is only guaranteed by the generator and not enforced by IPF. For Instant payments this relates to a single Payment Processing, for Bulk/SCT there would be different unitOfWorkIds for each level of processing (Group, Instruction, and Transaction)

bc3d6020-02c2-43e1-84ad-662267e32ba3

Índices

Index Name Fields Options

id

_id

unique

alternativeIds.value_1

alternativeIds.value (ascending)

clientRequestId_1

clientRequestId (ascending)

globalStatus.value_1+paymentType.vaue_1__id_-1

globalStatus.value (ascending) - paymentType.value (ascending) - _id (descending)

paymentJourneyType.value_1__id-1

paymentJourneyType.value (ascending) - _id (descending)

paymentType.value_1__id-1

paymentType.value (ascending) - _id (descending)

lastUpdated_1

lastUpdated (ascending)

searchFields.amount_1__id_-1

searchFields.amount (ascending) - _id (descending)

searchFields.creditorAccount_1__id_-1

searchFields.creditorAccount (ascending) - _id (descending)

searchFields.creditorAgentBIC_1__id_-1

searchFields.creditorAgentBIC - _id (descending)

searchFields.creditorName_1__id_-1

searchFields.creditorName - _id (descending)

searchFields.currency_1_searchFields.amount_1__id_-1

searchFields.currency (ascending) - searchFields.amount (ascending) - _id (descending)

searchFields.debtorAccount_1__id_-1

searchFields.debtorAccount (ascending) - _id (descending)

searchFields.debtorAgentBIC_1__id_-1

searchFields.debtorAgentBIC - _id (descending)

searchFields.debtorName_1__id_-1

searchFields.debtorName - _id (descending)

searchFields.instructionId_1

searchFields.instructionId (ascending)

searchFields.reasonCode_1__id_-1

searchFields.reasonCode (ascending)  - _id (descending)

searchFields.transactionId_1

searchFields.transactionId (ascending)

searchFields.uetr_1

searchFields.uetr (ascending)

startedAt.value_1__id_-1

startedAt.value (ascending) = _id (descending)

unitOfWorkId_1

unitOfWorkId (ascending)

unique

Custom Objects

Nombre de la colección: customobjects

Almacena attachments y otros datos personalizados relacionados con la unidad de trabajo (los custom data objects ya no se ingieren como tales, pero los attachments siguen soportados).

Campos

Field Description Example

_id

PK - Autogenerated by MongoDB

624d7fa649f0f4b37093fe30

_class

Fully Qualified Java Class name of the domain type for the document entry

com.iconsolutions.ipf.ods.CustomEntry

clientRequestId

Part of the Processing Context. An external identifier may have been provided to IPF by a client during Payment Initiation to identify a payment within IPF.

df2e3f10-943c-4f12-8572-85b17740d9ce

createdAt

The Date on which the source Domain Event was created

2023-02-06T10:15:54.711+0000

name

The identifying name of the custom data point.

ExampleData

content

The value of the custom object payload, either as a primitive or JSON object, dependent on objectType

{ "stringField" : "Test", "intField" : 7 }

objectType

Custom Object type label, (KEY_VALUE, SEARCHABLE_KEY_VALUE, COMPLEX_TYPE)

COMPLEX_TYPE

idempotencyKey

An identifier, unique within the scope of a unit of work, that unambiguously identifies this Process Object

7afec0ea-66e7-40d6-8492-3f5c811118ea|InitiationFlow|64a259e5-501c-4329-be9f-4602389f87b7|1|ExampleData|0

primaryAssociation

Processing Context associationId, most often the persistenceId of an IPF Processing Flow

InitiationFlow|64a259e5-501c-4329-be9f-4602389f87b7

associationId

Part of the Processing Context. An identifier that associates the object with a specific business process such as a Process Flow

InitiationFlow|64a259e5-501c-4329-be9f-4602389f87b7

processObjectReference

Identifier of the originating process object, on all current scenarios this is the EventId of the Domain Event

InitiationFlow|88a40683-107f-480f-bec2-b9aaef24d3bb|1

processingEntity

Part of the Processing Context. The financial processing entity is responsible for processing during the settlement of the payment.

UNKNOWN

source

Label of the source service/system/file that created this payment object

ipf-flow

unitOfWorkId

Part of the Processing Context. A unique IPF identifier for a given transaction/request that has been submitted to IPF and who’s uniqueness is only guaranteed by the generator and not enforced by IPF. For Instant payments this relates to a single Payment Processing, for Bulk/SCT there would be different unitOfWorkIds for each level of processing (Group, Instruction, and Transaction)

624d7fa649f0f4b37093fe30

Índices

Index Name Fields Options

id

_id

unique

associationId_1

associationId (ascending)

clientRequestId_1

clientRequestId (ascending)

createdAt_1__id_-1

createdAt (ascending) - _id (descending)

idempotencyKey_1

idempotencyKey (ascending)

objectType_1_entityId_1

objectType (ascending) entityId (ascending)

primaryAssociation_1

primaryAssociation (ascending)

unitOfWorkId_1

unitOfWorkId (ascending)

Relación entre colecciones

  • Los campos uowId y otros identificadores (p. ej., mdsObjectId, processObjectReference) permiten correlación entre colecciones.

  • La colección summaries agrega y expone campos de búsqueda clave de las otras colecciones.

Consideraciones de diseño

  • Modelo de solo anexado para MDS/PDS/Processes para mantener historiales completos.

  • Índices dedicados para acelerar búsquedas por campos clave en summaries y payments.

  • Las diferencias entre motores (MongoDB vs CosmosDB) pueden afectar opciones de indexación; consulta Persistence para detalles.