Ir al contenido

Casos de uso y workflows

Esta página recorre los diez flujos que estructuran la operación diaria de un laboratorio sobre EMA Lab. La perspectiva es funcional —qué pasa, en qué orden y por qué importa— y deja para el manual de usuario los pasos concretos por rol.

El flujo de orden ambulatoria es el caso base, el que ocurre cientos de veces al día en un laboratorio activo. Tiene la particularidad de que la orden no nace en el laboratorio: viene desde el EHR de la clínica solicitante a través del conector FHIR Subscription o un mensaje HL7v2. EMA Lab la recibe, valida que el paciente y los tests existan en el catálogo, y produce un ServiceRequest por cada test solicitado —no agrupados en perfiles. Esa decisión, registrada como ADR-003, es deliberada: la facturación, el ruteo y la validación son granulares por test, así que tenerlos como recursos separados desde el inicio simplifica todo el resto del ciclo.

No

Orden FHIR llega

desde EMR cliente

Conector FHIR Sub

/api/connectors/fhir/inbound

ServiceRequest creado

per test ADR-003

Generar etiquetas tubo

Code 128B + Luhn

Toma de muestra

flebotomista o cliente

Transport route

+ traza temperatura

Check-in lote

recepción central

Cola técnica

por sección

Análisis

analizador o manual

Result ingresado

ManualEntry inline o Hub

Stage 1 técnica

tech_section_auth

Stage 2 EMI

evaluator engine

Stage 3 autoverify

conditions per-test

¿Cumple

condiciones?

DR final + QR

verify code

Stage 4 director

firma manual

Outbound HL7v2 ORU

+ retry queue

Reporte en EMR cliente

+ portal paciente

Una vez creada la orden, el sistema imprime las etiquetas Code 128B con dígito verificador Luhn que acompañarán a cada tubo durante todo el trayecto físico. La toma puede hacerla un flebotomista del laboratorio en sede, o llegar pre-tomada desde el cliente externo. El transporte queda registrado y, cuando la integración con un tracker lo permite, se consigna también la temperatura de la cadena de frío. La recepción central hace el check-in por lote y el motor de ruteo distribuye cada test a la sección correspondiente.

Dentro de la sección, el TM ingresa el resultado —manualmente desde la UI o automáticamente vía Hub on-premise conectado al analizador— y el sistema corre las cuatro etapas de validación. La etapa técnica verifica la autorización del TM para esa sección; la etapa EMI corre las reglas configuradas (rangos de referencia, delta check, panic value); la etapa de autoverify aplica las condiciones específicas del test, que pueden incluir edad, sexo o histórico del paciente; la etapa final, si las anteriores no liberaron el resultado, requiere firma del director técnico. El reporte firmado lleva un código QR de verificación pública sin PII y se envía al EHR del solicitante vía HL7v2 ORU outbound o FHIR Subscription, con cola de retry si falla.

Las órdenes con prioridad stat siguen el mismo recorrido pero con señales visuales que las priorizan en cada cola. El countdown TAT en los worklists usa código de color (verde, amarillo, rojo) según la distancia al SLA, y el sistema marca la cabecera del tubo con indicación visible para que el operador físico no la confunda con una orden estándar.

No

Order priority=stat

Banner urgencia

en worklist

Tubo etiquetado

color rojo

Check-in con priority

going to top of queue

Análisis priorizado

Stages 1-3 igual

con TAT semáforo

¿TAT

en verde?

DR final

Alert critical TAT

+ NC GP41 si >SLA

Critical value notification

Communication ack MD

Reportado + ack

Si el TAT supera el SLA configurado, el sistema genera automáticamente una no-conformidad CLSI GP41 con razón “TAT excedido”. Esa NC queda disponible para investigación posterior y aparece en los reportes operacionales mensuales que el director revisa. La notificación de valor crítico, cuando corresponde, dispara una Communication FHIR hacia el médico solicitante y queda registrada con el acuse de recibo.

