15 KiB
📋 SPEC - Especificación Maestra del Proyecto
EMERGES TES - Guía Digital de Protocolos de Emergencias
Última actualización: 2025-02-02
Versión: 2.1
Estado: Activo - Fuente de Verdad del Proyecto
🎯 PARTE 1: QUÉ Y POR QUÉ (Antes del Cómo)
1.1 ¿Qué es EMERGES TES?
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.
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
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
1.2 ¿Por qué existe este proyecto?
Problema que resuelve
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)
Problemas específicos que aborda:
-
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)
-
Reducción de errores humanos
- Validación de dosis por edad/peso
- Recordatorios de pasos críticos
- Alertas de contraindicaciones
-
Estandarización de procedimientos
- Protocolos basados en guías oficiales (ERC, AHA, SEMES)
- Consistencia en actuaciones
- Trazabilidad de decisiones
-
Formación continua
- Manual estructurado navegable
- Guías formativas asociadas a protocolos
- Modos de práctica/simulación
1.3 Principios de Diseño (Por qué así)
1.3.1 Andragogía Clínica y Stress-Ready Design
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.
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
Referencia: docs/ANDRAGOGIA_STRESS_READY_112.md
1.3.2 Offline-First
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.
Aplicación:
- Contenido estático embebido en el bundle
- Service Worker para cacheo agresivo
- Funcionalidad completa sin backend (Fase A)
1.3.3 Type Safety y Validación Estricta
Por qué: Errores en dosis o protocolos pueden ser críticos. El sistema debe prevenir errores en tiempo de compilación y runtime.
Aplicación:
- TypeScript estricto (sin
any) - Validación Zod en runtime
- Guard clauses obligatorias en componentes
1.3.4 Clean Architecture (Backend)
Por qué: Separación clara de responsabilidades facilita mantenimiento, testing y evolución del sistema.
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
1.4 Dominios de Negocio Identificados
| 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 |
🏗️ 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)
2.2 Arquitectura
Backend: Clean Architecture (Simplificada)
┌─────────────────────────────────────────┐
│ PRESENTATION LAYER │
│ Routes + Middleware + Validators │
└─────────────────────────────────────────┘
↓
┌─────────────────────────────────────────┐
│ APPLICATION LAYER │
│ Services (lógica de negocio) │
└─────────────────────────────────────────┘
↓
┌─────────────────────────────────────────┐
│ DOMAIN LAYER │
│ Entities + Value Objects + Interfaces │
└─────────────────────────────────────────┘
↓
┌─────────────────────────────────────────┐
│ INFRASTRUCTURE LAYER │
│ Repositories + Database + Storage │
└─────────────────────────────────────────┘
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
Objetivo: Separación completa Application/Infrastructure en carpetas explícitas.
Frontend: Arquitectura por Capas Funcional
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)
Estado actual: Arquitectura funcional orientada a React, no Clean Architecture estricta.
2.3 Modelo de Datos
Entidades Principales
ContentItem (Protocolos, Guías, Manuales, Checklists)
id,type,slug,level,title,content(JSON),priority,status,version
Drug (Fármacos)
id,slug,genericName,tradeName,category,adultDose,pediatricDose,routes,indications,contraindications
GlossaryTerm (Glosario)
id,term,abbreviation,category,definition,relatedTerms
MediaResource (Medios)
id,type,path,fileUrl,title,tags,block,chapter
Referencia completa: Ver backend/src/domain/entities/
2.4 Principios Técnicos Consolidados
- Value Objects (Híbrido): Entidades usan tipos simples; Value Objects en servicios para validación
- Serialización (Mappers): Mappers separados en
infrastructure/mappers/; Domain NO tienetoJSON - IDs (Application Layer): UUIDs generados en Application Layer, pasados a entidades
- Validación (Híbrido): Básicas en Domain (
create()), complejas en Application Services; Zod en Application - Fechas (ISO 8601 Strings):
stringcon formato ISO 8601, NODatenativo - Arrays (readonly T[]):
readonly string[]para arrays inmutables - Opcionales (Híbrido):
?para opcionales,| nullcuando null tiene significado - Errores (Personalizados):
DomainError,ValidationError,BusinessRuleError - Versionado (Números Enteros):
version: number, NO semantic versioning - JSONB (Union Types): Union types para
content, NORecord<string, unknown>
Referencia completa: .cursorrules (sección "Decisiones Técnicas Consolidadas")
2.5 Decisiones SDD (Checklist – Fuente de Verdad)
Marco: Desarrollo Impulsado por Especificaciones (SDD). Respuestas consolidadas en docs/ENTREVISTA_SDD_RESPUESTAS.md.
| 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 |
📊 PARTE 3: ESTADO ACTUAL Y GAPS
3.1 Estado de Implementación
| 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 |
3.2 Gaps Identificados
Arquitectura
- ✅ Backend: Separación Application/Infrastructure en uso (servicios, repos, ValidationService)
- ⚠️ Frontend: Arquitectura funcional React (no Clean Architecture estricta)
Testing
- ✅ Backend: Tests unitarios (GlossaryService, ContentService, ValidationService) y tests integración API
- ⚠️ Frontend: Cobertura en aumento; objetivo 80% documentado
Funcionalidades Pendientes
- ⚠️ Glosario: Frontend debe consumir
/api/glossary(hoy usa datos locales enpharmaceutical-terminology.tssi aplica) - ✅ Medios: Upload e interfaz de gestión implementados
- ✅ Validación Médica: Workflow completo (ValidationService + rutas)
🎫 PARTE 4: PLAN DE EJECUCIÓN (BACKLOG)
Documentos de control: docs/QUE_FALTA.md, docs/BACKLOG_MICRO_TICKETS.md, docs/CONTENIDO_FALTANTE.md
Fases ya ejecutadas (resumen):
- Fase 1: Fundación y Refactorización — Schemas Zod, refactor procedures/drugs, http-responses
- Fase 2: Glosario — Schema BD, repositorio, servicio, API, migración frontend→backend
- Fase 3: Validación Médica — ValidationService, IValidationRepository, ContentStatus, rutas
- Fase 4: Medios — Upload mejorado (Zod, safeExtension), interfaz MediaManagerPage
- Fase 5: Testing — Tests backend (servicios + API), tests frontend (hooks, utils, componentes)
Pendiente de contenido (no técnico): Ver docs/CONTENIDO_FALTANTE.md (protocolos Escena, guías, términos glosario).
📚 REFERENCIAS
- 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
Este documento es la fuente de verdad del proyecto. Cualquier decisión arquitectónica o de diseño debe alinearse con este SPEC.