Spaces:
Sleeping
Puente local Morphos (bridge)
Lee los analizadores de laboratorio en la LAN de la clínica y reenvía los resultados normalizados a la API de Morphos (que corre en HF Spaces) por HTTPS autenticado. Es un proyecto uv independiente del backend: sus dependencias de serie/HL7 no entran en la imagen desplegada.
analizador → transporte (serie/MLLP) → parser (ASTM/HL7) → normalizador → reenviador → POST /api/lab/ingesta
Instalar y ejecutar
cd bridge
uv sync
cp .env.example .env # edita MORPHOS_BRIDGE_URL, API_KEY y el transporte
uv run python -m bridge.main
La API_KEY debe ser una de las claves configuradas en el backend (MORPHOS_LAB_API_KEYS).
Ejecutar como servicio: envuelve uv run python -m bridge.main en una unidad systemd (o un
contenedor) en un equipo de la clínica que esté en la misma red que el analizador.
Conectar varios equipos a la vez
Declara MORPHOS_BRIDGE_INSTRUMENTOS como una lista JSON (una línea) — un puente atiende a
todos en paralelo, cada uno con su parser por fabricante:
MORPHOS_BRIDGE_INSTRUMENTOS=[
{"fabricante":"bionote","transporte":"mllp","instrumento_id":"vcheck-1","puerto":2575},
{"fabricante":"abaxis","transporte":"serie","instrumento_id":"vetscan-1","serie_puerto":"/dev/ttyUSB0"},
{"fabricante":"horiba","transporte":"serie","instrumento_id":"micros-1","serie_puerto":"/dev/ttyUSB1"}
]
El fabricante selecciona automáticamente el adaptador (Bionote→HL7, Abaxis/Horiba→ASTM) y,
en el backend, la tabla data/lab_mapeos/<fabricante>.json. En el analizador, configura el
destino: los de MLLP apuntan a IP-del-puente:puerto; los de serie se cablean al puerto USB/RS-232.
Equipos soportados (alcance actual)
| Equipo | Protocolo | Transporte | Adaptador |
|---|---|---|---|
| Bionote Vcheck V200 | HL7 v2.6 PCD-01 | MLLP/TCP | adaptadores/hl7v2.py |
| Abaxis VetScan (VS2) | ASTM E1394 (configurar salida ASTM, no ASCII/XML) | serie | adaptadores/astm_generico.py |
| Scil / Horiba | ASTM E1394 | serie | adaptadores/astm_generico.py |
IDEXX queda fuera de alcance por ahora.
Checklist de validación con el equipo real (por analizador)
El parseo genérico y las tablas de mapeo se finalizan con capturas reales — no se puede cerrar sólo desde código:
- Capturar 3–5 corridas reales (log del puerto serie, o pcap del MLLP).
- Confirmar los parámetros: serie → baudios/paridad/bits; MLLP → IP/puerto y que el equipo espera ACK.
- Confirmar qué campo lleva el ID de muestra (OBR-3 en HL7; O-3 en ASTM) y que coincide con lo que el veterinario teclea/escanea en Morphos.
- Confirmar las unidades reportadas y los códigos de prueba (OBX-3 / R-3); añadir los
que falten a
data/lab_mapeos/<fabricante>.jsonen el backend (mira losno_mapeadosque devuelve la ingesta).
Pruebas
uv run pytest # parsers (HL7/ASTM) + fiabilidad del reenviador (spool/retry)
Las pruebas usan fixtures capturadas; la corrección final contra el hardware es manual (ver checklist).