Sala de máquinas del proyecto: arquitectura, diseño, calidad, operación.
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.NGINX reverse proxy + hilos virtuales (Project Loom) de Java 25. Cada microservicio en su puerto desde 8080.
Ubuntu Server 26.04 LTS · OpenJDK 25 · Spring Boot 4.x.
Java 25 + Spring Boot 4.x. Hilos virtuales para concurrencia masiva sin sobrecarga.
Vite + React + TypeScript + WebSockets · TailwindCSS · shadcn/ui · Lucide.
Spring Boot como capa de estado y datos (REST + WebSockets reactivos hacia el frontend).
JWT firmados · OpenAPI 3.1 · FHIR R4 · versionado de contratos.
PostgreSQL (transaccional) · MongoDB / GridFS (documentos y binarios).
Spring Events + WebSockets reactivos (publicador/suscriptor).
Kubernetes (single-node MVP) · imágenes versionadas · rolling updates.
Prometheus · Grafana · Sentry · OpenSearch para logs.
Google Authenticator (TOTP) para acceso a secretos y operaciones críticas.
Snapshot diario de VM completa + retención a NAS y nube cifrada.
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 |
Cada microservicio dueño de su BD. PostgreSQL para transaccional, MongoDB/GridFS para documentos y binarios.
Brand #0b3d91 · Acento #1f8a3a · Alerta #c0392b · Aviso #d97706.
Inter (UI) · Poppins (títulos) · escala 1.25.
shadcn/ui + TailwindCSS · iconografía Lucide.
WCAG 2.1 AA · contraste mínimo 4.5:1 · navegación por teclado.
Logo + usuario + contraseña + TOTP + disclaimer institucional.
Identidad arriba, menú lateral por permisos, KPIs, bandeja de tareas.
CUI/QR/nombre, foto, edad, última visita, abrir o crear expediente.
Cabecera con alergias, pestañas: Notas, Diagnósticos, Recetas, Lab, Imágenes.
Lista en tiempo real con semáforo y tiempo de espera.
Altas activas, condición de egreso, plan post-hospitalario.
Prescripción electrónica con stock, dosis, duración, firma TOTP, QR.
Agendas del día / próximas, búsqueda por paciente o médico, estados en tiempo real.
Dispensación de recetas pendientes, alertas de stock bajo, verificación clínica.
Solicitudes por prioridad, resultados con banderas H/L/C, historial analítico.
Solicitudes de hemocomponentes, tipificación, liberación para transfusión.
Estado en vivo de 4 quirófanos, programación de cirugías, duración estimada.
Mapa visual de ocupación por servicio (UCI/Medicina/Cirugía/Maternidad), KPIs %.
Gestión de biopsias y citologías, informes histológicos, clasificación CIE-10.
Casos activos por categoría (alta social, apoyo económico, violencia), acciones y seguimiento.
Planes nutricionales activos, kcal/proteína, restricciones, próxima revisión del dietista.
Pacientes, tiempos, ocupación, recetas, exportar SIGSA.
Tabla con hash WORM, filtros por usuario/acción/fecha, exportación firmada.
GitHub privado de Toscana · un repo por microservicio + repo de infra (IaC) + repo de docs.
main protegido · feature/* · PRs con revisión obligatoria · Conventional Commits.
Java: Spring Boot, Lombok, Mapstruct · React: hooks, TypeScript estricto, ESLint + Prettier.
GitHub Actions · pruebas en cada PR · build de imágenes · deploy a DEV/QA/PROD.
DEV · QA/STAGING · PRE-PROD · PROD. Datos anonimizados en STAGING.
Versionado semántico · changelog automatizado · ventana de despliegue viernes 19:00.
JUnit 5 + Mockito · ≥ 80% en lógica crítica · por commit
Testcontainers + REST Assured · por PR
Pact + Schemathesis · diaria
Playwright · por release
k6 + Grafana · 5 000 usuarios concurrentes 30 min
OWASP ZAP + Trivy + Snyk · mensual
Validación con jefes de área HNSM · antes de cada hito
Suite completa antes de cada release
TLS 1.3 obligatorio · Let's Encrypt o sello MSPAS · HSTS.
Cifrado a nivel de campo en datos sensibles (PostgreSQL y MongoDB).
Google Authenticator (TOTP) obligatoria para roles administrativos y clínicos.
Roles: Director, Jefe, Médico, Enfermería, Farmacia, Lab, Estadística, Auditor, TI.
Bitácora append-only con hash encadenado · exportación firmada.
Hardening continuo · escaneo de dependencias · pentests periódicos.
Estrategia 3-2-1: 3 copias · 2 medios · 1 fuera de sitio (nube cifrada). Pruebas mensuales de restauración.
Snapshot diario 02:00 · retención 30 días · NAS + nube.
WAL streaming continuo + dump diario · 30 días.
mongodump diario · 30 días · GridFS sincronizado cada 6 h.
Versionada en Git · reproducible.
Guía paso a paso por área: consulta externa, emergencia, hospitalización, farmacia, laboratorio, estadística.
Inventario de servicios, operaciones diarias, procedimientos críticos, mantenimientos programados, escalamiento.
L–V 7:00–19:00 · WhatsApp 5632-5240 · soporte@toscanasystems.com.
N1 mesa HNSM · N2 Informática HNSM · N3 DevOps Toscana · N4 Gerencia Toscana.
S1 ≤ 4 h · S2 ≤ 1 día · S3 ≤ 1 sprint · S4 backlog.
Avance %, KPIs, riesgos. Firmados por gerente Toscana + director HNSM.
Capacitación a Informática HNSM (formadores internos · 16 h).
Talleres por área: médicos generales, especialistas, enfermería, farmacia, laboratorio, estadística.
Sesiones ejecutivas (dirección + jefes) y simulacros por turno.
Acompañamiento en piso durante el go-live (2 semanas).
Toda la documentación detallada (PDFs, diagramas, manuales, planes y reportes) se entrega en el paquete del proyecto.