# 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<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
