Documentation for a newer release is available. View Latest
Esta página no está disponible actualmente en Español. Si lo necesita, póngase en contacto con el servicio de asistencia de Icon (correo electrónico)

ODS Persistence Model

This document describes the IPF Operational Data Store (ODS) implemented in MongoDB.

Overview Diagram

Below is a simplified view of the main relationships between the collections, it does not contain the full field lists, but only those that relate to associations with other collections through identities.

bar

Usage Patterns

ODS is centered around a Unit of Work (uow). An uow represents a single transaction that has been processed through an IPF implementation and has well-defined boundaries. The most common Units of Work are Payments and Returns, but uow may also be other actions such as File Processing jobs or Human Tasks.

The uowId field is provided by the payment processing software (IPF) on all data elements emitted to the ODS via the IPF Processing Data Egress. Once we have identified the uowId for a given unit of work then it is trivial to capture all data points relating to it, from the MDS, the PDS, the process and the custom collection.

From a data query perspective, the common route is to identify the associated summary record, which acts as a "spine" aggregating important fields from the various data points for a given unit of work. This aggregation as applied across all IPF processing flows are IPF services - the values captured here are the key fields which a user or a system may want to search for (with an initial payments/returns focus).

Collection Overview

Payments

Collection Name: payments

Stores individual MDS objects created at payment initiation and updated through the payment processing life-cycle. A "MDS Object" is identified by its mdsObjectId, within the scope of a given uowId. The collection is modelled as an append-only log with updates to a mdsObject represented as multiple entries, differentiated by the processObjectReference, which is the 3rd part of the unique composite index uowId_mdsObjectId_processObjectReference

Fields

Below are the fields for the 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

Below are the fields related to the searchFields subObject of the MdsObject, they are displayed in a separate table purely for clarity of reading.

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

Example Records

Below is an example record of a pain.001 Payment Instruction block.

{
  "_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"
}

Indexes

Below are the indexes for the Payments collections.

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

Collection Name: pds

Stores PDS objects that have been captured during payment processing. PDS objects may be IPF defined types, or client specific custom PDS types.

A PDS object is identified by the unit of work it belongs to, and its name. Different versions of that PDS object are distinguished by the event sequence number they originated from. The greatest sequence number among a set of PDS object versions is the latest version of that PDS object.

The PDS collection is append-only.

Fields

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>

