codigo0/PLAN_CAMINO_A_Y_EVOLUCION_A_B.md

1669 lines
53 KiB
Markdown
Raw Normal View History

# 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