- ✅ 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
14 KiB
🔍 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.mddocs/5_PROTOCOLOS_CRITICOS_AÑADIDOS_25_ENE.mddocs/10_PROTOCOLOS_PRIORIDAD_ALTA_AÑADIDOS.mddocs/40_PROTOCOLOS_COMPLETADOS.mddocs/60_PROTOCOLOS_COMPLETADOS.mddocs/VADEMECUM_10_FARMACOS_AÑADIDOS.mddocs/VADEMECUM_COMPLETO_35_FARMACOS.mddocs/VADEMECUM_LOGRO_FINAL.mddocs/IMAGENES_TOP5_CREADAS.mddocs/TOP_20_IMAGENES_PRIORITARIAS.mddocs/LOGROS_HOY_VISUAL.mddocs/ESTADO_FINAL_HOY.mddocs/RESUMEN_FINAL_COMPLETO_25_ENE.mddocs/RESUMEN_FINAL_24_ENE_2026.mddocs/RESUMEN_SESION_24_ENE.mddocs/RESUMEN_SESION_ACTUAL.mddocs/SESION_COMPLETA_24_ENE_FINAL.mddocs/SESION_2026_01_24_HISTORIAL_Y_ERRORES.mddocs/SESION_2026_01_24_PLACEHOLDERS_Y_DISCLAIMER.mddocs/QUE_FALTA_ACTUALIZADO_25_ENE.mddocs/QUE_FALTA_RESUMEN.mddocs/SIGUIENTES_TAREAS_PRIORIZADAS.mddocs/PLAN_CRITICO_EJECUTABLE.mddocs/PLAN_ACCION_EJECUTABLE.mddocs/RESUMEN_EJECUTIVO_CRITICO.mddocs/RESUMEN_COMPLETO_FALTANTE_PLAN.mddocs/RESUMEN_MEDIOS_FALTANTES.mddocs/REPORTE_MEDIOS_REFERENCIADOS.mddocs/INDICE_MAESTRO_COMPLETO.mddocs/INDICE_VISUAL_COMPLETO.mddocs/PROTOCOLOS_CRITICOS_AÑADIDOS.mddocs/PLANTILLA_PROTOCOLO.mddocs/ANALISIS_READMES_TECNICOS.mddocs/VALIDACION_MEDICA.mddocs/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 temporalscripts/mapeo_react.csv- Mapeo temporal de migraciónscripts/limpiar_manual.py- Script de limpieza puntualscripts/anadir_enlaces_referencia.py- Script de migración puntualscripts/anadir_todos_enlaces.py- Script de migración puntualscripts/actualizar_rutas_indice.py- Script de migración puntualscripts/integrate-assets.py- Script de integración puntualscripts/normalize-media-filenames.py- Script de normalización puntualscripts/generate-docs.py- Generador de docs temporalscripts/actualizar_documentacion_fase4.sh- Script de actualización puntualscripts/actualizar_react_fase3.sh- Script de actualización puntualscripts/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 temporalsrc/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 temporaldocs/REFACTORING_PLAN.md- Plan temporal de refactorizacióndocs/REFACTORING_COMPLETED.md- Documento temporal de refactorizacióndocs/FASE_2_RESULTADOS.md- Resultados temporalesdocs/FASE_2_PRUEBA_FALLBACK.md- Prueba temporaldocs/FASE_2_INTEGRACION_FRONTEND.md- Integración temporaldocs/FASE_2_ESTADO_ACTUAL.md- Estado temporaldocs/FASE_2_PLAN_COMPLETAR.md- Plan temporaldocs/FASE_2_COMPLETADA.md- Documento temporaldocs/FASE_3_RESPONSIVE_IMPLEMENTADA.md- Documento temporaldocs/FASE_2_RESPONSIVE_IMPLEMENTADA.md- Documento temporaldocs/DIAGNOSTICO_UX_RESPONSIVE.md- Diagnóstico temporaldocs/RESUMEN_MEJORAS_RESPONSIVE.md- Resumen temporaldocs/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 debackend/config/database.tsbackend/src/index.js- Duplicado debackend/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 componentesrc/pages/SoporteVital.tsx- Filtrado directamente en componentesrc/pages/Patologias.tsx- Filtrado directamente en componentesrc/pages/Escena.tsx- Filtrado directamente en componentesrc/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 desdesrc/data/src/components/drugs/DrugCard.tsx- Acceso directo a datossrc/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íneassrc/components/content/MarkdownViewer.tsx- Función principal muy largasrc/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ármacossrc/pages/SoporteVital.tsx- Filtrado de procedimientossrc/pages/Patologias.tsx- Filtrado de patologíassrc/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 completasrc/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
- 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
zoden 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)
- ✅ Eliminar password de
ESTADO_ACTUAL.md - ✅ Añadir validación Zod en frontend para entradas críticas
- ✅ Verificar que no hay más secrets hardcodeados
Fase 2: Limpieza de Archivos (2-3 horas)
- ✅ Eliminar documentación temporal (47 archivos)
- ✅ Eliminar scripts obsoletos (12 archivos)
- ✅ Eliminar archivos de prueba (3 archivos)
- ✅ Eliminar configuración duplicada (2 archivos)
Fase 3: Refactorización Arquitectónica (8-12 horas)
- ✅ Extraer lógica de negocio de componentes UI
- ✅ Crear hooks personalizados para filtrado/búsqueda
- ✅ Implementar capa de servicios/repositorios
- ✅ Dividir componentes grandes (>200 líneas)
Fase 4: Eliminación de Duplicación (4-6 horas)
- ✅ Crear hooks genéricos para filtrado
- ✅ Unificar lógica de búsqueda
- ✅ Extraer validaciones comunes
Fase 5: Optimización de Dependencias (1 hora)
- ✅ Eliminar
@tanstack/react-querysi no se usa - ✅ Verificar y eliminar dependencias no utilizadas
- ✅ 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.