std.hl7.scheduling
HL7-v2-Terminplanung: die Nachrichtenfamilie SIU^S12–SIU^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, derS15,S17undS26nicht 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
