# HL7 v2 y FHIR para paneles clínicos

> De un mensaje HL7 v2 ORU^R01 de laboratorio a un mosaico del panel: Observaciones FHIR con rangos y banderas, webhooks firmados, sin duplicados — y por qué esto no es monitorización en la cabecera de la cama.

Source: https://developers.anpheros.com/es/guides/clinical-dashboard-hl7-fhir

**Un panel clínico necesita resultados como datos estructurados y codificados en el momento en que se informan — prueba, valor, unidad, rango de referencia y bandera — no PDFs que tenga que leer.** Los laboratorios todavía envían la mayoría de los resultados como mensajes HL7 v2 ORU^R01, mientras que los paneles son más fáciles de construir sobre Observaciones FHIR R4. Anpheros se sitúa entre ambos: un sistema de laboratorio publica el mensaje HL7 v2 (o un informe CSV o JSON) a través de HTTPS, cada resultado se convierte en una Observación FHIR con su código (LOINC cuando el laboratorio lo envía), valor y rango de referencia, y un webhook firmado informa a su panel de que han llegado nuevos resultados.

<!-- visual:dashboard-pipeline -->

## Lo que recibe el panel de control

Cada segmento OBX del mensaje se convierte en una Observación de laboratorio:

| Campo OBX de HL7 v2 | FHIR R4 Observation | En el panel de control |
|---|---|---|
| OBX-3 test code | `code` (LOINC cuando el laboratorio lo envía; un código local se mantiene como el código del laboratorio) | Nombre de la prueba; LOINC lo hace comparable entre laboratorios |
| OBX-5 value, OBX-6 unit | `valueQuantity` (UCUM unit) | El número y su unidad |
| OBX-7 reference range | `referenceRange` | La banda normal |
| OBX-8 abnormal flag | `interpretation` (H, L, …) | La bandera roja o azul |
| OBX-14 time | `effectiveDateTime` | Cuándo se tomó la muestra |

<!-- visual:dashboard-mock -->

## Importar un mensaje y reaccionar a él

Envía el mensaje para un paciente que hayas creado (o para uno para el que tengas una concesión):

```ts
import { readFile } from 'node:fs/promises';
import { Anpheros, apiKey } from '@anpheros/sdk';

const anpheros = new Anpheros({ auth: apiKey(process.env.ANPHEROS_KEY!) });   // a sandbox key, sk_test_…
const message = await readFile('oru_r01.hl7', 'utf8');
const result = await anpheros.labs.importHl7(patientId, message, { sourceSystem: 'lab-lis' });
console.log(result);   // created, skipped and unmapped counts
```

Luego, permite que la plataforma llame a tu backend del dashboard en lugar de consultarlo (polling):

```ts
await anpheros.webhooks.create('https://dashboard.example.org/anpheros/hook', { events: ['resource.created'] });
```

Cada entrega está firmada (verifica con `verifyWebhookSignature` del SDK) y se reintenta si tu servidor no responde. El evento transporta el tipo de recurso, el id y el paciente; lee las nuevas Observaciones y actualiza el tile. Los informes reenviados se omiten, por lo que un laboratorio que retransmite ante un timeout no crea filas duplicadas en la pantalla.

## Elección de HL7 v2 o FHIR para cada enlace

| Enlace | Uso | Por qué |
|---|---|---|
| Laboratorio → capa de datos | HL7 v2 ORU^R01 (o CSV/JSON) | Lo que los sistemas de laboratorio ya emiten; ningún cambio de su lado |
| Capa de datos → panel | FHIR R4 Observation + webhooks | JSON codificado y versionado que su front end puede leer directamente |
| Panel → otras aplicaciones | FHIR R4, bajo el consentimiento del paciente | Un estándar para cada consumidor |

## Lo que esto no es

- **No es una alimentación de monitor de cabecera.** Anpheros acepta informes de laboratorio a través de HTTPS. No recibe formas de onda continuas ni flujos de dispositivos de monitores de cuidados intensivos, y no es un sistema de alarmas: las alertas que afectan la atención requieren un sistema clínico certificado.
- **No es un motor de interfaz MLLP.** Los mensajes llegan a través de HTTPS; si su laboratorio solo habla MLLP sobre TCP, un motor de interfaz en el frente los reenvía.
- **Un tipo de mensaje HL7 v2.** Se aceptan resultados de laboratorio ORU^R01; no se aceptan pedidos (ORM/OML) ni mensajes ADT.

## Preguntas frecuentes

### ¿Puede un panel leer resultados de laboratorio HL7 v2 directamente?
Puede hacerlo, pero cada panel necesita entonces su propio analizador HL7 v2, mapeo de códigos y deduplicación. Convertir una vez a Observaciones FHIR R4 con códigos LOINC proporciona a cada pantalla los mismos datos limpios.

### ¿Qué tan rápido llegan los resultados importados al panel?
La solicitud de importación se completa cuando las Observaciones se almacenan, y se pone en cola una `resource.created` webhook para cada una de ellas al mismo tiempo. Se reintentará la entrega si su punto final no está disponible.

### ¿Cómo se marcan los resultados anormales?
OBX-8 se convierte en el `interpretation` de la Observación (por ejemplo, H o L) y OBX-7 en su `referenceRange`, de modo que el panel pueda mostrar tanto la marca como el rango normal.

### ¿Anpheros soporta monitoreo de UCI?
No. Almacena resultados de laboratorio y clínicos y notifica a sus sistemas sobre nuevos datos; el monitoreo continuo junto a la cama y las alarmas clínicas permanecen con dispositivos médicos certificados.

<!-- visual:cta-dashboard -->

## Relacionado

- [API de resultados de laboratorio: HL7 v2, FHIR y LOINC](https://developers.anpheros.com/es/guides/lab-results-api)
- [Cómo importar resultados de laboratorio en un registro FHIR](https://developers.anpheros.com/es/guides/import-lab-results-fhir)
- [Conector de laboratorio](https://developers.anpheros.com/es/guides/lab-connector): la referencia del endpoint
- [FHIR vs HL7 v2: diferencias prácticas](https://developers.anpheros.com/es/guides/fhir-vs-hl7-v2)
- [Monitorización remota de pacientes con FHIR](https://developers.anpheros.com/es/guides/remote-patient-monitoring-fhir)
- [Webhooks](https://developers.anpheros.com/es/guides/webhooks)