Example Custom PDS Record
{
  "_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"
}
Example IPF PDS Record
{
  "_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

Collection Name: processes

Stores individual process objects (message log capture, system event or domain event etc.) that have been captured during payment processing or in interactions with systems/functions/etc. external to the payment processing flow. Process objects are append-only with a unique constraint on unitOfWork and idempotencyKey/objectIdentifier.

Fields

Below are the fields for the processes collection, there are separate tables for additional fields that are conditional on the objectType. Processes entries are currently modelled through inheritance of a Process Object base type. Though we plan to move to composition, like the payments' collection.

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

Fields
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" }

Example Record
{
  "_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"
}

MessageLog

Fields
Field Description Example

messageType

The type of message as defined by the submitting application

PaymentInitiationRequest

direction

The direction of the message relative to the processing of the submitting application (Sent/Received)

RECEIVED

supportingData

Generic map of additional data fields

{"key": "value"}

Example Record
{
  "_id" : "63e22888bdb3835de45e35eb",
  "_class" : "com.iconsolutions.ipf.ods.persistence.mongo.process.MessageLogEntry",
  "clientRequestId" : "UNKNOWN",
  "content" : "{\"requestId\":\"ANVnAMEdBCwvsNsCDUtlBRnOBMPTXGMcpaR\",\"processingContext\":null,\"version\":{\"major\":1,\"minor\":2,\"patch\":3},\"createdAt\":\"2023-02-07T10:31:36.255751Z\",\"payload\":{\"content\":{\"grpHdr\":{\"msgId\":\"XIrNfxNPubaUGFvnuntjTYWnintRDfYLKFT\",\"creDtTm\":\"2023-02-07T10:31:36.253122Z\",\"authstn\":[],\"nbOfTxs\":\"1\",\"ctrlSum\":7.16,\"initgPty\":null,\"fwdgAgt\":null},\"pmtInf\":[{\"pmtInfId\":\"ApwciBTlXXQGNckhDuhlJDnygEoDtKAbzun\",\"pmtMtd\":null,\"btchBookg\":null,\"nbOfTxs\":\"1\",\"ctrlSum\":7.16,\"pmtTpInf\":{\"instrPrty\":null,\"svcLvl\":[{\"cd\":\"SEPA\",\"prtry\":null}],\"lclInstrm\":{\"cd\":\"INST\",\"prtry\":null},\"ctgyPurp\":null},\"reqdExctnDt\":{\"dt\":\"2023-02-07\",\"dtTm\":null},\"poolgAdjstmntDt\":null,\"dbtr\":{\"nm\":\"Isabelle Mitchell\",\"pstlAdr\":null,\"id\":{\"orgId\":{\"anyBIC\":\"ICONGBM0\",\"lei\":null,\"othr\":[]},\"prvtId\":null},\"ctryOfRes\":null,\"ctctDtls\":null},\"dbtrAcct\":{\"id\":{\"iban\":\"GB74FBNFUHQJRNHBRHMXGBZCGIVRDY\",\"othr\":null},\"tp\":null,\"ccy\":null,\"nm\":null,\"prxy\":null},\"dbtrAgt\":{\"finInstnId\":{\"bicfi\":\"ICONGBA1\",\"clrSysMmbId\":null,\"lei\":null,\"nm\":null,\"pstlAdr\":null,\"othr\":null},\"brnchId\":null},\"dbtrAgtAcct\":null,\"instrForDbtrAgt\":null,\"ultmtDbtr\":null,\"chrgBr\":null,\"chrgsAcct\":null,\"chrgsAcctAgt\":null,\"cdtTrfTxInf\":[{\"pmtId\":{\"instrId\":null,\"endToEndId\":\"ANVnAMEdBCwvsNsCDUtlBRnOBMPTXGMcpaR\",\"uetr\":null},\"pmtTpInf\":null,\"amt\":{\"instdAmt\":{\"value\":7.16,\"ccy\":\"USD\"},\"eqvtAmt\":null},\"xchgRateInf\":null,\"chrgBr\":\"SLEV\",\"chqInstr\":null,\"ultmtDbtr\":null,\"intrmyAgt1\":null,\"intrmyAgt1Acct\":null,\"intrmyAgt2\":null,\"intrmyAgt2Acct\":null,\"intrmyAgt3\":null,\"intrmyAgt3Acct\":null,\"cdtrAgt\":{\"finInstnId\":{\"bicfi\":\"ICONGBA1\",\"clrSysMmbId\":null,\"lei\":null,\"nm\":null,\"pstlAdr\":null,\"othr\":null},\"brnchId\":null},\"cdtrAgtAcct\":null,\"cdtr\":{\"nm\":\"Adam White\",\"pstlAdr\":null,\"id\":{\"orgId\":{\"anyBIC\":\"ICONGBL0\",\"lei\":null,\"othr\":[]},\"prvtId\":null},\"ctryOfRes\":null,\"ctctDtls\":null},\"cdtrAcct\":{\"id\":{\"iban\":\"GB24ADKGJWYYHUJWROBFJPGDHGTIKI\",\"othr\":null},\"tp\":null,\"ccy\":null,\"nm\":null,\"prxy\":null},\"ultmtCdtr\":null,\"instrForCdtrAgt\":[],\"instrForDbtrAgt\":null,\"purp\":null,\"rgltryRptg\":[],\"tax\":null,\"rltdRmtInf\":[],\"rmtInf\":null,\"splmtryData\":[]}]}],\"splmtryData\":[]},\"version\":null},\"replyTo\":\"replyTo\",\"customBusinessData\":{\"SINGLE_REQUEST\":\"true\",\"MySpecificKey\":\"MySpecificValue\"}}",
  "createdAt" : "2023-02-07T10:31:36.576+0000",
  "direction" : "RECEIVED",
  "idempotencyKey" : "7515b096-b126-4e01-a732-c28d1b5f0ea6|b87f1647-0bcf-4189-950a-5285607eb0c4",
  "messageType" : "PaymentInitiationRequest",
  "objectType" : "MESSAGE_LOG",
  "primaryAssociation" : "7515b096-b126-4e01-a732-c28d1b5f0ea6",
  "processingEntity" : "UNKNOWN",
  "source" : "ipf-flow",
  "supportingData" : {
    "kafkaKey" : "ANVnAMEdBCwvsNsCDUtlBRnOBMPTXGMcpaR",
    "kafkaPartition" : "0",
    "keyAlias" : "GWPAY01",
    "kafkaOffset" : "0",
    "encryptionScheme" : "AES"
  },
  "unitOfWorkId" : "7515b096-b126-4e01-a732-c28d1b5f0ea6"
}

SystemEvent

Fields
Field Description Example

name

The name of the system event

FlowStarted

level

The level of event (reflected as log-levels)

ERROR

type

The type of event, technical or function

FUNCTIONAL

Example Record
{
  "_id" : "63e0d35ccbd3c015141aad30",
  "name" : "FlowStarted",
  "level" : "DEBUG",
  "type" : "FUNCTIONAL",
  "idempotencyKey" : "bc3d6020-02c2-43e1-84ad-662267e32ba3|639bcb7a-866d-4982-9245-b905a7b2177f",
  "primaryAssociation" : "bc3d6020-02c2-43e1-84ad-662267e32ba3",
  "content" : "{\"name\":\"FlowStarted\",\"level\":\"DEBUG\",\"createdAt\":\"2023-02-06T10:15:55.457Z\",\"version\":{\"major\":1,\"minor\":0,\"patch\":0},\"type\":\"FUNCTIONAL\",\"processingContext\":{\"associationId\":\"IpftutorialflowV2|d4964685-f134-40db-9bc8-77d79202cb99\",\"unitOfWorkId\":\"bc3d6020-02c2-43e1-84ad-662267e32ba3\",\"clientRequestId\":\"d708ef96-e25f-4da2-82e1-4172c0358899\",\"processingEntity\":\"UNKNOWN\"},\"source\":\"0.0.0.0\",\"payload\":{\"behaviour\":\"IpftutorialflowV2\",\"callingFlowId\":\"InitiationFlow|88a40683-107f-480f-bec2-b9aaef24d3bb\"}}",
  "objectType" : "SYSTEM_EVENT",
  "createdAt" : "2023-02-06T10:15:55.457+0000",
  "associationId" : "IpftutorialflowV2|d4964685-f134-40db-9bc8-77d79202cb99",
  "unitOfWorkId" : "bc3d6020-02c2-43e1-84ad-662267e32ba3",
  "clientRequestId" : "d708ef96-e25f-4da2-82e1-4172c0358899",
  "processingEntity" : "UNKNOWN",
  "source" : "0.0.0.0",
  "_class" : "com.iconsolutions.ipf.ods.persistence.mongo.process.SystemEventEntry"
}

ProcessFlowDefinition

Fields
Field Description Example

content._id

The identifier of a Process Flow, which is a combination of name, and if present, version

IpftutorialflowV1

content.name

The name of a Process Flow

Ipftutorialflow

content.version

The (optional) version of a Process Flow

1

content.model

The name of the IPF Model in which the Process Flow Definition resides.

Ipftutorialmodel

content.hash

The hash value of the Process Flow Definition itself

"-756900467"

content.basicGraph

Graph information for the Process Flow that can be overlayed with Domain Events to show the progress of a transaction

<string base64 encoded binary of JGraphT representation of the Process Flow>

content.fullGraph

Graph information for the Process Flow that can be overlayed with Domain Events to show the progress of a transaction

<string base64 encoded binary of JGraphT representation of the Process Flow with ActionTimeouts and other additional detail included>

content.content

The raw content of the original ProcessFlowDefinition object

<string toString() of a Java representation of ProcessFlowDefinition>

content.createdAt

content._class

Fully Qualified Java Class name of the domain type for the Process Object Sub-type

com.iconsolutions.ipf.processingdata.process.ProcessFlowDefinition

Example Record
{
  "_id" : "63e0d15ecbd3c015141aad2a",
  "idempotencyKey" : "IpftutorialflowV1_-756900467",
  "primaryAssociation" : "IpftutorialflowV1",
  "content" : {
    "_id" : "IpftutorialflowV1",
    "name" : "Ipftutorialflow",
    "version" : "1",
    "model" : "Ipftutorialmodel",
    "hash" : "-756900467",
    "basicGraph" : "rO0ABXNyADdjb20uaWNvbnNvbHV0aW9ucy5pcGYuY29yZS5mbG93LmdyYXBoLlNlcmlhbGl6YWJsZUdyYXBomSwtqEQKN9MCAAFMAAVncmFwaHQAE0xvcmcvamdyYXBodC9HcmFwaDt4cHNyAC1vcmcuamdyYXBodC5ncmFwaC5EaXJlY3RlZFdlaWdodGVkUHNldWRvZ3JhcGi9utVw72YX1QIAAHhyACVvcmcuamdyYXBodC5ncmFwaC5EaXJlY3RlZFBzZXVkb2dyYXBomHRRs4CysX8CAAB4cgAjb3JnLmpncmFwaHQuZ3JhcGguQWJzdHJhY3RCYXNlR3JhcGjOSM5wTe/23QIABkwADGVkZ2VTdXBwbGllcnQAHUxqYXZhL3V0aWwvZnVuY3Rpb24vU3VwcGxpZXI7TAAWZ3JhcGhTcGVjaWZpY3NTdHJhdGVneXQAKkxvcmcvamdyYXBodC9ncmFwaC9HcmFwaFNwZWNpZmljc1N0cmF0ZWd5O0wAF2ludHJ1c2l2ZUVkZ2VzU3BlY2lmaWNzdAArTG9yZy9qZ3JhcGh0L2dyYXBoL0ludHJ1c2l2ZUVkZ2VzU3BlY2lmaWNzO0wACXNwZWNpZmljc3QAJ0xvcmcvamdyYXBodC9ncmFwaC9zcGVjaWZpY3MvU3BlY2lmaWNzO0wABHR5cGV0ABdMb3JnL2pncmFwaHQvR3JhcGhUeXBlO0wADnZlcnRleFN1cHBsaWVycQB+AAZ4cHNyADpjb20uaWNvbnNvbHV0aW9ucy5pcGYuY29yZS5mbG93LmdyYXBoLkRlZmF1bHRGbG93R3JhcGhFZGdlQk439CdjAN8CAAB4cHNyADJvcmcuamdyYXBodC5ncmFwaC5GYXN0TG9va3VwR3JhcGhTcGVjaWZpY3NTdHJhdGVnebPMgvHiXDU4AgAAeHBzcgAxb3JnLmpncmFwaHQuZ3JhcGguV2VpZ2h0ZWRJbnRydXNpdmVFZGdlc1NwZWNpZmljc0nuHGHO9d4KAgAAeHIALW9yZy5qZ3JhcGh0LmdyYXBoLkJhc2VJbnRydXNpdmVFZGdlc1NwZWNpZmljc//lXF1igq2rAgABTAAHZWRnZU1hcHQAD0xqYXZhL3V0aWwvTWFwO3hwc3IAF2phdmEudXRpbC5MaW5rZWRIYXNoTWFwNMBOXBBswPsCAAFaAAthY2Nlc3NPcmRlcnhyABFqYXZhLnV0aWwuSGFzaE1hcAUH2sHDFmDRAwACRgAKbG9hZEZhY3RvckkACXRocmVzaG9sZHhwP0AAAAAAAAx3CAAAABAAAAAMc3IAM2NvbS5pY29uc29sdXRpb25zLmlwZi5jb3JlLmZsb3cuZ3JhcGguRmxvd0dyYXBoRWRnZQUYqIey1KBMAgAETAAEY29kZXQAEkxqYXZhL2xhbmcvU3RyaW5nO0wAAmlkcQB+ABhMAAVsYWJlbHEAfgAYTAAEdHlwZXQAOkxjb20vaWNvbnNvbHV0aW9ucy9pcGYvY29yZS9mbG93L2dyYXBoL0Zsb3dHcmFwaEVkZ2UkVHlwZTt4cHB0ACQ5YTFlNzIxMy0yZDMzLTRmYzAtOWE5OS1kNTFiNGRlYWQ1ZjF0AA5GbG93IEluaXRpYXRlZH5yADhjb20uaWNvbnNvbHV0aW9ucy5pcGYuY29yZS5mbG93LmdyYXBoLkZsb3dHcmFwaEVkZ2UkVHlwZQAAAAAAAAAAEgAAeHIADmphdmEubGFuZy5FbnVtAAAAAAAAAAASAAB4cHQABUV2ZW50c3IAJ29yZy5qZ3JhcGh0LmdyYXBoLkludHJ1c2l2ZVdlaWdodGVkRWRnZSgdPgxUvOFlAgABRAAGd2VpZ2h0eHIAH29yZy5qZ3JhcGh0LmdyYXBoLkludHJ1c2l2ZUVkZ2UtODE5NTIyNwIAAkwABnNvdXJjZXQAEkxqYXZhL2xhbmcvT2JqZWN0O0wABnRhcmdldHEAfgAjeHBzcgA1Y29tLmljb25zb2x1dGlvbnMuaXBmLmNvcmUuZmxvdy5ncmFwaC5GbG93R3JhcGhWZXJ0ZXj/JVqP2n1+uAIAAkwABG5hbWVxAH4AGEwABHR5cGV0ADxMY29tL2ljb25zb2x1dGlvbnMvaXBmL2NvcmUvZmxvdy9ncmFwaC9GbG93R3JhcGhWZXJ0ZXgkVHlwZTt4cHQAB0luaXRpYWx+cgA6Y29tLmljb25zb2x1dGlvbnMuaXBmLmNvcmUuZmxvdy5ncmFwaC5GbG93R3JhcGhWZXJ0ZXgkVHlwZQAAAAAAAAAAEgAAeHEAfgAedAAFU3RhdGVzcQB+ACV0ABJEdXBsaWNhdGUgQ2hlY2tpbmdxAH4AKj/wAAAAAAAAc3EAfgAXcHQAJGM3ZmEyZjViLWM4NDQtNDcwMC05NjA2LTcxZDI1ZWMzZDA4M3QAFkR1cGxpY2F0ZSBDaGVjayBQYXNzZWRxAH4AH3NxAH4AIXNxAH4AJXEAfgAtcQB+ACpzcQB+ACV0ABJWYWxpZGF0aW5nIEFjY291bnRxAH4AKj/wAAAAAAAAc3EAfgAXcHQAJDQxYzQxZGUxLWQ4ODItNDUyNC04OWU0LThkZTgwNGIzMzg2MXQAFkR1cGxpY2F0ZSBDaGVjayBGYWlsZWRxAH4AH3NxAH4AIXNxAH4AJXEAfgAtcQB+ACpzcQB+ACV0AAhSZWplY3RlZH5xAH4AKXQADVRlcm1pbmFsU3RhdGU/8AAAAAAAAHNxAH4AF3B0ACRmNmQ4NDg2My05NGJmLTRjZDItOTBiOC1kYzlhOTY5NzJhMGF0ABlBY2NvdW50IFZhbGlkYXRpb24gUGFzc2VkcQB+AB9zcQB+ACFzcQB+ACVxAH4ANHEAfgAqc3EAfgAldAAPUnVuIEZyYXVkIENoZWNrcQB+ACo/8AAAAAAAAHNxAH4AF3B0ACQwNjJkYjdlOC1jZDRkLTRjZmQtYjhiZC0xNTdlNWY5YTEyZTR0AAB+cQB+AB10AAtQYXNzVGhyb3VnaHNxAH4AIXNxAH4AJXEAfgBEcQB+ACpzcQB+ACVxAH4ARH5xAH4AKXQACERlY2lzaW9uP/AAAAAAAABzcQB+ABdwdAAkNzMzMjc5OGMtZDhjZS00NDRlLWE3MjctNDQxMmQ3OTY3MDc3dAAeUnVuIEZyYXVkIENoZWNrIEZSQVVEX1JFUVVJUkVEcQB+AB9zcQB+ACFzcQB+ACVxAH4ARHEAfgBNc3EAfgAldAAOQ2hlY2tpbmcgRnJhdWRxAH4AKj/wAAAAAAAAc3EAfgAXcHQAJDBiODYzMzEzLTE2NGQtNDkwMS05Njk2LTkzMjE2YmNjNDg3OHQAGlJ1biBGcmF1ZCBDaGVjayBTS0lQX0ZSQVVEcQB+AB9zcQB+ACFzcQB+ACVxAH4ARHEAfgBNc3EAfgAldAAIQ29tcGxldGVxAH4APD/wAAAAAAAAc3EAfgAXcHQAJGZhMmY3NDM4LWUzYzAtNDk0Yy1iNDE5LTMyY2I1NGViMTdhZHQAGUFjY291bnQgVmFsaWRhdGlvbiBGYWlsZWRxAH4AH3NxAH4AIXNxAH4AJXEAfgA0cQB+ACpzcQB+ACVxAH4AO3EAfgA8P/AAAAAAAABzcQB+ABdwdAAkODk3ODFiY2UtMGFlMi00MGIxLTlmN2EtYTdhZWFjOGExOGQ5dAARQWNjb3VudCBOb3QgRm91bmRxAH4AH3NxAH4AIXNxAH4AJXEAfgA0cQB+ACpzcQB+ACVxAH4AO3EAfgA8P/AAAAAAAABzcQB+ABdwdAAkMGUxYzYzNmQtMjRhYy00OGQ2LWEwMjMtMGY3MGM1MmM2MDMydAASRnJhdWQgQ2hlY2sgUGFzc2VkcQB+AB9zcQB+ACFzcQB+ACVxAH4AVXEAfgAqc3EAfgAlcQB+AFxxAH4APD/wAAAAAAAAc3EAfgAXcHQAJDRjNTkwYmIyLTQyNWUtNDhlMS1iNjM5LWZiZTU5OTM4MjYyMHQAEkZyYXVkIENoZWNrIEZhaWxlZHEAfgAfc3EAfgAhc3EAfgAlcQB+AFVxAH4AKnNxAH4AJXEAfgA7cQB+ADw/8AAAAAAAAHNxAH4AF3B0ACRmOWMxNzVjMS0xYTI3LTQwZGUtOGY3ZS1lMzgxZDZlNTU1ZTh0ABxDaGVja0ZyYXVkQWN0aW9uVGltZW91dEV2ZW50cQB+AB9zcQB+ACFzcQB+ACVxAH4AVXEAfgAqc3EAfgAldAAJVGltZWQgT3V0cQB+ADw/8AAAAAAAAHgAc3IAN29yZy5qZ3JhcGh0LmdyYXBoLnNwZWNpZmljcy5GYXN0TG9va3VwRGlyZWN0ZWRTcGVjaWZpY3M4v1lVIW8eFwIAAUwAGXRvdWNoaW5nVmVydGljZXNUb0VkZ2VNYXBxAH4AEnhyAC1vcmcuamdyYXBodC5ncmFwaC5zcGVjaWZpY3MuRGlyZWN0ZWRTcGVjaWZpY3NSx0ECUR67UwIAA0wADmVkZ2VTZXRGYWN0b3J5dAAiTG9yZy9qZ3JhcGh0L2dyYXBoL0VkZ2VTZXRGYWN0b3J5O0wABWdyYXBocQB+AAFMAAl2ZXJ0ZXhNYXBxAH4AEnhwc3IAPG9yZy5qZ3JhcGh0LmdyYXBoLnNwZWNpZmljcy5BcnJheVVuZW5mb3JjZWRTZXRFZGdlU2V0RmFjdG9yeVJkHazxcOrhAgAAeHBxAH4AC3NxAH4AFD9AAAAAAAAMdwgAAAAQAAAACnNxAH4AJXEAfgAocQB+ACpz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",
    "fullGraph" : "rO0ABXNyADdjb20uaWNvbnNvbHV0aW9ucy5pcGYuY29yZS5mbG93LmdyYXBoLlNlcmlhbGl6YWJsZUdyYXBomSwtqEQKN9MCAAFMAAVncmFwaHQAE0xvcmcvamdyYXBodC9HcmFwaDt4cHNyAC1vcmcuamdyYXBodC5ncmFwaC5EaXJlY3RlZFdlaWdodGVkUHNldWRvZ3JhcGi9utVw72YX1QIAAHhyACVvcmcuamdyYXBodC5ncmFwaC5EaXJlY3RlZFBzZXVkb2dyYXBomHRRs4CysX8CAAB4cgAjb3JnLmpncmFwaHQuZ3JhcGguQWJzdHJhY3RCYXNlR3JhcGjOSM5wTe/23QIABkwADGVkZ2VTdXBwbGllcnQAHUxqYXZhL3V0aWwvZnVuY3Rpb24vU3VwcGxpZXI7TAAWZ3JhcGhTcGVjaWZpY3NTdHJhdGVneXQAKkxvcmcvamdyYXBodC9ncmFwaC9HcmFwaFNwZWNpZmljc1N0cmF0ZWd5O0wAF2ludHJ1c2l2ZUVkZ2VzU3BlY2lmaWNzdAArTG9yZy9qZ3JhcGh0L2dyYXBoL0ludHJ1c2l2ZUVkZ2VzU3BlY2lmaWNzO0wACXNwZWNpZmljc3QAJ0xvcmcvamdyYXBodC9ncmFwaC9zcGVjaWZpY3MvU3BlY2lmaWNzO0wABHR5cGV0ABdMb3JnL2pncmFwaHQvR3JhcGhUeXBlO0wADnZlcnRleFN1cHBsaWVycQB+AAZ4cHNyADpjb20uaWNvbnNvbHV0aW9ucy5pcGYuY29yZS5mbG93LmdyYXBoLkRlZmF1bHRGbG93R3JhcGhFZGdlQk439CdjAN8CAAB4cHNyADJvcmcuamdyYXBodC5ncmFwaC5GYXN0TG9va3VwR3JhcGhTcGVjaWZpY3NTdHJhdGVnebPMgvHiXDU4AgAAeHBzcgAxb3JnLmpncmFwaHQuZ3JhcGguV2VpZ2h0ZWRJbnRydXNpdmVFZGdlc1NwZWNpZmljc0nuHGHO9d4KAgAAeHIALW9yZy5qZ3JhcGh0LmdyYXBoLkJhc2VJbnRydXNpdmVFZGdlc1NwZWNpZmljc//lXF1igq2rAgABTAAHZWRnZU1hcHQAD0xqYXZhL3V0aWwvTWFwO3hwc3IAF2phdmEudXRpbC5MaW5rZWRIYXNoTWFwNMBOXBBswPsCAAFaAAthY2Nlc3NPcmRlcnhyABFqYXZhLnV0aWwuSGFzaE1hcAUH2sHDFmDRAwACRgAKbG9hZEZhY3RvckkACXRocmVzaG9sZHhwP0AAAAAAABh3CAAAACAAAAAQc3IAM2NvbS5pY29uc29sdXRpb25zLmlwZi5jb3JlLmZsb3cuZ3JhcGguRmxvd0dyYXBoRWRnZQUYqIey1KBMAgAETAAEY29kZXQAEkxqYXZhL2xhbmcvU3RyaW5nO0wAAmlkcQB+ABhMAAVsYWJlbHEAfgAYTAAEdHlwZXQAOkxjb20vaWNvbnNvbHV0aW9ucy9pcGYvY29yZS9mbG93L2dyYXBoL0Zsb3dHcmFwaEVkZ2UkVHlwZTt4cHB0ACQ1NTdhZWNlMy1kOWE0LTRhYjQtODRiMy02MGI5OGRkM2MwNzd0AAB+cgA4Y29tLmljb25zb2x1dGlvbnMuaXBmLmNvcmUuZmxvdy5ncmFwaC5GbG93R3JhcGhFZGdlJFR5cGUAAAAAAAAAABIAAHhyAA5qYXZhLmxhbmcuRW51bQAAAAAAAAAAEgAAeHB0AAtQYXNzVGhyb3VnaHNyACdvcmcuamdyYXBodC5ncmFwaC5JbnRydXNpdmVXZWlnaHRlZEVkZ2UoHT4MVLzhZQIAAUQABndlaWdodHhyAB9vcmcuamdyYXBodC5ncmFwaC5JbnRydXNpdmVFZGdlLTgxOTUyMjcCAAJMAAZzb3VyY2V0ABJMamF2YS9sYW5nL09iamVjdDtMAAZ0YXJnZXRxAH4AI3hwc3IANWNvbS5pY29uc29sdXRpb25zLmlwZi5jb3JlLmZsb3cuZ3JhcGguRmxvd0dyYXBoVmVydGV4/yVaj9p9frgCAAJMAARuYW1lcQB+ABhMAAR0eXBldAA8TGNvbS9pY29uc29sdXRpb25zL2lwZi9jb3JlL2Zsb3cvZ3JhcGgvRmxvd0dyYXBoVmVydGV4JFR5cGU7eHB0ABJEdXBsaWNhdGUgQ2hlY2tpbmd+cgA6Y29tLmljb25zb2x1dGlvbnMuaXBmLmNvcmUuZmxvdy5ncmFwaC5GbG93R3JhcGhWZXJ0ZXgkVHlwZQAAAAAAAAAAEgAAeHEAfgAedAAFU3RhdGVzcQB+ACV0AA9EdXBsaWNhdGUgQ2hlY2t+cQB+ACl0AAdSZXF1ZXN0P/AAAAAA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MjQzYzdjdAAcQ2hlY2tGcmF1ZEFjdGlvblRpbWVvdXRFdmVudHEAfgAzc3EAfgAhc3EAfgAlcQB+AGVxAH4AKnNxAH4AJXQACVRpbWVkIE91dHEAfgAqP/AAAAAAAAB4AHNyADdvcmcuamdyYXBodC5ncmFwaC5zcGVjaWZpY3MuRmFzdExvb2t1cERpcmVjdGVkU3BlY2lmaWNzOL9ZVSFvHhcCAAFMABl0b3VjaGluZ1ZlcnRpY2VzVG9FZGdlTWFwcQB+ABJ4cgAtb3JnLmpncmFwaHQuZ3JhcGguc3BlY2lmaWNzLkRpcmVjdGVkU3BlY2lmaWNzUsdBAlEeu1MCAANMAA5lZGdlU2V0RmFjdG9yeXQAIkxvcmcvamdyYXBodC9ncmFwaC9FZGdlU2V0RmFjdG9yeTtMAAVncmFwaHEAfgABTAAJdmVydGV4TWFwcQB+ABJ4cHNyADxvcmcuamdyYXBodC5ncmFwaC5zcGVjaWZpY3MuQXJyYXlVbmVuZm9yY2VkU2V0RWRnZVNldEZhY3RvcnlSZB2s8XDq4QIAAHhwcQB+AAtzcQB+ABQ/QAAAAAAAGHcIAAAAIAAAAA5zcQB+ACVxAH4AN3EAfgAqc3IAMW9yZy5qZ3JhcGh0LmdyYXBoLnNwZWNpZmljcy5EaXJlY3RlZEVkZ2VDb250YWluZXJoAOWdxXLOwgIAAkwACGluY29taW5ndAAPTGphdmEvdXRpbC9TZXQ7TAAIb3V0Z29pbmdxAH4AoXhwc3IAI29yZy5qZ3JhcGh0LnV0aWwuQXJyYXlVbmVuZm9yY2VkU2V0mR7YQWZ1cNoCAAB4cgATamF2YS51dGlsLkFycmF5TGlzdHiB0h2Zx2GdAwABSQAEc2l6ZXhwAAAAAXcEAAAAAXEAfgA5eHNxAH4AowAAAAF3BAAAAAFxAH4AMHhzcQB+ACV0AAdBYm9ydGVkcQB+ACpzcQB+AKBzcQB+AKMAAAAAdwQAAAAAeHNxAH4AowAAAAB3BAAAAAB4c3EAfgAlcQB+AGxxAH4AKnNxAH4AoHNxAH4AowAAAAJ3BAAAAAJxAH4AZnEAfgB/eHNxAH4AowAAAAB3BAAAAAB4c3EAfgAlcQB+AChxAH4AKnNxAH4AoHNxAH4AowAAAAF3BAAAAAFxAH4AMHhzcQB+AKMAAAABdwQAAAABcQB+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",
    "content" : "FlowDescriptor(name=Ipftutorialflow, version=1, id=IpftutorialflowV1, hash=-756900467, model=Ipftutorialmodel, basicGraph=com.iconsolutions.ipf.core.flow.graph.SerializableGraph@17c48692, fullGraph=com.iconsolutions.ipf.core.flow.graph.SerializableGraph@e5d1be14, terminalStates=null)",
    "createdAt" : "2023-02-06T10:07:26.570+0000",
    "_class" : "com.iconsolutions.ipf.processingdata.process.ProcessFlowDefinition"
  },
  "objectType" : "PROCESS_FLOW_DEFINITION",
  "createdAt" : "2023-02-06T10:07:26.570+0000",
  "unitOfWorkId" : "UNKNOWN",
  "clientRequestId" : "UNKNOWN",
  "processingEntity" : "UNKNOWN",
  "source" : "ipf-flow",
  "_class" : "com.iconsolutions.ipf.ods.persistence.mongo.process.ProcessFlowDefinitionEntry"
}

Indexes

Index Name Fields Options

id

_id

unique

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)

