AnpherosAnpheros PlatformDevelopers

Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card

API de resultados de laboratorio: HL7 v2, FHIR y LOINC

Cómo viajan los resultados de laboratorio como datos HL7 v2 y FHIR R4, qué debe llevar un resultado y cómo recibir informes de laboratorio en un registro FHIR, con un ejemplo real.

Una API de resultados de laboratorio entrega los resultados de laboratorio como datos estructurados —código de prueba, valor, unidad, rango de referencia, estado y hora— en lugar de un PDF, para que el software pueda almacenarlos, compararlos, graficarlos y compartirlos. Hoy en día, esos datos viajan en tres formatos: mensajes HL7 v2 ORU^R01 (todavía la columna vertebral entre laboratorios y hospitales), recursos HL7 FHIR R4 Observation y DiagnosticReport (el formato de las APIs modernas), y exportaciones CSV, JSON o PDF específicas del laboratorio. Esta página explica cómo encajan las piezas, qué debe contener una buena API de resultados de laboratorio y cómo recibir datos de laboratorio en el registro FHIR de un paciente con Anpheros.

Quién intercambia resultados de laboratorio y en qué formato

De → a Formato habitual hoy Notas
Laboratorio → sistema hospitalario o clínico HL7 v2 ORU^R01 (en EE. UU. a menudo según la guía HL7 v2.5.1 Laboratory Results Interface) Los pedidos van en la otra dirección como mensajes ORM/OML
Laboratorio → agencia de salud pública Informes electrónicos de laboratorio HL7 v2, cada vez más FHIR Solo condiciones reportables
Sistema clínico → aplicación para pacientes FHIR R4 a través de una API de acceso para pacientes En EE. UU., los EHR certificados exponen los resultados de laboratorio como FHIR (US Core); en la UE, el Espacio Europeo de Datos Sanitarios enumera los resultados de laboratorio entre sus categorías de datos prioritarias
Laboratorio → paciente Informe en PDF, portal, a veces CSV El formato que la mayoría de los pacientes reciben realmente
Aplicación → modelo de IA Contexto estructurado construido a partir de Observations Necesita códigos y unidades para ser fiable

La dirección importa: un sistema de información de laboratorio (LIS) es la fuente de verdad para un resultado, y cada sistema posterior mantiene una copia. Lo que hace que las copias sean confiables es que cada una conserva el código, la unidad, el rango y el origen del valor.

Qué debe contener un resultado de laboratorio

Un resultado que solo dice "Glucosa 126" no se puede interpretar de forma segura. Un resultado completo tiene:

En FHIR R4 cada resultado es una Observation con category = laboratory, y el informe que los agrupa es un DiagnosticReport que lista las Observaciones en result. Ejemplos válidos de ambos, con los errores que los validadores reportan con mayor frecuencia, se encuentran en los ejemplos JSON de FHIR R4 — vea también el ejemplo de DiagnosticReport.

HL7 v2 y FHIR lado a lado

El mismo resultado de panel lipídico, como lo envían la mayoría de los laboratorios hoy en día y como debería almacenarlo una API:

OBX|1|NM|2093-3^Cholesterol^LN||212|mg/dL|<200|H|||F|||20261002074500
Campo HL7 v2 Significado Elemento Observation de FHIR R4
OBX-3 2093-3^Cholesterol^LN Prueba, codificada en LOINC code.coding (sistema http://loinc.org)
OBX-5 212, OBX-2 NM Valor numérico valueQuantity.value
OBX-6 mg/dL Unidad valueQuantity.unit
OBX-7 <200 Rango de referencia referenceRange.high
OBX-8 H Indicador de anormalidad interpretation
OBX-11 F Resultado final status = final
OBX-14 Hora de la observación effectiveDateTime

La conversión entre ambos es principalmente un mapeo de campos. Las partes difíciles están en otro lugar: laboratorios que envían sus propios códigos en lugar de LOINC, números escritos como texto ("6,4", "<5"), rangos en varias notaciones e informes que se envían nuevamente después de un tiempo de espera. Cómo normalizar datos médicos cubre esos aspectos en detalle.

Recepción de resultados de laboratorio en un registro FHIR con Anpheros

Anpheros almacena el registro de cada paciente como HL7 FHIR R4 y tiene un conector de laboratorio: una solicitud toma un informe completo como HL7 v2, CSV o JSON y devuelve Observaciones de laboratorio con códigos LOINC, rangos de referencia, interpretación y procedencia.

curl -s -X POST "https://platform.anpheros.com/v1/patients/$PID/labs/import" \
  -H "Authorization: Bearer $KEY" \
  -H "Content-Type: x-application/hl7-v2+er7" \
  -H "X-Anpheros-Source-System: springfield-lis" \
  --data-binary @lipid-panel.hl7

Para un panel lipídico de tres líneas (colesterol, HDL, triglicéridos), la respuesta, de una ejecución local de la plataforma, es:

{
  "created": 3, "skipped": 0, "unmapped": [], "warnings": [],
  "observations": [
    {"id": "26ed9219-…", "marker": "Cholesterol", "code": "2093-3", "system": "http://loinc.org",
     "value": 212.0, "unit": "mg/dL", "date": "2026-10-02T07:45:00Z"},
    {"id": "2633d1d4-…", "marker": "HDL cholesterol", "code": "2085-9", "system": "http://loinc.org",
     "value": 48.0, "unit": "mg/dL", "date": "2026-10-02T07:45:00Z"},
    {"id": "a02520bb-…", "marker": "Triglyceride", "code": "2571-8", "system": "http://loinc.org",
     "value": 165.0, "unit": "mg/dL", "date": "2026-10-02T07:45:00Z"}
  ]
}

Cada resultado almacenado es una Observación FHIR R4 estándar, legible por cualquier cliente FHIR:

{
  "resourceType": "Observation",
  "status": "final",
  "category": [{"coding": [{"system": "http://terminology.hl7.org/CodeSystem/observation-category", "code": "laboratory"}]}],
  "code": {"coding": [{"system": "http://loinc.org", "code": "2093-3",
                        "display": "Cholesterol [Mass/volume] in Serum or Plasma"}], "text": "Cholesterol"},
  "subject": {"reference": "Patient/4c3062d9-…"},
  "effectiveDateTime": "2026-10-02T07:45:00Z",
  "valueQuantity": {"value": 212.0, "unit": "mg/dL"},
  "interpretation": [{"coding": [{"system": "http://terminology.hl7.org/CodeSystem/v3-ObservationInterpretation", "code": "H"}]}],
  "referenceRange": [{"high": {"value": 200.0, "unit": "mg/dL"}}]
}

Enviar el mismo mensaje nuevamente no crea nada nuevo ("created": 0, "skipped": 3): cada fila obtiene un identificador estable del ID del informe, código, fecha y valor. Los marcadores que la plataforma no puede mapear a LOINC conservan el código del laboratorio y regresan en unmapped, para que pueda corregir el mapeo en la fuente.

Leer resultados de vuelta es una búsqueda FHIR estándar:

curl -s "https://platform.anpheros.com/fhir/R4/Observation?patient=$PID&category=laboratory&code=http://loinc.org|2093-3" \
  -H "Authorization: Bearer $KEY"

Otras formas de entrada y salida de los mismos datos:

El recorrido completo, con un informe CSV, un mensaje HL7 v2, marcadores no mapeados e informes reenviados en un paciente sintético, es el tutorial Cómo importar resultados de laboratorio en un registro FHIR.

Comprobar resultados antes de enviarlos

El validador FHIR R4 gratuito comprueba la estructura de una Observation y los conjuntos de valores requeridos, y con el perfil eu-lab también comprueba lo que un resultado de laboratorio debe contener: la categoría laboratory, un código LOINC, un sujeto, un estado final-type, una hora, un valor, una unidad UCUM y un rango de referencia. Las mismas comprobaciones se ejecutan en la plataforma a través de POST /fhir/R4/Observation/$validate?profile=eu-lab.

Elección de una API de resultados de laboratorio: una lista de verificación

Lo que Anpheros no hace

Anpheros no es un sistema de información de laboratorio ni está conectado a redes de laboratorios comerciales: el laboratorio, la clínica o la aplicación del paciente envía el informe. No enruta pedidos de laboratorio, no lee informes en PDF a través de esta API (la aplicación Anpheros Daily extrae resultados de fotos y PDF en el lado del paciente) y no interpreta los resultados clínicamente. Las unidades se almacenan tal como las envía el laboratorio; su conversión a códigos UCUM corresponde al remitente, como se describe en Cómo normalizar datos médicos.

Preguntas frecuentes

¿Qué es una API de resultados de laboratorio?

Una interfaz que permite al software enviar o recibir resultados de laboratorio como datos estructurados —una prueba codificada, un valor con una unidad, un rango de referencia, un estado y una hora— en lugar de como un documento. Las API modernas de resultados de laboratorio utilizan los recursos Observation y DiagnosticReport de HL7 FHIR R4; la mayoría de los laboratorios todavía emiten mensajes HL7 v2 ORU^R01.

¿Qué sistema de codificación identifica las pruebas de laboratorio?

LOINC. Cada código LOINC nombra el analito, la muestra y, a menudo, el método, por lo que 2345-7 (glucosa en suero o plasma) y 2339-0 (glucosa en sangre total) son resultados diferentes. Las unidades se expresan mejor en UCUM.

¿Cuál es la diferencia entre un Observation y un DiagnosticReport?

Un Observation es un resultado, como colesterol 212 mg/dL. Un DiagnosticReport es el informe en su conjunto —el panel que se solicitó, quién lo emitió y cuándo— y enumera sus Observations en result.

¿Puedo importar mensajes HL7 v2 de laboratorio a un servidor FHIR?

Sí. Cada segmento OBX se mapea a una Observation (OBX-3 a code, OBX-5 y OBX-6 a valueQuantity, OBX-7 a referenceRange, OBX-8 a interpretation). El conector de laboratorio Anpheros hace esto en una sola solicitud y mantiene el ID del informe del laboratorio en Provenance.

¿Cómo evito duplicar resultados de laboratorio cuando se reenvía un informe?

Asigne a cada resultado un identificador estable derivado del informe, la prueba, la hora y el valor, y omita las filas cuyo identificador ya exista. El conector de laboratorio Anpheros hace esto automáticamente e informa el recuento como skipped.

Relacionado

Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card

Product updates by email

New features, guides and the end of the beta. One email a month at most.

Send me occasional Anpheros Platform updates by email (new features, API changes, guides). I'll confirm by email and can unsubscribe in one click from any email. Privacy