El flujo de microbiología es el que más se aleja de un test químico estándar, porque opera con tiempos biológicos y no con tiempos de analizador. El cultivo atraviesa siete estados a lo largo de uno o varios días, y cada transición requiere acción explícita del TM —el sistema nunca asume estados por su cuenta porque la lectura de placa es interpretativa.

DirectorAnalizador / MALDIAidboxTM microRecepciónDirectorAnalizador / MALDIAidboxTM microRecepción24-72h incubaciónServiceRequest culture1Specimen + label tubo2stage=incubation (siembra placa)3stage=growth_detected (+ Gram tinción)4muestra para identificación5MALDI-TOF Bruker output6stage=organism_identified+ Observation organism SNOMED7stage=susceptibility_pendingpanel cargado8panel antibiograma9SIR results + MIC/zone10stage=susceptibility_completeObservation panel + abx components11enviar a firma12DR partial → preliminary → final13ema-signature ext + QR14DR finalizado15

La identificación del organismo puede hacerse por bioquímica manual o por MALDI-TOF. Cuando el laboratorio dispone de un equipo Bruker, EMA Lab importa el archivo de salida y clasifica el resultado por confidence tier: con score igual o mayor a 2.3 considera la identificación de alta confianza y la ingresa automáticamente; entre 2.0 y 2.3 acepta la identificación a nivel de género; entre 1.7 y 2.0 la marca como probable y enciende un banner amber que el director debe revisar antes de firmar; bajo 1.7 rechaza la importación. El antibiograma se carga sobre paneles configurados, con resultados SIR y los valores cuantitativos (MIC y zona de inhibición) como componentes del recurso Observation.

Dos casos especiales merecen mención. El primero es el cultivo negativo: el sistema nunca lo marca automáticamente, ni siquiera cuando se cumple el timeout configurado. La decisión, registrada como ADR-021, obedece a que un negativo prematuro es clínicamente más peligroso que un timeout extra. Los timeouts por tipo de muestra son 48 horas para cultivo estándar, 14 días para hongos y 42 días para micobacterias. El segundo caso es el hemocultivo positivo: cuando el TM marca growth_detected con flag de hemocultivo, el sistema crea automáticamente una task FHIR de tipo critical-value-notification (decisión L051) que dispara alerta inmediata al médico solicitante.

El reporte trimestral de stewardship se diferencia del resto de los flujos en que es agregado, no individual. El cron 0 3 1 1,4,7,10 * dispara el primer día de cada trimestre el motor de antibiograma institucional, que recorre los cultivos del periodo y aplica las reglas de la guía CLSI M39 para producir un reporte representativo.

ok

Cron Q trimestral

0 3 1 1,4,7,10

stewardship engine

CLSI M39

Pull culture results

last 90 days

Agregar SIR por organism × abx

Filter ≥30 isolates

per org/abx CLSI rule

Calc % susceptibility

stewardship_reports

status=draft

Admin dry-run

L072 review preview

Multi-signer

director + microbiólogo

Dual-write

Supabase + DetectedIssue FHIR

XLSX writer

+ R2 + DocumentReference

stewardship_reports

status=fully_signed → emitted

Reporte disponible

UI + descarga + PDF

La regla CLSI M39 que más visiblemente filtra el resultado es el mínimo de treinta aislamientos por combinación organismo-antibiótico: si un par no cumple ese umbral en el trimestre, se excluye del reporte. Una vez agregados los datos, el reporte queda en estado draft y queda disponible una función de dry-run (decisión L072) que permite al admin revisar el contenido sin comprometer la emisión. Si las cifras hacen sentido, el reporte pasa a ready_for_signing y los signers configurados —típicamente el director técnico y el microbiólogo— firman individualmente. Cuando todas las firmas están presentes, el sistema escribe en paralelo a Supabase (operacional) y genera un DetectedIssue FHIR (canónico), produce el XLSX, lo sube a R2 y crea el DocumentReference correspondiente.