unitOfWork_1_idempotencyKey_1

unitOfWorkId (ascending) idempotencyKey (ascending)

unique

Custom Objects

Collection Name: customObjects

Stores custom objects that have been captured during payment processing in a similar way to the payments' collection, but reserved for data that is client specific. Custom objects are append-only with unique constraint on unitOfWork and idempotencyKey/objectIdentifier.

Below are the fields for the CustomObject.

Fields

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

Example Record

{
  "_id" : "63e2606d5adf920229505f06",
  "idempotencyKey" : "7afec0ea-66e7-40d6-8492-3f5c811118ea|InitiationFlow|64a259e5-501c-4329-be9f-4602389f87b7|1|ExampleData|0",
  "name" : "ExampleData",
  "content" : {
    "stringField" : "Test",
    "intField" : 7
  },
  "objectType" : "COMPLEX_TYPE",
  "createdAt" : "2023-02-07T14:30:04.003+0000",
  "associationId" : "InitiationFlow|64a259e5-501c-4329-be9f-4602389f87b7",
  "unitOfWorkId" : "7afec0ea-66e7-40d6-8492-3f5c811118ea",
  "clientRequestId" : "df2e3f10-943c-4f12-8572-85b17740d9ce",
  "processingEntity" : "UNKNOWN",
  "primaryAssociation" : "InitiationFlow|f0a9684a-467e-4e60-9e6e-efe00a860305",
  "processObjectReference" : "InitiationFlow|f0a9684a-467e-4e60-9e6e-efe00a860305|1",
  "source" : "ipf-flow",
  "_class" : "com.iconsolutions.ipf.ods.persistence.mongo.custom.CustomEntry"
}

