Hl7 Tools

Validación de Mensajes HL7 v2.x: Una Guía Práctica para Analistas de Integración de Salud

Por Qué Importa la Validación de Mensajes HL7

La interoperabilidad de datos sanitarios depende de que los mensajes HL7 v2.x sean estructuralmente correctos y semánticamente significativos cuando los consumen los sistemas receptores. Un mensaje con delimitadores incorrectos, un segmento obligatorio faltante o un valor de campo del tipo de datos equivocado puede fallar silenciosamente — escribiendo datos corruptos en un HCE, desencadenando un desajuste en ADT o provocando que una orden de laboratorio se pierda por completo. En un entorno clínico, estos fallos no son simples inconvenientes técnicos; pueden resultar en atención retrasada o errores de medicación.

El desafío es que HL7 v2.x es uno de los estándares de mensajería sanitaria más ampliamente desplegados en el mundo, pero también uno de los menos estrictamente aplicados en la capa de transporte. Un sistema emisor puede transmitir un mensaje malformado que un sistema receptor ignora silenciosamente, registra o acepta parcialmente — sin devolver ningún error al emisor. Las herramientas de validación cubren esta brecha: dan a los desarrolladores de integración una forma de inspeccionar la estructura de un mensaje antes de que entre en un motor de interfaz o sistema HCE de producción.

Todos los ejemplos de mensajes en esta guía son sintéticos — no contienen datos reales de pacientes.

Anatomía del Mensaje HL7 v2.x

Segmentos, Campos, Componentes y Subcomponentes

Un mensaje HL7 v2.x es una estructura de texto plano organizada en segmentos. Cada segmento comienza con un identificador de tres caracteres (p. ej., MSH, PID, PV1, OBX) y contiene un conjunto fijo de campos separados por el separador de campos definido en MSH-1. Los campos se dividen adicionalmente en componentes por el separador de componentes, y los componentes en subcomponentes por el separador de subcomponentes.

Los delimitadores predeterminados estándar definidos en el segmento MSH son:

  • Separador de campos: | (barra vertical)
  • Separador de componentes: ^ (acento circunflejo)
  • Separador de repetición: ~ (virgulilla)
  • Carácter de escape: \ (barra invertida)
  • Separador de subcomponentes: & (ampersand)

Estos separadores se declaran en MSH-2 (caracteres de codificación) inmediatamente después del separador de campos en MSH-1. Un validador lee esta declaración y usa esos caracteres específicos al analizar el resto del mensaje.

El Segmento MSH

El segmento de Encabezado de Mensaje (MSH) es obligatorio y debe ser el primer segmento de cada mensaje HL7 v2.x. Contiene metadatos sobre el mensaje en sí: los identificadores de aplicación y facilidad emisora y receptora, el tipo y evento del mensaje, el ID de control del mensaje (un identificador único para el acuse de recibo), la marca de tiempo y el identificador de versión. Un segmento MSH válido se ve así:

MSH|^~\&|AppEmisora|FacilEmisora|AppReceptora|FacilReceptora|20240315093000||ADT^A01^ADT_A01|MSG00001|P|2.5

Campos clave: MSH-9 (Tipo de Mensaje), MSH-10 (ID de Control del Mensaje), MSH-11 (ID de Procesamiento — P para producción, T para pruebas), MSH-12 (ID de Versión).

Tipos de Segmentos Comunes

  • EVN (Tipo de Evento): Documenta el evento desencadenante que causó el mensaje. Requerido en la mayoría de los mensajes ADT.
  • PID (Identificación del Paciente): Contiene datos demográficos del paciente — nombre, fecha de nacimiento, sexo, dirección, identificadores.
  • PV1 (Visita del Paciente): Captura datos a nivel de encuentro: número de visita, clase de paciente, médico responsable, ubicación asignada.
  • ORC (Orden Común): Contiene información de control de órdenes para pedidos de laboratorio y radiología.
  • OBR (Solicitud de Observación): Especifica qué se está pidiendo u observando.
  • OBX (Observación/Resultado): Lleva valores de observación individuales — resultados de laboratorio, signos vitales, hallazgos clínicos.
  • NTE (Notas y Comentarios): Lleva notas de texto libre adjuntas a otros segmentos.

Los Errores de Validación HL7 Más Comunes

Segmento MSH Faltante o Orden de Segmentos Incorrecto

Cada mensaje debe comenzar con MSH como primer segmento. Si el mensaje comienza con otro segmento, o si MSH aparece después de otros segmentos, ningún sistema descendente podrá analizarlo. Este error ocurre con frecuencia cuando un sistema fuente envuelve o prefija incorrectamente el mensaje con un encabezado propietario antes del contenido HL7 estándar.

Desajuste de Delimitadores

