Versión: 1.0
Fecha: 8 de Marzo, 2026
Arquitecto: Carlos Alberto Torres Camargo
Audiencia: Desarrolladores Backend, Frontend, Tech Lead
Este documento es el índice maestro que organiza y referencia todos los documentos de capacitación disponibles para el equipo de fábrica sobre el ecosistema Simappe. Los documentos están organizados por fase de aprendizaje y rol.
FASE 0: PRE-ONBOARDING (Semana 1 - Autoestudio)
├── [A] Conceptos de Negocio ERP
├── [B] Stack Tecnológico Overview
└── [C] Sesión Bienvenida al Ecosistema
FASE 1: ONBOARDING INTENSIVO (Semana 2-3 - Guiado por Arquitecto)
├── BACKEND
│ ├── [D] Anatomía de un Microservicio Simappe
│ ├── [E] SimappeModel y SimappeCommons
│ ├── [F] Multi-Tenancy y Gestión de Contexto
│ ├── [G] Transacciones y Excepciones
│ └── [H] Evaluación Práctica Backend
├── FRONTEND
│ ├── [I] Arquitectura Angular Nebula
│ ├── [J] Reactive Forms y Validaciones
│ ├── [K] Servicios HTTP y State Management
│ └── [L] Evaluación Práctica Frontend
└── INFRAESTRUCTURA
├── [M] Pipeline CI/CD y GitFlow
└── [N] Ambiente de Desarrollo Local
FASE 2: MENTORÍA CONTINUA (Mes 2+)
├── [O] Wiki de Arquitectura (Dosificación Semanal)
├── [P] Troubleshooting Guide
└── [Q] Sesiones Técnicas Rotativas
Los siguientes documentos ya existen en el repositorio y constituyen el material base de la capacitación:
| # | Documento | Ubicación | Tiempo | Prioridad |
|---|---|---|---|---|
| 1 | Arquitectura Simappe + Nebula (2 Capas) | wiki-arquitectura/zona-interna/03-simappe-stack/ARQUITECTURA_SIMAPPE_NEBULA.md |
2 hrs | P0 |
| 2 | Presentación SimappeModel | Documentation/01_Arquitectura_Simappe/V1/SimappeModel/PRESENTACION_SIMAPPEMODEL.md |
1 hr | P0 |
| 3 | Presentación SimappeCommons | Documentation/01_Arquitectura_Simappe/V1/SimappeCommons/PRESENTACION_SIMAPPE_COMMONS.md |
1.5 hrs | P0 |
| 4 | Presentación SimappeAdmin (funcional) | Documentation/01_Arquitectura_Simappe/V1/SimappeAdmin/PRESENTACION_SIMAPPE_ADMIN.md |
1 hr | P1 |
| 5 | Inventario de APIs | Documentation/01_Arquitectura_Simappe/V1/Inventario_APIs/INVENTARIO_APIS.md |
1 hr | P1 |
| # | Documento | Ubicación | Tiempo | Prioridad |
|---|---|---|---|---|
| 6 | Manifiesto de Arquitectura | wiki-arquitectura/zona-interna/01-arquitectura/MANIFIESTO_ARQUITECTURA.md |
1 hr | P0 |
| 7 | Estándares de Desarrollo | wiki-arquitectura/zona-interna/01-arquitectura/ESTANDARES_DESARROLLO.md |
1.5 hrs | P0 |
| 8 | Patrón Arquitectura Backend | wiki-arquitectura/zona-interna/01-arquitectura/PATRON_ARQUITECTURA_BACKEND.md |
1 hr | P0 |
| 9 | Patrón Arquitectura Frontend | wiki-arquitectura/zona-interna/01-arquitectura/PATRON_ARQUITECTURA_FRONTEND.md |
1 hr | P0 |
| 10 | Estándares Calidad y Operación | wiki-arquitectura/zona-interna/01-arquitectura/ESTANDARES_CALIDAD_OPERACION.md |
1 hr | P1 |
| # | Documento | Ubicación | Tiempo | Prioridad |
|---|---|---|---|---|
| 11 | GitFlow Detallado | wiki-arquitectura/zona-interna/04-sdlc/GITFLOW_DETALLADO.md |
1 hr | P0 |
| 12 | Pipeline CI/CD | wiki-arquitectura/zona-interna/04-sdlc/PIPELINE_CICD.md |
1 hr | P0 |
| 13 | Flujo Desarrollo Nebula | wiki-arquitectura/zona-interna/05-implementacion/FLUJO_DESARROLLO_NEBULA.md |
1.5 hrs | P0 |
| 14 | Proceso Arquitecto-Desarrollo | wiki-arquitectura/zona-interna/05-implementacion/PROCESO_ARQUITECTO_DESARROLLO.md |
1 hr | P1 |
| # | Documento | Ubicación | Tiempo | Prioridad |
|---|---|---|---|---|
| 15 | Guía Setup Ambiente Desarrollo | wiki-arquitectura/zona-interna/02-infraestructura/GUIA_SETUP_AMBIENTE_DESARROLLO.md |
2 hrs | P0 |
| 16 | Setup DEV - Databases | wiki-arquitectura/zona-interna/02-infraestructura/setup-nodos/SETUP_DEV_DATABASES.md |
1 hr | P1 |
| 17 | Setup DEV - Gateway | wiki-arquitectura/zona-interna/02-infraestructura/setup-nodos/SETUP_DEV_GATEWAY.md |
1 hr | P1 |
| 18 | Setup DEV - OAuth2 | wiki-arquitectura/zona-interna/02-infraestructura/setup-nodos/SETUP_DEV_OAUTH2.md |
1 hr | P1 |
| 19 | Setup DEV - Core Services | wiki-arquitectura/zona-interna/02-infraestructura/setup-nodos/SETUP_DEV_CORE_SERVICES.md |
1 hr | P1 |
| 20 | Setup DEV - Kafka | wiki-arquitectura/zona-interna/02-infraestructura/setup-nodos/SETUP_DEV_KAFKA.md |
1 hr | P2 |
| # | Documento | Ubicación | Tiempo | Prioridad |
|---|---|---|---|---|
| 21 | Guía Configuración Tenant | wiki-arquitectura/zona-interna/05-implementacion/GUIA_CONFIGURACION_TENANT.md |
1 hr | P1 |
| 22 | Guía Visual Implementación | wiki-arquitectura/zona-interna/01-arquitectura/GUIA_VISUAL_IMPLEMENTACION.md |
1 hr | P1 |
| 23 | Guía Uso Inventario Servicios | wiki-arquitectura/zona-interna/01-arquitectura/GUIA_USO_INVENTARIO_SERVICIOS.md |
30 min | P1 |
| 24 | Modelo Multi-Tenant Database-Based | wiki-arquitectura/zona-interna/01-arquitectura/MODELO_MULTITENANT_DATABASE_BASED.md |
1.5 hrs | P0 |
| 25 | Diseño Log Auditoría MongoDB | wiki-arquitectura/zona-interna/01-arquitectura/DISENO_LOG_AUDITORIA_MONGO.md |
1 hr | P2 |
| 26 | Estrategia Carga Maestros/Migración | wiki-arquitectura/zona-interna/01-arquitectura/ESTRATEGIA_CARGA_MAESTROS_MIGRACION.md |
1 hr | P2 |
| # | Documento | Ubicación | Tiempo | Prioridad |
|---|---|---|---|---|
| 27 | SimappeArchetype README | backend/simappearchetype/README.md |
1 hr | P0 |
| 28 | SimappeArchetype CLAUDE.md | backend/simappearchetype/CLAUDE.md |
30 min | P1 |
| 29 | SimappeCommons CLAUDE.md | backend/simappecommons/CLAUDE.md |
1.5 hrs | P0 |
| 30 | SimappeCommons Presentación | backend/simappecommons/PRESENTACION_SIMAPPE_COMMONS.md |
1 hr | P0 |
| 31 | SimappeCommons Migration Guide | backend/simappecommons/MIGRATION_GUIDE_v2.0.md |
30 min | P2 |
| 32 | SimappeModel CLAUDE.md | backend/SimappeModel/CLAUDE.md |
30 min | P1 |
| # | Documento | Ubicación | Tiempo | Prioridad |
|---|---|---|---|---|
| 33 | Plan Capacitación Backend Java | centrica/08_Cronogramas/02_Iniciativas_Estrategicas/PLAN_CAPACITACION_BACKEND_JAVA.md |
Ref. | P0 |
| 34 | Plan Capacitación Frontend Angular | centrica/08_Cronogramas/02_Iniciativas_Estrategicas/PLAN_CAPACITACION_FRONTEND_ANGULAR.md |
Ref. | P0 |
| # | Documento | Ubicación | Descripción |
|---|---|---|---|
| 35 | ERP Gobernanza | .agent/rules/00-erp-gobernanza-arquitectura-simappe.md |
Reglas de gobernanza ERP |
| 36 | Arquitectura Global | .agent/rules/02-arquitectura-global-simappe.md |
Ubicación artefactos, flujos |
| 37 | Backend Spring Boot | .agent/rules/03-backend-springboot.md |
Estándares backend |
| 38 | Frontend Angular | .agent/rules/04-frontend-angular20.md |
Estándares frontend |
| 39 | Flujo Modificación Libs | .agent/rules/05-flujo-modificacion-librerias.md |
Cómo modificar SimappeModel/Commons |
| 40 | Patrón Guía Algoritmo | .agent/rules/06-patron-guia-algoritmo.md |
Patrones algorítmicos |
| 41 | Debug Backend | .agent/rules/07-debug-backend.md |
Guía debugging backend |
| 42 | Debug Frontend | .agent/rules/08-debug-frontend.md |
Guía debugging frontend |
| 43 | Convenciones Código | .agent/rules/09-convenciones-codigo.md |
Naming, formato, estilo |
| 44 | Checklist Final | .agent/rules/10-checklist-final.md |
Verificación pre-PR |
Objetivo: Que el equipo llegue con conocimiento base antes del contacto con código Simappe.
Para TODOS los roles:
| Hora | Actividad | Material |
|---|---|---|
| 1-2 | ¿Qué es un ERP? Módulos de negocio | Video introductorio + Glosario |
| 3-4 | Plan de Cuentas y Contabilidad básica | Material propio |
| 5-6 | Facturación, Terceros, Inventario | Material propio |
| 7-8 | Nómina, Presupuesto, Contratación | Material propio |
Entregable: Quiz de 20 preguntas (80% para aprobar)
Backend (Sr + Jr):
| Hora | Actividad | Recurso |
|---|---|---|
| 1-3 | Java 25 - Records, Virtual Threads, Pattern Matching | Release notes oficiales |
| 4-6 | Spring Boot 3.5 - Tutorial REST API | spring.io/guides |
| 7-9 | PostgreSQL avanzado - CTEs, Window Functions | Curso SQL |
| 10-11 | Docker para devs Java | Docker official docs |
| 12 | Git Flow Workflow | Atlassian docs |
Frontend (Sr + Jr):
| Hora | Actividad | Recurso |
|---|---|---|
| 1-4 | Angular 21 - Tour of Heroes (oficial) | angular.dev |
| 5-7 | Standalone Components + Signals | Angular docs |
| 8-9 | TypeScript 5.8 - Utility Types, Generics | typescriptlang.org |
| 10-11 | Nx Monorepo - Conceptos básicos | nx.dev docs |
| 12 | Git Flow Workflow | Atlassian docs |
Entregable: Ejercicio práctico por tecnología
Sesión 1 (8 hrs): Anatomía de un Microservicio Simappe
LEER PRIMERO (2 hrs):
├── Documento #1: ARQUITECTURA_SIMAPPE_NEBULA.md
├── Documento #27: SimappeArchetype README
└── Documento #8: PATRON_ARQUITECTURA_BACKEND.md
PRÁCTICA GUIADA (4 hrs):
├── Clonar simappearchetype
├── Seguir flujo de un endpoint desde Controller hasta Database
├── Identificar: DTO, Entity, Repository, Component, Service
└── Dibujar diagrama de secuencia del flujo
SESIÓN CON ARQUITECTO (2 hrs):
├── Presentación "Visión del Ecosistema Simappe"
├── Demo en vivo: Flujo CRUD completo
└── Q&A
Estructura estándar que el equipo debe dominar:
nebula-{servicio}/
├── src/main/java/com/centrica/nebula/{dominio}/
│ ├── config/ # Configuración Spring
│ │ ├── AppConfig.java
│ │ ├── MultiTenantJpaConfig.java
│ │ ├── MongoConfiguration.java
│ │ └── RedisConfig.java
│ ├── v1/ # API versión 1
│ │ ├── controller/ # @RestController - Valida, extrae params
│ │ ├── service/ # @Service - Orquesta, llama components
│ │ ├── component/ # @Component - Lógica de negocio, TX
│ │ ├── entity/ # @Entity - Mapeo JPA
│ │ ├── repository/ # @Repository - Acceso datos
│ │ ├── kafka/ # Productores/Consumidores Kafka
│ │ └── document/ # MongoDB documents (auditoría)
│ └── {Aplicacion}Application.java
├── src/main/resources/
│ ├── application.yml
│ └── application-dev.yml
├── Dockerfile
├── Jenkinsfile
└── pom.xml
Sesión 2 (8 hrs): SimappeModel y SimappeCommons
LEER PRIMERO (3 hrs):
├── Documento #2: PRESENTACION_SIMAPPEMODEL.md
├── Documento #3: PRESENTACION_SIMAPPE_COMMONS.md
├── Documento #29: SimappeCommons CLAUDE.md (CLAVE - patrones detallados)
└── Documento #39: Flujo Modificación Libs
PRÁCTICA GUIADA (3 hrs):
├── Explorar SimappeModel en IDE: buscar DTOs por dominio
├── Explorar SimappeCommons: SimappeService, SimappeRepository, TenantAwareDataSource
├── Agregar un campo nuevo a un DTO existente
├── Instalar SimappeModel localmente (mvn clean install -DskipTests)
├── Recompilar un microservicio Nebula que lo use
└── Verificar que el nuevo campo aparece en el endpoint
SESIÓN CON ARQUITECTO (2 hrs):
├── Deep dive: Herencia de clases en SimappeCommons
├── Demo: Flujo completo de instalación de artefacto
└── Q&A
Flujo de Modificación de Librerías (CRÍTICO):
Desarrollador quiere agregar campo a CentroCostosDto:
1. Crear branch en nebula-models:
git checkout -b feature/add-campo-responsable
2. Modificar DTO:
CentroCostosDto.java → agregar campo 'responsable'
3. Instalar localmente:
cd nebula-models && mvn clean install -DskipTests
4. Actualizar versión en microservicio:
nebula-accounting-core/pom.xml → <version>0.0.3-SNAPSHOT</version>
5. Compilar microservicio:
cd nebula-accounting-core && mvn clean package -DskipTests
6. Crear PR → Revisión del Arquitecto → Merge → CI publica en Nexus
REGLA: NUNCA modificar SimappeModel o SimappeCommons sin aprobación.
Solo se modifica nebula-models y nebula-commons.
Sesión 3 (8 hrs): Multi-Tenancy DATABASE-BASED
LEER PRIMERO (2 hrs):
├── Documento #24: MODELO_MULTITENANT_DATABASE_BASED.md
├── Sección 3 de Documento #1 (ARQUITECTURA_SIMAPPE_NEBULA.md)
└── Documento #21: GUIA_CONFIGURACION_TENANT.md
PRÁCTICA GUIADA (4 hrs):
├── Entender @ConnectionContext y @IgnoreTenant
├── Crear endpoint multi-tenant (filtra por tenant del JWT)
├── Crear endpoint global (sin filtro)
├── Probar con Postman usando diferentes tokens JWT
├── Verificar que cada tenant ve solo sus datos
└── Crear colección Postman con variables de entorno
SESIÓN CON ARQUITECTO (2 hrs):
├── Demo: Cómo SimappeAdmin registra un nuevo tenant
├── Demo: TenantDatabaseManager → HikariCP → Database routing
├── Explicación: database_config_v2 y su estructura
└── Q&A
Conceptos clave que deben dominar:
// ENDPOINT MULTI-TENANT (99% de los endpoints)
@GetMapping("/read")
@ConnectionContext // ← Activa routing al DB del tenant actual
public ResponseEntity<List<CentroCostosDto>> read(HttpServletRequest request) {
// Automáticamente conecta a la BD del tenant extraído del JWT
return ResponseEntity.ok(service.read(request));
}
// ENDPOINT GLOBAL (solo para endpoints de sistema)
@GetMapping("/health")
@IgnoreTenant // ← NO requiere tenant, usa BD del sistema
public ResponseEntity<String> health() {
return ResponseEntity.ok("OK");
}
Sesión 4 (8 hrs): Transacciones, Excepciones y Auditoría
LEER PRIMERO (2 hrs):
├── Documento #25: DISENO_LOG_AUDITORIA_MONGO.md
├── Sección de error handling en Documento #29 (SimappeCommons CLAUDE.md)
└── Documento #7: ESTANDARES_DESARROLLO.md (sección manejo errores)
PRÁCTICA GUIADA (4 hrs):
├── Implementar caso de uso transaccional (Asiento + Detalles)
├── Forzar error y verificar rollback
├── Implementar SimappeException personalizada
├── Configurar auditoría via Kafka → MongoDB
└── Verificar log de auditoría en MongoDB
SESIÓN CON ARQUITECTO (2 hrs):
├── Demo: @Transactional y propagación
├── Demo: GlobalExceptionHandler
├── Demo: Flujo de auditoría Kafka → MongoDB
└── Q&A
Reto: Implementar módulo "Centro de Costos" completo
Requisitos:
├── Entity: TipoCentroCostosEntity + CentroCostosEntity
├── DTOs en nebula-models (modificar e instalar)
├── Repository → Component → Service → Controller (4 capas)
├── Endpoints: GET /read, GET /get/{id}, POST /create, PUT /update, DELETE /delete/{id}
├── Multi-tenancy habilitado (@ConnectionContext)
├── Validaciones: código único, nombre obligatorio
├── Manejo de excepciones
├── Relación: CentroCostos pertenece a un TipoCentroCostos
└── Colección Postman de pruebas
Tiempo: 6 horas
Evaluación: Code review del Arquitecto
Criterios de Aprobación:
├── ✅ Código compila sin errores
├── ✅ Sigue estructura estándar de 4 capas
├── ✅ Multi-tenancy funciona correctamente
├── ✅ Validaciones y excepciones implementadas
└── ✅ Tests de Postman incluidos
Sesión 5 (8 hrs): Estructura Nx y Patrones
LEER PRIMERO (2 hrs):
├── Documento #9: PATRON_ARQUITECTURA_FRONTEND.md
├── Documento ARQUITECTURA_FRONTEND_NEBULA.md (nuevo)
└── Documento #38: Agent Rule Frontend Angular
PRÁCTICA GUIADA (4 hrs):
├── Clonar monorepo Nx nebula-erp
├── Explorar estructura de librerías
├── Entender boundary enforcement (ESLint tags)
├── Crear componente standalone con Signals
├── Implementar Smart Component + Dumb Component
└── Conectar con backend Simappe via HttpClient
SESIÓN CON ARQUITECTO (2 hrs):
├── Presentación: Arquitectura Nx Monorepo (por qué, cómo)
├── Demo: nx graph - visualización de dependencias
├── Demo: Boundary violation → error en lint
└── Q&A
Patrones que deben dominar:
// SMART COMPONENT (Container) - Solo él inyecta servicios
@Component({
standalone: true,
imports: [DataTableComponent],
changeDetection: ChangeDetectionStrategy.OnPush,
template: `
@if (loading()) {
<app-spinner />
} @else {
<app-data-table
[data]="items()"
[columns]="columns"
(rowClick)="onSelect($event)"
/>
}
`
})
export class ItemListComponent {
private service = inject(ItemService);
items = this.service.items; // Signal
loading = this.service.loading; // Signal
onSelect(item: Item) { /* navigate */ }
}
// DUMB COMPONENT (Presentational) - Solo @Input/@Output
@Component({
standalone: true,
selector: 'app-data-table',
changeDetection: ChangeDetectionStrategy.OnPush,
template: `<!-- Solo muestra datos, emite eventos -->`
})
export class DataTableComponent {
@Input() data: unknown[] = [];
@Input() columns: Column[] = [];
@Output() rowClick = new EventEmitter();
}
// SERVICE - Estado + HTTP
@Injectable({ providedIn: 'root' })
export class ItemService {
private http = inject(HttpClient);
private _items = signal<Item[]>([]);
private _loading = signal(false);
readonly items = this._items.asReadonly();
readonly loading = this._loading.asReadonly();
loadAll(): void {
this._loading.set(true);
this.http.get<Item[]>('/api/v1/items/read').subscribe({
next: data => { this._items.set(data); this._loading.set(false); },
error: () => this._loading.set(false)
});
}
}
Sesión 6 (8 hrs): Formularios y Validaciones
PRÁCTICA GUIADA (6 hrs):
├── Crear formulario con Reactive Forms (FormBuilder, FormGroup)
├── Validaciones síncronas (required, min, max, pattern)
├── Validaciones asíncronas (verificar unicidad vía API)
├── Mensajes de error dinámicos
├── Submit → POST al backend → Feedback al usuario
└── Integrar con shared/ui (form-field wrapper)
SESIÓN CON ARQUITECTO (2 hrs):
├── Demo: Patrón de formulario estándar Nebula
├── Demo: Reutilización de validadores cross-domain
└── Q&A
Sesión 7 (8 hrs): HTTP, Signals y State Management
PRÁCTICA GUIADA (6 hrs):
├── Crear servicio HTTP completo (CRUD operations)
├── Implementar estado con Signals (signal, computed, effect)
├── Operadores RxJS clave: switchMap, catchError, debounceTime
├── Interceptors: Token (JWT), Error handling
├── Integrar servicio con componentes list/new/edit
└── Manejar errores y mostrar notificaciones
SESIÓN CON ARQUITECTO (2 hrs):
├── Demo: Signal Store vs Service signals
├── Demo: Token interceptor con multi-tenant context
└── Q&A
Sesión 8 (8 hrs): CI/CD, GitFlow y Ambiente Local
LEER PRIMERO (2 hrs):
├── Documento #11: GITFLOW_DETALLADO.md
├── Documento #12: PIPELINE_CICD.md
├── Documento #13: FLUJO_DESARROLLO_NEBULA.md
└── Documento #15: GUIA_SETUP_AMBIENTE_DESARROLLO.md
PRÁCTICA GUIADA (4 hrs):
├── Configurar ambiente local (Docker Compose)
├── Clonar todos los repos necesarios
├── Configurar settings.xml para Nexus
├── Verificar conexión a servicios DEV (PostgreSQL, MongoDB, Redis, Kafka)
├── Ejecutar microservicio localmente con perfil localhost
└── Ejecutar frontend localmente conectado a backend
SESIÓN CON ARQUITECTO (2 hrs):
├── Demo: Flujo completo GitFlow (feature → develop → release → main)
├── Demo: Pipeline Jenkins (build → test → sonar → deploy)
├── Demo: Conventional commits y versionado semántico
└── Q&A
Reto: Implementar módulo "Tipos de Centro de Costos" End-to-End
Backend:
├── Entity, DTO, Repository, Component, Service, Controller
├── Multi-tenancy habilitado
├── Validaciones y excepciones
└── Publicar en Nexus via PR
Frontend:
├── 4 componentes (list, new, edit, view)
├── Standalone + Signals + OnPush
├── Reactive Forms con validaciones
├── Integración HTTP completa
├── Error handling con notificaciones
└── Lazy-loaded route
DevOps:
├── Branch feature/ desde develop
├── PR con conventional commit
├── Pipeline verde (build + lint + tests)
└── Code review aprobado
Tiempo: 6 horas
Evaluación: Code review del Arquitecto + Demo funcional
Criterios de Aprobación:
├── ✅ Full-stack funcional end-to-end
├── ✅ Backend sigue patrón 4 capas + multi-tenancy
├── ✅ Frontend sigue patrón Smart/Dumb + Signals
├── ✅ GitFlow respetado (branch, PR, conventional commit)
├── ✅ Sin violaciones de boundary enforcement
└── ✅ UX fluida y responsive
| Día | Documento | Rol | Verificación |
|---|---|---|---|
| Lun | #1 ARQUITECTURA_SIMAPPE_NEBULA.md | Todos | Quiz: ¿Qué son las 2 capas? |
| Mar | #6 MANIFIESTO_ARQUITECTURA.md | Todos | Quiz: 5 principios del manifiesto |
| Mié | #7 ESTANDARES_DESARROLLO.md | Todos | Quiz: Naming conventions |
| Jue | #8 PATRON_ARQUITECTURA_BACKEND.md | Backend | Quiz: ¿Qué hace cada capa? |
| Jue | #9 PATRON_ARQUITECTURA_FRONTEND.md | Frontend | Quiz: Smart vs Dumb component |
| Vie | #11 GITFLOW_DETALLADO.md | Todos | Quiz: ¿Cuándo crear release branch? |
| Día | Documento | Rol | Verificación |
|---|---|---|---|
| Lun | #2 PRESENTACION_SIMAPPEMODEL.md | Backend | Ejercicio: Explorar DTOs |
| Lun | #3 PRESENTACION_SIMAPPE_COMMONS.md | Backend | Ejercicio: Identificar clases base |
| Mar | #29 SimappeCommons CLAUDE.md | Backend | Ejercicio: Implementar CRUD |
| Mié | #24 MODELO_MULTITENANT_DATABASE_BASED.md | Backend | Ejercicio: Multi-tenant endpoint |
| Jue | #27 SimappeArchetype README | Backend | Ejercicio: Generar microservicio |
| Vie | #12 PIPELINE_CICD.md | Todos | Ejercicio: Push y verificar pipeline |
| Día | Documento | Rol | Verificación |
|---|---|---|---|
| Lun | ARQUITECTURA_FRONTEND_NEBULA.md | Frontend | Quiz: Tipos de librería Nx |
| Mar | #9 PATRON_ARQUITECTURA_FRONTEND.md | Frontend | Ejercicio: Smart/Dumb component |
| Mié | #13 FLUJO_DESARROLLO_NEBULA.md | Todos | Ejercicio: Feature branch completo |
| Jue | #15 GUIA_SETUP_AMBIENTE_DESARROLLO.md | Todos | Ejercicio: Ambiente local funcional |
| Vie | #21 GUIA_CONFIGURACION_TENANT.md | Backend | Ejercicio: Registrar tenant de prueba |
| Semana | Tema Sesión Grupal (Viernes) | Documento Base |
|---|---|---|
| 4 | Event-Driven Architecture + Kafka | #25 DISENO_LOG_AUDITORIA_MONGO.md |
| 5 | Testing Strategies (Unit, Integration, E2E) | Estándares de Calidad |
| 6 | SQL Avanzado + Query Optimization | Material propio |
| 7 | Seguridad: OWASP Top 10 + JWT | wiki-arquitectura/seguridad/ |
| 8 | Performance: Frontend y Backend | #10 ESTANDARES_CALIDAD_OPERACION.md |
Todo desarrollador DEBE conocer estas clases:
| Clase Base | Hereda En | Propósito |
|---|---|---|
SimappeService<DTO, ID, ENTITY, REPO> |
Todos los Components | CRUD genérico + multi-tenant |
SimappeController |
Todos los Controllers | Response wrapping |
SimappeRepository<T, ID> |
Todos los Repositories | JPA + multi-tenant queries |
BusinessBaseEntity<ID> |
Todas las Entities | Audit fields + tenant |
TenantDatabaseManager |
Config | Routing dinámico de DataSource |
SimappeException |
Excepciones | Error handling unificado |
SimappeModelMapper |
Components | Mapeo DTO ↔ Entity |
AuditLogService |
Components | Envío de eventos a Kafka |
1. USUARIO hace login en Frontend Angular
└─► POST /oauth/token → SimappeOAuth2Server → JWT Token
2. USUARIO navega a /contabilidad/plan-cuentas
└─► Angular lazy-loads accounting-feature-plan-cuentas
└─► Smart Component llama CuentaContableService.loadAll()
3. SERVICE hace HTTP GET
└─► GET /api/v1/accounting/cuenta-contable/read
└─► Token Interceptor agrega: Authorization: Bearer {JWT}
4. GATEWAY (Spring Cloud Gateway)
└─► Valida JWT
└─► Routea a nebula-accounting-core vía Eureka
5. CONTROLLER recibe request
└─► @GetMapping("/read") @ConnectionContext
└─► Llama accountingService.read(request)
6. SERVICE orquesta
└─► Llama component.read(request)
7. COMPONENT ejecuta lógica
└─► TenantDatabaseManager extrae tenantId del JWT
└─► Crea/obtiene DataSource del tenant
└─► repository.findAll() → Query contra BD del tenant
8. ENTITY se mapea a DTO
└─► SimappeModelMapper.map(entity, dto.class)
└─► AuditLogService envía evento a Kafka
9. RESPONSE vuelve al frontend
└─► JSON → Service actualiza Signal → Component re-renderiza
@ConnectionContext // Activa routing multi-tenant (MAYORÍA de endpoints)
@IgnoreTenant // Endpoint sin context de tenant (health, config)
@EntityIdSupport // Auto-genera IDs secuenciales
@Transactional // Transaccionalidad JPA
@SimappeAudit // Auto-registra operación en log de auditoría
| Tipo | Frecuencia | Duración | Horario | Formato |
|---|---|---|---|---|
| Office Hours | 2x/semana | 1 hr | Mar y Jue 10:00-11:00 | Abierto, Q&A |
| Sesión Técnica | 1x/semana | 1 hr | Vie 4:00 PM | Presentación + Q&A |
| Code Review | Bajo demanda | Variable | 24h SLA | Asíncrono (PR) |
| Checkpoint 1:1 | Cada 4 semanas | 30 min | Agendado | Evaluación individual |
¿Tiene duda técnica?
├── ¿Es sobre sintaxis/API? → Google/Stack Overflow/Docs oficiales
├── ¿Es sobre patrón Simappe? → Buscar en Wiki de Arquitectura
├── ¿No encontró respuesta? → Preguntar a Tech Lead
├── ¿Tech Lead no puede resolver? → Office Hours con Arquitecto
└── ¿Es decisión arquitectónica? → Agendar sesión con Arquitecto
REGLA: Máximo 15 min por consulta en Office Hours.
Si requiere más tiempo → se agenda sesión dedicada.
| Métrica | Semana 0 | Semana 4 | Semana 8 | Semana 12 |
|---|---|---|---|---|
| Autonomía en CRUD | 0% | 70% | 90% | 95% |
| PRs sin comentarios arquitectónicos | 0% | 40% | 70% | 80% |
| Tiempo resolución de bloqueos | N/A | < 4 hrs | < 2 hrs | < 1 hr |
| Cobertura de tests | 0% | 60% | 70% | 75%+ |
| Story Points/Sprint | N/A | 20 SP | 30 SP | 35 SP |
| Consultas a Arquitecto/semana | N/A | 10+ | 5 | 2-3 |
| Version | Fecha | Autor | Descripcion |
|---|---|---|---|
| 1.0.0 | 2026-03-08 | Carlos Torres | Consolidación de todos los documentos de capacitación Simappe en guía única |