erp-core/orchestration/analisis/FASE3-PLAN-INTEGRACION-GAPS.md
rckrdmrd 0086695b4c
Some checks failed
ERP Core CI / Backend Lint (push) Has been cancelled
ERP Core CI / Backend Unit Tests (push) Has been cancelled
ERP Core CI / Backend Integration Tests (push) Has been cancelled
ERP Core CI / Frontend Lint (push) Has been cancelled
ERP Core CI / Frontend Unit Tests (push) Has been cancelled
ERP Core CI / Frontend E2E Tests (push) Has been cancelled
ERP Core CI / Database DDL Validation (push) Has been cancelled
ERP Core CI / Backend Build (push) Has been cancelled
ERP Core CI / Frontend Build (push) Has been cancelled
ERP Core CI / CI Success (push) Has been cancelled
Performance Tests / Lighthouse CI (push) Has been cancelled
Performance Tests / Bundle Size Analysis (push) Has been cancelled
Performance Tests / k6 Load Tests (push) Has been cancelled
Performance Tests / Performance Summary (push) Has been cancelled
[SIMCO-V38] feat: Actualizar a SIMCO v3.8.0 + cambios backend
- HERENCIA-SIMCO.md actualizado con directivas v3.7 y v3.8
- Actualizaciones en modulos CRM y OpenAPI

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-10 08:53:05 -06:00

10 KiB

FASE 3: PLAN DE INTEGRACION PARA RESOLUCION DE GAPS

Fecha: 2026-01-10 Objetivo: Planificar la resolucion de todos los GAPS identificados en FASE 2 Estado: COMPLETADO Basado en: FASE2-ANALISIS-DETALLADO-DOC-VS-DEV.md


1. RESUMEN DE GAPS A RESOLVER

1.1 GAPS Criticos (4)

  • GAP-FE-01: purchases.api.ts
  • GAP-FE-02: projects.api.ts
  • GAP-FE-03: crm.api.ts
  • GAP-FE-04: hr.api.ts

1.2 GAPS Medios (3)

  • GAP-EM-01: Emails de factura
  • GAP-EM-02: Emails de orden de compra
  • GAP-EM-03: Emails de inventario bajo

2. PLAN DE RESOLUCION - GAPS CRITICOS

2.1 GAP-FE-01: purchases.api.ts

Prioridad: CRITICA Esfuerzo Estimado: 4 horas Dependencias: purchases.service.ts, rfqs.service.ts

Tareas:

1. Crear archivo: frontend/src/features/purchases/api/purchases.api.ts
2. Implementar purchasesApi (CRUD ordenes de compra)
3. Implementar rfqsApi (CRUD solicitudes de cotizacion)
4. Implementar receiptApi (recepciones de mercancia)
5. Exportar APIs unificadas
6. Crear tests unitarios

Estructura Propuesta:

// purchases.api.ts
import { apiClient } from '@/lib/api-client';

export const purchasesApi = {
  getAll: (params) => apiClient.get('/api/purchases', { params }),
  getById: (id) => apiClient.get(`/api/purchases/${id}`),
  create: (data) => apiClient.post('/api/purchases', data),
  update: (id, data) => apiClient.put(`/api/purchases/${id}`, data),
  delete: (id) => apiClient.delete(`/api/purchases/${id}`),
  confirm: (id) => apiClient.post(`/api/purchases/${id}/confirm`),
  cancel: (id) => apiClient.post(`/api/purchases/${id}/cancel`),
  receive: (id) => apiClient.post(`/api/purchases/${id}/receive`),
};

export const rfqsApi = {
  getAll: (params) => apiClient.get('/api/rfqs', { params }),
  getById: (id) => apiClient.get(`/api/rfqs/${id}`),
  create: (data) => apiClient.post('/api/rfqs', data),
  update: (id, data) => apiClient.put(`/api/rfqs/${id}`, data),
  delete: (id) => apiClient.delete(`/api/rfqs/${id}`),
  send: (id) => apiClient.post(`/api/rfqs/${id}/send`),
  convertToOrder: (id) => apiClient.post(`/api/rfqs/${id}/convert`),
};

2.2 GAP-FE-02: projects.api.ts

Prioridad: ALTA Esfuerzo Estimado: 3 horas Dependencias: Verificar existencia de projects module en backend

Tareas:

1. Verificar backend/src/modules/projects/ existe
2. Crear archivo: frontend/src/features/projects/api/projects.api.ts
3. Implementar projectsApi (CRUD proyectos)
4. Implementar tasksApi (CRUD tareas)
5. Implementar timelinesApi (lineas de tiempo)
6. Crear tests unitarios

