Ungrad Formulare

Wozu?

Das Elexis-Textsystem ist bekanntermassen eines der grössten Ärgernisse des Programms. Es gab mehrere Ansätze, von denen keiner wirklich rundum überzeugen kann. Die Schwierigkeit besteht darin, eine externe Office-Suite zu steuern, und das unter allen unterstützten Betriebssystemen gleichermassen.

Nun ist es eigentlich für viele Aufgaben unnötig komplex, eine ganze Office-Suite hochzufahren.

Hier setzt dieses Plugin ein. Es kann das Textsystem ergänzen und für manche Zwecke auch ersetzen. Dazu setzt es auf vorgefertigte Formulare (entweder selbstgemachtes HTML oder vorgefertigtes Medforms-PDF), die man lediglich mit reinem Text ausfüllt.

Das geht einfach, schnell und problemlos, da Elexis dafür nur mit eigenen “Bordmitteln” arbeiten kann. Dafür hat man natürlich weniger Gestaltungsfreiheit, als mit einer Office-Suite. Wenn Sie bisher in Ihrem Elexis-Textsystem mit standardisierten Vorlagen gearbeitet haben, in die nur reiner Text eingefüllt wird, dann würden Sie wahrscheinlich von Ungrad-Forms profitieren.

Mit diesem Plugin erstellte Schreiben sehen z.B. so aus:

Aus HTML bzw. Pug: Html-Vorlage

Aus Medforms: Medforms-Vorlage

So erstellte Dokumente werden in einem Ausgabeverzeichnis gespeichert und können direkt gedruckt und per Mail versendet werden.

Wie?

Ungrad Forms ist mit Elexis Ungrad 2023 kompatibel und kann dort ganz normal via “Hilfe->Neue Software” installiert werden. Es funktioniert unter allen von Elexis Ungrad unterstützten Betriebssystemen, getestet unter Ubuntu, MacOS und Windows 10, aber wie immer kann natürlich keine Garantie für ein bestimmtes System übernommen werden.

Danach können Sie unter Datei->Einstellungen->Datenaustausch->Forms die entsprechenden Einstellungen setzen:

Settings

  • Vorlagenverzeichnis: In diesem Verzeichnis sucht Ungrad Forms jeweils nach Vorlagen, wenn Sie ein neues Dokument erstellen wollen.
  • Dokumentenverzeichnis: Das ist das Basisverzeichnis, in dem mit Forms erstellte Dokumente gespeichert werden. Dabei werden Unterverzeichnisse für die Betreffenden Patienten erstellt. Die oben gezeigten Beispieldokumente würden zum Beispiel in einem Unterverzeichnis “t/Testperson_Armeswesen_01.02.1950” dieses Basisverzeichnisses abgelegt.
  • PUG-Compiler (optional): Ausführbares Programm, das Pug-Dateien nach HTML wandelt. Dies wird weiter unten näher erklärt.
  • PDF Viewer (optional): Das Programm, mit dem Sie Ihre fertigen Dokumente betrachten und ggf weiterbearbeiten wollen. Wenn Sie dieses Feld leer lassen, wird einfach der im System vorhandene Standard-Viewer genommen, falls einer konfiguriert ist.
  • SMTP Server, SMPT Port und SMTP User werden benötigt, um erstellte Dokumente direkt als Mail-Anhang zu versenden. Dies sollte derzeit ein lokal installierter HIN Client sein, da verschlüsselte Übermittlung nicht unterstützt wird. Das SMTP Passwort wird dann an sich nicht benötigt.
  • Mail Standardtext: Falls Forms in der Vorlage keinen Hinweis findet, wie die Mail aussehen soll, wird dieser Text verwendet. (Mehr dazu weiter unten).

Als Vorlagen können entweder selbsterstellte HTML-Dateien oder ausfüllbare PDF-Dateien, vorzugsweise nach dem medForms-Standard, eingesetzt werden.

HTML Vorlagen

Das sind letztlich ganz normale HTML-Dateien, wie sie in jedem Browser angezeigt werden können. Zum Bearbeiten sollten Sie entweder ein speziell für HTML geeignetes Programm oder einen reinen Texteditor verwenden.

Folgendes wäre eine gültige Vorlage:

<!DOCTYPE html>

<html lang="de">
  <head>
    <meta charset="UTF-8" />
    <title>Elexis Forms Beispielvorlage</title>
    <style>
      @page{
        size: A4 portrait;
      }
      h1{
        color:blue;
        text-align:center;
        font-size: 14pt;
      }
      h2{
        margin-top:5mm;
      }
      </style>
  </head>
  <body data-doctitle="Beispielbrief">
    <h1>Praxis Dr. Eisenbart</h1>
    <hr/>
    <h2 data-anrede="true">Liebe[Adressat:mw:r/ ] [Adressat.Vorname]</h2>
    <p>Ich berichte kurz über [Patient.Name] [Patient.Vorname], [Patient.Geburtsdatum]</p>
    <div data-input="Bericht">Alles ist wieder gut.</div>
    <p>Herzliche Grüsse<br/>[Mandant.Vorname]</p>
  </body>
  <div data-mail="subject" style="display:none"> [Patient.Name] [Patient.Vorname], [Patient.Geburtsdatum]</div>
  <div data-mail="recipient" style="display:none">fuerDieseVorlageVorgebener.Empfaenger@hin.ch</div>
  <div data-mail="body" style="display:none"> 
    <p>Anbei der Bericht zu [Patient.Name] [Patient.Vorname]</p>
    <p>Vielen Dank für die Zuweisung und herzliche Grüsse, Erwin</p>     
</html>

Wie Sie sehen, können die üblichen Elexis-Textvariablen wie [Patient.Name] etc. eingesetzt werden.

Wenn irgendwo in der Vorlage eine Variable mit [Adressat. …] auftaucht, dann wird beim Erstellen eines Dokuments aus dieser Vorlage ein Adress-Abfrage-Dialog geöffnet, und der so ausgewählte Adressat eingesetzt.

Spezielle Anweisungen für Elexis-Forms werden als data-xxx Attribute erteilt. Diese Attribute sind absolut HTML-Standardkonform. Sie können Dateien mit diesen Attributen also weiterhin in jedem Browser anschauen. Alle sind optional.

  • Elemente, die mit “data-input=…” markiert sind, werden beim Erstellen des Dokuments als Eingabefelder angeboten, so dass man dort den variablen Inhalt des Briefs eintragen kann. Es können beliebig viele data-input Elemente eingesetzt werden.

  • Das “data-doctitle”-Attribut (das ebenfalls an jedem beliebigen Element angehängt werden kann), definiert den Dateinamen des letztendlich abgespeicherten Dokuments. Würde dieses Beispiel etwa vom Patienten “Testperson Armesewesen” an “Dr. Hans Meier” gesendet, dann würde der Dateiname so aussehen: <Dokumentenverzeichnis>/t/Testperson_Armeswesen_21.05.1965/A_2022-11-04_Beispielbrief_Meier_Hans.pdf. Wenn eine Vorlage kein data-doctitle-Attribut hat, dann wird der Titel aus dem <title>-Element entnommen, und wenn auch dieses nicht vorhanden ist, aus <h1>. Wenn auch kein h1-Element vorhanden ist, wird der Dateiname der Vorlage zum Titel des damit erstellten Dokuments.

  • Das “data-anrede” Attribut löst das Problem, dass wir manchmal nicht den in den Kontakten erfassten Vornamen oder Namen als Anrede verwenden möchten - vielleicht möchten wir einen Bekannten als “Dr. Alfred Meier” adressieren, aber mit “Lieber Fredi” anreden, oder Briefe an eine Klinik mit “Sehr geehrte Kolleginnen und Kollegen” einleiten, statt mit “Sehr geehrte Kantonsspital”. Wenn ein Element mit data-anrede=“true” gefunden wird, dann wird im Kontakt-Eintrag des Adressaten unter Bemerkungen geschaut, ob eine Zeichenfolge wie “:Anrede:Lieber Fredi:” vorhanden ist. Wenn ja, wird der gesamte Inhalt dieses Elements gegen diese Anrede ersetzt. Wenn nein, wird die Anrede so gewählt, wie im Formular definiert. Hier im Beispiel also “Lieber Alfred”.

  • Die Attribute “data-mail” werden nur dann benötigt, wenn automatisch Mails aus Formularen verschickt werden sollen. data-mail=“subject” definiert die Betreffzeile, data-mail=“body” den Inhalt der Mail. Das aus dem Formular erstellte Dokument wird als Anhang angefügt. Wenn eine Vorlage immer an denselben Empfänger geht, können Sie dessen Mailadresse mit data-mail=“recipient” vorgeben, und brauchen dann keine Adressabfrage mit [Adressat…] . Sie erhalten nach Klick auf den Mail-senden-Button eine vereinfachte Vorab-Darstellung der Mail und haben die Möglichkeit, weitere Anhänge anzuhängen, oder den Vorgang abzubrechen. Wenn in den Einstellungen der Mailserver korrekt eingestellt wurde und verfügbar ist (Derzeit wird nur ein lokal laufender HIN-Client unterstützt), kann die Mail dann direkt versendet werden. style=“display:none” bewirkt, dass diese Elemente nicht im fertigen Dokument angezeigt werden - sie sind ja nur Anweisungen für den Produktionsprozess.

