From 63bfe79f778fee79394cd2756a7e726c62462c6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oscar=20Evelio=20Ram=C3=ADrez=20Blanco?= Date: Fri, 31 Jan 2025 00:49:31 +0000 Subject: [PATCH 1/5] version inicial --- src/main/SaludAlpes/SaludAlpes.AsIs.cml | 65 +++++++++ src/main/SaludAlpes/SaludAlpes.ToBe.cml | 172 ++++++++++++++++++++++++ src/main/cml/ejemplo_entrega.cml | 65 +++++++++ 3 files changed, 302 insertions(+) create mode 100644 src/main/SaludAlpes/SaludAlpes.AsIs.cml create mode 100644 src/main/SaludAlpes/SaludAlpes.ToBe.cml create mode 100644 src/main/cml/ejemplo_entrega.cml diff --git a/src/main/SaludAlpes/SaludAlpes.AsIs.cml b/src/main/SaludAlpes/SaludAlpes.AsIs.cml new file mode 100644 index 0000000..16fa3a0 --- /dev/null +++ b/src/main/SaludAlpes/SaludAlpes.AsIs.cml @@ -0,0 +1,65 @@ +/* + * Modelo AS-IS para SaludTech de los Alpes. + * Refleja el estado actual del sistema con límites menos definidos + * y componentes estrechamente acoplados. + */ +ContextMap SaludTechASIS { + contains MonolithicSystem + + /* Todos los subdominios forman actualmente parte de un único sistema monolítico. + * No hay límites claros ni separación de responsabilidades. + */ +} + +/* Sistema monolítico que combina todas las responsabilidades. */ +BoundedContext MonolithicSystem { + Module processing { + basePackage = saludtech.monolith.processing + + Aggregate MedicalImage { + Entity MedicalImage + ValueObject Modality + ValueObject AnatomicalRegion + ValueObject Pathology + } + } + + Module anonymization { + basePackage = saludtech.monolith.anonymization + + Aggregate Anonymization { + Entity AnonymizationScript + ValueObject Validation + } + } + + Module tagging { + basePackage = saludtech.monolith.tagging + + Aggregate Tag { + Entity Tag + ValueObject Demographics + ValueObject ImageAttributes + ValueObject ClinicalContext + } + } + + Module products { + basePackage = saludtech.monolith.products + + Aggregate AIProduct { + Entity STAStandard + Entity STAPro + Entity STAEnterprise + } + } + + Module partnership { + basePackage = saludtech.monolith.partnership + + Aggregate DataPartner { + Entity Contract + ValueObject Compensation + } + } +} \ No newline at end of file diff --git a/src/main/SaludAlpes/SaludAlpes.ToBe.cml b/src/main/SaludAlpes/SaludAlpes.ToBe.cml new file mode 100644 index 0000000..f68724b --- /dev/null +++ b/src/main/SaludAlpes/SaludAlpes.ToBe.cml @@ -0,0 +1,172 @@ +/* + * Modelo DDD para SaludTech de los Alpes implementado en CML. + * La aplicación está dividida en múltiples contextos delimitados. +*/ + +Domain SaludTechDeLosAlpes { + domainVisionStatement = "Adquisicion, procesamiento y distribucion de imagenes medicas anonimizadas para companias de inteligencia artificial (IA)." + + /* Subdominio para el procesamiento de imágenes médicas. */ + Subdomain ImageProcessing { + type = CORE_DOMAIN + domainVisionStatement = "Procesamiento de imagenes medicas de alta calidad para su uso en modelos de inteligencia artificial." + } + + /* Subdominio para la anonimización de datos. */ + Subdomain DataAnonymization { + type = CORE_DOMAIN + domainVisionStatement = "Anonimizacion y limpieza de datos medicos garantizando cumplimiento normativo." + } + + /* Subdominio para la generación de etiquetas y metadatos. */ + Subdomain MetadataTagging { + type = CORE_DOMAIN + domainVisionStatement = "Generacion de etiquetas y enriquecimiento de datos medicos anonimizados." + } + + /* Subdominio para gestionar las relaciones con los socios de datos. */ + Subdomain DataPartnership { + type = CORE_DOMAIN + domainVisionStatement = "Gestion de relaciones con socios de datos para garantizar el suministro sostenible de imagenes medicas." + } + + /* Subdominio para productos para desarrolladores de IA. */ + Subdomain AIProducts { + type = CORE_DOMAIN + domainVisionStatement = "Productos y servicios para desarrolladores de inteligencia artificial basados en datos anonimizados y etiquetados." + } + + /* Subdominio para expansión global y cumplimiento normativo. */ + Subdomain GlobalExpansion { + type = CORE_DOMAIN + domainVisionStatement = "Estrategias para cumplir normativas locales y expandir operaciones en mercados globales." + } + +} + +/* Contexto delimitado para el procesamiento de imágenes médicas. */ +BoundedContext ImageProcessingContext implements ImageProcessing { + domainVisionStatement = "Procesamiento avanzado de imagenes medicas como base para la generacion de etiquetas y modelos de IA." + + Module processing { + basePackage = saludtech.domain.processing + Aggregate MedicalImage { + Entity MedicalImage + ValueObject Modality + ValueObject AnatomicalRegion + ValueObject Pathology + enum ProcessingStatus { + NOT_PROCESSED, IN_PROCESS, PROCESSED + } + } + } +} + +/* Contexto delimitado para la anonimización de datos. */ +BoundedContext DataAnonymizationContext implements DataAnonymization { + domainVisionStatement = "Garantizar la privacidad y limpieza de datos anonimizados antes de su procesamiento." + + Module anonymization { + basePackage = saludtech.domain.anonymization + Aggregate Anonymization { + Entity AnonymizationScript + ValueObject Validation + DomainEvent DataAnonymized + enum AnonymizationStatus { + NOT_ANONYMIZED, ANONYMIZED, ERROR + } + } + } +} + +/* Contexto delimitado para la generación de etiquetas y metadatos. */ +BoundedContext MetadataTaggingContext implements MetadataTagging { + domainVisionStatement = "Enriquecer los datos anonimizados con etiquetas relevantes para desarrolladores de IA." + + Module tagging { + basePackage = saludtech.domain.tagging + Aggregate Tag { + Entity Tag + ValueObject Demographics + ValueObject ImageAttributes + ValueObject ClinicalContext + } + } +} + +/* Contexto delimitado para gestionar las relaciones con los socios de datos. */ +BoundedContext DataPartnershipContext implements DataPartnership { + domainVisionStatement = "Gestionar acuerdos y contratos con socios para garantizar un flujo constante de datos anonimizados." + + Module partnership { + basePackage = saludtech.domain.partnership + Aggregate DataPartner { + Entity Contract + ValueObject Compensation + } + } +} + +/* Contexto delimitado para productos para desarrolladores de IA. */ +BoundedContext AIProductsContext implements AIProducts { + domainVisionStatement = "Proveer soluciones a desarrolladores de IA con datos anonimizados y enriquecidos." + + Module products { + basePackage = saludtech.domain.products + Aggregate AIProduct { + Entity STAStandard + Entity STAPro + Entity STAEnterprise + } + } +} + +/* Contexto delimitado para expansión global y cumplimiento normativo. */ +BoundedContext GlobalExpansionContext implements GlobalExpansion { + domainVisionStatement = "Cumplir con normativas locales y expandir operaciones a nuevos mercados internacionales." + + Module expansion { + basePackage = saludtech.domain.expansion + Aggregate Regulation { + Entity Compliance + ValueObject Region + ValueObject LocalLaws + } + } +} + +ContextMap SaludTechASIS { + state = TO_BE + contains ImageProcessingContext + contains DataAnonymizationContext + contains MetadataTaggingContext + contains DataPartnershipContext + contains AIProductsContext + contains GlobalExpansionContext + + /* + * Núcleo Compartido: ImageProcessingContext y DataAnonymizationContext comparten lógica común. + */ + ImageProcessingContext [SK]<->[SK] DataAnonymizationContext + + /* + * Upstream-Downstream: MetadataTaggingContext depende de los datos procesados por ImageProcessingContext. + */ + ImageProcessingContext [U, OHS, PL]->[D] MetadataTaggingContext + + /* + * Upstream-Downstream: AIProductsContext consume datos de MetadataTaggingContext. + */ + MetadataTaggingContext [U, OHS, PL]->[D] AIProductsContext + + /* + * Proveedor-Cliente: DataPartnershipContext suministra datos a ImageProcessingContext. + */ + DataPartnershipContext [D]<-[U, OHS] ImageProcessingContext + + /* + * Upstream-Downstream: GlobalExpansionContext respalda a AIProductsContext garantizando el cumplimiento normativo. + */ + GlobalExpansionContext [D]<-[U, OHS, PL] AIProductsContext +} + diff --git a/src/main/cml/ejemplo_entrega.cml b/src/main/cml/ejemplo_entrega.cml new file mode 100644 index 0000000..b413383 --- /dev/null +++ b/src/main/cml/ejemplo_entrega.cml @@ -0,0 +1,65 @@ +Domain InformacionBienesRaicesComerciales { + domainVisionStatement = "Adquisición, procesamiento y consolidación de información sobre bienes raíces comerciales" + + Subdomain Auditoria { + type = CORE_DOMAIN + domainVisionStatement = "Auditoría, validación y calidad de datos de bienes comerciales." + } + + Subdomain Companias { + type = CORE_DOMAIN + domainVisionStatement = "Adquisición y consolidación de información legal y comercial de compañías." + } + + Subdomain Contratos { + type = CORE_DOMAIN + domainVisionStatement = "Adquisición y consolidación de información contractual y movimientos inmobiliarios de compañías en propiedades comerciales." + } + + Subdomain Planos { + type = CORE_DOMAIN + domainVisionStatement = "Adquisición y consolidación de datos planos e información catastral de propiedades comerciales." + } + + Subdomain GIS { + type = CORE_DOMAIN + domainVisionStatement = "Adquisición y consolidación de información geo-espacial y alojamiento de propiedades comerciales." + } + + Subdomain Listados { + type = CORE_DOMAIN + domainVisionStatement = "Adquisición y consolidación de listados de propiedades comerciales." + } +} + + +BoundedContext ContextoPropiedad implements Contratos, Planos, GIS, Listados { + +} + +BoundedContext ContextoCompanias implements Companias { + +} + +BoundedContext ContextoAuditoria implements Auditoria { + +} + +ContextMap PropiedadesDeLosAlpes { + state = AS_IS + + contains ContextoPropiedad + contains ContextoCompanias + contains ContextoAuditoria + + /* + * Tenga en cuenta que dado como el sistema se encuentra se puede asumir un Shared Kernel + * pero si usted pensó en otro tipo de relación es totalmente válido + */ + ContextoPropiedad [SK]<->[SK] ContextoCompanias + + ContextoAuditoria [D] <- [U] ContextoPropiedad + + ContextoAuditoria [D] <- [U] ContextoCompanias + +} \ No newline at end of file From 8d59014f17d53bbf271c586fc3793d1940af5ffe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oscar=20Evelio=20Ram=C3=ADrez=20Blanco?= Date: Fri, 31 Jan 2025 01:06:54 +0000 Subject: [PATCH 2/5] =?UTF-8?q?actualizaci=C3=B3n=20as-is?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/SaludAlpes/SaludAlpes.AsIs.cml | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/SaludAlpes/SaludAlpes.AsIs.cml b/src/main/SaludAlpes/SaludAlpes.AsIs.cml index 16fa3a0..85e7360 100644 --- a/src/main/SaludAlpes/SaludAlpes.AsIs.cml +++ b/src/main/SaludAlpes/SaludAlpes.AsIs.cml @@ -49,8 +49,6 @@ BoundedContext MonolithicSystem { Aggregate AIProduct { Entity STAStandard - Entity STAPro - Entity STAEnterprise } } From 912d685b40c80c57e35f94abfded81e12a285eb2 Mon Sep 17 00:00:00 2001 From: miguel parra Date: Sat, 1 Feb 2025 16:06:24 -0500 Subject: [PATCH 3/5] infraestructura multitenad --- src/main/SaludAlpes/SaludAlpes.ToBe.cml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/main/SaludAlpes/SaludAlpes.ToBe.cml b/src/main/SaludAlpes/SaludAlpes.ToBe.cml index f68724b..6c11075 100644 --- a/src/main/SaludAlpes/SaludAlpes.ToBe.cml +++ b/src/main/SaludAlpes/SaludAlpes.ToBe.cml @@ -107,6 +107,19 @@ BoundedContext DataPartnershipContext implements DataPartnership { } } +/* Contexto delimitado para aprovisionamiento ambiente multitenand clientes. */ +BoundedContext AIProductsContext implements AIProducts { + domainVisionStatement = "Proveer infraestructura a desarrolladores de IA con datos anonimizados y enriquecidos." + + Module products { + basePackage = saludtech.domain.products + Aggregate AIProduct { + Entity STAStandard + Entity STAPro + Entity STAEnterprise + } + } +} /* Contexto delimitado para productos para desarrolladores de IA. */ BoundedContext AIProductsContext implements AIProducts { domainVisionStatement = "Proveer soluciones a desarrolladores de IA con datos anonimizados y enriquecidos." From 8cb11fea5acf0427ef43621255bbf5a6282fcb04 Mon Sep 17 00:00:00 2001 From: William Ballesteros Date: Sun, 2 Feb 2025 10:00:02 -0500 Subject: [PATCH 4/5] Update TO BE file --- src/main/SaludAlpes/SaludAlpes.ToBe.cml | 72 ++++++++++++++----------- 1 file changed, 42 insertions(+), 30 deletions(-) diff --git a/src/main/SaludAlpes/SaludAlpes.ToBe.cml b/src/main/SaludAlpes/SaludAlpes.ToBe.cml index 6c11075..a260d89 100644 --- a/src/main/SaludAlpes/SaludAlpes.ToBe.cml +++ b/src/main/SaludAlpes/SaludAlpes.ToBe.cml @@ -42,6 +42,11 @@ Domain SaludTechDeLosAlpes { domainVisionStatement = "Estrategias para cumplir normativas locales y expandir operaciones en mercados globales." } + Subdomain Infrastructure { + type = SUPPORTING_DOMAIN + domainVisionStatement = "Estrategias para cumplir normativas locales y expandir operaciones en mercados globales." + } + } /* Contexto delimitado para el procesamiento de imágenes médicas. */ @@ -107,19 +112,6 @@ BoundedContext DataPartnershipContext implements DataPartnership { } } -/* Contexto delimitado para aprovisionamiento ambiente multitenand clientes. */ -BoundedContext AIProductsContext implements AIProducts { - domainVisionStatement = "Proveer infraestructura a desarrolladores de IA con datos anonimizados y enriquecidos." - - Module products { - basePackage = saludtech.domain.products - Aggregate AIProduct { - Entity STAStandard - Entity STAPro - Entity STAEnterprise - } - } -} /* Contexto delimitado para productos para desarrolladores de IA. */ BoundedContext AIProductsContext implements AIProducts { domainVisionStatement = "Proveer soluciones a desarrolladores de IA con datos anonimizados y enriquecidos." @@ -148,7 +140,34 @@ BoundedContext GlobalExpansionContext implements GlobalExpansion { } } -ContextMap SaludTechASIS { +BoundedContext InfrastructureContext implements Infrastructure { + domainVisionStatement = "Gestión de despliegue, monitoreo, CI/CD, almacenamiento y seguridad" + +Module infrastructure { + basePackage = saludtech.domain.infrastructure + Aggregate Deployment { + Entity Server + ValueObject Id + ValueObject Status + ValueObject Infrastructure_Region + } + Aggregate Security { + Entity AccessControl + ValueObject UserId + ValueObject Role + ValueObject Permissions + } + Aggregate Monitoring { + Entity Log + ValueObject LogId + ValueObject Time + ValueObject Message + ValueObject Severity + } + } +} + +ContextMap SaludTechTOBE { state = TO_BE contains ImageProcessingContext contains DataAnonymizationContext @@ -156,30 +175,23 @@ ContextMap SaludTechASIS { contains DataPartnershipContext contains AIProductsContext contains GlobalExpansionContext + contains InfrastructureContext - /* - * Núcleo Compartido: ImageProcessingContext y DataAnonymizationContext comparten lógica común. - */ + /* Núcleo Compartido: ImageProcessingContext y DataAnonymizationContext comparten lógica común. */ ImageProcessingContext [SK]<->[SK] DataAnonymizationContext - /* - * Upstream-Downstream: MetadataTaggingContext depende de los datos procesados por ImageProcessingContext. - */ + /* Upstream-Downstream: MetadataTaggingContext depende de los datos procesados por ImageProcessingContext. */ ImageProcessingContext [U, OHS, PL]->[D] MetadataTaggingContext - /* - * Upstream-Downstream: AIProductsContext consume datos de MetadataTaggingContext. - */ + /* Upstream-Downstream: AIProductsContext consume datos de MetadataTaggingContext. */ MetadataTaggingContext [U, OHS, PL]->[D] AIProductsContext - /* - * Proveedor-Cliente: DataPartnershipContext suministra datos a ImageProcessingContext. - */ + /* Proveedor-Cliente: DataPartnershipContext suministra datos a ImageProcessingContext. */ DataPartnershipContext [D]<-[U, OHS] ImageProcessingContext - /* - * Upstream-Downstream: GlobalExpansionContext respalda a AIProductsContext garantizando el cumplimiento normativo. - */ + /* Upstream-Downstream: GlobalExpansionContext respalda a AIProductsContext garantizando el cumplimiento normativo. */ GlobalExpansionContext [D]<-[U, OHS, PL] AIProductsContext -} + /* Soporte: InfrastructureContext actúa como proveedor de servicios exclusivamente para AIProductsContext. */ + AIProductsContext [D] <-[U, OHS] InfrastructureContext +} \ No newline at end of file From bebf54ef50c1df1b14126bcebb174f6d1b88c4c9 Mon Sep 17 00:00:00 2001 From: milindr4123 Date: Sun, 2 Feb 2025 18:08:42 -0500 Subject: [PATCH 5/5] add definition user stories --- src/main/SaludAlpes/SaludAlpes.ToBe.cml | 50 +++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/src/main/SaludAlpes/SaludAlpes.ToBe.cml b/src/main/SaludAlpes/SaludAlpes.ToBe.cml index a260d89..7465214 100644 --- a/src/main/SaludAlpes/SaludAlpes.ToBe.cml +++ b/src/main/SaludAlpes/SaludAlpes.ToBe.cml @@ -10,41 +10,91 @@ Domain SaludTechDeLosAlpes { Subdomain ImageProcessing { type = CORE_DOMAIN domainVisionStatement = "Procesamiento de imagenes medicas de alta calidad para su uso en modelos de inteligencia artificial." + + /* Historia de Usuario: + * Como investigador en IA, + * quiero que las imágenes médicas estén preprocesadas y optimizadas, + * para garantizar la calidad y consistencia en el entrenamiento de modelos. + */ + + } /* Subdominio para la anonimización de datos. */ Subdomain DataAnonymization { type = CORE_DOMAIN domainVisionStatement = "Anonimizacion y limpieza de datos medicos garantizando cumplimiento normativo." + + /* Historia de Usuario: + * Como administrador de datos, + * quiero que toda la información sensible sea anonimizada automáticamente, + * para cumplir con regulaciones como HIPAA y proteger la privacidad del paciente. + */ + } /* Subdominio para la generación de etiquetas y metadatos. */ Subdomain MetadataTagging { type = CORE_DOMAIN domainVisionStatement = "Generacion de etiquetas y enriquecimiento de datos medicos anonimizados." + + /* Historia de Usuario: + * Como científico de datos, + * quiero acceder a conjuntos de datos enriquecidos con etiquetas y metadatos relevantes, + * para mejorar la precisión y relevancia de los modelos entrenados. + */ + } /* Subdominio para gestionar las relaciones con los socios de datos. */ Subdomain DataPartnership { type = CORE_DOMAIN domainVisionStatement = "Gestion de relaciones con socios de datos para garantizar el suministro sostenible de imagenes medicas." + + /* Historia de Usuario: + * Como gerente de asociaciones, + * quiero gestionar acuerdos con socios de datos de manera eficiente, + * para garantizar un flujo constante y confiable de imágenes médicas. + */ + } /* Subdominio para productos para desarrolladores de IA. */ Subdomain AIProducts { type = CORE_DOMAIN domainVisionStatement = "Productos y servicios para desarrolladores de inteligencia artificial basados en datos anonimizados y etiquetados." + + /* Historia de Usuario: + * Como desarrollador de IA, + * quiero acceder fácilmente a datasets anonimizados y etiquetados, + * para entrenar modelos de IA sin preocuparme por la privacidad y el cumplimiento normativo. + */ + } /* Subdominio para expansión global y cumplimiento normativo. */ Subdomain GlobalExpansion { type = CORE_DOMAIN domainVisionStatement = "Estrategias para cumplir normativas locales y expandir operaciones en mercados globales." + + /* Historia de Usuario: + * Como director de expansión, + * quiero que el sistema cumpla con las normativas locales de cada país, + * para asegurar la continuidad del negocio en mercados globales. + */ + } Subdomain Infrastructure { type = SUPPORTING_DOMAIN domainVisionStatement = "Estrategias para cumplir normativas locales y expandir operaciones en mercados globales." + + /* Historia de Usuario: + * Como ingeniero de operaciones, + * quiero que los pipelines de CI/CD sean rápidos y confiables, + * para garantizar despliegues frecuentes y sin interrupciones. + */ + } }