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