Documentation for a newer release is available. View Latest

IPF ISO20022 Meta Model

Descripción general

El repositorio ISO20022 Meta contiene herramientas basadas en MPS centradas en aprovechar ISO20022, Meta Model y E-Repository para construir diversas representaciones de software que soportan sistemas de pago, incluido IPF.

Un glosario completo de los distintos conceptos y términos se puede encontrar en la página Conceptos.

Proceso anterior

El proceso anterior consistía en la generación tradicional de XSD a Java usando XJC y algunas personalizaciones XSL para decorar aún más los POJOs de Java resultantes.

Untitled Diagram Page 1.drawio

Nuevo proceso

El nuevo proceso, en cambio, se basa en referenciar la fuente iso2002 subyacente y el repositorio EMF (e-repository), que contiene todos los datos en bruto necesarios para los XSD originales y mucho más. Tomamos estos datos, los importamos en una implementación de MPS y aprovechamos las capacidades de generación de MPS para producir un código de dominio mejor, más profundo y más rico.

Untitled Diagram Page 2.drawio

¿Por qué no seguir con XSDs y Jaxb?

Mayor profundidad del modelo

El Meta-Modelo ISO20022 es conceptualmente rico y va mucho más allá de las estructuras definidas en Message Definition, XSDs. Parte de esto puede verse revisando los Message Definition Reports de apoyo asociados, donde el contenido de las Message Definitions está vinculado a un Business Model subyacente. Esta información no se expresa formalmente por otros medios, pero sí está representada dentro del Meta-Modelo y el E-Repository, y por lo tanto puede aprovecharse para la generación.

Oportunidades de generación mejoradas

Este enfoque, de aprovechar el Meta-Modelo y el E-Repository, en combinación con las capacidades de generación de MPS, brinda mucha más oportunidad para generación adicional, como:

  • Generación del Business Model subyacente

  • Generación de mapeos entre Message Model y Business Model

  • Generación de cualquiera/todas las otras Message Definitions y Business Domains

  • Capacidad para aumentar y complementar los conceptos existentes con conceptos específicos de la solución como MDS y PDS de IPF

  • Representaciones no Java (Kotlin, Open-API, JsonSchema, ProtoBuf)

  • Mejores capacidades de generación del message model (eliminación de Lombok)

Interoperabilidad con otros lenguajes MPS

Capturar tipos de mensaje ISO20022 dentro de MPS ofrece una capacidad única para comenzar a aprovechar estos tipos dentro de otros lenguajes MPS. Por ejemplo, sabemos que una capacidad próxima es un lenguaje para definir reglas de validación de mensajes; típicamente esto se haría de una de dos maneras:

  1. Expresiones en texto libre, similares a SPEL donde el usuario define expresiones y reglas en formato de texto, lo cual es frágil e inseguro.

  2. Basado en un javaType, con seguridad de tipos, pero que realmente es un envoltorio para escribir código Java, y torpe (como hemos visto con lightweightDSL y las características obsoletas DomainDecision de flo-lang)

Tener los tipos ISO como nodos de conceptos MPS significa que estamos en mejor posición para proporcionar una experiencia directamente con seguridad de tipos.

Desde la perspectiva de flo-lang, la biblioteca de representaciones Java preconstruidas de tipos ISO ahora puede "en sí misma" generarse automáticamente.

Conocimiento del modelo

Al modelar y almacenar el contenido del E-Repository ISO20022 en MPS, también proporcionamos implícitamente la base para una herramienta analítica accesible para Analistas de Negocio cuando revisan la relación entre Message Components. Con todo el poder del soporte del IDE es trivial encontrar todos los usos de un Message Element dado, sus varias Message Definitions, y cómo los datos se trazan a través de Message Choreographies.

Extensibilidad

Ahora es trivial personalizar o extender de forma fiable, o definir nuevas Message Definitions (aprovechando los mismos tipos) dentro del Meta-Modelo existente.

Estructura del proyecto

La siguiente tabla contiene detalles breves sobre a qué se refiere cada carpeta

Carpeta/Módulo Tipo de directorio Descripción

erepo

Binario

Esta carpeta contiene archivos del e-repository EMF de iso20022.

iso20022-emf-loader

Código fuente Java

Este módulo de Maven contiene código Java personalizado para leer un modelo Eclipse EMF XMI.

iso20022-java-metamodel

Código fuente Java

