|
2112portals.com ist Hersteller von Software im Bereich
SAP i.s.h.med mit Schwerpunkt Medizinkontrolling
und Klinische Dokumentation. Wir
veröffentlichen technische Hinweise zu unseren Arbeiten im Bereich
‚parametrierbare medizinische Dokumente’. Dieser Bereich
ist vom Hersteller sehr sparsam dokumentiert. Alle hier veröffentlichten Source
Codes, Hinweise und Verfahren sind OPEN SOURCE unter der GPL V3 Lizenz.
|
|

Entwicklung eines Dialyse PMD, das sowohl als allein stehendes Dokument, als auch eingebettet innerhalb anderer Dokumente verwendet werden kann(Zentral/Filialdokument).
Diese Eigenschaft beseitigt Redundanz in der Entwicklung und Datenhaltung: Da es nur eine Instanz des Dokumentes gibt, werden die Daten nur einmal gespeichert. Andere Dokumente betten das PMD über ein Linkelement ein, und brauchen keine eigenen Anzeigeelemente für Dialysen.
Über das Linkelement ist ebenso die Änderbarkeit der Dialysen in Dokumenten möglich, die das Dialyse-Linkelement verwenden.
Die Änderungen werden in die Zentralinstanz übernommen und dort gespeichert – alle Verwender sehen die Daten als gemeinsames Dokument.
Notwendige
Eigenschaften:
Ein Teil der Lösung ist gemäß den Standard-Vorgaben zur Implementierung von Linkelementen der GSD implementiert. Hierzu gehört eine Funktionsgruppe mit einem Funktionsbaustein, der zur Laufzeit für verschiedenen Ereignisse aufgerufen wird(PBO, SAVE, SET_FOCUS), und einer Klasse, die Methoden implementiert, die aus dem FuBa zur Laufzeit zu verschiedenen Zeitpunkten(PBO, Save, …) aufgerufen werden.
Ein Customizing für das Linkelement wurde nicht implementiert.
Aufbauend auf dieser Grundkonstruktion wurden drei weitere Klassen, Strukturen, Suchhilfe und Datenelemente erstellt.
Bei der Entwicklung wurde die, in der SAP-Welt in Zusammenhang mit ABAP OO oft favorisierte, „Überakademisierung“ zu Gunsten eines verstehbaren Anwendungsmodells über Bord geworfen. So kommt die Anwendung mit wenigen Klassen und Interfaces aus, mit dem Ziel Wartbarkeit und Einfachheit zu fördern.
|
Objekt |
Typ |
Beschreibung |
|
ZZ_DIALYSE |
PMD |
Dialyse
Dokument. Entwicklungs-
PMD für das Linkelement. |
|
ZZ_TEST000(001, 002, 003) |
PMD |
Ein
PMD, zur Einbettung des Dialysen-Linkelementes (Simuliert ein Intensiv, oder
Blutdokument). |
|
ZZ_DIALOPS ZZ_DIALART |
DokEl
|
Elemente
zum Einbau in das Dialyse Dokument. |
|
/GRN/ZNPMD1 |
PAKET |
|
|
/GRN/LNK_DIALYSE |
FGR |
Linkelement
Funktionsbaustein |
|
/GRN/DIA_MIGRATE_ZINTDOKU |
FM |
Funktionsbaustein
für Migration von Dialysen des alten(Generator 1) Intensivdokuments. Migrationsbausteine werden vom Linkelement
immer aufgerufen, wenn die Datenselektion ausgeführt wurde. Diese können dann
alte Dialysen, von anderen Datenquellen in die neue Dialyse übernehmen. Migrationsbausteine
werden dynamisch
über das Präfix /GRN/DIA_MIGRATE_
und dem
Dokumentnamen des einbetteten PMD aufgerufen. |
|
/GRN/CL_PMD_LNK_DIALYSE |
KLASSE |
Klasse
mit Methoden, die aus der Funktionsgruppe aufgerufen werden. |
|
/GRN/CL_PMD_DIALYSE_BL |
KLASSE |
Business
Logik Klasse. |
|
/GRN/CL_PMD_DIALYSE_DATA |
KLASSE |
Datenklasse
zur Speicherung einer internen Tabelle mit PMD Daten. Diese Klasse verfügt
über keinerlei Methoden. |
|
app_alv_grid_tmpl |
KLASSE(lokal) |
Eine
lokale Klasse, die die ALV-Grid-Funktionalität
beinhaltet. |
|
lcl_handle_events |
KLASSE(lokal) |
Lokale
Klasse mit der Definition von Ereignissen für den ALV-Grid. |
|
/GRN/F4_DIALYSE /GRN/PMD_DIALYSE_DATA /GRN/PMD_DIALYSE_META_DATA |
Tabellentypen |
|
|
Z_CHKPG_ALV_HDLR Z_CHKPG_PMD_LNKEL Z_CHKPG_PMD_LNKEL_BL Z_CHKPG_PMD_LNKEL_CL Z_CHKPG_PMD_LNKEL_FGR |
CHECKPOINTGRUPPE |
|
|
/GRN/CX_INVALID_DATE /GRN/CX_NO_SERVICE |
Exceptions |
|
|
/GRN/AE_DATUM /GRN/ANLAGE_DATUM /GRN/DATUM_BIS /GRN/DATUM_VON /GRN/DAUER /GRN/DIALYSE_ART /GRN/FILTRATIONS_ART /GRN/NC_DAUER_H /GRN/NC_DAUER_M /GRN/NC_UNTERBRECHUN /GRN/UNIQUE_LFDNR /GRN/ZEIT_BIS /GRN/ZEIT_VON ZZ_DIALYSE_TYP |
Datenelemente |
|
|
/GRN/ZNPMD1 |
Nachrichtenklasse |
|
|
/GRN/F4_DIALYSE /GRN/F4_FILTRATION |
Suchhilfe |
|
|
ZZPMD |
Typgruppe(Type Pool) |
|
|
/GRN/VW_DIASTAMM /GRN/VW_FLTSTAMM |
Views |
Diese
Views werden für die Suchhilfen verwendet. |
Zentraldokument ZZ_DIALYSE Filialdokument ZINTDOKU (Intensivdokumentation)


