====== 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 → [[lyx_-_programmiersprache:units:hl7|std.hl7]] · [[lyx_-_programmiersprache:units:hl7:core|std.hl7.core]] · [[lyx_-_programmiersprache:units:hl7:adt|std.hl7.adt]] · [[lyx_-_programmiersprache:units|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