- Arquitectura paralela para Guías de Refuerzo - Nuevos componentes: GuideCard, GuideHeader, GuideNavigation, etc. - Vistas formativas: GuideIndex, GuideViewer, GuideSectionViewer - Layout específico GuideLayout (sin BottomNav) - Índice de guías con ABCDE Operativo y RCP Adulto SVB - Corrección de Service Worker para desarrollo - Enlaces de navegación en menú y página principal - Documentación completa de implementación
31 KiB
📋 Informe de Arquitectura - EMERGES TES
Fecha de análisis: 2025-12-23
Analista: Arquitecto Senior de Aplicaciones Web y Móviles
Versión de la aplicación: 1.0.0
1️⃣ Visión General de la Aplicación
Tipo de Aplicación
Aplicación Web Progresiva (PWA) de consulta rápida para profesionales sanitarios de emergencias.
Funcionalidad Principal
Guía digital de protocolos médicos de emergencias prehospitalarias diseñada específicamente para Técnicos de Emergencias Sanitarias (TES).
Problema que Resuelve
- Acceso rápido a información crítica durante emergencias médicas
- Consulta offline de protocolos, fármacos y calculadoras médicas
- Estandarización de procedimientos según guías oficiales (ERC, AHA, SEMES)
- Reducción de errores mediante acceso inmediato a dosis, contraindicaciones y pasos de protocolos
- Formación continua con manual completo estructurado y navegable
Usuario Final
Técnicos de Emergencias Sanitarias (TES) que trabajan en:
- Ambulancias de emergencias
- Servicios de urgencias prehospitalarias
- Equipos de respuesta rápida
- Situaciones de emergencia donde el acceso rápido a información puede salvar vidas
Contexto de uso:
- Ambiente de alta presión y estrés
- Necesidad de información inmediata (< 30 segundos)
- Uso frecuente en condiciones adversas (móvil, offline, bajo presión)
- Requisito de precisión absoluta (errores pueden ser críticos)
2️⃣ Estructura Técnica
Stack Tecnológico
Frontend Framework:
- React 18.3.1 con TypeScript
- Vite 5.4.19 como build tool (SWC para compilación rápida)
- React Router DOM 6.30.1 para navegación SPA
UI Framework:
- Tailwind CSS 3.4.17 para estilos
- Radix UI (componentes headless accesibles)
- shadcn/ui (componentes pre-construidos sobre Radix)
- Lucide React para iconografía
Estado y Datos:
- TanStack Query (React Query) 5.83.0 para gestión de estado del servidor (aunque no hay backend)
- localStorage para persistencia de favoritos
- sessionStorage para historial de búsquedas
- Datos estáticos en TypeScript (
src/data/*.ts)
Procesamiento de Contenido:
- react-markdown 10.1.0 para renderizado de Markdown
- remark/rehype plugins para procesamiento avanzado de Markdown
- highlight.js para syntax highlighting en código
PWA:
- Service Worker personalizado (
public/sw.js) - Manifest.json configurado para instalación
- Workbox no usado (Service Worker manual)
Temas:
- next-themes 0.3.0 para gestión de temas (claro/oscuro/sistema)
Organización de Carpetas
guia-tes/
├── public/
│ ├── manual/ # 94 archivos .md organizados en bloques temáticos
│ ├── assets/infografias/ # Imágenes médicas e infografías
│ ├── sw.js # Service Worker
│ └── manifest.json # PWA manifest
├── src/
│ ├── components/ # Componentes React organizados por dominio
│ │ ├── layout/ # Header, Footer, BottomNav, SearchModal, etc.
│ │ ├── drugs/ # Componentes de fármacos
│ │ ├── tools/ # Calculadoras médicas
│ │ ├── procedures/ # Tarjetas de protocolos
│ │ ├── content/ # MarkdownViewer
│ │ ├── decision-trees/ # Árboles de decisión interactivos
│ │ └── ui/ # Componentes UI base (shadcn)
│ ├── pages/ # 25 páginas principales
│ ├── data/ # 14 archivos de datos estáticos TypeScript
│ ├── hooks/ # 6 hooks personalizados
│ ├── lib/ # Utilidades (cn, utils)
│ └── utils/ # Utilidades específicas (markdownUtils)
└── docs/ # Documentación del proyecto
Componentes Principales
Layout (Estructura Global):
Header.tsx: Barra superior fija con logo, búsqueda, menú, estado online/offlineBottomNav.tsx: Navegación inferior con 6 iconos principalesFooter.tsx: Información legal y enlacesSearchModal.tsx: Modal de búsqueda global con filtrosMenuSheet.tsx: Menú lateral deslizable con acceso a todas las seccionesInstallBanner.tsx: Banner para instalar PWAUpdateNotification.tsx: Notificación de actualizaciones del Service Worker
Páginas Principales (25 páginas):
Index.tsx- Home con acceso rápido a emergencias críticasSoporteVital.tsx- Protocolos de soporte vital básicoPatologias.tsx- Patologías por sistemas (respiratorias, circulatorias, etc.)Escena.tsx- Seguridad, ABCDE, Triage, InmovilizaciónFarmacos.tsx- Vademécum completo con búsqueda y filtrosHerramientas.tsx- Calculadoras, tablas de perfusión, códigosMaterial.tsx- Checklists de material sanitarioTelefono.tsx- Protocolos transtelefónicosComunicacion.tsx- Guiones de comunicaciónManualIndex.tsx- Índice navegable del manual completoManualViewer.tsx- Visor de capítulos del manual (Markdown)RCP.tsx- Protocolo RCP detallado (adulto/pediátrico)Ictus.tsx- Código IctusShock.tsx- Protocolo de ShockViaAerea.tsx- Vía Aérea y OVACEFavoritos.tsx- Lista de favoritos del usuarioHistorial.tsx- Historial de búsquedas recientesAjustes.tsx- Configuración (tema, limpieza de datos)Acerca.tsx- Información sobre la appGaleriaImagenes.tsx- Galería de infografíasPrivacidad.tsx- Política de privacidadDescargoResponsabilidad.tsx- Descargo de responsabilidad médicaAvisoLegal.tsx- Aviso legalNotFound.tsx- Página 404
Componentes de Dominio:
DrugCard.tsx- Tarjeta de fármaco con información completaTESMedicationCard.tsx- Medicación específica TESProcedureCard.tsx- Tarjeta de protocolo con pasosMarkdownViewer.tsx- Visor de archivos Markdown con procesamiento avanzadoDecisionTreeViewer.tsx- Árboles de decisión interactivosGlasgowCalculator.tsx- Calculadora de Escala de GlasgowParklandCalculator.tsx- Calculadora de fórmula de Parkland (quemaduras)PediatricDoseCalculator.tsx- Calculadora de dosis pediátricasRCPTimer.tsx- Temporizador para RCP- Y 5 calculadoras más...
Gestión del Estado
Estado Global:
- NO hay estado global (no usa Redux, Zustand, Context API global)
- Estado local por componente con
useState TanStack Queryconfigurado pero no usado activamente (no hay backend)
Persistencia Local:
- localStorage: Favoritos (
emerges-tes-favorites) - sessionStorage: Historial de búsquedas (
emerges-tes-search-history) - localStorage: Banner PWA cerrado (
pwa-install-dismissed)
Hooks Personalizados:
useFavorites.ts- Gestión de favoritos (CRUD completo)useSearchHistory.ts- Historial de búsquedas (máx 20 items, evita duplicados)usePWAInstall.ts- Detección y promoción de instalación PWAuseServiceWorker.ts- Gestión de actualizaciones del Service Workeruse-mobile.tsx- Detección de dispositivo móviluse-toast.ts- Sistema de notificaciones toast
Comunicación con Backend / Base de Datos
NO HAY BACKEND:
- Aplicación completamente estática
- Sin API REST, GraphQL, ni WebSockets
- Sin base de datos (ni SQL ni NoSQL)
- Sin autenticación ni autorización
- Sin sincronización de datos
Fuentes de Datos:
-
Archivos TypeScript estáticos en
src/data/:procedures.ts- Protocolos médicosdrugs.ts- Vademécum de fármacostes-medication.ts- Medicación específica TEScalculators.ts- Datos de calculadorasmanual-index.ts- Índice completo del manual (94 capítulos)decision-trees.ts- Árboles de decisióntelephone-protocols.ts- Protocolos transtelefónicoscommunication-scripts.ts- Guiones de comunicaciónmaterial-checklists.ts- Checklists de material- Y 5 archivos más...
-
Archivos Markdown en
public/manual/:- 94 archivos
.mdorganizados en 15 bloques temáticos - Cargados dinámicamente mediante
fetch()enMarkdownViewer - Procesados con
react-markdowny plugins
- 94 archivos
Estrategia de Carga:
- Code Splitting: Lazy loading de páginas con
React.lazy() - Carga bajo demanda: Archivos Markdown se cargan solo cuando se visualizan
- Caché del navegador: Service Worker cachea recursos estáticos
3️⃣ Flujo de Usuario
Pantalla Inicial (Home - /)
Al entrar, el usuario ve:
-
Barra de búsqueda (botón clickeable que abre modal)
- Placeholder: "Buscar protocolo, fármaco, calculadora..."
- Acceso rápido a búsqueda global
-
Grid de Emergencias Críticas (2x2)
- Botón grande "RCP / Parada" (crítico, rojo)
- Botón "Código Ictus" (alto, naranja)
- Botón "Shock" (medio, amarillo)
- Botón "Vía Aérea" (crítico, rojo)
- Cada botón tiene icono, título y subtítulo
-
Accesos Rápidos (chips horizontales)
- OVACE, Glasgow, Triage, Código Ictus, Dopamina, Politrauma
- Navegación rápida a secciones específicas
-
Últimas Consultas (historial reciente)
- Máximo 3 búsquedas recientes
- Con timestamp relativo ("hace 5 minutos")
- Vacío si no hay historial
-
Botón flotante de emergencia (esquina inferior derecha)
- Botón circular grande con icono de alerta
- Siempre visible, acceso directo a RCP
- Animación de pulso para llamar la atención
Header fijo superior:
- Logo "TES" con nombre de la app
- Indicador de estado online/offline
- Botón de búsqueda
- Botón de menú
Bottom Navigation fija inferior:
- 6 iconos: Home, Soporte, Patologías, Escena, Fármacos, Herramientas
- Navegación rápida entre secciones principales
Pantallas Principales
1. Soporte Vital (/soporte-vital)
- Lista de protocolos de soporte vital básico
- Tarjetas con título, categoría, prioridad, grupo de edad
- Filtros por categoría y prioridad
- Acceso directo a RCP, OVACE, etc.
2. Patologías (/patologias)
- Tabs por sistemas: Respiratorias, Circulatorias, Neurológicas, Endocrinas, Intoxicaciones
- Cada patología muestra: Clínica, Actuación, Puntos clave
- Formato de tarjetas expandibles
3. Escena (/escena)
- Tabs: Seguridad, ABCDE, Triage, Decisiones, Inmovilización, Extricación
- Checklists interactivos
- Árboles de decisión para protocolos
- Guías paso a paso
4. Fármacos (/farmacos)
- Dos secciones: Medicación TES y Vademécum General
- Filtros por categoría (cardiovascular, respiratorio, etc.)
- Búsqueda por nombre genérico, comercial o indicación
- Cada fármaco muestra: Dosis adulto/pediátrica, vías, indicaciones, contraindicaciones, puntos críticos TES
5. Herramientas (/herramientas)
- Tabs: Calculadoras, Perfusiones, Anatomía, Códigos
- 9 calculadoras interactivas (Glasgow, Parkland, Dosis pediátricas, etc.)
- Tablas de perfusión (Dopamina, Noradrenalina)
- Guía de terminología anatómica
- Enlaces a códigos de protocolo
6. Manual Completo (/manual)
- Vista de árbol expandible
- Estructura: Parte → Bloque → Capítulo
- 94 capítulos organizados en 15 bloques temáticos
- Búsqueda y filtrado
- Navegación jerárquica
7. Manual Viewer (/manual/:parte/:bloque/:capitulo)
- Visor de capítulo individual
- Renderizado de Markdown con estilos
- Navegación anterior/siguiente
- Breadcrumbs de ubicación
- Metadata del capítulo (tiempo lectura, importancia)
Navegación
Rutas Principales:
- Home:
/ - Contenido:
/soporte-vital,/patologias,/escena,/farmacos,/herramientas - Manual:
/manual(índice),/manual/:parte/:bloque/:capitulo(visor) - Protocolos específicos:
/rcp,/ictus,/shock,/via-aerea - Utilidades:
/favoritos,/historial,/ajustes - Información:
/acerca,/privacidad,/aviso-legal
Métodos de Navegación:
- Bottom Navigation: 6 iconos principales siempre visibles
- Menú lateral: Acceso completo a todas las secciones
- Búsqueda global: Modal con resultados instantáneos
- Enlaces contextuales: Dentro del contenido (protocolos relacionados, fármacos mencionados)
- Breadcrumbs: En páginas de manual
- Botón "Volver": En header cuando no estás en home
Acciones del Usuario
Búsqueda:
- Abrir modal de búsqueda (botón en header o home)
- Escribir mínimo 2 caracteres
- Ver resultados en tiempo real
- Filtrar por tipo (procedimientos, fármacos) y categoría
- Click en resultado → navegar y añadir a historial
Favoritos:
- Marcar cualquier protocolo, fármaco o herramienta como favorito
- Ver lista en
/favoritos - Agrupar por tipo (procedimientos, fármacos, herramientas, manual)
- Eliminar individual o limpiar todo
Calculadoras:
- Seleccionar calculadora en
/herramientas - Introducir valores en formularios
- Ver resultados instantáneos
- Interpretación automática de resultados (ej: Glasgow → severidad)
Visualización de Contenido:
- Expandir/colapsar secciones
- Navegar entre tabs
- Scroll infinito en listas largas
- Click en tarjetas para ver detalles
Instalación PWA:
- Banner automático después de 5 segundos (solo en desarrollo)
- Botón de instalación en menú
- Instalación como app nativa
4️⃣ Cómo se Muestra la Información
Tipos de Datos
1. Protocolos Médicos:
- Formato: Tarjetas (
ProcedureCard) - Información mostrada:
- Título y título corto
- Categoría (soporte_vital, patologias, escena)
- Prioridad (crítico, alto, medio, bajo) con badge de color
- Grupo de edad (adulto, pediátrico, neonatal)
- Lista de pasos numerados
- Advertencias destacadas
- Puntos clave
- Equipamiento necesario
- Fármacos relacionados
- Prioridad visual:
- Color según prioridad (rojo=crítico, naranja=alto, amarillo=medio)
- Iconos según categoría
- Badges de estado
2. Fármacos:
- Formato: Tarjetas expandibles (
DrugCard) - Información mostrada:
- Nombre genérico y comercial
- Categoría farmacológica
- Presentación
- Dosis adulto (texto descriptivo)
- Dosis pediátrica (si aplica)
- Vías de administración (badges)
- Dilución (si aplica)
- Indicaciones (lista)
- Contraindicaciones (lista destacada)
- Efectos secundarios
- Antídoto (si aplica)
- Notas importantes
- Puntos críticos TES (sección especial destacada)
- Prioridad visual:
- Sección expandida por defecto si es medicación TES
- Puntos críticos TES en color destacado
- Contraindicaciones en rojo/amarillo
3. Calculadoras:
- Formato: Formularios interactivos con resultados en tiempo real
- Información mostrada:
- Campos de entrada (inputs numéricos, selects)
- Resultado calculado
- Interpretación del resultado (ej: "TCE Grave - IOT" para Glasgow)
- Explicación del cálculo
- Referencias o fórmulas
- Prioridad visual:
- Resultado destacado en grande
- Interpretación con color según severidad
- Campos de entrada claramente marcados
4. Manual (Markdown):
- Formato: Renderizado de Markdown con estilos personalizados
- Información mostrada:
- Título del capítulo
- Contenido estructurado (títulos, listas, tablas, código)
- Imágenes embebidas (infografías médicas)
- Enlaces internos y externos
- Metadata (tiempo lectura, importancia, nivel dificultad)
- Prioridad visual:
- Títulos jerárquicos claros
- Cajas destacadas para información crítica
- Tablas con estilos médicos
- Imágenes responsivas
5. Patologías:
- Formato: Tarjetas por sistema con información estructurada
- Información mostrada:
- Nombre de la patología
- Clínica (signos y síntomas)
- Actuación (pasos de protocolo)
- Puntos clave adicionales
- Prioridad visual:
- Agrupación por sistemas (tabs)
- Información clínica vs actuación claramente separada
- Listas numeradas para pasos
6. Historial y Favoritos:
- Formato: Lista de items con iconos
- Información mostrada:
- Título del item
- Tipo (procedimiento, fármaco, herramienta, manual)
- Timestamp relativo (historial)
- Fecha de añadido (favoritos)
- Prioridad visual:
- Agrupación por tipo en favoritos
- Orden cronológico inverso
- Iconos según tipo
Formatos de Visualización
Tarjetas (Cards):
- Uso: Protocolos, fármacos, patologías
- Estilo: Borde, fondo, hover effect
- Expandible/colapsable según necesidad
Listas:
- Uso: Pasos de protocolos, indicaciones, contraindicaciones
- Estilo: Numeradas o con viñetas
- Priorización visual con colores
Tablas:
- Uso: Tablas de perfusión, dosis comparativas
- Estilo: Filas alternadas, headers destacados
- Responsive con scroll horizontal en móvil
Formularios:
- Uso: Calculadoras
- Estilo: Inputs con labels claros, validación visual
- Resultados destacados
Árboles de Decisión:
- Uso: Protocolos con decisiones condicionales
- Estilo: Nodos con preguntas/acciones, flechas de navegación
- Interactivo: click para avanzar
Markdown Renderizado:
- Uso: Manual completo
- Estilo: Tipografía médica, espaciado generoso
- Syntax highlighting para código
Información Prioritaria vs Secundaria
Prioritaria (siempre visible o destacada):
- Título y subtítulo de protocolos/fármacos
- Pasos numerados de protocolos críticos
- Dosis de fármacos (adulto y pediátrica)
- Contraindicaciones (en rojo/amarillo)
- Puntos críticos TES (sección especial)
- Resultados de calculadoras (grande y destacado)
- Advertencias en protocolos (cajas destacadas)
Secundaria (expandible o en segundo nivel):
- Efectos secundarios de fármacos
- Notas adicionales
- Referencias bibliográficas
- Metadata del manual (tiempo lectura, autor)
- Información legal (en páginas dedicadas)
Oculta hasta interacción:
- Detalles técnicos de fármacos
- Explicaciones extensas
- Checklists completos (expandibles)
- Árboles de decisión (navegación paso a paso)
5️⃣ Roles y Permisos
Tipos de Usuario
NO HAY SISTEMA DE ROLES:
- La aplicación es completamente abierta y pública
- No requiere registro ni autenticación
- No hay diferenciación de usuarios
- Todos los usuarios tienen acceso completo a todo el contenido
Acceso al Contenido
Acceso Universal:
- ✅ Todos los protocolos médicos
- ✅ Todo el vademécum de fármacos
- ✅ Todas las calculadoras
- ✅ Manual completo (94 capítulos)
- ✅ Checklists de material
- ✅ Protocolos transtelefónicos
- ✅ Guiones de comunicación
Sin Restricciones:
- No hay contenido premium
- No hay contenido por suscripción
- No hay contenido por nivel de certificación
- No hay contenido geográfico restringido
Personalización por Usuario
Limitada a datos locales:
- Favoritos: Cada usuario puede marcar sus propios favoritos (almacenado en localStorage)
- Historial: Cada usuario tiene su propio historial de búsquedas (almacenado en sessionStorage)
- Tema: Preferencia de tema claro/oscuro (almacenado en localStorage por next-themes)
Sin sincronización:
- Los favoritos no se sincronizan entre dispositivos
- El historial se pierde al cerrar el navegador
- No hay perfil de usuario ni configuración en la nube
6️⃣ Lógica Funcional
Reglas Importantes
1. Búsqueda:
- Mínimo 2 caracteres para activar búsqueda
- Búsqueda en tiempo real (sin botón de buscar)
- Busca en: títulos, subtítulos, indicaciones, palabras clave
- Filtros combinables: tipo (procedimiento/fármaco) + categoría
- Resultados ordenados por relevancia (no explícita, implícita por orden en datos)
2. Historial:
- Máximo 20 items en historial
- Evita duplicados recientes (mismo item en últimos 5 minutos actualiza timestamp)
- Ordenado por fecha (más reciente primero)
- Se limpia al cerrar navegador (sessionStorage)
- Se puede limpiar manualmente desde Ajustes
3. Favoritos:
- Sin límite de favoritos
- Agrupados por tipo (procedimientos, fármacos, herramientas, manual)
- Ordenados por fecha de añadido (más reciente primero)
- Persisten entre sesiones (localStorage)
- Se pueden eliminar individualmente o limpiar todos
4. Calculadoras:
- Validación de inputs (rangos numéricos, valores requeridos)
- Cálculo automático al cambiar valores
- Interpretación automática de resultados (ej: Glasgow → severidad)
- Sin guardado de resultados (cada uso es independiente)
5. Service Worker:
- Cachea recursos estáticos en instalación
- Estrategia Cache-First para assets (imágenes, CSS, JS)
- Estrategia Network-First para HTML
- Actualiza automáticamente cuando hay nueva versión
- Notifica al usuario cuando hay actualización disponible
6. PWA Install:
- Banner automático después de 5 segundos (solo en desarrollo)
- Detección de capacidad de instalación (beforeinstallprompt)
- Instalación como app nativa en móviles y escritorio
- Funciona offline después de instalación
Decisiones Automáticas
1. Carga de Contenido:
- Lazy loading: Páginas se cargan solo cuando se navega a ellas
- Code splitting: Chunks separados por página y librería
- Carga bajo demanda: Archivos Markdown se cargan solo al visualizarlos
2. Renderizado:
- Suspense boundaries: Muestra loader mientras carga componente lazy
- Error boundaries: Captura errores y muestra mensaje amigable
- Fallbacks: Si falla carga de Markdown, muestra mensaje de error
3. Tema:
- Detección automática: Usa tema del sistema por defecto
- Persistencia: Guarda preferencia del usuario
- Transición suave: Cambio de tema sin flash
4. Navegación:
- SPA routing: Todas las rutas manejadas por React Router
- Fallback a index.html: Rutas no encontradas redirigen a 404
- Historial del navegador: Usa history API para navegación
5. Búsqueda:
- Debounce implícito: Búsqueda se ejecuta en cada cambio (sin debounce explícito)
- Filtrado automático: Resultados se filtran según filtros activos
- Ordenamiento: Resultados ordenados por orden en datos (no por relevancia calculada)
Dependencias del Usuario vs Automáticas
Automáticas (sin intervención del usuario):
- ✅ Carga de contenido bajo demanda
- ✅ Caché de recursos por Service Worker
- ✅ Detección de actualizaciones del Service Worker
- ✅ Cálculo de resultados en calculadoras
- ✅ Filtrado de resultados en búsqueda
- ✅ Agrupación de favoritos por tipo
- ✅ Ordenamiento de historial por fecha
- ✅ Detección de tema del sistema
- ✅ Detección de estado online/offline
Requieren acción del usuario:
- ❌ Marcar/desmarcar favoritos
- ❌ Realizar búsqueda (escribir query)
- ❌ Seleccionar filtros en búsqueda
- ❌ Introducir valores en calculadoras
- ❌ Expandir/colapsar secciones
- ❌ Navegar entre tabs
- ❌ Instalar PWA (requiere confirmación)
- ❌ Aplicar actualización del Service Worker (requiere confirmación)
- ❌ Cambiar tema manualmente
- ❌ Limpiar favoritos/historial
7️⃣ Puntos Fuertes y Limitaciones Actuales
Puntos Fuertes
1. Arquitectura Técnica:
- ✅ Stack moderno y mantenible: React 18 + TypeScript + Vite
- ✅ Code splitting eficiente: Lazy loading de páginas reduce bundle inicial
- ✅ PWA funcional: Service Worker bien implementado, funciona offline
- ✅ TypeScript: Tipado fuerte reduce errores
- ✅ Componentes reutilizables: shadcn/ui + Radix UI bien estructurados
- ✅ Responsive design: Funciona bien en móvil y escritorio
2. Organización del Código:
- ✅ Separación clara de responsabilidades: pages, components, data, hooks
- ✅ Datos estructurados: TypeScript interfaces bien definidas
- ✅ Hooks personalizados: Lógica reutilizable bien encapsulada
- ✅ Nomenclatura consistente: Convenciones claras en todo el código
3. Experiencia de Usuario:
- ✅ Navegación intuitiva: Bottom nav + menú lateral + búsqueda
- ✅ Acceso rápido a emergencias: Botones grandes en home
- ✅ Búsqueda eficiente: Modal con resultados instantáneos
- ✅ Offline-first: Funciona sin conexión después de instalación
- ✅ Tema claro/oscuro: Adaptación a preferencias del usuario
4. Contenido:
- ✅ Manual completo: 94 capítulos bien estructurados
- ✅ Datos médicos completos: Protocolos, fármacos, calculadoras
- ✅ Información crítica destacada: Puntos TES, contraindicaciones
- ✅ Formato adecuado: Markdown permite fácil mantenimiento
5. Performance:
- ✅ Carga rápida inicial: Bundle pequeño gracias a code splitting
- ✅ Caché eficiente: Service Worker cachea recursos estáticos
- ✅ Lazy loading: Contenido se carga solo cuando se necesita
Limitaciones Actuales
1. Arquitectura:
- ⚠️ Sin backend: No hay sincronización, no hay actualizaciones dinámicas
- ⚠️ Datos estáticos: Todo hardcodeado en TypeScript, difícil de actualizar
- ⚠️ Sin autenticación: No hay usuarios, no hay personalización avanzada
- ⚠️ Sin base de datos: No hay persistencia centralizada, solo localStorage
2. Escalabilidad:
- ⚠️ Manual hardcodeado: 94 archivos Markdown estáticos, difícil de mantener
- ⚠️ Datos en código: Fármacos y protocolos en archivos TS, requiere rebuild para actualizar
- ⚠️ Sin CMS: No hay interfaz para editar contenido sin tocar código
- ⚠️ Sin versionado de contenido: No hay historial de cambios del manual
3. Funcionalidad:
- ⚠️ Búsqueda básica: Solo búsqueda por texto, sin ranking de relevancia
- ⚠️ Sin sugerencias: No hay autocompletado en búsqueda
- ⚠️ Sin filtros avanzados: Filtros limitados a tipo y categoría
- ⚠️ Sin historial de uso: No hay analytics ni tracking de uso
- ⚠️ Sin compartir: No hay forma de compartir protocolos específicos (solo URL)
4. UX/UI:
- ⚠️ Sin feedback visual avanzado: No hay animaciones de transición entre páginas
- ⚠️ Sin modo de lectura: No hay modo de lectura optimizado para manual
- ⚠️ Sin marcadores: No hay forma de marcar posición en manual
- ⚠️ Sin notas: No hay forma de añadir notas personales a protocolos
5. Contenido:
- ⚠️ Sin validación médica explícita: No hay indicador de validación médica por protocolo
- ⚠️ Sin versionado de protocolos: No se muestra versión de guía (ERC, AHA) por protocolo
- ⚠️ Sin referencias cruzadas: Enlaces entre protocolos relacionados son limitados
- ⚠️ Sin casos clínicos: No hay ejemplos prácticos de aplicación
6. Performance:
- ⚠️ Carga inicial de Markdown: Archivos Markdown se cargan con fetch, puede ser lento
- ⚠️ Sin pre-carga: No hay pre-carga de contenido probablemente necesario
- ⚠️ Bundle grande: Aunque hay code splitting, el bundle inicial sigue siendo considerable
7. PWA:
- ⚠️ Sin push notifications: No hay notificaciones de actualizaciones de protocolos
- ⚠️ Sin sincronización: Favoritos no se sincronizan entre dispositivos
- ⚠️ Sin actualizaciones automáticas: Contenido requiere rebuild para actualizar
8. Seguridad y Privacidad:
- ⚠️ Sin HTTPS requerido: Aunque es PWA, no hay validación de HTTPS
- ⚠️ Datos locales sin encriptación: localStorage sin encriptación
- ⚠️ Sin política de retención: No hay límite de tiempo para datos locales
Partes MVP o Provisionales
1. Búsqueda:
- Implementación básica funcional pero mejorable
- Sin ranking de relevancia
- Sin autocompletado
- Sin búsqueda por voz (útil en emergencias)
2. Manual:
- Estructura funcional pero rígida
- Sin editor de contenido
- Sin versionado
- Sin colaboración
3. Analytics:
- Sin tracking de uso
- Sin métricas de performance
- Sin feedback de usuarios
4. Actualizaciones:
- Sistema básico de notificación de actualizaciones
- Sin actualizaciones incrementales
- Sin rollback de versiones
5. Internacionalización:
- Solo español
- Sin soporte multi-idioma
- Sin traducción de contenido
8️⃣ Resumen Final
Descripción para Otro Desarrollador
EMERGES TES es una aplicación web progresiva (PWA) diseñada como guía de consulta rápida para Técnicos de Emergencias Sanitarias. Es esencialmente una enciclopedia médica offline especializada en protocolos de emergencias prehospitalarias.
Arquitectura:
La aplicación está construida con React 18 + TypeScript + Vite, usando React Router para navegación SPA. No tiene backend ni base de datos; todo el contenido está hardcodeado en archivos TypeScript (src/data/) y 94 archivos Markdown (public/manual/). Usa localStorage para favoritos y sessionStorage para historial de búsquedas.
Estructura de datos: El contenido médico está organizado en 14 archivos TypeScript que definen protocolos, fármacos, calculadoras, árboles de decisión, etc. El manual completo son 94 capítulos Markdown organizados en 15 bloques temáticos. Todo se carga estáticamente; no hay API ni base de datos.
Flujo principal:
- Usuario entra y ve home con acceso rápido a emergencias críticas
- Puede buscar protocolos/fármacos mediante modal de búsqueda
- Navega entre secciones mediante bottom nav o menú lateral
- Visualiza contenido en formato de tarjetas (protocolos, fármacos) o Markdown (manual)
- Puede marcar favoritos y ver historial de búsquedas
- Todo funciona offline después de instalación PWA
Características clave:
- Offline-first: Service Worker cachea todo, funciona sin internet
- Code splitting: Páginas se cargan bajo demanda para reducir bundle inicial
- Búsqueda global: Modal que busca en protocolos y fármacos simultáneamente
- Tema claro/oscuro: Adaptación a preferencias del sistema/usuario
- Responsive: Funciona bien en móvil y escritorio
Limitaciones principales:
- Sin backend: Todo es estático, requiere rebuild para actualizar contenido
- Datos hardcodeados: Fármacos y protocolos en código TypeScript
- Búsqueda básica: Sin ranking de relevancia ni autocompletado
- Sin usuarios: No hay autenticación ni personalización avanzada
- Sin sincronización: Favoritos no se sincronizan entre dispositivos
Estado actual: La aplicación está funcional y desplegada, con contenido médico completo (94 capítulos de manual, protocolos, fármacos, calculadoras). Es un MVP sólido que cumple su función principal (consulta rápida offline), pero tiene limitaciones de escalabilidad y mantenimiento debido a la arquitectura completamente estática.
Tecnologías destacadas:
- React 18 con TypeScript para type safety
- Vite para build rápido y code splitting
- React Router para SPA navigation
- Service Worker manual para PWA offline
- react-markdown para renderizado de contenido médico
- Tailwind CSS + shadcn/ui para UI consistente
- TanStack Query configurado pero no usado activamente (sin backend)
En resumen: Es una enciclopedia médica offline bien estructurada técnicamente, con contenido completo y funcionalidad básica sólida, pero con limitaciones arquitectónicas que dificultan la escalabilidad y el mantenimiento a largo plazo debido a la ausencia de backend y la naturaleza estática de los datos.
Fin del Informe
Este informe describe la aplicación tal como existe actualmente, sin proponer mejoras ni refactorizaciones.