Este módulo de Maven contiene una representación Java del ISO20022 MetaModel; sirve como el modelo DTO para importar desde el EMF E-repo al modelo MPS

iso20022-mps

Proyecto MPS

Este módulo de Maven contiene los lenguajes y soluciones MPS para importar repositorios EMF en MPS y generar modelos útiles como una representación Java de las Message Definitions

iso20022-mps-dependencies

Código fuente Java

Este módulo de Maven contiene código Java personalizado del IPF del cual dependen el código generado desde iso20022, por ejemplo Annotations personalizadas

erepo

Esta carpeta contiene ISO20022 E-Repository(s).

El E-Repository completo se encuentra en

erepo/original/<date>_ISO20022_2013_eRepository_original.iso20022

También proporcionamos un subconjunto basado en las Message Definitions usadas por IPF (listadas abajo) que se encuentra aquí:

erepo/new_run/iconExampleSubset.iso20022

El repositorio anterior se carga por defecto y contiene las siguientes Message Definitions

  • acmt.023.001.04

  • acmt.024.001.04

  • admi.002.001.01

  • admi.004.001.02

  • admi.007.001.01

  • admi.011.001.01

  • camt.019.001.07

  • camt.025.001.06

  • camt.026.001.07

  • camt.027.001.07

  • camt.028.001.09

  • camt.029.001.09

  • camt.052.001.08

  • camt.054.001.10

  • camt.055.001.08

  • camt.056.001.08

  • camt.087.001.06

  • head.001.001.02

  • pacs.002.001.10

  • pacs.003.001.08

  • pacs.004.001.09

  • pacs.007.001.09

  • pacs.008.001.08

  • pacs.009.001.08

  • pacs.028.001.03

  • pain.001.001.09

  • pain.002.001.10

  • pain.007.001.09

  • pain.008.001.08

  • pain.013.001.07

  • pain.014.001.07

iso20022-emf-loader

Este módulo de Maven contiene código Java personalizado para leer un modelo Eclipse EMF XMI. Es usado por el proyecto MPS pero también es utilizable de forma independiente. Hay varias pruebas unitarias que pueden usarse para facilitar un acceso tipo REPL al EMF en bruto como un conjunto de objetos Java; consulte las guías de gettings-standard para información sobre explorar el repositorio EMF en bruto.

iso20022-java-metamodel

Este módulo de Maven contiene una representación Java del ISO20022 MetaModel; sirve como el modelo DTO para importar desde el EMF E-repo al modelo MPS.

Este modelo se generó usando Eclipse gen-model con el ISO20022 Ecore desde los recursos cargados.

Si el propio ISO20022 Meta Model (iso20022.ecore) cambia, necesitaremos volver a generarlo y copiarlo, esto puede ocurrir más adelante en 2023. Aunque podemos automatizar esto, en realidad sería mejor no aceptar ciegamente los cambios sin conocerlos.

iso20022-mps-dependencies

Este módulo de Maven contiene código Java personalizado de IPF del cual dependen el código generado desde ISO20022; actualmente es simplemente un conjunto de Annotations personalizadas para decorar las clases resultantes con contexto del Meta Model, sin embargo es poco probable que esto sea deseable a largo plazo ya que el sistema de tipos de Annotation es bastante limitado.

iso20022-mps

El dominio MPS de este proyecto consiste en una implementación principal del Language del ISO20022 Meta Model. Apunta a una cobertura total del modelo y capacidades de generación mejoradas. También incluye integración de plugins para la importación automatizada de repositorios EMF ISO20022 en soluciones MPS.

La intención es que un usuario pueda descargar cualquier e-repository desde el sitio web de la Registration Authority e importarlo directamente en MPS, donde puede inspeccionarlo, analizarlo y luego generar las diversas representaciones de salida.

Resumen de la solución MPS - ACTUAL

Lo siguiente muestra la visión general actual. Es bastante simple, la función Importer es un plugin del Language principal; tenemos una solución runtime separada para las dependencias del generador y un lenguaje de extensión separado.

current

Resumen de la solución MPS - objetivo

Lo siguiente muestra una refactorización objetivo para alejar las preocupaciones de EMF del propio lenguaje; esto es algo hacia lo que apuntaremos en el futuro.

target

Detalle de la solución MPS

Language (com.iconsolutions.iso20022)

