codigo0/docs/ANALISIS_LIMPIEZA_PROFUNDA.md

389 lines
14 KiB
Markdown
Raw Normal View History

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