Inhalt 1. Datenbanken entwickeln 2. Die Struktur von PNAT 3. Die Startseite von PNAT
4. Die Datenbankmasken - Übersicht 5. Die einzelnen Dateien 6. Der "Parser"
Briefinhalte können direkt von einem Programm aus gesteuert werden. Fest programmierte Texte lassen sich von einem Anwender aber nicht verändern. Flexibler läßt sich eine Ausgabe gestalten, wenn ein Text eingelesen wird, der Platzhalter oder Anweisungen enthält, die von einem Programm interpretiert werden können. Diese Aufgabe nimmt ein "Programm im Programm" - der Parser - wahr. Mit PNAT kann sich der Benutzer eine beliebige Anzahl solcher Druckvorlagen selbst zusammenstellen.
Eine Druckvorlage ist eine Word-Datei (*.dot), die "normalen" Text enthält, aber auch eingescannte Briefköpfe oder Logos. Teile des Briefes, die für individuelle Datensätze unterschiedlich ausgegeben werden sollen, werden durch sog. "Platzhalter" markiert. Zum Ausdrucken z.B. eines Briefes wird die in Optionen eingestellte Druckvorlage (*.dot) gelesen. Anweisungen in dieser Vorlage werden anhand der aktuellen Datensätze umgewandelt.
Eine Anweisung wird durch ^ und ~ begrenzt .
Durch solche Anweisungen können z.B. Feldwerte ausgegeben werden:
Wir berichten Ihnen über Frau ^F Vorname~ ^F Name~, geb. am ^F geb~
wird zu
Wir berichten Ihnen über Frau Martha Mustermann, geb. am 12.12.1912
Die Ausgabe von Feldwerten kann von Bedingungen abhängig gemacht werden:
^B AchE = "-9"
^T Nervengewebsspezifische Acetylcholinesterase war nicht nachweisbar.~
Der Text zwischen "T" und "~" wird nur ausgegeben, wenn im Feld AChE der Wert "-9" steht.
Mit "internen" Variablen kann gerechnet werden
Es gibt 10 Textvariable (T0 bis T9), 10 Zahlenvariable (Z0 bis Z9) und 10 Datumsvariable (D0 bis D9). Diesen Parametern können Werte zugewiesen werden; sie können wie Feldwerte in einem Text ausgegeben werden.
^Z Z1 = "1" {weise Z1 den Wert 1 zu}
^Z Z2 = "2" {weise Z2 den Wert 2 zu}
^Z Z2 + Z1 { Z2 ist jetzt Summe aus Z2 + Z1}
^F Z2~ {Gib Z2 aus}
Die Grundrechenarten können verwendet werden. Bei Datums - Variablen kann auch die Differenz in Tagen oder Wochen berechnet werden. Das Ergebnis einer solchen Operation steht in der Zahlvariable mit dem gleichen Index wie das erste Datum.
^G LR > "0" {G = "Globale" Bedingung}
^G LR > "01.01.1997"
^Z D1 = Ankunft
^Z D2 = LR
^Z D2 w D1~ {Berechne Differenz in Wochen; Ergebnis in Z2}
Diese Anweisung wird in der Ausgabe vollständig gelöscht. Wenn später im Text die Zeile steht
Es besteht die (rechnerisch) ^F Z2~.SSW.
so wird statt "^F Z2~" die vorher berechnete Zahl für die SSW ausgegeben - natürlich nur dann ganz korrekt, wenn Punktionsdatum = Ankunftsdatum.
Beim Öffnen einer Dokumentvorlage sind die Textvariablen T0..9 leer. Z0..9 haben den Wert 0; die Datumsvariablen D0..9 sind mit dem aktuellen Datum initialisiert.
|
[^L a | s ] [^G| ^g {Globale Bedingung} [^G| ^g {Globale Bedingung} [...] ] ] [^Z {Zuweisung} [^Z {Zuweisung} [...] ] ] [^B | ^b {Bedingung}] ^F {Feldname} | ^Z {Zuweisung} | ^T {freier Text} [^B | ^b {Bedingung} ^F {Feldname} | ^Z {Zuweisung} | ^T {freier Text} [...]] ~ |
Jede Anweisung besteht mindestens aus dem
Die Formatierung (Schriftart, fett, kursiv etc.) richtet sich nach dem Format des ersten Buchstabens der Anweisung.
Die (spezielle) Löschanweisung steht am Anfang. Es folgen beliebig viele globale Bedingungen, die durch "UND" verknüpft werden. Hinter globalen Bedingungen können beliebig viele Zuweisungen stehen.
Hinter der (einfachen, optionalen) Bedingung steht entweder eine Feldausgabe F, eine Zuweisung Z oder eine Textausgabe T. Nach "T" oder "F" wird die Auswertung beendet, wenn eine Bedingung erfüllt war, oder keine einfache Bedingung angegeben worden ist. Nach "Z" nur, wenn eine einfache Bedingung erfüllt war.
Beliebig viele Bedingungen verknüpft mit F, Z oder T können hintereinander folgen.
Alles, was zwischen ^ und ~ steht, wird immer gelöscht; es sei denn, die Anweisung enthält einen Fehler.
Syntax
L a | s
^L s Löscht den ganzen Satz, wenn ein Feldwert leer ist.
^L a Löscht den ganzen Absatz, wenn ein Feldwert leer ist.
Beispiel:
Die Probe traf am ^L s ^F Ankunft~ bei uns ein.
Ist kein Wert für Ankunft in der Datenbank
angegeben, wird der ganze Satz gelöscht.
G,B: Die nächste Anweisung wird nur ausgeführt, wenn die Bedingung wahr ist.
g, b: Die nächste Anweisung wird nur ausgeführt, wenn die Bedingung falsch ist.
Syntax:
G | g | B| b Variable Operator Wert
Variable Feldwerte oder interne Variable
Operator > < <> = >= <= in (bei Text )
Wert Feldwerte, interne Variable, literaler Wert. Literale Werte müssen in "" stehen.
Beispiel:
^G Ind1 > "0" {Angabe in Feld Ind1 ? Wenn nein, wird hier abgebrochen}
^G Ind1 < "11" {Wert in Ind1 kleiner 11 ? Wenn nein, wird hier abgebrochen}
^B Ind1 = "1" ^Z T0 = "Alter"
{Wenn Ind1 gleich 1 ist, erhält die Variable T0 den Wert "Alter". Der Rest wird dann nicht ausgewertet}
^B Ind1 = "2" ^Z T0 = " bal. Chromosomenaberr. Mutter" {analog; ist Ind1 = 2, wird hier abgebrochen}
^B Ind1 = "3" ^Z T0 = "bal. Chromosomenaberr. Vater"
....
~ {Ende der Anweisung}
Weitere Anweisung für Ind1 > 10:
^G Ind1 > "10"
^B Ind1 = "11" ^Z T0 = "Erhöhtes Risiko für X-chromosomale Störung"
^B Ind1 = "13" ^Z T0 = "Erhöhtes Risiko für andere monogene Störung"
....
~
Indikation: ^F T0~ {hier wird
die Indikation ausgegeben}
Den internen Variablen T0 bis T9 (Text), Z0 bis Z9 (Zahl) und D0 bis D9 (Datum) können Werte zugewiesen werden. Sie können ebenso wie Felder der Datenbank ausgegeben werden.
Syntax
Z Z0..9 | T0..9 | D0..9 Operator Wert
| Für Zahlen (Z0 bis Z9) | =,+, - , /, * |
| Für Texte (T0 bis T9) | =, + |
| Für Datumsvariable(D0 bis D9) | =, w (Differenz in Wochen), d (Differenz in Tagen). |
Wert Feldwert, interne Variable, literaler Wert. Literale Werte müssen in "" stehen.
Beispiel:
^Z Z1 + Z2~ {Die Summe aus Z1 und Z2 steht jetzt in Z1; entspricht Z1 = Z1 + Z2 }
Wird ein Datum einer Datumsvariablen zugewiesen, so muß das Datum 10-stellig sein ("01.01.1999"). Literale Werte müssen in "" stehen.
Jedes Feld der Datenbank, jede interne Variable (s.o.), sowie die automatisch generierten Parameter (s.u.) können ausgegeben werden.
Syntax:
F Name {Name ist ein Feld oder eine Variable)
Beispiel:
^F A1~
{Hier erscheint die komplette Anschrift des Arztes im Arztbrief. A1 ist ein automatisch generierter Parameter.}
Nachrichtlich: ^L a ^F A0~
{A0 = alle nachrichtlichen Ärzte. Der Absatz wird gelöscht (inkl. dem Wort "Nachrichtlich", wenn A0 leer ist}
^F A2~ ! { Daraus wir zB. Sehr geehrter Herr Kollege Mustermann !}
Am ^F Ankunft~ schickten Sie uns Fruchtwasser ^F P3~,
^F P1~ ^F Vorname~ ^F Name~, geb. am ^F geb~,
zur genetischen Diagnostik. Die Untersuchung
kam zu folgenden Ergebnissen:
Diese Ausgabe macht nur Sinn nach einer Bedingung. Der Text darf nicht von "" begrenzt werden.
Beispiel:
^G AChE = "0"
^T Eine Bestimmung der AChE wurde nicht durchgeführt.~
{Der Satz erscheint nur, wenn in der Datenbank kein Wert für
AChE eingegeben worden ist}
Die automatisch generierten Parameter
A0..9 und P0..9
Diese "Texte" könnten auch
anhand der obigen Anweisungen zusammengestellt werden; wesentlich
einfacher ist es aber, auf die entsprechenden Variablen zuzugreifen.
Arztbrief
| Briefanschrift Arzt1 | A1 | |
| Ärzte nachrichtlich horizontal | A0 | |
| Ärzte nachrichtlich vertikal | A3 | |
| Patient nachrichtlich | A8 | |
| Anrede Arzt im Arztbrief | A2 | Sehr geehrter Herr Kollege / Professor XY |
| Ihr/e Patient/in | A9 | |
| Ihres/r Patienten/in | P3 | |
| Herr/Frau | P1 | |
| Herrn/Frau | P2 |
Patientenbrief
| Briefanschrift Patient | A6 | |
| Anrede Pat. | A7 | Sehr geehrte Frau Maier |
| Arztbezeichnung Arzt1 | A4 | Herr Professor Maier, Herr Doktor Maier |
| Arztbezeichnung Arzt1 | A5 | Herrn Professor Maier, Herrn Doktor Maier |
| Arztbezeichnung Arzt2 | P4 | Herr ... |
| Arztbezeichnung Arzt2 | P5 | Herrn ... |
| Arztbezeichnung Arzt3 | P6 | Herr ... |
| Arztbezeichnung Arzt3 | P7 | Herrn ... |
| Arztbezeichnung Arzt4 | P8 | Herr ... |
| Arztbezeichnung Arzt4 | P9 | Herrn ... |
M Der im Arztbrief direkt angeschriebene Arzt wird im Patientenbrief nicht erwähnt. Der Inhalt der Paare A4/5 bis P8/9 wird "nach oben" geschoben
Beispiel:
^B Arztname = "Mustermann" ^M~
X
Betrifft nur Tabellen. Ist ein Feldwert in einer Tabelle leer,
wird die ganze Zeile gelöscht. Durch X wird diese Funktion
aus- bzw. eingeschaltet. Dieser "Schalter" steht am
Beginn einer Vorlage auf "ein".
| Untersuchung | Ergebnis | Einheit |
| AFP | ^F AFP~ | µg / ml |
| Acetylcholinesterase | ^F T1~ | |
| ABC | ^F XYZ~ | % |
Ist in der Datenbank kein Wert für AFP angegeben, wird die ganze Zeile mit "AFP" aus der Tabelle entfernt. Die Angabe von ^X~ vor der Tabelle verhindert das.
Beispiel:
^X~ {Z.B. Vor obiger
Tabelle)