EMIL Plattform API

<< Klicken Sie, um das Inhaltsverzeichnis anzuzeigen >>

Navigation:  Technisches >

EMIL Plattform API

Das EMIL Platform API ist eine HTTP/POST basierte Schnittstelle, die Fremdsystemen eine direkte Kommunikation mit dem EMIL-Applikationsserver ermöglicht. Die Funktionsreferenz finden Sie hier.

Beachten Sie unbedingt die Netzwerkhinweise unter Netzwerk, DMZ und Firewall wenn der Zugriff auf das EMIL-API von außerhalb des lokalen Netzwerks erfolgen soll!

Einstellungen dazu werden unter werden unter Administration|Schnittstellen unter dem Punkt EMIL Plattform API vorgenommen. Für diese Funktionen ist keine Plus-Funktionalität erforderlichten.

clip0468

Für die Nutzung des API benötigt man ein für jedes Fremdsystem erstelltes und eindeutiges Token), das ausschließlich von ITC ausgestellt wird. Es ist nicht zu verwechseln mit dem Abfragetoken der der Query Schnittstelle (1)!. Anwendungen, die über das API andocken wollen, müssen zudem sicherheitshalber explizit vom EMIL-Administrator einmalig freigegeben werden um zu verhindern, dass unbemerkt andere Systeme auf EMIL zugreifen und Daten lesen, ändern oder hinzufügen.

Wichtiges zur Datenstruktur

Um sinnvoll mit der Query-Schnittstelle zu arbeiten, ist ein Verständnis der EMIL-Datenstrukturen sehr wichtig. Dies gilt gleichermaßen als Grundlage für die Nutzung der Abfrageschnittstelle und für das API für Softwareentwickler. Grundprinzip der Datenhaltung ist das Single Point of Truth Prinzip.

Datenbereiche

EMIL teilt die Daten in drei Datenbereiche ein.

Stammdaten sind zusammen mit dem Patienten (Subject) in einer Tabelle gespeichert und haben vorwiegend informativen und identifizierenden Charakter. Beispiele sind Wohnort, Name, Telefonnummer

Feste Daten sind Daten, die pro Patient nur einmal vorkommen. Sie haben deshalb auch kein Datum. Beispiele sind Anamnese, Geschlecht, Geburtsdatum, Krankenversicherung.

Verlaufs- und Labordaten sind Daten, die pro Patient mehrfach vorkommen können. Dabei gilt, dass eine Information zu einem Patient und einem Zeitpunkt immer nur einmal existiert. Obwohl dies selbstverständlich klingt, erlauben viele andere Systeme, die selbe Information an verschiedenen Stellen zu speichern und erlauben damit widersprüchliche Datensituationen. Beispiele für Verlaufs- und Labordaten sind Bludruck, behandelnder Arzt, CRP, HbA1C.

Da sich feste Daten von den Verlaufs- und Labordaten nur insofern unterscheiden, dass sie kein Datum haben, werden sie technisch gemeinsam als Items betrachtet. Items in EMIL können verschiedene Datentypen beherbergen wie Zahlenwerte, Text, Listen, Datumsangaben und auch Formulare.

Formulare ermöglichen es, zu einem Item mehrere Detailinformationen zu speichern. Das Item WHO5 beispielsweise repräsentiert einen Score als Itemwert. Die Fragen, aus denen dieser Score berechnet wird, machen das Formular aus und werden technisch als Subitems betrachtet. Sie werden am Item in einer JSON Datenstruktur gespeichert. Für die Query-Schnittstelle werden diese Subitems in eine zusätzliche Tabelle ausgelagert, da Statistiksysteme erfahrungsgemäß mit JSON Werten in Tabellenspalten nicht gut umgehen können.

Für die Entwicklung allgemeingültiger Schnittstellen, die in ein Produkt integriert werden sollen, sollte als Referenzsystem eine aktuelle aber nicht mit eigenen Strukturen angepasste Version verwendet werden, damit man nur Strukturen referenziert, die verlässlich in allen Systemen vorhanden sind. Entwickelt man hingegen eine einrichtungsspezifische Schnittstelle, sollte dies natürlich gegen ein Entwicklungssystem geschehen, das die gleichen Datenstrukturen aufweist, um alle Daten referenzieren zu können.

