Documentation for a newer release is available. View Latest

Paso 8 - Añadir una decisión

Introducción al paso 8

En este paso introducirás una decisión en el flujo. Normalmente, los eventos se generan como respuesta a una petición; sin embargo, hay ocasiones en las que la aplicación necesita tomar una decisión. Algunos ejemplos incluyen comprobar un límite de pago, la alcanzabilidad de un BIC o, en este escenario, determinar si un pago es 'on us' (entre cuentas del mismo banco).

Si asumes que, en la implementación, existe una comprobación de si el banco del acreedor y el del deudor son el mismo, entonces, si lo son, el pago se procesará como una transferencia libro a libro y no se enviará al CSM.

También añadirás una regla de negocio que indique que se requiere una referencia de reserva de la cuenta deudora al contabilizar un pago en la cuenta del deudor.

Para conseguir esto necesitarás realizar varias acciones:

  • Añadir creditor agent y debtor agent como datos de negocio

  • Actualizar las funciones de mapeo para separar creditor agent y debtor agent del Customer Credit Transfer

  • Ampliar el flujo para incluir un paso de contabilización (booking) y añadir un estado de contabilización

  • Añadir un punto de decisión para decidir si enviar un pago a un CSM o directamente a contabilización

  • Asegurar que los datos de negocio correctos están en la petición de contabilización

Añadir una petición y respuesta de Booking al dominio externo del Debtors Accounting System

En este escenario, el sistema contable del agente deudor realiza la contabilización además de la verificación de cuenta deudora, por lo que necesitas añadir una nueva petición para la contabilización en el dominio externo.

En esta ocasión asumimos que la petición de booking necesita bastante información:

  • La cuenta y BIC a debitar

  • El importe y la divisa a debitar

  • Una referencia de contabilización específica proporcionada cuando la cuenta es verificada

Así que ve al dominio externo 'Debtor Agent’s Accounting System', añade una nueva petición y asegúrate de añadir los datos de negocio correctos requeridos por la petición.

Cuando termines, el dominio externo debería verse así:

step 8 1

Añadir un nuevo estado de Booking

Ahora necesitas añadir un nuevo estado para representar cuándo se está contabilizando la cuenta.

Abre el flujo y añade un nuevo estado 'Booking'. Este no será un estado terminal, por lo que 'Is Terminal' debe ser false.

step 8 2

Añadir dos nuevos eventos de Booked

Antes añadiste la nueva petición de booking. Esta petición tiene dos respuestas (accepted o rejected), y ahora necesitas añadir los nuevos eventos que se disparan con la respuesta:

  • Payment Booked

  • Payment Booking Failed

Una vez añadidos, la sección de definición de eventos del flujo debería verse así:

step 8 3

Actualizar Input Behaviour con las dos respuestas a la petición de Booking

Ahora que has definido los eventos, puedes actualizar la sección de input behaviour del flujo para asociar la respuesta de booking (es decir, la entrada) con los eventos que acabas de crear.

Una vez terminado, el input behaviour debería verse así:

step 8 4

Antes de terminar de actualizar el flujo, necesitas crear y poblar una biblioteca de decisiones (Decision Library) y actualizar la biblioteca de datos de negocio y la función de mapeo para suministrar a la decisión los datos que necesita. La biblioteca de decisiones contiene las decisiones internas tomadas por la solución que estás construyendo.

Una DECISIÓN puede tener uno o más OUTCOMES (resultados). Estos resultados se alimentan a la máquina de estados (el flujo) cuando defines el event behaviour.

Actualizar la Business Data Library

En nuestro escenario hay una comprobación de si el banco del acreedor y el del deudor son el mismo. El debtor agent ya está en la biblioteca de datos de negocio, así que añadamos también el creditor agent para que ambos estén disponibles para la decisión.

Abre la 'Outbound Payment Flow Business Data Library' y añade el creditor agent.

step 8 5

Actualizar la función de mapeo

Ahora que tienes los datos de negocio adicionales que necesitas, actualiza la función de mapeo que separa el Pacs008 para que esté disponible en el flujo.

Abre el 'Outbound Payment Flow', navega hasta la función de mapeo y añade 'Creditor Agent' al Output Data de la función 'Separate Pacs008 into useful components'.

step 8 6

Crear la Decision Library

Haz clic derecho en el modelo y selecciona New > v2Flo > Decision Library.

step 8 7

Ahora haz clic en el botón 'Add Decision' para crear una decisión.

La decisión determinará el tipo de pago que se usará y comparará el creditor agent y el debtor agent para determinar si son la misma organización, así que tendrás que asegurarte de que los datos de agente están disponibles para la aplicación especificándolos como business data.

