# PLAN DE VALIDACIÓN Y DESARROLLO - ERP-CORE

**Fecha:** 2026-01-06
**Versión:** 1.0.0
**Fase:** CAPVED - Planeación (P)
**Orquestador:** Claude Code - Opus 4.5

---

## RESUMEN EJECUTIVO

### Estado Actual del Proyecto

| Capa | Implementado | Documentado | Gap |
|------|-------------|-------------|-----|
| **Backend** | 85% Foundation, 55% Core | 95% | Tests 0% |
| **Database** | 85% (100+ tablas, 8 schemas) | 100% | HR Schema falta |
| **Frontend** | 4 features (Users, Companies, Partners, Tenants) | 55% | Módulos Core Business |
| **Documentación** | 834 archivos, 16 MB | 55% global | US 49%, Trazabilidad 7% |

### Métricas Clave Consolidadas

```yaml
backend:
  entidades_typeorm: 46
  endpoints_implementados: 398
  lineas_codigo: ~10,500+
  modulos_foundation: 85%+ implementado
  modulos_core_business: 40-75% implementado
  tests_cobertura: 0% (CRÍTICO)

database:
  schemas: 8 (auth, core, analytics, financial, inventory, purchase, sales, projects)
  tablas: 100+
  funciones: 40+
  triggers: 30+
  rls_policies: 40+
  hr_schema: NO EXISTE (CRÍTICO)

frontend:
  features_completas: 4/15 (users, companies, partners, tenants)
  paginas: 21
  componentes_compartidos: 23
  stores_zustand: 4
  modulos_placeholder: 11 (catalogs, settings, audit, notifications, financial, inventory, sales, purchases, crm, projects, hr)

documentacion:
  total_archivos: 834
  epicas: 23/23 (100%)
  rf: 80+ (100%)
  et_backend: 86 (95%)
  et_frontend: 80 (85%)
  user_stories: 72/146 (49%)
  specs_transversales: 30 (100%)
  trazabilidad_yaml: 1/14 (7%)
```

---

## FASE 2: PLAN DE ACCIÓN

### 1. GAPS CRÍTICOS IDENTIFICADOS

#### 1.1 CRÍTICO - Bloquean Producción

| ID | Gap | Capa | Impacto | Esfuerzo | Prioridad |
|----|-----|------|---------|----------|-----------|
| GAP-001 | Tests 0% cobertura | Backend | Muy Alto | Alto | P0 |
| GAP-002 | HR Schema no existe | Database | Alto | Medio | P0 |
| GAP-003 | RLS no validado | Database | Muy Alto | Medio | P0 |
| GAP-004 | Frontend módulos Core Business | Frontend | Alto | Alto | P0 |

#### 1.2 ALTO - Afectan Funcionalidad

| ID | Gap | Capa | Impacto | Esfuerzo | Prioridad |
|----|-----|------|---------|----------|-----------|
| GAP-005 | OAuth/2FA incompleto | Backend | Alto | Medio | P1 |
| GAP-006 | Email verification flow | Backend | Alto | Bajo | P1 |
| GAP-007 | Avatar upload | Backend | Medio | Bajo | P1 |
| GAP-008 | Permission cache | Backend | Alto | Medio | P1 |
| GAP-009 | Stock alerts | Backend | Medio | Bajo | P1 |
| GAP-010 | CFDI/PAC integration | Backend | Alto | Alto | P1 |

#### 1.3 MEDIO - Mejoras

| ID | Gap | Capa | Impacto | Esfuerzo | Prioridad |
|----|-----|------|---------|----------|-----------|
| GAP-011 | Audit module completo | Backend | Medio | Medio | P2 |
| GAP-012 | WebSocket notifications | Backend | Medio | Medio | P2 |
| GAP-013 | Reports generator | Backend | Medio | Alto | P2 |
| GAP-014 | Swagger/OpenAPI docs | Backend | Bajo | Bajo | P2 |

---

### 2. PLAN DE REMEDIACIÓN POR CAPA

#### 2.1 DATABASE - Acciones Inmediatas