Indexes

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)

Summaries

Collection Name: summaries

Stores a single record for a given payment across its lifespan. Serves as the "spine" of information aggregated from various data emission from IPF for a given unitOfWork, as associated by the Processing Context.

Fields

Below are the fields for the summaries object. These are properties that are common candidates for inquiry searches, most of the properties are implemented as value and lastSequenceNumber pairs. This is to ensure the summary captures the "latest" data values as events from different services which may arrive out of order.

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

Below are the fields related to the searchFields subObject of the summary. Pretty much all fields are currently being extracted into the searchFields Block

Field Description Example

searchFields.acceptanceDateTime

searchFields.batchBooking

searchFields.cancellationId

searchFields.controlSum

searchFields.creditAccount

searchFields.creditAmount

searchFields.creditAmountCurrency

searchFields.creditorAccount

gb24adkgjwyyhujwrobfjpgdhgtiki

searchFields.creditorAgentBIC

icongba1

searchFields.creditorBIC

icongbl0

searchFields.creditorName

adam white

searchFields.debitAccount

searchFields.debitAmount

searchFields.debitAmountCurrency

searchFields.debtorAccount

gb74fbnfuhqjrnhbrhmxgbzcgivrdy

searchFields.debtorAgentBIC

icongba1

searchFields.debtorBIC

