morphos / bridge /tests /test_parsers.py
Jose Salazar
Añadir el stack nuevo: Vite/TypeScript + FastAPI
70e641d
Raw
History Blame Contribute Delete
2.38 kB
"""Parseo de tramas HL7 v2 (PCD-01) y ASTM crudas → modelo canónico del puente."""
from __future__ import annotations
from datetime import datetime, timezone
from bridge.adaptadores.astm_generico import parsear_astm
from bridge.adaptadores.hl7v2 import parsear_hl7
# --- HL7 v2 ORU^R01 estilo Bionote Vcheck (PCD-01) ---
HL7 = "\r".join([
r"MSH|^~\&|VCHECK|BIONOTE|||20260725100000||ORU^R01|MSG0001|P|2.6",
r"PID|1||PID123||Fido^^^^||||||||||||",
r"OBR|1||SAMP-001|^^^PANEL",
r"OBX|1|NM|CORT^Cortisol^L||3.2|ug/dL|1-6|N|||F",
r"OBX|2|NM|CRP^C-Reactive Protein^L||8.5|mg/L|0-10|N|||F",
r"L|1|N",
])
# --- ASTM E1394 estilo Abaxis VetScan ---
ASTM = "\r".join([
r"H|\^&|||VetScan^VS2||||||||P|1",
r"P|1||PID9||Michi|||F||||Felino", # nombre=campo6, sexo=campo9, especie=campo13
r"O|1|SAMP-042||^^^PANEL|R",
r"R|1|^^^GLU|118|mg/dL||N||F",
r"R|2|^^^CREA|1.4|mg/dL||H||F",
r"L|1|N",
])
def test_hl7_extrae_muestra_y_observaciones():
resultados = parsear_hl7(HL7, instrumento_id="bionote-1", fabricante="bionote")
assert len(resultados) == 1
r = resultados[0]
assert r.muestra_id == "SAMP-001"
assert r.formato_origen == "hl7v2"
assert r.fabricante == "bionote"
codigos = {(o.codigo_prueba, o.valor, o.unidad) for o in r.observaciones}
assert codigos == {("CORT", "3.2", "ug/dL"), ("CRP", "8.5", "mg/L")}
assert r.pistas_paciente.nombre_mascota == "Fido"
assert r.momento == datetime(2026, 7, 25, 10, 0, 0, tzinfo=timezone.utc) # MSH-7
def test_astm_extrae_muestra_y_observaciones():
resultados = parsear_astm(ASTM, instrumento_id="vetscan-1", fabricante="abaxis")
assert len(resultados) == 1
r = resultados[0]
assert r.muestra_id == "SAMP-042"
assert r.formato_origen == "astm"
obs = {o.codigo_prueba: (o.valor, o.unidad, o.bandera) for o in r.observaciones}
assert obs["GLU"] == ("118", "mg/dL", None)
assert obs["CREA"] == ("1.4", "mg/dL", "H")
assert r.pistas_paciente.especie_texto == "Felino"
def test_payload_serializable():
r = parsear_hl7(HL7)[0]
payload = r.payload()
assert payload["muestra_id"] == "SAMP-001"
assert payload["formato_origen"] == "hl7v2"
assert len(payload["observaciones"]) == 2
assert "momento" in payload
def test_mensaje_no_hl7_devuelve_vacio():
assert parsear_hl7("esto no es HL7") == []