```yaml
SPRINT_1_DATABASE:
  titulo: "Completar HR Schema y Validar RLS"
  duracion: "1 sprint (2 semanas)"
  story_points: 21

  tareas:
    - id: DB-001
      titulo: "Crear HR Schema completo"
      descripcion: |
        Crear schema hr con tablas:
        - employees (20+ columnas)
        - departments (8 columnas)
        - contracts (15 columnas)
        - timesheets (12 columnas)
        - leaves (10 columnas)
        - payslips (15 columnas)
      archivos:
        - database/ddl/10-hr.sql
      sp: 8
      dependencias: [04-financial.sql]

    - id: DB-002
      titulo: "Validar RLS Policies existentes"
      descripcion: |
        Crear tests de penetración para:
        - Verificar aislamiento de tenants
        - Validar get_current_tenant_id()
        - Test cross-tenant access attempts
      archivos:
        - database/tests/rls-validation.sql
        - database/tests/tenant-isolation.sql
      sp: 5
      dependencias: []

    - id: DB-003
      titulo: "Implementar system.track_field_changes()"
      descripcion: |
        Función para mail.thread pattern
        Triggers invocan esta función pero no existe
      archivos:
        - database/ddl/09-system.sql (modificar)
      sp: 3
      dependencias: []

    - id: DB-004
      titulo: "Crear seed data para catálogos"
      descripcion: |
        Seeders idempotentes para:
        - countries (ISO 3166-1)
        - currencies (ISO 4217)
        - states (México, USA)
        - uom (unidades estándar)
      archivos:
        - database/seeds/01-countries.sql
        - database/seeds/02-currencies.sql
        - database/seeds/03-states.sql
        - database/seeds/04-uom.sql
      sp: 5
      dependencias: []
```

#### 2.2 BACKEND - Acciones Inmediatas

```yaml
SPRINT_1_BACKEND:
  titulo: "Tests Foundation + Permission Cache"
  duracion: "1 sprint (2 semanas)"
  story_points: 34

  tareas:
    - id: BE-001
      titulo: "Setup Jest + Supertest"
      descripcion: |
        Configurar framework de testing:
        - Jest config
        - Supertest para integration tests
        - Test database setup
        - Fixtures y factories
      archivos:
        - backend/jest.config.js
        - backend/tests/setup.ts
        - backend/tests/factories/
      sp: 5
      dependencias: []

    - id: BE-002
      titulo: "Tests Auth Module (MGN-001)"
      descripcion: |
        24+ test cases:
        - Login (happy path, invalid email, wrong password, rate limit)
        - Register (success, duplicate email, weak password)
        - Refresh token (valid, expired, revoked)
        - Logout (single, all sessions)
        - Change password
      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
      sp: 8
      dependencias: [BE-001]

    - id: BE-003
      titulo: "Tests Users Module (MGN-002)"
      descripcion: |
        18+ test cases:
        - CRUD operations
        - Search and filters
        - Role assignment
        - Activate/deactivate
      archivos:
        - backend/src/modules/users/__tests__/
      sp: 5
      dependencias: [BE-001]

    - id: BE-004
      titulo: "Tests Roles Module (MGN-003)"
      descripcion: |
        15+ test cases:
        - Permission assignment
        - System role protection
        - Permission validation
      archivos:
        - backend/src/modules/roles/__tests__/
      sp: 5
      dependencias: [BE-001]

    - id: BE-005
      titulo: "Tests Tenants Module (MGN-004)"
      descripcion: |
        12+ test cases:
        - Tenant isolation
        - Feature flags
        - Plan limits
      archivos:
        - backend/src/modules/tenants/__tests__/
      sp: 5
      dependencias: [BE-001]

    - id: BE-006
      titulo: "Implementar Permission Cache (Redis)"
      descripcion: |
        Cache de permisos por usuario:
        - Redis como backend
        - TTL 1 hora
        - Invalidación en cambio de rol
        Target: < 5ms lookup
      archivos:
        - backend/src/modules/auth/services/permission-cache.service.ts
        - backend/src/config/redis.config.ts
      sp: 6
      dependencias: []

SPRINT_2_BACKEND:
  titulo: "Tests Core Business + OAuth/2FA"
  duracion: "1 sprint (2 semanas)"
  story_points: 34

  tareas:
    - id: BE-007
      titulo: "Tests Financial Module (MGN-010)"
      descripcion: |
        20+ test cases:
        - Journal entries balance validation
        - Invoice workflow
        - Payment reconciliation
      archivos:
        - backend/src/modules/financial/__tests__/
      sp: 8
      dependencias: [BE-001]

    - id: BE-008
      titulo: "Tests Inventory Module (MGN-011)"
      descripcion: |
        15+ test cases:
        - Stock moves
        - Valuation (FIFO, LIFO, Average)
        - Adjustments
      archivos:
        - backend/src/modules/inventory/__tests__/
      sp: 6
      dependencias: [BE-001]

    - id: BE-009
      titulo: "OAuth2 Integration (Google, Microsoft)"
      descripcion: |
        Implementar flujo OAuth2:
        - Google OAuth provider
        - Microsoft OAuth provider
        - Link/unlink accounts
      archivos:
        - backend/src/modules/auth/providers/google.provider.ts
        - backend/src/modules/auth/providers/microsoft.provider.ts
        - backend/src/modules/auth/auth.controller.ts (endpoints OAuth)
      sp: 8
      dependencias: []

    - id: BE-010
      titulo: "2FA/MFA Implementation"
      descripcion: |
        Implementar 2FA:
        - TOTP setup (Google Authenticator)
        - Backup codes
        - SMS verification (opcional)
      archivos:
        - backend/src/modules/auth/services/mfa.service.ts
        - backend/src/modules/auth/auth.controller.ts (endpoints MFA)
      sp: 8
      dependencias: []

    - id: BE-011
      titulo: "Email Verification Flow"
      descripcion: |
        Flujo completo:
        - Send verification email
        - Verify token
        - Resend verification
      archivos:
        - backend/src/modules/auth/services/email-verification.service.ts
        - backend/src/shared/services/email.service.ts
      sp: 4
      dependencias: []
```

