Agregando Información de Pago

La información de pago (detalles de iniciación, instrucción y transacción) se almacena inicialmente mediante un flujo de procesamiento. Cualquier cancelación/cambio posterior de los detalles de pago no actualizará la entrada original, sino que, en su lugar, insertará una nueva con los detalles actualizados. Esto significa que el almacenamiento no retiene una versión singular de una entrada de información de pago actualizada, con todos los ajustes aplicados. La fusión de información relacionada se realiza en el lado de lectura, al recuperar la información de pago almacenada.

La implementación de la fuente de datos de pago es responsable de aplicar cualquier ajuste adicional que se realice a la información de pago almacenada inicialmente.

Agregación de información de la fuente de datos del almacén de pagos

La implementación del origen de datos de pago predeterminado lee los datos del Almacén de Pagos. Para observar cómo funciona la fusión, podemos utilizar un ejemplo de Entrada de Pago por Instrucción.

Cuando un flujo de procesamiento almacena inicialmente detalles sobre una Instrucción de Pago, creará un PaymentEntry objeto y almacenarlo en el Almacén.

{
"_id": "BatchInitiation|6e6cf57a-7201-43db-b9db-a8c33e3a0b19|0",
"unitOfWorkId": "f4c5d646-fe8e-4586-bf32-496ce8814344",
"relatedUnitOfWork": "63051ca7-3592-40b1-a5d2-b7e69e602b8d",
"clientRequestId": "ac541cde-00fc-427f-be5f-23c2f091718e-filehappy",
"associationId": "BatchInitiation|6e6cf57a-7201-43db-b9db-a8c33e3a0b19",
"processingEntity": "BANK_ENTITY_1",
"sequence": 0,
"globalState": "PENDING",
"type": BULK
"data": [
{
"objectId": "5945909f-0cfc-43f8-a28d-b92d1823e6a9",
"parentObjectId": "2c235f35-b6b2-414a-a298-caf86f1e4e45",
"name": "Pain001Instruction",
"category": "MDS",
"contentType": "com.iconsolutions.iso20022.message.components.payment_instruction.payment_instruction30. PaymentInstruction30",
"content": "{....}"
}
],
"_class": "com.iconsolutions.ipf.warehouse.port.mongo.repository. MongoPaymentEntry"
}

Cualquier cambio posterior (ajuste de datos o cancelación) resultará en el almacenamiento de un adicional PaymentEntry objeto, que tendrá el idéntico unitOfWorkId valor como el inicial PaymentEntry objeto, y su valor de secuencia se incrementará en uno.

{
"_id": "BatchInitiation|6e6cf57a-7201-43db-b9db-a8c33e3a0b19|1",
"unitOfWorkId": "f4c5d646-fe8e-4586-bf32-496ce8814344",
....
"sequence": 1,
"globalState": "CANCELLED"
}

PaymentWarehouseDataSource`encapsula la lógica para aplicar instrucciones adicionales `PaymentEntry ajustes en una interfaz funcional definida como: Function<List<PaymentEntry>, PaymentWarehouseInstruction> instructionAggregatorFunction

De manera similar, también existen interfaces funcionales para la agregación de información de Iniciación y Transacción:

  • Function<List<PaymentEntry>, PaymentWarehouseInitiation> initationAggregatorFunction, y

  • Function<List<PaymentEntry>, PaymentWarehouseTransaction> transactionAggregatorFunction