🏥

Healthcare Eval Harness — MediCultiva EMR

v2.4.1 · commit a3f7c92 · 2026-06-18T09:14:37Z · CI run #247

Veredicto final
SAFE TO DEPLOY
Branch: release/v2.4.1
Runner: ubuntu-latest / Node 20.14
Framework: Jest 29.7
Duración total: 4m 23s
Tests ejecutados: 98 / 98
Resumen por categoría
CDSS Accuracy
42
de 42 tests · 100%
CRITICAL
PHI Exposure
10
de 10 tests · 100%
CRITICAL
Data Integrity
14
de 14 tests · 100%
CRITICAL
Clinical Workflow
23
de 24 tests · 95.8%
HIGH
Integration
8
de 8 tests · 100%
HIGH
Tabla de evaluación detallada
Categoría Tipo de puerta Umbral Tests Tasa de aprobado Estado
🧠
CDSS Accuracy
Interacciones, dosis, escalas clínicas
CRITICAL 100% 42 / 42
100%
✓ PASS
🔒
PHI Exposure
Fugas PHI, aislamiento multi-tenant
CRITICAL 100% 10 / 10
100%
✓ PASS
🗄️
Data Integrity
Locks, auditoría, cascade delete
CRITICAL 100% 14 / 14
100%
✓ PASS
🏥
Clinical Workflow
Ciclo episodio, prescripciones, alertas
HIGH 95%+ 23 / 1 fail / 24
95.8%
⚠ WARN
🔗
Integration Compliance
HL7 v2.5, FHIR R4, lab results
HIGH 95%+ 8 / 8
100%
✓ PASS
Fallos y advertencias
WARNING · Clinical Workflow prescription-pdf.test.ts › debería generar PDF con firma electrónica del médico
tests/clinical/prescription-pdf.test.ts:87
El test de generación de PDF con firma electrónica ha fallado en el entorno CI por timeout (3000ms). El módulo @medicultiva/pdf-signer no recibe respuesta del mock del servicio HSM en CI. No afecta a la seguridad del paciente — solo a la generación de documentación administrativa.
● prescription-pdf › debería generar PDF con firma electrónica del médico Timeout - Async callback was not invoked within the 3000ms timeout at tests/clinical/prescription-pdf.test.ts:87:5 → Causa probable: mock HSM no inicializado en entorno CI → Funciona correctamente en entorno local (verificado 2026-06-17) → Ticket: MC-1847 · Asignado a: María Torres · ETA: 2026-06-20
Cobertura de código (módulo CDSS)
Statements
92%
objetivo: ≥80%
Branches
88%
objetivo: ≥80%
Functions
93%
objetivo: ≥80%
Lines
92%
objetivo: ≥80%
Línea de tiempo de ejecución
🧠 CDSS Accuracy — CRITICAL GATE
09:14:37 → 09:16:42 · 2m 05s
42/42 tests aprobados · Cobertura 92% · Nuevas reglas warfarina+AINEs y metformina+contraste IV verificadas sin regresión en las 38 reglas existentes.
🔒 PHI Exposure — CRITICAL GATE
09:16:43 → 09:17:11 · 28s
10/10 tests aprobados · Sin fugas PHI en respuestas de error, sin datos en URL params, aislamiento multi-clínica verificado, service_role key ausente del bundle frontend.
🗄️ Data Integrity — CRITICAL GATE
09:17:12 → 09:17:55 · 43s
14/14 tests aprobados · Bug MC-1841 de cascade delete en episodios cerrados correctamente reparado — test específico de regresión añadido y aprobado.
🏥 Clinical Workflow — HIGH GATE
09:17:56 → 09:18:47 · 51s
23/24 tests aprobados · 95.8% ≥ 95% umbral — PASA con advertencia · 1 fallo no crítico (PDF firma HSM timeout) documentado en ticket MC-1847.
🔗 Integration Compliance — HIGH GATE
09:18:48 → 09:19:00 · 12s
8/8 tests aprobados · Nuevo endpoint FHIR R4 valida correctamente recursos Patient, Encounter y MedicationRequest · HL7 v2.5 ADT^A01 sin regresión.
Configuración CI/CD aplicada
📄 .github/workflows/healthcare-safety-gate.yml — fragmento activo
# Healthcare Safety Gate — MediCultiva EMR name: Healthcare Safety Gate on: [push, pull_request] jobs: safety-gate: runs-on: ubuntu-latest steps: # ─── CRITICAL gates — bail en primer fallo ─────────────────── - name: CDSS Accuracy [CRITICAL] run: npx jest --testPathPattern='tests/cdss' --bail --ci --coverage \ --coverageThreshold='{"global":{"branches":80,"functions":80,"lines":80}}' - name: PHI Exposure Check [CRITICAL] run: npx jest --testPathPattern='tests/security/phi' --bail --ci - name: Data Integrity [CRITICAL] run: npx jest --testPathPattern='tests/data-integrity' --bail --ci # ─── HIGH gates — 95%+ con cálculo dinámico ────────────────── - name: Clinical Workflows [HIGH] run: | TMP=$(mktemp) npx jest --testPathPattern='tests/clinical' --ci --json --outputFile="$TMP" || true RATE=$(jq '(.numPassedTests // 0) * 100 / (.numTotalTests // 1)' "$TMP") echo "Clinical pass rate: ${RATE}%" if (( $(echo "$RATE < 95" | bc -l) )); then exit 1; fi - name: Integration Compliance [HIGH] run: | TMP=$(mktemp) npx jest --testPathPattern='tests/integration' --ci --json --outputFile="$TMP" || true RATE=$(jq '(.numPassedTests // 0) * 100 / (.numTotalTests // 1)' "$TMP") echo "Integration pass rate: ${RATE}%" if (( $(echo "$RATE < 95" | bc -l) )); then exit 1; fi