Estructura Propuesta:

// projects.api.ts
export const projectsApi = {
  getAll: (params) => apiClient.get('/api/projects', { params }),
  getById: (id) => apiClient.get(`/api/projects/${id}`),
  create: (data) => apiClient.post('/api/projects', data),
  update: (id, data) => apiClient.put(`/api/projects/${id}`, data),
  delete: (id) => apiClient.delete(`/api/projects/${id}`),
  getStats: (id) => apiClient.get(`/api/projects/${id}/stats`),
};

export const tasksApi = {
  getByProject: (projectId) => apiClient.get(`/api/projects/${projectId}/tasks`),
  create: (projectId, data) => apiClient.post(`/api/projects/${projectId}/tasks`, data),
  update: (id, data) => apiClient.put(`/api/tasks/${id}`, data),
  delete: (id) => apiClient.delete(`/api/tasks/${id}`),
  complete: (id) => apiClient.post(`/api/tasks/${id}/complete`),
};

2.3 GAP-FE-03: crm.api.ts

Prioridad: ALTA Esfuerzo Estimado: 4 horas Dependencias: Verificar existencia de crm module en backend

Tareas:

1. Verificar backend/src/modules/crm/ existe
2. Crear archivo: frontend/src/features/crm/api/crm.api.ts
3. Implementar leadsApi (CRUD leads)
4. Implementar opportunitiesApi (CRUD oportunidades)
5. Implementar activitiesApi (CRUD actividades)
6. Implementar pipelinesApi (CRUD pipelines)
7. Crear tests unitarios

Estructura Propuesta:

// crm.api.ts
export const leadsApi = {
  getAll: (params) => apiClient.get('/api/crm/leads', { params }),
  getById: (id) => apiClient.get(`/api/crm/leads/${id}`),
  create: (data) => apiClient.post('/api/crm/leads', data),
  update: (id, data) => apiClient.put(`/api/crm/leads/${id}`, data),
  delete: (id) => apiClient.delete(`/api/crm/leads/${id}`),
  convert: (id) => apiClient.post(`/api/crm/leads/${id}/convert`),
};

export const opportunitiesApi = {
  getAll: (params) => apiClient.get('/api/crm/opportunities', { params }),
  getById: (id) => apiClient.get(`/api/crm/opportunities/${id}`),
  create: (data) => apiClient.post('/api/crm/opportunities', data),
  update: (id, data) => apiClient.put(`/api/crm/opportunities/${id}`, data),
  delete: (id) => apiClient.delete(`/api/crm/opportunities/${id}`),
  won: (id) => apiClient.post(`/api/crm/opportunities/${id}/won`),
  lost: (id, reason) => apiClient.post(`/api/crm/opportunities/${id}/lost`, { reason }),
};

export const activitiesApi = {
  getAll: (params) => apiClient.get('/api/crm/activities', { params }),
  create: (data) => apiClient.post('/api/crm/activities', data),
  update: (id, data) => apiClient.put(`/api/crm/activities/${id}`, data),
  complete: (id) => apiClient.post(`/api/crm/activities/${id}/complete`),
};

2.4 GAP-FE-04: hr.api.ts

Prioridad: ALTA Esfuerzo Estimado: 4 horas Dependencias: Verificar existencia de hr module en backend

Tareas:

1. Verificar backend/src/modules/hr/ existe
2. Crear archivo: frontend/src/features/hr/api/hr.api.ts
3. Implementar employeesApi (CRUD empleados)
4. Implementar departmentsApi (CRUD departamentos)
5. Implementar contractsApi (CRUD contratos)
6. Implementar attendanceApi (control de asistencia)
7. Implementar leaveApi (vacaciones/permisos)
8. Crear tests unitarios

Estructura Propuesta:

// hr.api.ts
export const employeesApi = {
  getAll: (params) => apiClient.get('/api/hr/employees', { params }),
  getById: (id) => apiClient.get(`/api/hr/employees/${id}`),
  create: (data) => apiClient.post('/api/hr/employees', data),
  update: (id, data) => apiClient.put(`/api/hr/employees/${id}`, data),
  archive: (id) => apiClient.post(`/api/hr/employees/${id}/archive`),
};

export const departmentsApi = {
  getAll: (params) => apiClient.get('/api/hr/departments', { params }),
  getById: (id) => apiClient.get(`/api/hr/departments/${id}`),
  create: (data) => apiClient.post('/api/hr/departments', data),
  update: (id, data) => apiClient.put(`/api/hr/departments/${id}`, data),
  getEmployees: (id) => apiClient.get(`/api/hr/departments/${id}/employees`),
};

