File size: 2,384 Bytes
70e641d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
"""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") == []