# Mapeo de HL7 v2 a FHIR

> Mapeo de segmento a recurso y campo por campo de OBX de HL7 v2 ORU^R01 a FHIR R4, las trampas que rompen las integraciones y un convertidor al que se llama a través de HTTPS.

Source: https://developers.anpheros.com/es/guides/hl7-v2-to-fhir-mapping

**Mapear HL7 v2 a FHIR significa convertir cada segmento de un mensaje v2 delimitado por tuberías en recursos FHIR R4: PID en un Paciente, OBR en un DiagnosticReport (o ServiceRequest), cada OBX en una Observation, con códigos, unidades, rangos y tiempos transferidos campo por campo.** HL7 publica una [guía de implementación V2-a-FHIR](https://hl7.org/fhir/uv/v2mappings/) oficial con mapas de conceptos para los segmentos comunes. Esta página ofrece el mapeo práctico para resultados de laboratorio (ORU^R01), las trampas que rompen las integraciones reales y un convertidor al que puede llamar a través de HTTPS: el conector de laboratorio Anpheros.

<!-- visual:v2map-flow -->

## Segment to resource

| HL7 v2 segment | Qué transporta | FHIR R4 resource | En el conector de laboratorio Anpheros |
|---|---|---|---|
| MSH | Separadores, sistema emisor, tipo de mensaje, ID de mensaje | `MessageHeader` (o provenance) | Separadores leídos de MSH; tipo verificado para ORU^R01; ID de mensaje conservado para trazabilidad |
| PID | Identificadores del paciente, nombre, fecha de nacimiento, sexo | `Patient` | No se usa: el paciente es el de la URL de la solicitud, por lo que un mensaje no puede escribir en el registro incorrecto |
| PV1 | Visita | `Encounter` | No se usa |
| ORC / OBR | Orden y reporte: ID del relleno/colocador, fecha | `ServiceRequest`, `DiagnosticReport` | OBR-3 (o OBR-2) es el ID del reporte, OBR-7 la fecha por defecto |
| OBX | Un resultado | `Observation` | Una Observation de laboratorio por OBX |
| NTE | Nota de texto libre | `Observation.note` | No se usa |

## Campo OBX campo por campo

| Campo OBX | Elemento FHIR Observation | Notas |
|---|---|---|
| OBX-2 tipo de valor (NM, SN, ST, CWE) | choice of `value[x]` | NM y SN se convierten en `valueQuantity`; el texto permanece como texto |
| OBX-3 identificador `code^text^system` | `code.coding` | `LN` en OBX-3.3 significa LOINC; otros sistemas son el código local del laboratorio |
| OBX-5 valor, OBX-6 unidad | `valueQuantity.value`, `.unit` / `.code` (UCUM) | `<5` y `6,4` deben ser analizados deliberadamente |
| OBX-7 rango de referencia | `referenceRange.low` / `.high` | `3.5-5.1`, `<200`, `>40` |
| OBX-8 indicador de anormalidad | `interpretation` | H, L, HH, LL, A, N |
| OBX-11 estado del resultado | `status` | F → final, C → modificado, P → preliminar, I → registrado |
| OBX-14 hora de la observación | `effectiveDateTime` | las horas v2 a menudo carecen de zona horaria; FHIR requiere una |

## Convertir un mensaje con una solicitud

```bash
curl -X POST "https://platform.anpheros.com/v1/patients/$PID/labs/import" \
  -H "Authorization: Bearer $KEY" \
  -H "Content-Type: x-application/hl7-v2+er7" \
  -H "Idempotency-Key: $(uuidgen)" \
  --data-binary @oru_r01.hl7
```

La respuesta lista cuántas Observations se crearon, cuántas se omitieron por ya haber sido importadas, qué marcadores no pudieron ser mapeados y las nuevas Observations con sus códigos. Cada una recibe un identificador estable derivado del informe, la prueba, la hora y el valor, de modo que un laboratorio que reenvía el mismo mensaje no crea duplicados.

## Trampas que rompen integraciones reales

1. **Zonas horarias.** `20261002074500` no tiene desplazamiento; decida explícitamente la zona del remitente.
2. **Códigos locales.** Conserve el código propio del laboratorio cuando no haya LOINC; nunca lo omita.
3. **Reenvíos.** Sin un identificador estable por resultado, los reintentos se convierten en duplicados.
4. **Correcciones.** OBX-11 `C` es una corrección; decida si reemplaza o añade, y marque el resultado antiguo.
5. **Valores no numéricos.** `positive`, `<5`, `6,4` necesitan reglas explícitas, no una suposición.

## Lo que el conector no hace

Acepta resultados de laboratorio ORU^R01 sobre HTTPS. No recibe mensajes ADT ni de órdenes, no habla MLLP sobre TCP (un motor de interfaz delante puede reenviar), no crea un DiagnosticReport y no empareja pacientes desde PID.

## Preguntas frecuentes

### ¿Cómo se mapea HL7 v2 a FHIR?
Segmento por segmento: PID a Patient, PV1 a Encounter, ORC/OBR a ServiceRequest y DiagnosticReport, OBX a Observation, NTE a notes. La guía de implementación de HL7 V2 a FHIR define los mapeos de conceptos a nivel de campo.

### ¿Existe un conversor de HL7 v2 a FHIR?
Sí. Los motores de interfaz y las bibliotecas de código abierto convierten mensajes; para los resultados de laboratorio, el conector de laboratorio Anpheros convierte un mensaje ORU^R01 en FHIR R4 Observations en una sola solicitud HTTPS y los almacena en el registro del paciente.

### ¿Qué tipos de mensajes HL7 v2 acepta Anpheros?
ORU^R01 resultados de laboratorio. Un mensaje de otro tipo recibe una advertencia y solo se leen sus segmentos OBX; ADT, pedidos y otros mensajes no son compatibles.

### ¿Cómo se representan las banderas anormales de HL7 v2 en FHIR?
OBX-8 se convierte en `Observation.interpretation` utilizando los códigos HL7 ObservationInterpretation (H, L, HH, LL, A, N).

<!-- visual:cta-v2map -->

## Relacionado

- [API de resultados de laboratorio: HL7 v2, FHIR y LOINC](https://developers.anpheros.com/es/guides/lab-results-api)
- [FHIR vs HL7 v2: diferencias prácticas](https://developers.anpheros.com/es/guides/fhir-vs-hl7-v2)
- [Cómo importar resultados de laboratorio en un registro FHIR](https://developers.anpheros.com/es/guides/import-lab-results-fhir)
- [HL7 v2 y FHIR para paneles clínicos](https://developers.anpheros.com/es/guides/clinical-dashboard-hl7-fhir)
- [Conector de laboratorio](https://developers.anpheros.com/es/guides/lab-connector)
