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:
- Un código estándar. LOINC identifica el analito, la muestra y el método:
2345-7es glucosa en suero o plasma,2339-0es glucosa en sangre total. El código propio del laboratorio puede viajar junto a él. - Un valor con una unidad. Idealmente una unidad UCUM (
mg/dL,mmol/L,10*3/uL), para que los valores de dos laboratorios puedan convertirse y compararse. - El rango de referencia que utilizó el laboratorio, y un indicador de interpretación (H, L, N…) cuando el laboratorio proporciona uno.
- Estado: preliminar, final, corregido o enmendado. Las correcciones ocurren; una API debe permitirle ver la nueva versión sin perder la antigua.
- Fechas: cuándo se recolectó la muestra (
effectiveDateTime) y cuándo se publicó el resultado (issued). - Origen: qué laboratorio lo produjo y a qué informe u orden pertenece.
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:
- FHIR directamente:
POST /fhir/R4/Observation, o un Bundle de transacción con elDiagnosticReporty sus Observaciones juntas. - Eventos: un webhook
resource.createdpor Observación, para que una clínica o una aplicación pueda reaccionar cuando lleguen los resultados. - Para personas e IA: el paciente ve los resultados en su aplicación; las aplicaciones a las que consienten leerlos;
POST /v1/contextproporciona a un modelo de IA un resumen etiquetado por fuente que incluye valores de laboratorio recientes. - Procedencia: cada resultado importado registra
author_type = import, el sistema de origen y el ID del informe (procedencia de datos médicos).
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
- ¿Almacena los resultados como Observaciones FHIR R4 con códigos LOINC, o como filas en su propio esquema?
- ¿Puede aceptar los formatos que envían realmente los laboratorios (HL7 v2 en la mayoría de los hospitales, CSV o PDF de laboratorios más pequeños)?
- ¿Qué sucede con un marcador que no puede mapear: se rechaza, se descarta o se conserva con el código del laboratorio?
- ¿Son seguras las reintentos, o un informe reenviado crea duplicados?
- ¿Se versionan los resultados corregidos, y el valor anterior sigue siendo legible?
- ¿Se registra el origen de cada valor y es visible para el paciente?
- ¿Quién puede leer los resultados y se decide eso por el consentimiento del paciente?
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
- Mapeo de HL7 v2 a FHIR: cada segmento y campo OBX
- Cómo importar resultados de laboratorio a un registro FHIR: el tutorial paso a paso
- Conector de laboratorio: la referencia del endpoint
- Cómo normalizar datos médicos: LOINC, UCUM, fechas, rangos y duplicados
- Explicación de la procedencia de los datos médicos
- Sistemas de códigos FHIR
- Cómo integrar sistemas de clínica con un backend FHIR
- FHIR vs HL7 v2: diferencias prácticas
- HL7 v2 y FHIR para paneles clínicos: de un mensaje de laboratorio a un mosaico del panel
Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card