Sistema Médico Hospital Nacional c. Diseño y Desarrollo
Hospital Nacional · Diseño y Desarrollo
🛠️

c. Diseño y Desarrollo

Sala de máquinas del proyecto: arquitectura, diseño, calidad, operación.

Stack Datos Recorrido del paciente UX/UI Desarrollo Calidad Seguridad Operación Capacitación
Control documental: revisión cruzada ejecutada el 08-may-26 entre hn-diseno-desarrollo.php, hn-ingenieros.php, hn-ing-construccion.php y memory.md; además se registra el dominio operativo adicional www.sistema-medico.com.
1. Stack técnico

Arquitectura por capas

Bus de integración

NGINX reverse proxy + hilos virtuales (Project Loom) de Java 25. Cada microservicio en su puerto desde 8080.

Sistema operativo

Ubuntu Server 26.04 LTS · OpenJDK 25 · Spring Boot 4.x.

Backend

Java 25 + Spring Boot 4.x. Hilos virtuales para concurrencia masiva sin sobrecarga.

Frontend

Vite + React + TypeScript + WebSockets · TailwindCSS · shadcn/ui · Lucide.

Estado / Datos

Spring Boot como capa de estado y datos (REST + WebSockets reactivos hacia el frontend).

Contratos API

JWT firmados · OpenAPI 3.1 · FHIR R4 · versionado de contratos.

Bases de datos

PostgreSQL (transaccional) · MongoDB / GridFS (documentos y binarios).

Mensajería

Spring Events + WebSockets reactivos (publicador/suscriptor).

Orquestación

Kubernetes (single-node MVP) · imágenes versionadas · rolling updates.

Observabilidad

Prometheus · Grafana · Sentry · OpenSearch para logs.

DevOps · Secretos

Google Authenticator (TOTP) para acceso a secretos y operaciones críticas.

DevOps · Backups

Snapshot diario de VM completa + retención a NAS y nube cifrada.

Transparencia técnica

Diseño de 25 microservicios y despliegue piloto

El sistema se diseña como 25 microservicios. En este corte, la máquina virtual de Toscana corre 21 servicios activos verificados por acceso SSH directo. La tabla separa arquitectura objetivo, despliegue piloto y componentes que entran por fase. Última verificación: 8 de mayo 2026 · 16:18 hora de Guatemala en la máquina 177.7.57.79.

Componente Diseño objetivo Estado del despliegue piloto Decisión
(ADR)
Microservicios 25 microservicios diseñados: 24 carpetas locales presentes y pasarela FHIR pendiente de crear. 21 servicios activos en la VM Toscana · puertos 8080 al 8100 · verificados por proceso, puerto y prueba de salud. ADR-01, ADR-02
Despliegue Arquitectura preparada para automatizar despliegues y evolucionar hacia contenedores cuando el volumen lo justifique. Binario JAR nativo administrado por systemd · Nginx en el puerto 80 · túnel Cloudflare · sin Docker · sin Kubernetes. ADR-11
Base de datos
relacional
Una base por microservicio diseñado, con separación de responsabilidades clínicas y operativas. PostgreSQL 18 · 21 bases creadas · usuario dedicado por servicio · migraciones Flyway pendientes. ADR-04
Documentos
no relacionales
MongoDB con GridFS para notas longitudinales y archivos binarios clínicos. No desplegado en la VM piloto. Las notas clínicas viven hoy en PostgreSQL. ADR-05
Series temporales TimescaleDB para signos vitales de alta frecuencia (UCI y monitoreo). No desplegado en la VM piloto. Los signos vitales se guardan hoy en la base del eMAR de enfermería. ADR-06
Mensajería
y eventos
Apache Kafka como bus de eventos entre servicios, con esquemas Avro y registro de esquemas. Eventos internos de Spring dentro de cada servicio. WebSockets para tiempo real hacia el frontend. Kafka no está activo en la VM piloto. ADR-07
Interoperabilidad
HL7 versión 2
Mirth Connect para integrar laboratorios, PACS y monitores del HNSM. No desplegado en la VM piloto. ADR-08
Interoperabilidad
FHIR R4
Servicio de pasarela FHIR con los mapeos estándar de FHIR R4. Es el microservicio 25 del diseño. No desplegado en la VM piloto. Carpeta pendiente de crear. ADR-09
Identidad
y firma de tokens
OAuth2 como proveedor de recursos · tokens JWT con algoritmo RS256 · juego de claves públicas accesible en /.well-known/jwks.json. Activo en VM piloto. Hallazgo abierto: firma RSA efímera por reinicio mientras no se definan archivos de llave persistente. ADR-03
Observabilidad Trazas y métricas centralizadas por fases. Monitoreo operativo base con pruebas de salud y bitácoras por servicio. Stack completo entra en fases posteriores. ADR-10
2. Modelo de datos