Obiges Formular würde dann so angezeigt:

Forms-View

Wie Sie sehen, werden nur die mit data-input gekennzeichneten Felder angezeigt, und als reiner Text eingegeben. Sie können zwar durchaus theoretisch auch html-Tags im Text einbauen, die bei der Ausgabe umgesetzt werden, aber im Prinzip wird die Gestaltung des Briefs nur durch die Formular-Vorlage definiert.

Pug-Vorlagen

HTML ist manchmal bei komplexeren Seiten etwas schwer lesbar (und schreibbar), Ausserdem sind grosse Teile der Dokumente ja immer gleich, etwa Briefkopf und Adressteil. Dieses Problem wird mit HTML-Präprozessoren erleichtert, die aus einfacheren Formaten HTML erzeugen können. Ein solcher Präprozessor ist pug. Ungrad-Forms kann pug-Vorlagen direkt verwenden. Sie können natürlich auch einen anderen Präprozessor verwenden, müssen das HTML dann aber manuell erstellen und in den Vorlagen-Ordner kopieren.

Eine pug-Vorlage kann zum Beispiel so aussehen:

extends a4 

block content
  #maintext(data-doctype="AnmeldungDu" data-doctitle="Anmeldung")
    p [Patient.Name] [Patient.Vorname], [Patient.Geburtsdatum]
      br/
      span [Patient.Strasse], [Patient.Plz] [Patient.Ort]
      br/
      span Tel: [Patient.Telefon1] [Patient.Natel] [Patient.Telefon2]
    p(data-anrede="true") Liebe[Adressat:mw:r/ ] [Adressat.Vorname]
    p Ich bitte dich um direktes Aufgebot [Patient:mw:des oben genannten Patienten/der oben genannten Patientin] zur fachärztlichen Untersuchung.

    h2 Problem 
    p(data-input="Problem")

    h2 Weitere Diagnosen 
    p(data-input="Diagnosen") [Patient.Diagnosen]

    h2 Medikation
    p(data-input="Medikation") [Patient.Medikation]

  #footer 
    p Vielen Dank und freundliche Grüsse 
    p [Mandant.Vorname]  
  

Ich möchte da nicht allzu tief darauf eingehen, Sie können leicht die oben besprochenen Elemente und Attribute in vereinfachter Schreibweise erkennen. Am Anfang steht ‘extends a4’, und das macht einen guten Teil des Charme von pug aus: in a4.pug sind Elemente, die für alle a4-Vorlagen gemeinsam sind, abgelegt. Ich muss z.B. den Briefkopf also nur einmal schreiben, dann wird er automatisch für alle Vorlagen verwendet, und auch eine Änderung wird automatisch in allen Vorlagen nachgeführt. Diese a4.pug kann z.B. so aussehen, und hier können und sollten Sie natürlich so modifizieren, dass der Briefkopf und das Layout Ihrer Praxis erscheint:

