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.
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.terminalGlobalStates |
A List of GlobalStates that have been assigned as terminal within the MPS flow implementation |
[ Completed, Failed ] |
content.states |
Metadata for all State Definitions implemented within the MPS flow definition |
[ { name : Initial, labels : [ CRITICAL_PATH_START, CLIENT_SPECIFIC_LABEL ] } ] |
content.events |
Metadata for all Event Definitions implemented within the MPS flow definition |
[ { name : Payment Initiation Started, labels : [ MY_CUSTOM_LABEL ] } ] |
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)",
"terminalGlobalStates" : [ "Completed", "Failed" ],
"states" : [
{
"name" : "Initial",
"labels" : [ "CRITICAL_PATH_START", "CLIENT_SPECIFIC_LABEL" ]
},
{
"name" : "Executing"
},
{
"name" : "Complete",
"labels" : [ "CRITICAL_PATH_END" ]
}
],
"events" : [
{
"name" : "Payment Initiation Started"
},
{
"name" : "Payment Complete",
"labels" : [ "CLIENT_SPECIFIC_LABEL" ]
}
],
"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 |
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 |
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 |
2021-05-17T00:00:00.000Z |
terminalUnitOfWorksOnly |
The configured |
false |
archivedDependentJourneyTypes |
The configured |
[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 |
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 |
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 |
|
hour |
The hour of the current candidate selection window within [0..23] |
|
checkpoint |
The id of the last candidate seen in the current selection window |
|
notificationSequence |
The sequence number for the current selection window - incremented on each execution - resets to |
1 |