# 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