Das Linkeelement abstrahiert die multiple Struktur der PMD Dialysestrukturen in eine interne Tabelle.
Der Bezug zwischen diesen Strukturen wird über Namensgleichheit der Dokelemente mit den Feldern der internen Tabelle hergestellt.
Hinweis: jegliche Änderungen an den Namen wird dazu führen, dass Feldinhalte des PMD nicht angezeigt oder verarbeitet werden können, deshalb sollte hier mit einer gewissen Vorsicht bei Änderungen vorgegangen werden.
Die PMD-Technik hat die eigenart,
dass bei Mehrfachverwendung eines Dokelementes nur
das erste Dokelement den Originalnamen (i.e. ZZ_DIALOPS) erhält. Weitere Verwendungen führt zu
einer automatischen Umbenennung des Dokel. So wird
aus ZZ_DIALOPS dann X00_DIALOPS.
Deshalb werden beim Mapping die ersten drei Zeichen N I C H T B R Ü C K S I C H T I G T.
Bei der Verwendung eines Dialyse-Dokumentes als eingebettetes Dokument innerhalb eines anderen PMD muss entweder eine Verbindung zum Dialyse-PMD hergestellt werden, oder (wenn noch kein Dia PMD erstellt wurde) ein neues Zentraldokument aus dem einbettenden PMD heraus erfolgen.
Die Verbindung zu einem externen Dialyse-Dokument wird über die Eindeutigkeit von Patientennummer und Fallnummer hergestellt.
Beim Start des Linkelements sucht dieses nach Dokumenttypen der Dialyse mit dem Schlüssel zu Patient und Fall (/GRN/CL_PMD_LNK_DIALYSE -> DOCUMENT_EXISTS) mit dem Funktionsbaustein ISH_N2_MEDDOC_GETLIST.
Wenn mehrere Dokumente gefunden werden, dann wird das mit der höchsten Versionsnummer ausgewählt.
Ein neues Dialyse-PMD innerhalb eines PMD wird über den Funktionsbaustein ISH_N2_MEDICAL_DOCUMENT (mit oder ohne Dialog) angelegt.
Stellt das Linkelement fest, dass kein passendes Zentraldokument existiert, wird im UI (User Interface, ALV Tree) eine Schaltfläche eingeblendet, mit der das Anlegen ausgeführt werden kann.
Jedes Zentraldokument beinhaltet sich selbst – d.h. (technisch) das Linkelement ist in das PMD, auf das es verknüpft wiederum selbst eingebaut.
Das hat den Hintergrund, dass damit erreicht werden kann, einem Benutzer identische Oberflächen zu präsentieren, gleich, ob er sich im Zentral- oder Filialdokument befindet.
Normalerweise werden die Dialysen als multiple Strukturen des PMD in einem Table-Control angezeigt und auch über diese abgespeichert.
Diese Strukturierung bleibt beibehalten, allerdings werden
diese Table-Controls unsichtbar gemacht.
An deren Stelle tritt eine UI-Kombination aus ALV-Tree und ALV-Grid(siehe
unten).
Aus Entwicklungssicht hat dieses den Vorteil, dass auch nur eine Business Logik angewandt werden muss, da nur eine Komponente verwaltet werden muss.
Eine Schwierigkeit bildet allerdings beim Self Containment die Gefahr von Rekursionen beim Sichern und verlassen des Dokuments, die aber natürlich gelöst wurden.
Die Lösung ermöglicht es, dem Benutzer berechnete(Zeitdauern, Unterbrechungen) oder anderweitig beschaffte Daten(ORGFA, OPS-Ziffern) zu präsentieren, die nicht in das Dokument abgespeichert werden brauchen.
Beispielsweise würde man zur Anzeige der Dialysedauer ein Feld in die multiple Struktur aufnehmen, um diese im Table-Control anzuzeigen, mit dem Nachteil, dass dieses Feld sich in der Datenbank wieder findet.
Die Verwendung einer ALV-Liste ist vergleichbar einem VIEW, mit der Möglichkeit berechnete Werte (Dauern, Unterbrechungen usw.) anzuzeigen, die nicht abgespeichert werden müssen.
Allgemeines
Das Dialysedokument besteht aus drei Teilen:
Die Flächen sind durch verschiebbare Balken mit Griffen jeweils horizontal und vertikal manuell veränderbar.
Ein Doppelklick auf einen Knoten der Dialysen oder Filtrationen öffnet in der rechten Seite die jeweilige Liste in Größe der vollen Fläche.
Dialysen Filtrationsfläche Übersicht Verschiebegriffe zur vertikalen und horizontalen Teilung
der Fächen.
![]()




