- Drucken
Grundlagen der GxP-Anwendungsentwicklung
Dieser Artikel vermittelt Ihnen grundlegende Kenntnisse für die Erstellung von Anwendungen in GxP-Umgebungen.
Dieser Artikel setzt voraus, dass Sie die grundlegenden Tulip-Konzepte wie Variablen, Tabellen und Abschlusssätze kennen.
Sprache
Der Stil und die Sprache von Apps sollten zu ihrem Verwendungszweck passen. Standardarbeitsanweisungen, Arbeitsanweisungen und Methoden sollten in einem zwingenden, verbindlichen Stil geschrieben werden.
Versionierung
Bei der Veröffentlichung einer App wird empfohlen, die Art der Änderungen, z. B. Aktualisierung der Benutzeroberfläche, Fehlerkorrekturen o. ä., gegenüber der zuvor veröffentlichten App im Kommentarbereich zu beschreiben.
Standardinformationen, die auf jedem Schritt angezeigt werden müssen
Die folgenden Elemente sollten auf jedem Schritt angezeigt werden, um dem Benutzer den entsprechenden Kontext zu bieten:
- Der Name oder die eindeutige ID des Hauptelements, das mit der App verarbeitet wird. "Item", z. B. Charge, Auftrag, Ausrüstung oder Werkzeug, das verwendet oder verarbeitet wird. In manchen Fällen kann es mehrere Artikel geben. In den meisten Fällen sollte dies durch Erstellen oder Laden eines Tabellendatensatzes erreicht werden, der die Informationen am Anfang der App enthält.
- Der eingeloggte Benutzer
- Die Version der App
- Der Name des App-Schrittes
Es wird auch empfohlen, eine Abmeldeschaltfläche auf allen Schritten zu haben, die eine Aktion "Aktuellen Benutzer abmelden" auslöst.
Zeitstempel und Datumsformat
Die Zeitstempel im Abschlussdatensatz werden in UTC mit einem Offset für die Zeitzone erfasst. Die Formatierung von Datum und Uhrzeit kann auf Instanzebene für alle Apps eingestellt werden. Dies geschieht im Abschnitt "Datum und Uhrzeit" des Menüs "Einstellungen" der Instanz und muss von einem Kontoinhaber konfiguriert werden.
Elektronische Unterschrift mit dem E-Signatur-Widget erfassen
Um den ER/ES (Electronic Records / Electronic Signatures)-Vorschriften zu entsprechen, sollte eine Signatur den Unterzeichnern einen Kontext geben:
- "Was"
Kontext der Unterschrift, z.B. Charge, Auftrag, Ausrüstung, etc.
- "Warum"
Der Grund für die Unterschrift, z.B. Freigabe eines Prozessauftrags
Die folgende Struktur wird für Signaturen empfohlen:
- Gruppieren Sie Schritte, die eine elektronische Unterschrift erfordern, und fügen Sie das Widget für die elektronische Unterschrift in den letzten Schritt der Gruppe ein.
- Erstellen Sie ggf. einen zusammenfassenden Schritt vor dem Widget, der alle relevanten Daten enthält, um dem Unterzeichner den Kontext der Signatur zu vermitteln ("Was")
- Verwenden Sie den Titel des Formulars, z.B. "Unterschrift für den Neudruck von Etiketten", und die Bezeichnung des Benutzernamens, z.B. "Vorgesetzter", um den Grund für die Unterschrift zu definieren ("Warum").
Wenn die Unterschrift abgeschickt wird, protokolliert Tulip automatisch zusätzliche Informationen:
- "Wer" hat das Formular unterschrieben
- "Wann" die Unterschrift geleistet wurde
- Eventuell hinzugefügte Kommentare
Es ist zwingend erforderlich, die aktuellen Daten der App in einem unveränderlichen Abschlussdatensatz zu speichern. Dies kann auf zwei Arten erreicht werden:
- Durch die Verwendung der Aktion "Save All App Data" in einem "Custom Action"-Trigger auf dem Submit-Button des Signatur-Widgets.
- Durch das Abschließen der App, entweder mit der Standardeinstellung "App abschließen" für die Übermittlungsschaltfläche oder mit einer "App abschließen"-Aktion in einem "Benutzerdefinierte Aktion"-Trigger.
Aktion "Alle App-Daten speichern
Die "Save All App Data"-Aktion speichert die aktuellen Werte aller App-Variablen sowie die aktuellen Feldwerte aller geladenen Tabellendatensätze in einem Abschlussdatensatz der App. Abschlusssätze sind unveränderlich und können nicht gelöscht werden.
App Vervollständigung
Eine App Completion speichert die Daten auf die gleiche Weise wie die "Save All App Data" Aktion. Zusätzlich setzt eine App Completion alle Variablen auf ihren Standardwert zurück, aber die, die die Option "clear on completion" deaktiviert haben. Außerdem werden alle Platzhalter für Tabellendatensätze gelöscht. Nach Beendigung einer App ist es möglich, die gleiche App von vorne zu starten oder zu einem bestimmten Schritt innerhalb der gleichen oder einer anderen App fortzufahren. Dies kann in der "Transition" konfiguriert werden, mit der die Beendigung durchgeführt wird.
App-Abbruch
Ein App-Abbruch ist identisch mit einem App-Abschluss, jedoch werden alle Variablen auf ihren Standardwert zurückgesetzt.
Automatische App-Initialisierung
Für eine App, die während der Ausführung mehrfach abgeschlossen werden muss, z.B. aufgrund von Mehrfachsignaturen, empfiehlt es sich, den Kontext vor jedem Abschluss zu speichern, daher kann die App so konfiguriert werden, dass ihr Kontext nach dem Neustart automatisch wiederhergestellt wird. Der Kontext kann die ID von Tabellensätzen, z. B. der aktuellen Charge, und/oder Variablen, z. B. ein Zähler, sein. Es wird empfohlen, den App-Kontext in einer Tabelle zu speichern und dabei die "App Info: Station Name" als Datensatz-ID zu verwenden. Dieser Datensatz kann beim (Neu-)Start der App über einen "App Started"-Trigger geladen werden. Derselbe Ansatz kann verwendet werden, um einen nahtlosen Übergang zu einer anderen App zu erreichen.
Ähnliche Prinzipien können angewendet werden, um die App-Ausführung nach einem App-Abbruch wieder aufzunehmen, z. B. aufgrund eines Auto-Logouts oder der Auswahl von "Neustart" im Player-Menü. Für diese Anwendungsfälle empfiehlt es sich, einen Schrittnamen als zusätzliche Kontextinformation für die App zu speichern, die nach dem Neustart geöffnet wird. Dabei kann es sich entweder um den Namen des zuletzt angezeigten Schritts oder um einen bestimmten Schritt handeln, der zur Wiederherstellung geöffnet werden soll.
Ausnahmen und Aktivierung der Überprüfung nach Ausnahmen
Es wird empfohlen, eine Tulip-Tabelle zu verwenden, um alle Ausnahmen, die während der Ausführung der App auftreten, zu sammeln. Jede Ausnahme (Defekt, Beobachtung usw.) sollte als einzelner Datensatz in dieser Tulip-Tabelle gespeichert werden, einschließlich aller relevanten Informationen über die Ausnahme, d. h. Typ, Beschreibung, Datum/Uhrzeit, Anwendung, Bediener usw. Darüber hinaus sollte dieser Datensatz mit Hilfe der Funktion "Verknüpfte Datensätze" mit den Datensätzen aller Artefakte verknüpft werden, die mit der Ausnahme in Zusammenhang stehen, d. h. Charge, Auftrag, Material, Ausrüstung, Raum usw.
Aufzeichnungen, Aufzeichnungskorrekturen, Aufzeichnungshistorie
Es wird empfohlen, GxP-relevante Daten als Datensatz in Tulip-Tabellen mit Bezug auf die entsprechenden Artefakte zu speichern, d.h. Charge, Auftrag, Material, Ausrüstung, Raum, etc.
Es wird empfohlen, GxP-relevante Daten innerhalb des Originaldatensatzes zu korrigieren, da alle Änderungen in der Datensatzhistorie wiedergegeben werden. Die Korrektur sollte mittels eines Unterschriftenformulars eingereicht werden.
Um das Auffinden der Aufzeichnungen zu erleichtern, wird empfohlen, allen Einträgen eine eindeutige und systematische ID zuzuweisen, z. B. "-".
Datensatz-Historie
Wie oben beschrieben, werden die Werte von Variablen zum Zeitpunkt des Abschlusses oder Abbruchs der App in einem Erledigungssatz gespeichert. Im Gegensatz dazu erfolgt die Manipulation von Daten in einer Tabelle in Echtzeit. Jede Änderung in einem Feld eines Tabellendatensatzes wird von Tulip automatisch mit Kontextinformationen (Benutzer, App, App-Version, Station, Zeitstempel) protokolliert.
Jeder Tulip-Tabellendatensatz hat eine Datensatzhistorie. Diese Datensatzhistorie zeigt alle protokollierten Änderungen einschließlich der Kontextinformationen (Benutzer, App, App-Version, Station, Zeitstempel).
Darüber hinaus zeigt die Datensatz-Historie die Daten aller App-Abschlüsse oder -Abbrüche, in denen der Datensatz enthalten ist, d.h. bei Abschluss/Abbruch geladen wurde. Dazu gehören auch alle elektronischen Unterschriften, die bei diesen Abschlüssen/Abbrüchen erfasst wurden. Unterschriften werden in der Zeitleiste des Datensatzverlaufs entsprechend dem Zeitstempel angezeigt, zu dem sie geleistet wurden. Alle anderen Abschlussdaten werden mit dem Zeitstempel des Abschlusses/der Stornierung angezeigt.