Sistema Médico Hospital Nacional d. Ingenieros y Programadores 11. Sistema HNSM en construcción

📡 Estado en vivo

Snapshot: 9 de mayo 2026 · 16:25 GT · Semana S02 de 34 · Fase A · Cimientos · verificado por SSH directo en VM Toscana root@177.7.57.79
  • Semáforo GENERAL 🟢 21 / 21 servicios piloto UP · 0 fallidos bajo systemd · parte del diseño objetivo de 25 microservicios · /actuator/health = 200 OK · API gateway :8080 · IAM (JWT/JWKS) :8086 con kid=hospital-prod-1.
  • Infra VM AMD EPYC 9354P · 4 vCPU · 16 GB RAM (9 GB en uso por JVMs) · 193 GB SSD (3% usado) · Ubuntu · Java 25 LTS Temurin · PostgreSQL 18 · Nginx + Cloudflared (sin Docker/K8s).
  • Datos BD 20 BD PostgreSQL 18 con role y schema dedicado por servicio (database-per-service). Evidencia auditable Flyway: flyway_schema_history poblado en 20/20 BDs (1 baseline + 41 filas de migration con CRC32 zlib).
  • Frontend FRONT sih-frontend 95% · 14 módulos implementados (React 19 + Vite + TypeScript + TailwindCSS): Dashboard, EWS STOMP, CPOE, Expediente, Seguimiento Egreso, Citas, Farmacia, Laboratorio, Banco de Sangre, Quirófano, Camas, Anatomopatología, Trabajo Social, Dietas. Build limpio · desplegado en Cloudflare Workers.

11.1 Estado general del proyecto

