🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
474 lines
12 KiB
Markdown
474 lines
12 KiB
Markdown
# PLAN REFINADO - FASE 5 (CAPVED)
|
|
|
|
**Fecha:** 2026-01-06
|
|
**Fase:** P (Planeacion - Refinamiento)
|
|
**Plan base:** `PLAN-VALIDACION-DESARROLLO-2026-01-06.md`
|
|
**Orquestador:** Claude Code - Opus 4.5
|
|
|
|
---
|
|
|
|
## RESUMEN DE REFINAMIENTO
|
|
|
|
### Cambios Principales vs Plan Original
|
|
|
|
| Aspecto | Plan Original | Plan Refinado | Impacto |
|
|
|---------|---------------|---------------|---------|
|
|
| GAP-002 (HR Schema) | DB-001 crear schema (8 SP) | **ELIMINADO** - ya existe | -8 SP Sprint 1 |
|
|
| BE-006 (Permission Cache) | Crear config Redis (6 SP) | Reducido (4 SP) - config existe | -2 SP Sprint 2 |
|
|
| Sprint 1 Total | 44 SP | 36 SP | Reduccion 18% |
|
|
| Sprint 2 Total | 39 SP | 37 SP | Reduccion 5% |
|
|
|
|
### Hallazgos de Verificacion
|
|
|
|
**1. 12-hr.sql (871 lineas) - COMPLETO**
|
|
```
|
|
Tablas existentes:
|
|
- hr.departments (con RLS)
|
|
- hr.job_positions (con RLS)
|
|
- hr.employees (50+ columnas, muy completo)
|
|
- hr.contracts (con RLS)
|
|
- hr.leave_types / hr.leaves (con RLS)
|
|
- hr.attendances (COR-026)
|
|
- hr.leave_allocations (COR-027)
|
|
- hr.work_locations (COR-062)
|
|
- hr.skill_types / skills / skill_levels / employee_skills (COR-063)
|
|
- hr.expense_sheets / expenses (COR-064)
|
|
- hr.employee_resume_lines (COR-065)
|
|
- hr.payslip_structures / payslips / payslip_lines (COR-066)
|
|
|
|
ENUMs: contract_status, contract_type, leave_status, leave_type,
|
|
employee_status, expense_status, resume_line_type, payslip_status
|
|
```
|
|
|
|
**2. redis.ts (179 lineas) - COMPLETO**
|
|
```typescript
|
|
Funciones disponibles:
|
|
- initializeRedis(): Promise<boolean>
|
|
- closeRedis(): Promise<void>
|
|
- isRedisConnected(): boolean
|
|
- blacklistToken(token: string, expiresIn: number): Promise<void>
|
|
- isTokenBlacklisted(token: string): Promise<boolean>
|
|
|
|
// Solo necesario: agregar permission-cache.service.ts
|
|
```
|
|
|
|
---
|
|
|
|
## GAPS ACTUALIZADOS
|
|
|
|
### Gaps Cerrados (Ya Implementados)
|
|
|
|
| ID | Gap Original | Razon de Cierre |
|
|
|----|--------------|-----------------|
|
|
| GAP-002 | HR Schema no existe | 12-hr.sql completo (871 lineas, 16+ tablas) |
|
|
|
|
### Gaps Vigentes
|
|
|
|
| ID | Gap | Prioridad | Sprint |
|
|
|----|-----|-----------|--------|
|
|
| GAP-001 | Tests 0% cobertura | P0 | 1-4 |
|
|
| GAP-003 | RLS no validado | P0 | 1 |
|
|
| GAP-004 | Frontend modulos Core Business | P0 | 1-4 |
|
|
| GAP-005 | OAuth/2FA incompleto | P1 | 3 |
|
|
| GAP-006 | Email verification flow | P1 | 4 |
|
|
| GAP-007 | Avatar upload | P1 | Backlog |
|
|
| GAP-008 | Permission cache | P1 | 2 (reducido) |
|
|
|
|
---
|
|
|
|
## PLAN REFINADO POR SPRINT
|
|
|
|
### SPRINT 1 (Refinado): Database Validation + Tests Setup + Catalogs
|
|
|
|
**Story Points Totales:** 36 SP (antes 44 SP)
|
|
|
|
#### Database (13 SP)
|
|
```yaml
|
|
DB-001: # ELIMINADO - HR Schema ya existe
|
|
status: CERRADO
|
|
razon: "12-hr.sql verificado con 16+ tablas completas"
|
|
|
|
DB-002: # Sin cambios
|
|
titulo: "Validar RLS Policies existentes"
|
|
sp: 5
|
|
archivos:
|
|
- database/tests/rls-validation.sql
|
|
- database/tests/tenant-isolation.sql
|
|
|
|
DB-003: # Sin cambios
|
|
titulo: "Implementar system.track_field_changes()"
|
|
sp: 3
|
|
archivos:
|
|
- database/ddl/09-system.sql (modificar)
|
|
|
|
DB-004: # Sin cambios
|
|
titulo: "Crear seed data para catalogos"
|
|
sp: 5
|
|
archivos:
|
|
- database/seeds/01-countries.sql
|
|
- database/seeds/02-currencies.sql
|
|
- database/seeds/03-states.sql
|
|
- database/seeds/04-uom.sql
|
|
```
|
|
|
|
#### Backend (13 SP)
|
|
```yaml
|
|
BE-001: # Sin cambios
|
|
titulo: "Setup Jest + Supertest"
|
|
sp: 5
|
|
archivos:
|
|
- backend/jest.config.js
|
|
- backend/tests/setup.ts
|
|
- backend/tests/factories/
|
|
|
|
BE-002: # Sin cambios
|
|
titulo: "Tests Auth Module (MGN-001)"
|
|
sp: 8
|
|
archivos:
|
|
- backend/src/modules/auth/__tests__/auth.service.spec.ts
|
|
- backend/src/modules/auth/__tests__/auth.controller.spec.ts
|
|
- backend/src/modules/auth/__tests__/auth.integration.spec.ts
|
|
```
|
|
|
|
#### Frontend (10 SP)
|
|
```yaml
|
|
FE-001: # Sin cambios
|
|
titulo: "Feature Catalogs - Structure"
|
|
sp: 5
|
|
archivos:
|
|
- frontend/src/features/catalogs/
|
|
|
|
FE-002: # Sin cambios
|
|
titulo: "Countries & States Pages"
|
|
sp: 5
|
|
archivos:
|
|
- frontend/src/pages/catalogs/countries/
|
|
- frontend/src/features/catalogs/components/CountrySelect.tsx
|
|
```
|
|
|
|
---
|
|
|
|
### SPRINT 2 (Refinado): Tests Foundation + Catalogs Frontend
|
|
|
|
**Story Points Totales:** 37 SP (antes 39 SP)
|
|
|
|
#### Backend (17 SP)
|
|
```yaml
|
|
BE-003: # Sin cambios
|
|
titulo: "Tests Users Module (MGN-002)"
|
|
sp: 5
|
|
|
|
BE-004: # Sin cambios
|
|
titulo: "Tests Roles Module (MGN-003)"
|
|
sp: 5
|
|
|
|
BE-005: # Sin cambios
|
|
titulo: "Tests Tenants Module (MGN-004)"
|
|
sp: 5
|
|
|
|
BE-006: # REDUCIDO - Redis config ya existe
|
|
titulo: "Implementar Permission Cache Service"
|
|
sp: 4 # Antes: 6 SP
|
|
descripcion_refinada: |
|
|
SOLO necesario crear permission-cache.service.ts
|
|
La configuracion de Redis ya existe en config/redis.ts
|
|
Reutilizar: redisClient, isRedisConnected()
|
|
archivos:
|
|
- backend/src/modules/auth/services/permission-cache.service.ts
|
|
dependencias_existentes:
|
|
- backend/src/config/redis.ts (YA EXISTE)
|
|
```
|
|
|
|
#### Frontend (20 SP)
|
|
```yaml
|
|
FE-003: # Sin cambios
|
|
titulo: "Currencies Pages"
|
|
sp: 5
|
|
|
|
FE-004: # Sin cambios
|
|
titulo: "Units of Measure Pages"
|
|
sp: 5
|
|
|
|
FE-005: # Sin cambios
|
|
titulo: "Product Categories Pages"
|
|
sp: 8
|
|
|
|
FE-006: # Movido de Sprint 3
|
|
titulo: "Rutas y navegacion Catalogs"
|
|
sp: 2 # Ajustado: antes 3 SP
|
|
```
|
|
|
|
---
|
|
|
|
### SPRINT 3 (Refinado): OAuth + Settings Frontend
|
|
|
|
**Story Points Totales:** 36 SP (sin cambios significativos)
|
|
|
|
#### Backend (22 SP)
|
|
```yaml
|
|
BE-007: # Sin cambios
|
|
titulo: "Tests Financial Module (MGN-010)"
|
|
sp: 8
|
|
|
|
BE-008: # Sin cambios
|
|
titulo: "Tests Inventory Module (MGN-011)"
|
|
sp: 6
|
|
|
|
BE-009: # Sin cambios
|
|
titulo: "OAuth2 Integration (Google, Microsoft)"
|
|
sp: 8
|
|
archivos:
|
|
- backend/src/modules/auth/providers/google.provider.ts
|
|
- backend/src/modules/auth/providers/microsoft.provider.ts
|
|
```
|
|
|
|
#### Frontend (14 SP)
|
|
```yaml
|
|
FE-007: # Sin cambios
|
|
titulo: "Stores Catalogs (Zustand)"
|
|
sp: 3
|
|
|
|
FE-008: # Sin cambios
|
|
titulo: "Feature Settings - Structure"
|
|
sp: 3
|
|
|
|
FE-009: # Sin cambios
|
|
titulo: "System Settings Page (Admin)"
|
|
sp: 5
|
|
|
|
FE-010: # Nuevo agregado
|
|
titulo: "Tenant Settings Page (inicio)"
|
|
sp: 3
|
|
```
|
|
|
|
---
|
|
|
|
### SPRINT 4 (Refinado): 2FA + Settings Completion
|
|
|
|
**Story Points Totales:** 33 SP (sin cambios)
|
|
|
|
#### Backend (12 SP)
|
|
```yaml
|
|
BE-010: # Sin cambios
|
|
titulo: "2FA/MFA Implementation"
|
|
sp: 8
|
|
|
|
BE-011: # Sin cambios
|
|
titulo: "Email Verification Flow"
|
|
sp: 4
|
|
```
|
|
|
|
#### Frontend (21 SP)
|
|
```yaml
|
|
FE-010: # Continuacion
|
|
titulo: "Tenant Settings Page (completar)"
|
|
sp: 2
|
|
|
|
FE-011: # Sin cambios
|
|
titulo: "User Preferences Page"
|
|
sp: 5
|
|
|
|
FE-012: # Sin cambios
|
|
titulo: "Feature Flags Management"
|
|
sp: 5
|
|
|
|
FE-013: # Sin cambios
|
|
titulo: "Settings Stores (Zustand)"
|
|
sp: 3
|
|
|
|
FE-014: # Sin cambios
|
|
titulo: "Theme Selector Component"
|
|
sp: 3
|
|
|
|
FE-015: # Agregado
|
|
titulo: "Tests Frontend (vitest)"
|
|
sp: 3
|
|
```
|
|
|
|
---
|
|
|
|
## RESUMEN DE STORY POINTS
|
|
|
|
### Comparacion Original vs Refinado
|
|
|
|
| Sprint | Original | Refinado | Diferencia |
|
|
|--------|----------|----------|------------|
|
|
| Sprint 1 | 44 SP | 36 SP | -8 SP (18%) |
|
|
| Sprint 2 | 39 SP | 37 SP | -2 SP (5%) |
|
|
| Sprint 3 | 36 SP | 36 SP | 0 SP |
|
|
| Sprint 4 | 33 SP | 33 SP | 0 SP |
|
|
| **Total** | **152 SP** | **142 SP** | **-10 SP (7%)** |
|
|
|
|
### Redistribucion de Tareas
|
|
|
|
```
|
|
Sprint 1: DATABASE (13) + BACKEND (13) + FRONTEND (10) = 36 SP
|
|
Sprint 2: BACKEND (17) + FRONTEND (20) = 37 SP
|
|
Sprint 3: BACKEND (22) + FRONTEND (14) = 36 SP
|
|
Sprint 4: BACKEND (12) + FRONTEND (21) = 33 SP
|
|
```
|
|
|
|
---
|
|
|
|
## DEPENDENCIAS ACTUALIZADAS
|
|
|
|
### Tareas Eliminadas
|
|
- DB-001 (HR Schema): ELIMINADO - ya existe
|
|
|
|
### Tareas Reducidas
|
|
- BE-006: 6 SP -> 4 SP (Redis config existe)
|
|
|
|
### Nueva Tarea Agregada
|
|
- FE-015: Tests Frontend con Vitest (3 SP en Sprint 4)
|
|
|
|
### Grafo de Dependencias Actualizado
|
|
|
|
```mermaid
|
|
graph TD
|
|
subgraph Database
|
|
DB002[RLS Validation] --> DB003[track_field_changes]
|
|
DB003 --> DB004[Seed Data]
|
|
end
|
|
|
|
subgraph Backend
|
|
BE001[Jest Setup] --> BE002[Auth Tests]
|
|
BE001 --> BE003[Users Tests]
|
|
BE001 --> BE004[Roles Tests]
|
|
BE001 --> BE005[Tenants Tests]
|
|
BE002 --> BE006[Permission Cache]
|
|
BE002 --> BE007[Financial Tests]
|
|
BE002 --> BE008[Inventory Tests]
|
|
BE006 --> BE009[OAuth]
|
|
BE009 --> BE010[2FA]
|
|
BE010 --> BE011[Email Verification]
|
|
end
|
|
|
|
subgraph Frontend
|
|
FE001[Catalogs Structure] --> FE002[Countries]
|
|
FE001 --> FE003[Currencies]
|
|
FE001 --> FE004[UoM]
|
|
FE001 --> FE005[Categories]
|
|
FE002 --> FE006[Routes]
|
|
FE003 --> FE006
|
|
FE004 --> FE006
|
|
FE005 --> FE006
|
|
FE001 --> FE007[Stores]
|
|
FE008[Settings Structure] --> FE009[System]
|
|
FE008 --> FE010[Tenant]
|
|
FE008 --> FE011[User Prefs]
|
|
FE008 --> FE012[Feature Flags]
|
|
FE008 --> FE013[Settings Stores]
|
|
end
|
|
|
|
DB002 -.-> BE005
|
|
BE002 -.-> FE001
|
|
```
|
|
|
|
---
|
|
|
|
## ARCHIVOS A VERIFICAR ANTES DE EJECUCION
|
|
|
|
### Ya Verificados (EXISTEN y COMPLETOS)
|
|
| Archivo | Lineas | Estado |
|
|
|---------|--------|--------|
|
|
| database/ddl/12-hr.sql | 871 | COMPLETO |
|
|
| backend/src/config/redis.ts | 179 | COMPLETO |
|
|
|
|
### A Verificar (Antes de Sprint 1)
|
|
| Archivo | Verificacion Requerida |
|
|
|---------|----------------------|
|
|
| database/ddl/09-system.sql | Existe track_field_changes()? |
|
|
| backend/package.json | jest, supertest instalados? |
|
|
| frontend/package.json | vitest instalado? |
|
|
|
|
---
|
|
|
|
## CRITERIOS DE ACEPTACION POR SPRINT
|
|
|
|
### Sprint 1 Success Criteria (Refinado)
|
|
- [ ] RLS tests creados y pasando (10+ casos)
|
|
- [ ] Jest configurado y primer test pasando
|
|
- [ ] Auth tests: >80% cobertura modulo auth
|
|
- [ ] Seed data idempotente (paises, monedas, uom)
|
|
- [ ] Feature catalogs estructura creada
|
|
- [ ] Countries CRUD funcional
|
|
|
|
### Sprint 2 Success Criteria
|
|
- [ ] Foundation tests: >80% cobertura (Users, Roles, Tenants)
|
|
- [ ] Permission cache: <5ms lookup
|
|
- [ ] Catalogs module 100% funcional (4 paginas CRUD)
|
|
- [ ] Routes de catalogs integradas
|
|
|
|
### Sprint 3 Success Criteria
|
|
- [ ] OAuth Google/Microsoft funcional
|
|
- [ ] Financial tests: >60% cobertura
|
|
- [ ] Inventory tests: >60% cobertura
|
|
- [ ] Settings structure completa
|
|
- [ ] System settings funcional
|
|
|
|
### Sprint 4 Success Criteria
|
|
- [ ] 2FA TOTP funcional con backup codes
|
|
- [ ] Email verification funcional
|
|
- [ ] Settings module 100% funcional
|
|
- [ ] Theme selector integrado
|
|
- [ ] Frontend tests basicos con Vitest
|
|
|
|
---
|
|
|
|
## RECOMENDACIONES FINALES
|
|
|
|
### Para Ejecucion Inmediata
|
|
1. **NO crear 12-hr.sql** - ya existe completo
|
|
2. **Reutilizar redis.ts** - usar redisClient existente
|
|
3. **Verificar 09-system.sql** antes de DB-003
|
|
|
|
### Para Orquestacion
|
|
1. Iniciar con DB-002 (RLS Validation) y BE-001 (Jest Setup) en paralelo
|
|
2. FE-001 puede iniciar sin dependencias de backend
|
|
3. Permission cache (BE-006) usar import desde config/redis.ts
|
|
|
|
### Riesgos Mitigados
|
|
- HR Schema existente elimina riesgo de integracion
|
|
- Redis config existente reduce complejidad de BE-006
|
|
- Sprints mas balanceados mejoran predictibilidad
|
|
|
|
---
|
|
|
|
## APROBACION
|
|
|
|
| Aspecto | Status |
|
|
|---------|--------|
|
|
| Hallazgos verificados | SI |
|
|
| Gaps actualizados | SI |
|
|
| SP recalculados | SI |
|
|
| Dependencias actualizadas | SI |
|
|
| **Plan refinado listo para FASE 6** | **SI** |
|
|
|
|
---
|
|
|
|
**Documento generado por:** ORQUESTADOR (Claude Code Opus 4.5)
|
|
**Sistema:** SIMCO + CAPVED
|
|
**Fase actual:** P (Planeacion - Refinamiento) - COMPLETADA
|
|
**Proxima fase:** FASE 6 - Ejecucion
|
|
|
|
---
|
|
|
|
## SIGUIENTE PASO
|
|
|
|
Proceder con **FASE 6: Ejecucion** siguiendo el orden:
|
|
|
|
1. **Sprint 1 - Semana 1:**
|
|
- DB-002: RLS Validation (Database Agent)
|
|
- BE-001: Jest Setup (Backend Agent)
|
|
- FE-001: Catalogs Structure (Frontend Agent)
|
|
|
|
2. **Sprint 1 - Semana 2:**
|
|
- DB-003 + DB-004 (Database Agent)
|
|
- BE-002: Auth Tests (Backend Agent)
|
|
- FE-002: Countries Pages (Frontend Agent)
|
|
|
|
**Perfiles de agentes requeridos:**
|
|
- PERFIL-DATABASE.md
|
|
- PERFIL-BACKEND-EXPRESS.md
|
|
- PERFIL-FRONTEND.md
|