RIDING BYTES
← Alle Insights

3. Juni 2026 · 8 Minuten Lesezeit

SENAITE spricht HL7: senaite.astm 2.0

senaite.astm 2.0 bringt einen HL7-v2-über-MLLP-Server neben ASTM, speist beides über einen Push-Consumer in SENAITE und ergänzt Capture-Modus, PHI-Filterung, /stats.

SENAITE spricht HL7: senaite.astm 2.0

Jahrelang bedeutete die Anbindung eines Geräts an SENAITE ein Protokoll: ASTM. Das deckte die meisten Analyzer-Familien ab, die wir je vor Ort sahen. Roche, Sysmex, Abbott, Siemens, Horiba. Aber Krankenhauslabore stellten immer dieselbe Frage:

Spricht es HL7?

Jetzt tut es das. senaite.astm 2.0 bringt einen dedizierten HL7-v2-Server mit, der auf MLLP lauscht, jedes HL7-Segment in denselben Umschlag wie ASTM mappt und ihn über einen einzigen Push-Consumer in SENAITE speist.

Derselbe Transport, dieselbe Zustellung, dasselbe Audit. Zwei Protokolle, ein Weg ins LIMS.

Was sich geändert hat

Das 2.0-Release ist mehr als nur HL7. Die Bibliothek wurde um einen einzigen Nachrichten-Umschlag herum neu geschrieben, sodass ASTM und HL7 sich dieselbe nachgelagerte Pipeline teilen. Alles, was früher ASTM-Frames las, liest jetzt beide.

Konkret:

  • HL7-v2-Server. Der neue senaite-hl7-server lauscht standardmäßig auf MLLP auf dem IANA-registrierten Port 2575. ORU^R01, OUL^R22, OML^O33 — die ergebnisbringenden Nachrichten — werden geparst und an SENAITE weitergeleitet.
  • ASTM-Server. Weiter da, tut, was er tat. Neuer Name: senaite-astm-server.
  • Einzelner Push-Consumer. Beide Server posten an denselben SENAITE-Endpoint. SENAITE ist es egal, mit welchem Protokoll die Daten gestartet sind.
  • Capture-only-Modus. Beide Server laufen lassen gegen ein Dateiziel statt SENAITE. Nützlich für Integrationstests, bevor Sie produktiv verkabeln, und für Forensik, wenn ein Gerät sich seltsam verhält.
  • PHI-Filterung per Allowlist. Für HL7 deklarieren Sie, welche Segmente und Felder weitergeleitet werden sollen. Alles andere wird verworfen, bevor es den Listener verlässt. Hilfreich für Umgebungen, in denen das LIMS keine Patientenkennungen braucht.
  • /stats-Endpoint. Jeder Server stellt einen Prometheus-freundlichen Stats-Endpoint bereit: empfangene, geparste, weitergeleitete, verworfene, abgelehnte Nachrichten. Klinken Sie ihn in Ihr Monitoring ein.
  • Produktions-Härtung. Geordneter Shutdown, strukturiertes Logging, Reconnect mit Backoff, konfigurierbare Verbindungslimits.

Warum ein Umschlag

Die erste Version von senaite.astm brachte einen Parser, der ASTM-förmige Python-Dictionaries erzeugte. Der Import-Consumer von SENAITE wusste, wie er diese Dictionaries liest. Als wir HL7 hinzufügten, wäre der billige Weg ein zweiter Consumer gewesen, der HL7 kennt. Wir gingen ihn nicht.

Der Grund: jeder zusätzliche Consumer ist ein Ort, an dem das Importverhalten auseinanderdriften kann. Ein SENAITE, das HL7-ORU-Ergebnisse anders importiert als ASTM-Ergebnisse, ist eine weitere Bug-Matrix.

Also normalisiert 2.0 beide Protokolle in einen einzigen Umschlag, bevor die Daten den Listener verlassen. Der Umschlag trägt: Probenkennung, Analysekennungen, Ergebniswerte mit Einheiten, Absender-Metadaten und die rohe Originalnachricht für das Audit. SENAITE importiert den Umschlag. Das Protokoll ist Metadatum.

Wie es ausgerollt wird

Die Form entspricht einem normalen SENAITE-nahen Dienst: drei kleine Prozesse, wenig Speicher, hinter einer Firewall, die nur dem Gerätenetz Zugriff auf die Listener-Ports gewährt.

