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
- 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>
351 lines
10 KiB
Markdown
351 lines
10 KiB
Markdown
# 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
|