#### 2.3 FRONTEND - Acciones Inmediatas

```yaml
SPRINT_1_FRONTEND:
  titulo: "Implementar Catalogs Module (MGN-005)"
  duracion: "1 sprint (2 semanas)"
  story_points: 34

  tareas:
    - id: FE-001
      titulo: "Feature Catalogs - Structure"
      descripcion: |
        Crear estructura del feature:
        - api/catalogs.api.ts
        - hooks/ (useCountries, useCurrencies, useUom, useCategories)
        - types/catalog.types.ts
        - components/ (forms, lists, selects)
      archivos:
        - frontend/src/features/catalogs/
      sp: 5
      dependencias: []

    - id: FE-002
      titulo: "Countries & States Pages"
      descripcion: |
        CRUD completo:
        - CountriesListPage
        - StatesByCountryPage
        - CountrySelect, StateSelect components
      archivos:
        - frontend/src/pages/catalogs/countries/
        - frontend/src/features/catalogs/components/CountrySelect.tsx
      sp: 5
      dependencias: [FE-001]

    - id: FE-003
      titulo: "Currencies Pages"
      descripcion: |
        CRUD + Exchange rates:
        - CurrenciesListPage
        - ExchangeRatesPage
        - CurrencySelect, CurrencyRateForm
      archivos:
        - frontend/src/pages/catalogs/currencies/
      sp: 5
      dependencias: [FE-001]

    - id: FE-004
      titulo: "Units of Measure Pages"
      descripcion: |
        CRUD:
        - UomCategoriesListPage
        - UomListPage
        - UomSelect, UomForm
      archivos:
        - frontend/src/pages/catalogs/uom/
      sp: 5
      dependencias: [FE-001]

    - id: FE-005
      titulo: "Product Categories Pages"
      descripcion: |
        CRUD con jerarquía:
        - CategoriesTreePage
        - CategoryForm
        - CategoryTree component (expandable)
      archivos:
        - frontend/src/pages/catalogs/categories/
      sp: 8
      dependencias: [FE-001]

    - id: FE-006
      titulo: "Rutas y navegación Catalogs"
      descripcion: |
        Actualizar router:
        - /catalogs/countries
        - /catalogs/currencies
        - /catalogs/uom
        - /catalogs/categories
      archivos:
        - frontend/src/app/router/routes.tsx
      sp: 3
      dependencias: [FE-002, FE-003, FE-004, FE-005]

    - id: FE-007
      titulo: "Stores Catalogs (Zustand)"
      descripcion: |
        Crear stores:
        - useCurrencyStore (current currency)
        - useCatalogCacheStore (cached lists)
      archivos:
        - frontend/src/shared/stores/useCurrencyStore.ts
        - frontend/src/shared/stores/useCatalogCacheStore.ts
      sp: 3
      dependencias: []

SPRINT_2_FRONTEND:
  titulo: "Implementar Settings Module (MGN-006)"
  duracion: "1 sprint (2 semanas)"
  story_points: 29

  tareas:
    - id: FE-008
      titulo: "Feature Settings - Structure"
      descripcion: |
        Crear estructura:
        - api/settings.api.ts
        - hooks/ (useSystemSettings, useTenantSettings, useUserPreferences)
        - types/settings.types.ts
      archivos:
        - frontend/src/features/settings/
      sp: 3
      dependencias: []

    - id: FE-009
      titulo: "System Settings Page (Admin)"
      descripcion: |
        Configuración global del sistema:
        - General settings
        - Email configuration
        - Security settings
      archivos:
        - frontend/src/pages/settings/SystemSettingsPage.tsx
      sp: 5
      dependencias: [FE-008]

    - id: FE-010
      titulo: "Tenant Settings Page"
      descripcion: |
        Configuración del tenant:
        - Branding (logo, colors)
        - Localization (language, timezone, dateFormat)
        - Features enabled
      archivos:
        - frontend/src/pages/settings/TenantSettingsPage.tsx
      sp: 5
      dependencias: [FE-008]

    - id: FE-011
      titulo: "User Preferences Page"
      descripcion: |
        Preferencias del usuario:
        - Theme (light/dark/system)
        - Language preference
        - Notification settings
      archivos:
        - frontend/src/pages/settings/UserPreferencesPage.tsx
      sp: 5
      dependencias: [FE-008]

    - id: FE-012
      titulo: "Feature Flags Management"
      descripcion: |
        Gestión de feature flags:
        - FeatureFlagsListPage
        - FeatureFlagToggle component
        - Por tenant
      archivos:
        - frontend/src/pages/settings/FeatureFlagsPage.tsx
      sp: 5
      dependencias: [FE-008]

    - id: FE-013
      titulo: "Settings Stores (Zustand)"
      descripcion: |
        Crear stores:
        - useSettingsStore
        - useFeatureFlagsStore
      archivos:
        - frontend/src/shared/stores/useSettingsStore.ts
        - frontend/src/shared/stores/useFeatureFlagsStore.ts
      sp: 3
      dependencias: []

    - id: FE-014
      titulo: "Theme Selector Component"
      descripcion: |
        Componente para cambiar tema:
        - Light/Dark/System
        - Persistent en localStorage
        - Aplica clases Tailwind
      archivos:
        - frontend/src/shared/components/organisms/ThemeSelector.tsx
      sp: 3
      dependencias: []
```