# When the 2.0 release is published it will be on PyPI; until
# then install from the senaite.astm GitHub repository.
pip install git+https://github.com/senaite/senaite.astm.git@2.x
# ASTM listener on port 4010
senaite-astm-server \
    --port 4010 \
    --url https://user:pass@your-senaite/

# HL7 v2 over MLLP on port 2575
senaite-hl7-server \
    --port 2575 \
    --url https://user:pass@your-senaite/

Jeder Server ist ein langlaufender Daemon. Wir rollen sie unter systemd auf einer dedizierten Schnittstelle aus, mit den lauschenden Ports per Firewall auf das Geräte-Subnetz beschränkt.

Capture-only-Modus

Nützlich während eines Rollouts, wenn Sie dem LIMS-Import noch nicht zutrauen, das Richtige zu tun.

senaite-hl7-server --port 2575 --capture-only ./hl7-capture/

Jede empfangene Nachricht landet als zeitgestempelte Datei in hl7-capture/. Kein Forward, keine Transformation. Wiederholen Sie sie gegen ein Staging-SENAITE, wenn Sie bereit sind.

PHI-Filterung

Für HL7 arbeitet die Filterung mit Allowlist. Sie deklarieren, welche Segmente und welche Felder darin weitergeleitet werden sollen. Alles andere wird am Listener verworfen.

Eine beispielhafte Konfiguration:

allow:
  MSH: [3, 4, 5, 6, 9, 10, 11, 12]
  OBR: [1, 2, 3, 4, 7, 22, 24, 25]
  OBX: [1, 2, 3, 4, 5, 6, 7, 8, 11, 14, 17]
  NTE: [3]
drop_unmatched_segments: true

PID, PV1, GT1, IN1 — die Segmente mit Patientendemografie — verlassen den Listener nie. Nützlich für Labore, die Proben weiterleiten, ohne die Patientenkennung innerhalb von SENAITE selbst zu benötigen.

Observability

Jeder Server stellt /stats (und /healthz) auf einem separaten Admin-Port bereit:

# HELP senaite_astm_messages_total Messages by outcome
# TYPE senaite_astm_messages_total counter
senaite_astm_messages_total{outcome="forwarded"} 14823
senaite_astm_messages_total{outcome="rejected"}      11
senaite_astm_messages_total{outcome="dropped"}       97
senaite_astm_uptime_seconds 432119

Werfen Sie diese in Prometheus oder lassen Sie HealthWatch sie abgreifen (HealthWatch ist Teil von SENAITE Care) und Sie haben in Echtzeit ein klares Bild des Geräteverkehrs.

Was das ermöglicht

Zwei Fälle, für die wir 2.0 konkret geschrieben haben.

Krankenhauslabore, die bereits HL7 nutzen. Ein klinisch-chemisches Labor mit zwanzig Analyzern, die alle so konfiguriert sind, dass sie ORU^R01 an den bestehenden HL7-Broker des Krankenhauses senden, braucht keine Übersetzungsschicht mehr, um sie in SENAITE zu bringen. Der HL7-Server ist die Schicht.

Hybride Umgebungen. Ein Bergbau-Servicelabor, in dem das ICP-OES ASTM spricht und das neue Massenspektrometer HL7. Beide Server laufen auf demselben Host und speisen dasselbe SENAITE. Operatoren sehen einen Posteingang, nicht zwei.

Was als Nächstes kommt

senaite.astm 2.0 ist die Grundlage für ein paar Dinge auf der Roadmap, die wir noch nicht ankündigen, aber die Form ist sichtbar: der gemeinsame Umschlag macht es möglich, weitere Eingänge (FHIR, eigenes JSON) zu ergänzen, ohne einen dritten Consumer wachsen zu lassen. Derselbe Umschlag, derselbe Import, dasselbe Audit.

Wenn Sie ein Projekt zur Geräteanbindung am Horizont haben und Hilfe beim Protokoll-Mapping wünschen, sprechen Sie mit uns. Die HL7-Arbeit ist, wie der ASTM-Transport davor, aus echten Engagements mit echten Laboren entstanden.

Bringen Sie das in Ihr Labor

Ob Sie SENAITE evaluieren, über mehrere Standorte skalieren oder Geräte und Monitoring anbinden — das Team, das die Plattform geschrieben hat, ist das Team, mit dem Sie sprechen.

Gespräch starten