Documentation for a newer release is available. View Latest

Operaciones de Dominio

En esta sección cubrimos cómo, dentro de IPF, modelamos dominios (tanto nuestro dominio IPF como aquellos externos a IPF).

También cubrimos otras piezas clave de funcionalidad que ayudan a controlar el "flujo" del procesamiento: Decisiones y Eventos Adicionales.

Dominios Externos

Después de que se procese un evento, la aplicación puede realizar una o más actividades para determinar qué sucede a continuación con un pago. Por ejemplo, al recibir el "Evento A" podemos querer hacer alguna validación y llamar a otra aplicación para pedirle que valide nuestros datos (otros ejemplos comunes basados en pagos incluyen comprobación de duplicados, llamadas a sistemas de sanciones o llamadas de contabilización a sistemas contables).

Para soportar este procesamiento posterior al evento, el concepto más importante es el "Dominio Externo". Esto representa algún dominio de negocio —no el de nuestro flujo actual— con el que necesitamos interactuar.

Por ejemplo, supongamos que necesitamos hablar con un sistema de sanciones durante parte del flujo. Para soportar esto, modelaríamos ese sistema de sanciones como un dominio externo.

Cada dominio externo consta de los tres tipos de interacción que podemos realizar con él:

  • "Instrucciones" - las instrucciones son lo más simple que recibimos de un dominio externo. Puede ser desencadenado por el dominio externo en cualquier momento y comenzaremos el procesamiento. Puede pensarse como el dominio externo empujándonos información.

  • "Notificaciones" - las notificaciones son lo opuesto a las instrucciones. Se usan cuando queremos empujar nuestros datos hacia un dominio externo.

  • "Solicitudes" - una solicitud se usa cuando necesitamos una "respuesta" del dominio externo como réplica.

Instrucciones

Estas pueden ser iniciadas por un sistema externo y contienen las siguientes propiedades:

  • "Nombre"

  • "Descripción"

  • Lista de "Elementos de Datos de Negocio"

Cuando la aplicación IPF recibe una instrucción, elevará un evento correspondiente. Los datos de negocio del evento se poblarán con todos los elementos de datos de negocio coincidentes.

Notificaciones

Las notificaciones, como una instrucción, tienen las siguientes propiedades:

  • "Nombre"

  • "Descripción"

  • Lista de "Elementos de Datos de Negocio"

Cuando la aplicación IPF envía una notificación, poblará todos los elementos de datos de negocio para los que tenga un registro coincidente.

Solicitudes

La solicitud puede pensarse que tiene dos partes: la propia solicitud y la respuesta correspondiente esperada como parte de la interacción con el dominio externo.

La parte de solicitud contiene:

  • "Nombre"

  • "Descripción"

  • Lista de "Datos de negocio"

  • Lista de "Respuestas"

La parte de respuesta es ligeramente diferente y tiene algunas características nuevas a considerar:

  • "Nombre"

  • "Descripción"

  • Lista de "Datos de negocio"

  • "Conjunto de códigos de respuesta" - este es un grupo de códigos de respuesta. Un "Código de Respuesta" es un código de resultado esperado para una respuesta que podría usarse para el procesamiento posterior.

  • "Conjunto de códigos de razón" - este es un grupo de códigos de razón. Un "Código de Razón" es un motivo por el cual se establece el código de respuesta. Por ejemplo, tu código de respuesta podría ser "Rejected" con una razón "Incorrect Currency".

  • Indicador "Completing" - define si la solicitud que llama debe considerarse completada cuando llega esta respuesta. Esto es particularmente útil cuando se esperan más de una respuesta durante la interacción. Por ejemplo, considera una solicitud donde el sistema externo envía un acuse técnico seguido de una respuesta comercial final. En este caso, definiríamos dos respuestas: una para representar el acuse técnico (no completante) y otra para la respuesta comercial final (completante).

En términos ISO, un código de respuesta es análogo a un "Status", mientras que un código de razón es análogo a un "Status Reason".
El producto IPF proporciona un conjunto de códigos de respuesta por defecto "AcceptOrReject" que se utiliza para respuestas estándar de tipo aprobado/rechazado. También proporciona un conjunto de todos los códigos de razón ISO.

Si juntamos los elementos clave cubiertos aquí, podemos ver el patrón básico de cualquier flujo:

concepts 1

Cuando IPF recibe algo de un dominio externo (ya sea una instrucción o una respuesta), conduce a que se eleve un evento que puede causar una transición de estado seguida de la invocación de una notificación o solicitud a un dominio externo.

Funciones de Dominio

Es posible que no queramos (o necesitemos) llamar a un dominio externo para continuar procesando nuestro flujo. Esto puede ocurrir porque sabemos qué hacer a continuación o podemos calcular qué hacer a continuación; el procesamiento está dentro de nuestra aplicación.

Una opción es usar la capacidad de "Función de Dominio" que ofrece el propio flujo. Funcionalmente desde una perspectiva de modelado de flujo, funciona de manera muy similar a un par solicitud/respuesta en una llamada a un dominio externo, excepto que en el caso de una función de dominio, la propia aplicación IPF es el dominio. Así, la llamada real permanece interna (y el código necesario para cumplir la solicitud se escribe dentro de nuestra aplicación IPF). En cualquier caso, cuando llamamos a una función de dominio, esperamos obtener una respuesta y luego esa respuesta se transformará en un evento que luego puede causar procesamiento posterior.

Al igual que una solicitud, la función de dominio tiene varias propiedades:

  • "Nombre"

  • "Descripción"

  • Lista de "Datos de negocio"

  • Lista de "Respuestas"

Eventos Adicionales

Es posible que, para continuar procesando nuestro flujo, no tengamos una interacción externa desde otro sistema.

Una opción es el uso de un "Evento Adicional" — utilizado para mover el flujo.

Cuando se eleva un evento adicional, el sistema lo procesará como si hubiera sido recibido en la aplicación a través de una instrucción o respuesta.

Añadamos esto a nuestro diagrama:

concepts 2

Decisiones

También existe una característica para realizar lógica condicionalmente. Por ejemplo, podemos querer ejecutar una comprobación de fraude solo si el valor del pago supera las £50. En este caso, podemos usar una "Decisión".

Una decisión nos permite realizar cierta lógica programáticamente y luego tomar diferentes rutas de procesamiento en función del resultado de esa decisión.

Una decisión tiene varias propiedades:

  • "Nombre"

  • "Descripción"

  • Lista de "Datos de negocio" - estos son los datos que se envían al llamar a la decisión para que pueda procesar en base a ellos.

  • Lista de "Resultados de la Decisión" - estos son los posibles resultados de ejecutar la decisión; cada decisión puede tener tantos resultados diferentes como sea necesario y estos resultados son únicos para la decisión. Se definen simplemente proporcionando un nombre.

Las decisiones en sí se almacenan dentro de una "Librería de Decisiones". Las librerías son independientes del flujo y, como tal, la misma decisión puede usarse en múltiples flujos.

Podemos usar una decisión en dos lugares:

  • Para determinar qué evento debe ser elevado en respuesta a una entrada (respuesta o instrucción)

  • Para determinar qué acciones deben realizarse después de una transición de estado.

Añadamos esto a nuestro diagrama:

concepts 3

Se elevará también un tipo especial de evento: "Evento de Resultado de Decisión", de modo que la invocación de la decisión y el resultado devuelto queden auditados y puedan usarse para el procesamiento posterior.