Neu: Scriptfelder in Textvorlagen

Neues rund um Elexis

Neu: Scriptfelder in Textvorlagen

Beitragvon gweirich » 18.07.2010, 13:06

Neu können jetzt auch dynamisch generierte bzw. errechnete Daten in Textvorlagen gesetzt werden. Die entsprechende Syntax ist:

[SCRIPT:Scriptname(parameter)], wobei Parameter optional sind.

Beispiel:
Wunsch: Ich möchte das Alter von unter 3-jährigen Patienten in Monaten, das älterer Patienten in Jahren ausgeben. Zum Beispiel in einem Notfalldienstbericht könnte stehen:

Code: Alles auswählen
Ich habe heute Ihre[Patient:mw:n oben genannten/oben genannte] [SCRIPT:ageInMonths] [Patient:mw:alten Patienten/alte Patientin] behandelt.


Bei einem 10 Monate alten Mädchen steht dann im Brief:
Code: Alles auswählen
Ich habe heute Ihre obengenannte 10 Monate alte Patientin behandelt

Bei einem 20 Jährigen Mann dagegen steht:
Code: Alles auswählen
Ich habe heute Ihren obengenannten 20 Jahre alten Patienten behandelt


Neu ist der mittlere Platzhalter, der auf ein bsh-Script namens ageInMonths verweist. Diese Script würde hier z.B. so aussehen:

Code: Alles auswählen
/* !BSH!
 Dieses Script gibt bei über 3-Jährigen das Alter in Jahren, bei unter 3-Jährigen
 das Alter in Monaten aus
*/

import ch.rgw.tools.*;

today=new TimeTool();
birthDate=new TimeTool(actPatient.getGeburtsdatum());

ageInDays=birthDate.daysTo(today);
if(ageInDays<1095){
   return ageInDays/30+" Monate";
}else{
   return ageInDays/365+" Jahre";
}


Scripts können wie anderswo erläutert in der View "Script" erstellt und getestet werden.

Zugegeben: Das Erstellen von Scripts ist wohl eher ein Feature für Power-User. Die Anwendung ist hingegen einfach. Und da man Scripts ja sehr leicht per cut&paste weitergeben kann, könnte die Verbreitung eleganter Scripts für Textvorlagen ein Community-Projekt werden.
Ein Script kann so ziemlich "alles" aus Elexis auslesen. Ob man einen Report über die Umsätze nach Mandant und Zeitraum oder ein Blutzuckerprofil eines Patienten in ein Dokument einbetten will, mit diesem Script-Platzhalter ist es möglich.

Technische Details:
  • Geht erst ab Elexis 2.1
  • Jedes Script erhält beim Start die folgenden Variablen vordefiniert: actPatient, actFall, actKons, actMandant, actUser.
  • Weitere Variable können im Script als $varname referenziert und beim Scriptaufruf als scriptname($varname=17,$var2="Müller") usw. übergeben werden. Variablen sind typfrei.
  • Am Anfang des Scripts kann ein Ausdruck der Form /* !BSH! stehen, um den zu verwendenden Interpreter zu bezeichnen. Wenn kein solcher Ausdruck vorhanden ist, wird immer BSH (Beanshell) genommen. Beanshell ist im Prinzip einfach untypisiertes Java. Weitere Interpreter können als Plugins hinzugefügt werden.
  • Zum Testen klickt man das Script am besten in der Script-View mit der re Maustaste an und wählt "ausführen"
  • Da Scripts wegen ihrer Mächtigkeit ein wenig gefährlich sein können, wird das Erstellen und Ausführen von Scripts mit Rechten kontrolliert. Standardmässig darf nur Admin Scripts erstellen und direkt ausführen.
Zuletzt geändert von gweirich am 10.08.2010, 15:51, insgesamt 3-mal geändert.
gweirich
 
Beiträge: 516
Registriert: 06.01.2008, 08:16
Wohnort: Schaffhausen

Zweites Beispiel

Beitragvon gweirich » 18.07.2010, 13:28

Ach ja, als Nachtrag gleich "just another method" für die ominöse Krankenkassenangabe für Briefe und Etiketten, welche auch die Verwendung von Parametern zeigt:

Code: Alles auswählen
[SCRIPT:kkAdresse($m="short")]


mit folgendem Script "kkAdresse":
Code: Alles auswählen
/* Name oder Adresse der Krankenkasse ausgeben */

