codigo0/PLAN_CAMINO_A_Y_EVOLUCION_A_B.md
planetazuzu af02a569a2 feat: Aplicación completa Manual TES Digital
- Integración de 93 capítulos del manual completo
- Componente MarkdownViewer para renderizar archivos .md
- Navegación jerárquica completa (ManualIndex)
- Sistema de búsqueda mejorado
- Página ManualViewer con navegación anterior/siguiente
- Scripts de verificación del manual
- Puerto configurado en 8096
- Configuración de despliegue (Vercel, Netlify, GitHub Pages)
- Todos los problemas detectados corregidos
2025-12-17 12:12:10 +01:00

1669 lines
53 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# PLAN TÉCNICO Y ESTRATÉGICO
## Camino A: Offline-First → Camino B: Plataforma Viva
**Proyecto:** EMERGES TES - Protocolo Rápido
**Versión del Plan:** 1.0
**Fecha:** 2024
**Arquitecto:** Senior Software Architect
---
## TABLA DE CONTENIDOS
1. [Definición de Caminos](#1-definición-de-caminos)
2. [Arquitectura Base](#2-arquitectura-base)
3. [Fases del Camino A](#3-fases-del-camino-a)
4. [Decisiones Arquitectónicas Clave](#4-decisiones-arquitectónicas-clave)
5. [Protocolos Transtelefónicos Específicos Camino A](#5-protocolos-transtelefónicos-específicos--camino-a)
6. [Requisitos para Camino B](#6-requisitos-para-camino-b)
7. [Plan de Acción Priorizado](#7-plan-de-acción-priorizado)
8. [Checklist Final](#8-checklist-final)
---
## 1. DEFINICIÓN DE CAMINOS
### 1.1 CAMINO A: Aplicación Offline-First
#### Qué ES el Camino A
**Definición:**
Aplicación web PWA (Progressive Web App) completamente autónoma, diseñada para funcionar **100% offline** desde la primera carga. Todos los datos médicos están embebidos en el bundle de la aplicación, permitiendo consulta instantánea sin dependencia de conectividad.
**Características principales:**
-**Funciona sin internet** después de la primera instalación
-**Datos embebidos** en el bundle (JSON estático)
-**Sin backend** ni llamadas a API
-**Persistencia local** (localStorage/IndexedDB) para preferencias de usuario
-**Service Worker** para cache agresivo y actualizaciones controladas
-**PWA instalable** en dispositivos móviles
-**Rápida y fiable** - sin latencia de red
-**Responsable médicamente** - contenido validado y versionado
#### Qué NO incluye el Camino A
**Excluido explícitamente:**
-**Backend/API** - No hay servidor, no hay llamadas HTTP
-**Autenticación de usuarios** - Aplicación pública
-**Sincronización entre dispositivos** - Cada dispositivo es independiente
-**Actualizaciones en tiempo real** - Contenido estático por versión
-**Chat con IA** - No hay procesamiento en servidor
-**Búsqueda semántica con embeddings** - Solo búsqueda local por texto
-**Analytics remotos** - Solo métricas locales opcionales
-**Contenido dinámico** - Todo el contenido viene en el bundle
**Razón de exclusión:**
El Camino A prioriza **fiabilidad absoluta** y **funcionamiento garantizado** en situaciones críticas (ambulancias sin cobertura, zonas rurales). Cualquier dependencia externa es un punto de fallo inaceptable.
---
### 1.2 CAMINO B: Plataforma Viva con Backend
#### Qué implica el Camino B
**Definición:**
Evolución del Camino A hacia una plataforma completa con backend, manteniendo la capacidad offline como base, pero añadiendo capacidades de sincronización, actualizaciones dinámicas y funcionalidades avanzadas.
**Características adicionales:**
-**Backend API** para gestión de contenido
-**Sincronización** de favoritos/historial entre dispositivos
-**Actualizaciones incrementales** de contenido médico
-**Autenticación de usuarios** (opcional, para sincronización)
-**Chat con IA** para consultas avanzadas
-**Búsqueda semántica** con embeddings
-**Analytics** de uso (anónimo, con consentimiento)
-**Versionado de contenido** con historial de cambios
-**Validación médica** centralizada y auditada
**Principio fundamental:**
El Camino B **extiende** el Camino A, no lo reemplaza. La aplicación debe seguir funcionando **completamente offline** incluso con backend disponible.
---
### 1.3 Qué decisiones actuales facilitan el Camino B
**Decisiones arquitectónicas que ya preparan la evolución:**
1. **Separación de datos y lógica**
- Datos en archivos separados (`src/data/`)
- Interfaces TypeScript bien definidas
-**Facilita:** Migración a API sin cambiar componentes
2. **Identificadores estables**
- IDs semánticos (`'rcp-adulto-svb'`, `'adrenalina'`)
-**Facilita:** Sincronización y versionado futuro
3. **Componentes desacoplados**
- Componentes no conocen el origen de datos
-**Facilita:** Intercambiar fuente de datos (local → API)
4. **TypeScript estricto**
- Interfaces bien definidas
-**Facilita:** Contratos API consistentes
5. **React Query ya instalado**
- Aunque no se usa, está listo
-**Facilita:** Integración de API sin cambios arquitectónicos
---
## 2. ARQUITECTURA BASE
### 2.1 Principios Arquitectónicos
#### 2.1.1 Offline-First
**Principio:** La aplicación debe funcionar completamente sin conexión. Cualquier funcionalidad online es **opcional y mejorativa**, nunca requerida.
**Implementación:**
- Service Worker cachea todos los assets y datos
- IndexedDB para almacenamiento local robusto
- Estrategia "Cache First" para todos los recursos
#### 2.1.2 Separación de Concerns
**Principio:** Separar claramente:
- **Datos** (qué información se muestra)
- **Lógica de negocio** (cómo se procesa)
- **Presentación** (cómo se muestra)
**Implementación:**
```
src/
├── data/ # Fuente de datos (ahora: archivos TS, futuro: API client)
├── services/ # Lógica de negocio (búsqueda, filtrado, cálculos)
├── stores/ # Estado global (favoritos, historial)
└── components/ # Presentación pura
```
#### 2.1.3 Abstracción de Acceso a Datos
**Principio:** Los componentes **nunca** acceden directamente a arrays de datos. Siempre a través de una capa de abstracción.
**Implementación:**
```typescript
// ❌ MAL (actual)
import { procedures } from '@/data/procedures';
const filtered = procedures.filter(...);
// ✅ BIEN (Camino A preparado para B)
import { dataService } from '@/services/data';
const filtered = await dataService.getProcedures({ category: 'rcp' });
```
**Beneficio:** En Camino B, `dataService` puede cambiar de local a API sin tocar componentes.
#### 2.1.4 Versionado de Contenido
**Principio:** Todo contenido médico debe tener versión y fecha de validación.
**Implementación:**
```typescript
interface ContentMetadata {
version: string; // "1.2.3"
lastValidated: string; // ISO date
validatedBy?: string; // ID del profesional médico
source?: string; // Guía oficial de referencia
}
```
---
### 2.2 Estructura de Carpetas Propuesta
```
src/
├── data/ # Datos estáticos (Camino A)
│ ├── procedures.json # Migrado desde .ts
│ ├── drugs.json
│ ├── pathologies.json
│ └── metadata.json # Versión, fecha validación
├── services/ # Capa de servicios (NUEVO)
│ ├── data/ # Acceso a datos (abstracción)
│ │ ├── localDataService.ts # Camino A: lee JSON
│ │ ├── apiDataService.ts # Camino B: llama API
│ │ └── dataService.ts # Factory/Adapter
│ ├── search/ # Lógica de búsqueda
│ ├── storage/ # Persistencia local
│ └── sync/ # Sincronización (Camino B)
├── stores/ # Estado global (NUEVO)
│ ├── favorites.ts # Favoritos (localStorage)
│ ├── history.ts # Historial de búsquedas
│ └── settings.ts # Configuración usuario
├── hooks/ # Custom hooks
│ ├── useData.ts # Hook para acceder a datos (abstracción)
│ └── useStorage.ts # Hook para persistencia
├── components/ # Componentes UI (sin cambios)
├── pages/ # Páginas (sin cambios)
└── lib/ # Utilidades
```
---
## 3. FASES DEL CAMINO A
### FASE 1: Arquitectura y Abstracción de Datos
#### Objetivo
Crear la capa de abstracción que permita cambiar de datos locales a API sin reescribir componentes.
#### Qué se implementa AHORA
1. **Servicio de Datos Abstracto**
```typescript
// src/services/data/dataService.ts
interface DataService {
getProcedures(filters?: ProcedureFilters): Promise<Procedure[]>;
getProcedureById(id: string): Promise<Procedure | null>;
getDrugs(filters?: DrugFilters): Promise<Drug[]>;
getDrugById(id: string): Promise<Drug | null>;
// ... otros métodos
}
```
2. **Implementación Local (Camino A)**
```typescript
// src/services/data/localDataService.ts
class LocalDataService implements DataService {
// Lee de JSON estático
// Retorna Promise para mantener misma interfaz que API
}
```
3. **Factory Pattern**
```typescript
// src/services/data/dataService.ts
export const dataService: DataService = new LocalDataService();
// En Camino B: cambiar a new ApiDataService()
```
4. **Migración de Datos a JSON**
- Convertir `procedures.ts``procedures.json`
- Convertir `drugs.ts``drugs.json`
- Mantener tipos TypeScript en archivos separados
#### Qué se deja PREPARADO para el futuro
- ✅ Interfaz `DataService` lista para implementación con API
- ✅ Todos los componentes usan `dataService`, no arrays directos
- ✅ Estructura de datos compatible con formato API futuro
#### Qué NO se implementa todavía
- ❌ Llamadas HTTP reales
- ❌ Manejo de errores de red
- ❌ Cache de respuestas API
- ❌ Sincronización
**Esfuerzo estimado:** 3-5 días
**Prioridad:** 🔴 ALTA (base para todo lo demás)
---
### FASE 2: Gestión de Datos y Versionado
#### Objetivo
Estructurar datos médicos con versionado, validación y metadata para responsabilidad médica.
#### Qué se implementa AHORA
1. **Metadata de Contenido**
```typescript
// src/data/metadata.json
{
"version": "1.0.0",
"lastValidated": "2024-01-15",
"validatedBy": "Dr. [Nombre]",
"source": "Guías ERC 2021, SEMES 2023",
"procedures": {
"count": 5,
"lastUpdated": "2024-01-10"
},
"drugs": {
"count": 5,
"lastUpdated": "2024-01-10"
}
}
```
2. **Versionado por Entidad**
```typescript
interface Procedure {
id: string;
version: string; // Versión de este protocolo específico
lastValidated: string; // Fecha última validación
// ... resto de campos
}
```
3. **Sistema de Identificadores Estables**
- IDs semánticos e inmutables
- No usar IDs numéricos auto-incrementales
- Formato: `{categoria}-{nombre}-{variante}`
4. **Validación de Datos en Build**
- Script que valida estructura de JSON
- Verifica que todos los IDs sean únicos
- Valida tipos TypeScript
#### Qué se deja PREPARADO para el futuro
- ✅ Estructura de versionado compatible con sistema de actualizaciones
- ✅ Metadata lista para sincronización
- ✅ IDs estables para merge de cambios
#### Qué NO se implementa todavía
- ❌ Sistema de actualizaciones incrementales
- ❌ Comparación de versiones
- ❌ Merge de cambios
**Esfuerzo estimado:** 2-3 días
**Prioridad:** 🔴 ALTA (responsabilidad médica)
---
### FASE 3: Persistencia Local y Estado de Usuario
#### Objetivo
Implementar almacenamiento local robusto para favoritos, historial y preferencias, preparado para sincronización futura.
#### Qué se implementa AHORA
1. **Capa de Abstracción de Storage**
```typescript
// src/services/storage/storageService.ts
interface StorageService {
saveFavorites(favorites: string[]): Promise<void>;
getFavorites(): Promise<string[]>;
saveHistory(history: HistoryEntry[]): Promise<void>;
getHistory(): Promise<HistoryEntry[]>;
}
```
2. **Implementación con IndexedDB**
- Usar librería `idb` (IndexedDB wrapper)
- Más robusto que localStorage
- Permite estructuras complejas
- Preparado para sincronización
3. **Store de Estado Global**
```typescript
// src/stores/favorites.ts
// Zustand o Context API simple
// Gestiona estado reactivo de favoritos
```
4. **Funcionalidad Completa de Favoritos**
- Persistencia real (no solo UI)
- Página de favoritos
- Sincronización entre tabs (BroadcastChannel)
5. **Historial de Búsquedas Real**
- Almacena búsquedas reales del usuario
- Limpieza automática (últimos 50)
- Timestamps para ordenamiento
#### Qué se deja PREPARADO para el futuro
- ✅ Estructura de datos compatible con formato de sincronización
- ✅ Timestamps y metadata para merge
- ✅ IDs de usuario (placeholder) para multi-dispositivo
#### Qué NO se implementa todavía
- ❌ Sincronización con servidor
- ❌ Autenticación de usuarios
- ❌ Resolución de conflictos
**Esfuerzo estimado:** 4-5 días
**Prioridad:** 🟡 MEDIA (mejora UX significativa)
---
### FASE 4: Offline y PWA
#### Objetivo
Garantizar funcionamiento 100% offline y hacer la app instalable como PWA.
#### Qué se implementa AHORA
1. **Service Worker Completo**
```typescript
// public/sw.js
// Estrategia: Cache First para todo
// Cache de assets, JSON de datos, HTML
```
2. **Manifest PWA**
```json
// public/manifest.json
{
"name": "EMERGES TES",
"short_name": "EMERGES",
"start_url": "/",
"display": "standalone",
"theme_color": "#1a1f2e",
"background_color": "#1a1f2e",
"icons": [...]
}
```
3. **Cache Strategy**
- **Assets estáticos:** Cache permanente
- **Datos JSON:** Cache con versionado
- **HTML:** Network First, fallback a cache
- **Actualizaciones:** Check en background, notificar usuario
4. **Offline Detection**
- Detectar estado de conexión
- Mostrar indicador visual
- Mensaje informativo (no bloqueante)
5. **Actualización de Contenido**
- Version check en startup
- Descargar nuevo bundle si hay actualización
- Actualizar cache automáticamente
#### Qué se deja PREPARADO para el futuro
- ✅ Service Worker preparado para cache de respuestas API
- ✅ Estrategia de actualización compatible con actualizaciones incrementales
- ✅ Sistema de versionado para detectar cambios
#### Qué NO se implementa todavía
- ❌ Actualizaciones incrementales de contenido
- ❌ Sincronización de cache con servidor
- ❌ Push notifications
**Esfuerzo estimado:** 5-7 días
**Prioridad:** 🔴 ALTA (core del Camino A)
---
### FASE 5: Seguridad y Estabilidad
#### Objetivo
Garantizar que la aplicación no falle en situaciones críticas y maneje errores gracefully.
#### Qué se implementa AHORA
1. **Error Boundaries**
```typescript
// src/components/ErrorBoundary.tsx
// Captura errores de React
// Muestra pantalla de error amigable
// Permite recuperación
```
2. **Manejo de Errores en Servicios**
```typescript
// Try/catch en todas las operaciones críticas
// Logging local (no remoto)
// Fallbacks cuando sea posible
```
3. **Validación de Datos en Runtime**
- Validar estructura de JSON al cargar
- Validar tipos con Zod (ya instalado)
- Fallback a versión anterior si datos corruptos
4. **Testing Básico**
- Tests unitarios de servicios críticos
- Tests de componentes de calculadoras
- Tests de búsqueda y filtrado
5. **Performance Monitoring**
- Métricas locales de rendimiento
- Detección de memory leaks
- Optimización de bundle size
#### Qué se deja PREPARADO para el futuro
- ✅ Estructura de logging compatible con envío remoto (opcional)
- ✅ Error tracking preparado para integración con servicio externo
#### Qué NO se implementa todavía
- ❌ Analytics remotos
- ❌ Error tracking en servidor
- ❌ Performance monitoring remoto
**Esfuerzo estimado:** 4-5 días
**Prioridad:** 🔴 ALTA (crítico para producción)
---
### FASE 6: Aspectos Legales y Responsabilidad Médica
#### Objetivo
Proteger legalmente el proyecto y asegurar que los usuarios entienden las limitaciones.
#### Qué se implementa AHORA
1. **Disclaimer Médico Prominente**
```typescript
// src/pages/Legal.tsx
// Página completa de términos y condiciones
// Disclaimer de responsabilidad médica
// Aviso de que es herramienta de apoyo, no reemplaza criterio profesional
```
2. **Aviso de Versión y Validación**
- Mostrar versión de contenido en UI
- Mostrar fecha de última validación
- Link a fuentes oficiales
3. **Términos de Uso**
- Uso responsable
- Limitación de responsabilidad
- Propiedad intelectual
4. **Consentimiento Inicial (si necesario)**
- Modal de aceptación en primer uso
- Almacenar consentimiento localmente
#### Qué se deja PREPARADO para el futuro
- ✅ Estructura legal compatible con términos de servicio online
- ✅ Sistema de consentimiento preparado para GDPR (si aplica)
#### Qué NO se implementa todavía
- ❌ Sistema de usuarios y aceptación de términos por usuario
- ❌ Tracking de consentimientos
**Esfuerzo estimado:** 2-3 días (incluye revisión legal)
**Prioridad:** 🔴 CRÍTICA (protección legal)
---
### FASE 7: Contenido Médico Expandido
#### Objetivo
Expandir la base de datos de protocolos y fármacos a un nivel útil para producción.
#### Qué se implementa AHORA
1. **Expansión de Protocolos**
- Mínimo 20-25 protocolos de soporte vital
- Cobertura de situaciones comunes de emergencia
- Protocolos pediátricos completos
2. **Expansión de Fármacos**
- Mínimo 30-40 fármacos de emergencia
- Cobertura de categorías principales
- Dosis pediátricas completas
3. **Expansión de Patologías**
- Mínimo 5-7 patologías por categoría
- Total: 25-35 patologías
4. **Validación Médica**
- Revisión por profesional médico
- Referencias a guías oficiales
- Documentación de fuentes
#### Qué se deja PREPARADO para el futuro
- ✅ Estructura de datos compatible con importación masiva
- ✅ Sistema de versionado para actualizaciones de contenido
#### Qué NO se implementa todavía
- ❌ CMS para gestión de contenido
- ❌ Sistema de contribuciones
- ❌ Workflow de validación automatizado
**Esfuerzo estimado:** 2-4 semanas (depende de fuente de datos)
**Prioridad:** 🔴 CRÍTICA (hace la app útil)
---
## 4. DECISIONES ARQUITECTÓNICAS CLAVE
### 4.1 Abstracción de Acceso a Datos
**Decisión:** Crear capa de servicio que abstrae el origen de datos.
**Implementación:**
```typescript
// Interfaz común
interface DataService {
getProcedures(filters?: Filters): Promise<Procedure[]>;
}
// Camino A: Implementación local
class LocalDataService implements DataService {
async getProcedures() {
const data = await import('@/data/procedures.json');
return data.default;
}
}
// Camino B: Implementación API (futuro)
class ApiDataService implements DataService {
async getProcedures(filters) {
const response = await fetch('/api/procedures', { body: filters });
return response.json();
}
}
// Factory
export const dataService: DataService =
import.meta.env.VITE_USE_API === 'true'
? new ApiDataService()
: new LocalDataService();
```
**Beneficio:** Cambio de local a API sin tocar componentes.
---
### 4.2 Separación de Contenido y Lógica
**Decisión:** Separar completamente datos (JSON) de código (TypeScript).
**Estructura:**
```
src/data/
├── procedures.json # Datos puros
├── drugs.json
├── types.ts # Interfaces TypeScript
└── metadata.json # Versionado y validación
```
**Beneficio:**
- Contenido editable sin tocar código
- Preparado para CMS futuro
- Validación independiente
---
### 4.3 Versionado de Contenido Médico
**Decisión:** Todo contenido médico tiene versión y metadata de validación.
**Estructura:**
```typescript
interface ContentItem {
id: string;
version: string; // "1.2.3"
lastValidated: string; // ISO date
validatedBy?: string; // ID profesional
source: string; // Guía de referencia
createdAt: string;
updatedAt: string;
}
```
**Beneficio:**
- Trazabilidad de cambios
- Responsabilidad médica
- Preparado para actualizaciones incrementales
---
### 4.4 Identificadores Estables
**Decisión:** Usar IDs semánticos e inmutables, nunca numéricos auto-incrementales.
**Formato:**
- Protocolos: `{categoria}-{nombre}-{variante}`
- Ejemplo: `rcp-adulto-svb`, `shock-hemorragico`
- Fármacos: `{nombre-generico}`
- Ejemplo: `adrenalina`, `midazolam`
**Beneficio:**
- IDs no cambian entre versiones
- Compatible con sincronización
- URLs estables para compartir
---
### 4.5 Persistencia Local Preparada para Sincronización
**Decisión:** Estructurar datos locales con metadata para sincronización futura.
**Estructura:**
```typescript
interface Favorite {
itemId: string; // ID del protocolo/fármaco
itemType: 'procedure' | 'drug';
addedAt: string; // Timestamp
syncedAt?: string; // Timestamp última sincronización (Camino B)
deviceId?: string; // ID dispositivo (Camino B)
}
```
**Beneficio:**
- Estructura compatible con sync
- Timestamps para resolución de conflictos
- Preparado para multi-dispositivo
---
## 5. PROTOCOLOS TRANSTELEFÓNICOS ESPECÍFICOS CAMINO A
### 5.1 Introducción y Alcance
Esta sección documenta protocolos específicos para **soporte transtelefónico** en situaciones de emergencia. Estos protocolos están diseñados para ser consultados rápidamente durante una llamada de emergencia, proporcionando guías estructuradas para el operador que asiste al ciudadano.
**Características del Camino A:**
- ✅ Protocolos estáticos embebidos en la aplicación
- ✅ Consulta rápida sin dependencia de conectividad
- ✅ Estructura clara y secuencial
- ✅ Preparado para evolución a flujos interactivos (Camino B)
**Nota Importante:**
Estos protocolos son **procedimentales** y están pensados para **uso profesional** por operadores de emergencias sanitarias. **No sustituyen la formación reglada** ni el criterio clínico del profesional. El contenido debe ser validado por profesionales médicos antes de su implementación.
---
### 5.2 Sospecha de Parada Cardiorrespiratoria (PCR)
#### 5.2.1 Protocolo de Identificación
**Objetivo:** Identificar rápidamente si se trata de una parada cardiorrespiratoria real.
**Pasos de Identificación:**
1. **Verificar consciencia**
- Preguntar: "¿Se encuentra bien?" o "¿Me oye?"
- Si no responde: considerar inconsciencia
2. **Verificar respiración**
- Instruir al testigo: "Acérquese y compruebe si respira normalmente"
- Tiempo máximo de verificación: 10 segundos
- Si no respira o respiración agónica: considerar PCR
3. **Confirmar situación**
- Si inconsciente y no respira normalmente: **ACTIVAR PROTOCOLO RCP**
**Criterios de Activación:**
- ✅ Inconsciencia confirmada
- ✅ Ausencia de respiración normal o respiración agónica
- ✅ Testigo presente y colaborador
---
#### 5.2.2 RCP Transtelefónica - Adultos
**Objetivo:** Guiar al testigo para realizar RCP básico mientras llegan los servicios de emergencia.
**Secuencia de Instrucciones:**
**FASE 1: Preparación (30 segundos)**
1. Confirmar que la víctima está en el suelo (superficie firme)
2. Pedir al testigo que se coloque de rodillas junto a la víctima
3. Instruir: "Coloque el talón de una mano en el centro del pecho, entre los pezones"
4. Instruir: "Coloque la otra mano encima, entrelazando los dedos"
5. Instruir: "Mantenga los brazos rectos, con los hombros sobre las manos"
**FASE 2: Compresiones Torácicas**
6. Instruir: "Empiece a comprimir fuerte y rápido"
7. Indicar ritmo: "Aproximadamente 2 compresiones por segundo"
8. Indicar profundidad: "Comprima unos 5-6 centímetros"
9. Instruir: "Permita que el pecho se recupere completamente entre compresiones"
10. Continuar: "No pare hasta que le diga"
**FASE 3: Ventilaciones (si testigo entrenado)**
11. Después de 30 compresiones, instruir: "Incline la cabeza hacia atrás"
12. Instruir: "Cierre la nariz con los dedos"
13. Instruir: "Haga un sello con su boca sobre la boca de la víctima"
14. Instruir: "Sople durante 1 segundo, observando que el pecho se eleva"
15. Repetir: "Dé otra respiración"
16. Continuar: "Vuelva a las compresiones: 30 compresiones, luego 2 respiraciones"
**FASE 4: Continuidad**
17. Instruir: "Continúe con ciclos de 30 compresiones y 2 respiraciones"
18. Indicar: "No pare hasta que lleguen los servicios de emergencia o la víctima muestre signos de vida"
19. Reforzar: "Las compresiones son lo más importante. Si duda, priorice las compresiones"
**Puntos Críticos:**
- ⚠️ **Profundidad:** 5-6 cm (no menos, no más)
- ⚠️ **Frecuencia:** 100-120 compresiones/minuto
- ⚠️ **Descompresión completa:** Permitir que el pecho vuelva a su posición
- ⚠️ **Minimizar interrupciones:** Máximo 10 segundos entre ciclos
- ⚠️ **Cambio de reanimador:** Si hay más de una persona, cambiar cada 2 minutos
**Indicadores de Eficacia:**
- Testigo reporta que "siente que algo pasa"
- Posible movimiento o sonido de la víctima
- Llegada de servicios de emergencia
**Cuándo Detener:**
- Llegada de servicios de emergencia
- Signos claros de vida (respiración, movimiento)
- Agotamiento extremo del reanimador (buscar relevo)
---
#### 5.2.3 RCP Transtelefónica - Niños (1 año - pubertad)
**Objetivo:** Adaptar RCP para población pediátrica con técnicas específicas.
**Diferencias Clave con Adultos:**
- **Compresiones:** Una mano o dos manos según tamaño del niño
- **Profundidad:** 1/3 del diámetro anteroposterior del tórax (aproximadamente 5 cm)
- **Frecuencia:** 100-120 compresiones/minuto (igual que adultos)
- **Ratio:** 30:2 (igual que adultos) o 15:2 si hay dos reanimadores
**Secuencia de Instrucciones:**
**FASE 1: Preparación**
1. Confirmar que el niño está en superficie firme
2. Instruir: "Coloque el talón de una mano (o dos si el niño es grande) en el centro del pecho"
3. Instruir: "Mantenga los brazos rectos"
**FASE 2: Compresiones**
4. Instruir: "Comprima fuerte y rápido, aproximadamente 1/3 del grosor del pecho"
5. Indicar: "Unas 2 compresiones por segundo"
6. Continuar: "30 compresiones"
**FASE 3: Ventilaciones**
7. Instruir: "Incline la cabeza hacia atrás (menos que en adulto)"
8. Instruir: "Cierre la nariz y sople suavemente en la boca"
9. Instruir: "Solo lo suficiente para ver que el pecho se eleva"
10. Repetir: "Otra respiración"
**FASE 4: Continuidad**
11. Continuar ciclos 30:2
12. Reforzar: "En niños, la causa más frecuente es respiratoria, las ventilaciones son muy importantes"
**Puntos Críticos Específicos:**
- ⚠️ **Profundidad adaptada:** 1/3 del tórax (no usar profundidad de adulto)
- ⚠️ **Ventilaciones suaves:** No forzar, solo ver elevación del pecho
- ⚠️ **Causa más frecuente:** Respiratoria, no cardíaca (diferente a adultos)
---
#### 5.2.4 RCP Transtelefónica - Lactantes (<1 año)
**Objetivo:** RCP específica para lactantes con técnicas adaptadas.
**Diferencias Clave:**
- **Compresiones:** Dos dedos (índice y medio) o dos pulgares con manos rodeando el tórax
- **Profundidad:** 1/3 del diámetro anteroposterior (aproximadamente 4 cm)
- **Frecuencia:** 100-120 compresiones/minuto
- **Ratio:** 30:2 o 15:2 si hay dos reanimadores
**Secuencia de Instrucciones:**
**FASE 1: Preparación**
1. Confirmar que el lactante está en superficie firme
2. Instruir: "Coloque al bebé boca arriba"
3. Instruir: "Localice el centro del pecho, justo debajo de la línea de los pezones"
**FASE 2: Compresiones**
4. Instruir: "Use dos dedos (índice y medio) o dos pulgares"
5. Instruir: "Comprima aproximadamente 1/3 del grosor del pecho"
6. Indicar: "Unas 2 compresiones por segundo"
7. Continuar: "30 compresiones"
**FASE 3: Ventilaciones**
8. Instruir: "Cubra la boca y la nariz del bebé con su boca"
9. Instruir: "Sople suavemente, solo lo suficiente para ver que el pecho se eleva"
10. Advertir: "No sople fuerte, los pulmones del bebé son pequeños"
11. Repetir: "Otra respiración suave"
**FASE 4: Continuidad**
12. Continuar ciclos 30:2
13. Reforzar: "En bebés, la causa es casi siempre respiratoria. Las ventilaciones son críticas"
**Puntos Críticos Específicos:**
- ⚠️ **Profundidad muy controlada:** Solo 1/3 del tórax (aproximadamente 4 cm)
- ⚠️ **Ventilaciones muy suaves:** Solo ver elevación mínima del pecho
- ⚠️ **Técnica de dos pulgares:** Preferible si hay dos personas (mejor calidad)
- ⚠️ **Causa casi siempre respiratoria:** Priorizar ventilaciones
---
#### 5.2.5 Uso de DESA Guiado por Teléfono
**Objetivo:** Guiar al testigo en el uso de un Desfibrilador Externo Semiautomático (DESA) si está disponible.
**Prerequisitos:**
- DESA disponible en el lugar
- Testigo colaborador y capaz de seguir instrucciones
- Víctima en parada cardiorrespiratoria confirmada
**Secuencia de Instrucciones:**
**FASE 1: Obtención del DESA**
1. Preguntar: "¿Hay un desfibrilador cerca? Busque señales o pregunte a alguien"
2. Si hay DESA: "Tráigalo aquí. No pare las compresiones mientras tanto"
3. Si no hay DESA: "Continúe con las compresiones. Le avisaré si encuentra uno"
**FASE 2: Preparación del DESA**
4. Instruir: "Abra el DESA. Siga las instrucciones que oiga"
5. Instruir: "Conecte los parches al DESA si no están conectados"
6. Instruir: "Retire la ropa del pecho de la víctima. Si está mojado, séquelo"
**FASE 3: Colocación de Parches**
7. Instruir: "Coloque un parche en el lado derecho, debajo de la clavícula"
8. Instruir: "Coloque el otro parche en el lado izquierdo, debajo de la axila"
9. Advertir: "Asegúrese de que los parches estén bien pegados a la piel"
10. Instruir: "Conecte los cables a los parches si no están conectados"
**FASE 4: Análisis y Descarga**
11. Instruir: "El DESA analizará el ritmo. NO toque a la víctima durante el análisis"
12. Instruir: "Siga las instrucciones del DESA"
13. Si el DESA indica descarga:
- Instruir: "Asegúrese de que nadie toque a la víctima"
- Instruir: "Presione el botón de descarga cuando el DESA lo indique"
14. Después de la descarga:
- Instruir: "Inmediatamente, reinicie las compresiones"
- Instruir: "Continúe 30 compresiones y 2 respiraciones"
- Instruir: "El DESA le indicará cuándo parar para otro análisis"
**FASE 5: Continuidad**
15. Seguir instrucciones del DESA
16. Continuar RCP entre análisis
17. No quitar los parches hasta que lleguen los servicios de emergencia
**Puntos Críticos:**
- ⚠️ **No tocar durante análisis:** Puede interferir con el análisis
- ⚠️ **Parches bien colocados:** Piel seca, sin joyas, sin medicamentos transdérmicos
- ⚠️ **Reiniciar RCP inmediatamente:** Después de cada descarga
- ⚠️ **Seguir instrucciones del DESA:** El dispositivo guía el proceso
**Contraindicaciones:**
- Víctima con marcapasos visible (evitar colocar parche directamente sobre él)
- Víctima mojada (secar antes)
- Ambiente explosivo (extremar precauciones)
---
#### 5.2.6 Preparación para Camino B
**Evoluciones Futuras Posibles:**
1. **Árbol de Decisión Interactivo**
- Flujo guiado paso a paso con confirmaciones
- Adaptación dinámica según respuestas del testigo
- Validación de comprensión en cada paso
2. **Simulación y Práctica**
- Modo de práctica sin emergencia real
- Feedback sobre técnica de compresiones (si hay sensores)
- Métricas de calidad de RCP
3. **IA de Apoyo (No Diagnóstico)**
- Análisis de audio para detectar ritmo de compresiones
- Sugerencias de ajuste en tiempo real
- Validación de comprensión del testigo
4. **Integración con Servicios de Emergencia**
- Notificación automática a servicios de emergencia
- Compartir ubicación GPS
- Transmisión de estado en tiempo real
5. **Grabación y Análisis Post-Emergencia**
- Registro de la secuencia seguida (para formación)
- Análisis de tiempos y calidad
- Mejora continua de protocolos
---
### 5.3 Obstrucción de Vía Aérea por Cuerpo Extraño (OVACE)
#### 5.3.1 OVACE en Adultos
**Objetivo:** Guiar al testigo para resolver una obstrucción de vía aérea en adulto.
**FASE 1: Identificación**
1. Preguntar: "¿Puede toser, hablar o respirar?"
2. Si puede toser: "Anímele a toser fuerte. Si puede toser, no haga nada más"
3. Si NO puede toser, hablar ni respirar: **OBSTRUCCIÓN GRAVE - ACTIVAR PROTOCOLO**
**FASE 2: Maniobras de Desobstrucción (Consciente)**
4. Instruir: "Colóquese detrás de la persona"
5. Instruir: "Ponga sus brazos alrededor de su cintura"
6. Instruir: "Haga un puño con una mano, colóquelo justo encima del ombligo"
7. Instruir: "Agárrelo con la otra mano"
8. Instruir: "Empuje fuerte hacia adentro y hacia arriba, como si quisiera levantarla"
9. Repetir: "Hágalo 5 veces, fuerte y rápido"
10. Evaluar: "¿Salió el objeto o puede respirar ahora?"
**FASE 3: Alternancia con Golpes**
11. Si no se resuelve: "Dé 5 golpes fuertes en la espalda, entre los omóplatos"
12. Alternar: "5 golpes en la espalda, luego 5 compresiones abdominales"
13. Continuar: "Siga alternando hasta que salga el objeto o la persona pierda el conocimiento"
**FASE 4: Si Pierde el Conocimiento**
14. Instruir: "Bájela al suelo con cuidado"
15. Instruir: "Inicie RCP. Las compresiones pueden expulsar el objeto"
16. Antes de ventilar: "Revise la boca. Si ve el objeto, sáquelo con los dedos"
17. Continuar: "30 compresiones, luego intente ventilar"
**Puntos Críticos:**
- ⚠️ **No interferir si tose:** La tos es el mecanismo más efectivo
- ⚠️ **Compresiones abdominales:** Hacia adentro y arriba, no lateral
- ⚠️ **Embarazadas/obesos:** Usar compresiones torácicas en lugar de abdominales
- ⚠️ **No barrido digital a ciegas:** Solo si ve el objeto
---
#### 5.3.2 OVACE en Niños (1 año - pubertad)
**Objetivo:** Adaptar maniobras de desobstrucción para población pediátrica.
**Diferencias Clave:**
- Técnica similar a adultos pero con menos fuerza
- Posición arrodillada si el niño es pequeño
- Compresiones más suaves pero igualmente efectivas
**Secuencia de Instrucciones:**
**FASE 1: Identificación**
1. Preguntar: "¿Puede toser o hablar?"
2. Si puede toser: "Anímele a toser. No haga nada más"
3. Si NO puede: **ACTIVAR PROTOCOLO**
**FASE 2: Maniobras (Consciente)**
4. Instruir: "Si el niño es pequeño, arrodíllese detrás de él"
5. Instruir: "Coloque sus brazos alrededor de su cintura"
6. Instruir: "Haga un puño, colóquelo justo encima del ombligo"
7. Instruir: "Empuje hacia adentro y arriba, 5 veces"
8. Alternar: "5 golpes en la espalda, luego 5 compresiones"
**FASE 3: Si Pierde el Conocimiento**
9. Instruir: "Bájelo al suelo"
10. Instruir: "Inicie RCP pediátrico"
11. Antes de ventilar: "Revise la boca, retire objeto si lo ve"
**Puntos Críticos Específicos:**
- ⚠️ **Fuerza adaptada:** Menor que en adulto pero suficiente
- ⚠️ **Posición:** Arrodillarse si necesario para estar a la altura correcta
---
#### 5.3.3 OVACE en Lactantes (<1 año)
**Objetivo:** Maniobras específicas para lactantes.
**Técnica Específica:**
- NO usar compresiones abdominales (riesgo de lesión)
- Usar golpes en espalda + compresiones torácicas
**Secuencia de Instrucciones:**
**FASE 1: Identificación**
1. Observar: "¿El bebé puede toser o hacer ruidos?"
2. Si puede toser: "Déjelo toser. No haga nada más"
3. Si NO puede: **ACTIVAR PROTOCOLO**
**FASE 2: Maniobras (Consciente)**
4. Instruir: "Siente al bebé boca abajo sobre su antebrazo"
5. Instruir: "Sujete la cabeza y el cuello con su mano"
6. Instruir: "Mantenga la cabeza más baja que el cuerpo"
7. Instruir: "Dé 5 golpes fuertes en la espalda, entre los omóplatos"
8. Giro: "Voltee al bebé boca arriba, manteniendo la cabeza baja"
9. Instruir: "Dé 5 compresiones torácicas con dos dedos en el centro del pecho"
10. Alternar: "5 golpes en la espalda, luego 5 compresiones torácicas"
**FASE 3: Si Pierde el Conocimiento**
11. Instruir: "Inicie RCP de lactante"
12. Antes de ventilar: "Revise la boca, retire objeto si lo ve"
**Puntos Críticos Específicos:**
- ⚠️ **NUNCA compresiones abdominales:** Solo torácicas
- ⚠️ **Sujetar cabeza:** Siempre mantener cabeza y cuello sujetos
- ⚠️ **Posición inclinada:** Cabeza más baja que el cuerpo
---
#### 5.3.4 Preparación para Camino B
**Evoluciones Futuras Posibles:**
1. **Árbol de Decisión por Edad**
- Selección automática de protocolo según edad
- Adaptación de instrucciones según tamaño físico
- Validación de técnica específica por grupo etario
2. **Guía Visual Interactiva**
- Animaciones mostrando posición correcta
- Feedback sobre fuerza aplicada (si hay sensores)
- Indicadores de eficacia
3. **IA de Apoyo**
- Análisis de sonidos para detectar tos efectiva
- Sugerencias de ajuste de técnica
- Detección de resolución de obstrucción
4. **Integración con RCP**
- Transición automática si pierde conocimiento
- Guía unificada RCP + OVACE
- Optimización de secuencia
---
### 5.4 Sospecha de Síndrome Coronario Agudo (SCA)
#### 5.4.1 Protocolo de Identificación
**Objetivo:** Identificar síntomas sugestivos de SCA para activar protocolo de atención precoz.
**Criterios de Activación:**
- Dolor torácico opresivo
- Dolor irradiado (brazo, mandíbula, espalda)
- Disnea asociada
- Sudoración, náuseas, mareo
- Factores de riesgo cardiovascular
**Secuencia de Identificación:**
**FASE 1: Evaluación de Síntomas**
1. Preguntar: "¿Dónde le duele exactamente?"
2. Preguntar: "¿Cómo es el dolor? ¿Opresivo, como una presión?"
3. Preguntar: "¿Le duele en otro lugar? ¿Brazo, mandíbula, espalda?"
4. Preguntar: "¿Tiene dificultad para respirar?"
5. Preguntar: "¿Está sudando o tiene náuseas?"
**FASE 2: Evaluación de Factores de Riesgo**
6. Preguntar: "¿Tiene antecedentes de problemas de corazón?"
7. Preguntar: "¿Tiene diabetes, hipertensión o colesterol alto?"
8. Preguntar: "¿Fuma?"
9. Preguntar: "¿Cuántos años tiene?"
**FASE 3: Decisión de Activación**
10. Si síntomas sugestivos: **ACTIVAR PROTOCOLO SCA**
11. Si dudoso pero factores de riesgo: **ACTIVAR PROTOCOLO SCA** (mejor sobre-activar)
---
#### 5.4.2 Protocolo de Atención Precoz
**Objetivo:** Estabilizar y preparar al paciente mientras llegan los servicios de emergencia.
**Secuencia de Instrucciones:**
**FASE 1: Posicionamiento y Comodidad**
1. Instruir: "Siéntese o acuéstese en una posición cómoda"
2. Instruir: "No se mueva innecesariamente"
3. Instruir: "Afloje la ropa ajustada, especialmente alrededor del cuello y cintura"
**FASE 2: Medicación (si disponible y no contraindicada)**
4. Preguntar: "¿Tiene aspirina en casa?"
5. Si tiene aspirina y no es alérgico:
- Instruir: "Tome una aspirina (300 mg si es posible)"
- Instruir: "Mástiquela o tráguela con agua"
6. Advertir: "NO tome aspirina si es alérgico o tiene úlcera activa"
**FASE 3: Monitorización**
7. Instruir: "Respire lenta y profundamente"
8. Instruir: "Manténgase tranquilo. La ayuda está en camino"
9. Preguntar periódicamente: "¿Cómo se siente? ¿El dolor ha cambiado?"
**FASE 4: Preparación para Llegada de Servicios**
10. Instruir: "Cuando lleguen, dígales exactamente qué le pasa"
11. Instruir: "Mencione si tomó alguna medicación"
12. Instruir: "Tenga a mano su documentación médica si la tiene"
**Puntos Críticos:**
- ⚠️ **NO dar nitroglicerina:** Solo si el paciente ya la tiene prescrita y la toma habitualmente
- ⚠️ **NO forzar actividad:** Reposo relativo
- ⚠️ **Aspirina:** Solo si no hay contraindicaciones
- ⚠️ **Tiempo es músculo:** Activar servicios de emergencia inmediatamente
**Contraindicaciones para Aspirina:**
- Alergia conocida a aspirina
- Úlcera péptica activa
- Hemorragia activa
- Anticoagulantes (consultar, pero generalmente se puede dar)
---
#### 5.4.3 Signos de Alarma - Cuándo Activar RCP
**Objetivo:** Identificar cuando un SCA evoluciona a parada cardiorrespiratoria.
**Signos de Alarma:**
- Pérdida súbita de consciencia
- Ausencia de respiración
- Ausencia de pulso (si testigo puede comprobarlo)
- Convulsiones
- Cianosis (color azulado)
**Acción Inmediata:**
- Si aparece cualquiera de estos signos: **ACTIVAR PROTOCOLO RCP INMEDIATAMENTE**
- No esperar confirmación adicional
- Iniciar compresiones mientras se verifica
---
#### 5.4.4 Preparación para Camino B
**Evoluciones Futuras Posibles:**
1. **Árbol de Decisión Completo**
- Evaluación estructurada de síntomas
- Scoring de riesgo (TIMI, GRACE)
- Recomendaciones personalizadas según perfil
2. **Guía de Medicación Interactiva**
- Verificación de contraindicaciones
- Cálculo de dosis según peso/edad
- Interacciones medicamentosas
3. **IA de Apoyo**
- Análisis de descripción de síntomas
- Sugerencias de preguntas adicionales
- Priorización de casos según gravedad
4. **Integración con ECG Remoto**
- Transmisión de ECG si hay dispositivo disponible
- Análisis automático de ritmo
- Activación automática de código IAM si aplica
5. **Seguimiento Post-Emergencia**
- Recordatorios de medicación
- Guía de rehabilitación cardíaca
- Prevención secundaria
---
### 5.5 Nota Global sobre Uso Profesional
**Importante - Uso Responsable:**
Estos protocolos transtelefónicos están diseñados para ser utilizados por **operadores de emergencias sanitarias** con formación adecuada. Son herramientas de **apoyo procedimental** que:
- ✅ Proporcionan estructura en situaciones de alta presión
- ✅ Reducen variabilidad en la atención
- ✅ Facilitan la comunicación efectiva con testigos
- ✅ Aseguran que no se olviden pasos críticos
**Limitaciones:**
-**No sustituyen la formación reglada** del profesional
-**No reemplazan el criterio clínico** del operador
-**No son algoritmos de diagnóstico** automático
-**Requieren adaptación** a cada situación específica
**Responsabilidad:**
El operador que utiliza estos protocolos mantiene la **responsabilidad profesional** de:
- Adaptar las instrucciones a la situación real
- Interpretar las respuestas del testigo correctamente
- Tomar decisiones clínicas cuando el protocolo no cubre la situación
- Priorizar la seguridad del paciente sobre el seguimiento estricto del protocolo
**Validación Médica:**
Antes de implementar estos protocolos en producción, deben ser:
- ✅ Revisados por profesionales médicos especializados
- ✅ Validados contra guías oficiales (ERC, AHA, SEMES, etc.)
- ✅ Probados en situaciones simuladas
- ✅ Actualizados según evidencia científica más reciente
---
### 5.6 Integración en la Aplicación (Camino A)
**Estructura de Datos Propuesta:**
```typescript
interface TelephonicProtocol {
id: string; // Ej: "pcr-adulto-transtelefonico"
title: string; // "RCP Transtelefónica - Adultos"
category: 'pcr' | 'ovace' | 'sca';
ageGroup: 'adulto' | 'pediatrico' | 'lactante' | 'todos';
phases: ProtocolPhase[]; // Secuencia de fases
criticalPoints: string[]; // Puntos críticos a recordar
contraindications?: string[]; // Si aplica
version: string; // Versión del protocolo
lastValidated: string; // Fecha validación
source: string; // Guía de referencia
}
interface ProtocolPhase {
id: string; // "fase-1-preparacion"
title: string; // "FASE 1: Preparación"
steps: ProtocolStep[]; // Pasos secuenciales
estimatedTime?: number; // Tiempo estimado en segundos
}
interface ProtocolStep {
id: string; // "paso-1-confirmar-suelo"
instruction: string; // Texto de la instrucción
type: 'question' | 'instruction' | 'confirmation' | 'warning';
requiresResponse?: boolean; // Si necesita respuesta del testigo
nextStepId?: string; // Siguiente paso (para flujos interactivos futuro)
}
```
**Implementación en Camino A:**
- Protocolos como datos estáticos en JSON
- Visualización secuencial paso a paso
- Navegación manual entre fases
- Búsqueda rápida por situación
**Preparación para Camino B:**
- Estructura de datos compatible con árboles de decisión
- IDs de pasos preparados para navegación condicional
- Campos para respuestas del usuario (futuro)
- Metadata para flujos interactivos
---
## 6. REQUISITOS PARA CAMINO B
### 5.1 Qué partes ya estarán listas
**Arquitectura:**
- ✅ Capa de abstracción `DataService` - Solo cambiar implementación
- ✅ Componentes desacoplados - No necesitan cambios
- ✅ Estructura de datos compatible - Mismo formato JSON
- ✅ Identificadores estables - Compatibles con BD
- ✅ Versionado de contenido - Sistema ya implementado
**Persistencia:**
- ✅ Estructura de favoritos/historial - Compatible con formato API
- ✅ Timestamps y metadata - Listos para sincronización
- ✅ IndexedDB - Puede coexistir con sync
**Infraestructura:**
- ✅ Service Worker - Preparado para cache de API
- ✅ Error handling - Estructura lista para errores de red
- ✅ TypeScript - Contratos listos para API
---
### 5.2 Qué nuevas piezas habría que añadir
**Backend:**
- ❌ API REST (FastAPI/Express)
- ❌ Base de datos (PostgreSQL/MongoDB)
- ❌ Sistema de autenticación (JWT/OAuth)
- ❌ Endpoints de sincronización
- ❌ Sistema de actualizaciones incrementales
**Frontend:**
- ❌ Implementación `ApiDataService`
- ❌ Sistema de sincronización (conflict resolution)
- ❌ UI de autenticación (opcional)
- ❌ Indicadores de sincronización
- ❌ Manejo de conflictos de datos
**Nuevas Funcionalidades:**
- ❌ Chat con IA (backend)
- ❌ Búsqueda semántica (backend con embeddings)
- ❌ Analytics (opcional, con consentimiento)
- ❌ Push notifications
---
### 5.3 Qué NO habrá que reescribir
**Garantizado:**
-**Componentes UI** - Cero cambios
-**Páginas** - Cero cambios
-**Lógica de búsqueda/filtrado** - Cero cambios
-**Calculadoras** - Cero cambios
-**Estructura de datos** - Compatible
-**Service Worker** - Solo añadir estrategias de API
-**Persistencia local** - Coexiste con sync
**Principio:**
El Camino B **extiende** el Camino A. La app offline sigue funcionando igual. Las funcionalidades online son **adicionales**, no reemplazan las offline.
---
## 7. PLAN DE ACCIÓN PRIORIZADO
### 6.1 CORTO PLAZO (Semanas 1-4)
#### Semana 1-2: Fundación Arquitectónica
**FASE 1: Arquitectura y Abstracción de Datos**
- [ ] Crear interfaz `DataService`
- [ ] Implementar `LocalDataService`
- [ ] Migrar datos de `.ts` a `.json`
- [ ] Refactorizar componentes para usar `dataService`
- [ ] Crear factory pattern para selección de servicio
**FASE 2: Gestión de Datos y Versionado**
- [ ] Crear estructura de metadata
- [ ] Añadir versionado a entidades
- [ ] Crear script de validación de datos
- [ ] Documentar sistema de IDs
**Esfuerzo:** 1-2 semanas
**Bloqueante:** Sí (base para todo)
---
#### Semana 3: Persistencia y Estado
**FASE 3: Persistencia Local**
- [ ] Crear `StorageService` abstracto
- [ ] Implementar con IndexedDB
- [ ] Crear stores de estado (Zustand/Context)
- [ ] Implementar favoritos funcionales
- [ ] Implementar historial real
**Esfuerzo:** 1 semana
**Bloqueante:** No (mejora UX)
---
#### Semana 4: Offline y PWA
**FASE 4: Offline y PWA**
- [ ] Implementar Service Worker completo
- [ ] Crear manifest PWA
- [ ] Configurar cache strategies
- [ ] Implementar detección offline
- [ ] Sistema de actualización de contenido
**Esfuerzo:** 1 semana
**Bloqueante:** Sí (core del Camino A)
---
### 6.2 MEDIO PLAZO (Semanas 5-8)
#### Semana 5-6: Seguridad y Estabilidad
**FASE 5: Seguridad y Estabilidad**
- [ ] Implementar Error Boundaries
- [ ] Añadir manejo de errores en servicios
- [ ] Validación de datos en runtime
- [ ] Tests básicos de componentes críticos
- [ ] Optimización de bundle
**Esfuerzo:** 2 semanas
**Bloqueante:** Sí (producción)
---
#### Semana 7: Aspectos Legales
**FASE 6: Aspectos Legales**
- [ ] Crear página de términos y condiciones
- [ ] Disclaimer médico prominente
- [ ] Aviso de versión y validación
- [ ] Revisión legal (abogado)
- [ ] Consentimiento inicial (si necesario)
**Esfuerzo:** 1 semana (incluye revisión)
**Bloqueante:** Sí (protección legal)
---
#### Semana 8: Contenido Médico (Paralelo)
**FASE 7: Contenido Médico Expandido**
- [ ] Expandir protocolos (20-25 mínimo)
- [ ] Expandir fármacos (30-40 mínimo)
- [ ] Expandir patologías (25-35 mínimo)
- [ ] Validación médica profesional
- [ ] Documentación de fuentes
**Esfuerzo:** 2-4 semanas (puede ser paralelo)
**Bloqueante:** Sí (hace la app útil)
---
### 6.3 LARGO PLAZO (Post-Camino A)
#### Preparación para Camino B
**Cuando se decida evolucionar:**
1. **Backend API**
- Diseñar endpoints REST
- Implementar base de datos
- Sistema de autenticación
2. **Implementación `ApiDataService`**
- Reutilizar interfaz existente
- Añadir manejo de errores de red
- Cache híbrido (local + API)
3. **Sincronización**
- Sistema de conflict resolution
- Merge de cambios
- Indicadores de sync
4. **Nuevas Funcionalidades**
- Chat con IA
- Búsqueda semántica
- Analytics (opcional)
**Principio:** Todo se añade sin romper funcionalidad offline existente.
---
## 8. CHECKLIST FINAL
### 7.1 Checklist: Camino A Completado
#### Arquitectura
- [ ] Capa de abstracción `DataService` implementada
- [ ] Todos los componentes usan `dataService`, no arrays directos
- [ ] Datos migrados a JSON con tipos TypeScript separados
- [ ] Factory pattern para selección de servicio
#### Versionado y Validación
- [ ] Sistema de metadata implementado
- [ ] Cada entidad tiene versión y fecha de validación
- [ ] Script de validación de datos en build
- [ ] IDs estables y documentados
#### Persistencia
- [ ] `StorageService` abstracto implementado
- [ ] IndexedDB funcionando
- [ ] Favoritos funcionales y persistentes
- [ ] Historial de búsquedas real
- [ ] Stores de estado global funcionando
#### Offline y PWA
- [ ] Service Worker completo y funcionando
- [ ] Manifest PWA configurado
- [ ] App instalable en móviles
- [ ] Funciona 100% offline después de primera carga
- [ ] Sistema de actualización de contenido
#### Seguridad y Estabilidad
- [ ] Error Boundaries en todas las rutas
- [ ] Manejo de errores en servicios críticos
- [ ] Validación de datos en runtime
- [ ] Tests básicos de componentes críticos
- [ ] Bundle optimizado
#### Aspectos Legales
- [ ] Página de términos y condiciones
- [ ] Disclaimer médico prominente
- [ ] Aviso de versión visible en UI
- [ ] Revisión legal completada
- [ ] Consentimiento implementado (si necesario)
#### Contenido Médico
- [ ] Mínimo 20 protocolos implementados
- [ ] Mínimo 30 fármacos implementados
- [ ] Mínimo 25 patologías implementadas
- [ ] Contenido validado por profesional médico
- [ ] Fuentes documentadas
#### UX/UI
- [ ] Todas las funcionalidades core funcionando
- [ ] Búsqueda rápida y efectiva
- [ ] Navegación intuitiva
- [ ] Diseño responsive en todos los dispositivos
- [ ] Performance aceptable (<3s carga inicial)
---
### 7.2 Checklist: Condiciones para Iniciar Camino B
#### Prerequisitos Técnicos
- [ ] Camino A 100% completado y estable
- [ ] Arquitectura de abstracción funcionando
- [ ] Sistema de versionado implementado
- [ ] Persistencia local robusta
#### Prerequisitos de Negocio
- [ ] Decisión estratégica de evolucionar a backend
- [ ] Recursos para desarrollo y mantenimiento de backend
- [ ] Plan de infraestructura (hosting, BD, etc.)
- [ ] Consideraciones de privacidad y GDPR (si aplica)
#### Preparación Técnica
- [ ] Diseño de API REST completado
- [ ] Esquema de base de datos diseñado
- [ ] Plan de migración de datos local BD
- [ ] Estrategia de sincronización definida
- [ ] Plan de rollback si algo falla
---
## 8. CONSIDERACIONES FINALES
### 8.1 Principios No Negociables
1. **Offline First Siempre**
- Incluso con backend, la app debe funcionar offline
- Funcionalidades online son opcionales, no requeridas
2. **Responsabilidad Médica**
- Todo contenido debe estar validado
- Versionado y trazabilidad obligatorios
- Disclaimer médico siempre visible
3. **Fiabilidad sobre Complejidad**
- Preferir soluciones simples y robustas
- Evitar dependencias innecesarias
- Testing crítico para funcionalidades médicas
4. **Preparación sin Sobre-ingeniería**
- Preparar para futuro sin implementar futuro
- Abstracciones útiles, no teóricas
- Refactor cuando sea necesario, no prematuramente
---
### 8.2 Métricas de Éxito del Camino A
**Técnicas:**
- App funciona 100% offline
- Tiempo de carga <3 segundos
- Sin crashes en uso normal
- Bundle size <2MB (comprimido)
**Funcionales:**
- Contenido médico suficiente para uso real
- Búsqueda rápida y efectiva
- Favoritos e historial funcionando
- PWA instalable y estable
**Responsabilidad:**
- Disclaimer médico visible
- Versión de contenido accesible
- Términos de uso completos
- Contenido validado profesionalmente
---
### 8.3 Riesgos y Mitigaciones
**Riesgo: Sobre-ingeniería de abstracciones**
- **Mitigación:** Implementar solo lo necesario para Camino A, preparar interfaces simples
**Riesgo: Contenido médico insuficiente**
- **Mitigación:** Priorizar expansión de contenido como tarea crítica
**Riesgo: Service Worker complejo**
- **Mitigación:** Empezar con estrategia simple (Cache First), evolucionar gradualmente
**Riesgo: Cambios de requisitos para Camino B**
- **Mitigación:** Abstracciones flexibles, no asumir detalles específicos del futuro
---
## FIN DEL DOCUMENTO
**Este plan es un documento vivo.** Debe actualizarse cuando:
- Se completen fases
- Cambien requisitos
- Se descubran nuevas necesidades
- Se decida evolucionar a Camino B
**Mantener este documento sincronizado con el estado real del proyecto.**
---
**Versión:** 1.1
**Última actualización:** 2024
**Cambios en esta versión:**
- Añadida sección 5: Protocolos Transtelefónicos Específicos (Camino A)
- Incluye: PCR (adultos, niños, lactantes), OVACE (adultos, niños, lactantes), SCA
- Preparación para evolución a flujos interactivos (Camino B)
- Nota global sobre uso profesional y responsabilidad médica
**Próxima revisión:** Al completar Fase 1