icongbm0

searchFields.debtorName

isabelle mitchell

searchFields.instructedAgent

searchFields.instructedAmount

7.16

searchFields.instructedAmountCurrency

USD

searchFields.instructedParty

searchFields.instructingAgent

searchFields.instructingParty

searchFields.instructionId

searchFields.interbankSettlementDate

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

searchFields.messageId

searchFields.originalEndToEndId

searchFields.originalInterbankSettlementDate

searchFields.originalMessageId

searchFields.paymentInformationId

searchFields.reasonCode

searchFields.reasonText

searchFields.requestedExecutionDate

searchFields.returnId

searchFields.returnedAmount

searchFields.returnedAmountCurrency

searchFields.transactionAmount

7.16

searchFields.transactionAmountCurrency

USD

searchFields.transactionId

searchFields.uetr

Indexes

Below are the indexes for the summaries collection

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

Example Record

Below is an example Summary record for a Payment

{
  "_id" : "63e2288cbdb3835de45e3619",
  "journeyType" : "PAYMENT",
  "unitOfWorkId" : "7515b096-b126-4e01-a732-c28d1b5f0ea6",
  "archivedAt" : "2023-02-07T10:31:36.718+0000",
  "instructionReceivedAt" : {
    "value" : "2023-02-07T10:31:36.718+0000",
    "lastSequenceNumber" : 1
  },
  "searchFields" : {
    "debtorAccount" : "gb74fbnfuhqjrnhbrhmxgbzcgivrdy",
    "creditorName" : "adam white",
    "debtorName" : "isabelle mitchell",
    "instructedAmountCurrency" : "USD",
    "transactionAmountCurrency" : "USD",
    "creditorBIC" : "icongbl0",
    "debtorBIC" : "icongbm0",
    "creditorAccount" : "gb24adkgjwyyhujwrobfjpgdhgtiki",
    "transactionAmount" : 7.16,
    "instructedAmount" : 7.16,
    "creditorAgentBIC" : "icongba1",
    "debtorAgentBIC" : "icongba1",
    "interbankSettlementDate" : "2023-02-07T00:00:00.000+0000"
  },
  "alternativeIds" : [
    {
      "name": "CLIENT_REQUEST_ID",
      "value": "client-request-id-x18kl2k5ot"
    },
    {
      "name": "alternative-identifier-name",
      "value": "alternative-identifier-value"
    }
  ],
  "_class" : "com.iconsolutions.ipf.ods.summary.Summary",
  "lastUpdated" : "2023-02-07T10:31:36.718+0000",
  "startedAt" : {
    "value" : "2023-02-07T10:31:36.718+0000",
    "lastSequenceNumber" : 1
  },
  "debtorAccount" : {
    "value" : "GB74FBNFUHQJRNHBRHMXGBZCGIVRDY",
    "lastSequenceNumber" : 2
  },
  "debtorAgentBIC" : {
    "value" : "ICONGBA1",
    "lastSequenceNumber" : 2
  },
  "debtorBIC" : {
    "value" : "ICONGBM0",
    "lastSequenceNumber" : 2
  },
  "debtorName" : {
    "value" : "Isabelle Mitchell",
    "lastSequenceNumber" : 2
  },
  "creditorAccount" : {
    "value" : "GB24ADKGJWYYHUJWROBFJPGDHGTIKI",
    "lastSequenceNumber" : 2
  },
  "creditorAgentBIC" : {
    "value" : "ICONGBA1",
    "lastSequenceNumber" : 2
  },
  "creditorBIC" : {
    "value" : "ICONGBL0",
    "lastSequenceNumber" : 2
  },
  "creditorName" : {
    "value" : "Adam White",
    "lastSequenceNumber" : 2
  },
  "instructedAmount" : {
    "value" : 7.16,
    "lastSequenceNumber" : 1
  },
  "instructedAmountCurrency" : {
    "value" : "USD",
    "lastSequenceNumber" : 1
  },
  "executionStartedAt" : {
    "value" : "2023-02-07T10:31:37.351+0000",
    "lastSequenceNumber" : 2
  },
  "globalStatus" : {
    "value" : "ACCEPTED",
    "lastSequenceNumber" : 9
  },
  "interbankSettlementDate" : {
    "value" : "2023-02-07T00:00:00.000+0000",
    "lastSequenceNumber" : 2
  },
  "transactionAmount" : {
    "value" : 7.16,
    "lastSequenceNumber" : 2
  },
  "transactionAmountCurrency" : {
    "value" : "USD",
    "lastSequenceNumber" : 2
  }
}