Las plataformas moleculares (PCR, NGS, secuenciación) suelen producir resultados en formatos propietarios que cambian de un vendor a otro y de un kit a otro. EMA Lab resuelve la importación con un parser registry extensible: cada formato vivo en producción tiene un parser en src/lib/molecular/parsers/<vendor>.ts, y el sistema selecciona automáticamente el adecuado por las cabeceras del archivo recibido.

No

Archivo CSV/JSON

vendor-specific

Parser registry

match por header

¿Target crítico

configurado?

Flag pending review

+ banner amber

Auto-import

Director valida

antes de Stage 3

Stages 1-4 normal

DR molecular firmado

El admin del laboratorio puede configurar targets críticos: combos de gen y resultado que merecen revisión obligatoria del director antes de pasar a la etapa autoverify (BRCA1 positivo, KRAS mutado, BCR-ABL detectable). Cuando una importación contiene un target crítico, el sistema marca el caso como pending review y enciende un banner amber. Los demás resultados pasan a autoverify normal.

El control de calidad interno es la pieza que un laboratorio bien operado ejecuta antes de empezar el turno y revisa cuando algo se ve sospechoso. EMA Lab implementa el conjunto de reglas Westgard clásico, con la particularidad de que la regla de tendencia 7-T se aplica con monotonía estricta —siete puntos consecutivos al mismo lado del media sin valores repetidos exactos— y por defecto produce un warning, no un fail bloqueante. La decisión, registrada como L024, busca evitar falsos positivos por estabilidad operacional sin perder la señal cuando el equipo realmente está derivando.

No

Cargar QC lot

Configurar mean/SD

qc_lot_targets

Correr QC point

en cada turno

Westgard rules engine

¿Pasa

1-2s · 1-3s · 2-2s · R-4s · 4-1s · 10-X · 7-T?

QC ok

libera batch

QC fail

Acción

Repetir QC

otro tubo

Crear no-conformidad

CLSI GP41

Bloquear batch

requires director

Resultados liberados

al worklist

Cuando una corrida QC falla, el TM puede repetir con otro tubo del mismo lote, abrir una no-conformidad GP41 si la falla es persistente, o bloquear el batch a la espera de revisión del director.

Algunos laboratorios operan analizadores físicos que no tienen acceso directo a internet, ya sea por política corporativa o por limitaciones de los protocolos legacy ASTM/HL7v2 que muchos equipos hablan nativamente. Para esos casos EMA Lab provee un Hub Docker que se instala en la red local del site y actúa de intermediario entre el analizador y el cloud.

AidboxSupabaseEMA Lab WorkerHub DockerAnalyzerAidboxSupabaseEMA Lab WorkerHub DockerAnalyzerGET /api/hub/worklistshub-token1SELECT worklist_itemsWHERE site_id2lista órdenes pendientes3TCP/MLLP — orden(ASTM o HL7v2)4result5POST /api/hub/results+ inventory consumption6INSERT Observation+ trigger autoConsume7PATCH ServiceRequeststatus=completed8ok9200 ok10POST /api/hub/heartbeateach 60s11

El Hub se autentica contra el cloud con un token rotable y soporta cuatro modos de conexión —polling, SSE-keepalive, hybrid y websocket— que permiten operar bajo prácticamente cualquier configuración de firewall corporativo. Cuando el analizador entrega un resultado, el Hub lo reporta al cloud, que registra la Observation, dispara el consumo de reactivos correspondiente cuando está habilitado y actualiza la ServiceRequest a estado completado.

La notificación de valor crítico cumple un requerimiento regulatorio explícito de las leyes de derechos del paciente (en Chile, la Ley 20.584; en otros países, sus equivalentes locales): cuando un resultado cae dentro de un rango definido como crítico, el laboratorio debe alertar oportunamente al médico solicitante y dejar registro del aviso. EMA Lab modela esto con un Communication FHIR de categoría alert y un mecanismo de escalation chain con timeout.

