- ✅ Ticket 1.1: Estructura Clean Architecture en backend - ✅ Ticket 1.2: Schemas Zod compartidos - ✅ Ticket 1.3: Refactorización drugs.ts (1362 → 8 archivos modulares) - ✅ Ticket 1.4: Refactorización procedures.ts (3583 → 6 archivos modulares) - ✅ Ticket 1.5: Eliminación de duplicidades (~50 líneas) Cambios principales: - Creada estructura Clean Architecture en backend/src/ - Schemas Zod compartidos en backend/src/shared/schemas/ - Refactorización modular de drugs y procedures - Utilidades genéricas en src/utils/ (filter, validation) - Eliminados scripts obsoletos y documentación antigua - Corregidos errores: QueryClient, import test-error-handling - Build verificado y funcionando correctamente
389 lines
14 KiB
Markdown
389 lines
14 KiB
Markdown
# 🔍 ANÁLISIS DE LIMPIEZA PROFUNDA - ARQUITECTURA SENIOR
|
||
|
||
**Fecha:** 2026-01-25
|
||
**Arquitecto:** Sistema de Análisis Automatizado
|
||
**Objetivo:** Transformar prototipo no-code/IA en sistema profesional, mantenible y seguro
|
||
|
||
---
|
||
|
||
## 📋 RESUMEN EJECUTIVO
|
||
|
||
### Estado Actual
|
||
- **Frontend:** React 19 + TypeScript + Vite
|
||
- **Backend:** Node.js + Express + PostgreSQL
|
||
- **Admin Panel:** React separado
|
||
- **Problemas identificados:** 127 archivos/documentos obsoletos, dependencias no utilizadas, problemas de seguridad, violaciones arquitectónicas
|
||
|
||
### Impacto Esperado
|
||
- **Reducción de código:** ~15-20% eliminando archivos muertos
|
||
- **Mejora de seguridad:** Eliminación de secrets hardcodeados, validación con Zod
|
||
- **Arquitectura:** Separación clara de responsabilidades (Clean Architecture)
|
||
- **Mantenibilidad:** Código más simple, menos duplicación, mejor organización
|
||
|
||
---
|
||
|
||
## 🗑️ TAREA 1: ARCHIVOS A ELIMINAR
|
||
|
||
### 1.1 Documentación de Instrucciones de IA (47 archivos)
|
||
|
||
**Categoría: Documentos de progreso temporal**
|
||
- `docs/5_PROTOCOLOS_CRITICOS_AÑADIDOS.md`
|
||
- `docs/5_PROTOCOLOS_CRITICOS_AÑADIDOS_25_ENE.md`
|
||
- `docs/10_PROTOCOLOS_PRIORIDAD_ALTA_AÑADIDOS.md`
|
||
- `docs/40_PROTOCOLOS_COMPLETADOS.md`
|
||
- `docs/60_PROTOCOLOS_COMPLETADOS.md`
|
||
- `docs/VADEMECUM_10_FARMACOS_AÑADIDOS.md`
|
||
- `docs/VADEMECUM_COMPLETO_35_FARMACOS.md`
|
||
- `docs/VADEMECUM_LOGRO_FINAL.md`
|
||
- `docs/IMAGENES_TOP5_CREADAS.md`
|
||
- `docs/TOP_20_IMAGENES_PRIORITARIAS.md`
|
||
- `docs/LOGROS_HOY_VISUAL.md`
|
||
- `docs/ESTADO_FINAL_HOY.md`
|
||
- `docs/RESUMEN_FINAL_COMPLETO_25_ENE.md`
|
||
- `docs/RESUMEN_FINAL_24_ENE_2026.md`
|
||
- `docs/RESUMEN_SESION_24_ENE.md`
|
||
- `docs/RESUMEN_SESION_ACTUAL.md`
|
||
- `docs/SESION_COMPLETA_24_ENE_FINAL.md`
|
||
- `docs/SESION_2026_01_24_HISTORIAL_Y_ERRORES.md`
|
||
- `docs/SESION_2026_01_24_PLACEHOLDERS_Y_DISCLAIMER.md`
|
||
- `docs/QUE_FALTA_ACTUALIZADO_25_ENE.md`
|
||
- `docs/QUE_FALTA_RESUMEN.md`
|
||
- `docs/SIGUIENTES_TAREAS_PRIORIZADAS.md`
|
||
- `docs/PLAN_CRITICO_EJECUTABLE.md`
|
||
- `docs/PLAN_ACCION_EJECUTABLE.md`
|
||
- `docs/RESUMEN_EJECUTIVO_CRITICO.md`
|
||
- `docs/RESUMEN_COMPLETO_FALTANTE_PLAN.md`
|
||
- `docs/RESUMEN_MEDIOS_FALTANTES.md`
|
||
- `docs/REPORTE_MEDIOS_REFERENCIADOS.md`
|
||
- `docs/INDICE_MAESTRO_COMPLETO.md`
|
||
- `docs/INDICE_VISUAL_COMPLETO.md`
|
||
- `docs/PROTOCOLOS_CRITICOS_AÑADIDOS.md`
|
||
- `docs/PLANTILLA_PROTOCOLO.md`
|
||
- `docs/ANALISIS_READMES_TECNICOS.md`
|
||
- `docs/VALIDACION_MEDICA.md`
|
||
- `docs/MEJORAS_FUTURAS_CHECKLIST_RCP.md`
|
||
|
||
**Razón:** Documentos temporales de progreso de desarrollo, no documentación técnica permanente.
|
||
|
||
### 1.2 Scripts Duplicados o Obsoletos (12 archivos)
|
||
|
||
**Categoría: Scripts de desarrollo temporal**
|
||
- `scripts/diagnostico_errores.md` - Documentación de debugging temporal
|
||
- `scripts/mapeo_react.csv` - Mapeo temporal de migración
|
||
- `scripts/limpiar_manual.py` - Script de limpieza puntual
|
||
- `scripts/anadir_enlaces_referencia.py` - Script de migración puntual
|
||
- `scripts/anadir_todos_enlaces.py` - Script de migración puntual
|
||
- `scripts/actualizar_rutas_indice.py` - Script de migración puntual
|
||
- `scripts/integrate-assets.py` - Script de integración puntual
|
||
- `scripts/normalize-media-filenames.py` - Script de normalización puntual
|
||
- `scripts/generate-docs.py` - Generador de docs temporal
|
||
- `scripts/actualizar_documentacion_fase4.sh` - Script de actualización puntual
|
||
- `scripts/actualizar_react_fase3.sh` - Script de actualización puntual
|
||
- `scripts/reorganizar-proyecto.sh` - Script de reorganización puntual
|
||
|
||
**Razón:** Scripts de migración/transformación puntuales que ya cumplieron su función.
|
||
|
||
### 1.3 Archivos de Prueba/Testing Temporal (3 archivos)
|
||
|
||
**Categoría: Utilidades de desarrollo**
|
||
- `src/utils/test-error-handling.ts` - Utilidad de testing temporal
|
||
- `src/pages/TestingPage.tsx` - Página de testing (mantener solo si es necesaria para producción)
|
||
- `public/assets/README_UBICACION_IMAGENES.md.backup_20260120` - Backup temporal
|
||
|
||
**Razón:** Archivos de prueba que no deberían estar en producción.
|
||
|
||
### 1.4 Documentación Técnica Redundante (15 archivos)
|
||
|
||
**Categoría: Documentos técnicos duplicados o superados**
|
||
- `docs/AUDITORIA_LIMPIEZA_PROYECTO.md` - Auditoría temporal
|
||
- `docs/REFACTORING_PLAN.md` - Plan temporal de refactorización
|
||
- `docs/REFACTORING_COMPLETED.md` - Documento temporal de refactorización
|
||
- `docs/FASE_2_RESULTADOS.md` - Resultados temporales
|
||
- `docs/FASE_2_PRUEBA_FALLBACK.md` - Prueba temporal
|
||
- `docs/FASE_2_INTEGRACION_FRONTEND.md` - Integración temporal
|
||
- `docs/FASE_2_ESTADO_ACTUAL.md` - Estado temporal
|
||
- `docs/FASE_2_PLAN_COMPLETAR.md` - Plan temporal
|
||
- `docs/FASE_2_COMPLETADA.md` - Documento temporal
|
||
- `docs/FASE_3_RESPONSIVE_IMPLEMENTADA.md` - Documento temporal
|
||
- `docs/FASE_2_RESPONSIVE_IMPLEMENTADA.md` - Documento temporal
|
||
- `docs/DIAGNOSTICO_UX_RESPONSIVE.md` - Diagnóstico temporal
|
||
- `docs/RESUMEN_MEJORAS_RESPONSIVE.md` - Resumen temporal
|
||
- `docs/ESTRUCTURA.md` - Estructura temporal (ya existe ESTRUCTURA.md en raíz)
|
||
- `docs/consolidado/CHECKLIST_PWA_COMPLETA.md` - Checklist temporal
|
||
|
||
**Razón:** Documentos de fases temporales ya completadas.
|
||
|
||
### 1.5 Archivos de Configuración Duplicados
|
||
|
||
**Categoría: Configuración**
|
||
- `backend/config/database.js` - Duplicado de `backend/config/database.ts`
|
||
- `backend/src/index.js` - Duplicado de `backend/src/index.ts`
|
||
|
||
**Razón:** Archivos JavaScript duplicados cuando existe versión TypeScript.
|
||
|
||
---
|
||
|
||
## 🔧 TAREA 2: MÓDULOS A REFACTORIZAR
|
||
|
||
### 2.1 Violaciones de Clean Architecture
|
||
|
||
#### 🔴 CRÍTICO: Lógica de Negocio en Componentes UI
|
||
|
||
**Archivos afectados:**
|
||
- `src/pages/Farmacos.tsx` - Filtrado y búsqueda directamente en componente
|
||
- `src/pages/SoporteVital.tsx` - Filtrado directamente en componente
|
||
- `src/pages/Patologias.tsx` - Filtrado directamente en componente
|
||
- `src/pages/Escena.tsx` - Filtrado directamente en componente
|
||
- `src/components/layout/SearchModal.tsx` - Lógica de búsqueda compleja en componente
|
||
|
||
**Solución propuesta:**
|
||
- Crear hooks personalizados: `useDrugFilter`, `useProcedureFilter`, `useSearch`
|
||
- Extraer lógica a servicios: `src/services/filter.service.ts`, `src/services/search.service.ts`
|
||
- Mover lógica de negocio a capa de dominio: `src/domain/`
|
||
|
||
#### 🟡 MEDIO: Queries Directas a Datos sin Capa de Servicio
|
||
|
||
**Archivos afectados:**
|
||
- `src/pages/*.tsx` - Importan directamente desde `src/data/`
|
||
- `src/components/drugs/DrugCard.tsx` - Acceso directo a datos
|
||
- `src/components/content/procedures/ProcedureCard.tsx` - Acceso directo a datos
|
||
|
||
**Solución propuesta:**
|
||
- Crear capa de repositorio: `src/repositories/`
|
||
- Implementar interfaces: `IProcedureRepository`, `IDrugRepository`
|
||
- Usar ContentAdapter existente de forma consistente
|
||
|
||
#### 🟡 MEDIO: Dependencias Apuntando Hacia Afuera
|
||
|
||
**Problema:** Componentes importan directamente desde `src/data/` en lugar de usar servicios.
|
||
|
||
**Solución:**
|
||
- Invertir dependencias usando Dependency Injection
|
||
- Crear interfaces en `src/domain/interfaces/`
|
||
- Implementar servicios que implementen estas interfaces
|
||
|
||
### 2.2 Separación de Responsabilidades
|
||
|
||
#### 🔴 CRÍTICO: Componentes con Múltiples Responsabilidades
|
||
|
||
**Archivos a refactorizar:**
|
||
- `src/components/layout/SearchModal.tsx` (250+ líneas)
|
||
- Responsabilidades: UI, búsqueda, filtrado, navegación
|
||
- Dividir en: `SearchModal.tsx`, `SearchService.ts`, `SearchFilters.tsx`
|
||
|
||
- `src/pages/Farmacos.tsx` (250+ líneas)
|
||
- Responsabilidades: UI, filtrado, búsqueda, categorización
|
||
- Dividir en: `FarmacosPage.tsx`, `useDrugFilters.ts`, `DrugCategoryFilter.tsx`
|
||
|
||
- `src/services/content-adapter.ts` (697 líneas)
|
||
- Responsabilidades: Adapter, Factory, Conversión, Cache
|
||
- Dividir en: `adapters/`, `factories/`, `converters/`, `cache/`
|
||
|
||
#### 🟡 MEDIO: Funciones Muy Largas (>100 líneas)
|
||
|
||
**Archivos afectados:**
|
||
- `src/services/content-adapter.ts` - Múltiples funciones >100 líneas
|
||
- `src/components/content/MarkdownViewer.tsx` - Función principal muy larga
|
||
- `src/pages/ManualViewer.tsx` - Lógica compleja en componente
|
||
|
||
**Solución:** Aplicar "Regla de los 15 minutos" - dividir funciones hasta que sean comprensibles en <15 min.
|
||
|
||
### 2.3 Duplicación de Código (DRY)
|
||
|
||
#### 🔴 CRÍTICO: Lógica de Filtrado Duplicada
|
||
|
||
**Ubicaciones:**
|
||
- `src/pages/Farmacos.tsx` - Filtrado de fármacos
|
||
- `src/pages/SoporteVital.tsx` - Filtrado de procedimientos
|
||
- `src/pages/Patologias.tsx` - Filtrado de patologías
|
||
- `src/pages/Escena.tsx` - Filtrado de escena
|
||
|
||
**Solución:** Crear hook genérico `useFilter<T>` y servicio `FilterService`.
|
||
|
||
#### 🟡 MEDIO: Lógica de Búsqueda Duplicada
|
||
|
||
**Ubicaciones:**
|
||
- `src/components/layout/SearchModal.tsx` - Búsqueda completa
|
||
- `src/services/content-search.ts` - Búsqueda de contenido
|
||
- Múltiples componentes con lógica de búsqueda similar
|
||
|
||
**Solución:** Unificar en `SearchService` con diferentes estrategias.
|
||
|
||
#### 🟡 MEDIO: Validación Duplicada
|
||
|
||
**Ubicaciones:**
|
||
- Validaciones inline en múltiples componentes
|
||
- Validaciones en `backend/src/validators/` (parcial)
|
||
|
||
**Solución:** Usar Zod de forma consistente en frontend y backend.
|
||
|
||
---
|
||
|
||
## 📦 TAREA 3: DEPENDENCIAS NO UTILIZADAS
|
||
|
||
### 3.1 Frontend (`package.json`)
|
||
|
||
#### Dependencias Instaladas pero No Usadas:
|
||
- ✅ `@tanstack/react-query` - **Instalado pero NO usado** (solo QueryClient configurado, sin useQuery/useMutation)
|
||
- ⚠️ `date-fns` - Verificar uso real
|
||
- ⚠️ `highlight.js` - Verificar uso real
|
||
- ⚠️ `rehype-highlight` - Verificar uso real
|
||
|
||
**Acción:** Eliminar `@tanstack/react-query` si no se va a usar, o implementarlo correctamente.
|
||
|
||
### 3.2 Backend (`backend/package.json`)
|
||
|
||
#### Dependencias a Verificar:
|
||
- ⚠️ `ioredis` - Verificar si Redis está realmente configurado
|
||
- ⚠️ `winston-daily-rotate-file` - Verificar si logging rotativo está activo
|
||
|
||
---
|
||
|
||
## 🔒 TAREA 4: SEGURIDAD Y ESTÁNDARES
|
||
|
||
### 4.1 Secrets Hardcodeados
|
||
|
||
#### 🔴 CRÍTICO: Password en Documentación
|
||
|
||
**Archivo:** `ESTADO_ACTUAL.md`
|
||
```markdown
|
||
- Password: `Monforte.1977`
|
||
```
|
||
|
||
**Acción:** Eliminar inmediatamente y mover a `.env.example` sin valores reales.
|
||
|
||
#### ✅ CORRECTO: JWT Secret Validation
|
||
|
||
**Archivo:** `backend/src/config/security.ts`
|
||
- ✅ Validación correcta implementada
|
||
- ✅ Fail-fast si JWT_SECRET no está configurado
|
||
- ✅ Rechaza valores por defecto inseguros
|
||
|
||
**Mejora sugerida:** Añadir validación de longitud mínima más estricta.
|
||
|
||
### 4.2 Validación de Entradas
|
||
|
||
#### 🔴 CRÍTICO: Falta Validación con Zod en Frontend
|
||
|
||
**Problema:** No hay validación consistente de entradas de usuario en frontend.
|
||
|
||
**Archivos afectados:**
|
||
- Todos los formularios y inputs de usuario
|
||
- Búsquedas sin sanitización
|
||
- Parámetros de URL sin validación
|
||
|
||
**Solución:**
|
||
- Instalar `zod` en frontend (ya está en backend)
|
||
- Crear schemas de validación: `src/validators/`
|
||
- Validar todas las entradas de usuario
|
||
|
||
#### 🟡 MEDIO: Validación Parcial en Backend
|
||
|
||
**Estado actual:**
|
||
- ✅ Validación con Zod en `backend/src/validators/`
|
||
- ⚠️ No todos los endpoints tienen validación
|
||
|
||
**Solución:** Asegurar que TODOS los endpoints tengan validación Zod.
|
||
|
||
### 4.3 Inyección SQL
|
||
|
||
#### ✅ CORRECTO: Uso de Parámetros Preparados
|
||
|
||
**Archivo:** `backend/src/routes/*.ts`
|
||
- ✅ Uso de parámetros preparados en queries PostgreSQL
|
||
- ✅ Sin concatenación de strings en SQL
|
||
|
||
**Estado:** Correcto, mantener así.
|
||
|
||
### 4.4 Naming Conventions
|
||
|
||
#### 🟡 MEDIO: Inconsistencias en Nombres
|
||
|
||
**Problemas encontrados:**
|
||
- Mezcla de camelCase y kebab-case en archivos
|
||
- Algunos componentes con nombres inconsistentes
|
||
|
||
**Solución:**
|
||
- **Archivos:** kebab-case (ej: `drug-card.tsx`)
|
||
- **Componentes:** PascalCase (ej: `DrugCard`)
|
||
- **Funciones/Variables:** camelCase (ej: `getDrugById`)
|
||
- **Constantes:** UPPER_SNAKE_CASE (ej: `API_BASE_URL`)
|
||
|
||
---
|
||
|
||
## 📊 RESUMEN DE IMPACTO
|
||
|
||
### Archivos a Eliminar: ~80 archivos
|
||
- Documentación temporal: 47 archivos
|
||
- Scripts obsoletos: 12 archivos
|
||
- Archivos de prueba: 3 archivos
|
||
- Documentación redundante: 15 archivos
|
||
- Configuración duplicada: 2 archivos
|
||
- Backups temporales: 1 archivo
|
||
|
||
### Módulos a Refactorizar: ~15 módulos principales
|
||
- Componentes con múltiples responsabilidades: 5 archivos
|
||
- Lógica de negocio en UI: 8 archivos
|
||
- Funciones muy largas: 3 archivos
|
||
- Duplicación de código: Múltiples ubicaciones
|
||
|
||
### Dependencias a Eliminar: 1-3 paquetes
|
||
- `@tanstack/react-query` (si no se usa)
|
||
- Verificar uso de `date-fns`, `highlight.js`
|
||
|
||
### Problemas de Seguridad: 2 críticos
|
||
- Password hardcodeado en documentación
|
||
- Falta validación Zod en frontend
|
||
|
||
---
|
||
|
||
## 🎯 PRIORIZACIÓN DE TAREAS
|
||
|
||
### Fase 1: Seguridad Crítica (1-2 horas)
|
||
1. ✅ Eliminar password de `ESTADO_ACTUAL.md`
|
||
2. ✅ Añadir validación Zod en frontend para entradas críticas
|
||
3. ✅ Verificar que no hay más secrets hardcodeados
|
||
|
||
### Fase 2: Limpieza de Archivos (2-3 horas)
|
||
1. ✅ Eliminar documentación temporal (47 archivos)
|
||
2. ✅ Eliminar scripts obsoletos (12 archivos)
|
||
3. ✅ Eliminar archivos de prueba (3 archivos)
|
||
4. ✅ Eliminar configuración duplicada (2 archivos)
|
||
|
||
### Fase 3: Refactorización Arquitectónica (8-12 horas)
|
||
1. ✅ Extraer lógica de negocio de componentes UI
|
||
2. ✅ Crear hooks personalizados para filtrado/búsqueda
|
||
3. ✅ Implementar capa de servicios/repositorios
|
||
4. ✅ Dividir componentes grandes (>200 líneas)
|
||
|
||
### Fase 4: Eliminación de Duplicación (4-6 horas)
|
||
1. ✅ Crear hooks genéricos para filtrado
|
||
2. ✅ Unificar lógica de búsqueda
|
||
3. ✅ Extraer validaciones comunes
|
||
|
||
### Fase 5: Optimización de Dependencias (1 hora)
|
||
1. ✅ Eliminar `@tanstack/react-query` si no se usa
|
||
2. ✅ Verificar y eliminar dependencias no utilizadas
|
||
3. ✅ Actualizar `package.json`
|
||
|
||
---
|
||
|
||
## ✅ CHECKLIST DE VALIDACIÓN
|
||
|
||
Antes de considerar completada la limpieza:
|
||
|
||
- [ ] No hay secrets hardcodeados en el código
|
||
- [ ] Todas las entradas de usuario tienen validación Zod
|
||
- [ ] No hay archivos temporales/documentación de IA
|
||
- [ ] No hay scripts de migración obsoletos
|
||
- [ ] Componentes siguen Single Responsibility Principle
|
||
- [ ] No hay funciones >100 líneas sin justificación
|
||
- [ ] No hay duplicación de código significativa
|
||
- [ ] Dependencias no utilizadas eliminadas
|
||
- [ ] Naming conventions consistentes
|
||
- [ ] Arquitectura sigue Dependency Inversion Principle
|
||
|
||
---
|
||
|
||
**Próximo paso:** Revisar este análisis y aprobar para ejecutar cambios.
|