UnitOfWorks

Collection Name: unitOfWorks

Stores a single record for a given unitOfWork across its lifespan. Serves as meta-data for a unitOfWork, as associated by the Processing Context. Used to identify the start and end of a given unitOfWork, and to identify the associated data for that unitOfWork.

Fields

Below are the fields for the unitOfWork object. These are used to track when a unitOfWork began processing within IPF and when a unitOfWork reached a terminal state.

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

Indexes

Below are the indexes for the unitOfWorks collection

Index Name Fields Options

id

_id

unique

unitOfWorkId_1

unitOfWorkId (ascending)

unique

startedAt_1

startedAt (ascending)

finishedAt_1

finishedAt (ascending)

Example Record

Below is an example UnitOfWork record for a Payment

{
  "_id" : "65323a0e8a93a9487f8046d5",
  "unitOfWorkId" : "6af46e3f-e026-4587-87f8-b7fe1ebc2280",
  "journeyType": "PAYMENT",
  "startedAt" : "2023-10-20T08:27:55.320+0000",
  "finishedAt" : "2023-10-20T08:27:55.925+0000"
}

Purge Reports

Collection Name: purgeReports

Stores purge report objects that are created and updated throughout ODS-Purging. An individual report will contain details on the execution date, configuration settings used to purge, number of Summaries purged, and the time taken to purge. Purge Reports are not associated to other collections.