El error de validación más común e insidioso. Los delimitadores declarados en MSH-1 y MSH-2 deben coincidir con los delimitadores realmente utilizados en el resto del mensaje. Si MSH-2 declara ^~\& pero el mensaje usa | como separador de componentes en PID-5, el analizador interpretará mal cada campo del mensaje.

Campos Obligatorios Faltantes o Vacíos

Cada tipo de mensaje HL7 tiene campos obligatorios definidos en el estándar. Para ADT^A01 (admisión de paciente), los campos requeridos incluyen MSH-9, MSH-10, MSH-12, PID-3 (Lista de Identificadores del Paciente) y PV1-2 (Clase de Paciente). Enviar estos campos vacíos u omitirlos completamente hará que los sistemas receptores rechacen el mensaje o produzcan registros incompletos.

Violaciones de Tipo de Datos

HL7 define tipos de datos estrictos para cada campo. Las violaciones comunes incluyen enviar una cadena de texto libre en un campo Numérico (NM), colocar un valor en un campo Fecha/Hora (DTM o TS) en el formato incorrecto (p. ej., 15/03/2024 en lugar de 20240315), o enviar un elemento codificado (CWE o CE) sin el identificador del sistema de código requerido.

Problemas con Segmentos Z

Los segmentos Z son segmentos personalizados que las implementaciones añaden para datos que no encajan en las definiciones de segmentos estándar. Siguen las mismas reglas estructurales que los segmentos estándar (nombre de tres caracteres comenzando con Z, campos separados por pipes) pero sus definiciones de campo no están estandarizadas. La validación de segmentos Z requiere documentación de la especificación de interfaz del sistema emisor.

Un Flujo de Trabajo de Validación Práctico

Fase 1: Validación Estructural

Antes de probar el comportamiento de la interfaz, valida la estructura del mensaje bruto: ¿Comienza con MSH? ¿Están los delimitadores correctamente declarados y utilizados de forma consistente? ¿Están presentes todos los segmentos obligatorios en el orden correcto para el tipo de mensaje declarado? Una herramienta basada en navegador como nuestro validador de mensajes HL7 realiza todas estas comprobaciones al instante sin necesidad de enviar el mensaje a través de un motor de interfaz.

Fase 2: Validación a Nivel de Campo

Después de que pase la validación estructural, valida el contenido del campo: ¿Están poblados los campos obligatorios? ¿Son correctos los tipos de datos? ¿Están los valores codificados siendo válidos? ¿Están las marcas de tiempo en el formato DTM correcto?

Fase 3: Pruebas de Lógica de Negocio

La validación estructural y de campos no garantiza que el mensaje produzca el resultado correcto en un sistema receptor. Las pruebas de lógica de negocio verifican que el tipo de mensaje y el evento desencadenante coincidan con el flujo de trabajo clínico que se está probando, y que el identificador del paciente en PID-3 coincida con un registro de paciente existente en el sistema receptor.

Fase 4: Pruebas de Acuse de Recibo

En un intercambio HL7 v2.x de producción, el sistema receptor debe devolver un mensaje ACK (acuse de recibo) con una respuesta AA (Aceptación de Aplicación), AE (Error de Aplicación) o AR (Rechazo de Aplicación) en MSA-1. Probar que el sistema receptor envía el acuse de recibo correcto tanto para mensajes válidos como para mensajes deliberadamente malformados es una parte importante de las pruebas de interfaz.

Antes y Después: Diagnóstico de un ADT^A01 Malformado

La mejor forma de entender los errores de validación en la práctica es examinar un ejemplo concreto. El siguiente mensaje ADT^A01 contiene tres errores estructurales distintos. Intenta identificarlos antes de leer el diagnóstico.

MSH|^~\|AppEmisora|HospA|SistemaHCE|HospA|20240318142500||ADT^A01|MSG1042|P|2.5
EVN|A01|20240318142500
PID|1||123456789^^^HospA^MR||Garcia^Juan^A||19850422|M|||Calle Mayor 10^^Madrid^MD^28001||913550190
PV1|1|I|3W^307^01^HospA^^^|||||||||||||ADM|V12345|||||||||||||||||||20240318142500