---

### 3. CRONOGRAMA DE SPRINTS

```yaml
SPRINT_0: # Actual
  fechas: "2026-01-06 a 2026-01-19"
  objetivo: "Validación y Planeación"
  tareas:
    - Análisis exhaustivo (COMPLETADO)
    - Planeación detallada (EN PROGRESO)
    - Validación del plan
    - Análisis de dependencias
  entregables:
    - PLAN-VALIDACION-DESARROLLO-2026-01-06.md
    - ANALISIS-DEPENDENCIAS.md
    - Refinamiento del plan

SPRINT_1:
  fechas: "2026-01-20 a 2026-02-02"
  objetivo: "Foundation - Tests + Database Completion"
  capas:
    database:
      - DB-001: HR Schema (8 SP)
      - DB-002: RLS Validation (5 SP)
      - DB-003: track_field_changes() (3 SP)
      - DB-004: Seed data (5 SP)
    backend:
      - BE-001: Jest Setup (5 SP)
      - BE-002: Auth Tests (8 SP)
    frontend:
      - FE-001: Catalogs Structure (5 SP)
      - FE-002: Countries Pages (5 SP)
  total_sp: 44

SPRINT_2:
  fechas: "2026-02-03 a 2026-02-16"
  objetivo: "Tests Core + OAuth + Catalogs Frontend"
  capas:
    backend:
      - BE-003: Users Tests (5 SP)
      - BE-004: Roles Tests (5 SP)
      - BE-005: Tenants Tests (5 SP)
      - BE-006: Permission Cache (6 SP)
    frontend:
      - FE-003: Currencies Pages (5 SP)
      - FE-004: UoM Pages (5 SP)
      - FE-005: Categories Pages (8 SP)
  total_sp: 39

SPRINT_3:
  fechas: "2026-02-17 a 2026-03-02"
  objetivo: "OAuth/2FA + Settings Frontend"
  capas:
    backend:
      - BE-007: Financial Tests (8 SP)
      - BE-008: Inventory Tests (6 SP)
      - BE-009: OAuth Integration (8 SP)
    frontend:
      - FE-006: Catalogs Routes (3 SP)
      - FE-007: Catalogs Stores (3 SP)
      - FE-008: Settings Structure (3 SP)
      - FE-009: System Settings (5 SP)
  total_sp: 36

SPRINT_4:
  fechas: "2026-03-03 a 2026-03-16"
  objetivo: "2FA + Settings Completion + Financial Frontend"
  capas:
    backend:
      - BE-010: 2FA Implementation (8 SP)
      - BE-011: Email Verification (4 SP)
    frontend:
      - FE-010: Tenant Settings (5 SP)
      - FE-011: User Preferences (5 SP)
      - FE-012: Feature Flags (5 SP)
      - FE-013: Settings Stores (3 SP)
      - FE-014: Theme Selector (3 SP)
  total_sp: 33
```

