Version: 1.0
Fecha: 16 de Marzo, 2026
Estado: NORMATIVO - Procedimiento Obligatorio
Arquitecto: Carlos Alberto Torres Camargo
Servicio de referencia: nebula-accounting-core
SimappeArchetype es un Maven Archetype que genera la estructura completa de un microservicio Nebula en segundos. Produce un proyecto listo para desarrollar con:
SimappeCommons y SimappeModel preconfiguradasCoordenadas Maven del arquetipo:
| Propiedad | Valor |
|---|---|
| groupId | com.catcsoft.simappe |
| artifactId | simappe-archetype |
| version | 2.0.0 |
| packaging | maven-archetype |
mvn archetype:generate \
-DarchetypeGroupId=com.catcsoft.simappe \
-DarchetypeArtifactId=simappe-archetype \
-DarchetypeVersion=2.0.0 \
-DgroupId=com.centrica.nebula.accounting \
-DartifactId=nebula-accounting-core \
-Dversion=1.0.0-SNAPSHOT \
-Dpackage=com.centrica.nebula.accounting.core \
-DserviceName="Nebula Accounting Core" \
-DserviceDescription="Core accounting microservice for general ledger, chart of accounts, third parties, closures, taxes and financial reports" \
-DdatabaseName=nebula_accounting_db \
-DcontextPath=/nebula-accounting-core \
-DauthorName="Carlos Torres" \
-DauthorEmail="torrescamargo@gmail.com" \
-DenableSql=true \
-DenableNoSql=true \
-DenableKafka=true \
-DenableRedis=true \
-DenableAsync=true \
-DenableMonitoring=true \
-DenableMinio=false
# Desde el directorio backend/
cd /ruta/al/workspace/backend
mvn archetype:generate \
-DarchetypeGroupId=com.catcsoft.simappe \
-DarchetypeArtifactId=simappe-archetype \
-DarchetypeVersion=2.0.0 \
-DgroupId=com.centrica.nebula.accounting \
-DartifactId=nebula-accounting-core \
-Dversion=1.0.0-SNAPSHOT \
-DinteractiveMode=false
Nota: Con
-DinteractiveMode=falsese usan los valores por defecto. Se recomienda modo interactivo para revisar cada propiedad.
| Propiedad | Default | Descripcion | Ejemplo Nebula |
|---|---|---|---|
groupId |
com.catcsoft.simappe.module |
Grupo Maven del proyecto | com.centrica.nebula.accounting |
artifactId |
simappe-service |
Nombre del artefacto | nebula-accounting-core |
version |
1.0.0-SNAPSHOT |
Version inicial | 1.0.0-SNAPSHOT |
package |
com.catcsoft.simappe.module.service |
Paquete Java base | com.centrica.nebula.accounting.core |
| Propiedad | Default | Descripcion |
|---|---|---|
serviceName |
SimappeService |
Nombre descriptivo del servicio |
serviceDescription |
Simappe Microservice |
Descripcion para el POM |
databaseName |
simappe_service_db |
Nombre de la base de datos |
contextPath |
/simappe-service |
Context path del servicio |
authorName |
Carlos Torres |
Autor del proyecto |
authorEmail |
torrescamargo@gmail.com |
Email del autor |
El arquetipo permite habilitar o deshabilitar modulos mediante flags. Esto controla que dependencias y configuraciones se incluyen en el proyecto generado.
| Flag | Default | Que Habilita |
|---|---|---|
enableSql |
true |
JPA, PostgreSQL, Hibernate, HikariCP — Multi-tenancy SQL |
enableNoSql |
true |
MongoDB — Almacenamiento de documentos y auditoria |
enableKafka |
true |
Spring Kafka — Mensajeria asincrona y eventos de auditoria |
enableRedis |
true |
Spring Data Redis — Cache distribuido y bloqueos |
enableAsync |
true |
@EnableAsync, @EnableScheduling — Procesamiento asincrono |
enableMonitoring |
true |
Micrometer + Prometheus — Metricas y observabilidad |
enableMinio |
false |
MinIO — Almacenamiento de archivos (solo si el servicio lo requiere) |
Recomendacion: Para servicios Nebula, mantener todos los flags en
trueexceptoenableMinio, a menos que el servicio requiera almacenamiento de archivos.
Al ejecutar el comando, el arquetipo genera la siguiente estructura:
nebula-accounting-core/
├── src/
│ ├── main/
│ │ ├── java/com/centrica/nebula/accounting/core/
│ │ │ ├── config/ # Configuraciones Spring
│ │ │ │ ├── AppConfig.java # TimeZone, PasswordEncoder, beans basicos
│ │ │ │ ├── MultiTenantJpaConfig.java # Multi-tenancy database routing
│ │ │ │ ├── MongoConfiguration.java # Configuracion MongoDB
│ │ │ │ ├── AsyncConfig.java # Pools de hilos asincronos (si enableAsync)
│ │ │ │ ├── KafkaAdapterConfig.java # KafkaTemplate (si enableKafka)
│ │ │ │ ├── ClientConfig.java # WebClient con propagacion de token
│ │ │ │ └── ResourceLockConfiguration.java # Bloqueos distribuidos via Redis
│ │ │ │
│ │ │ ├── v1/ # Paquete versionado de la API
│ │ │ │ ├── controller/ # Endpoints REST
│ │ │ │ ├── service/ # Capa de fachada
│ │ │ │ ├── component/ # Logica de negocio
│ │ │ │ ├── entity/ # Entidades JPA
│ │ │ │ ├── repository/ # Acceso a datos
│ │ │ │ ├── lightloader/ # Transformacion y prevencion N+1
│ │ │ │ └── kafka/ # Listeners y repositorios Kafka/Mongo
│ │ │ │
│ │ │ ├── constants/ # Constantes de dominio
│ │ │ ├── monitoring/ # Metricas custom (si enableMonitoring)
│ │ │ ├── util/ # Utilidades (mensajes i18n, helpers)
│ │ │ │
│ │ │ ├── NebulaAccountingCoreApplication.java # Clase principal
│ │ │ └── ServletInitializer.java # Soporte WAR
│ │ │
│ │ └── resources/
│ │ ├── application.yml # Configuracion base
│ │ ├── application-localhost.yml # Perfil desarrollo local
│ │ ├── application-dev.yml # Perfil desarrollo remoto
│ │ ├── application-prod.yml # Perfil produccion
│ │ ├── banner.txt # Banner de arranque
│ │ └── messages_es.properties # Mensajes i18n
│ │
│ └── test/
│ └── java/com/centrica/nebula/accounting/core/
│ └── v1/ # Tests unitarios por dominio
│
├── pom.xml # Configuracion Maven
├── Dockerfile # Imagen Docker multi-stage
├── docker-compose.yml # Compose para desarrollo local
├── README.md # Documentacion del servicio
├── USAGE.md # Instrucciones de uso
├── CLAUDE.md # Guia para asistencia IA
├── .gitignore # Exclusiones Git
└── bin/
└── deploy-local.sh # Script de despliegue local
Despues de generar el proyecto, el desarrollador debe:
pom.xmlLas versiones del arquetipo pueden no estar actualizadas. Verificar y actualizar:
<properties>
<java.version>25</java.version>
<spring-cloud.version>2025.0.0</spring-cloud.version>
<!-- Verificar versiones actuales en Nexus -->
<simappe-commons.version>2.8.4</simappe-commons.version>
<simappe-model.version>3.0.0</simappe-model.version>
<nebula-model.version>0.0.2-SNAPSHOT</nebula-model.version>
</properties>
El arquetipo base genera solo dependencias a SimappeCommons y SimappeModel. Para proyectos Nebula, agregar:
<dependency>
<groupId>com.centrica.nebula</groupId>
<artifactId>nebula-models</artifactId>
<version>${nebula-model.version}</version>
</dependency>
El arquetipo genera repositorios Repsy (publicos). Para Nebula, cambiar a Nexus Centrica:
<repositories>
<repository>
<id>central</id>
<url>https://repo.maven.apache.org/maven2</url>
</repository>
<repository>
<id>nexus-centrica</id>
<name>Nexus Centrica</name>
<url>http://nexus.centricasoluciones.com/repository/centrica/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
Dentro de v1/, crear subdirectorios por dominio. Ejemplo para nebula-accounting-core:
v1/
├── cdc/ # Centro de Costos
│ ├── controller/
│ ├── service/
│ ├── component/
│ ├── entity/
│ ├── repository/
│ └── lightloader/
├── terceros/ # Terceros (futura funcionalidad)
│ └── ...
└── kafka/ # Componentes Kafka compartidos
Referencia: Ver Estructura de Proyecto y Paquetes para detalle completo.
| Categoria | Tecnologia | Version | Proposito |
|---|---|---|---|
| Runtime | Java | 25 | Lenguaje de ejecucion |
| Framework | Spring Boot | 3.5.11+ | Framework principal |
| Cloud | Spring Cloud | 2025.0.0 | Microservicios (Config, Eureka) |
| SQL | PostgreSQL + Hibernate + HikariCP | Latest | Base de datos relacional multi-tenant |
| NoSQL | MongoDB | Latest | Documentos y auditoria |
| Cache | Redis + Caffeine | Latest | Cache distribuido y local |
| Mensajeria | Apache Kafka | Latest | Eventos asincronos |
| Mapeo | ModelMapper + MapStruct | 3.2.5 / 1.6.3 | Transformacion DTO-Entity |
| API Docs | SpringDoc OpenAPI | 2.8.5 | Swagger UI automatico |
| Seguridad | BouncyCastle | 1.79 | Criptografia |
| Observabilidad | Micrometer + Prometheus | Latest | Metricas y monitoreo |
| Version | Fecha | Autor | Descripcion |
|---|---|---|---|
| 1.0.0 | 2026-03-16 | Carlos Torres | Creacion del documento |