Anlage 5 - Formelle Beschreibung des Algorithmus
Version 1.0 vom 05.07.2019
Im Folgenden wird formal der Algorithmus zur Selektion von Austauschmeldungen für ein einzelnes Krebsregister beschrieben:
Mengen und ihre Elemente
Sei R = {ri | ri ist Krebsregister i des RüD Verfahrens} die Menge aller am RüD-Verfahren teilnehmenden Krebsregister.
Sei Si = { s | s ist Meldeamt des Registers ri} die Menge aller Meldeämter im Einzugsgebiet eines einzelnen Registers ri.
Sei Ti = { q | q ist Meldestelle des Registers ri} die Menge aller Meldestellen im Einzugsgebiet eines einzelnen Registers ri, inklusive der Meldeämter (Ti ⊃ Si) und aller anderen Krebsregister des RüD Verfahrens (Ti ⊃ R).
Sei Pi = { pij | pij ist der Patient mit der ID j des Registers ri} die Menge aller Patienten eines Register ri.
Sei Mij = { mijk| mijk ist die Meldungen k des Patienten pij} die Menge aller Meldungen zum Patienten pij.
Sei GKZ = { gkz | gkz ist eine Gemeindekennziffer, oder null} die Menge aller Gemeindekennziffern in Deutschland, inklusive einem Wert null für unbekannte/nicht vorliegende GKZ.
Funktionen
Sei fGeeignet: Mij → {wahr, falsch}, eine Funktion, die für eine Meldung mijk ϵ Mij bestimmt ob sie für den Datenaustausch geeignet ist (siehe Umsetzungsleitfaden_für_den_Registerübergreifenden_Datenaustausch.docx -> 4. Für den Austausch geeignete Meldungen).
Sei fMelder: Mij → Ti eine Funktion, die für eine Meldung mijk ϵ Mij die Meldestelle bestimmt.
Sei fVonAnderemRegister: Mij → {wahr, falsch} eine Funktion, die für eine Meldung mijk ϵ Mij bestimmt, ob sie von einem anderen Register im Rahmen des RÜD empfangen wurde.
fVonAnderemRegister (mijk) = // Wenn Melder ein Register, aber nicht dieses Register
WENN fMelder(mijk) ϵ R ∧ fMelder(mijk) ≠ ri
DANN wahr
SONST falsch
Sei fIstMeldamt: Mij → {wahr, falsch}, eine Funktion, die für eine Meldung mijk ϵ Mij bestimmt ob es sich um eine Meldeamtsmeldung handelt.
Sei fGKZPatient: Mij → GKZ eine Funktion die für eine Meldung mijk ϵ Mij die Gemeindekennziffer des Patienten aus dem Element …>Patient>Patienten_Stammdaten/Kontrollnummern bestimmt Bei mehr als einer Wohnortsangabe wird der zum Zeitpunkt des Meldeanlasses gültige Wohnort gewählt, alternativ der erste angegebene Wohnort, wenn Gültigkeitszeitraum/Vitalstatusdatum nicht angegeben ist..
Sei fGKZPatientNeu: Mij → GKZ eine Funktion die für eine Meldung mijk ϵ Mij die Gemeindekennziffer des Patienten aus dem Element …>Meldeamt> Patienten_Stammdaten_Neu/Kontrollnummern_Neu bestimmt5.
Sei fZuständigReg: GKZ → R ∪ null eine Funktion, die für eine Gemeindekennziffer gkz ϵ GKZ das zuständige Krebsregister bestimmt. Die Funktion liefert null, wenn die übergebene GKZ null ist.
Sei fIstVollstZuWegzug: Mij → {wahr, falsch} eine Funktion, die für eine Meldung mijk ϵ Mij bestimmt ob es sich um eine vollständige (d.h. alter und neuer Wohnort sind bekannt) Zu-/Wegzugsmeldung über Einzugsgebietsgrenzen (aber innerhalb Deutschlands) handelt:
fIstVollstZuWegzug (mijk) = // Es handelt sich um eine vollständige Zu-/Wegzugsmeldung, wenn
fIstMeldamt(mijk) ∧ // Es eine Meldeamtsmeldung ist UND
fGKZPatient(mijk) ≠ null ∧ fZuständigReg(fGKZPatientNeu(mijk)) ≠ null ∧ // für neuen UND alten Wohnort eine Gemeindekennziffer vorliegt UND
fZuständigReg(fGKZPatient(mijk)) ≠ fZuständigReg(fGKZPatientNeu(mijk)) // verschiedene Register für die beiden GKZ zuständig sind.
Sei fWohnReg: Mij → R eine Funktion, die für eine Meldung mijk ϵ Mij das Wohnortregister bestimmt.
fWohnReg(mijk) =
WENN fIstMeldamt(mijk) // Handelt es sich um eine Meldeamtsmeldung?
DANN WENN fVonAnderemRegister (mijk) // Wenn ja, handelt es sich um eine Meldeamtsmeldung aus einem anderen Register?
DANN fMelder(mijk) //Wenn ja, ist dieses Register das Wohnortregister
SONST ri //Sonst ist das eigene Register das Wohnortregister
SONST fZuständigReg(fGKZPatient(mijk)) // Sonst ist das für den Wohnort des Patienten zuständige Register das Wohnortregister
Sei fBehandlungReg: Mij → R eine Funktion, die für eine Meldung mijk ϵ Mij das Behandlungsortregister bestimmt.
fBehandlungReg (mijk) =
WENN fIstMeldamt(mijk) // Handelt es sich um eine Meldeamtsmeldung?
DANN WENN fIstVollstZuWegzug (mijk) // Wenn ja, handelt es sich um eine vollständige Umzugsmeldung innerhalb Deutschlands über Einzugsgebiete hinweg?
DANN WENN fZuständigReg(fGKZPatientNeu(mijk)) = r // Wenn ja, ist es ein Zuzug? (neuer Wohnsitz in diesem Register)
DANN fZuständigReg(fGKZPatient(mijk)) // Wenn ja, dann ist das für den alten Wohnort zuständige Register das Behandlungsortregister.
SONST fZuständigReg(fGKZPatientNeu(mijk)) // Sonst (Wegzug) ist das für den neuen Wohnort zuständige Register das Behandlungsortregister.
SONST ri // Sonst (andere Meldeamtsmeldung) ist das eigene Register Behandlungsortregister.
SONST WENN fMelder(mijk) ϵ R \ ri // Wenn nein, handelt es sich um eine Meldung die von einem anderen Register empfangen wurde?
DANN fMelder(mijk) // Wenn ja, wurde die Meldung im anderen Register erstmals erfasst, ist damit Behandlungsortregister.
SONST ri // Sonst wurde die Meldung in diesem Register erfasst und ist somit Behandlungsortregister.
Sei fAdressen: Pi → {A|A ⊆ R} eine Funktion, die für einen Patienten pij die Menge aller Register bestimmt, die in mindestens einer Meldung mijk des Patienten pji Wohn- oder Behandlungsortregister sind, aber ohne das Register ri selbst.
fAdressen(pij) = k=1n{ fWohnReg(mijk) ∪ fBehandlungReg (mijk) } \ ri
Sei fVersendet: Mij → {V|V ⊆ R} eine Funktion, welche die Menge alle Register bestimmt, an die die Meldung mijk ϵ Mij bereits versendet wurde.
Zeitpunktbasierte Selektion von Austauschmeldungen
Startet ein Register ri zu einem bestimmten Zeitpunkt den Datenaustausch, führt es folgende Schritte aus:
1.Für jede Meldung mijk mit
fGeeignet(mijk) = wahr ∧ fBehandlungReg(mijk) = ri ∧ fWohnReg(mijk) ≠ ri ∧ fWohnortReg(mijk) ∉ fVersendet(mijk)
// Für jede geeignete Meldung bei der dieses Register Behandlungs- aber nicht Wohnortregister ist, und die Meldung noch nicht an das
// Wohnortregister verschickt wurde ...
Selektiere mijk für den Versand an fWohnReg(mijk).
// Versende die Meldung an das Wohnortregister
2. Für jede Meldung mijk mit:
fGeeignet(mijk) = wahr ∧ fWohnReg(mijk) = ri ∧ fAdressen(pij) ≠ ∅ ∧ fVersendet(mijk) ⊂ fAdressen(pij)
// Für jede geeignete Meldung bei der dieses Register Wohnortregister ist, und andere Register Daten zum Patienten beigetragen haben,
// und die Meldung noch nicht an alle diese Register verschickt wurde ...
Selektiere mijk für den Versand an alle r ϵ fAdressen(pji) \ fVersendet(mijk) \ fBehandlungReg(mijk).
// Schicke die Meldung an alle Register an die die Meldung noch nicht verschickt wurde, außer an das Register von dem die Meldung // eingegangen ist.
Ereignisbasierte Selektion von Austauschmeldungen
Der Unterschied der ereignisbasierten Selektion im Vergleich zur zeitpunktbasierten Selektion besteht darin, dass eine Meldung unmittelbar beim Erreichen des Status „Meldung für Datenaustausch geeignet" übermittelt wird. Ein solches Verfahren ist anzustreben, allerdings nur dann umsetzbar, wenn die Übermittlung der Austauschdaten zwischen zwei Registern auf beiden Seiten vollständig automatisiert abläuft.