Este lenguaje MPS se basa en el ISO20022 Metamodel original; se creó aprovechando una herramienta de conversión de Ecore a lenguaje MPS llamada EcoreImport para realizar una transformación inicial, seguida de algunos ajustes manuales menores para tener en cuenta las diferencias de implementación entre EMF y MPS, por ejemplo cómo se implementan los enums.

El lenguaje también contiene un aspecto de plugin que proporciona la importación automática de un e-repository ISO20022 (disponible desde el sitio web de la Registration Authority de ISO20022) en un modelo MPS de destino seleccionado.

Para usar el plugin, haga clic derecho en un modelo en blanco y seleccione una de las dos opciones siguientes.

Import Default ISO Repo

Esto carga un subconjunto predeterminado del repositorio ISO (los mensajes de pagos utilizados por IPF a diciembre de 2022)

Import ISO Repo from File

Esto permite seleccionar cualquier e-repository desde el sistema de archivos; los e-repositories son descargables desde la ISO20022 registration authority

com.iconsolutions.iso20022.repository.ipf

Este es el repositorio "ipf" por defecto donde se generan los nodos importados; no hay nada especial acerca de esta solución/modelo. Cualquier solución puede crearse y tener los datos ISO importados; aunque en realidad solo necesitaríamos una.

Esta solución viene pre-poblada con el subconjunto específico de ISO20022 de Icon.

com.iconsolutions.iso20022.generator.runtime

Esta solución contiene todas las dependencias Java que son requeridas por el aspecto del generador relativo a ISO. Por ejemplo, actualmente añadimos Lombok y Javax XML annotation a las clases de Message Definition generadas.

Las dependencias se cargan por Maven al directorio libs de la solución, tal como lo define la propiedad de Maven emf-generator-libs.directory.

Se incluyen en control de versiones para facilitar su uso.


Paquetización del modelo por defecto

A continuación se muestra la paquetización por defecto actual del colateral Java resultante de ISO20022. Generaremos el message model, business model y en el futuro validadores y mapeadores. Estos valores se pueden sobrescribir como parte de las opciones de generación

Paquete base

El paquete base propuesto para todo el código generado de iso20022.

com.iconsolutions.iso20022

Message Model

El ISO20022 Message model consiste en todos los tipos relacionados con mensajes.

<base_package>."message"

com.iconsolutions.iso20022.message

Message Definitions

Las Message definitions requieren un subpaquete separado para diferenciarlas

<base_package>.message."definitions".<business_area>.<msg_functionality>.<MessageDefinition>

Por ejemplo, la Message Definition pain.001.001.08:

com.iconsolutions.iso20022.message.definitions.payments_initiation.pain001.CustomerCreditTransferInitiationV09

Message Components

Los Message Components se agrupan por su respectivo dominio de Business Component. No se agrupan con las Message Definitions ya que muchas Message Definitions pueden compartir los mismos componentes.

<base_package>.message."components".<business_component_trace_name>.<message_component_name>.MessagComponent

Por ejemplo, el tipo complejo GroupHeader85 usado por Pain.001.001.09:

com.iconsolutions.iso20022.message.components.payment.group_header_85.GroupHeader85

Los Message components que no son de negocio se consolidan en un paquete "technical"

<base_package>.message."components"."technical".<MessageComponent>

Por ejemplo, el tipo ControlData1 usado por camt056.001.08 (y otros):

com.iconsolutions.iso20022.message.components.technical.ControlData1

Business Model

El ISO20022 Business Model es el modelo conceptual que sustenta el message model; es más general y puede verse como un conjunto de supertipos de los que se trazan miembros del message model.

<base_package>."business"

com.iconsolutions.iso20022.business

Business Components

Los Business Components actualmente se generarán en un único paquete components.

<base_package>.business."components".<BusinessComponent>

Por ejemplo, el concepto Payment:

com.iconsolutions.iso20022.business.components.Payment

En el futuro podremos dividir los components en uno de los 6 Business Domains:

  • Business Application Header

  • Cards

  • FX

  • Payments

  • Securities

  • Trade Services

Pero esto requiere una mejora para trazar un BusinessComponent a un Business Domain comprobando todos sus usos dentro de trazas de Message Definition (esta información no se captura explícitamente en el e-repository, aunque es derivable mediante algunos cálculos)

En ese caso tendríamos

<base_package>.business.<business_domain>."components".<BusinessComponent>

Por ejemplo, el concepto Payment:

com.iconsolutions.iso20022.business.payments.components.Payment