Version: 1.0
Fecha: 16 de Marzo, 2026
Estado: NORMATIVO - Referencia de Dependencias
Arquitecto: Carlos Alberto Torres Camargo
Servicio de referencia: nebula-accounting-core
El ecosistema Simappe/Nebula organiza sus librerias en dos capas. Un microservicio Nebula depende de ambas capas.
Coordenadas Maven:
<dependency>
<groupId>com.catcsoft.simappe</groupId>
<artifactId>SimappeCommons</artifactId>
<version>2.9.0</version>
</dependency>
Que provee:
| Componente | Descripcion |
|---|---|
SimappeService<DTO, ID, ENTITY, REPO> |
Clase base para logica de negocio con CRUD generico |
SimappeController |
Clase base para controladores REST con manejo de errores |
SimappeRepository<T, ID> |
Interfaz base que extiende JpaRepository con multi-tenancy |
SimappeRepositoryImpl |
Implementacion del repositorio con soporte multi-tenant |
TenantAwareDataSource |
DataSource que enruta conexiones segun el tenant activo |
TenantDatabaseManager |
Gestiona la inicializacion de DataSources por tenant |
ConnectionContext |
Anotacion que activa el routing multi-tenant en componentes |
EntityIdSupport |
Anotacion para soporte de IDs en entidades |
CrudHtppServletRequestComponent<DTO, ID> |
Interfaz para operaciones CRUD con acceso al request |
PageResponseSupport<R> |
Soporte de paginacion con records de respuesta |
SimappeAdminClient |
Feign Client para comunicacion con SimappeAdmin |
AuditLogService |
Servicio de auditoria via Kafka |
SimappeModelMapper |
Wrapper de ModelMapper con configuracion estandar |
SimappeException |
Excepcion de negocio estandar |
AbstractLoadModels<ID, DTO, ENTITY> |
Clase base para LightLoaders (prevencion N+1) |
SimappeMongoRepositoryImpl |
Implementacion base para repositorios MongoDB |
Dependencias internas de SimappeCommons: JPA, Web, WebFlux, Cache, Validation, MongoDB, Redis, Envers, HikariCP, Kafka, JJWT, Resilience4J, Spring Retry, ModelMapper, Caffeine, MinIO, SpringDoc OpenAPI.
Version actual: 2.9.0 — Verificar en Nexus si hay actualizaciones.
Coordenadas Maven:
<dependency>
<groupId>com.catcsoft.simappe</groupId>
<artifactId>SimappeModel</artifactId>
<version>3.0.0</version>
</dependency>
Que provee:
| Componente | Descripcion |
|---|---|
BusinessBaseEntity<ID> |
Entidad JPA base con campos de auditoria (legacy — PostgreSQL) |
SequenceBusinessBaseEntity |
Entidad JPA base con secuencias (v2.9.0+ — Oracle, PostgreSQL, multi-motor) |
SequenceBaseEntity |
Superclase @Id Long + SEQUENCE (sin multi-tenancy) |
PerTableSequenceGenerator |
Generador de IDs por convención: {schema}.{table}_seq |
BusinessBaseDto |
DTO base con campos comunes |
LongId |
Wrapper de ID tipo Long para entidades (legacy — solo con BusinessBaseEntity) |
ServiceResponseAvailable |
DTO estandar de respuesta de disponibilidad de servicio |
DatabaseConfigV2Dto |
DTO de configuracion de base de datos multi-tenant |
UserSession |
DTO de sesion de usuario con claims del JWT |
AuditLogMessage |
DTO para mensajes de auditoria |
AuditLog |
Documento MongoDB para persistencia de auditoria |
PageDto |
DTO para solicitudes de paginacion |
Naturaleza: Libreria pura de modelos — sin logica de negocio ni dependencias pesadas. Solo Spring Boot Starter, Validation, SpringDoc y Lombok.
Coordenadas Maven:
<dependency>
<groupId>com.centrica.nebula</groupId>
<artifactId>nebula-models</artifactId>
<version>0.0.2-SNAPSHOT</version>
</dependency>
Que provee:
DTOs especificos de negocio Nebula, organizados por dominio:
com.centrica.nebula.model/
├── accounting/
│ ├── CentroCostosDto.java
│ ├── CentroCostosResponse.java (Java Record)
│ ├── TipoCentroCostosDto.java
│ ├── TipoCentroCostosResponse.java (Java Record)
│ └── EstadoCentroCostosEnum.java
├── billing/
│ └── ...
├── inventory/
│ └── ...
└── payroll/
└── ...
Dependencias: Extiende SimappeModel (3.0.0) — los DTOs de negocio heredan de BusinessBaseDto.
Regla critica: Los DTOs de negocio Nebula van siempre en nebula-models, NUNCA en el microservicio ni en SimappeModel.
Referencia detallada: Diseno Nebula Common/Shared
Coordenadas Maven:
<dependency>
<groupId>com.centrica.nebula</groupId>
<artifactId>nebula-commons</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
Que provee: Utilidades comunes del ecosistema Nebula que extienden o complementan SimappeCommons. Incluye servicios base, helpers y configuraciones especificas de Centrica.
Dependencias: Depende de nebula-models (0.0.2-SNAPSHOT) y tiene las mismas dependencias externas que SimappeCommons.
Coordenadas Maven:
<dependency>
<groupId>com.centrica.nebula</groupId>
<artifactId>nebula-shared</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
Que provee: Interfaces WebClient (HTTP Exchange) para comunicacion entre microservicios Nebula. Equivale al patron de "clientes compartidos":
// Ejemplo de interfaz en nebula-shared
@HttpExchange("/api/v1/inventory")
public interface InventoryWebClient {
@GetExchange("/product/get")
Mono<ProductoDto> getProduct(@RequestParam("id") Long id);
}
Dependencias: Depende de nebula-models (0.0.2-SNAPSHOT).
Referencia detallada: Diseno Nebula Common/Shared
Todos los microservicios Nebula heredan de Spring Boot:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.5.11</version>
<relativePath/>
</parent>
No existe un parent POM corporativo. Cada proyecto gestiona sus dependencias de forma independiente.
<properties>
<java.version>25</java.version>
<spring-cloud.version>2025.0.0</spring-cloud.version>
<simappe-commons.version>2.9.0</simappe-commons.version>
<simappe-model.version>3.0.0</simappe-model.version>
<nebula-model.version>0.0.2-SNAPSHOT</nebula-model.version>
</properties>
Bloque 1 — Spring Boot Starters (obligatorios):
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
Bloque 2 — Spring Cloud (obligatorio):
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
Bloque 3 — SQL Database (si enableSql=true):
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate.orm</groupId>
<artifactId>hibernate-core</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate.orm</groupId>
<artifactId>hibernate-community-dialects</artifactId>
</dependency>
<dependency>
<groupId>com.vladmihalcea</groupId>
<artifactId>hibernate-types-60</artifactId>
<version>2.21.1</version>
</dependency>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</dependency>
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc11</artifactId>
<scope>runtime</scope>
</dependency>
Bloque 4 — Librerias internas (obligatorio):
<!-- CAPA 1: Simappe -->
<dependency>
<groupId>com.catcsoft.simappe</groupId>
<artifactId>SimappeCommons</artifactId>
<version>${simappe-commons.version}</version>
</dependency>
<dependency>
<groupId>com.catcsoft.simappe</groupId>
<artifactId>SimappeModel</artifactId>
<version>${simappe-model.version}</version>
</dependency>
<!-- CAPA 2: Nebula -->
<dependency>
<groupId>com.centrica.nebula</groupId>
<artifactId>nebula-models</artifactId>
<version>${nebula-model.version}</version>
</dependency>
Bloque 5 — Utilidades (obligatorio):
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.modelmapper</groupId>
<artifactId>modelmapper</artifactId>
<version>3.2.5</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.6.3</version>
</dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.8.5</version>
</dependency>
<repositories>
<repository>
<id>central</id>
<url>https://repo.maven.apache.org/maven2</url>
</repository>
<repository>
<id>nexus-centrica</id>
<name>Nexus Centrica</name>
<url>https://nexus.centricasoluciones.com/repository/centrica/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
Prerequisito: Tener configurado
~/.m2/settings.xmlcon credenciales de Nexus. Ver Configuracion Nexus y Maven.
<build>
<plugins>
<!-- Spring Boot Plugin -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
<executions>
<execution>
<goals><goal>build-info</goal></goals>
</execution>
</executions>
</plugin>
<!-- Compiler Plugin con Annotation Processors -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>25</source>
<target>25</target>
<compilerArgs>
<arg>-parameters</arg>
</compilerArgs>
<annotationProcessorPaths>
<path>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<version>${spring-boot.version}</version>
</path>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</path>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.6.3</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>
Importante: El orden de los annotation processors importa. Lombok debe ir antes de MapStruct para que los getters/setters generados esten disponibles durante la generacion de mappers.
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
Las librerias tienen dependencias entre si. El orden de mvn install es estricto:
1. SimappeModel (sin dependencias internas)
2. SimappeCommons (depende de SimappeModel)
3. nebula-models (depende de SimappeModel)
4. nebula-commons (depende de nebula-models)
5. nebula-shared (depende de nebula-models)
6. [microservicio] (depende de todo lo anterior)
Detalle completo con comandos: Ver Flujo de Arranque Local.
Las librerias Simappe usan perfiles para seleccionar el repositorio de deploy:
| Perfil | Uso | Comando |
|---|---|---|
repsy (default) |
Repositorio publico Repsy — solo para Simappe core | mvn deploy |
centrica |
Nexus Centrica — para librerias y servicios Nebula | mvn deploy -P centrica |
Regla: Los microservicios Nebula siempre usan el perfil
centricapara deploy.
| Version | Fecha | Autor | Descripcion |
|---|---|---|---|
| 1.0.0 | 2026-03-16 | Carlos Torres | Creacion del documento |
| 1.1.0 | 2026-04-06 | Carlos Torres | Actualizar SimappeCommons a 2.9.0, agregar SequenceBusinessBaseEntity y PerTableSequenceGenerator, corregir Nexus URL a HTTPS |