Fields

Below are the fields for the PurgeReport object.

Field Description Example

executionDate

The date which this purge was executed. This will be unique for each PurgeReport

2021-05-17T00:00:00.000Z

retentionPeriod

The configured retentionPeriod for this purge execution

P2Y

retentionPeriodLowerBound

The date-time lower bound for the retention period. A unit-of-work-id passes one of the criteria to be purged if its Summary.lastUpdated date-time is less than the retentionPeriodLowerBound

2021-05-17T00:00:00.000Z

terminalUnitOfWorksOnly

The configured terminal-unit-of-works-only flag for this purge execution. If configured to true only unit-of-work-ids that have reached a terminal global status will be eligible for purging

false

archivedDependentJourneyTypes

The configured archived-dependent-journey-types for this purge execution. Unit of works with journey types defined in this config must be archived before being eligible for purging

[PAYMENT, RECALL]

unitOfWorksToDelete

The number of Summary documents that have been identified as outside the retention period and should be deleted during this purge execution

1234567

unitOfWorksDeleted

The number of Summary documents that have actually been deleted. This value is incremented as the purge is ongoing

1234567

startedAt

The date-time at which purging began for this execution date (will nearly always be the start of the day)

2023-05-17T00:00:02.170Z

finishedAt

The date-time at which all the data that should be deleted for a given execution date has been deleted

