
Guten Tag. Mein Name ist Andrey, ich arbeite in einem Unternehmen, das IT-Lösungen im Bereich der Medizin entwickelt. Als Hauptentwicklungssprache verwenden wir Clojure sowie (je nach Projekt / Modul) Python, Javascript, Go, C, C #, Rust, Objective-C usw.
Ein wichtiger Platz in unserem technologischen Stack ist der internationale Standard
FHIR (Fast Healthcare Interoperability Resources), der das Format für das Speichern / Austauschen / Bereitstellen medizinischer Informationen in elektronischer Form definiert und die
RESTful-API- Spezifikation für die Client-Server-Interaktion enthält.
Vor einiger Zeit habe ich ein Haustierprojekt einer Anwendung gestartet, das den Inhalt von Ressourcen eines beliebigen FHIR-Servers visualisiert und es Ihnen ermöglicht, grundlegende CRUD-Operationen auszuführen. Das KDPV zeigt einen Screenshot der Bearbeitungsseite für ein Ressourcenelement vom Typ Patient.
Unter der Katze gibt es eine kurze Beschreibung und einen Link zu einer Online-Demo - es wird möglich sein, einen echten Live-FHIR-Server zu berühren, Schaltflächen zu drücken, verschiedene Ressourcen anzuzeigen / zu erstellen / zu bearbeiten und sogar zu versuchen, denselben Habra-Effekt aufzurufen! )
Ein paar Worte zu FHIR
Ich werde die Beschreibung des Standards hier nicht umschreiben. Wer möchte, kann alle Details über den obigen Link erfahren, andere Materialien zu verschiedenen Ressourcen lesen, Fragen stellen und an der Diskussion im
FHIR-Chat teilnehmen . Ich werde nur eine allgemeine Idee geben: Das zentrale Konzept ist eine Ressource, Ressourcen sind nach Typen und Gruppen unterteilt, jeder Typ hat seine eigene Feldstruktur, deren Werte primitive oder zusammengesetzte Typen und Verknüpfungen zu anderen Ressourcen sein können. Felder können obligatorisch oder optional sein, einen Wert oder eine Sammlung von Werten enthalten. Beispielsweise enthält die
Patientenressource Felder eines primitiven Typs: Geburtsdatum / Geschlecht / ..., zusammengesetzter Typ: Name / Adresse / ...., Links zur Organisation und die Liste der behandelnden Ärzte usw.
Für jede Ressource wird der Verlauf ihrer Änderungen als Liste von Status mit den Daten ihrer Relevanz und der Versionsnummer des Objekts gespeichert. Mit der RESTful-API können Sie Metadaten über die Zusammensetzung und Struktur der von diesem FHIR-Server unterstützten Ressourcen anfordern, eine Liste von Ressourcenelementen aller Art mit umfangreichen Filterfunktionen nach den Werten einzelner Parameter, die Einbeziehung abhängiger Ressourcen, die Ausgabe der Ergebnisse auf die Werte der aufgelisteten Felder beschränken, das Abfrageergebnis nach komplexen Kriterien sortieren und usw. Es gibt auch Methoden zur Unterstützung von CRUD auf der Ebene eines Ressourcenelements - Erstellen / Aktualisieren mit Strukturüberprüfung und Vorhandensein vorhandener Felder, Löschen eines Elements. Es gibt API-Methoden zum Anzeigen des Änderungsverlaufs sowohl auf Elementebene als auch auf Ressourcentypebene.
In einer typischen Anwendung wird die Verwendung dieser generischen API durch eine dicke Schicht von Geschäftslogik für einen bestimmten Client abstrahiert. Wenn ein Patient beispielsweise einen Arztbesuch vereinbart, werden er nach Daten über die Anzahl seiner Krankenversicherungen und deren Gültigkeitszeiträume, die Vorgeschichte früherer Besuche, Informationen über das Gleichgewicht der Vergleiche zwischen dem Patienten und der Klinik usw., Daten über den Zeitplan des ausgewählten Arztes und die Verfügbarkeit von Stunden für die Aufnahme usw. gefragt. .p. Und all dies wird bequem auf dem Bildschirm des Arbeitsplatzes des Mitarbeiters dargestellt, der die Aufzeichnung vornimmt. Oder der automatische Taskplaner startet regelmäßig einen Prozess gemäß einem festgelegten Zeitplan, fordert eine Liste der bevorstehenden Besuche an und sendet automatisch SMS an Patienten mit Texterinnerungen oder Benachrichtigungen gemäß vordefinierten Vorlagen.
Aber ich kam auf die Idee, eine universelle Visualisierung des Inhalts der Ressourcen des FHIR-Servers zu erstellen, und so entstand ein Projekt namens ...
Ihr Gesicht
Mit der Anwendung können Sie eine Verbindung zu einem beliebigen FHIR-Server herstellen und den Inhalt von Ressourcen und die grundlegende CRUD anzeigen. Eine der Schwierigkeiten eines solchen universellen Ansatzes besteht darin, dass verschiedene Server unterschiedliche Versionen des FHIR-Standards haben können, ihn nicht vollständig implementieren, Abweichungen in der Liste, Zusammensetzung und Struktur von Ressourcen und APIs aufweisen und zusätzliche Funktionen aufweisen, die nicht in der Spezifikation enthalten sind . Wenn Sie auf diesem Server jedoch Metadaten zur Zusammensetzung und Struktur der unterstützten Ressourcen anfordern können, können Sie deren Unterstützung in diesem Projekt hinzufügen.
Die Projektoberfläche ist intuitiv. Die Serveradresse wird über den Adressleistenparameter ausgewählt, in der aktuellen Demoversion
ist jedoch standardmäßig hapi.fhir.org ausgewählt. Auf der Startseite werden die Zusammensetzung und Struktur der Ressourcen heruntergeladen, und es wird vorgeschlagen, einen bestimmten Ressourcentyp auszuwählen, um dessen Inhalt anzuzeigen. Bei der Auswahl des Ressourcentyps wird eine Anforderung für eine begrenzte Anzahl seiner Elemente gestellt, die in einer Tabelle mit Spalten angezeigt werden: Bezeichner, bedingte Benutzerdarstellung (falls möglich) und Größe in Zeichen der Zeichenfolgenserialisierung. Eine Volltextsuche nach dem Inhalt der Ressource funktioniert. Wenn Sie auf eine Tabellenzeile oder auf die Schaltfläche zum Erstellen eines neuen Elements klicken, wird auf die Seite des Inhalts des Ressourcenelements umgeleitet.
Oben auf der Seite des Elements befinden sich Schaltflächen zum vollständigen Falten / Entfalten von hierarchischen Inhalten und eine Schaltfläche zum Ändern des Präsentationsstils von Details. Der Inhalt des Elements wird durch eine Liste von Details dargestellt. Jedes Attribut hat einen Namen, einen Typ, eine Kurzbeschreibung und eine Bedeutung. Ein mit Schwarz links neben dem Attribut gefüllter Kreis bedeutet, dass dieses Attribut in der Ressource vorhanden ist (auch wenn sein Wert nicht ausgewählt ist - in diesem Fall hat das Attribut dieses Attribut, aber einen leeren Wert). Ein leerer Kreis zeigt das Fehlen dieses Attributs im Element, aber in der Liste an Einzelheiten zur Struktur dieses Ressourcentyps. Jedes Attribut kann dem Element hinzugefügt / daraus entfernt werden, indem Sie auf das Kreissymbol links neben dem Namen klicken. Details, die nicht in der Struktur des Ressourcentyps aufgeführt sind, aber im Element verfügbar sind, werden lila hervorgehoben.
Die Werte primitiver Typen werden durch die entsprechenden typisierten Widgets dargestellt - Datum, Uhrzeit, Nummer, Zeichenfolge usw. Das Symbol rechts neben den Zeichenfolgendetails wechselt den Texteingabe- / Bearbeitungsmodus - mit oder ohne Zeilenvorschub. Beim Bearbeiten ändert sich die Größe des Widgets automatisch in Abhängigkeit von seinem Inhalt. Beim Ausfüllen des Formulars werden alle Textfelder mit mehr als 50 Zeichen durch textArea-Widgets mit Zeilenvorschüben dargestellt. Link-Widgets werden durch den Typ der Link-Ressource und den Wert dargestellt. Wenn Sie einen Wert auswählen, funktioniert eine Volltextsuche nach dem Inhalt der Link-Ressource.
Details von zusammengesetzten Typen können reduziert werden, um die Anzahl möglicher und gefüllter untergeordneter Details hervorzuheben, oder mit einer Demonstration des Inhalts bereitgestellt werden. Wenn Sie auf den Namen / Typ / die Beschreibung der Anforderung klicken, wird eine vollständige Faltung / Entfaltung des Inhalts ausgelöst. Wenn Sie auf die Markierung klicken, ist die Anzahl der Felder die Entfaltung der nächsten Ebene der Anforderungen. Sammlungsattribute (mit einer beliebigen Anzahl von Werten) haben rechts neben der Attributbeschreibung ein
+ -Symbol, um der Sammlung neue Werte hinzuzufügen. Die Faltung / Entfaltung eines Sammlungselements (wenn es sich wiederum um einen Wert eines zusammengesetzten Typs handelt) erfolgt durch Klicken auf den am weitesten rechts liegenden Teil des Rahmens, der das Sammlungselement begrenzt. Wenn Sie auf das Kreuz in der oberen rechten Ecke des Rahmens klicken, wird das Sammlungselement gelöscht.
Über diese Schnittstelle können Sie den Inhalt einer beliebigen Ressource bearbeiten. Am unteren Rand der Seite befindet sich eine Schaltfläche zum Speichern der Ressource im bearbeiteten Zustand. Wenn eine Ressource geschrieben wird, überprüft der FHIR-Server ihren Inhalt. Wenn Fehler auftreten, zeichnet er die Ressource nicht auf, sondern gibt eine Liste der Überprüfungsfehler zurück. In diesem Fall wird der Text dieser Fehler unter der Schaltfläche Speichern rot angezeigt. Die Struktur des Objekts mit Validierungsfehlern wird von der Serverimplementierung bestimmt, daher wurde eine Variante seiner universellen Textdarstellung ausgewählt. Wenn keine Fehler vorliegen, wird das Ressourcenelement aufgezeichnet und zur Elementlistenseite zurückgeleitet.
Und schließlich die versprochenen Links:
Online-Demo des ProjektsGithub des Projekts - Die Katze ist kein Ausstellungskuscheltier, sondern ein lebender Arbeiter. Es gibt also kommentierte Bereiche, Gerüste und andere Elemente, die für Bau- und Installationsarbeiten erforderlich sind. Tragen Sie Helme.