Beschreibung:
Dieser Job ermittelt die Daten eines oder mehrerer Patienten und liefert diese in einer vorgegeben Form, unabhängig vom Aufbau des Archives, zurück. Es wird damit dem Aufrufer die Möglichkeit gegeben, auf Patientendaten zuzugreifen, ohne die interne Struktur des Archivs zu kennen.
Die Daten, auf die dieser Job zugreift, können sich je nach Aufbau des Archivs, an unterschiedlichen Stellen befinden. Um sicherzustellen, dass immer die gleiche Ergebnisstruktur zurückgeliefert wird, wird ein externes Query (query_patients.xml) und ein externes Stylesheet (query_patients.xsl) verwendet. Diese beiden Dateien befinden sich im Serververzeichnis etc/med und müssen auf die jeweilige Struktur des Archives angepasst werden.
Bei dem Query handelt es sich um eine DMS-Executor-Anfrage, in die vom PatientData-Job die übergebenen Job-Parameter eingearbeitet werden. Der DMS-Executor berücksichtigt in der Anfrage nur die Bereiche, für die Param-Tags in der DMS-Anfrage angelegt wurden. Folgende DMS-Query-Param-Tags werden eingefügt:
Parameter:
- STRING = Ergebnis wird als String-Parameter zurückgeliefert
- BASE64 = Ergebnis wird base64-kodiert zurückgeliefert
Rückgabe: 0 = Job erfolgreich, ansonsten Fehlercode
Rückgabewerte:
Interner Aufbau des Jobs:
Die folgenden Beispiele zeigen den Aufbau der hinterlegten XSL-Dokumente und die dazu erzeugten XML-Dokumente.
Hinterlegtes DMS-Query (query_patients.xml):
<?xml version="1.0" encoding="ISO-8859-1"?>
<DMSQuery>
<Params/>
<Archive name="PATIENT">
<ObjectType name="Patient">
<Fields>
<Field name="Patienten-ID"/>
<Field name="Name"/>
<Field name="Vorname"/>
</Fields>
<Conditions>
<ConditionObject name="Patient">
<FieldCondition name="Vorname">
<ParamValue ref="Firstname"/>
</FieldCondition>
<FieldCondition name="Name">
<ParamValue ref="Surname"/>
</FieldCondition>
<FieldCondition name="Patienten-ID">
<ParamValue ref="PatientID"/>
</FieldCondition>
</ConditionObject>
<ConditionObject name="Aufenthalt">
<FieldCondition name="Fall-ID">
<ParamValue ref="Visit"/>
</FieldCondition>
</ConditionObject>
</Conditions>
<ChildObjects child_schema="def" export_depth="5">
<SubObjectType name="Aufenthalt">
<Fields>
<Field name="Fall-ID"/>
<Field name="Aufnahmedatum"/>
</Fields>
</SubObjectType>
<SubObjectType name="Bewegung">
<Fields fields_shema="ALL"/>
</SubObjectType>
</ChildObjects>
</ObjectType>
</Archive>
</DMSQuery>
DMS-Query mit eingefügten Parametern zur Übergabe an den DMS-Executor:
<?xml version="1.0" encoding="ISO-8859-1"?>
<DMSQuery>
<Params>
<Param name="Surname">Meier</Param>
<Param name="Firstname">Er*</Param>
<Param name="Visit">28*</Param>
</Params>
<Archive name="PATIENT">
<ObjectType name="Patient">
<Fields>
<Field name="Patienten-ID"/>
<Field name="Name"/>
<Field name="Vorname"/>
</Fields>
<Conditions>
<ConditionObject name="Patient">
<FieldCondition name="Vorname">
<ParamValue ref="Firstname"/>
</FieldCondition>
<FieldCondition name="Name">
<ParamValue ref="Surname"/>
</FieldCondition>
<FieldCondition name="Patienten-ID">
<ParamValue ref="PatientID"/>
</FieldCondition>
</ConditionObject>
<ConditionObject name="Aufenthalt">
<FieldCondition name="Fall-ID">
<ParamValue ref="Visit"/>
</FieldCondition>
</ConditionObject>
</Conditions>
<ChildObjects child_schema="def" export_depth="5">
<SubObjectType name="Aufenthalt">
<Fields>
<Field name="Fall-ID"/>
<Field name="Aufnahmedatum"/>
</Fields>
</SubObjectType>
<SubObjectType name="Bewegung">
<Fields fields_shema="ALL"/>
</SubObjectType>
</ChildObjects>
</ObjectType>
</Archive>
</DMSQuery>
Hinterlegtes Stylesheet (query_patients.xsl):
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:output method="xml"/>
<xsl:template match="/">
<xsl:element name="PatientData">
<xsl:apply-templates
select="DMSContent/Archive/ObjectType[@name='PATIENT']/ObjectList"
mode="Patient"/>
</xsl:element>
</xsl:template>
<!--
Patientendaten ausgeben
-->
<xsl:template match="Object" mode="Patient">
<xsl:element name="Patient">
<xsl:attribute name="OSID">
<xsl:value-of select="@id"/>
</xsl:attribute>
<xsl:attribute name="Surname">
<xsl:value-of select="Fields/Field[@name='Name']"/>
</xsl:attribute>
<xsl:attribute name="Firstname">
<xsl:value-of select="Fields/Field[@name='Vorname']"/>
</xsl:attribute>
<xsl:attribute name="PatientID">
<xsl:value-of select="Fields/Field[@name='Patienten-ID']"/>
</xsl:attribute>
<xsl:apply-templates
select="ChildObjects/ObjectType[@name='Aufenthalt']/ObjectList"
mode="Aufenthalt"/>
</xsl:element>
</xsl:template>
<!--
Aufenthalte ausgeben
-->
<xsl:template match="Object" mode="Aufenthalt">
<xsl:element name="Aufenthalt">
<xsl:attribute name="OSID">
<xsl:value-of select="@id"/>
</xsl:attribute>
<xsl:attribute name="Fall-ID">
<xsl:value-of select="Fields/Field[@name='Fall-ID']"/>
</xsl:attribute>
<xsl:attribute name="Aufnahmedatum">
<xsl:value-of select="Fields/Field[@name='Aufnahmedatum']"/>
</xsl:attribute>
<xsl:apply-templates
select="ChildObjects/ObjectType[@name='Bewegung']/ObjectList"
mode="Bewegung"/>
</xsl:element>
</xsl:template>
<!--
Bewegungen ausgeben
-->
<xsl:template match="Object" mode="Bewegung">
<xsl:element name="Bewegung">
<xsl:attribute name="OSID">
<xsl:value-of select="@id"/>
</xsl:attribute>
<xsl:attribute name="Zeitpunkt">
<xsl:value-of select="Fields/Field[@name='Zeitpunkt']"/>
</xsl:attribute>
<xsl:attribute name="Bewegungsart">
<xsl:value-of select="Fields/Field[@name='Bewegungsart']"/>
</xsl:attribute>
<xsl:attribute name="Patientenstatus">
<xsl:value-of select="Fields/Field[@name='Patientenstatus']"/>
</xsl:attribute>
<xsl:attribute name="KSt">
<xsl:value-of select="Fields/Field[@name='KSt']"/>
</xsl:attribute>
<xsl:attribute name="Fachabteilung">
<xsl:value-of select="Fields/Field[@name='Fachabteilung']"/>
</xsl:attribute>
<xsl:attribute name="interne-Bew-ID">
<xsl:value-of select="Fields/Field[@name='interne Bew-ID']"/>
</xsl:attribute>
<xsl:attribute name="externe-Bewegungs-ID">
<xsl:value-of select="Fields/Field[@name='externe Bewegungs-ID']"/>
</xsl:attribute>
<xsl:attribute name="Herkunft">
<xsl:value-of select="Fields/Field[@name='Herkunft']"/>
</xsl:attribute>
<xsl:attribute name="storniert">
<xsl:value-of select="Fields/Field[@name='storniert']"/>
</xsl:attribute>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
Erzeugtes Ergebnis:
<?xml version="1.0" encoding="UTF-16"?>
<PatientData>
<Patient OSID="575" Surname="Meier" Firstname="Erwin" PatientID="188123">
<Aufenthalt OSID="576" Fall-ID="287084" Aufnahmedatum="26.08.2003">
<Bewegung OSID="577" Zeitpunkt="20030826101449" Bewegungsart=""
Patientenstatus="I" KSt="" Fachabteilung="" interne-Bew-ID=""
externe-Bewegungs-ID="" Herkunft="" storniert="" />
</Aufenthalt>
</Patient>
</PatientData>