2023-05-17T00:32:03.180Z

duration

The duration of time taken to complete a purge. Calculated by comparing the startedAt and finishedAt fields

PT32M1.01S

Indexes

Below are the indexes for the purgeReports collection

Index Name Fields Options

id

_id

unique

executionDate_1

executionDate (ascending)

unique

Example Record

{
  "_id": "64660536a311867424e4b049",
  "executionDate": "2023-05-17T00:00:00.000+0000",
  "retentionPeriod": "P2Y",
  "retentionPeriodLowerBound": "2021-05-17T00:00:00.000+0000",
  "terminalUnitOfWorksOnly" : true,
  "startedAt": "2023-05-17T11:00:06.850+0000",
  "summariesDeleted": 1234567,
  "summariesToDelete": 1234567,
  "duration": "PT0.13508S",
  "finishedAt": "2023-05-17T11:00:06.985+0000"
}

Expiry Reports

Collection Name: expiryReports

Stores number of unitOfWorks that will expire in n days. (configured through ods.purging.query-unit-of-works-expire-in-days config). It is created for TTL type of purging only when cosmos db is used.

Fields

Below are the fields for the ExpiryReport object.

Field Description Example

expiryDate

The date when given unitOfWorks will expire. This will be unique for each ExpiryReport

2024-05-17T00:00:00.000Z

numberOfUnitOfWorksToExpire

Number of unitOfWorks that will expire in a given days

10

Indexes

Below are the indexes for the expiryReports collection

Index Name Fields Options

id

_id

unique

expiryDate_1

expiryDate (ascending)

unique

Example Record

{
  "_id": "64660536a311867424e4b049",
  "expiryDate": "2024-05-17T00:00:00.000+0000",
  "numberOfUnitOfWorksToExpire": "10"
}

Archive Candidate Selection State

Collection Name: archiverCandidateSelectionState

Stores the state of archive candidate selection.

Contains a single document representing the current candidate selection state.

Fields

Field Description Example

date

The date of the current candidate selection window

2023-12-18

hour

The hour of the current candidate selection window within [0..23]

6

checkpoint

The id of the last candidate seen in the current selection window

624d7fa649f0f4b37093fe30

notificationSequence

The sequence number for the current selection window - incremented on each execution - resets to 1 when the window changes

1

Indexes

None

Example Record

{
  "_id": "64660536a311867424e4b049",
  "date": "2023-05-17",
  "hour": "13",
  "checkpoint": "624d7fa649f0f4b37093fe30",
  "notificationSequence" : 9
}