Pasos de Migración para IPF-2025.2.0
Migración para Conectores
Cualquier clase que previamente haya implementado com.iconsolutions.ipf.core.connector.receive.deadletter.DeadletterAppender tendrá un fallo de compilación. Para solucionarlo, cambie el tipo de retorno del método append de CompletableFuture<Void> a CompletionStage<Void>.
Migración para Conectores Kafka
akka.kafka.consumer.restart-settings ahora se define por defecto en ipf.connector.default-transport-settings.restart-settings.
Dado que todos los ajustes de consumidor Kafka ahora heredan de esta configuración por defecto, ya no es necesario especificar restart-settings al declarar un transporte de consumidor Kafka.
Si antes configuraba sus restart-settings a akka.kafka.consumer.health-check-settings.restart-settings o ipf.connector.default-transport-settings.restart-settings, ahora puede eliminar esas líneas de su HOCON.
Migración para Conectores HTTP
Las excepciones internas com.iconsolutions.ipf.core.connector.transport.HttpErrors.HttpStatusErrorException ahora tienen encapsulación más estricta y sus constructores ya no son accesibles públicamente.
Si necesita crear una instancia para pruebas, utilice com.iconsolutions.ipf.core.connector.transport.HttpErrors#from(StatusCode,TransportMessage).
Migración para Bulker
Se recomienda descontinuar el uso de las siguientes dependencias:
-
ipf-bulker-output-stream-api
-
ipf-bulker-output-stream-local
-
ipf-bulker-output-stream-s3
ipf-file-manager ahora proporciona funcionalidad equivalente mediante un nuevo método write que acepta reactor.core.publisher.Flux<ByteBuffer>. También se añadió un método para leer contenido de archivo a reactor.core.publisher.Flux<ByteBuffer>. Para más detalles, consulte Referencia de API de File Manager.
Elimine los siguientes parámetros de configuración si están definidos en su configuración:
ipf.bulker.outputstream.local.enabled
ipf.bulker.outputstream.s3.enabled
Anteriormente, configurar el sistema de archivos de salida requería deshabilitar el que no se usaba. Ahora se simplifica con una sola propiedad ipf.bulker.output.file-system que permite especificar explícitamente el sistema de archivos destino.
Vea Bulk Productor para detalles adicionales
Migración para Programador Persistente de IPF
API HTTP
El campo triggerCommand en el cuerpo de solicitud de los endpoints POST /api/v1/schedule-job y POST /api/v1/update-job, así como en las respuestas de las cuatro operaciones de la API HTTP, ha cambiado.
Antes era un modelo API de SchedulingCommand con un campo @class, ahora es un modelo API de ExternalTriggerCommand.
Este modelo ya no tiene el campo @class y tiene campos adicionales necesarios para programar la liberación de pagos.
SchedulerConnectorInterface
Si usa SchedulerConnectorInterface para interactuar con los HTTP RequestReplySendConnectors en el artefacto scheduler-client-connector-http, deberá migrar los modelos pasados como argumentos de métodos y tipos de retorno.
Los modelos ahora provienen de la especificación de la API HTTP en lugar de modelos 'core'.
Migración para IPF Scheduler Floclient
Comandos del Scheduler FloClient
Si previamente usaba PaymentAsyncScheduleCompletedCommand de los comandos del Scheduler Floclient, ahora debe usar SchedulePaymentReleaseCommand.
Esto extiende ExternalTriggerCommand de los modelos de la API HTTP, que a su vez implementa la interfaz existente SchedulingCommand.
Los campos priority y scheduleDate ya no se incluyen en el objeto PaymentAsyncScheduleCompletedCommand (refactorizado a SchedulePaymentReleaseCommand).
Estos campos estaban, y siguen, sin ser usados por la API del Scheduler, Floclient y Core.
Dominio Externo del Programador Persistente de IPF
El dominio externo IPF Persistent Scheduler solicita Schedule Instruction Release y Schedule Transaction Release ahora pueden devolver las respuestas Scheduled Instruction Release Completion y Scheduled Transaction Release Completion respectivamente.
Estas nuevas respuestas son notificaciones de que la liberación programada de la instrucción/transacción ha sido disparada para ejecución.
Estas respuestas difieren de las existentes Scheduled Instruction Release Response y Scheduled Transaction Release Response, que informan que la liberación ha sido programada (pero no disparada para ejecución).
Estos nuevos comandos se conectan automáticamente si usa el módulo scheduler-external-trigger-kafka en su aplicación del Scheduler (descrito en release/IPF-2025-2-0/release-IPF-2025-2-0-core.adoc#_ipf_persistent_scheduler_added).
Si no usa el módulo scheduler-external-trigger-kafka, puede emitir estas respuestas modificando sus implementaciones existentes de SchedulingHelper para llamar al método IPFPaymentSchedulerInputPort.handle(ScheduledInstructionReleaseCompletionInput scheduledInstructionReleaseCompletion) (o equivalente de transacción) en el método execute.
Migración para Payment Releaser (Procesador de Entradas de Pago)
Refactorización de Payment Releaser a Procesador Genérico de Entradas de Pago
La implementación de liberación existente debe realizar los siguientes ajustes para que funcione con el nuevo procesador genérico:
Cambios de configuración
-
La ruta raíz de configuración debe cambiar de
ipf.core.payment-releaseraipf.core.payment-entry-processor -
El procesador de Entradas de Pago ahora usa una nueva colección de base de datos
executionInfos, requiriendo un nuevo índice compuestounitOfWorkId_1_actionType_1. La colecciónreleaseExecutionInfosya no se usa y puede eliminarse, a menos que sus contenidos se requieran para datos históricos; en ese caso puede archivarse antes de eliminar.
Renombrado de referencias
-
Todas las referencias a
PaymentReleaserdeben reemplazarse porPaymentEntriesProcessor -
Todas las referencias a
ReleaserExecutordeben reemplazarse porInstructionExecutorActor -
Todas las referencias a
PaymentRequestCreatordeben reemplazarse porProcessingRequestCreator -
Todas las referencias a
PaymentRequestSenderdeben reemplazarse porRequestProcessor -
Todas las referencias a
ReleaserStoredeben reemplazarse porExecutionInfoStore -
Todas las referencias a
TransactionReleaseServicedeben reemplazarse porPaymentEntriesProcessingService -
Todas las referencias a
ReleaserExecutorPropertiesdeben reemplazarse porPaymentEntryProcessorProperties -
Todas las referencias a
InstructionReleaseCompletionServicedeben reemplazarse porInstructionProcessingCompletionService
Cambios en definición de beans
La definición del bean TransactionReleaserService debe sustituirse por un bean PaymentEntriesProcessingServiceImpl. Esta clase ahora depende de processingStrategyProvider — este bean ya se define en el core de PaymentEntriesProcessor, solo debe cablearse aquí.
Implementación de la estrategia de procesamiento
Debe crear una implementación de la interfaz ProcessingStrategy y registrarla como bean. Su implementación debe usar el tipo de acción ProcessingActionTypes.RELEASE para especificar acción de liberación, y devolver sus implementaciones existentes de ProcessingRequestCreator y RequestProcessor. Para más detalles sobre Estrategias de Procesamiento, consulte Documentación de Estrategia de Procesamiento.
Añadiendo SupportingContext a processInstruction y processTransaction
En toda la interfaz PaymentEntriesProcessor (renombrada de PaymentReleaser), PaymentReleaserController y las interfaces ClientPort (por ejemplo ReleaseInstructionClientPort) y sus conectores HTTP Send implementados (por ejemplo ReleaseInstructionConnector) los métodos processInstruction y processTransaction se actualizan para incluir un SupportingContext.
Estos métodos en estas clases tienen un argumento adicional SupportingContext para pasar datos adicionales desde el servicio llamador al servicio de ejecución destino.
Si no necesita este campo durante la migración puede pasar null o SupportingContext.empty().
En el caso de PaymentReleaserController, está envuelto en un Mono como Mono<SupportingContext>, por lo que puede pasar un Mono.empty() si este campo no se requiere en su migración.
Las opciones anteriores (null o vacío) se manejarán correctamente.
PaymentRequestCreator
Su implementación de la interfaz ProcessingRequestCreator (renombrada de PaymentRequestCreator) ahora incluirá un argumento SupportingContext en el método create.
Esto permite proporcionar datos adicionales al servicio de ejecución destino.
En su migración puede elegir usar o ignorar el SupportingContext proporcionado al crear su solicitud de pago.
Migración para Verificación del Beneficiario (VoP)
API de Gestión de Cuentas
-
Actualice su servicio que implementa esta API para devolver ahora 'RetrievePartyDetailsResponse.names', que ahora es una lista de nombres. Esto reemplaza el campo 'RetrievePartyDetailsResponse.nm'.
Verificación del Beneficiario - Respondedor
-
Anteriormente, los umbrales de coincidencia se definían solo por tipo de cuenta. En esta versión los umbrales deben definirse por entidad de proceso y tipo de cuenta.
Pre 2025.2.0:
ipf.verification-of-payee.responder {
name-match {
thresholds = [
{type: "default", score-lowerbound = 0.40, score-upperbound = 0.90}
{type: "individual", score-lowerbound = 0.85, score-upperbound = 0.95}
{type: "corporate", score-lowerbound = 0.75, score-upperbound = 0.85}
]
}
}
Equivalente Post 2025.2.0:
ipf.verification-of-payee.responder.name-match {
thresholds = [
{
processing-entity: "default", (1)
scorings: [ (2)
{ type: "default", lowerbound = 0.40, upperbound = 0.90 } (3) (4)
{ type: "individual", lowerbound = 0.85, upperbound = 0.95 }
{ type: "corporate", lowerbound = 0.75, upperbound = 0.85 }
]
},
{
processing-entity: "Processing Entity A",
scorings: [
{ type: "default", lowerbound = 0.70, upperbound = 0.80 }
{ type: "individual", lowerbound = 0.75, upperbound = 0.85 }
{ type: "corporate", lowerbound = 0.65, upperbound = 0.75 }
]
}
]
}
| 1 | Debe definirse una entidad de proceso por defecto |
| 2 | Estructura de configuración cambiada para incluir scoring en la jerarquía |
| 3 | score-lowerbound renombrado a lowerbound |
| 4 | score-upperbound renombrado a upperbound |
Verificación del Beneficiario - Solicitante
-
La configuración
ipf.verification-of-payee.requester.scheme-membership-idsse ha eliminado de la jerarquía. Los clientes que sobrescriben valores (por ejemploprocessing-entities) bajo esta ruta deben eliminarscheme-membership-idsde la ruta. -
La entidad de proceso por defecto antes era "". Esto se ha actualizado a
defaulten lugar de cadena vacía, consistente con VoP Respondedor -
El parámetro
rvmdebe especificarse además denamepara la configuración del esquema
Pre 2025.2.0:
ipf.verification-of-payee.requester {
scheme-membership-ids { (1)
schemes = [
{
name: "EPC"
processing-entities = [
{processing-entity-code: "", scheme-membership-id: "ICONUK00XXX"} (2)
{processing-entity-code: "001", scheme-membership-id: "ICONUK01XXX"}
]
}
]
}
}
| 1 | Esto se elimina en 2025.2.0 |
| 2 | "" ha sido reemplazado por default en 2025.2.0 para denotar la entidad de proceso por defecto |
Equivalente Post 2025.2.0:
ipf.verification-of-payee.requester {
schemes = [
{
name: EPC (1)
rvm: FPAD (2)
processing-entities = [
{processing-entity-code: "default", scheme-membership-id: "ICONUK00XXX"} (3)
{processing-entity-code: "001", scheme-membership-id: "ICONUK01XXX"}
]
}
]
}
| 1 | Ahora definido como un Enum en lugar de String |
| 2 | Anteriormente, EPC usando FPAD como RVM se configuraba solo con el parámetro name. Ahora también debe especificarse rvm: FPAD, y se define como un Enum |
| 3 | La entidad de proceso por defecto ahora se identifica como "default" |
Migración para Configuraciones Dinámicas de Procesamiento (DPS)
Como parte de IPF 2025.2, el servicio CSM Reachability se está integrando con la librería DPS V2 (antes estaba integrado con DPS V1).
Las estructuras de registros de configuración dinámica difieren entre DPS V1 y DPS V2. Esto no afecta al payload de la configuración dinámica. Desde el punto de vista de compatibilidad hacia atrás, los registros formateados como DPS V1 y DPS V2 pueden coexistir al mismo tiempo, ya que DPS V2 puede interactuar con registros creados usando DPS V1.
Sin embargo, cuando se trabaja con configuraciones dinámicas de gran volumen, si los registros de la colección siguen el formato DPS V1, esto puede afectar ligeramente al rendimiento. Por esta razón, se recomienda que dichas configuraciones dinámicas en CSM Reachability (por ejemplo, configuraciones dinámicas de datos de industria) se refresquen para seguir el formato DPS V2.
El principal beneficio de esta migración es un mejor rendimiento de consultas de base de datos.
Pasos para la migración
-
Se recomienda que la implementación cliente ingiera archivos FULL a las configuraciones dinámicas de datos de industria después de absorber CSM Reachability integrado con DPS V2:
-
Party Entity Directory (Bank Directory Plus, Bank Master 3.0)
-
IBAN Plus, Exclusion List, IBAN Structure
-
-
El siguiente conjunto de archivos a ingerir en CSM Participant después de absorber CSM Reachability integrado con DPS V2 debe ser FULL:
-
STEP2 CST, RT1, TIPS, SicInst
-
-
Para cada colección DPS verifique si hay datos no actualizados usando el siguiente script
db.[<collection-name>].find({
"_class": {
$regex: "^com.iconsolutions.ipf.dynamicsettings.repository"
}
})
-
Si hay documentos que no se han actualizado, por favor abra un ticket de soporte.
Migración para el Marco de Pruebas
Como resultado de la migración a JUnit 5, si está incluyendo Reglas de JUnit 4 usando la anotación @ClassRule en sus pruebas, o
ejecutando suites de prueba usando la anotación @Suite, por favor migre estas a Extensiones de JUnit Jupiter y Suites,
respectivamente.
La tabla siguiente muestra usos comunes de JUnit 4 en el marco de pruebas y su equivalente en JUnit 5:
| Funcionalidad | Fragmento JUnit 4 del Marco de Pruebas | Equivalente en JUnit 5 |
|---|---|---|
Suites |
|
|
Reglas (Extensiones) |
|
|
NOTA: Puede estar usando otras Reglas de JUnit 4 no listadas arriba. Consulte la documentación de las librerías que usa para sus equivalentes en JUnit 5.