doctype html
html(lang="de")
  head
    meta(charset="utf-8")/
    title Doctitle
    style
      include styles_a4.css
  body
    #container
      div#header
        h1 Praxis [Mandant.Titel] [Mandant.Vorname] [Mandant.Name]
        span [Mandant.Strasse] [Mandant.Plz] [Mandant.Ort] Tel.:[Mandant.Telefon1] e-mail: [Mandant.E-Mail]
      hr/
      #date [Mandant.Ort], [Datum.heute]
      #sender [Mandant.Titel] [Mandant.Vorname] [Mandant.Name] 
        br/
        span Facharzt für [Mandant.TarmedSpezialität] 
        br/
        span ZSR-Nr. [Mandant.KSK]
      #address 
        p.absender [Mandant.Vorname] [Mandant.Name], [Mandant.Strasse] [Mandant.Plz] [Mandant.Ort]
        . 
          [Adressat.Anschrift]
        br/  
      block content
      div(data-mail="sender" style="display:none") praxis@eisenbart.hin
      div(data-mail="subject" style="display:none") [Patient.Name] [Patient.Vorname], [Patient.Geburtsdatum]
      div(data-mail="body" style="display:none")
        p Anbei die Zuweisung meine[Patient:mw:s Patienten/r Patientin] [Patient.Name] [Patient.Vorname]
        p Vielen Dank und freundliche Grüsse
        p [Mandant.Vorname] [Mandant.Name<br/>Facharzt für Innere Medizin<br/>[Mandant.Strasse]<br/>[Mandant.Plz] [Mandant.Ort]<br/>[Mandant.Telefon1]
             

Beachten Sie, dass wir hier anstelle eines style-Elements im Kopfteil eine style.css Datei einbinden. Auch das ist eine Vereinfachung, da man diese komplexen Stil-Anweisungen so nur einmal pflegen muss. Der Nachteil ist: AnmeldungDu.pug, a4.pug und styles_a4.css müssen im selben Verzeichnis sein, damit AnmeldungDu.html erstellt werden kann (Als Demonstration finden Sie AnmeldungDu.html ebenfalls im nachfolgend erwähnten Verzeichnis. Normalerweise brauchen Sie aber nur entweder die pug oder die html-Form einer Vorlage).

Sie finden diese und andere Beispieldateien im rsc-Vereichnis des Ungrad-Forms Plugins. Am Besten fangen Sie die Einrichtung Ihres neuen Formularsystems damit an, dass Sie diese Dateien in Ihr Vorlagenverzeichnis kopieren und dort an Ihre Gegebenheiten anpassen.

Wenn Sie pug-Vorlagen verwenden wollen (das ist wie gesagt absolut nicht zwingend, man kann gut mit reinem HTML arbeiten), dann brauchen Sie ein Programm, das pug nach html übersetzt, auf dem Computer, und Sie müssen dieses Programm in den Einstellungen unter Pug-Compiler eintragen. (Unter Linux und MacOS können Sie für einen pug-Compiler z.B. NodeJS installieren, und dann eingeben: sudo npm i -g pug-cli)

medForms Formulare

Sie können Formulare, die dem medForms Standard folgen, von Ungrad Forms mit den Patientendaten vorab befüllen lassen und dann manuell fertigstellen.

Dazu muss das entsprechende medForms-Formular lediglich im Vorlagen-Verzeichnis zu finden sein. Sie können auch einzelne Felder schon im Voraus befüllen und das Formular dann dort abspeichern. Wenn Sie bei “neues Formular” dann eine solche Vorlage auswählen, wird eine Kopie erstellt, im Ausgangsverzeichnis des entsprechenden Patienten abgespeichert, und zur Weiterbearbeitung geöffnet. Wenn Sie fertig sind, müssen Sie es erneut abspeichern, unter dem bereits vorgegebenen Dateinamen. Wenn das Formular eine Empfänger-Mailadresse enthält (dies ist bei vielen etwa von Spitälern vorgefertigten medForms-Formularen der Fall), dann wird diese Mailadresse beim Senden als Email voreingestellt (kann aber auch geändert werden)

Andere PDF Formulare

In PDF Dateien eingebettete Eingabefelder gehören zum PDF Standard. Es gibt darum auch andere ausfüllbare PDF-Formulare, als die von medForms. Der Unterschied ist: Bei medForms sind die Namen der Eingabefelder standardisiert und können daher relatv einfach automatisch ausgefüllt werden. Bei anderen PDF Formularen kann Elexis die Bedeutung der einzelnen Felder nicht kennen. Sie können ihm aber auf die Sprünge helfen:

Wenn sich im Vorlagenverzeichnis eine Datei mit demselben Namen, aber der Endung .map befindet, versucht Ungrad Forms diese Datei auszuwerten. Sie muss dazu aus Zeilen bestehen, die wie folgt aussehen:

PDF-Feldname:Elexis-Feldname

Also zum Beispiel:

lastname:[Patient.Name]

Sie finden im Beispielverzeichnis eine Datei “Verordnung_Ergotherapie.pdf”, welche nicht medForms-Kompatibel ist (sie stammt vom Ergotherapeuten-Verband Schweiz), und eine dazu passende “Verordnung_Ergotherapie.map” - Datei. Sie können daher das Verordnung_Ergotherapie.pdf Formular genauso leicht in Ungrad-Forms verwenden, wie medForms-Dateien.

Als Hilfe, um unbekannte PDF Dateien zu analysieren, können Sie diese analyze-fields.jar herunterladen und so aufrufen: java -jar analyze-fields.jar dateiname.pdf. Das Programm erstellt dann dateiname.map mit allen vorgefundenen Feldern. Wenn Sie die Bedeutung eines Felds erraten können, tragen Sie einfach dahinter ein, was Ungrad-Forms dort hineinschreiben soll. Das kann einfacher Text oder auch eine Elexis-Textvariable sein. Für mehrzeiligen Text können Sie Zeilenumbrüche mit \n einfügen. Nicht benötigte Zeilen können Sie auch löschen. Wenn die Feldnamen allzu kryptisch sind, können Sie sich so behelfen: Füllen Sie das Formular mit ihrem PDF Viewer aus und speichern Sie die ausgefüllte Version ab. Lassen Sie dann analyze-fields.jar über dieses Formular laufen, und Sie werden neben jedem Feldnamen das finden, was Sie eingetragen haben. Damit sollte die Bedeutung jedes Feldes dann klar sein.

Wenn keine .map-Datei gefunden wird, dann wird das Formular trotzdem geöffnet und ins Ausgangsverzeichnis des aktuellen Patienten kopiert, aber es werden dann keine Daten vorab eingetragen.

Elexis-Integration

Ausgefüllte Formulare werden auch in PDF-Form als “Brief” in Elexis abgelegt, und es wird ein entsprechender Querverweis im Konsultationseintrag erstellt. Die Dokumente können von dort aus wie gewohnt durch Doppelklick angezeigt werden. Das Öffnen zur Weiterbearbeitung/Modifikation ist allerdings nur von der Forms-View aus möglich.

Modifikationen

Wenn Sie im Konsultationseintrag oder in der Briefe-Liste auf einen Forms-Brief doppelklicken, wird Ihnen die (unveränderliche) PDF-Ansicht angezeigt. Wenn Sie dagegen in der Dokumentenliste der Forms-View auf einen Eintrag doppelklicken, dann gelangen Sie wieder zur Formularansicht und können den Inhalt modifizieren und erneut abspeichern/ausdrucken/mailen. Voraussetzung dafür ist, dass nebst der PDF-Datei auch die HTML-Datei noch im Ausgabeverzeichnis vorhanden ist (Ungrad Forms speichert immer beide Varianten ab, zeigt aber nur den Basisnamen an). Sie können ein Dokument also “unveränderbar” machen, indem Sie die HTML-Datei löschen.

Auch ausfüllbare PDFs können in der Forms-View zur Weiterbearbeitung erneut geöffnet werden. Denken Sie aber daran, sie anschliessend unter demselben Dateinamen wieder abzuspeichern (das tun nicht alle PDF Viewer automatisch). Wenn Sie in den Einstellungen einen PDF Viewer angegeben haben, dann “merkt” Ungrad Forms, wenn Sie ein PDF-Dokument bearbeitet haben, und schreibt auch den dazugehörigen Eintrag in der Briefe-View und den Inhalt in der Datenbank neu.

Wenn Sie in der Forms-View ein Dokument löschen (im Dreiecksmenü rechts oben in der View), dann werden alle damit verbundene Dateien, Briefeinträge und Querverweise in der Konsultation gelöscht. Auch wenn Sie einen Querverweis in einer Konsulation entfernen, können Sie optional alle damit verbundenen Dateien löschen. Das Löschen eines Briefs in der Briefe-View löscht allerdings prinzipbedingt nur diesen Brief. Dokumente im Ausgabeverzeichnis und Konsultationseinträge bleiben vorhanden.

Fremd-Formulare

Manchmal benötigt man ein bestimmtes Formular, dessen Gestaltung vom Empfänger vorgegeben ist, das aber nicht in maschinell ausfüllbarer Form existiert. In solchen Fällen kann man entweder das Formular so gut es geht in HTML nachbilden, oder man legt das Original-Formular als Hintergrund eines HTML-Formulars fest, dann muss man nur die Felder, in denen man etwas eintragen muss, auf diesem Hintergrund korrekt platzieren. Das benötigt zwar einiges Messen und Ausprobieren, aber ist oft immer noch leichter, als das ganze Formular nachzubilden.

Beispiel:

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8" />
    <style>
        @page {
            size: A4 portrait;
            margin-top: 5mm;
            margin-left: 5mm;
            margin-bottom: 5mm;
            margin-right: 5mm;
        }
    </style>
</head>

<body data-doctitle="Anmeldung_Testmeier">
    <img src="/home/eisenbart/elexis/schablonen/elexisforms/testmeier.png"
        style="position:absolute;top:0;left:0;width:200mm;height:287mm;">
    <div style="position:absolute;top:24mm;left:22mm"><span>Erwin Eisenbart</span><br><span>Facharzt für Elexik
        </span><br><span>Unterdorf 17</span><br><span>9999 Elexikon</span><br><span>praxis-eisenbart@hin.ch</span>
        <p style="margin-top:5mm;margin-bottom:0">ZSR-Nr: G 1234.56</p><span>GLN: 7601000070010</span>
    </div>
    <div style="position:absolute;top:89mm;left:32mm">[Patient.Name]</div>
    <div style="position:absolute;top:89mm;left:83mm">[Patient.Vorname]</div>
    <div style="position:absolute;top:89mm;left:137mm">[Patient.Geburtsdatum]</div>
    <div style="position:absolute;top:100mm;left:35mm;white-space:nowrap">[Patient.Strasse]</div>
    <div style="position:absolute;top:100mm;left:129mm;white-space:nowrap">[Patient.Telefon1]</div>
    <div style="position:absolute;top:109mm;left:35mm;white-space:nowrap">[Patient.Plz] [Patient.Ort]</div>
    <div style="position:absolute;top:109mm;left:129mm;white-space:nowrap">[Patient.E-Mail]</div>
    <div style="position:absolute;top:140mm;left:69mm;white-space:nowrap" data-input="gastro">( )</div>
    <div style="position:absolute;top:144mm;left:69mm;white-space:nowrap" data-input="colo">( )</div>
    <div style="position:absolute;top:207mm;left:25mm;width=180mm;" data-input="Fragestellung">Frage</div>
    <div style="position:absolute;top:264mm;left:35mm">[Datum.heute]</div>
    <div data-mail="sender" style="display:none">praxis-eisenbart@hin.ch</div>
    <div data-mail="subject" style="display:none">[Patient.Name] [Patient.Vorname], [Patient.Geburtsdatum]</div>
    <div data-mail="recipient" style="display:none">prof.testmeier@hin.ch</div>
    <div data-mail="body" style="display:none">
        <p>Anbei die Zuweisung meine[Patient:mw:s Patienten/r Patientin] [Patient.Name] [Patient.Vorname]</p>
        <p>Vielen Dank und freundliche Grüsse</p>
        <p>Erwin Eisenbart</p>
    </div>
</body>

</html>

Im <img> - Tag gleich am Anfang des Mailbody wird das Bild des Formulars als Hintergrund festgelegt. Dann werden die benötigten Eingabefelder auf diesem Bild positioniert.

Achtung: Der Hintergrund muss als absoluter Pfad angegeben werden, sonst wird er bei der PDF-Erstellung nicht gefunden.