Version: 1.0
Fecha: 23 de Mayo, 2026
Estado: NORMATIVO
Arquitecto: Carlos Alberto Torres Camargo
stack-2026-05-23 es un upgrade MAYOR del stack Simappe que el licenciante entrega al ecosistema Centrica. La motivacion principal fue consolidar la migracion multitenant (fases F1-F5) que estuvo en desarrollo en SimappeCommons desde la version 3.0.0 hasta la 4.7.4, junto con las propagaciones correspondientes en los servicios Simappe.
graph TB
subgraph LIB[Capa Librerias Simappe]
L1[SimappeCommons<br/>3.0.0 -> 4.7.4<br/>MAYOR]
L2[SimappeModel<br/>3.0.0 -> 3.3.0]
L3[SimappeShared<br/>introducido 1.0.2]
end
subgraph SVC[Capa Servicios Simappe]
S1[SimappeAdmin<br/>4.5.1 -> 4.5.4]
S2[SimappeOauth2Server<br/>1.4.6 -> 1.4.8]
S3[SimappeGatewayServer<br/>2.1.4 -> 2.1.6]
S4[SimappeClient<br/>2.3.0 -> 2.3.3<br/>fix clientProducerFactory]
S5[SimappeEurekaServer<br/>rebuild]
S6[SimappeConfigServer<br/>rebuild + hot fix env-vars]
end
subgraph NEB[Capa Nebula]
N1[nebula-models<br/>bump declarativo]
N2[nebula-masters<br/>bump declarativo]
N3[nebula-accounting-core<br/>migracion 370 errores]
end
subgraph CFG[Configuracion]
C1[simappeconfig main<br/>multitenant flags=false<br/>flyway<br/>notification<br/>db-encryption-key]
C2[compose nodo-01<br/>env_file .env por grupo<br/>profiles common+dev]
end
LIB --> SVC
LIB --> NEB
SVC --> CFG
NEB --> CFG
- Librerias base: SimappeCommons 3.0.0 -> 4.7.4, SimappeModel 3.0.0 -> 3.3.0, SimappeShared (introducido) 1.0.2.
- Servicios Simappe: SimappeAdmin 4.5.1 -> 4.5.4, SimappeOauth2Server 1.4.6 -> 1.4.8, SimappeGatewayServer 2.1.4 -> 2.1.6, SimappeClient 2.3.0 -> 2.3.3 (con fix critico
clientProducerFactory).
- Servicios de infraestructura: SimappeEurekaServer y SimappeConfigServer rebuild con Spring Boot 3.5.14 / Java 25 (mismo numero de version self, distinto binario).
- Configuracion (
simappeconfig): nuevas propiedades en application-common.yml para dev/local/localhost, todas con flags multitenant en false por defecto.
- Hot fix
simappeconfigserver: parametrizacion via ${CONFIG_GIT_URI:} resoluble desde .env del compose (autorizado uno-a-uno por el arquitecto, pendiente formalizar en la proxima release oficial del licenciante).
- Nebula: bumps de dependencias Simappe en
nebula-models, nebula-masters y nebula-accounting-core. Este ultimo requirio migracion de codigo amplia (la API multitenant de Commons 4.7.4 rompio compilacion en 370 puntos, todos resueltos).
| Driver |
Detalle |
| Cierre del programa multitenant-closure-2026 |
Fases F1 a F5 maduraron en el licenciante y estan listas para entrega. Centrica recibe el codigo completo aunque la activacion se difiera. |
| Salto de Spring Boot / Java |
Alineacion del stack en Spring Boot 3.5.14 + Java 25, requisito comun de todos los servicios para garantizar coherencia binaria. |
| Estabilizacion de bug historico |
El bean producerFactory colisionaba entre SimappeCommons.KafkaConfig y SimappeClient.KafkaConfiguration. Tumbo simappe-client en produccion del cliente entre 2026-04-29 y 2026-05-03. Esta entrega trae el rename clientProducerFactory que cierra ese capitulo. |
| Higiene de secretos en la entrega de licencia |
El upgrade incluye parametrizacion de credenciales Git en simappeconfigserver para que el JAR entregado al cliente no contenga referencias al origen del licenciante (GitHub) ni a su PAT. |
| Frente |
Impacto |
| Codigo de servicios Simappe ya entregados al cliente |
Reemplazo completo de imagenes Docker (Eureka, Config, Oauth2, Gateway, Admin, Client). |
| Codigo Nebula (libs y servicios) |
Requirio migracion manual de nebula-accounting-core por breaking changes en Commons 4.7.4. nebula-masters y nebula-models solo necesitaron bump declarativo de versiones. |
Configuracion (simappeconfig) |
Aditiva. Las propiedades nuevas no estaban en el repo del cliente; al agregarlas no rompen el comportamiento previo (gracias a matchIfMissing=false en los @ConditionalOnProperty de Commons). |
Compose del cliente en nodo-01 |
Refactor obligatorio a patron env_file: .env para que cargue tanto common como el perfil de ambiente (dev). Sin esto, las propiedades de application-common.yml quedaban huerfanas. |
| Base de datos |
Sin migraciones obligatorias. Flyway viene activo en Admin con baseline-on-migrate=true y baseline-version=3.8, lo que respeta el estado actual de las tablas como punto de inicio. |
| Multitenant runtime |
Desactivado por defecto. simappe.multitenant.mongo.enabled=false, simappe.multitenant.query-filter.enabled=false. El codigo esta disponible pero no se ejecuta hasta que el cliente lo decida. |
- Login y operacion del stack catcsoft post-deploy: validado por el arquitecto contra Electo. Logs limpios, sin errores. JpaPasswordEncryptionConverter inicializado correctamente con la key del
.env.
- Operacion del stack Centrica DEV post-deploy: validado por el arquitecto via
nodo-01. Los 5 servicios server (config, eureka, gateway, oauth2, monitor-logs) y los 2 servicios negocio (admin, client) + los 2 Nebula deployados (masters, accounting-core) arrancan healthy.
- Warnings detectados: la inicializacion de metadata Hibernate del template Postgres dispara un
HHH000339: current transaction is aborted por uso de hibernate.dialect=OracleDialect hardcoded en MultiTenantJpaConfig.java:286 cuando la connection del template es Postgres. No bloquea runtime (es solo metadata initialization). Ver Pendientes Post-Upgrade.
| # |
Decision |
Motivacion |
| 1 |
Multitenant entregado con flags false |
Permite recibir el codigo sin obligar a tener infra tenant lista. La activacion se decide cuando Centrica tenga su Mongo per-tenant, DB-per-tenant y proceso operativo definidos. |
| 2 |
.env por grupo de compose en lugar de simappe-secrets.env global |
El cliente no usa AWS Secrets como el licenciante. Cada grupo de compose carga su propio .env para variables per-profile + secretos. |
| 3 |
SPRING_PROFILES_ACTIVE=common,dev explicito |
Detectado durante el deploy: el archivo application-common.yml del cliente nunca se cargaba por el config-server porque Spring Cloud Config solo carga archivos que coinciden con perfiles activos. Activar common ademas de dev resuelve esto sin tocar codigo. |
| 4 |
DB_ENCRYPTION_KEY generada del lado del licenciante y entregada al cliente |
Misma key se preserva entre upgrades. Rotarla invalida los rows ya cifrados de database_config_v2. Se documenta en el .env con comentario explicito y debe respaldarse fuera del repo de config. |
| 5 |
simappeconfigserver/application-*.yml con defaults vacios para credenciales Git |
El JAR entregado no contiene credenciales del licenciante. Cada cliente provee sus valores via ${CONFIG_GIT_URI:}, ${CONFIG_GIT_USERNAME:}, ${CONFIG_GIT_PASSWORD:}. |
| 6 |
Rebase de release/2026-05-23 sobre develop en simappeconfigserver y simappegatewayserver |
Los unicos repos con conflicts contra develop. Se preserva la historia limpia (sin merge commits manuales) y los MR a develop quedan sin conflicts para revision del equipo Centrica. |
| 7 |
Hot fix simappeconfigserver directo en workspace de cliente |
Excepcion al "no cambios locales en repos Simappe del cliente". Justificacion: el fix corrige fuga de credenciales en el JAR entregado. Pendiente formalizar en la proxima release oficial del licenciante. |
flowchart LR
A[Licenciante GitHub<br/>release/2026-05-23 + tag] --> B[Push a GitLab Centrica<br/>9 repos Simappe]
B --> C[Deploy libs a Nexus Centrica<br/>mvn deploy -P centrica]
C --> D[Refactor compose nodo-01<br/>env_file .env + profiles common+dev]
D --> E[Build + push imagenes Docker<br/>registry 10.110.0.2:5000]
E --> F[Recreate servicios desde compose<br/>orden topologico]
F --> G[Validar logs + smoke]
G --> H[MR a develop por repo<br/>simappeconfig -> main excepcion]
H --> I[Cleanup branches release/feature<br/>post-estabilidad]
- Preparacion en el licenciante: rama
release/2026-05-23 por repo + tag stack-2026-05-23 annotated; push a origin (GitHub).
- Distribucion a Centrica: push de
release/2026-05-23 + tag a GitLab Centrica (sin merge a develop ni main en el push). 18 pushes (9 branches + 9 tags), sin errores.
- Deploy de libs a Nexus Centrica:
mvn deploy -P centrica para Model, Commons, Shared (Simappe) + Nebula commons, shared, models. Todas las versiones disponibles para resolucion Maven en el ecosistema del cliente.
- Refactor compose del cliente:
env_file: .env por grupo (business/server, business/business, nebula/cross-cutting, nebula/business-domains/finance), perfil common,<profile> activo.
- Build + push imagenes Docker al registry interno del cliente: los 9 servicios Simappe y los 2 Nebula deployados.
- Recreate en
nodo-01 desde compose: orden topologico (config -> eureka -> oauth2 -> gateway -> admin -> client -> nebula).
- Validacion de logs y arranque: todos los servicios healthy. JpaPasswordEncryption inicializado donde aplica. 0 errores criticos.
- MR/PR a
develop de Centrica: 9 MR Simappe y 3 MR Nebula. Conflicts en 2 de 9 (config-server y gateway-server) resueltos via rebase con force-push autorizado. simappeconfig va a main (excepcion documentada en la regla de Git flow del cliente).
| Validacion |
Estado |
Responsable |
| Compile Simappe (workspace licenciante) |
OK |
Licenciante (catcsoft) |
| Compile Nebula (workspace cliente, post-migracion accounting-core) |
OK |
Cliente (Centrica, arquitecto) |
mvn install libs a ~/.m2 cliente |
OK |
Cliente |
| mvn deploy libs a Nexus Centrica |
OK |
Cliente |
| Docker build + push imagenes al registry interno |
OK |
Cliente |
Arranque servicios Simappe en nodo-01 |
OK (5 server + 2 business) |
Cliente |
Arranque servicios Nebula en nodo-01 |
OK (masters + accounting-core) |
Cliente |
| Smoke funcional (login Electo, dashboard campaign, etc.) |
OK (validado por arquitecto contra entorno catcsoft); pendiente confirmacion equipo Centrica fin de semana |
Cliente |
| MR Simappe -> develop |
OK (9 de 9 integrados) |
Equipo Centrica |
| MR Nebula -> develop |
OK (3 de 3 integrados) |
Equipo Centrica |
| simappeconfig -> main (excepcion) |
OK |
Equipo Centrica |
| Riesgo |
Severidad |
Mitigacion |
| Activacion accidental de multitenant en QA o produccion |
media |
Flags en false por defecto. Cualquier activacion requiere cambio explicito en el .env del cliente. |
Rotacion involuntaria de DB_ENCRYPTION_KEY |
alta |
Documentar en runbook. Backup del valor fuera del repo. Cifrado AES-256-GCM = la key es la unica fuente de verdad. |
Driver Oracle (ojdbc11 16.11) considerado legado por Hibernate (>= 19.0 recomendado) |
baja |
Funcional. Actualizar en proximo sprint. |
WARN HHH000339 en inicializacion de metadata Hibernate del template Postgres |
baja |
Sintoma del hibernate.dialect=OracleDialect hardcoded contra una connection Postgres. No afecta operacion. Ver Pendientes. |
| Version |
Fecha |
Autor |
Descripcion |
| 1.0.0 |
2026-05-24 |
Carlos Torres |
Resumen ejecutivo del upgrade stack-2026-05-23 |