2026-02-27 14:37:22 +00:00
# 📋 SPEC - Especificación Maestra del Proyecto
## EMERGES TES - Guía Digital de Protocolos de Emergencias
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
**Última actualización:** 2025-02-02
**Versión:** 2.1
**Estado:** Activo - Fuente de Verdad del Proyecto
2026-01-25 20:09:47 +00:00
---
2026-02-27 14:37:22 +00:00
## 🎯 PARTE 1: QUÉ Y POR QUÉ (Antes del Cómo)
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
### 1.1 ¿Qué es EMERGES TES?
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
**EMERGES TES** es una **aplicación web progresiva (PWA)** diseñada como herramienta de referencia rápida para **Técnicos de Emergencias Sanitarias (TES)** y profesionales de emergencias médicas.
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
**No es:**
- ❌ Un sistema de diagnóstico automático
- ❌ Una herramienta de IA que toma decisiones clínicas
- ❌ Un sustituto de la formación reglada del profesional
- ❌ Un reemplazo del criterio clínico
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
**Sí es:**
- ✅ Un **socio cognitivo** que reduce la carga cognitiva en emergencias
- ✅ Una herramienta de **consulta rápida** (< 2 clics para información crítica )
- ✅ Un sistema **offline-first** que funciona sin conexión
- ✅ Una plataforma de **formación continua** con contenido estructurado
2026-01-25 20:09:47 +00:00
---
2026-02-27 14:37:22 +00:00
### 1.2 ¿Por qué existe este proyecto?
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
#### Problema que resuelve
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
**Contexto del usuario (TES en emergencias):**
- Ambiente de **alta presión y estrés**
- Necesidad de información **inmediata** (< 30 segundos )
- Uso frecuente en **condiciones adversas** (móvil, offline, bajo presión)
- Requisito de **precisión absoluta** (errores pueden ser críticos)
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
**Problemas específicos que aborda:**
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
1. **Acceso rápido a información crítica**
- Dosis de fármacos en emergencias
- Secuencias de protocolos (RCP, Shock, Vía Aérea)
- Calculadoras médicas (Glasgow, perfusiones, dosis pediátricas)
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
2. **Reducción de errores humanos**
- Validación de dosis por edad/peso
- Recordatorios de pasos críticos
- Alertas de contraindicaciones
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
3. **Estandarización de procedimientos**
- Protocolos basados en guías oficiales (ERC, AHA, SEMES)
- Consistencia en actuaciones
- Trazabilidad de decisiones
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
4. **Formación continua**
- Manual estructurado navegable
- Guías formativas asociadas a protocolos
- Modos de práctica/simulación
2026-01-25 20:09:47 +00:00
---
2026-02-27 14:37:22 +00:00
### 1.3 Principios de Diseño (Por qué así)
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
#### 1.3.1 Andragogía Clínica y Stress-Ready Design
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
**Por qué:** Los adultos aprenden mejor cuando el conocimiento tiene relevancia directa y se conecta con experiencia previa. En emergencias, la carga cognitiva debe minimizarse.
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
**Aplicación:**
- **Orientación al problema:** Estructura por problemas clínicos, no categorías teóricas
- **Autonomía:** Navegación no lineal, acceso directo a secciones críticas
- **Experiencia previa:** Terminología estándar (HL7 FHIR cuando aplique)
- **Procesamiento sensorial:** Jerarquía visual (Lookability), multimodalidad
- **Simulación:** Modos de práctica para transferir habilidades al mundo real
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
**Referencia:** `docs/ANDRAGOGIA_STRESS_READY_112.md`
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
#### 1.3.2 Offline-First
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
**Por qué:** Las emergencias ocurren en zonas rurales o con baja cobertura. La autonomía del profesional no puede depender de conexión a internet.
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
**Aplicación:**
- Contenido estático embebido en el bundle
- Service Worker para cacheo agresivo
- Funcionalidad completa sin backend (Fase A)
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
#### 1.3.3 Type Safety y Validación Estricta
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
**Por qué:** Errores en dosis o protocolos pueden ser críticos. El sistema debe prevenir errores en tiempo de compilación y runtime.
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
**Aplicación:**
- TypeScript estricto (sin `any` )
- Validación Zod en runtime
- Guard clauses obligatorias en componentes
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
#### 1.3.4 Clean Architecture (Backend)
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
**Por qué:** Separación clara de responsabilidades facilita mantenimiento, testing y evolución del sistema.
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
**Aplicación:**
- Domain Layer aislado (no depende de nadie)
- Application Layer orquesta casos de uso
- Infrastructure Layer maneja detalles técnicos
- Presentation Layer expone API REST
2026-01-25 20:09:47 +00:00
---
2026-02-27 14:37:22 +00:00
### 1.4 Dominios de Negocio Identificados
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
| Dominio | Entidad Principal | Propósito |
|---------|-------------------|-----------|
| **Protocolos Clínicos** | `Procedure` / `ContentItem` | Secuencias de acciones ordenadas temporalmente para emergencias |
| **Fármacos** | `Drug` | Referencias farmacológicas con dosis, indicaciones, contraindicaciones |
| **Guías de Refuerzo** | `Guide` / `ContentItem` (type: 'guide') | Contenido formativo estructurado en secciones |
| **Herramientas Clínicas** | Checklists, Pathways, Calculadoras | Herramientas interactivas para apoyo a decisiones |
| **Glosario** | `GlossaryTerm` | Términos médicos con definiciones y relaciones |
| **Medios Audiovisuales** | `MediaResource` | Imágenes, videos, documentos asociados a contenido |
| **Contexto Clínico** | `PatientContext` , `Vitals` | Estado del paciente (simulado) para herramientas |
2026-01-25 20:09:47 +00:00
---
2026-02-27 14:37:22 +00:00
## 🏗️ PARTE 2: CÓMO (Arquitectura y Stack)
### 2.1 Stack Tecnológico
#### Frontend
- **Framework:** React 19.2.3 + TypeScript 5.8.3
- **Build Tool:** Vite 7.3.1
- **Routing:** React Router 6.30.1
- **UI:** Tailwind CSS 3.4.17 + shadcn/ui + Radix UI
- **Validación:** Zod 4.3.6
- **Markdown:** react-markdown + remark/rehype
- **PWA:** Service Worker + Manifest
- **Testing:** Vitest 4.0.17 + Testing Library
#### Backend
- **Runtime:** Node.js
- **Framework:** Express 4.18.2 + TypeScript 5.9.3
- **Base de Datos:** PostgreSQL
- **Query Builder:** pg (native)
- **Validación:** Zod 4.3.5
- **Autenticación:** JWT + bcrypt
- **Seguridad:** Helmet + CORS + express-rate-limit
- **Logging:** Winston
- **Cache:** Redis (ioredis)
#### Infraestructura
- **Containerización:** Docker + docker-compose
- **Process Manager:** PM2
- **CI/CD:** GitHub Actions
- **Hosting:** GitHub Pages (frontend) + VPS (backend)
2026-01-25 20:09:47 +00:00
---
2026-02-27 14:37:22 +00:00
### 2.2 Arquitectura
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
#### Backend: Clean Architecture (Simplificada)
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
```
┌─────────────────────────────────────────┐
│ PRESENTATION LAYER │
│ Routes + Middleware + Validators │
└─────────────────────────────────────────┘
↓
┌─────────────────────────────────────────┐
│ APPLICATION LAYER │
│ Services (lógica de negocio) │
└─────────────────────────────────────────┘
↓
┌─────────────────────────────────────────┐
│ DOMAIN LAYER │
│ Entities + Value Objects + Interfaces │
└─────────────────────────────────────────┘
↓
┌─────────────────────────────────────────┐
│ INFRASTRUCTURE LAYER │
│ Repositories + Database + Storage │
└─────────────────────────────────────────┘
```
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
**Estado actual:**
- ✅ Domain Layer bien definido y aislado
- ⚠️ Application Layer existe como `services/` pero no completamente separada
- ⚠️ Infrastructure Layer no tiene carpeta explícita (implementaciones mezcladas)
- ✅ Presentation Layer bien definida
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
**Objetivo:** Separación completa Application/Infrastructure en carpetas explícitas.
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
#### Frontend: Arquitectura por Capas Funcional
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
```
src/
├── pages/ → Route components (Presentation)
├── components/ → UI components (Presentation)
├── hooks/ → Custom hooks (Application logic)
├── services/ → API adapters (Infrastructure)
├── data/ → Static data (Domain-like)
├── clinical/ → Domain logic (calculations, patient)
├── tools/ → Domain tools (checklists, calculators)
├── types/ → Type definitions
├── utils/ → Utilities
└── validators/ → Input validation (Zod)
```
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
**Estado actual:** Arquitectura funcional orientada a React, no Clean Architecture estricta.
2026-01-25 20:09:47 +00:00
---
2026-02-27 14:37:22 +00:00
### 2.3 Modelo de Datos
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
#### Entidades Principales
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
**ContentItem** (Protocolos, Guías, Manuales, Checklists)
- `id` , `type` , `slug` , `level` , `title` , `content` (JSON), `priority` , `status` , `version`
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
**Drug** (Fármacos)
- `id` , `slug` , `genericName` , `tradeName` , `category` , `adultDose` , `pediatricDose` , `routes` , `indications` , `contraindications`
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
**GlossaryTerm** (Glosario)
- `id` , `term` , `abbreviation` , `category` , `definition` , `relatedTerms`
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
**MediaResource** (Medios)
- `id` , `type` , `path` , `fileUrl` , `title` , `tags` , `block` , `chapter`
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
**Referencia completa:** Ver `backend/src/domain/entities/`
2026-01-25 20:09:47 +00:00
---
2026-02-27 14:37:22 +00:00
### 2.4 Principios Técnicos Consolidados
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
1. **Value Objects (Híbrido):** Entidades usan tipos simples; Value Objects en servicios para validación
2. **Serialización (Mappers):** Mappers separados en `infrastructure/mappers/` ; Domain NO tiene `toJSON`
3. **IDs (Application Layer):** UUIDs generados en Application Layer, pasados a entidades
4. **Validación (Híbrido):** Básicas en Domain (`create()`), complejas en Application Services; Zod en Application
5. **Fechas (ISO 8601 Strings):** `string` con formato ISO 8601, NO `Date` nativo
6. **Arrays (readonly T[]):** `readonly string[]` para arrays inmutables
7. **Opcionales (Híbrido):** `?` para opcionales, `| null` cuando null tiene significado
8. **Errores (Personalizados):** `DomainError` , `ValidationError` , `BusinessRuleError`
9. **Versionado (Números Enteros):** `version: number` , NO semantic versioning
10. **JSONB (Union Types):** Union types para `content` , NO `Record<string, unknown>`
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
**Referencia completa:** `.cursorrules` (sección "Decisiones Técnicas Consolidadas")
2026-01-25 20:09:47 +00:00
---
2026-02-27 14:37:22 +00:00
### 2.5 Decisiones SDD (Checklist – Fuente de Verdad)
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
Marco: **Desarrollo Impulsado por Especificaciones (SDD)** . Respuestas consolidadas en `docs/ENTREVISTA_SDD_RESPUESTAS.md` .
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
| Categoría | Decisión clave | Impacto |
|-----------|----------------|---------|
| **Dominio** | Problema: información correcta e inmediata en emergencias; usuario: TES en escena + admin en panel; reglas puras en BUSINESS_LOGIC.md | Andragogía y stress-ready; reglas estables frente a tecnología |
| **Arquitectura** | Backend: Clean (Domain → Application → Infrastructure → Presentation). Frontend: capas funcional React | Mantenibilidad; aislamiento del dominio en backend |
| **Aislamiento** | Lógica de negocio independiente de framework y BD en backend; frontend con dominio explícito | Menor deuda técnica; tests más claros |
| **Estructura carpetas** | Por tipos técnicos / capas; no Feature-driven | Consistencia con Clean Architecture |
| **Framework** | React 19 + Vite (SPA, CSR). No Next.js 15 ni Angular 2025 | Offline-first; control del bundle y PWA |
| **Renderizado** | CSR (SPA); lazy loading; contenido estático embebido | Rendimiento y uso sin red |
| **Datos** | PostgreSQL (relacional, ACID). Backend propio; no BaaS como núcleo | Integridad y relaciones |
| **Offline-First** | Sí: Service Worker, contenido embebido, IndexedDB para Content Pack | Disponibilidad sin cobertura |
| **Seguridad/Validación** | Zod en todos los puntos de entrada; PII solo en panel (JWT, roles) | Consistencia y seguridad |
| **Gobernanza** | .cursorrules estrictas (no any, readonly, Zod, errores dominio, mappers) | Calidad del código (humano e IA) |
| **TDD** | No obligatorio en legacy; adoptable para flujos críticos nuevos | Reducción deuda de comprensión |
2026-01-25 20:09:47 +00:00
---
2026-02-27 14:37:22 +00:00
## 📊 PARTE 3: ESTADO ACTUAL Y GAPS
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
### 3.1 Estado de Implementación
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
| Componente | Estado | Cobertura |
|------------|--------|-----------|
| **Frontend PWA** | ✅ Funcional | Tests en aumento (objetivo: 80%) |
| **Backend API** | ✅ Capas Application/Infrastructure | Tests unitarios (Glossary, Content, Validation) + integración API |
| **Protocolos** | ✅ Completos | 50+ protocolos (categoría Escena vacía; ver contenido faltante) |
| **Fármacos** | ✅ Completos | 100+ fármacos |
| **Guías Formativas** | ✅ Completas | Guías asociadas a protocolos |
| **Herramientas Clínicas** | ✅ Funcionales | Checklists, calculadoras, pathways |
| **Glosario** | ⚠️ Backend completo (API + migración) | Frontend no consume aún `/api/glossary` |
| **Medios** | ✅ Upload mejorado + interfaz gestión | Validación Zod, MediaManagerPage con errores inline |
| **Validación Médica** | ✅ Workflow completo | ValidationService, IValidationRepository, rutas delegadas |
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
### 3.2 Gaps Identificados
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
#### Arquitectura
- ✅ Backend: Separación Application/Infrastructure en uso (servicios, repos, ValidationService)
- ⚠️ Frontend: Arquitectura funcional React (no Clean Architecture estricta)
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
#### Testing
- ✅ Backend: Tests unitarios (GlossaryService, ContentService, ValidationService) y tests integración API
- ⚠️ Frontend: Cobertura en aumento; objetivo 80% documentado
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
#### Funcionalidades Pendientes
- ⚠️ Glosario: Frontend debe consumir `/api/glossary` (hoy usa datos locales en `pharmaceutical-terminology.ts` si aplica)
- ✅ Medios: Upload e interfaz de gestión implementados
- ✅ Validación Médica: Workflow completo (ValidationService + rutas)
2026-01-25 20:09:47 +00:00
---
2026-02-27 14:37:22 +00:00
## 🎫 PARTE 4: PLAN DE EJECUCIÓN (BACKLOG)
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
**Documentos de control:** `docs/QUE_FALTA.md` , `docs/BACKLOG_MICRO_TICKETS.md` , `docs/CONTENIDO_FALTANTE.md`
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
**Fases ya ejecutadas (resumen):**
1. **Fase 1: Fundación y Refactorización** — Schemas Zod, refactor procedures/drugs, http-responses
2. **Fase 2: Glosario** — Schema BD, repositorio, servicio, API, migración frontend→backend
3. **Fase 3: Validación Médica** — ValidationService, IValidationRepository, ContentStatus, rutas
4. **Fase 4: Medios** — Upload mejorado (Zod, safeExtension), interfaz MediaManagerPage
5. **Fase 5: Testing** — Tests backend (servicios + API), tests frontend (hooks, utils, componentes)
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
**Pendiente de contenido (no técnico):** Ver `docs/CONTENIDO_FALTANTE.md` (protocolos Escena, guías, términos glosario).
2026-01-25 20:09:47 +00:00
---
2026-02-27 14:37:22 +00:00
## 📚 REFERENCIAS
2026-01-25 20:09:47 +00:00
2026-02-27 14:37:22 +00:00
- **Entrevista SDD (respuestas consolidadas):** `docs/ENTREVISTA_SDD_RESPUESTAS.md`
- **Arquitectura:** `.cursorrules`
- **Reglas de negocio puras:** `docs/BUSINESS_LOGIC.md`
- **Andragogía:** `docs/ANDRAGOGIA_STRESS_READY_112.md`
- **Checklist:** `docs/CHECKLIST_ANTES_ACEPTAR_CAMBIOS.md`
- **Auditoría Técnica:** `docs/AUDITORIA_TECNICA_COMPLETA_TECH_LEAD.md`
- **Control Proyecto:** `docs/CONTROL_PROYECTO.md`
2026-01-25 20:09:47 +00:00
---
2026-02-27 14:37:22 +00:00
**Este documento es la fuente de verdad del proyecto. Cualquier decisión arquitectónica o de diseño debe alinearse con este SPEC.**