Auditing

Alle über diese Schnittstelle geschriebenen Daten werden im EMILAudit-Trail protokolliert. Dazu wird für jedes API Token im System ein interner Benutzer angelegt, unter dem diese Änderungen im Audit-Trail ganz klar dem jeweiligen System zugeordnet werden können (1) - hier der Systemname API-Developing. Als Quellrechner wird immer der EMIL-Server angegeben (2).

clip0489

Die bidirektionale Schnittstelle wird über den URL

https://<EMIL-Server>:8450/api

angesprochen. Wurde der EMIL-Serverport verändert, so gilt hier der gleiche Port, der für den Client festgelegt wurde. Er kann im Zweifelsfall aus der Datei CONFIG.INI im EMIL-Serververzeichnis entnommen werden. Anfragen werden als Multipart-Form gestellt und generieren entweder HTTP-Fehler oder eine JSON Antwort. Die Zeichenkodierung ist durchgängig UTF-8.

Die Anfrage benötigt immer zwei Felder im Multipart-Form:

token -> Das von ITC zugeteilte Token (base64)

payload -> Die Anfrage an den EMIL-Applikationsserver in JSON

Token

Das Token wird von ITC an den Hersteller ausgegeben. Die Token sind grundsätzlich ein Jahr gültig. Systeme, die das Token verwenden, sollten einen Updatemechanismus für das Token berücksichtigen. In jedem Fall wird das Token nur auf der Seite des andockenden Systems gebraucht. Es gibt drei verschiedene Tokenarten

Entwicklertoken (Schutzgebühr).
Kann nur mit einer benannten EMIL-Instanz und einer fiktiven, von ITC zugeteilten BSNR betrieben werden.

Kundentoken (Jährliche Lizenzkosten, für eigene Schnittstellenkreationen in einer Einrichtung).
Kann nur mit einer benannten EMIL-Instanz und einer realen BSNR betrieben werden.

Systemtoken (Jährliche Lizenzkosten, für Systeme, die an beliebige EMIL-Instanzen andocken sollen).
Kann mit beliebig vielen unterschiedlichen EMIL-Instanzen betrieben werden. Ist für die Integration in Systeme gedacht, die dauerhaft mit EMIL kommunizieren.

Technische Fragen und Fragen zu Lizenzgebühren richten Sie bitte an service@itc-ms.de.

Payload

Alle relevanten Daten einer Anfrage an den EMIL-Applikationsserver sind in der payload JSON Struktur kodiert. Werden nicht benötigte Felder in der JSON Struktur angegeben, so werden diese ignoriert. Im Folgenden findet sich eine Spezifikation aller möglichen Anfragen jeweils mit einem Beispiel. Parameter wir Type-IDs etc. sind vor der Konstruktion einer Abfrage über die unter Referenzierung beschriebenen Methoden zu ermitteln. Sofern es sich nicht um kundenspezifische Items (Selbst angelegte Items, selbst definierte Studien) handelt, kann man sich dabei darauf verlassen, dass diese ID und Codes für alle EMIL-Instanzen durchgängig gleichermaßen gültig sind.

Die payload-Struktur sieht grundsätzlich so aus. Der request Parameter ist immer erforderlich, die anderen richten sich nach der Art der Anfrage, dort ist jeweils angegeben, ob ein Parameter optional oder erforderlich ist.

 "request": "getchanged",

 "fromdate": "2021-12-10T13:45:00.000Z",

 "enrolled": "1001,1002",

 "checkitems": "101,102,104"

}

Die Antwort auf diese Anfrage könnte so aussehen:

 "subjectids": "1,2,444,665,43,567,678,7,888,23123,33,4454,3322",

}

Ein weiteres Beispiel für die Aktualisierung eines Questionnaires, hier Versichertendaten (TypID 104) für Patient 33647 zum Zeitpunkt 10.12.2021:

{

    "request": "setitem",

    "subjectid": 33647,

    "refdate": "2021-12-10T00:00:00.000Z",

    "typeid": 104,

    "textvalue": "Techniker Krankenkasse",

    "questionnaire": {

        "cmbAccount": "00",

        "edIK": "101575519",

        "cmbInsurance": "101575519",

        "edInsNum": "M123456789",

        "edValidFrom": "",

        "edValidThru": "",

        "edWOP": "",

        "edInsKind": "",

        "edPersGrp": "",

        "edDMP": ""

    }

}

Alle Angaben innerhalb der Questionnaire-Struktur sind optional und können - wenn sie leer sein sollen - weggelassen werden. Wichtiger Hinweis: Es können immer nur gesamte Items überschrieben werden, da diese immer einen Itemzustand repräsentieren und dieser Stand mit dem Autor im Audittrail protokolliert wird. Um ein einzelnes Subitem, z.B. die Versichertenart im KV-Questionnaire zu aktualisieren, muss der aktuelle Inhalt zunächst gelesen werden, die Information im gelieferten JSON aktualisiert und das Item wieder zurückgeschrieben werden.

 

Zeitzone von Datums- und Zeitangaben

Das EMIL Plattform-API erwartet und überträgt alle Datums- und Zeitangaben in der lokalen Zeitzone, da davon auszugehen ist, dass beide Systeme immer in der gleichen Zeitzone betrieben werden.

Aus dem 5.7.2019 12:15 Uhr wird also "2019-07-05T12:15:00.0Z" und umgekehrt.

 

Funktionsreferenz

Die Funktionsreferenz des API finden Sie unter Technisches/API Funktionsreferenz.

 

Fehlerbehandlung

Grundsätzlich werden alle Anfragen verarbeitet und mit dem HTTP Ergebniscode 200 quittiert. Tritt dabei ein Fehler auf, wird eine Nachricht in form eines JSON Objekts zurückgeliefert. Nur dann, wenn der Fehler eine Antwort des Applikationsservers verhindert, wird HTTP Fehler 500 geliefert. In diesem Fall kann die Ursache des Fehlers im EMIL-Applikationsserverprotokoll nachgesehen werden. Übliche Fehler führen zu dieser zu einer gültigen JSON Struktur mit Informationen über den Fehler:

{

  "errorcode": 1011,

  "errordetails": "lastname exeeds length (max 69)"

}

Errorcode ist einer der Codes in der folgenden Tabelle. Bei manchen Codes werden Details zur Eingrenzung des Fehlers im Feld errordetails geliefert. Errordetails ist nur vorhanden, wenn es einen Inhalt hat.

Code

Bedeutung

1000

Es wurde eine ungültige Anfrage gestellt: Das Feld request ist nicht vorhanden oder mit einem ungültigen Wert gefüllt.

1001

Es wurde kein Token übergeben.

1002

Das Token ist ungültig oder wurde manipuliert.

1003

Es wurde kein gültiges JSON als payload übergeben.

1004

Das Token ist gültig, aber der Zugriff nicht zugelassen, da der EMIL-Administrator für diese Anwendung den Zugriff (noch) nicht zugelassen hat. Dieser weitere Schritt ist aus Sicherheitsgründen nötig, um unzulässige Zugriffe über andere Applikationen auszuschließen. Der EMIL-Administrator kann das System unter Schnittstellen/EMIL-API zulassen.

1005

Das Token ist abgelaufen.

1006

Das Token hat einen ungültigen Typ.

1007

Das Token ist für eine andere Instanz gültig.

1008

Nicht alle Pflichtparameter wurden angegeben.

1009

Fehler in einem Parameter, Details finden sich in errordetails.

1010

Die Anfrage hat einen Fehler ausgelöst, der eine Verarbeitung des Anfrage verhindert, jedoch eine Antwort des Servers ermöglicht. Daher kommt nicht HTTP Fehlercode 500 sondern eine JSON Antwort. Details zur internen Fehlernachricht finden sich in errordetails.

1011

Die maximal zulässige Anzahl Zeichen in einem Feld wurde überschritten. Details finden sich in errordetails.

1012

Der Bereich, in dem ein Item geändert werden soll, ist durch den Administrator durch eine Aktensperre gesperrt.

1013

Es wurde versucht, auf einen Itemtyp zu schreiben, der nicht beschrieben werden kann (z.B. kalkulierter Score).