Por suerte ya añadiste creditor agent y debtor agent como datos de negocio en un paso anterior, así que puedes seleccionarlos con Ctrl+Space mientras el cursor está en 'Business Data'.

Por último, especifica cuáles serán los posibles outcomes (resultados de la decisión). Para tu escenario, el tipo de pago se identificará como un pago que será enviado al CSM (un 'Scheme Payment') o uno que será una transferencia interna ('On Us Payment').

Añade los dos posibles outcomes a la decisión que acabas de crear colocando el cursor en la celda 'Outcomes', pulsa Ctrl+Enter y selecciona la opción 'Decision Outcome'. Desde ahí puedes añadir los outcomes con texto libre.

step 8 9

Con esto, la biblioteca de decisiones está creada. Ahora puedes añadirla al flujo como parte del event behaviour.

La lógica en sí debe implementarse en Java o potencialmente usando el rules framework.

Actualizar el Event Behaviour para finalizar el flujo

Ahora puedes conectar la decisión con el flujo.

Crear un Decision State

Las decisiones se consideran pseudoestados.

En tu caso de uso, una vez que 'Debtor Account Verification' ha pasado, la aplicación determinará qué tipo de pago es antes de enviarlo por una de dos rutas, así que necesitas usar el evento 'Debtor Account Verification Passed' para moverte a un decision state.

Pulsa Ctrl+Space en la celda 'Move to State' de la primera fila del event behaviour y selecciona 'Create Decision State'.

Tu event behaviour debería verse así:

step 8 10

En este punto se te ofrece la opción de nombrar tu decisión. Esto es importante, porque una misma decisión puede usarse en múltiples lugares de un flujo, o incluso en distintos flujos y subflujos.

Para que el diagrama del flujo sea comprensible (y para que el flujo construya correctamente), cada uso de una decisión requiere un identificador único, que especificarás aquí como el nombre de la decisión.

En tu caso de uso no reutilizarás la decisión, así que puedes llamarla simplemente 'Determining Settlement Route'.

step 8 11

Añadir la acción de decisión

Ahora que has creado el decision state, necesitas una acción que genere el código para posibilitar la invocación de la decisión.

Elimina 'Make Request' de la celda 'Perform Action' y pulsa Ctrl+Space; se te presentará la única opción disponible, que es 'Routing Decision'.

Selecciona esta opción y verás las decisiones de la Decision Library (en tu caso, solo una decisión).

Selecciona la decisión 'Payment Type'.

El event behaviour debería verse ahora así:

step 8 12

Ahora necesitas añadir los dos posibles outcomes:

  • Si el outcome es un 'On Us payment', entonces debes generar la petición de booking, omitiendo el CSM.

  • Si el outcome es un 'Scheme payment', entonces debes generar la payment request.

Añadir nuevos Event Behaviour para los outcomes de la decisión

Ahora que te has movido al Decision State tras pasar la verificación de cuenta deudora, añade los outcomes de la decisión al Event Behaviour.

Añade dos nuevas filas de Event Behaviour:

  • Establece 'With Current State' a Determining Settlement Route en ambas.

  • Para la primera, establece 'For Event' a 'Outcome:On Us Payment'.

    • Como es un 'on us' payment, vas directamente a booking: establece 'Move to State' en 'Booking' y añade 'Make Request: Booking Request' en 'Perform Action'.

  • Para la segunda, establece 'For Event' a 'Outcome:Scheme Payment'.

    • Como es un 'scheme' payment, enviarás el pago al CSM: establece 'Move to State' en 'Clearing and Settling' y 'Make Request: Payment Request' en 'Perform Action'.

Tu event behaviour debería verse así ahora:

step 8 12b

Añadir nuevos Event Behaviour para el nuevo estado Booking

Añade dos nuevas filas de event behaviour:

  • Establece 'With Current State' a 'Booking' en ambas.

  • Añade las transiciones de estado a 'Complete' o 'Rejected' según si el evento es 'paymentBooked' o 'paymentBookingFailed'.

Cambiar el Event Behaviour de Clearing and Settling

Ajusta el event behaviour existente ahora que el estado 'Booking' ha sido añadido.

'CSM Business Passed' ya no debe llevar a 'Complete'. Ahora debe cambiar a 'Booking' y se debe añadir una petición de booking como acción.

Actualizar notificaciones

Y por último, asegúrate de que el event behaviour está actualizado y que se sigue creando una notificación cuando un pago se ha 'Completed' o 'Rejected'.

Todos estos cambios deberían dar como resultado un event behaviour como este:

step 8 13

Comprobar el flujo

¿Cómo se ve ahora el flujo? Compruébalo con el Flo Viewer (recordatorio: está en 'Tools' o mediante 'Intentions').