# 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 - closeRedis(): Promise - isRedisConnected(): boolean - blacklistToken(token: string, expiresIn: number): Promise - isTokenBlacklisted(token: string): Promise // 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