Los tres errores son:

  1. MSH-2 le falta el carácter de escape. La cadena correcta de caracteres de codificación es ^~\& (cuatro caracteres: acento circunflejo, virgulilla, barra invertida, ampersand). El mensaje anterior usa solo ^~\. Las secuencias de escape en los datos del mensaje — como \F\ para una barra vertical literal — no se analizarán correctamente, y algunos validadores rechazarán el mensaje por este motivo.
  2. EVN-1 está poblado en un mensaje v2.5. EVN-1 (Código de Tipo de Evento) fue retirado en HL7 v2.3.1. Aunque muchos sistemas heredados aún lo envían por compatibilidad con versiones anteriores, un validador estricto de v2.5 marcará este campo como obsoleto. El evento desencadenante ya está declarado en MSH-9 (ADT^A01); el valor en EVN-1 es redundante y puede entrar en conflicto si no coincide con MSH-9.
  3. PV1-3 (Ubicación Asignada del Paciente) está insuficientemente cualificado. El estándar requiere que para las admisiones de pacientes hospitalizados, el campo de ubicación lleve como mínimo un punto de atención, habitación y cama. La entrada 3W^307^01^HospA^^^ deja vacíos los tres últimos componentes (edificio, planta, tipo de ubicación). Muchos perfiles de conformidad para ADT^A01 marcan estos componentes como obligatorios para la clase de paciente hospitalizado, lo que provoca que los validadores basados en perfiles rechacen el mensaje.

Ejecutar este mensaje en nuestro validador de mensajes HL7 revelará los problemas de MSH-2 y EVN-1 de inmediato. El problema de PV1-3 requiere validación basada en perfiles (descrita a continuación). Para una biblioteca más amplia de mensajes de prueba ADT, consulta nuestro artículo sobre mensajes de prueba ADT HL7 para pruebas de interfaz.

Errores de Negociación de Versión en MSH-12

MSH-12 (ID de Versión) declara qué versión de HL7 v2.x sigue el mensaje. Los valores más comunes son 2.3, 2.3.1, 2.4, 2.5, 2.5.1, 2.6 y 2.7. Este campo debería reflejar con precisión la versión usada para definir la estructura del mensaje — pero en la práctica a menudo no lo hace, lo que causa fallos de validación sutiles y difíciles de diagnosticar.

El problema más frecuente es un desajuste entre la versión declarada y el uso real de los campos. Un sistema que declara MSH-12 = 2.3 pero envía segmentos OBX con tipos de datos CWE (Coded with Exceptions) — introducidos en v2.5 — fallará la validación en validadores que verifican la versión estrictamente, porque CWE no existía en la v2.3. La solución es actualizar MSH-12 a la versión que realmente coincida con las definiciones de campo en uso, o utilizar el tipo de datos CE (Coded Element) más antiguo para compatibilidad con la versión declarada.

Un segundo problema ocurre cuando los socios comerciales tienen versiones HL7 distintas. Si el Sistema A envía mensajes v2.5.1 al Sistema B, que solo admite v2.3.1, el receptor puede descartar silenciosamente los campos añadidos en la v2.4 y posteriores. El enfoque más seguro en entornos heterogéneos es acordar la versión común más baja en el acuerdo con el socio comercial y limitar el contenido del mensaje a los campos que existen en esa versión.

Validación por Perfiles de Conformidad

El estándar base HL7 v2.x es deliberadamente permisivo: la mayoría de los campos son opcionales y el estándar permite una personalización local extensa. Esta flexibilidad impulsa la adopción pero debilita la interoperabilidad. Un mensaje técnicamente válido según el estándar base puede ser funcionalmente inválido para un socio comercial específico que requiera campos obligatorios adicionales, valores de tabla restringidos o una secuencia de segmentos diferente.

Un perfil de conformidad (también llamado guía de implementación específica del sitio) restringe el estándar base para un caso de uso y relación comercial particular. Los perfiles son el mecanismo por el cual dos sistemas acuerdan un formato de mensaje determinista y comprobable que va más allá de lo que exige el estándar base. Los perfiles comunes incluyen IHE PAM (Patient Administration Management), guías de implementación de proveedores específicos de HCE y perfiles personalizados negociados entre hospitales y sus socios de integración.

La validación basada en perfiles requiere que el documento del perfil esté cargado en la herramienta de validación. Nuestro validador en el navegador comprueba contra el estándar base HL7; para pruebas completas de conformidad con un perfil específico del sitio necesitas una herramienta que acepte la definición del perfil. Para una guía paso a paso sobre cómo escribir y aplicar perfiles específicos del sitio, consulta nuestro artículo sobre perfiles de conformidad HL7 y validación específica del sitio.

La validación de segmentos Z está estrechamente relacionada. Si tu socio comercial utiliza segmentos Z personalizados, sus definiciones de campo no están en el estándar base y deben proporcionarse como parte del perfil de conformidad. Consulta nuestro artículo sobre validación de HL7 v2 con segmentos Z personalizados para un recorrido práctico.

HL7 v2.x vs. Validación FHIR: Diferencias Clave

A medida que las organizaciones migran hacia integraciones basadas en FHIR, los analistas de integración trabajan cada vez más con mensajes HL7 v2.x y FHIR R4 simultáneamente. Comprender las diferencias fundamentales en la validación es esencial para gestionar entornos de integración híbridos.