kk=actFall.getRequiredContact("Kostenträger");
if(kk==null){
   return "unbekannt";
}else{
   if($m.equals("short")){
      return kk.get("Bezeichnung1");
   }else{
      return kk.getPostAnschrift(false);
   }
}


So wie oben ergibt das z.B. "XY Krankenversicherung", wenn man dagegen [SCRIPT:kkAdresse($m="long")] einsetzt, dann käme mit demselben Script heraus "XY Krankenversicherung, Hintergasse 27, 9999 Vorderdorf".

Und auch mal was speziell für Spezialärzte:

Sie möchten sicherstellen, dass der Hausarzt oder Zuweiser immer eine Kopie Ihrer Schreiben bekommt?
Kein Problem, vorausgesetzt, Sie erfassen Hausarzt oder Zuweiser immer als Bezugskontakt. Setzen Sie in die Fusszeile Ihrer Briefe folgende Zeile:

Code: Alles auswählen
[SCRIPT:KopieAnHA]
welche auf folgendes Script verweist:
Code: Alles auswählen
/* Dieses Script erstellt eine Zeile "kopie an", sofern ein Hausarzt oder Zuweiser definiert ist */
import ch.elexis.data.*;
import java.util.List;

List bezugskontakte=actPatient.getBezugsKontakte();
if(bezugskontakte.size()>0){
   for(int i=0;i<bezugskontakte.size();i++){
      bz=bezugskontakte.get(i);
      bezug=bz.getBezug();
      if(bezug.equals("Hausarzt") || bezug.equals("Zuweiser")){
         ha=bz.getBezugsKontakt();
         return "Kopie: "+ha.getPostAnschrift(false);
      }
   }

}
return ""; // Wenn kein Bezugskontakt gefunden wurde, Kopie-Zeile leer lassen.


Und weil's so schön war, noch etwas für die Zuweiser an die Spezialärzte:

Sie möchten auf Ihren Schreiben eine Anmerkung, dass der Patient im Hausarztmodell ist, damit der Spezialarzt entsprechend Rücksprache nimmt?

Kein Problem. Fügen Sie in der Briefvorlage einen Platzhalter ein:
Code: Alles auswählen
[SCRIPT:Hausarztmodell]
welcher auf folgendes Script verweist:
Code: Alles auswählen
/* Eine Bemerkung ausgeben, wenn der Patient im Hausarztmodell ist */
import java.util.List;
import ch.elexis.data.*;

List stickers=actPatient.getStickers();
for(int i=0;i<stickers.size();i++){
   sticker=stickers.get(i);
   if(sticker.getLabel().equals("Hausarztmodell")){
      return "(Patient ist im Hausarztmodell versichert; bitte vor Weiterabklärungen Rücksprache nehmen)";
   }
}
return ""; // Nicht im Hausarztmodell, nichts schreiben.
Zuletzt geändert von gweirich am 20.07.2010, 11:16, insgesamt 2-mal geändert.
gweirich
 
Beiträge: 516
Registriert: 06.01.2008, 08:16
Wohnort: Schaffhausen

Beitragvon marlovitsh » 18.07.2010, 15:47

Cool - danke!
Dann muss ich das schon mal nicht mehr machen - ich hab das letzte Mal (Gelegenheit SQL-Felder) schon angefangen, dann aber keine Lust mehr gehabt...


Thanx a lot!
marlovitsh
 
Beiträge: 88
Registriert: 28.01.2008, 22:51
Wohnort: Schaffhausen

Beitragvon gweirich » 18.07.2010, 17:19

marlovitsh hat geschrieben:ich hab das letzte Mal (Gelegenheit SQL-Felder) schon angefangen, dann aber keine Lust mehr gehabt...


Ja, die SQL-Felder haben mich erst auf die Idee gebracht, dass man mit den Platzhaltern auch noch mehr anstellen kann, als ich ursprünglich gedacht hatte :-)
gweirich
 
Beiträge: 516
Registriert: 06.01.2008, 08:16
Wohnort: Schaffhausen


Zurück zu News

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron