# 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: ```typescript // 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: ```typescript // 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: ```typescript // 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: ```typescript // 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: ```typescript async sendInvoiceEmail(params: { to: string; customerName: string; invoiceNumber: string; invoiceDate: Date; dueDate: Date; totalAmount: number; currency: string; pdfAttachment?: Buffer; }): Promise ``` --- ### 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