---

### 4. DEPENDENCIAS ENTRE TAREAS

```mermaid
graph TD
    subgraph Database
        DB001[HR Schema] --> DB002[RLS Validation]
        DB003[track_field_changes] --> 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

    DB001 -.-> BE007
    DB002 -.-> BE005
    BE002 -.-> FE001
```

---

### 5. MÉTRICAS DE ÉXITO

```yaml
sprint_1_success:
  database:
    - HR schema creado con 6+ tablas
    - RLS tests passing 100%
    - Seed data ejecutable
  backend:
    - Jest configurado y funcionando
    - Auth tests: >80% coverage
  frontend:
    - Catalogs feature structure creada
    - Countries CRUD funcional

sprint_2_success:
  backend:
    - Foundation tests: >80% coverage (Auth, Users, Roles, Tenants)
    - Permission cache: <5ms lookup
  frontend:
    - Catalogs module 100% funcional
    - 4 nuevas páginas CRUD

sprint_3_success:
  backend:
    - OAuth Google/Microsoft funcional
    - Core Business tests: >60% coverage
  frontend:
    - Settings structure completa
    - System settings funcional

sprint_4_success:
  backend:
    - 2FA TOTP funcional
    - Email verification funcional
    - Tests coverage global: >70%
  frontend:
    - Settings module 100% funcional
    - Theme selector funcionando

global_success:
  tests_coverage: ">70% (desde 0%)"
  frontend_features: "6 (desde 4)"
  database_schemas: "9 (desde 8)"
  rls_validated: "true"
  oauth_enabled: "true"
  2fa_enabled: "true"
```

---

### 6. RIESGOS Y MITIGACIONES

| Riesgo | Probabilidad | Impacto | Mitigación |
|--------|-------------|---------|------------|
| Tests setup complejo | Media | Alto | Dedicar tiempo extra en BE-001, usar ejemplos existentes |
| OAuth providers cambios API | Baja | Medio | Usar SDKs oficiales, documentar bien |
| RLS performance issues | Media | Alto | Crear índices apropiados, test early |
| Frontend scope creep | Alta | Medio | Ceñirse estrictamente a specs documentadas |
| Dependencias entre capas | Media | Alto | Comunicación constante entre subagentes |

---

### 7. ASIGNACIÓN DE PERFILES

```yaml
perfiles_requeridos:
  orquestador:
    perfil: PERFIL-ORQUESTADOR.md
    responsabilidades:
      - Coordinación general
      - Validación de entregas
      - Resolución de conflictos

  database_agent:
    perfil: PERFIL-DATABASE.md
    tareas: [DB-001, DB-002, DB-003, DB-004]
    sprint: 1

  backend_agent:
    perfil: PERFIL-BACKEND-EXPRESS.md
    tareas: [BE-001 a BE-011]
    sprints: [1, 2, 3, 4]

  frontend_agent:
    perfil: PERFIL-FRONTEND.md
    tareas: [FE-001 a FE-014]
    sprints: [1, 2, 3, 4]

  testing_agent:
    perfil: PERFIL-TESTING.md
    tareas: [Validación de tests, QA]
    sprints: [2, 3, 4]
```

---

## SIGUIENTE PASO: FASE 3 - VALIDACIÓN

Una vez aprobado este plan, proceder con:

1. **Validar cobertura completa** de gaps identificados
2. **Verificar dependencias** entre archivos a modificar
3. **Confirmar estimaciones** de story points
4. **Aprobar cronograma** de sprints
5. **Asignar recursos** (perfiles de agentes)

---

**Documento generado por:** ORQUESTADOR (Claude Code Opus 4.5)
**Sistema:** SIMCO + CAPVED
**Fase actual:** P (Planeación)
**Próxima fase:** V (Validación)