export const contractsApi = {
  getByEmployee: (employeeId) => apiClient.get(`/api/hr/employees/${employeeId}/contracts`),
  create: (data) => apiClient.post('/api/hr/contracts', data),
  update: (id, data) => apiClient.put(`/api/hr/contracts/${id}`, data),
  terminate: (id, date) => apiClient.post(`/api/hr/contracts/${id}/terminate`, { date }),
};

export const leaveApi = {
  getAll: (params) => apiClient.get('/api/hr/leaves', { params }),
  request: (data) => apiClient.post('/api/hr/leaves', data),
  approve: (id) => apiClient.post(`/api/hr/leaves/${id}/approve`),
  reject: (id, reason) => apiClient.post(`/api/hr/leaves/${id}/reject`, { reason }),
};

3. PLAN DE RESOLUCION - GAPS MEDIOS

3.1 GAP-EM-01: Emails de Factura

Prioridad: MEDIA Esfuerzo Estimado: 2 horas Dependencias: email.service.ts, invoices.service.ts

Tareas:

1. Agregar metodo sendInvoiceEmail() a email.service.ts
2. Crear template HTML para facturas
3. Integrar con invoices.service.ts
4. Crear tests unitarios

Template Propuesto:

async sendInvoiceEmail(params: {
  to: string;
  customerName: string;
  invoiceNumber: string;
  invoiceDate: Date;
  dueDate: Date;
  totalAmount: number;
  currency: string;
  pdfAttachment?: Buffer;
}): Promise<EmailResult>

3.2 GAP-EM-02: Emails de Orden de Compra

Prioridad: MEDIA Esfuerzo Estimado: 2 horas Dependencias: email.service.ts, purchases.service.ts

Tareas:

1. Agregar metodo sendPurchaseOrderEmail() a email.service.ts
2. Crear template HTML para ordenes de compra
3. Integrar con purchases.service.ts
4. Crear tests unitarios

3.3 GAP-EM-03: Emails de Inventario Bajo

Prioridad: MEDIA Esfuerzo Estimado: 2 horas Dependencias: email.service.ts, stock-quants.service.ts

Tareas:

1. Agregar metodo sendLowStockAlert() a email.service.ts
2. Crear template HTML para alertas de inventario
3. Integrar con stock monitoring
4. Crear tests unitarios

4. CRONOGRAMA DE EJECUCION

Sprint Inmediato (Resolucion de GAPS Criticos)

Dia Tarea Horas Responsable
1 GAP-FE-01: purchases.api.ts 4 Desarrollador
1 GAP-FE-02: projects.api.ts 3 Desarrollador
2 GAP-FE-03: crm.api.ts 4 Desarrollador
2 GAP-FE-04: hr.api.ts 4 Desarrollador

Total Criticos: 15 horas (2 dias)

Sprint Siguiente (Resolucion de GAPS Medios)

Dia Tarea Horas Responsable
1 GAP-EM-01: Invoice emails 2 Desarrollador
1 GAP-EM-02: PO emails 2 Desarrollador
1 GAP-EM-03: Low stock alerts 2 Desarrollador

Total Medios: 6 horas (1 dia)


5. CRITERIOS DE ACEPTACION

Para cada API Frontend:

  • Archivo creado en ubicacion correcta
  • Todos los metodos CRUD implementados
  • Metodos de acciones especiales implementados
  • Manejo de errores consistente
  • Tipos TypeScript definidos
  • Tests unitarios con cobertura > 80%
  • Integracion verificada con backend

Para cada Email Template:

  • Metodo agregado a email.service.ts
  • Template HTML responsive
  • Soporte para adjuntos (PDF)
  • Tests unitarios
  • Documentacion actualizada

6. RIESGOS Y MITIGACIONES

Riesgo Probabilidad Impacto Mitigacion
Backend modules no existen Media Alto Verificar estructura antes de implementar
Endpoints API diferentes Baja Medio Revisar controllers existentes
Tipos no definidos Media Bajo Crear tipos en proceso
Tests fallando Baja Medio Ejecutar tests incrementalmente

7. VERIFICACION POST-IMPLEMENTACION

Checklist de Verificacion:

[ ] Todos los archivos API creados
[ ] Build de frontend exitoso
[ ] Tests unitarios pasando
[ ] Integracion con backend verificada
[ ] Documentacion actualizada
[ ] Code review completado

Generado por: Claude Code - Opus 4.5 Fase CAPVED: Planeacion Documento: FASE3-PLAN-INTEGRACION-GAPS.md