IPF ISO20022 Modelo Meta

Descripción general

El ISO20022 El repositorio meta contiene MPS herramientas basadas en el aprovechamiento de la ISO20022, Modelo Meta y E-Repository para construir diversas representaciones de software que apoyen los sistemas de pago, incluyendo IPF.

Un glosario completo de los diversos conceptos y términos se puede encontrar en el_Conceptos page.

Proceso anterior

El proceso anterior era XSD tradicional a Java generación utilizando XJC y algunos XSL customisations para decorar aún más el resultado Java pojos.

UntitledDiagram Page 1.drawio

Nuevo proceso

El nuevo proceso, en cambio, se basa en hacer referencia a la fuente iso2002 subyacente y al repositorio electrónico EMF, que contiene todos los datos en bruto necesarios para los XSD originales, además de mucho más. Tomamos estos datos, los importamos en un MPS implementación y aproveche las capacidades de generación de MPS para producir un código de dominio mejor, más profundo y más rico.

UntitledDiagram Page 2.drawio

¿Por qué no simplemente ceñirse a los XSD y Jaxb?

Mayor profundidad del modelo

El ISO20022 El Meta-Modelo es conceptualmente rico y va mucho más allá de las estructuras definidas en el Message Definition, XSDs. Parte de esto puede verse al revisar la documentación de apoyo asociada.Message Definition Reports, donde se encuentran los contenidos de la Message Definition s están vinculados a un subyacente Modelo de Negocio. Esta información no se expresa formalmente de otra manera, pero está representada dentro del Meta-Modelo y el E-Repositorio, y por lo tanto puede ser aprovechada para la generación.

Oportunidades de generación mejoradas

Este enfoque, de aprovechar el Meta-Modelo y el E-Repositorio, en combinación con MPS las capacidades de generación, proporciona muchas más oportunidades para generación adicional, como:

  • Generación del modelo de negocio subyacente

  • Generación de mappings entre Modelo de Mensaje al Modelo de Negocio

  • Generación de cualquier/todas las demás Message Definition s y Dominios Empresariales

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

  • Non-java representaciones (Kotlin, Open-API, JsonSchema,ProtoBuf)

  • Mejores capacidades de generación del modelo de mensajes (eliminación de Lombok)

Interoperabilidad con otros MPS idioma

Capturando ISO20022 message type s dentro de MPS ofrece una capacidad única para poder comenzar a aprovechar estos tipos dentro de otros MPS idiomas. Por ejemplo, sabemos que una capacidad próxima es un lenguaje para poder definir reglas de validación de mensajes.- típicamente esto se haría de una de dos maneras:

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

  2. Basado en un javaType, con seguridad de tipo-pero realmente es un envoltorio sobre la escritura java código, y torpe (como hemos visto con lightweightDSL y las características obsoletas DomainDecision de flo-lang)

Teniendo los tipos ISO como MPS los nodos de conceptos significan que estamos en una mejor posición para proporcionar una experiencia directa y segura en cuanto a tipos.

Desde una perspectiva de flo-lang, la biblioteca de -predefinido java las representaciones de tipos ISO pueden ahora generarse automáticamente "a sí mismas"

Perspectiva del modelo

Al modelar y almacenar el ISO20022 Contenido del E-Repository dentro de MPS, también proporcionamos implícitamente la base para una herramienta analítica accesible que los Analistas de Negocios pueden utilizar al revisar la relación entre los Componentes del Mensaje. Con todo el poder del soporte de IDE, es trivial encontrar todos los usos de un dado Elemento de Mensaje, a sus varios Message Definition s, y cómo los datos se rastrean a través de las Coreografías de Mensajes.

Extensibilidad

Ahora es trivial hacerlo de manera confiable.customise o ampliar, o definir nuevos Message Definition s (aprovechando los mismos tipos) dentro del Meta-Modelo existente.

Estructura del proyecto

La tabla a continuación contiene detalles breves sobre a qué se relaciona cada carpeta.

Carpeta/Módulo Tipo de Directorio Descripción

erepo

Binario

Esta carpeta contiene iso20022 Archivo(s) del repositorio electrónico EMF.

[_iso20022_emf_loader]

Código fuente de Java

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

[_iso20022_java_metamodel]

Código fuente de Java

Este Maven el módulo contiene un Java representación de la ISO20022 MetaModel, esto sirve como el modelo DTO para importar desde el repositorio E-repo de EMF en el MPS modelo

[_iso20022_mps]

Proyecto MPS

Este Maven el módulo contiene el MPS Lenguajes y soluciones para importar repositorios E de EMF y generar modelos útiles como Java representación de la Message Definition s

[_iso20022_mps_dependencies]

Java fuente