Database per service

Cada microservicio dueño de su BD. PostgreSQL para transaccional, MongoDB/GridFS para documentos y binarios.

Entidades principales

EntidadServicioMotorAtributos clave
pacienteIdentidadPostgreSQLcui, nombres, apellidos, fecha_nac, sexo, dirección, foto
episodioExpedientePostgreSQLid, paciente_id, tipo, inicio, fin
nota_clinicaExpedienteMongoepisodio_id, autor, fecha, texto, firmas
diagnosticoExpedientePostgreSQLepisodio_id, cie10, descripción, principal
recetaRecetasPostgreSQLid, episodio_id, prescriptor_id, fecha, items, firma
receta_itemRecetasPostgreSQLreceta_id, medicamento_id, dosis, frecuencia, duración
medicamentoFarmaciaPostgreSQLsku, nombre, presentación, laboratorio, controlado
inventarioFarmaciaPostgreSQLmedicamento_id, lote, vencimiento, cantidad
citaCitasPostgreSQLid, paciente_id, prestador_id, fecha, estado
triageEmergenciaPostgreSQLepisodio_id, nivel, motivo, tomado_por
camaHospitalizaciónPostgreSQLid, área, número, estado
orden_labLaboratorioPostgreSQLid, episodio_id, prueba, urgente, estado
resultado_labLaboratorioMongo (GridFS)orden_id, valores, archivo, validador, firma
evento_auditAuditoríaMongo (WORM)actor, acción, recurso, hash_prev, sello_tiempo

Reglas de integridad y privacidad

2.5 Recorrido del paciente

Del carnet de papel al identificador digital

Hoy en el HNSM, Consulta Externa y Emergencia entregan un carnet impreso que viaja con el paciente. En el SIH-HNSM ese carnet se vuelve un patient_id único (UUID) que viaja automáticamente entre microservicios, opcionalmente impreso con código QR para escanear en cada estación.

Identidad única, episodio único. Cada llegada genera un episode_id ligado al patient_id. Todo lo que ocurre durante esa atención (triage, signos, órdenes, resultados, recetas, transfusiones, cirugías, camas, factura) se ata al mismo episode_id; cuando el paciente vuelve otro día, se reusa el patient_id y se abre un episodio nuevo.

Paso 0 · Identificación al ingreso

Quién Servicio Ruta pública Qué hace
Admisiónpatient-mpiGET /api/v1/pacientes/buscar?cui=…Busca por DPI/CUI en el Master Patient Index
Admisiónpatient-mpiPOST /api/v1/pacientesAlta si no existe; valida CUI RENAP

1.a Consulta Externa

Check-in de cita → apertura de episodio ambulatorio → notas y diagnóstico CIE-10 → órdenes (lab/imagen) → receta → cierre. Sin papel intermedio.

1.b Emergencia

Admisión sin cita → triage ESI/Manchester → primer signos vitales con cálculo EWS → evaluación médica → órdenes STAT → decisión: egreso, observación, hospitalización o traslado.

Paso 1.b · Detalle del flujo de Emergencia

# Quién Servicio Ruta pública Resultado
1Admisión emergenciareception-admissionPOST /api/v1/admision/emergenciaepisode_id (carnet digital)
2Enfermería triageemergency-triagePOST /api/v1/emergencias/triageNivel ESI 1–5
3Enfermeríasignos-vitalesPOST /api/v1/enfermeria/signosPrimer set + EWS calculado
4Sistema (si EWS≥5)notificaciones— evento Kafka —Alerta WebSocket + SMS al médico
5Médicoehr-encounterPOST /api/v1/expediente/{episodioId}/notasEvaluación inicial + CIE-10
6Médicoordenes-medicasPOST /api/v1/expediente/{episodioId}/ordenesLab/imagen/medicación (STAT si urge)
7Médico— decisión —Egreso · observación · hospitalización · traslado
7aMédico (hospital.)inpatient-adtPOST /api/v1/hospitalizacion/ingresoCama asignada vía infra-camas