No

Sí, antes de 30 min

No, pasaron 30 min

Result ingresado

¿Valor crítico

per-test?

skip

Insert critical_value_log

source=auto/manual

POST Communication

category=alert

recipient=requester

Notify MD

SMS/email/in-app

¿Ack

del MD?

critical_value_log.acked_at

Escalation chain

director MD

Audit log compliance

El sistema espera el acuse de recibo del médico durante treinta minutos. Si el ack no llega, escala al director médico de la institución; si el director tampoco responde, sigue subiendo por la cadena configurada. Cada eslabón de la cadena queda registrado en critical_value_log con su timestamp, lo que permite auditar cumplimiento.

La emisión del documento fiscal no la hace EMA Lab directamente: se delega al worker emadte con una API key per-tenant. Esa separación permite que la lógica fiscal y la criptografía de los certificados digitales vivan en un servicio dedicado que se actualiza en su propio ciclo, sin acoplar al producto clínico. En el plug-in chileno opera contra el SII; otros países conectarían con su organismo fiscal equivalente.

ok

fail

Orden completada

Compute price

price_lists × cliente

Insert invoice

+ invoice_lines

POST emadte/

X-API-Key per-tenant

ema-dte → SII

Callback /dte-callback

idempotente per invoice_id

Update invoice

status=issued

Pending DTE queue

Retry async

Cuando una orden se completa, el motor de pricing calcula el monto según la lista de precios del cliente, se inserta el Invoice con sus líneas y se invoca a emadte. El worker fiscal contacta al organismo del país, obtiene el folio asignado y hace callback al lab con el resultado; ese callback es idempotente por invoice_id, por lo que reintentos no producen duplicados. Si el organismo rechaza, el invoice queda en cola de pendientes y se reintenta asincrónicamente.

Cuando algo sale mal —una muestra mal tomada, un error analítico, un TAT excedido— el laboratorio levanta una no-conformidad. EMA Lab modela las dieciséis razones tipificadas por la guía CLSI GP41 y las expone como DetectedIssue FHIR (decisión ADR-008) para que el dato sea queryable cross-resource y agregable en reportes regulatorios.

TM micro

Recepción

Equipo

TAT excedido

Detección

¿Origen?

NC tipo analytical

NC tipo pre-analytical

NC tipo equipment

NC tipo SLA

INSERT nonconformities

16 reasons GP41 ADR-008

POST DetectedIssue FHIR

Acción

Reject muestra

Repetir test

Notify cliente externo

Open investigation

director review

Close NC

+ corrective action

La fuente de la NC determina su categoría (pre-analytical, analytical, equipment o SLA) y el flujo de acción posterior. Algunas NCs se resuelven con repetir el test, otras requieren notificar al cliente externo, otras (especialmente las recurrentes) abren una investigación formal que el director cierra con acción correctiva documentada.

A lo largo de los diez workflows aparecen cinco principios de diseño comunes. El primero es el modelado per-test del ServiceRequest: facturación, ruteo y validación son granulares y necesitan recursos separados desde el inicio. El segundo es la validación obligatoria en cuatro etapas: incluso cuando un resultado pasa por autoverify, el sistema deja registro de las cuatro fases para que el audit sea completo y auditable.

El tercero es el principio de asincronía no bloqueante: la emisión DTE, el HL7v2 outbound, la escritura FHIR canonical y los correos no obstaculizan al equipo en tiempo real; si fallan, viven en una cola de retry y, eventualmente, en una dead-letter queue con alerta al admin. El cuarto es el audit log completo sobre toda mutación, con tenant, usuario, acción, recurso afectado y diff. El quinto es la separación entre canónico y operacional: para los datos clínicos (Observation, DiagnosticReport, Specimen) Aidbox es la fuente de verdad; para los datos operacionales (worklists, configuración QC, billing, inventario) lo es Supabase.