Este Maven el módulo contiene custom Java código del cual depende el código generado de iso20022, por ejemplo custom Anotaciones

erepo

Esta carpeta contiene ISO20022 E-Repositorio(s).

El E-Repository completo se encuentra en

``erepo/original/<date>_ISO20022_2013_e Repository_original.iso20022

También proporcionamos un subconjunto basado en el *Message Definition s* utilizado por IPF (enumerado a continuación) encontrado aquí:

``erepo/new_run/iconExampleSubset.iso20022
``

El repositorio anterior se carga por defecto y contiene lo siguiente *Message Definition s*

* 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]
=== iso20022-cargador-emf

Este Maven el módulo contiene custom Java código para leer un modelo XMI de Eclipse EMF.
Esto es utilizado por el MPS proyecto, pero también es utilizable de forma independiente.
Hay varios unit tests que puede ser utilizado para facilitar el acceso similar a Repl a la EMF en bruto como un conjunto de Java objetos, consulte las guías de estándares de obtención para obtener información sobre la exploración del repositorio EMF en bruto.
[#_iso20022_java_metamodel]
=== iso20022 - java-metamodelo

Este Maven el módulo contiene un Java representación de la ISO20022 MetaModel, esto sirve como el modelo DTO para importar desde el EMF E-repo en el MPS modelo.

Este modelo fue generado utilizando Eclipse gen-model con el ISO20022 Ecore de los recursos cargados.
[NOTE]
====
 Si el ISO20022 El modelo meta en sí mismo (_iso20022.ecore_) cambia, necesitaremos regenerar y copiar esto nuevamente, esto puede suceder más adelante en 2023. Aunque podemos automatizar esto, en realidad sería mejor no aceptar ciegamente los cambios sin conocimiento de los mismos.
====
[#_iso20022_mps_dependencies]
=== iso20022 - mps-dependencias

Este Maven el módulo contiene custom IPF Java código del cual depende el código generado de ISO20022, esta corriente es simplemente un conjunto de custom Anotaciones para decorar las clases resultantes con contexto de Meta Modelo, sin embargo, esto es poco probable que sea deseable a largo plazo, ya que el sistema de tipos de Anotación es bastante limitado.
[#_iso20022_mps]
=== iso20022 - mps

El MPS el dominio de este proyecto consiste en una implementación de Lenguaje primaria del ISO20022 Modelo Meta.
Apunta a una cobertura completa del Modelo y a capacidades de generación mejoradas.
También incluye la integración de complementos para la importación automatizada de ISO20022 repositorios EMF en MPS soluciones.

La intención es que un usuario pueda descargar cualquier e-repositorio del sitio web de la Autoridad de Registro e importarlo directamente en MPS, donde pueden inspeccionar, analizar y luego generar las diversas representaciones de salida.

==== MPS visión general de la solución - ACTUAL

A continuación se muestra la visión general actual.
Es bastante simple, la función Importer es un complemento del lenguaje principal, tenemos una solución de tiempo de ejecución separada para las dependencias del generador, y una separada extension idioma.
[plantuml,current,svg]
....
@startuml
package "Languages" {
    component com.iconsolutions.iso20022 as language <<Language>>
    [com.iconsolutions.iso20022.extensions] as extension <<Language>>
}

frame "Dependency Solutions" {
    [com.iconsolutions.iso20022.generator.runtime] as generatorRuntime <<Solution>>
}

package "Repository Solution" {
    [com.iconsolutions.iso20022.repository.ipf] as repository <<Solution>>
}

Actor user
user --> language: import *.ecore\n action

language .> repository: imports content \n into


extension .> language: enriches\n generation context

language --> generatorRuntime : uses classes\n from

repository --> language: creates nodes\n from
repository --> extension: creates nodes from

@enduml
....


==== MPS visión general de la solución-objetivo

A continuación se muestra una refactorización dirigida para eliminar las preocupaciones de EMF del propio lenguaje; esto es algo hacia lo que nos dirigiremos en el futuro.
[plantuml,target,svg]
....
@startuml
package "Languages" {
    component com.iconsolutions.iso20022 as language <<Language>>
    [com.iconsolutions.iso20022.extensions] as extension <<Language>>
}

frame "Dependency Solutions" {
    [com.iconsolutions.iso20022.emf.runtime] as emfRuntime <<Solution>>
    [com.iconsolutions.iso20022.generator.runtime] as generatorRuntime <<Solution>>

}

package "Plugins" {
    [com.iconsolutions.iso20022.importer] as importer <<Solution>>
}


package "Repository Solution" {
    [com.iconsolutions.iso20022.repository.ipf] as repository <<Solution>>
}


Actor user
user --> importer: import *.ecore\n action

importer .> repository: imports content \n into


extension .> language: enriches\n generation context

language --> emfRuntime :uses classes\n from
language --> generatorRuntime : uses classes\n from

importer --> language
repository --> language: creates nodes\n from
repository --> extension: creates nodes from

@enduml
....


==== MPS Detalle de la Solución

===== Idioma (com.iconsolutions.iso20022)

Este MPS el idioma se basa en el original ISO20022 Metamodelo, fue creado aprovechando un *Ecore* para MPS herramienta de conversión de idioma llamada link:https://github.com/BentleyJOakes/EcoreImport[EcoreImport] 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 ISO20022 e-repository (disponible desde el ISO20022 Sitio web de la Autoridad de Registro) en un objetivo seleccionado MPS modelo.

Para utilizar el complemento, haga clic derecho en un modelo en blanco y seleccione una de las dos opciones a continuación.

====== Importar el repositorio ISO predeterminado

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

====== Importar repositorio ISO desde archivo

Esto permite la selección de cualquier e-repositorio del sistema de archivos; los e-repositorios son descargables desde el ISO20022 autoridad de registro

===== com.iconsolutions.iso20022.*repository.ipf*

Este es el repositorio "ipf" predeterminado donde se generan los nodos importados, no hay nada especial acerca de esta solución/modelo.
Cualquier solución puede ser creada y tener los datos ISO importados.- aunque en realidad solo necesitaríamos uno.

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

===== com.iconsolutions.iso20022.*generador*.runtime

Esta solución contiene todos los Java dependencias que son requeridas por el aspecto generador relacionado con ISO. Por ejemplo, actualmente añadimos Lombok y Javax XML anotación a lo generado Message Definition clases.

Las dependencias son cargadas por maven al directorio libs de la solución, según lo definido por el e__mf-generator-libs.directory__maven propiedad.

Están comprometidos con el control de versiones para la conveniencia de uso.

'''

== Paquete de modelo predeterminado

A continuación se presenta el embalaje predeterminado actual del resultado Java colateral de ISO20022. Generaremos el modelo de mensaje, el modelo de negocio y en el futuro validadores y mappers. Estos valores son anulables como parte de las opciones de generación.

=== Paquete base

El paquete base propuesto para todos los generados iso20022 código.

``com.iconsolutions.iso20022
``

=== Modelo de Mensaje

El ISO20022 El modelo de mensaje consiste en todos los tipos relacionados con el mensaje.

_<base_package>_.*mensaje*

``com.iconsolutions.iso20022.mensaje

Message Definition s

Message definition s requieren un subpaquete separado para diferenciar.

<base_package>.mensaje.definiciones.<área_de_negocio>.<funcionalidad_del_mensaje>.<MessageDefinition>

Por ejemplo, el pain. 001. 001. 08 Message Definition:

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

Componentes del Mensaje

Los componentes del mensaje se agrupan por su respectivo dominio de componente empresarial. No están agrupados con Message Definition s desde muchos Message Definition s puede compartir los mismos componentes.

<base_package>.message.components.<business_component_trace_name>.<message_component_name>. Messag Component

Por ejemplo, el tipo complejo Group Header85 utilizado por Pain. 001. 001. 09:

com.iconsolutions.iso20022.message.components.payment.group_header_85. Group Header85

Los componentes del mensaje que no están relacionados con el negocio se consolidan en un paquete "técnico".

<base_package>.mensaje.componentes.técnico.<MessageComponent>

Por ejemplo, el tipo Control Data1 utilizado por camt056. 001. 08 (y otros):

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

Modelo de Negocio

El ISO20022 El Modelo de Negocio es el modelo conceptual que sustenta el modelo de mensaje, es más general y puede ser visto como un conjunto de supertipos a partir de los cuales se trazan los miembros del modelo de mensaje.

<base_package>.negocios

com.iconsolutions.iso20022.business

Componentes Empresariales

Los componentes empresariales se generarán actualmente en un único paquete de componentes.

<base_package>.business.components.<BusinessComponent>

Por ejemplo, el concepto de Pago:

com.iconsolutions.iso20022.business.components. Payment

En el futuro, podemos dividir los componentes en uno de los 6 Dominios de Negocio:

  • Encabezado de Aplicación Empresarial

  • Tarjetas

  • FX

  • Pagos

  • Valores

  • Servicios Comerciales

Pero esto requiere una mejora para rastrear un Componente de Negocio a un Dominio de Negocio verificando todos sus usos dentro de Message Definition trazas (esta información no se captura explícitamente dentro del e-repositorio, aunque es derivable a través de algunos cálculos)

En ese caso tendríamos

<base_package>.business.<business_domain>.componentes.<BusinessComponent>

Por ejemplo, el concepto de Pago:

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