Paso 2 · Servicios que se activan según el diagnóstico

Cada uno se dispara por una orden médica emitida en el paso anterior. La orden lleva el patient_id + episode_id y rutea solo al servicio responsable.

Laboratorio

/api/v1/laboratorio/** · recibe orden, toma de muestra, resultado HL7/ASTM o transcripción, validación del bioquímico. Valor crítico dispara evento lab.critical-result.v1 → SMS + WebSocket al médico.

Imagenología

/api/v1/imagenologia/** · recibe orden, captura del estudio (DICOM cuando aplique), dictamen del radiólogo. Alias /api/v1/anatomopatologia/** para biopsias y citologías.

Banco de Sangre

/api/v1/banco-sangre/** · solicitud, tipificación y crossmatch, liberación de unidad, registro de transfusión, reporte de evento adverso transfusional.

Farmacia

/api/v1/farmacia/** · cola de dispensación, validación farmacéutica (interacciones, dosis), descuento contra inventario, devolución de sobrantes.

Hospitalización

/api/v1/hospitalizacion/** · asignación de cama, signos por turno con EWS automático, EMAR (administración de medicamentos), traslados internos, egreso.

Quirófano

/api/v1/quirofano/** · programación, pre-op / intra-op / post-op con tiempos, salida hacia UCI (/api/v1/uci/**) o piso.

Paso 3 · Cierre del episodio

Diferencias clave con el flujo actual del HNSM

Hoy en el HNSM En el SIH-HNSM
Carnet de papel viaja físicamente con el paciente.patient_id (UUID) viaja en cada llamada; opcional imprimir un carnet con código QR.
Cada servicio rellena su propia hoja en papel.Cada microservicio escribe en su BD y comparte el episode_id por eventos Kafka.
Resultados de equipos se transcriben manualmente.HL7/ASTM cuando los equipos lo permitan; transcripción solo como respaldo.
Reportes SIGSA en XLSX manuales por estadística.forms-sigsa + reportes-sigsa (pendiente de plantillas oficiales MSPAS v2025-q4).
Valores críticos avisados por llamada telefónica.notificaciones: alerta WebSocket en el tablero + SMS al residente de turno.
Identidad del paciente verificada visualmente.DPI/CUI valida dígito verificador RENAP automáticamente en el alta.

Lo que aún NO está cubierto (transparencia)

3. Diseño UX/UI

Sistema de diseño

Paleta

Brand #0b3d91 · Acento #1f8a3a · Alerta #c0392b · Aviso #d97706.

Tipografía

Inter (UI) · Poppins (títulos) · escala 1.25.

Componentes

shadcn/ui + TailwindCSS · iconografía Lucide.

Accesibilidad

WCAG 2.1 AA · contraste mínimo 4.5:1 · navegación por teclado.

Pantallas principales

Login con MFA

Logo + usuario + contraseña + TOTP + disclaimer institucional.

Dashboard del rol

Identidad arriba, menú lateral por permisos, KPIs, bandeja de tareas.

Buscar paciente

CUI/QR/nombre, foto, edad, última visita, abrir o crear expediente.

Expediente clínico

Cabecera con alergias, pestañas: Notas, Diagnósticos, Recetas, Lab, Imágenes.

Triage de emergencia

Lista en tiempo real con semáforo y tiempo de espera.

Seguimiento de egreso

Altas activas, condición de egreso, plan post-hospitalario.

CPOE — Órdenes médicas

Prescripción electrónica con stock, dosis, duración, firma TOTP, QR.

Citas

Agendas del día / próximas, búsqueda por paciente o médico, estados en tiempo real.

Farmacia

Dispensación de recetas pendientes, alertas de stock bajo, verificación clínica.

Laboratorio

Solicitudes por prioridad, resultados con banderas H/L/C, historial analítico.

Banco de sangre

Solicitudes de hemocomponentes, tipificación, liberación para transfusión.

Quirófano

Estado en vivo de 4 quirófanos, programación de cirugías, duración estimada.

Camas

Mapa visual de ocupación por servicio (UCI/Medicina/Cirugía/Maternidad), KPIs %.

Anatomopatología

Gestión de biopsias y citologías, informes histológicos, clasificación CIE-10.

Trabajo Social

Casos activos por categoría (alta social, apoyo económico, violencia), acciones y seguimiento.

Dietas

Planes nutricionales activos, kcal/proteína, restricciones, próxima revisión del dietista.

Tablero ejecutivo

Pacientes, tiempos, ocupación, recetas, exportar SIGSA.

Auditoría

Tabla con hash WORM, filtros por usuario/acción/fecha, exportación firmada.

4. Desarrollo

Cómo construimos

Repos

GitHub privado de Toscana · un repo por microservicio + repo de infra (IaC) + repo de docs.

Convenciones Git

main protegido · feature/* · PRs con revisión obligatoria · Conventional Commits.

Estándares

Java: Spring Boot, Lombok, Mapstruct · React: hooks, TypeScript estricto, ESLint + Prettier.

CI/CD

GitHub Actions · pruebas en cada PR · build de imágenes · deploy a DEV/QA/PROD.

Ambientes

DEV · QA/STAGING · PRE-PROD · PROD. Datos anonimizados en STAGING.

Releases

Versionado semántico · changelog automatizado · ventana de despliegue viernes 19:00.

5. Calidad

Plan de pruebas

Niveles de prueba

Unitarias

JUnit 5 + Mockito · ≥ 80% en lógica crítica · por commit

Integración

Testcontainers + REST Assured · por PR

Contrato API

Pact + Schemathesis · diaria

E2E (UI)

Playwright · por release

Carga

k6 + Grafana · 5 000 usuarios concurrentes 30 min

Seguridad

OWASP ZAP + Trivy + Snyk · mensual

UAT

Validación con jefes de área HNSM · antes de cada hito

Regresión

Suite completa antes de cada release

Criterios de aceptación

6. Seguridad y respaldo

Defensa en profundidad

Cifrado en tránsito

TLS 1.3 obligatorio · Let's Encrypt o sello MSPAS · HSTS.

Cifrado en reposo

Cifrado a nivel de campo en datos sensibles (PostgreSQL y MongoDB).

MFA

Google Authenticator (TOTP) obligatoria para roles administrativos y clínicos.

RBAC

Roles: Director, Jefe, Médico, Enfermería, Farmacia, Lab, Estadística, Auditor, TI.

Auditoría WORM

Bitácora append-only con hash encadenado · exportación firmada.

OWASP Top 10

Hardening continuo · escaneo de dependencias · pentests periódicos.

Plan de respaldo y recuperación (DRP)

Estrategia 3-2-1: 3 copias · 2 medios · 1 fuera de sitio (nube cifrada). Pruebas mensuales de restauración.

VM completa

Snapshot diario 02:00 · retención 30 días · NAS + nube.

PostgreSQL

WAL streaming continuo + dump diario · 30 días.

MongoDB

mongodump diario · 30 días · GridFS sincronizado cada 6 h.

Configuración (IaC)

Versionada en Git · reproducible.

7. Operación y soporte

Manuales y runbooks

Manual de Usuario

Guía paso a paso por área: consulta externa, emergencia, hospitalización, farmacia, laboratorio, estadística.

Manual de Administrador TI

Inventario de servicios, operaciones diarias, procedimientos críticos, mantenimientos programados, escalamiento.

Mesa de ayuda

L–V 7:00–19:00 · WhatsApp 5632-5240 · soporte@toscanasystems.com.

Escalamiento

N1 mesa HNSM · N2 Informática HNSM · N3 DevOps Toscana · N4 Gerencia Toscana.

SLA por severidad

S1 ≤ 4 h · S2 ≤ 1 día · S3 ≤ 1 sprint · S4 backlog.

Reportes mensuales

Avance %, KPIs, riesgos. Firmados por gerente Toscana + director HNSM.

8. Capacitación

Plan de adopción

Septiembre

Capacitación a Informática HNSM (formadores internos · 16 h).

Octubre

Talleres por área: médicos generales, especialistas, enfermería, farmacia, laboratorio, estadística.

Noviembre

Sesiones ejecutivas (dirección + jefes) y simulacros por turno.

Diciembre

Acompañamiento en piso durante el go-live (2 semanas).

Indicadores de adopción

Toda la documentación detallada (PDFs, diagramas, manuales, planes y reportes) se entrega en el paquete del proyecto.

← Volver a Hospital Nacional 🏥 Inicio del Sistema Médico 🏠 Inicio Toscana