Ein Dialysedokument kann Zentral- oder Filialdokument sein.
Dokumenttyp ist ‚ZZ_DIALYSE’.
Hinweis: Als Zentraldokument
wird das eigentliche Dialysedokument bezeichnet, Filialdokument(e) sind alle
Dialysedokumente, die in anderen Dokumenten beinhaltet sind.
Entsprechend kann die Anlage über die Transaktion N201 mit dem Dokumenttyp des Dialsyse-PMD oder aus einem einbettenden PMD (Intensiv, Blut) erfolgen.
Dokumente können wie üblich mit der Transaktion N201 oder aus dem Klinischen Arbeitsplatz angelegt werden.

Anschliessend steht das Zentraldokument zur Bearbeitung bereit.

Um ein eingebettetes Dokument zu erzeugen, wird zunächst das (äussere, oder beinhaltended) Hauptdokument angelegt(Intensiv-, Blutdokument usw.).
Hier haben wir zur
Demonstration nur ein einfaches Testdokument als Beispiel genommen.

In der linken Ebene der Dialysen ist die Schaltfläche ‚Dialyse Dok anlegen’ aktiv.
Durch Anklicken dieser Schaltfläche wird der Standardanlage-Dialog ausgeführt, und die Daten für das Dialysedokument können eingegeben werden.
Anschliessend wird diese Schaltfläche verborgen und es ist nur noch die Schaltfläche ‚OPS Abgleich’ sichtbar, mit der ein Abgleich der OPS Ziffern gestartet werden kann.
Anm: OPS Ziffernableich erfolgt
aber immer automatisch beim Speichern des Dokumentes.
Beispiel Einbettung der Dialyse in die Intensivdokumentation.
In dieser Abbildung ist die Dialyseerfassung in die Intensivdoku eingebettet und über eine Kartenreiter erreichbar.