Mecanismo de esquema: HL7 v2.x no tiene un esquema formal legible por máquinas en el mismo sentido que XML Schema o JSON Schema. La validación se realiza analizando el mensaje contra la especificación en prosa o una herramienta de perfil de conformidad. Los recursos FHIR se definen con estructuras JSON y XML formales con recursos StructureDefinition publicados, y los validadores FHIR dedicados pueden aplicar restricciones mecánicamente contra esas definiciones.

Cardinalidad y restricciones: En HL7 v2.x, la cardinalidad (si un campo es opcional u obligatorio, y cuántas repeticiones se permiten) se define en prosa y solo se aplica mediante perfiles de conformidad o herramientas personalizadas. En FHIR, la cardinalidad se declara con valores min/max explícitos en los recursos StructureDefinition, y los validadores aplican estas restricciones automáticamente.

Vinculación de terminología: HL7 v2.x utiliza referencias a tablas internas (p. ej., Tabla HL7 0001 para Sexo Administrativo) cuyos valores permitidos están listados en la especificación pero no se verifican mecánicamente de forma predeterminada. FHIR utiliza enlaces ValueSet formales con niveles de fuerza explícitos (required, extensible, preferred, example), y los validadores pueden comprobar automáticamente los enlaces de terminología contra los ValueSets publicados. Para equipos que gestionan una migración activa de v2 a FHIR, consulta nuestra guía sobre migración de HL7 v2.x a FHIR.

Fallos de Validación y Respuestas ACK

En los intercambios HL7 de producción, el receptor comunica el resultado de la validación al emisor a través de un mensaje ACK. El campo MSA-1 lleva uno de tres códigos: AA (Application Accept — el mensaje era válido y fue procesado), AE (Application Error — el mensaje fue recibido pero contenía un error que impidió el procesamiento completo), o AR (Application Reject — el mensaje fue rechazado a nivel estructural y no fue procesado).

Los escenarios comunes que generan un AE incluyen: un campo obligatorio está vacío o malformado; el identificador del paciente en PID-3 no coincide con ningún registro en el sistema receptor; o un código de orden en OBR-4 no se encuentra en el diccionario de procedimientos del sistema receptor. Los escenarios comunes que generan un AR incluyen: el segmento MSH está malformado y el mensaje no puede analizarse; el identificador de la aplicación receptora en MSH-5 no coincide con el nombre de aplicación configurado; o el tipo de mensaje en MSH-9 no es compatible con la aplicación receptora.

Comprender los códigos ACK esperados para tu integración específica es esencial para diseñar casos de prueba completos. Para un desglose completo de la estructura ACK, semántica de códigos de error y modo de acuse de recibo mejorado, consulta nuestro artículo sobre mensajes ACK HL7 explicados. Para diagnosticar fallos de interfaz en vivo que generan respuestas AE o AR inesperadas, consulta nuestra guía sobre resolución de problemas en interfaces HL7.

Usando un Validador Basado en Navegador en tu Flujo de Trabajo

Los validadores HL7 basados en navegador ofrecen una ventaja significativa sobre los entornos de prueba de motores de interfaz: son inmediatos, no requieren configuración y — cuando se implementan correctamente — procesan el mensaje completamente dentro del navegador sin transmitir el contenido del mensaje a ningún servidor.

Nuestro validador de mensajes HL7 analiza el mensaje en tu navegador, identifica el tipo de mensaje y la versión de MSH-9 y MSH-12, valida la consistencia de los delimitadores, verifica la presencia y el orden de los segmentos, e informa problemas a nivel de campo para los segmentos estándar. Es una herramienta de primera línea para comprobaciones estructurales rápidas — no un sustituto de las pruebas completas de conformidad contra un perfil específico del sitio, pero un complemento valioso tanto para las pruebas de motores de interfaz como para la revisión manual del código.

Para una referencia más amplia sobre las definiciones de segmentos y posiciones de campo que encontrarás durante la validación, consulta nuestra guía de referencia de segmentos y campos HL7.

Actualización Continua con los Estándares HL7

Los estándares HL7 v2.x continúan evolucionando a través de versiones de mantenimiento publicadas por HL7 International. Si bien la estructura básica de los mensajes es estable, periódicamente se añaden nuevos códigos de eventos, definiciones de segmentos y valores de tablas. Los analistas de integración deben revisar la especificación oficial de HL7 v2 junto con sus acuerdos con socios comerciales al menos una vez al año para confirmar que sus reglas de validación estén actualizadas.

Este artículo es para fines educativos y describe estructuras generales de mensajes HL7 v2.x. No constituye orientación de cumplimiento clínico, legal o regulatorio. Todos los ejemplos de mensajes contienen datos sintéticos. Para orientación de implementación específica o preguntas de cumplimiento, consulta la documentación de tu motor de interfaz y a profesionales de TI sanitaria cualificados.

← Volver al Blog