std.hl7.scheduling

HL7-v2-Terminplanung: die Nachrichtenfamilie SIU^S12SIU^S26 — Termin angelegt, verschoben, abgesagt, Patient nicht erschienen. Ergänzt die drei übrigen HL7-Units (WP-HL7-04).

Wie der Rest von std.hl7 arbeitet die Unit Zero-Copy: Die Parser schreiben keine Zeichenketten um, sondern legen je Feld ein Paar aus Zeiger und Länge in einen Ergebnispuffer, der in die ursprüngliche Nachricht zeigt. Der Nachrichtenpuffer muss also leben, solange die Struktur benutzt wird.

Autor: Andreas Röne
Copyright: 2024-2026 Andreas Röne

std.hl7 · std.hl7.core · std.hl7.adt · Standard Library


Funktionen

Signatur Beschreibung
Hl7SchParse(seg, segLen, sch) SCH-Segment (Terminkopf) → Struktur mit HL7_SCH_SIZE Bytes
Hl7AisParse(seg, segLen, ais) AIS-Segment (Leistung/Service) → HL7_AIS_SIZE
Hl7AigParse(seg, segLen, aig) AIG-Segment (Ressource, z.B. Gerät) → HL7_AIG_SIZE
Hl7AilParse(seg, segLen, ail) AIL-Segment (Ort/Raum) → HL7_AIL_SIZE
Hl7SiuParse(msg, len, appt) Ganze SIU^Sxx-Nachricht → Hl7Appointment (HL7_APPT_SIZE). Liest MSH (Trigger-Event), SCH, PID (Patienten-ID) und AIS (Leistung)
Hl7SiuWrite(appt, out, outMax): int64 Erzeugt aus einem Hl7Appointment eine Nachricht: MSH + SCH, dazu AIS, wenn ein Service gesetzt ist. Liefert die geschriebenen Bytes

Hl7Appointment — der Termin

Die zusammengefasste Sicht, die Hl7SiuParse füllt. Alle Textfelder sind Paare aus Zeiger () und Länge (…_LEN).

Offset Feld Quelle
0 / 8 HL7_APPT_PLACER SCH-1 — Termin-ID des Anforderers
16 / 24 HL7_APPT_FILLER SCH-2 — Termin-ID des Ausführenden
32 / 40 HL7_APPT_START_DT SCH-11 — Beginn
48 / 56 HL7_APPT_DURATION SCH-9 — Dauer
64 / 72 HL7_APPT_SERVICE AIS-3 — Leistung
80 / 88 HL7_APPT_PAT_ID PID-3.1 — Patienten-ID
96 / 104 HL7_APPT_STATUS SCH-25 — Status beim Ausführenden
112 / 120 HL7_APPT_EVENT MSH-9.2 — Trigger-Event (S12, S13, …)
128 HL7_APPT_ISCANCEL 1 bei S15 (Absage)
136 HL7_APPT_ISDELETE 1 bei S17 (Löschung)
144 HL7_APPT_ISNOSHOW 1 bei S26 (nicht erschienen)
HL7_APPT_SIZE 152 Byte
Die drei Flags sind der Grund, aus dem man diese Unit einer eigenen Auswertung des Event-Codes vorzieht. Ein Terminkalender, der S15, S17 und S26 nicht auseinanderhält, zeigt abgesagte Termine weiter an — und ein Nicht-Erscheinen ist abrechnungsrelevant, eine Absage oft nicht.

Die Segment-Strukturen

Struktur Felder Größe
SCH PLACER (SCH-1), FILLER (SCH-2), REASON (SCH-6), TYPE (SCH-7), DURATION (SCH-9), DUR_UNITS (SCH-10), START_DT (SCH-11), STATUS (SCH-25) HL7_SCH_SIZE = 128
AIS SETID (AIS-1), SERVICE (AIS-3, CWE), START_DT (AIS-4) HL7_AIS_SIZE = 48
AIG SETID (AIG-1), RESOURCE (AIG-3, CWE), RESTYPE (AIG-4, CWE) HL7_AIG_SIZE = 48
AIL SETID (AIL-1), LOCATION (AIL-3, PL) HL7_AIL_SIZE = 32

AIG und AIL werden von Hl7SiuParse nicht mit ausgewertet — wer Gerät oder Raum eines Termins braucht, ruft Hl7AigParse bzw. Hl7AilParse selbst auf dem entsprechenden Segment auf.


Schreiben

Hl7SiuWrite nimmt den Event-Code aus HL7_APPT_EVENT (3 Zeichen); fehlt er, wird S12 (neuer Termin) geschrieben. Ein AIS-Segment entsteht nur, wenn HL7_APPT_SERVICE_LEN größer als null ist.

import std.io;
import std.hl7.scheduling;

fn main(): int64 {
    var appt: int64 := alloc(HL7_APPT_SIZE);
    // ... Felder aus einer empfangenen Nachricht per Hl7SiuParse fuellen ...

    var out: int64 := alloc(4096);
    var n:   int64 := Hl7SiuWrite(appt, out, 4096);
    PrintLn(IntToStr(n));
    return 0;
}


Letzte Aktualisierung: 2026-08-11