Neue Einträge für Dialysen oder Filtrationen können über die Schaltfläche ‚+’ oberhalb der jeweiligen Liste angelegt werden.
Die Zeiten werden mit der aktuellen Uhrzeit und Datum eingetragen, so daß zunächst eine neutrale Dauer von Null Minuten berechnet wird.
Hinweis:
Die ORGEinheit für den
jeweiligen Eintrag wird automatisch aus den Bewegungen des Falles berechnet.
Kann keine Zuordnung ermittelt werden, wird ein
Eintrag in das Fehlerprotokoll gemacht. Dieses Protokoll lässt sich in der
linken Fläche unterhalb der
‚Meldungen’ anzeigen.
Wichtig:
Berechnungen und Verarbeitung der Liste erfolgen erst nach dem Betätigen der
Enter-Taste auf der Liste (ein Standardverhalten der verwendeten Liste).
Die Felder OrgEinheit, Minuten, und OPS sind nicht änderbar durch den Benutzer, diese werden immer berechnet.
Über die Schaltfläche ‚-’ können eine oder mehrere markierte Dialysen wieder aus der Listeentfernt werden. Die Änderung wird nach dem Speichern in das System übernommen.
Mit der Kopieren Schaltfläche können ein oder mehrere markierte Listeneinträge dupliziert werden.
Hinweis: Das Markieren mehrerer Einträge ist eine S*P Standard und kann durch das Drücken der Taste ‚STRG’ und gleichzeitiges anklicken einer der Markierungen einer Liste (linker Rand) erfolgen.
Ziffernabgleich bewirkt, dass die eben eingegebenen Daten, die zu OPS Ziffern berechnet wurden, mit dem KIS ‚abgeglichen’ werden.
Hier ist das Dialyse Dokument das ‚führende System’ – d.h. alle OPS Ziffern, die in der Dialyse erfasst wurden werden in das KIS übernommen, OPS, die im KIS bereits vorhanden sind, und nicht mit den erfassten Daten deckungsgleich sind, werden aus dem KIS entfernt. Die DRG müssen danach neu berechnet werden.
(Der OPS Abgleich ist
Bestandteil des Produktes ‚OPS Collector’ und als
separates Produkt verfügbar.)
OPS Ziffern der Dialysen werden jedes Mal berechnet, wenn die Enter-Taste in einer Liste gedrückt wird (und Änderungen gemacht wurden).
Der Abgleich aller OPS Ziffern mit dem IS-H System erfolgt entweder automatisch beim Sichern des Dokuments, oder manuell durch drücken der Schaltfläche "OPS Abgleich", oder automatisch, wenn das Dokument gespeichert wird.
©2010 Frank Kempf, Waldstr. 19, D-76684 Östringen 2112portals.com
This
program is free software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
Foundation; either version 3 of the License, or (at your option) any later
version.
This
program is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE. See the GNU General Public
License for more details.
You should
have received a copy of the GNU General Public License along with this program;
if not, see <http://www.gnu.org/licenses/>.