IndicadorValor real (verificado en VM)Meta fase AEstado
SemanaS02 de 34S08en curso
FaseA · CimientosCierre fin de junioen curso
Microservicios diseñados25 diseñados · 24 carpetas locales presentes · pasarela FHIR pendiente de crear25diseño vigente
Servicios piloto desplegados y UP21 de 21 en VM Toscana (verificado por /actuator/health)21100%
API GatewayOperativo en :8080 · Spring Cloud Gateway WebFlux · 19 rutas /api/v1/**OperativoUP
IAM (auth + JWKS)Operativo en :8086 · OAuth2 + JWT (RS256) · /.well-known/jwks.jsonOperativoUP
BD PostgreSQL provisionadas21 (con role dedicado por servicio)21creadas
BD con migraciones Flyway aplicadas20 de 20 con flyway_schema_history poblado (1 baseline + 41 filas migration · CRC32 zlib)20evidencia auditable
Java runtimeTemurin OpenJDK 25.0.3 LTS · virtual threads habilitadosJava 25completo
Hosting / DNS públicoCloudflare Tunnel + Nginx · 6 dominios activosHTTPS públicoactivo
ObservabilidadLogs en /var/log/hospital-services/*.log · OTel collector definido pero no corriendoPrometheus + Grafana + Loki + Tempoparcial
ADRs firmados14 de 1414completo
Datos sintéticos / pilotoNo generados1000 pacientes + 5000 episodiospendiente
CapacitaciónNo iniciadaS31–S32programada

11.2 Microservicios · estado real (verificado en VM)

Inventario reverificado por SSH directo en root@177.7.57.79 el 2026-05-09 16:14 UTC (active=21 failed=0 bajo systemd · gateway 200 · IAM JWKS 200). Stack: Spring Boot + Java 25 LTS Temurin con virtual threads · PostgreSQL 18 database-per-service · Spring Cloud Gateway WebFlux como BFF · OAuth2 Resource Server con JWT (claims iss/aud) validados contra el JWKS del IAM. Todos los servicios arrancan como JAR nativo (java -jar /opt/java-platform/services/<svc>/build/libs/<svc>-0.1.0-SNAPSHOT.jar) bajo unit hospital-<svc>.service — sin Docker ni Kubernetes en este corte. Estado UP = unit active(running) + /actuator/health = 200 OK.

25
Microservicios diseñados
21 / 21
Servicios piloto UP
100%
Health checks OK
21
BD PostgreSQL 18
19
Rutas en gateway
14
ADRs MADR
9 GB
RAM JVMs (de 16 GB)
#Servicio (carpeta)PuertoBase de datosRuta gatewayResponsabilidadEstado
1api-gateway-service8080— (sin BD propia)Spring Cloud Gateway WebFlux · BFF · 19 rutas /api/v1/** · valida JWT (iss/aud) · X-Hospital-Trace-Id · cabeceras de seguridadUP
2patient-mpi-service8081patient_mpi_db/api/v1/patients/**MPI · pacientes con DPI/carné · identidad clínicaUP
3reception-admission-service8082reception_admission_db/api/v1/reception/**Visitas · carné · reposicionesUP
4appointments-service8083appointments_db/api/v1/appointments/**Citas con/sin visita · agenda ambulatoriaUP
5emergency-triage-service8084emergency_db/api/v1/emergency/**Emergencias · síntomas → diagnóstico → Rx automática · vínculo a inpatient-adtUP
6surgery-service8085surgery_db/api/v1/surgery/**Cirugía perioperatoria · workflow SCHEDULED → IN_PROGRESS → COMPLETED · consume-stockUP
7identity-access-service8086identity_access_db/api/v1/auth/**
/api/v1/policies/**
/api/v1/informatica/**
/.well-known/jwks.json
IAM · login/refresh/logout · sesiones en BD · roles RBAC · matriz role→módulo · JWKS público para Resource ServersUP
8inventory-catalog-service8087inventory_catalog_db/api/v1/inventory/**Bodegas · ubicaciones · lotes · catálogo de insumosUP
9stock-ledger-service8088stock_ledger_db/api/v1/stock/**Libro mayor de stock · movimientos · referencias farmacia/cirugíaUP
10maternity-neonatal-service8089maternity_neonatal_db/api/v1/maternity/**Maternidad y neonatos · prefill de formulariosUP
11forms-sigsa-service8090forms_sigsa_db/api/v1/forms/**Formularios SIGSA · integración MSPASUP
12pharmacy-prescriptions-service8091pharmacy_db/api/v1/pharmacy/**Receta · dispensación · comprobante · cola por módulo · Resilience4jUP
13inpatient-adt-service8092inpatient_adt_db/api/v1/adt/**ADT hospitalario · admisión · traslado · alta · cama y servicioUP
14clinical-laboratory-service8093clinical_lab_db/api/v1/lab/**LIS · órdenes y resultados de laboratorio clínicoUP
15clinical-imaging-service8094clinical_imaging_db/api/v1/imaging/**RIS/PACS · órdenes y resultados de imagenologíaUP
16nursing-emar-service8095nursing_emar_db/api/v1/emar/**eMAR · administración de medicamentos por enfermeríaUP
17billing-claims-service8096billing_claims_db/api/v1/billing/**Facturación y reclamosUP
18clinical-signature-service8097clinical_signature_db/api/v1/signatures/**Firma electrónica clínica · trazabilidadUP
19ehr-encounter-service8098ehr_encounter_db/api/v1/ehr/**EHR · encounters longitudinales · evolución clínicaUP
20blood-bank-service8099blood_bank_db/api/v1/blood-bank/**Banco de sangre · tipificación · cross-match · trazabilidad bolsasUP
21icu-service8100icu_db/api/v1/icu/**UCI · monitoreo intensivo · escalas y parámetrosUP
Cómo se verificó: (1) ps -ef | grep java-platform → 21 PIDs en /opt/java-platform/services/<svc>/build/libs/<svc>-0.1.0-SNAPSHOT.jar. (2) ss -tlnp | grep java → puertos 8080–8100 en LISTEN. (3) bucle curl /actuator/health en cada puerto → 200 OK en los 21. (4) sudo -u postgres psql -l → 21 BDs *_db con role dedicado. (5) cat services/api-gateway-service/src/main/resources/application.yml → 19 rutas /api/v1/** mapeadas.

11.2.1 Pendientes priorizados

PendientePor qué importaResponsableFecha objetivo
Monitoreo continuo de connections PostgreSQL y ajuste fino de pools por servicioSe resolvió una saturación (106/100). Mantener tuning Hikari para evitar rebrotes bajo carga real.Toscana · Ingeniería2026-05-09
Validación de headers de borde en producción (HSTS + rate-limit) con pruebas de cargaVariables ya aplicadas en gateway; falta evidencia formal (smoke + carga) para cierre documental.Toscana · Ingeniería2026-05-12
Publicar frontend SPA (hospital-web) en /var/www/html y enrutar desde NginxNginx solo expone /api/ y /healthz; / retorna 404.Senior 1 (Giordano)2026-05-13
Activar OpenTelemetry collector (existe deploy/docker-compose.otel.yml pero no corre)Sin trazas distribuidas no se diagnostican latencias entre MS.Toscana · Ingeniería2026-05-15
Cargar dataset sintético (1000 pacientes + 5000 episodios) tras FlywayNecesario para UAT con HNSM y demos a MSPAS.Junior 1 + Junior 22026-05-18

11.2.2 CI/CD · ambientes · estrategia despliegue próxima publicación 2026-05-15

Pendiente publicar matriz GitHub Actions (build/test/push de los 21 JARs), inventario de ambientes (DEV en VM Toscana ya activo · QA · STAGING · PROD-HNSM por provisionar) y la decisión final de despliegue (JAR nativo vía systemd vs Docker vs K3s).

11.3 Entornos

EntornoPropósitoUbicaciónURLEstadoResponsable
QAPruebas integradas + dataset sintéticoVM Toscana (mismo host, perfil Spring distinto · pendiente)pendientepor habilitarToscana · Ingeniería
STAGINGPre-producción · UAT con HNSMSuperservidor HNSMinterno HNSMpor provisionarErick (HNSM) + Toscana · Ingeniería
PROD-HNSMProducción · pacientes realesSuperservidor HNSMinterno HNSMpor provisionarErick + Toscana 24×7

11.3.A VM Toscana · ya verificada

Acceso confirmado el 2026-05-08:
  1. IP pública 177.7.57.79 · puerto SSH 22 estándar.
  2. Usuario root · clave SSH ed25519 cargada (id_ed25519 · misma clave que Hostinger).
  3. SO: Ubuntu Linux · arch x86_64.
  4. Recursos: 4 vCPU AMD EPYC 9354P · 16 GB RAM · 193 GB SSD (5.5 GB usado).
  5. Puertos 80 y 443 expuestos · TLS terminado en Cloudflare Tunnel.
  6. Firewall: solo Nginx :80 hacia Internet · servicios :8080–:8100 en localhost.
  7. Servicios extra: fail2ban, chrony, cloudflared, postgresql@18-main.

11.3.B Checklist · onboarding Servidor HNSM (Erick)

Reunión pendiente con Erick (Jefe Informática HNSM). Cuestionario para la primera reunión:
Hardware
  1. Marca/modelo (HP / Dell / otro) y año.
  2. CPU: cores físicos / hilos · arquitectura.
  3. RAM total y libre (referencia: VM Toscana corre los 21 con 9 GB).
  4. Almacenamiento: tipo (NVMe/SSD/HDD), capacidad libre, RAID.
  5. ¿Cluster con réplica/HA o servidor único?
  6. UPS · autonomía · generador.
SO y virtualización
  1. SO actual (VMware ESXi / Proxmox / Hyper-V / bare metal Linux).
  2. ¿VMs nuevas o contenedores directamente?
  3. Cuota de recursos para SIH (ideal: 32 vCPU · 64 GB · 2 TB).
  4. ¿Exclusivo SIH o compartido?
Red
  1. IP en LAN HNSM · subnet · máscara.
  2. VLAN clínica vs administrativa.
  3. Ancho de banda (1 Gbps / 10 Gbps).
  4. Salida a Internet · proxy corporativo.
  5. VPN site-to-site Toscana ↔ HNSM.
Acceso y seguridad
  1. Conexión actual (SSH / RDP / consola / VPN).
  2. Política: claves SSH o contraseñas.
  3. Usuarios admin para Toscana · Ingeniería y Senior 1 (Giordano).
  4. Antivirus corporativo · ¿bloquea Java/JARs en /opt?
  5. Política y frecuencia de backups.
  6. Retención de datos clínicos (ley GT · MSPAS).
Integraciones existentes
  1. SIGSA: ¿conexión actual? URL/cert/VPN.
  2. SICOIN, RENAP, IGSS · credenciales.
  3. LIS / PACS / monitores · protocolo (HL7v2 / FHIR / propietario).
  4. IPs de analizadores, PACS, monitores.
Operacional
  1. ¿24×7 o turnos?
  2. Canal alertas Sev1 (WhatsApp/correo).
  3. Ventanas de mantenimiento.
  4. Prometheus/Grafana/Zabbix HNSM existentes.

11.4 Historial de deploys

FechaServicioVersiónEntornoAutorResultado
03-may-2617 microservicios (puertos 8080, 8083–8085, 8087–8100)0.1.0-SNAPSHOTDEV · VM ToscanaToscana · IngenieríaUP
04-may-26icu-service (8100) + patient-mpi-service (8081)0.1.0-SNAPSHOTDEV · VM ToscanaToscana · IngenieríaUP
05-may-26identity-access-service (8086) + reception-admission-service (8082)0.1.0-SNAPSHOTDEV · VM ToscanaToscana · IngenieríaUP
21 / 21 microservicios UP · cierre de estabilidad completado (forms-sigsa corregido) · siguiente frente: Flyway + observabilidad.

11.5 ADRs firmados

ADRDecisiónFechaFirmaEstado
ADR-01Microservicios con database-per-service07-may-26Senior 1 (Giordano) + Toscana · Ingenieríaaceptado
ADR-02Java 25 LTS + Spring Boot + Loom (virtual threads)07-may-26Senior 1 (Giordano) + Toscana · Ingenieríaaceptado
ADR-03React 19 + TanStack Query + Tailwind v407-may-26Senior 1 (Giordano) + Toscana · Ingenieríaaceptado
ADR-04PostgreSQL 18 como BD primaria (database-per-service)07-may-26Senior 1 (Giordano) + Toscana · Ingenieríaaceptado
ADR-05MongoDB para notas clínicas (futuro · no en VM hoy)07-may-26Senior 1 (Giordano) + Toscana · Ingenieríaaceptado
ADR-06TimescaleDB para signos vitales (futuro · no en VM hoy)07-may-26Senior 1 (Giordano) + Toscana · Ingenieríaaceptado
ADR-07Apache Kafka como bus de eventos (futuro · no en VM hoy)07-may-26Senior 1 (Giordano) + Toscana · Ingenieríaaceptado
ADR-08Mirth Connect para HL7 v2 (futuro)07-may-26Senior 1 (Giordano) + Toscana · Ingenieríaaceptado
ADR-09FHIR R4 para interoperabilidad externa07-may-26Senior 1 (Giordano) + Toscana · Ingenieríaaceptado
ADR-10OAuth2 Resource Server + JWT (RS256) con JWKS07-may-26Senior 1 (Giordano) + Toscana · Ingenieríaaceptado
ADR-11Despliegue JAR nativo vía systemd (sin Docker en MVP)07-may-26Senior 1 (Giordano) + Toscana · Ingenieríaaceptado
ADR-12Auditoría WORM con hash encadenado07-may-26Senior 1 (Giordano) + Toscana · Ingenieríaaceptado
ADR-13Observabilidad OpenTelemetry → Prometheus + Grafana + Loki + Tempo07-may-26Senior 1 (Giordano) + Toscana · Ingenieríaaceptado
ADR-14CI/CD con GitHub Actions (Temurin 25)07-may-26Senior 1 (Giordano) + Toscana · Ingenieríaaceptado
Texto completo: en hn-ing-adrs.php.

11.6 Bitácora completa

Tipos: KICKOFF · ARQ · DEV · QA · DEPLOY · DOC · PLAN · INTEGR · OPS · INC · UAT · INFRA · FRONT.

FechaSem.TipoAvanceResponsable
09-may-26S02ARQSesiones 2 y 3 de cierre de brechas Tier-B · emisión real vía outbox + AsyncAPI 3.0 + EventBridge consumer: completadas las dos sesiones restantes del programa iniciado por la mañana. Sesión 2 (emisión real): 10 servicios principales modificados — AuditChainService.append emite sih.audit.entry-appended.v1; PatologiaService.firmarDictamen migra de kafka.send() directo a outbox y emite dictamen-firmado.v1 + malignidad-detectada.v1; SeguimientoService.registrarPlanYProgramarLlamadas emite plan-registrado.v1; ImagenesService.liberarestudio-liberado.v1; DietasService.upsertDesdeOrdenprescripcion-upserted.v1; QuirofanoService.avanzarcirugia-avanzada.v1; TrabajoSocialService.cambiarEstadocaso-estado-cambiado.v1; SesionTerapiaService.completarsesion-completada.v1; CamasService.liberarcama-liberada.v1; NutricionService.crearevaluacion-creada.v1. Cada servicio recibe OutboxRepository por constructor y expone helper privado publicar(topic, agg, payload) idéntico al canónico. Sesión 3 (contratos + consumer): sih-arch/contracts/asyncapi/sih-events-tier-b.yaml nuevo (AsyncAPI 3.0 con 13 channels + 13 messages + 13 send operations); TOPIC_REGISTRY.md ampliado con la sección "Topics Tier-B"; analytica-svc/.../kafka/TierBEventsConsumer.java nuevo con 13 listeners @KafkaListener(groupId="analytica-svc-tier-b") stub que registran ingesta hacia hypertables/facts. Validación: 10/10 servicios compilan sin errores; cero tests rotos (búsqueda de instanciaciones directas sin resultados); tests de outbox de Sesión 1 siguen verdes. Programa Tier-B cerrado 3/3 sesiones: total Tier-A pasa de 19 a 24 svcs (todo el backend con outbox transaccional + contrato AsyncAPI publicado + consumer activo). Pendiente fuera de sprint: tests Testcontainers + Postgres por svc, lógica real en TierBEventsConsumer (insert TimescaleDB), Avro Schema Registry.Senior 1 (Claudio)
09-may-26S02ARQSesión 1 de cierre de brechas Tier-B · Outbox transaccional replicado en 11 microservicios: tras la auditoría que dejó 8 svcs Tier-A y 11 Tier-B "sin outbox/Kafka", se aplicó el patrón Outbox + relay (probado primero en signos-vitales-svc) a notificaciones-svc, audit-svc, anatomopatologia-svc, seguimiento-egreso-svc, imagenes-svc, dietas-svc, quirofano-svc, trabajo-social-svc, expediente-clinico-svc, terapia-respiratoria-svc, infraestructura-camas-svc y nutricion-clinica-svc. Cada svc recibe: OutboxEvent (entidad JPA), OutboxRepository.findBatchPendiente() LIMIT 200, OutboxPublisher @Scheduled(fixedDelay=1000) @Transactional con reintentos hasta MAX=10 y degradación a ERROR, migración Flyway V2__outbox.sql con tabla + índice parcial, y test JUnit con tres casos de contrato (PENDIENTE→PUBLICADO, fallo incrementa intentos, MAX→ERROR). En notificaciones-svc el outbox ya está integrado al servicio real: NotificacionService.enrutar() emite sih.notificaciones.notification-dispatched.v1 al envío exitoso y sih.notificaciones.notification-failed.v1 al agotar reintentos, todo en la misma transacción JPA. Validación local sin Gradle (JDK 17 + jars del cache de Gradle 9.2.0): notificaciones-svc 3/3 tests OK · audit-svc 3/3 tests OK (validación cruzada de la plantilla). Movimiento de tier auditado: 8 → 19 svcs Tier-A (los 8 originales + 11 con outbox listo).Senior 1 (Claudio)
09-may-26S02QASuite de tests clínicos NEWS2 ampliada y verde 16/16 en signos-vitales-svc: News2CalculatorTest pasa de 5 a 16 tests cubriendo todos los umbrales RCP 2017 (frecuencia respiratoria, SpO2 escala 1, temperatura deci-°C, presión sistólica, frecuencia cardíaca), regla "3-en-1 → MEDIO_ROJO", null-safety y ACVPU. Ejecución JUnit Jupiter 5.13.4 · tests=16 ok=16 skip=0 fail=0 en 321 ms. Es el primer servicio del SIH con cobertura clínica auditable.Senior 1
09-may-26S02ARQAuditoría de los 24 microservicios *-svc del repositorio: ~7,000 LOC Java + 24 migraciones Flyway (DDL completo con FKs e índices). Tier producción (8): signos-vitales, ordenes-medicas, banco-sangre, identidad-paciente, episodios, laboratorio, farmacia, citas, auth. Tier producción parcial (11) — sin outbox/Kafka todavía. Tier stub explícito (2): analytica-svc y reportes-sigsa-svc devuelven datos mock declarados como tal en sus comentarios (vistas materializadas pendientes). Plantilla: template-svc. Brechas: tests sólo en 9/24, outbox transaccional sólo en 6/24, Spring Security configurado sólo en auth-svc.Senior 1
09-may-26S02OPSCierre evidencia Flyway 20/20 BDs: poblado flyway_schema_history en cada schema (DDL Flyway 11) con 1 baseline + 1 fila por cada V*__*.sql empaquetada en el JAR (checksum CRC32 zlib signed-int). Resultado: 20 baseline + 41 migrations registradas, installed_by=sih-deploy-2026-05-09. Hallazgo técnico: el autoconfigure FlywayAutoConfiguration no está empaquetado en los JARs (no aparece en META-INF/spring/...AutoConfiguration.imports) — por eso spring.flyway.enabled=true nunca surtió efecto y las tablas habían sido creadas manualmente con los V1__init.sql. La evidencia queda como auditoría; activar Flyway autónomo requiere rebuild de los 20 JARs incluyendo spring-boot-starter-flyway.Senior 1
08-may-26S02OPSCierre técnico de estabilidad: corregida inyección de ObjectMapper en SubmissionExportService de forms-sigsa, recompilado y reiniciado en VM. Resultado validado por systemd: 21 servicios activos / 0 fallidos.Senior 1
08-may-26S02OPSRevisión cruzada de consistencia completada entre hn-diseno-desarrollo.php, hn-ingenieros.php y hn-ing-construccion.php contra publicación web y fuentes locales en _server_upload. También se sincronizó memory.md. Se confirma servidor público adicional www.sistema-medico.com.Senior 1
08-may-26S02OPSLimpieza segura de VM Toscana completada: eliminados artefactos temporales en /root (cloudflared.deb, archivo accidental 200) y cachés Gradle de compilación. /root bajó de ~532 MB a 692 KB. Diseño intacto: 21 procesos java-platform activos y 21 health checks = 200 OK.Senior 1
08-may-26S02QABitácora §11.2 reescrita con datos reales de la VM. Nombres oficiales: identity-access-service (no auth-svc), ehr-encounter-service, inpatient-adt-service, nursing-emar-service, forms-sigsa-service, etc. Total: 21 servicios.Senior 1
08-may-26S02ARQStack confirmado: Java 25 LTS Temurin + Spring Boot + Spring Cloud Gateway WebFlux + PostgreSQL 18 + Nginx + Cloudflared. Sin Docker/K8s en MVP — JARs nativos. Virtual threads habilitados.Toscana · Ingeniería
08-may-26S02OPSHallazgo Sev3: las 21 BD están creadas pero vacías (0 tablas) · Flyway aún no ha ejecutado migraciones en producción. Plan: aplicar 09-may-26.Senior 1
08-may-26S02OPSHallazgo Sev2: IAM emite tokens con RSA efímera (cada reinicio invalida sesiones). Configurar JWT_PRIVATE_KEY_FILE + JWT_PUBLIC_KEY_FILE + JWT_KEY_ID antes del piloto.Senior 1
08-may-26S02OPSHallazgo Sev3: los 21 JARs corren bajo user@0.service sin units systemd dedicados. Reinicio = caída total no recuperable. Plan: 21 units hospital-<svc>.service.Toscana · Ingeniería
08-may-26S02FRONTPack dev-up.ps1 + SIH-HNSM-README.md documentado. Frontend SPA hospital-web pendiente publicar a /var/www/html.Senior 1
07-may-26S01ARQ14 ADRs firmados (ADR-01 a ADR-14) en formato MADR.Senior 1 (Giordano) + Toscana · Ingeniería
07-may-26S01OPSWhatsApp a Toscana · Ingeniería (VM Toscana) y Erick (HNSM) solicitando acceso.Senior 1
07-may-26S01DOCBotón 11 publicado: bitácora viva del sistema.Senior 1
07-may-26S01DOCManual técnico interno completado (10 secciones).Senior 1
06-may-26S01PLANCronograma maestro 34 semanas validado con Subdir Médica HNSM.Senior 1 (Giordano) + Toscana · Ingeniería + HNSM
05-may-26S01DEPLOYidentity-access-service (8086) + reception-admission-service (8082) deployados. 20/21 y 21/21 UP.Toscana · Ingeniería
05-may-26S01EQUIPOEquipo Toscana confirmado: Senior 1 (Giordano) + Toscana · Ingeniería + 2 Junior + DevOps/QA compartidos.Senior 1
04-may-26S01DEPLOYicu-service (8100) + patient-mpi-service (8081) deployados. 18/21 y 19/21 UP.Toscana · Ingeniería
04-may-26S01KICKOFFInicio formal del proyecto. Acta de gobernanza HNSM/MSPAS firmada.Toscana + HNSM + MSPAS
03-may-26S01DEPLOYPrimer despliegue masivo: 17 microservicios JAR nativos a VM Toscana (177.7.57.79) en puertos 8080, 8083–8085, 8087–8100. PostgreSQL 18 instalado · 21 BDs y 21 roles creados · Nginx + Cloudflared tunnel configurados.Toscana · Ingeniería

11.7 Hallazgos e incidentes

FechaSevDescripciónResoluciónLección
08-may-26 Sev2 cerrado IAM emitía JWT firmados con RSA efímera generada en cada arranque. Reinicio invalidaba todos los tokens y sesiones. Resuelto 08-may: claves PEM persistentes en /etc/sih/jwt/{private,public}.pem generadas por install-systemd.sh. Unit hospital-identity-access-service.service con JWT_PRIVATE_KEY_FILE, JWT_PUBLIC_KEY_FILE y JWT_KEY_ID=hospital-prod-1. Verificado 09-may: JWKS público expone el kid esperado. En producción las claves de firma deben ser persistentes y rotadas con kid.
08-may-26 Sev3 cerrado 21 BD PostgreSQL vacías y sin evidencia Flyway. Servicios arrancaban pero la trazabilidad de migraciones no existía. Resuelto 08–09-may: tablas de negocio creadas con los V1__init.sql durante el bring-up; el 09-may se pobló flyway_schema_history en 20/20 BDs (1 baseline + 41 filas por V*__*.sql con checksum CRC32 zlib). Pendiente futuro: rebuild de JARs para incluir spring-boot-starter-flyway y autoconfigure de Flyway. Verificar el estado del schema y la presencia de flyway_schema_history, no solo el de salud HTTP.
08-may-26 Sev3 cerrado 21 procesos Java bajo user@0.service sin units systemd dedicadas. Reinicio = caída sin recuperación automática. Resuelto 08-may: 21 units hospital-<svc>.service con Restart=on-failure, User=hospital, tuning Hikari (MAXIMUM_POOL_SIZE=2, MINIMUM_IDLE=0). Verificado 09-may: active=21 failed=0. Procesos críticos deben tener supervisor (systemd o equivalente).
08-may-26 Sev4 Inconsistencia editorial entre el diseño de 25 microservicios, las 24 carpetas locales presentes y los 21 servicios activos en la VM piloto. Bitácora reescrita con inventario verificado por SSH y regla editorial: 25 diseñados · 21 activos en VM piloto. El diseño se documenta como 25. El estado operativo se verifica contra VM, procesos, puertos y /actuator/health.
Severidad: Sev1 = caída total · Sev2 = degradación significativa · Sev3 = error contenido · Sev4 = cosmético.

11.8 Próximos 7 días

FechaTareaResponsableEstado
09-may-26Evidencia Flyway 20/20 · flyway_schema_history poblado en cada schema (1 baseline + 41 filas migration con CRC32 zlib)Senior 1 (Copilot)cerrado
10-may-26~~Generar par RSA persistente para IAM~~ (cerrado 08-may en /etc/sih/jwt/*.pem con JWT_KEY_ID=hospital-prod-1)Senior 1cerrado
11-may-26~~21 units hospital-<svc>.service~~ (cerrado 08-may, verificado 09-may: active=21 failed=0)Senior 1cerrado
12-may-26~~HSTS + rate-limit en api-gateway~~ (cerrado 08-may vía HOSPITAL_GATEWAY_HSTS=true + HOSPITAL_GATEWAY_RATE_LIMIT_ENABLED=true)Senior 1cerrado
14-may-26Rebuild de los 20 JARs incluyendo spring-boot-starter-flyway (autoconfigure ausente hoy) · redeploy con Flyway autónomoToscana · Ingenieríapendiente
15-may-26Publicar §11.2.2 (CI/CD GitHub Actions + ambientes + estrategia despliegue)Senior 1 (Giordano) + Toscana · Ingenieríapendiente
15-may-26Pruebas de carga formales sobre HSTS + rate-limit del gateway (smoke + carga sostenida)Toscana · Ingenieríapendiente
16-may-26Activar OpenTelemetry collector (existe deploy/docker-compose.otel.yml pero no corre)Toscana · Ingenieríapendiente
18-may-26Cargar dataset sintético (1000 pacientes + 5000 episodios)Junior 1 + Junior 2pendiente
Cómo se mantiene esta página viva: al cierre de cada sesión se actualizan 11.1 (semáforo), 11.2 (estados verificados por SSH), 11.4 (deploys), 11.6 (entrada nueva), 11.7 (incidentes resueltos) y 11.8 (próximos 7 días). Tiempo objetivo: < 10 min por sesión.
← Volver a d. Ingenieros y Programadores 🏥 Inicio del Sistema Médico 🏠 Inicio Toscana