From f805b2ba40cf68166e759b4725ac491199f746dd Mon Sep 17 00:00:00 2001 From: chgl Date: Wed, 23 Oct 2024 20:23:09 +0200 Subject: [PATCH 1/5] chore: added obds v3 skaffolding to beta (#132) * feat: add code generation for oBDS v3 (#101) * feat: codegen for oBDS 3.0.2 * test: add some basic content assertions * refactor: change package of generated code * chore: use updated oBDS schema version 3.0.3 * chore: exclude generated files from spotless * fix: "The String '${jaxbTargetDir}' contains a GString-type expression: '${jaxbTargetDir}' GStringExpressionWithinString" * chore: trailing whitespace and newlines --------- Co-authored-by: Paul-Christian Volkmer --- .gitignore | 3 + build.gradle | 35 + src/main/resources/schema/oBDS_v3.0.3.xsd | 5841 +++++++++++++++++ .../obds/v3/ObdsDeserialisationTest.java | 36 + src/test/resources/obds3/test1.xml | 53 + 5 files changed, 5968 insertions(+) create mode 100644 src/main/resources/schema/oBDS_v3.0.3.xsd create mode 100644 src/test/java/de/basisdatensatz/obds/v3/ObdsDeserialisationTest.java create mode 100644 src/test/resources/obds3/test1.xml diff --git a/.gitignore b/.gitignore index 71da3749..6465cd95 100644 --- a/.gitignore +++ b/.gitignore @@ -64,3 +64,6 @@ package-lock.json tests/k8s/**/charts node_modules/ + +# generated code +src/generated/ diff --git a/build.gradle b/build.gradle index 1001d503..c964b455 100644 --- a/build.gradle +++ b/build.gradle @@ -16,6 +16,7 @@ configurations { compileOnly { extendsFrom annotationProcessor } + xsd2java } repositories { @@ -25,6 +26,15 @@ repositories { ext { set('springCloudVersion', "2023.0.3") set('hapiVersion', "7.4.0") + jaxbTargetDir = file("src/generated/java") +} + +sourceSets { + main { + java { + srcDirs jaxbTargetDir + } + } } dependencies { @@ -44,7 +54,11 @@ dependencies { // Jackson v3 supports Optional out-of-the-box but isn't yet provided by Spring Boot by default // implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jdk8' + implementation 'com.fasterxml.jackson.module:jackson-module-jakarta-xmlbind-annotations' + // JAXB code generation + xsd2java "com.sun.xml.bind:jaxb-xjc:4.0.5" + xsd2java "com.sun.xml.bind:jaxb-impl:4.0.5" annotationProcessor "org.springframework.boot:spring-boot-configuration-processor" @@ -71,6 +85,8 @@ jacoco { spotless { java { + target("**/*.java") + targetExclude("src/generated/java/**/*.*") importOrder() removeUnusedImports() googleJavaFormat() @@ -88,3 +104,22 @@ jacocoTestReport { jar { enabled = false } + +tasks.register('xsd2java') { + + doLast { + jaxbTargetDir.mkdirs() + + ant.taskdef(name: 'xjc', classname: 'com.sun.tools.xjc.XJCTask', classpath: configurations.xsd2java.asPath) + ant.jaxbTargetDir = jaxbTargetDir + + + ant.xjc( + destdir: "${jaxbTargetDir}", + package: 'de.basisdatensatz.obds.v3', + schema: 'src/main/resources/schema/oBDS_v3.0.3.xsd' + ) + + } +} +compileJava.dependsOn xsd2java diff --git a/src/main/resources/schema/oBDS_v3.0.3.xsd b/src/main/resources/schema/oBDS_v3.0.3.xsd new file mode 100644 index 00000000..54bd8000 --- /dev/null +++ b/src/main/resources/schema/oBDS_v3.0.3.xsd @@ -0,0 +1,5841 @@ + + + + + Root element + + + + + + + + + + + + + + + + + + + + + + Einwilligung für nicht meldepflichtige Meldeanlässe vorhanden (derzeit nur Niedersachsen) + + + + + + + Aus Gründen unter anderem der Qualitätssicherung ist eine explizite Angabe von Ja oder Nein erforderlich. + Die Ausprägung "unbekannt" darf nur verwendet werden, wenn es sich um historische Sätze handelt, für die die Situation nicht zu klären ist. + Für aktuelle Sätze muss diese Information bekannt und in den Systemen hinterlegbar sein. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Erste Version beruhend auf Basisdatensatz 2021 + + + + + Patch: Fehler im Modul DKKR behoben (GPOH_Therapiestudienpatient: Auswahl 2=nein statt 1=ja), Beschreibung im Nuklide_Typ korrigiert (Ir-192), Referenzprüfung Melder/ID auf Meldung/Melder_ID korrigiert (war vertauscht) + + + + + + - Erweiterung der zulässigen ICD-10-Versionen über das Jahr 2023 hinaus + - Ergänzung Diagnosesicherung 7.1-3 und 8 (§65c 2023/63/c1) + + + + + + - Änderung der Annotation in der Diagnosesicherung für die Diagnose + - Änderung des Elements 'Bezeichnung' im Element 'Absender' von Datentyp 'A' auf 'B' + - Pathologie: Erweiterung des Elements 'Diagnosesicherung' um die Ausprägungen '7.1'-'7.3' und '8' (§65c 2023/63/c1) + - Modul_DKKR: Erweiterung des Elements 'Einwilligung' um die Ausprägungen '6' und '7' + + + + + + + + + + + + + + + + + + + + + + + + + + Automatisiert erstellt am 16.11.2018 um 6:21 Uhr aus der Spezifikation file:/C:/Users/rico/Documents/arbeit/KoSIT/string.latin/06_SVN/src/din%20spec%2091379/din-spec.xml. + + + + Ergänzung: kein Whitespace am Anfang oder Ende. Der Datentyp A gibt wieder, welche Schriftzeichen in hoheitlichen Dokumenten für Namen natürlicher Personen verwendet werden. + + + + + + + + Ergänzung: kein Whitespace am Anfang oder Ende. Der Datentyp B wurde vor allem für sonstige Namen, wie z. B. Ortsnamen und Straßennamen mit Hausnummer, entworfen. + + + + + + + + Der Datentyp C wurde für alle normativen Schriftzeichen der DIN SPEC entworfen. Er ist somit die technische Umsetzung der Schnittstellenvereinbarung Alle nach DIN SPEC 91379 normativen Schriftzeichen. Texte mit griechischen oder kyrillischen Buchstaben oder mit erweiterten (nicht-normativen) Nicht-Buchstaben sind unzulässig. + + + + + + + + Ergänzung: kein Whitespace am Anfang oder Ende. Der Datentyp C wurde für alle normativen Schriftzeichen der DIN SPEC entworfen. Er ist somit die technische Umsetzung der Schnittstellenvereinbarung Alle nach DIN SPEC 91379 normativen Schriftzeichen. Texte mit griechischen oder kyrillischen Buchstaben oder mit erweiterten (nicht-normativen) Nicht-Buchstaben sind unzulässig. + + + + + + + + Der Datentyp E wurde für alle normativen und erweiterten Schriftzeichen der DIN SPEC entworfen. Ein Einsatzgebiet dieses Datentyps kann der grenzüberschreitende Datenaustausch sein, wenn auch griechische und kyrillische Buchstaben benötigt werden. Er ist somit die technische Umsetzung der Schnittstellenvereinbarung Alle nach DIN SPEC 91379 normativen und nicht-normativen Schriftzeichen. Texte mit Buchstaben oder Nicht-Buchstaben, die in der DIN SPEC nicht enthalten sind, wie z. B. asiatische oder arabische Buchstaben, sind unzulässig. + + + + + + + + + + + + + + + + + + + + + Vollständiger Typ zur Restriktion in Patienten_Adresse_Melder_Typ + + + + + + + + + + + + + + + + + + + + + + + + + + + Widerspruch/Einwilligung des Patienten + + + + + Patientin/Patient wurde informiert und hat nicht widersprochen + + + + + Ausnahme: Patientenunterrichtung entfallen wegen möglicher gesundheitlicher Nachteile + + + + + D = Meldung von Ärzten ohne unmittelbaren Patientenkontakt + + + + + Patient hat der personenbezogenen Speicherung widersprochen + + + + + Verstorben + + + + + + + Die Kennzeichnung dürfte normalerweise bei Diagnosemeldungen oder Verlaufsmeldungen erfolgen, da diese die relevanten Ereingnisse abbilden. + Hinweis: es fehlt Patientenfall (Hämato-onkologische Neoplasien) + + + + + Zentrumsfall/Primärfall + + + + + Zentrumsfall/kein Primärfall + + + + + nicht Zentrumsfall + + + + + + + + + + + + + + + + Typ zur Verwendung in Meldungen, im RüD wird ein abweichender Typ mit Menge_Adresse verwendet werden + + + + + + + + + + + + + + + + + + + + + + + +Es wird, wenn möglich, das Geschlecht verwendet, wie es im Melderegister und auf der Gesundheitskarte vermerkt ist. +Es ist zu beachten, dass X=unbestimmtes Geschlecht (amtlich: keine Angabe) einer expliziten Angabe im Personenstandsregister entspricht und auf keinen Fall mit U=unbekannt gleichzusetzen ist. +"Unbekannt" bedeutet, dass dem Melder das Geschlecht tatsächlich unbekannt ist und stellt eine absolute Ausnahmesituation dar, da beispielsweise eine Versichertenkarte das amtliche Geschlecht enthält. + + + + + + + Männlich + + + + + Weiblich + + + + + Divers + + + + + keine Angabe / unbestimmt + + + + + Unbekannt + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Bei allen geschätzten Angaben darf ein plausibles, genau wirkendes Datum eingetragen werden. + D.h. der vielfach praktizierten Konvention monatsgenau bedeutet Einsetzen des 15. und Jahresgenau bedeutet Einsetzen des 01.07. muss nicht gefolgt werden. + Im Gegenteil können durch Abweichen von dieser Konvention Verletzungen der Datumshierarchien (z.B. ungenaues Diagnosedatum nach genauem Therapiedatum) vermieden werden. + Es ist Sache des Registers, ungenaue Angaben bei bestimmten Anlässen, z.B. Auswertungen, ggf. gesondert zu handhaben. + + + + + + exakt (entspricht taggenau) + + + + + Tag geschätzt (entspricht monatsgenau) + + + + + Monat geschätzt (entspricht jahrgenau) + + + + + vollständig geschätzt (genaue Angabe zum Jahr nicht möglich) + + + + + + + + + + + + + + + siehe Dokumentation zu Datum_Tag_oder_Monat_oder_Jahr_oder_nicht_genau_Typ + + + + + exakt (entspricht taggenau) + + + + + Tag geschätzt (entspricht monatsgenau) + + + + + + + + + + + + + + + + + + + + + + Ja + + + + + Nein + + + + + Unbekannt + + + + + + + + + Ja + + + + + Nein + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICD 10 Version 2006 WHO (gültig bis 2010), + ICD 10 Version 2011 WHO (gültig bis 2012), + ICD 10 Version 2013 WHO (gültig bis 2015), + ICD 10 Version 2016 WHO (gültig bis 2018), + ICD 10 Version 2019 WHO (letzte Version, wird nur noch in Ausnahmefällen aktualisiert) + Sonstige, falls andere bzw. ältere Versionen verwendet werden + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICD-O-3, 2003 + + + + + ICD-O-3, 1. Revision 2014 + + + + + ICD-O-3, 2. Revision 2019 + + + + + Neue Codes aus den WHO-Klassifikationen (BlueBooks) + + + + + + + + + + + + + + + + + Das histopathologische Grading von Tumoren wird durchgeführt, um Anhaltspunkte betreffend ihrer Aggressivität zu erhalten, die im Bezug zur Prognose und zur Behandlung steht. Das Grading sollte den Empfehlungen der WHO-Klassifikation maligner Tumoren folgen. + 0 = Malignes Melanom der Konjunktiva + 1 = Gut differenziert + 2 = Mäßig differenziert + 3 = Schlecht differenziert + 4 = Undifferenziert + X = Nicht bestimmbar + L = Low grade (G1 oder G2) + M = Intermediate (G2 oder G3) + H = High grade (G3 oder G4) + B = Borderline + U = Unbekannt + T = Trifft nicht zu + Bei der Klassifikation sind die einschlägigen Regeln der Literatur (TNM) zu beachten. + + + + + + + Malignes Melanom der Konjunktiva + + + + + Gut differenziert + + + + + Mäßig differenziert + + + + + Schlecht differenziert + + + + + Undifferenziert + + + + + Nicht bestimmbar + + + + + Low grade (G1 oder G2) + + + + + Intermediate (G2 oder G3) + + + + + High grade (G3 oder G4) + + + + + Borderline + + + + + Unbekannt + + + + + Trifft nicht zu + + + + + + + + + + + + + + + + + + + + + + Lokalisation der Fernmetastase + PUL = Lunge + OSS = Knochen + HEP = Leber + BRA = Hirn + LYM = Lymphknoten + MAR = Knochenmark + PLE = Pleura + PER = Peritoneum + ADR = Nebennieren + SKI = Haut + OTH = Andere Organe + GEN = Generalisierte Metastasierung + + + + + + + Lunge + + + + + Knochen + + + + + Leber + + + + + Hirn + + + + + Lymphknoten + + + + + Knochenmark + + + + + Pleura + + + + + Peritoneum + + + + + Nebennieren + + + + + Haut + + + + + Andere Organe + + + + + Generalisierte Metastasierung + + + + + + + + + + + + + + + + Gibt an, zu welchem Schweregrad von Nebenwirkungen es bei der Bestrahlung gekommen ist (sogenannte akute Nebenwirkungen bis zum 90 Tag nach Bestrahlungsbeginn) + Art der Nebenwirkung nach CTC + Schweregrad + K = keine + 1 = mild + 2 = moderat + U = unbekannt + + + + + + + keine + + + + + mild + + + + + moderat + + + + + unbekannt + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + schwerwiegend + + + + + lebensbedrohlich + + + + + tödlich + + + + + + + + + + + CTCAE Version 4 + + + + + CTCAE Version 4.03 + + + + + CTCAE Version 5.0 + + + + + Falls andere bzw. ältere Versionen verwendet werden + + + + + + + + + + + + + + + + + + + + + + R0/1/2/X werden im TNM-Buch beschrieben, R1(cy+) und R1(is) stammen aus dem TNM-Supplement. +Wichtig ist zu wissen, dass RX ein expliziter Code ist, während U tatsächlich das Nicht-Vorhandensein der Information kennzeichnet + + + + + kein Residualtumor + + + + + mikroskopischer Residualtumor + + + + + makroskopischer Residualtumor + + + + + In-Situ-Rest + + + + + cytologischer Rest + + + + + Vorhandensein von Residualtumor kann nicht beurteilt werden + + + + + Residualtumorstatus ist nicht bekannt + + + + + + + + + + + + + + + + + + + + + + Hier sollen nur Untersuchungen übermittelt werden, die nicht in den Modulen spezifiziert sind + + + + + + + + + +Die Ausprägungen können in Abhängigkeit von der Art der Untersuchung unterschiedliche Wertebereiche und Bezeichnungen haben. +Für einige Untersuchungen wird die Auswahlliste keine passenden Werte haben, da wahrscheinlich zu keinem Zeitpunkt eine vollständige Ausprägungsliste erstellbar ist. +Dafür ist statt einer Ausprägung das Freitextfeld Sonstige_Auspraegung vorgesehen. + + + + + + + Mutation/positiv + + + + + Wildtyp/nicht mutiert/negativ + + + + + Polymorphismus + + + + + nicht bestimmbar + + + + + unbekannt + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Der Einschluss der vollständigen Module Mamma und Darm, sowie Allgemein in verschiedenen Abschnitten des Datensatzes ist nicht so zu verstehen, dass an allen Stellen alle Felder zu befüllen sind, vielmehr soll die Möglichkeit eröffnet werden, z. B. im Element "Diagnose" alle Informationen zu übermitteln, ohne für einige Modul-Felder eine im Übrigen leere OP anlegen zu müssen, oder umgekehrt. + + + + + + Prätherapeutischer Menopausenstatus der Patientin Postmenopausal bedeutet mehr als ein Jahr keine Menstruationsblutung oder Estradiol (E2) und Follikelstimulierendes Hormon (FSH) im eindeutigen postmenopausalen Bereich. + 1 = Prämenopausal + 3 = Postmenopausal + U = Unbekannt + Hinweis: Prämenopausal umfasst Perimenopausal + + + + + + + Prämenopausal + + + + + Postmenopausal + + + + + Unbekannt + + + + + + + + + Rezeptorstatus Positiv/Negativ (gemäß: Immun reaktiver Score (IRS) Remmele W et al. 1987) + P = Positiv (IRS >= 1) + N = Negativ + U = Unbekannt + + + + + + + Rezeptorstatus Positiv/Negativ (gemäß: Immunreaktiver Score (IRS) Remmele W et al. 1987). + P = Positiv (IRS >= 1) + N = Negativ + U = Unbekannt + + + + + + + Rezeptorstatus Positiv/Negativ (gemäß immunreaktiven Scores nach Leitlinie) + P = Positiv, d. h. + IHC +++ oder + IHC ++ und ISH (FISH, CISH o. Ä.) positiv + N = Negativ + U = Unbekannt + Bei FISH "borderline" muss die Festlegung auf negativ oder positiv durch den Kliniker in Absprache mit dem Pathologen erfolgen. + + + + + + Es wurde eine präoperative Drahtmarkierung gesteuert durch das angegebene bildgebende Verfahren durchgeführt. + + + + + + Mammografie + + + + + Sonografie + + + + + MRT + + + + + Keine Drahtmarkierung durch Bildgebung + + + + + Unbekannt + + + + + + + + Das Präparat wird intraoperativ mammografiert/sonografiert nach präoperativer Drahtmarkierung durch Mammografie oder Sonografie. + + + + + + Mammografie + + + + + Sonografie + + + + + Nein + + + + + Unbekannt + + + + + + + + + + + + + + Grad 1 (gut) + + + + + Grad 2 (moderat) + + + + + Grad 3 (schlecht) + + + + + PME durchgeführt + + + + + Lokale Exzision durchgeführt + + + + + Andere Operation durchgeführt + + + + + Unbekannt + + + + + + + + + Wildtyp + + + + + Mutation + + + + + Unbekannt + + + + + Nicht untersucht + + + + + + + + + + + + + + + + + + + Der Einschluss der vollständigen Module Mamma und Darm, sowie Allgemein in verschiedenen Abschnitten des Datensatzes ist nicht so zu verstehen, dass an allen Stellen alle Felder zu befüllen sind, vielmehr soll die Möglichkeit eröffnet werden, z. B. im Element "Diagnose" alle Informationen zu übermitteln, ohne für einige Modul-Felder eine im Übrigen leere OP anlegen zu müssen, oder umgekehrt. + + + + + + + + + + + + + + + + Modalität der Eingriffsdurchführung + + + + + + Elektiveingriff + + + + + Notfalleingriff + + + + + Unbekannt + + + + + + + + Präoperative Anzeichnung der Stomaposition + + + + + + Anzeichnung durchgeführt + + + + + Anzeichnung nicht durchgeführt + + + + + Kein Stoma + + + + + Stoma angelegt, Anzeichnung nicht bekannt + + + + + Unbekannt + + + + + + + + + Rektum: + Grad A (keine therapeutische Konsequenz) + Grad B (Antibiotikagabe oder interventionelle Drainage oder transanale Lavage/Drainage) + Grad C ((Re)-Laparotomie) + Für Indikator Anastomoseninsuffizienz nach elektivem Eingriff mit Anastomosenanlage + Ausprägung gem. Rahbari, N.N., et al., Definition and grading of anastomotic leakage following anterior resection of the rectum: a proposal by the International Study Group of Rectal Cancer.Surgery, 2010. 147(3): p. 339-51. + + + + + + + Anastomoseninsuffizienz Grad B + + + + + Anastomoseninsuffizienz Grad C + + + + + Keine Insuffizienz oder höchstens Grad A + + + + + Unbekannt + + + + + + + + + + + Normaler, ansonsten gesunder Patient + + + + + Patient mit leichter Allgemeinerkrankung + + + + + Patient mit schwerer Allgemeinerkrankung und Leistungseinschränkung + + + + + Patient mit inaktivierender Allgemeinerkrankung, ständige Lebensbedrohung + + + + + Moribunder Patient + + + + + + + + + + + + Wert des Gleason-Score: + GleasonGradPrimaer + GleasonGradSekundaer = GleasonScoreErgebnis + mod. nach ISUP 2005 bei primärem Ca-Nachweis und im OP-Präparat + + + + + + primärer Gleason Grad zum Gleason-Score + + + + + + + + + + + + + + sekundärer Gleason Grad zum Gleason-Score + + + + + + + + + + + + + + Ergebnis Gleason-Score + + + + + + + + + + + + + + + + + + + + + + Anlass der Bestimmung des Scores OP oder Stanze + + + + + Op + + + + + Stanze + + + + + Unbekannt + + + + + + + + + + + + Semiquantitative Abschätzung des Prozentsatzes der Gesamtkarzinomfläche/Gesamtstanzzylinderfläche der am schwersten befallenen Stanze + + + + + natürliche Zahl (1-100) in % + + + + + + + + + + Unbekannt + + + + + + Unbekannt + + + + + + + + + + + + + + + + + Datum der Entnahme der Stanzen + + + + + + + Anzahl der entnommenen Stanzen + + + + + + + Anzahl der positiven Stanzen + + + + + + + + + + + + + + + + Datum der Entnahme der Stanzen + + + + + + + Anzahl der entnommenen Stanzen + + + + + + + Anzahl der positiven Stanzen + + + + + + + + Aktuell relevanter PSA-Wert als Fließkommazahl in ng/ml (max. 3 Dezimalstellen nach dem Dezimalpunkt) + + + + + + + + + + + + + + Datum der Blutentnahme zur PSA-Bestimmung + + + + + + + Komplikation der Clavien-Dindo Grade III oder IV innerhalb der ersten 6 Monate nach Radikaler Prostatektomie + + + + + + + + + Minimaler Sicherheitsabstand zum Primärtumor in Millimeter. + Ausprägungen: + -1 = nicht zu beurteilen + 0 = kein Abstand + n = Abstand in mm (natürliche Zahl) + Hinweis: + Es ist der endgültige kumulative Sicherheitsabstand, d. h. nach definitiver operativer Versorgung zu verwenden. + Es soll die sichere Untergrenze angegeben werden. + Ein Abstand von 0 entspricht lokal R1 oder R2, bzw. randständig. + + + + + + + + + + Tumordicke in mm. + + + + + + + + + + + + + + + + + Pathologisches Kriterium der Ulzeration erfüllt. + Hinweis: + Dieses Feld soll nur im TNM-Stadium pT1b angegeben werden, + da dieses Stadium mit und ohne Ulzerationen definiert ist. + (Quelle: TNM-Klassifikation, 8. Auflage 2020, S. 188). + + + + + + + + + + + + + + + LDH-Wert in Unit/Liter (U/l). + Hinweis: + Für die Umrechung von Katal/l nach Unit/l gilt: + 1µkat/l = 60 U/l + 100 U/l = 1.67 µkat/l. + + + + + + + + + + + + + + + + + Stand der schriftlich vorliegenden Einwilligung (EW) zur Meldung, 1x pro Patient und bei Änderung des Einwilligungsstatus + + + + + + EW liegt von/vom Sorgeberechtigten vor; Veraltet, bitte stattdessen Ausprägung 5, 6, oder 7 verwenden + + + + + EW wurde verweigert + + + + + EW wird bald nachgereicht + + + + + EW liegt vom Patienten selbst vor + + + + + EW des Sorgeberechtigten liegt vor + + + + + EW Patient und Sorgeberechtigte liegt vor + + + + + + + + Informierung Patient*in/Sorgeberechtigte vom Datenaustausch DKKR-Landeskrebsregister, 1x pro Patient und bei Änderung des Einwilligungsstatus + + + + + + Patientin/Patient/Eltern/Sorgeberechtige wurde/n informiert und hat/haben widersprochen d.h. verweigern den Datenaustausch/die Datenweitergabe an das Landeskrebsregister + + + + + Patientin/Patient/Eltern/Sorgeberechtige wurde/n vom Datenaustausch mit Landeskrebsregister informiert und hat/haben nicht widersprochen + + + + + Die Informierung unterblieb + + + + + + + + Therapiestudien, Therapieoptimierungsstudien, Therapieprotokolle oder tumorspezifische Register unter dem Dach der GPOH. +"ja": Patient kommt für eine Studie/Register in Frage bzw wurde der Studien-/Registerleitung mitgeteilt, bei jedem Meldeanlass + + + + + + + + + keine Angabe + + + + + nein + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Positiv + + + + + Negativ + + + + + Unbekannt + + + + + + + Organspezifische Angabe der betroffenen Seite + + + + + Links + + + + + Rechts + + + + + Beidseitig (bei bestimmten Tumoren 2 Meldungen angeben) + + + + + Mittellinie/mittig + + + + + Unbekannt + + + + + Trifft nicht zu (Seitenangabe nicht sinnvoll, einschließlich Systemerkrankungen) + + + + + + + + ECOG oder Karnofsky + + + + + + Normale, uneingeschränkte Aktivität wie vor der Erkrankung (90 - 100 % nach Karnofsky) + + + + + Einschränkung bei körperlicher Anstrengung, aber gehfähig; leichte körperliche Arbeit bzw. Arbeit im Sitzen (z.B. leichte Hausarbeit oder Büroarbeit) möglich (70 - 80 % nach Karnofsky) + + + + + Gehfähig, Selbstversorgung möglich, aber nicht arbeitsfähig; kann mehr als 50% der Wachzeit aufstehen (50 - 60 % nach Karnofsky) + + + + + Nur begrenzte Selbstversorgung möglich; ist 50% oder mehr der Wachzeit an Bett oder Stuhl gebunden (30 - 40 % nach Karnofsky) + + + + + Völlig pflegebedürftig, keinerlei Selbstversorgung möglich; völlig an Bett oder Stuhl gebunden (10 - 20% nach Karnofsky) + + + + + Unbekannt + + + + + + + + + + + + + + + + + + + + + + + + + + + + Nein + + + + + Unbekannt + + + + + + + + + + + + + + + + + + + + + + 6. Auflage + + + + + 7. Auflage + + + + + 8. Auflage + + + + + + + + Das Weglassen des Tags bedeutet, dass die Klassifikation vor einer initialen multimodaler Therapie erfolgte (oder keine solche stattgefunden hat). + + + + + + Klassifikation erfolgte während oder nach initialer multimodaler Therapie + + + + + + + + Das Weglassen des Tags bedeutet, dass die Klassifikation im Rahmen der Primärdiagnostik/-therapie erfolgte. + + + + + + Klassifikation erfolgte zur Beurteilung eines Rezidivs + + + + + + + + Das Weglassen des Tags bedeutet, dass die Klassifikation klinisch und/oder pathologisch erfolgte. + + + + + + Die Klassifikation durch eine Autopsie festgelegt. + + + + + + + + Das Weglassen des Prefix wird als "c" interpretiert + + + + + + Kategorie wurde durch klinische Angaben festgestellt, bzw. erfüllt die Kriterien für p nicht + + + + + Feststellung der Kategorie erfolgte durch eine pathohistologische Untersuchung, mit der auch der höchste Grad der jeweiligen Kategorie hätte festgestellt werden können + + + + + Feststellung mit Ultraschall (Unterkategorie von c mit besonderer diagnostischer Relevanz, z.B. beim Rektumkarzinom) + + + + + + + + + + + + + + + + + + + + + + Das Weglassen des Prefix wird als "c" interpretiert + + + + + + Kategorie wurde durch klinische Angaben festgestellt, bzw. erfüllt die Kriterien für p nicht + + + + + Feststellung der Kategorie erfolgte durch eine pathohistologische Untersuchung, mit der auch der höchste Grad der jeweiligen Kategorie hätte festgestellt werden können + + + + + + Feststellung mit Ultraschall (Unterkategorie von c mit besonderer diagnostischer Relevanz, z.B. beim Rektumkarzinom) + + + + + + + + + + + + + + + Das Weglassen des Prefix wird als "c" interpretiert + + + + + + Kategorie wurde durch klinische Angaben festgestellt, bzw. erfüllt die Kriterien für p nicht + + + + + Feststellung der Kategorie erfolgte durch eine pathohistologische Untersuchung, mit der auch der höchste Grad der jeweiligen Kategorie hätte festgestellt werden können + + + + + Feststellung mit Ultraschall (Unterkategorie von c mit besonderer diagnostischer Relevanz, z.B. beim Rektumkarzinom) + + + + + + + + + + + + + + + Lymphgefäßinvasion. Erfolgt im Allgemeinen im Rahmen eines "pTNM". + + + + + + Lymphgefäßinvasion kann nicht beurteilt werden + + + + + Keine Lymphgefäßinvasion + + + + + Lymphgefäßinvasion + + + + + + + + Veneninvasion. Erfolgt im Allgemeinen im Rahmen eines "pTNM". + + + + + + Veneninvasion kann nicht beurteilt werden + + + + + Keine Veneninvasion + + + + + Mikroskopische Veneninvasion + + + + + Makroskopische Veneninvasion + + + + + + + + Perineuralinvasion. Erfolgt im Allgemeinen im Rahmen eines "pTNM". + + + + + + Perineurale Invasion kann nicht beurteilt werden + + + + + Keine perineurale Invasion + + + + + Perineurale Invasion + + + + + + + + + Serumtumormarker + SX = Werte der Serumtumormarker nicht verfügbar oder entsprechende Untersuchungen nicht vorgenommen + S0 = Serumtumormarker innerhalb der normalen Grenzen + S1–S3 = Wenigstens einer der Serumtumormarker erhöht + LDH HCG AFP + S1 < 1,5N und < 5000 und < 1000 + S2 1,5-10N oder 5000-50000 oder 1000-10000 + S3 > 10 N oder > 50000 oder > 10000 + N = obere Grenze des Normalwertes + (Quelle: TNM-Klassifikation, 8. Auflage 2020, S.252) + + + + + + + + + + + + + + + + + + okk + + + + + 0 + + + + + 0a + + + + + 0is + + + + + I + + + + + IA + + + + + IA1 + + + + + IA2 + + + + + IA3 + + + + + IB + + + + + IB1 + + + + + IB2 + + + + + IC + + + + + II + + + + + IIA + + + + + IIA1 + + + + + IIA2 + + + + + IIB + + + + + IIC + + + + + III + + + + + IIIA + + + + + IIIA1 + + + + + IIIA2 + + + + + IIIB + + + + + IIIC + + + + + IIIC1 + + + + + IIIC2 + + + + + IIID + + + + + IS + + + + + IV + + + + + IVA + + + + + IVA1 + + + + + IVA2 + + + + + IVB + + + + + IVC + + + + + + + + + + + Die Codes werden als regulärer Ausdruck zweier Großbuchstaben implementiert, um nicht bei Änderungen eine neue Schemaversion herausgeben zu müssen. + Die übermittelten Codes müssen https://www.iso.org/iso-3166-country-codes.html entsprechen. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICD-O-3, 2003 + + + + + ICD-O-3, 1. Revision 2014 + + + + + ICD-O-3, 2. Revision 2019 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Diese Felder sind nur dann zu nutzen, wenn keine gültigen Angaben zu GKV oder PKV vorliegen. + Außerdem bildet dieser Typ einige Spezialfälle ab, bei denen eine Kassen-IKNR zwar mit 10 beginnt, + die Versicherten jedoch keine eGK-Nummer bekommen (aus dem Bereich Post, Polizei, ...) + + + + + + + + + + Selbstzahler + + + + + Kostenträger ohne IK-Nummer (z.B. Gefängnisinsassen, ...) + + + + + Asylbewerber + + + + + Privatversichert, Kasse unbekannt + + + + + Keine Angabe zum Kostenträger + + + + + + + + + + + + + + + + Bei unsicheren Angaben kann ersatzweise/zusätzlich die Krankenkassen im Freitext angegeben werden + + + + + + + + Zielgebietschlüssel nach oBDS 2021 + + + + + Ganzhirn (Neurokranium, inklusive Meningen) + + + + + Teilhirn (frontal/parietal/occipital/temporal/Kleinhirn) + + + + + Neuroachse/Rückenmark + + + + + Hypophyse + + + + + Hirn sonstiges + + + + + Auge (r, l) + + + + + Nase/Nasennebenhöhle + + + + + Mundhöhle inklusive Mundhöhlenvorhof + + + + + Ohr (r, l) + + + + + Speicheldrüse (r, l) + + + + + Pharynx + + + + + Nasopharynx + + + + + Oropharynx + + + + + Hypopharynx + + + + + Larynx + + + + + Schilddrüse + + + + + Kopf-Hals sonstige + + + + + Mamma als Ganzbrust (r, l) + + + + + Mamma als Teilbrust (r, l) + + + + + Thoraxwand, gegebenenfalls r, l + + + + + Lunge (r, l) + + + + + Ösophagus + + + + + Mediastinum (mediastinaler Lymphabfluss ist in Nummer 9 zu kodieren) + + + + + Thymus + + + + + Thorax sonstige + + + + + Magen + + + + + Pankreas + + + + + Leber, auch bei Teilbestrahlung + + + + + Milz + + + + + Niere (r, l) + + + + + Nebenniere (r, l) + + + + + Retroperitoneum (z. B. Sarkome) + + + + + Ureter (r, l) + + + + + Bauchwand (z. B. Sarkome) + + + + + Oberbauch + + + + + Gallengänge + + + + + Gallenblase + + + + + Abdomen sonstige + + + + + Rektum + + + + + Analbereich + + + + + Harnblase + + + + + Prostata + + + + + Hoden (r, l) + + + + + Penis + + + + + Uterus + + + + + Zervix + + + + + Vulva + + + + + Vagina + + + + + Beckenwand + + + + + Becken sonstige + + + + + Schädel + + + + + Schädelbasis + + + + + Orbita (r, l) + + + + + Halswirbelsäule + + + + + Brustwirbelsäule + + + + + Lendenwirbelsäule + + + + + Sacrum/Coccygeum + + + + + Rippen (r, l) + + + + + Sternum + + + + + Schulter (r, l) + + + + + Oberarm (r, l) + + + + + Unterarm (r, l) + + + + + Hand (r, l) + + + + + Becken (r, l) + + + + + Hüfte (r, l) + + + + + Oberschenkel (r, l) + + + + + Unterschenkel (r, l) + + + + + Fuß (r, l) + + + + + Knochen sonstige + + + + + Kopf, Gesicht, Hals + + + + + obere Extremität inklusive Schulter (r, l) + + + + + untere Extremität und Hüfte (r, l) + + + + + Thorax + + + + + Abdomen + + + + + Becken + + + + + Stammes o. n. A. + + + + + mehrere Bereiche überlappend + + + + + sonstige Weichteile o. n. A. + + + + + Ganzhaut + + + + + Teilbereiche + + + + + Cervikale Lymphknoten (r, l) + + + + + Supra-/infraclavikuläre Lymphknoten (r, l) + + + + + Axilläre Lymphknoten (r, l) + + + + + Retrosternale/sternale/Mammaria interna Lymphknoten + + + + + Mediastinale Lymphknoten + + + + + Hiläre Lymphknoten + + + + + Intraabdominale Lymphknoten (z. B. subphrenisch, perigastrisch, peripankreatisch, Leber-, Milzhilus) + + + + + Paraaortale/paracavale Lymphknoten + + + + + Retroperitoneale Lymphknoten + + + + + Beckenlymphabfluss (r, l) (Iliakal commun, extern, intern, obturatorisch, präsakral) + + + + + Inguinale Lymphknoten (r, l) + + + + + Involved Node + + + + + Involved Site + + + + + Involved Field + + + + + Sonstige Lymphknoten + + + + + Ganzkörperbestrahlung bei allogener Stammzelltransplantation + + + + + operative Zugangswege + + + + + Sonstige, nicht genannte Zielgebiete + + + + + + + +Zielgebietschlüssel nach oBDS 2014 + + + + + + ZNS + + + + + Ganzhirn + + + + + Teilhirn + + + + + Neuroachse + + + + + Kopf-Hals + + + + + Kopf-Hals mit Lk + + + + + Kopf-Hals ohne Lk + + + + + Orbita, o.n.A. + + + + + Orbita mit Lk + + + + + Orbita ohne Lk + + + + + Nase/ Nasennebenhöhle, o.n.A. + + + + + Nase/ Nasennebenhöhle mit Lk + + + + + Nase/ Nasennebenhöhle ohne Lk + + + + + Mundhöhle, o.n.A. + + + + + Mundhöhle mit Lk + + + + + Mundhöhle ohne Lk + + + + + Ohr, o.n.A. + + + + + Ohr mit Lk + + + + + Ohr ohne Lk + + + + + Speicheldrüse, o.n.A. + + + + + Speicheldrüse mit Lk + + + + + Speicheldrüse ohne Lk + + + + + Pharynx, o.n.A. + + + + + Pharynx mit Lk + + + + + Pharynx ohne Lk + + + + + Larynx, o.n.A. + + + + + Larynx mit Lk + + + + + Larynx ohne Lk + + + + + Schilddrüse, o.n.A. + + + + + Schilddrüse mit Lk + + + + + Schilddrüse ohne Lk + + + + + Halslymphknoten + + + + + Thorax + + + + + Thorax mit Lk + + + + + Thorax ohne Lk + + + + + Mamma als Ganzbrust, o.n.A. + + + + + Mamma als Ganzbrust mit Lk + + + + + Mamma als Ganzbrust ohne Lk + + + + + Mamma als Teilbrust, o.n.A. + + + + + Mamma als Teilbrust mit Lk + + + + + Mamma als Teilbrust ohne Lk + + + + + Brustwand + + + + + Brustwand mit Lk + + + + + Brustwand ohne Lk + + + + + Lunge, o.n.A. + + + + + Lunge mit Lk + + + + + Lunge ohne Lk + + + + + Ösophagus, o.n.A. + + + + + Ösophagus mit Lk + + + + + Ösophagus ohne Lk + + + + + Thymus, o.n.A. + + + + + Thymus mit Lk + + + + + Thymus ohne Lk + + + + + Mediastinale Lymphknoten + + + + + Abdomen (ohne Becken) + + + + + Abdomen (ohne Becken) mit Lk + + + + + Abdomen (ohne Becken) ohne Lk + + + + + Magen, o.n.A. + + + + + Magen mit Lk + + + + + Magen ohne Lk + + + + + Pankreas, o.n.A. + + + + + Pankreas mit Lk + + + + + Pankreas ohne Lk + + + + + Leber, o.n.A. + + + + + Leber mit Lk + + + + + Leber ohne Lk + + + + + Milz, o.n.A. + + + + + Milz mit Lk + + + + + Milz ohne Lk + + + + + Niere, o.n.A. + + + + + Niere mit Lk + + + + + Niere ohne Lk + + + + + Nebenniere, o.n.A. + + + + + Nebenniere mit Lk + + + + + Nebenniere ohne Lk + + + + + Retroperitoneale Lymphknoten + + + + + Retroperitoneum, o.n.A. + + + + + Retroperitoneum mit Lk + + + + + Retroperitoneum ohne Lk + + + + + Bauchwand, o.n.A. + + + + + Bauchwand mit Lk + + + + + Bauchwand ohne Lk + + + + + Becken + + + + + Becken mit Lk + + + + + Becken ohne Lk + + + + + Rektum, o.n.A. + + + + + Rektum mit Lk + + + + + Rektum ohne Lk + + + + + Analbereich, o.n.A. + + + + + Analbereich ohne Lk + + + + + Analbereich mit Lk + + + + + Harnblase, o.n.A. + + + + + Harnblase ohne Lk + + + + + Harnblase mit Lk + + + + + Prostata, o.n.A. + + + + + Prostata mit Lk + + + + + Prostata ohne Lk + + + + + Hoden, o.n.A. + + + + + Hoden mit Lk + + + + + Hoden ohne Lk + + + + + Penis, o.n.A. + + + + + Penis mit Lk + + + + + Penis ohne Lk + + + + + Uterus und Zervix, o.n.A. + + + + + Uterus und Zervix mit Lk + + + + + Zervix ohne Lymphknoten + + + + + Zervix mit Lymphknoten + + + + + Zervix + + + + + Uterus ohne Lymphknoten + + + + + Uterus mit Lymphknoten + + + + + Uterus + + + + + Uterus und Zervix ohne Lk + + + + + Ovar, o.n.A. + + + + + Ovar ohne Lk + + + + + Ovar mit Lk + + + + + Vulva, o.n.A. + + + + + Vulva ohne Lk + + + + + Vulva mit Lk + + + + + Vagina, o.n.A. + + + + + Vagina mit Lk + + + + + Vagina ohne Lk + + + + + Beckenwand, o.n.A. + + + + + Beckenwand mit Lk + + + + + Beckenwand ohne Lk + + + + + Beckenlymphkn. (ohne Primtu.) + + + + + Stütz-/Bewegungsapparat + + + + + Schädelknochen + + + + + Rippen + + + + + Sternum + + + + + HWS + + + + + BWS + + + + + LWS + + + + + knöchernes Becken + + + + + Hüfte + + + + + Achsel + + + + + Oberarm + + + + + Unterarm + + + + + Hand + + + + + Leiste + + + + + Oberschenkel + + + + + Unterschenkel + + + + + Fuß + + + + + Haut + + + + + Haut mit Lymphknoten + + + + + Haut ohne Lymphknoten + + + + + Primärer Hauttumor + + + + + Hautmetastasen + + + + + Sonstiges + + + + + Ganzkörperbestrahlung + + + + + Mantelfeldbestrahlung + + + + + + + + + + + + Höchste erreichte Diagnosesicherheit zum Diagnosedatum (siehe BfArM, ICD-O-3.2: Ergänzende Informationen, Abschnitt 4.5. "Sicherheit der Diagnose"). + + + + + + Klinisch ohne tumorspezifische Diagnostik (nur körperliche Untersuchung) + + + + + Klinisch: Klinische Diagnose vor dem Sterbedatum durchgeführt; schließt diagnostische Techniken, inklusive Röntgen, Endoskopie, weitere bildgebende Verfahren, Ultraschall, exploratorische Chirurgie (Laparatomie, etc.) und Autopsie, ohne mikroskopische Gewebediagnose, ein. + + + + + Spezifische Tumormarker + + + + + Zytologisch: Untersuchung von Zellen aus primären Lokalisationen inklusive Flüssigkeitsaspirationen mittels Endoskopien oder Nadeln. Schließt mikroskopische Untersuchungen von peripheren Blutausstrichen und Ausstrichen von Beckenkammaspirationen ein. + + + + + Histologie Metastase (Ausprägung ist veraltet, besser 7.2 nutzen) + + + + + Histologie Primärtumor (Ausprägung ist veraltet, besser 7.1 nutzen) + + + + + Histologie des Primärtumors: Histologische Untersuchung von Gewebe des Primärtumors + + + + + Histologie Metastase: Histologische Untersuchung des Gewebes aus einer Metastase + + + + + Histologie der Autopsie: Histologische Untersuchung des Gewebes bei einer Autopsie + + + + + Zytogenetisch und/oder molekularer Test + + + + + Unbekannt + + + + + + + + + + + + + + Freitext zu Tumorerkrankungen die in der Anamnese zu einem früheren Zeitpunkt diagnostiziert/behandelt wurden. + + + + + ICD-Code, falls vorhanden + + + + + Jahr der früheren Tumorerkrankung + + + + + + + + + + + + + Prätherapeutisches TNM + + + + + Postoperatives TNM. Es ist nicht nötig, dass alle Bestandteile der TNM-Formel die Einstufung 'p' aufweisen. + + + + + + + + + + + + + + + + + + + + + + Höchste erreichte Diagnosesicherheit zum Diagnosedatum (siehe BfArM, ICD-O-3.2: Ergänzende Informationen, Abschnitt 4.5. "Sicherheit der Diagnose"). + ohne 1 = Klinisch ohne tumorspezifische Diagnostik (nur körperliche Untersuchung) + ohne 2 = Klinisch: Klinische Diagnose vor dem Sterbedatum durchgeführt; schließt diagnostische Techniken, inklusive Röntgen, Endoskopie, weitere bildgebende Verfahren, Ultraschall, exploratorische Chirurgie (Laparatomie, etc.) und Autopsie, ohne mikroskopische Gewebediagnose, ein. + + + + + + + Spezifische Tumormarker + + + + + Zytologisch: Untersuchung von Zellen aus primären Lokalisationen inklusive Flüssigkeitsaspirationen mittels Endoskopien oder Nadeln. Schließt mikroskopische Untersuchungen von peripheren Blutausstrichen und Ausstrichen von Beckenkammaspirationen ein. + + + + + Histologie Metastase (Ausprägung ist veraltet, besser 7.2 nutzen) + + + + + Histologie Primärtumor (Ausprägung ist veraltet, besser 7.1 nutzen) + + + + + Histologie des Primärtumors: Histologische Untersuchung von Gewebe des Primärtumors + + + + + Histologie Metastase: Histologische Untersuchung des Gewebes aus einer Metastase + + + + + Histologie der Autopsie: Histologische Untersuchung des Gewebes bei einer Autopsie + + + + + Zytogenetisch und/oder molekularer Test + + + + + Unbekannt + + + + + + + + + + Prätherapeutisches TNM + + + + + Postoperatives TNM. Es ist nicht nötig, dass alle Bestandteile der TNM-Formel die Einstufung 'p' aufweisen. + + + + + + + + + + + + + + Strukturierte, bevorzugte Form + + + + + + + + + + + + + + + + + + + Nicht strukturierte, alternative Form + + + + + + + + + + + + + + + + + + Vollständiger Befundbericht des Pathologen (Originalbenennung "Befund") + + + + + + + + + + + + + + + + Gibt an, mit welchem Ziel die Operation geplant wurde. + Die Angabe S = Sonstiges wird z.B. bei Tracheostomie vor Radiochenotherapie bei Kopf/Hals verwendet + + + + + + + kurativ + + + + + palliativ + + + + + diagnostisch + + + + + Revision/Komplikation + + + + + Sonstiges + + + + + fehlende Angabe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Nein (keine Komplikation aufgetreten) + + + + + unbekannt (unbekannt, ob Komplikation aufgetreten oder nicht) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gibt an, ob eine oder keine Komplikation aufgetreten ist, bzw. wenn eine aufgetreten ist, welche. + + + + + + + Abszeß in einem Drainagekanal + + + + + Abszeß, intraabdominaler oder intrathorakaler + + + + + Abszeß, subfaszialer + + + + + Akute Niereninsuffizienz + + + + + Alkoholentzugspsychose + + + + + Allergische Reaktion ohne Schocksymptomatik + + + + + Anaphylaktischer Schock + + + + + Anastomoseninsuffizienz einer Enterostomie + + + + + Apoplektischer Insult + + + + + Biliäre Fistel + + + + + Blutung, obere gastrointestinale (z.B "Stressulkus") + + + + + Bolusverlegung eines Endotubus + + + + + Bronchusstumpfinsuffizienz + + + + + Cholangitis + + + + + Darmanastomoseinsuffizienz + + + + + Darmpassagestörungen (z.B. protrahierte Atonie, Subileus, Ileus) + + + + + Disseminierte intravasale Koagulopathie + + + + + Drogenentzugspsychose + + + + + Druck- und Lagerungsschäden, z.B. Dekubitalulzera + + + + + Duodenalstumpfinsuffizienz + + + + + Enterale Fistel + + + + + Gerinnungsstörung + + + + + Hämatemesis + + + + + Hämaturie + + + + + Hämorrhagischer Schock + + + + + Harnfistel + + + + + Hautnekrose im Operationsbereich + + + + + Herzinsuffizienz + + + + + Herzrhythmusstörungen + + + + + Hirnnervenausfälle + + + + + Hirnorganisches Psychosyndrom (z.B. "Durchgangssyndrom") + + + + + Hyperbilirubinämie + + + + + Hypopharynxfistel + + + + + Ileofemorale Venenthrombose + + + + + Kardiogener Schock + + + + + Komplikationen einer Stomaanlage + + + + + Komplikation eines Implantates (Gefäßprothese, Totalendoprothese, Katheter), z.B. Dislokation + + + + + Krampfanfall + + + + + Kurzdarmsyndrom + + + + + Leberversagen + + + + + Lungenödem + + + + + Lymphfistel + + + + + Lymphozele + + + + + Magenentleerungsstörung + + + + + Mechanischer Ileus + + + + + Mediastinitis + + + + + Mesenterialarterien- oder -venenthrombose + + + + + Myokardinfarkt + + + + + Nachblutung, revisionsbedürftig, anderweitig nicht erwähnt + + + + + Nachblutung, nicht revisionsbedürftig, anderweitig nicht erwähnt + + + + + Nahtinsuffizienz, anderweitig nicht erwähnt + + + + + Ösophagitis + + + + + Osteitis, Osteomyelitis + + + + + Pankreasfistel + + + + + Pankreatitis + + + + + Peranale Blutung + + + + + Periphere Parese + + + + + Peripherer arterieller Verschluß (Embolie, Thrombose) + + + + + Peritonitis + + + + + Platzbauch + + + + + Pleuraempyem + + + + + Pleuraerguß + + + + + Pneumonie + + + + + Pneumothorax + + + + + Protrahierte Darmatonie (paralytischer Ileus) + + + + + Pulmonalarterienembolie + + + + + Rekurrensparese + + + + + Respiratorische Insuffizienz + + + + + Septische Komplikation eines Implantates + + + + + Septischer Schock + + + + + Störungen des Flüssigkeits-, Elektrolyt- und Säurebasenhaushaltes + + + + + Stomakomplikation (z.B. Blutung, Nekrose, Stenose) + + + + + Thrombozytopenie + + + + + TIA (transitorische ischämische Attacke) oder RIND (reversibles ischämisches neurologisches Defizit) + + + + + Transfusionszwischenfall + + + + + Wundhämatom (konservativ therapiert) + + + + + Wundheilungsstörung, subkutane + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gibt an, mit welcher Intention die Strahlentherapie geplant wurde. + Prophylaktisch/Salvage kann als kurativ oder palliativ kodiert werden. + "lokal kurativ" gibt an, wenn das Therapiekonzept lediglich lokal kurativ ist, steht also zwischen Kurativ und Palliativ + + + + + + + Kurativ + + + + + Palliativ + + + + + lokal kurativ bei Oligometastasierung + + + + + Sonstiges + + + + + Keine Angabe + + + + + + + + + Gibt an, in welchem Bezug zu einer operativen Therapie die Bestrahlung steht. + Hinweise: + A = adjuvant gilt für Therapien nach R0 Resektion + Z = additiv gilt für Therapien nach R1/R2 und RX Resektion + + + + + + + Ohne Bezug zu einer operativen Therapie + + + + + adjuvant + + + + + neoadjuvant + + + + + intraoperativ + + + + + additiv + + + + + Sonstiges + + + + + + + + + + + + + + + + + + + + + + + + + mit Chemotherapie/Sensitizer + + + + + ohne Chemotherapie/Sensitizer + + + + + + + + + + + stereotaktisch + + + + + + + + + + + atemgetriggert + + + + + + + + + + + + + + + + + + + + + + + interstitiell + + + + + endokavitär + + + + + + + + + + + high dose rate therapy + + + + + low dose rate therapy + + + + + pulsed dose rate therapy + + + + + + + + + + + + + + + + + + + + + + + selektive interne Radio-Therapie + + + + + Peptid-Radio-Rezeptor-Therapie + + + + + PSMA-Therapie + + + + + Radiojod-Therapie + + + + + Radioimmun-Therapie + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gibt den Grund an, warum die Strahlentherapie beendet wurde. + + + + + + Reguläres Ende + + + + + Zieldosis erreicht mit Unterbrechung > 3 Kalendertage + + + + + Abbruch wegen Nebenwirkungen + + + + + Abbruch wegen Progress + + + + + Abbruch aus sonstigen Gründen + + + + + Patient verweigert weitere Therapie + + + + + Patient verstorben + + + + + unbekannt + + + + + + + + + + + + + + + Photonen (ultraharte Röntgenstrahlen, inkl. Gamma-Strahler) + + + + + Elektronen + + + + + Neutronen + + + + + Protonen (leichte Wasserstoffionen/H1/Leichtionen) + + + + + Schwerionen (schwere Kohlenstoff-Ionen/C12/Sauerstoffionen/Heliumionen) + + + + + Weichstrahl (kV) + + + + + Co-60 + + + + + sonstige + + + + + + + + UH ist der am meisten verbreitete Typ + Elektronenstrahlen kommen nur bei kurzer Reichweite - Aderhautmelanom und Haut - zum Einsatz + + + + + + + + + + + + + Lu-177 + + + + + J-131 + + + + + Y-90 + + + + + Ra-223 + + + + + Ac-225 + + + + + Sm-153 + + + + + Tb-161 + + + + + Sr-89 + + + + + Ir-192 + + + + + Sonstige Nuklide + + + + + + + + + ja, mit Boost o. n. A. + + + + + simultan integrierter Boost + + + + + sequentieller Boost + + + + + konkomitanter Boost + + + + + nein, ohne Boost + + + + + + + + + + + + + + + + + + + Dosis in Gray + + + + + + + + + + + + + + + + + + + + + + Dosis in Gigabecquerel + + + + + Dosis in Megabecquerel + + + + + Dosis in Kilobecquerel + + + + + + + + + + + + + + + + + Gibt die Seitenlokalisation des Zielgebietes an + Hinweise: + Bei Zielgebieten, die durch "(r, l)" gekennzeichnet sind, ist eine Seitenangabe Pflicht. + Bei beidseitiger Bestrahlung paariger Organe sind die Bestrahlungen einzeln zu melden. + Paariges Zielgebiet ist ein anatomischer Begriff und nicht zu verwechseln mit paarigen Organen. + + + + + + links + + + + + rechts + + + + + beidseits + + + + + mittig + + + + + unbekannt + + + + + trifft nicht zu + + + + + + + + + + + + + + + + + Gibt an, mit welcher Intention die systemische Therapie geplant wurde. + + + + + + kurativ + + + + + palliativ + + + + + Sonstiges + + + + + keine Angabe + + + + + + + + Gibt an, in welchem Bezug zu einer operativen Therapie die systemische Therapie steht + + + + + + ohne Bezug zu einer operativen Therapie + + + + + adjuvant + + + + + neoadjuvant + + + + + intraoperativ + + + + + Sonstiges + + + + + + + + Gibt an, welche Art der Therapie bzw. abwartende Strategie durchgeführt wurde. + + + + + + Chemotherapie + + + + + Hormontherapie + + + + + Immun-/Antikörpertherapie + + + + + zielgerichtete Substanzen + + + + + Chemo- + Immun-/Antikörpertherapie + + + + + Chemotherapie + zielgerichtete Substanzen + + + + + Chemo- + Immun-/Antikörpertherapie + zielgerichtete Substanzen + + + + + Immun-/Antikörpertherapie + zielgerichtete Substanzen + + + + + Stammzelltransplantation (inkl. Knochenmarktransplantation) + + + + + Active Surveillance + + + + + Wait and see + + + + + Watchful Waiting + + + + + Sonstiges + + + + + + + + + + + Gibt an, mit welcher Substanz die Systemtherapie durchgeführt wurde. + Mehrere Substanzen sind einzeln anzugeben. Eine kommaseparierte Liste ist nicht zulässig. + Substanzen können mit ihrer Bezeichnung oder als ATC-Code inklusive Version angegebenw erden. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gibt den Grund an, warum die Systemtherapie beendet wurde. + + + + + + + reguläres Ende + + + + + reguläres Ende mit Dosisreduktion + + + + + reguläres Ende mit Substanzwechsel + + + + + Abbruch wegen Nebenwirkungen + + + + + Abbruch wegen Progress + + + + + Abbruch aus sonstigen Gründen + + + + + Patient verweigert weitere Therapie + + + + + Patient verstorben + + + + + unbekannt + + + + + + + + + + + + + + + + + + + + + + + + + + Gesamtbeurteilung der Erkrankung unter Berücksichtigung aller Manifestationen. + Hinweise: + P = Progression (Fortschreiten der Erkrankung) + Y = Rezidiv, jedes Wiederauftreten der Erkrankung bei vorheriger kompletter klinischer Tumorfreiheit (biochemisches Rezidiv, Lokalrezidiv und/oder Metastasierung) + + + + + + + Vollremission (complete remission, CR) + + + + + Teilremission (partial remission, PR) + + + + + keine Änderung (no change, NC) = stable disease + + + + + Progression + + + + + divergentes Geschehen + + + + + klinische Besserung des Zustandes, Kriterien für Teilremission jedoch nicht erfüllt (minimal response, MR) + + + + + Vollremission mit residualen Auffälligkeiten (CRr) + + + + + Rezidiv + + + + + Beurteilung unmöglich + + + + + fehlende Angaben + + + + + + + + + Beurteilung der Situation im Primärtumorbereich + Hinweis: + T = Tumorreste (Residualtumor), unbekannt, ob Progress oder No Change (auch für noch nicht therapierte Primärtumoren zu verwenden) + + + + + + + kein Tumor nachweisbar + + + + + Tumorreste (Residualtumor) + + + + + Tumorreste (Residualtumor) Progress + + + + + Tumorreste (Residualtumor) No Change + + + + + Lokalrezidiv + + + + + fraglicher Befund + + + + + unbekannt + + + + + fehlende Angabe + + + + + + + + + Beurteilung der Situation im Bereich der regionären Lymphknoten + Hinweis: + T = bekannter Lymphknotenbefall Residuen, unbekannt, ob Progress oder No Change + + + + + + + kein Lymphknotenbefall nachweisbar + + + + + bekannter Lymphknotenbefall Residuen + + + + + bekannter Lymphknotenbefall Progress + + + + + bekannter Lymphknotenbefall No Change + + + + + neu aufgetretenes Lymphknotenrezidiv + + + + + fraglicher Befund + + + + + unbekannt + + + + + fehlende Angabe + + + + + + + + + Beurteilung der Situation im Bereich der Fernmetastasen + Hinweis: + R= Neu aufgetretene Fernmetastase(n) bzw. Metastasenrezidivbeschriebt eine Situation, in der zuvor Metastatsenfreiheit bestanden hat + oder durch Therapie erreicht wurde.Neue Metastasen auch unter "Fernmetastasen" mit Lokalisation und Datum übermitteln. + P= Wenn zu bestehenden Fernmetastasen neue hinzukommen. Bei einem klinisch divergenten Geschehen, ist die prognostisch ungünstigere Ausprägung zu übermitteln. + Neue Metastasen auch unter "Fernmetastasen" mit Lokalisation und Datum übermitteln. + + + + + + + keine Fernmetastasen nachweisbar + + + + + Fernmetastasenl Residuen + + + + + Fernmetastasen Progress + + + + + Fernmetastasen No Change + + + + + neu aufgetretene Fernmetastase(n) bzw. Metastasenrezidiv + + + + + fraglicher Befund + + + + + unbekannt + + + + + fehlende Angabe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Krebs-Tod-Relation + + + + + + + + + + + + + + + + + Hier werden Tumorkonferenzen und andere Therapieplanungen außerhalb von Tumorkonferenzen hinterlegt + Neu in oBDS 3.0.0 ist die Dokumentation der festgelegten Therapieschritte + + + + + + + + + + + + + + + + + + + + prätherapeutische Tumorkonferenz (Festlegung der Therapiestrategie) + + + + + postoperative Tumorkonferenz (Planung der postoperativen Therapie, z. B. zur Frage adjuvante Therapie) + + + + + posttherapeutische Tumorkonferenz (manche Tumoren werden nicht operiert) + + + + + Therapieplanung ohne Tumorkonferenz + + + + + + + + + + + + + + + + + Chemotherapie + + + + + Hormontherapie + + + + + Immun-/Antikörpertherapie + + + + + zielgerichtete Substanzen + + + + + Stammzelltransplantation (inkl. Knochenmarktransplantation) + + + + + Chemo- + Immun-/Antikörpertherapie + + + + + Chemotherapie + zielgerichtete Substanzen + + + + + Chemo- + Immun-/Antikörpertherapie + zielgerichtete Substanzen + + + + + Immun-/Antikörpertherapie + zielgerichtete Substanzen + + + + + Watchful Waiting + + + + + Active Surveillance + + + + + Wait and see + + + + + Operation + + + + + Strahlentherapie + + + + + Sonstiges + + + + + keine weitere tumorspezifische Therapie empfohlen + + + + + + + + + + + + + + + + diff --git a/src/test/java/de/basisdatensatz/obds/v3/ObdsDeserialisationTest.java b/src/test/java/de/basisdatensatz/obds/v3/ObdsDeserialisationTest.java new file mode 100644 index 00000000..d5fe34b4 --- /dev/null +++ b/src/test/java/de/basisdatensatz/obds/v3/ObdsDeserialisationTest.java @@ -0,0 +1,36 @@ +package de.basisdatensatz.obds.v3; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.fasterxml.jackson.dataformat.xml.XmlMapper; +import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; +import com.fasterxml.jackson.module.jakarta.xmlbind.JakartaXmlBindAnnotationModule; +import java.io.IOException; +import org.junit.jupiter.api.Test; + +public class ObdsDeserialisationTest { + + @Test + void testShouldDeserializeObds3() throws IOException { + final var resource = this.getClass().getClassLoader().getResource("obds3/test1.xml"); + final var xmlMapper = + XmlMapper.builder() + .defaultUseWrapper(false) + .addModule(new JakartaXmlBindAnnotationModule()) + .addModule(new Jdk8Module()) + .build(); + + final var actual = xmlMapper.readValue(resource.openStream(), OBDS.class); + + assertThat(actual).isInstanceOf(OBDS.class); + assertThat(actual.getMengePatient().getPatient()).hasSize(1); + + final var patient = actual.getMengePatient().getPatient().getFirst(); + assertThat(patient).isInstanceOf(OBDS.MengePatient.Patient.class); + assertThat(patient.getMengeMeldung().getMeldung()).hasSize(1); + + final var meldung = patient.getMengeMeldung().getMeldung().getFirst(); + assertThat(meldung).isInstanceOf(OBDS.MengePatient.Patient.MengeMeldung.Meldung.class); + assertThat(meldung.getTumorzuordnung()).isInstanceOf(TumorzuordnungTyp.class); + } +} diff --git a/src/test/resources/obds3/test1.xml b/src/test/resources/obds3/test1.xml new file mode 100644 index 00000000..ded06357 --- /dev/null +++ b/src/test/resources/obds3/test1.xml @@ -0,0 +1,53 @@ + + + + TEST + Musterstraße 1, 012345 Musterhausen + + 2024-06-11 + + + + + 103456789 + E123456789 + + Tester + Patrick + M + 1980-01-01 + + Testweg + 1 + DE + 01234 + Musterhausen + + + + + I + J + + + C17.1 + 10 2015 GM + + 2024-06-10 + + + 1 + 0 + + + + + + + + + 103456789 + + + + From d81dfdacb41e59d5cc788f6e5522b0790f348fbe Mon Sep 17 00:00:00 2001 From: chgl Date: Thu, 24 Oct 2024 09:40:35 +0200 Subject: [PATCH 2/5] chore: added dummy mapper classes and snapshot tests (#133) * chore: added dummy condition mapper * chore: added dummy mapper classes and tests * final newline --- .github/workflows/ci.yml | 6 +- .github/workflows/schedule.yaml | 2 +- package.json | 3 +- .../ume/obdstofhir/FhirProperties.java | 1 + .../mapper/mii/ConditionMapper.java | 28 ++++++++++ .../obdstofhir/mapper/mii/PatientMapper.java | 31 ++++++++++ src/main/resources/application.yml | 4 +- .../mapper/mii/ConditionMapperTest.java | 56 +++++++++++++++++++ .../mapper/mii/PatientMapperTest.java | 54 ++++++++++++++++++ ...eValidConditionResource.approved.fhir.json | 9 +++ ...ateValidPatientResource.approved.fhir.json | 6 ++ 11 files changed, 194 insertions(+), 6 deletions(-) create mode 100644 src/main/java/org/miracum/streams/ume/obdstofhir/mapper/mii/ConditionMapper.java create mode 100644 src/main/java/org/miracum/streams/ume/obdstofhir/mapper/mii/PatientMapper.java create mode 100644 src/test/java/org/miracum/streams/ume/obdstofhir/mapper/mii/ConditionMapperTest.java create mode 100644 src/test/java/org/miracum/streams/ume/obdstofhir/mapper/mii/PatientMapperTest.java create mode 100644 src/test/java/snapshots/org/miracum/streams/ume/obdstofhir/mapper/mii/ConditionMapperTest.map_withGivenObds_shouldCreateValidConditionResource.approved.fhir.json create mode 100644 src/test/java/snapshots/org/miracum/streams/ume/obdstofhir/mapper/mii/PatientMapperTest.map_withGivenObds_shouldCreateValidPatientResource.approved.fhir.json diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3de3c356..e8f105c3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,7 +16,7 @@ permissions: read-all jobs: build: - uses: miracum/.github/.github/workflows/standard-build.yaml@b2389048770aa5b9ed439810bf84911fbb07f645 # v1.12.3 + uses: miracum/.github/.github/workflows/standard-build.yaml@26fdadd65c14ba321e4c3a167f86df9b41b3e813 # v1.12.6 permissions: contents: write id-token: write @@ -155,7 +155,7 @@ jobs: kind-cluster-dump.txt lint: - uses: miracum/.github/.github/workflows/standard-lint.yaml@b2389048770aa5b9ed439810bf84911fbb07f645 # v1.12.3 + uses: miracum/.github/.github/workflows/standard-lint.yaml@26fdadd65c14ba321e4c3a167f86df9b41b3e813 # v1.12.6 permissions: contents: read pull-requests: write @@ -170,7 +170,7 @@ jobs: github-token: ${{ secrets.GITHUB_TOKEN }} release: - uses: miracum/.github/.github/workflows/standard-release.yaml@b2389048770aa5b9ed439810bf84911fbb07f645 # v1.12.3 + uses: miracum/.github/.github/workflows/standard-release.yaml@26fdadd65c14ba321e4c3a167f86df9b41b3e813 # v1.12.6 needs: - lint - build diff --git a/.github/workflows/schedule.yaml b/.github/workflows/schedule.yaml index 09ec565c..18ae1e72 100644 --- a/.github/workflows/schedule.yaml +++ b/.github/workflows/schedule.yaml @@ -10,7 +10,7 @@ permissions: read-all jobs: schedule: - uses: miracum/.github/.github/workflows/standard-schedule.yaml@b2389048770aa5b9ed439810bf84911fbb07f645 # v1.12.3 + uses: miracum/.github/.github/workflows/standard-schedule.yaml@26fdadd65c14ba321e4c3a167f86df9b41b3e813 # v1.12.6 permissions: contents: read issues: write diff --git a/package.json b/package.json index d3916289..4a73a62a 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,8 @@ "dependencies": { "hl7.fhir.r4.core": "4.0.1", "de.dktk.oncology": "1.6.0", - "de.medizininformatikinitiative.kerndatensatz.person": "2024.0.0" + "de.medizininformatikinitiative.kerndatensatz.person": "2024.0.0", + "de.medizininformatikinitiative.kerndatensatz.onkologie": "2024.0.0-beta-2" }, "fhirVersions": [ "4.0.1" diff --git a/src/main/java/org/miracum/streams/ume/obdstofhir/FhirProperties.java b/src/main/java/org/miracum/streams/ume/obdstofhir/FhirProperties.java index 5f00e5ee..d7b96b85 100644 --- a/src/main/java/org/miracum/streams/ume/obdstofhir/FhirProperties.java +++ b/src/main/java/org/miracum/streams/ume/obdstofhir/FhirProperties.java @@ -81,6 +81,7 @@ public static class FhirProfiles { private String systMedStatement; private String miiPatientPseudonymisiert; private String deathObservation; + private String miiPrOnkoDiagnosePrimaertumor; } @Data diff --git a/src/main/java/org/miracum/streams/ume/obdstofhir/mapper/mii/ConditionMapper.java b/src/main/java/org/miracum/streams/ume/obdstofhir/mapper/mii/ConditionMapper.java new file mode 100644 index 00000000..a3712273 --- /dev/null +++ b/src/main/java/org/miracum/streams/ume/obdstofhir/mapper/mii/ConditionMapper.java @@ -0,0 +1,28 @@ +package org.miracum.streams.ume.obdstofhir.mapper.mii; + +import de.basisdatensatz.obds.v3.DiagnoseTyp; +import org.hl7.fhir.r4.model.*; +import org.miracum.streams.ume.obdstofhir.FhirProperties; +import org.miracum.streams.ume.obdstofhir.mapper.ObdsToFhirMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class ConditionMapper extends ObdsToFhirMapper { + + private static final Logger LOG = LoggerFactory.getLogger(ConditionMapper.class); + + @Autowired + public ConditionMapper(FhirProperties fhirProperties) { + super(fhirProperties); + } + + public Condition map(DiagnoseTyp diagnose, Reference patient) { + var condition = new Condition(); + condition.setSubject(patient); + condition.getMeta().addProfile(fhirProperties.getProfiles().getMiiPrOnkoDiagnosePrimaertumor()); + return condition; + } +} diff --git a/src/main/java/org/miracum/streams/ume/obdstofhir/mapper/mii/PatientMapper.java b/src/main/java/org/miracum/streams/ume/obdstofhir/mapper/mii/PatientMapper.java new file mode 100644 index 00000000..f3fc5115 --- /dev/null +++ b/src/main/java/org/miracum/streams/ume/obdstofhir/mapper/mii/PatientMapper.java @@ -0,0 +1,31 @@ +package org.miracum.streams.ume.obdstofhir.mapper.mii; + +import de.basisdatensatz.obds.v3.OBDS; +import de.basisdatensatz.obds.v3.PatientenStammdatenMelderTyp; +import java.util.List; +import org.hl7.fhir.r4.model.*; +import org.miracum.streams.ume.obdstofhir.FhirProperties; +import org.miracum.streams.ume.obdstofhir.mapper.ObdsToFhirMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class PatientMapper extends ObdsToFhirMapper { + + private static final Logger LOG = LoggerFactory.getLogger(PatientMapper.class); + + @Autowired + public PatientMapper(FhirProperties fhirProperties) { + super(fhirProperties); + } + + public Patient map( + PatientenStammdatenMelderTyp stammdaten, + List meldungen) { + var patient = new Patient(); + patient.getMeta().addProfile(fhirProperties.getProfiles().getMiiPatientPseudonymisiert()); + return patient; + } +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index bf5b0fa9..ec8ad6ca 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -62,8 +62,10 @@ fhir: opProcedure: "http://dktk.dkfz.de/fhir/StructureDefinition/onco-core-Procedure-Operation" stProcedure: "http://dktk.dkfz.de/fhir/StructureDefinition/onco-core-Procedure-Strahlentherapie" systMedStatement: "http://dktk.dkfz.de/fhir/StructureDefinition/onco-core-MedicationStatement-Systemtherapie" - miiPatientPseudonymisiert: "https://www.medizininformatik-initiative.de/fhir/core/modul-person/StructureDefinition/PatientPseudonymisiert" deathObservation: "http://dktk.dkfz.de/fhir/StructureDefinition/onco-core-Observation-TodUrsache" + # MII + miiPatientPseudonymisiert: "https://www.medizininformatik-initiative.de/fhir/core/modul-person/StructureDefinition/PatientPseudonymisiert" + mii-pr-onko-diagnose-primaertumor: https://www.medizininformatik-initiative.de/fhir/ext/modul-onko/StructureDefinition/mii-pr-onko-diagnose-primaertumor display: histologyLoinc: "Histology and Behavior ICD-O-3 Cancer" gradingLoinc: "Grade pathology value Cancer" diff --git a/src/test/java/org/miracum/streams/ume/obdstofhir/mapper/mii/ConditionMapperTest.java b/src/test/java/org/miracum/streams/ume/obdstofhir/mapper/mii/ConditionMapperTest.java new file mode 100644 index 00000000..cf74a1c0 --- /dev/null +++ b/src/test/java/org/miracum/streams/ume/obdstofhir/mapper/mii/ConditionMapperTest.java @@ -0,0 +1,56 @@ +package org.miracum.streams.ume.obdstofhir.mapper.mii; + +import static org.assertj.core.api.Assertions.assertThat; + +import ca.uhn.fhir.context.FhirContext; +import com.fasterxml.jackson.dataformat.xml.XmlMapper; +import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; +import com.fasterxml.jackson.module.jakarta.xmlbind.JakartaXmlBindAnnotationModule; +import de.basisdatensatz.obds.v3.OBDS; +import java.io.IOException; +import org.approvaltests.Approvals; +import org.approvaltests.core.Options; +import org.hl7.fhir.r4.model.Reference; +import org.junit.jupiter.api.Test; +import org.miracum.streams.ume.obdstofhir.FhirProperties; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest(classes = {FhirProperties.class}) +@EnableConfigurationProperties +class ConditionMapperTest { + private final ConditionMapper sut; + + @Autowired + ConditionMapperTest(FhirProperties fhirProps) { + sut = new ConditionMapper(fhirProps); + } + + @Test + void map_withGivenObds_shouldCreateValidConditionResource() throws IOException { + // TODO: refactor to use a data provider for parameterized tests + final var resource = this.getClass().getClassLoader().getResource("obds3/test1.xml"); + assertThat(resource).isNotNull(); + + final var xmlMapper = + XmlMapper.builder() + .defaultUseWrapper(false) + .addModule(new JakartaXmlBindAnnotationModule()) + .addModule(new Jdk8Module()) + .build(); + + final var obds = xmlMapper.readValue(resource.openStream(), OBDS.class); + + var obdsPatient = obds.getMengePatient().getPatient().getFirst(); + + final var condition = + sut.map( + obdsPatient.getMengeMeldung().getMeldung().getFirst().getDiagnose(), + new Reference("Patient/1")); + + var fhirParser = FhirContext.forR4().newJsonParser().setPrettyPrint(true); + var fhirJson = fhirParser.encodeResourceToString(condition); + Approvals.verify(fhirJson, new Options().forFile().withExtension(".fhir.json")); + } +} diff --git a/src/test/java/org/miracum/streams/ume/obdstofhir/mapper/mii/PatientMapperTest.java b/src/test/java/org/miracum/streams/ume/obdstofhir/mapper/mii/PatientMapperTest.java new file mode 100644 index 00000000..dcbbf9d3 --- /dev/null +++ b/src/test/java/org/miracum/streams/ume/obdstofhir/mapper/mii/PatientMapperTest.java @@ -0,0 +1,54 @@ +package org.miracum.streams.ume.obdstofhir.mapper.mii; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.*; + +import ca.uhn.fhir.context.FhirContext; +import com.fasterxml.jackson.dataformat.xml.XmlMapper; +import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; +import com.fasterxml.jackson.module.jakarta.xmlbind.JakartaXmlBindAnnotationModule; +import de.basisdatensatz.obds.v3.OBDS; +import java.io.IOException; +import org.approvaltests.Approvals; +import org.approvaltests.core.Options; +import org.junit.jupiter.api.Test; +import org.miracum.streams.ume.obdstofhir.FhirProperties; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest(classes = {FhirProperties.class}) +@EnableConfigurationProperties +class PatientMapperTest { + private final PatientMapper sut; + + @Autowired + PatientMapperTest(FhirProperties fhirProps) { + sut = new PatientMapper(fhirProps); + } + + @Test + void map_withGivenObds_shouldCreateValidPatientResource() throws IOException { + // TODO: refactor to use a data provider for parameterized tests + final var resource = this.getClass().getClassLoader().getResource("obds3/test1.xml"); + assertThat(resource).isNotNull(); + + final var xmlMapper = + XmlMapper.builder() + .defaultUseWrapper(false) + .addModule(new JakartaXmlBindAnnotationModule()) + .addModule(new Jdk8Module()) + .build(); + + final var obds = xmlMapper.readValue(resource.openStream(), OBDS.class); + + var obdsPatient = obds.getMengePatient().getPatient().getFirst(); + + final var patient = + sut.map(obdsPatient.getPatientenStammdaten(), obdsPatient.getMengeMeldung().getMeldung()); + + var fhirParser = FhirContext.forR4().newJsonParser().setPrettyPrint(true); + var fhirJson = fhirParser.encodeResourceToString(patient); + Approvals.verify(fhirJson, new Options().forFile().withExtension(".fhir.json")); + } +} diff --git a/src/test/java/snapshots/org/miracum/streams/ume/obdstofhir/mapper/mii/ConditionMapperTest.map_withGivenObds_shouldCreateValidConditionResource.approved.fhir.json b/src/test/java/snapshots/org/miracum/streams/ume/obdstofhir/mapper/mii/ConditionMapperTest.map_withGivenObds_shouldCreateValidConditionResource.approved.fhir.json new file mode 100644 index 00000000..c381911e --- /dev/null +++ b/src/test/java/snapshots/org/miracum/streams/ume/obdstofhir/mapper/mii/ConditionMapperTest.map_withGivenObds_shouldCreateValidConditionResource.approved.fhir.json @@ -0,0 +1,9 @@ +{ + "resourceType": "Condition", + "meta": { + "profile": [ "https://www.medizininformatik-initiative.de/fhir/ext/modul-onko/StructureDefinition/mii-pr-onko-diagnose-primaertumor" ] + }, + "subject": { + "reference": "Patient/1" + } +} diff --git a/src/test/java/snapshots/org/miracum/streams/ume/obdstofhir/mapper/mii/PatientMapperTest.map_withGivenObds_shouldCreateValidPatientResource.approved.fhir.json b/src/test/java/snapshots/org/miracum/streams/ume/obdstofhir/mapper/mii/PatientMapperTest.map_withGivenObds_shouldCreateValidPatientResource.approved.fhir.json new file mode 100644 index 00000000..6baeec3c --- /dev/null +++ b/src/test/java/snapshots/org/miracum/streams/ume/obdstofhir/mapper/mii/PatientMapperTest.map_withGivenObds_shouldCreateValidPatientResource.approved.fhir.json @@ -0,0 +1,6 @@ +{ + "resourceType": "Patient", + "meta": { + "profile": [ "https://www.medizininformatik-initiative.de/fhir/core/modul-person/StructureDefinition/PatientPseudonymisiert" ] + } +} From e70141a770e6b3fea005b62157543bb6907bf16b Mon Sep 17 00:00:00 2001 From: chgl Date: Thu, 24 Oct 2024 13:38:27 +0200 Subject: [PATCH 3/5] ci: release only on master or workflow_dispatch (#135) --- .github/workflows/ci.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e8f105c3..1501f091 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,11 +6,13 @@ on: - master - beta release: - types: [created] + types: + - created pull_request: branches: - master - beta + workflow_dispatch: {} permissions: read-all @@ -171,6 +173,7 @@ jobs: release: uses: miracum/.github/.github/workflows/standard-release.yaml@26fdadd65c14ba321e4c3a167f86df9b41b3e813 # v1.12.6 + if: ${{ github.ref_name == 'master' || github.event_name == 'workflow_dispatch' }} needs: - lint - build From 0e363e34d006fff2cf2aff39945a9844ad816672 Mon Sep 17 00:00:00 2001 From: cfischer27 Date: Thu, 24 Oct 2024 15:41:40 +0200 Subject: [PATCH 4/5] feat: first draft condition mapper (#136) Co-authored-by: chgl --- gradle.properties | 1 + .../obdstofhir/mapper/mii/ConditionMapper.java | 17 +++++++++++++++-- .../mapper/mii/ConditionMapperTest.java | 6 +++--- ...ateValidConditionResource.approved.fhir.json | 9 ++++++++- 4 files changed, 27 insertions(+), 6 deletions(-) create mode 100644 gradle.properties diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 00000000..031ac9b8 --- /dev/null +++ b/gradle.properties @@ -0,0 +1 @@ +org.gradle.jvmargs=-Dfile.enconding=UTF-8 diff --git a/src/main/java/org/miracum/streams/ume/obdstofhir/mapper/mii/ConditionMapper.java b/src/main/java/org/miracum/streams/ume/obdstofhir/mapper/mii/ConditionMapper.java index a3712273..6d116197 100644 --- a/src/main/java/org/miracum/streams/ume/obdstofhir/mapper/mii/ConditionMapper.java +++ b/src/main/java/org/miracum/streams/ume/obdstofhir/mapper/mii/ConditionMapper.java @@ -1,6 +1,6 @@ package org.miracum.streams.ume.obdstofhir.mapper.mii; -import de.basisdatensatz.obds.v3.DiagnoseTyp; +import de.basisdatensatz.obds.v3.OBDS; import org.hl7.fhir.r4.model.*; import org.miracum.streams.ume.obdstofhir.FhirProperties; import org.miracum.streams.ume.obdstofhir.mapper.ObdsToFhirMapper; @@ -19,10 +19,23 @@ public ConditionMapper(FhirProperties fhirProperties) { super(fhirProperties); } - public Condition map(DiagnoseTyp diagnose, Reference patient) { + public Condition map(OBDS.MengePatient.Patient.MengeMeldung.Meldung meldung, Reference patient) { var condition = new Condition(); condition.setSubject(patient); condition.getMeta().addProfile(fhirProperties.getProfiles().getMiiPrOnkoDiagnosePrimaertumor()); + var tumorzuordnung = meldung.getTumorzuordnung(); + if (tumorzuordnung == null) { + throw new RuntimeException("tumorzuordnung ist null"); + } + condition.setRecordedDate( + tumorzuordnung.getDiagnosedatum().getValue().toGregorianCalendar().getTime()); + + condition.setCode( + new CodeableConcept( + new Coding( + fhirProperties.getSystems().getIcd10gm(), + tumorzuordnung.getPrimaertumorICD().getCode(), + ""))); return condition; } } diff --git a/src/test/java/org/miracum/streams/ume/obdstofhir/mapper/mii/ConditionMapperTest.java b/src/test/java/org/miracum/streams/ume/obdstofhir/mapper/mii/ConditionMapperTest.java index cf74a1c0..fa3d49c6 100644 --- a/src/test/java/org/miracum/streams/ume/obdstofhir/mapper/mii/ConditionMapperTest.java +++ b/src/test/java/org/miracum/streams/ume/obdstofhir/mapper/mii/ConditionMapperTest.java @@ -8,6 +8,7 @@ import com.fasterxml.jackson.module.jakarta.xmlbind.JakartaXmlBindAnnotationModule; import de.basisdatensatz.obds.v3.OBDS; import java.io.IOException; +import java.util.TimeZone; import org.approvaltests.Approvals; import org.approvaltests.core.Options; import org.hl7.fhir.r4.model.Reference; @@ -29,6 +30,7 @@ class ConditionMapperTest { @Test void map_withGivenObds_shouldCreateValidConditionResource() throws IOException { + TimeZone.setDefault(TimeZone.getTimeZone("Europe/Berlin")); // TODO: refactor to use a data provider for parameterized tests final var resource = this.getClass().getClassLoader().getResource("obds3/test1.xml"); assertThat(resource).isNotNull(); @@ -45,9 +47,7 @@ void map_withGivenObds_shouldCreateValidConditionResource() throws IOException { var obdsPatient = obds.getMengePatient().getPatient().getFirst(); final var condition = - sut.map( - obdsPatient.getMengeMeldung().getMeldung().getFirst().getDiagnose(), - new Reference("Patient/1")); + sut.map(obdsPatient.getMengeMeldung().getMeldung().getFirst(), new Reference("Patient/1")); var fhirParser = FhirContext.forR4().newJsonParser().setPrettyPrint(true); var fhirJson = fhirParser.encodeResourceToString(condition); diff --git a/src/test/java/snapshots/org/miracum/streams/ume/obdstofhir/mapper/mii/ConditionMapperTest.map_withGivenObds_shouldCreateValidConditionResource.approved.fhir.json b/src/test/java/snapshots/org/miracum/streams/ume/obdstofhir/mapper/mii/ConditionMapperTest.map_withGivenObds_shouldCreateValidConditionResource.approved.fhir.json index c381911e..79c40a54 100644 --- a/src/test/java/snapshots/org/miracum/streams/ume/obdstofhir/mapper/mii/ConditionMapperTest.map_withGivenObds_shouldCreateValidConditionResource.approved.fhir.json +++ b/src/test/java/snapshots/org/miracum/streams/ume/obdstofhir/mapper/mii/ConditionMapperTest.map_withGivenObds_shouldCreateValidConditionResource.approved.fhir.json @@ -3,7 +3,14 @@ "meta": { "profile": [ "https://www.medizininformatik-initiative.de/fhir/ext/modul-onko/StructureDefinition/mii-pr-onko-diagnose-primaertumor" ] }, + "code": { + "coding": [ { + "system": "http://fhir.de/CodeSystem/bfarm/icd-10-gm", + "code": "C17.1" + } ] + }, "subject": { "reference": "Patient/1" - } + }, + "recordedDate": "2024-06-10T02:00:00+02:00" } From 5353935159682423ffe0c71efdb0cfc896dacc61 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 24 Oct 2024 13:48:31 +0000 Subject: [PATCH 5/5] chore(release): 2.3.0-beta.1 [skip ci] ## [2.3.0-beta.1](https://github.com/bzkf/obds-to-fhir/compare/v2.2.1...v2.3.0-beta.1) (2024-10-24) ### Features * first draft condition mapper ([#136](https://github.com/bzkf/obds-to-fhir/issues/136)) ([0e363e3](https://github.com/bzkf/obds-to-fhir/commit/0e363e34d006fff2cf2aff39945a9844ad816672)) ### Bug Fixes * mapping exception in connect record id field if it's not an integer ([#134](https://github.com/bzkf/obds-to-fhir/issues/134)) ([a3f9d1e](https://github.com/bzkf/obds-to-fhir/commit/a3f9d1e37af5a34f355d2836e850124cd0361905)) ### Miscellaneous Chores * added dummy mapper classes and snapshot tests ([#133](https://github.com/bzkf/obds-to-fhir/issues/133)) ([d81dfda](https://github.com/bzkf/obds-to-fhir/commit/d81dfdacb41e59d5cc788f6e5522b0790f348fbe)) * added obds v3 skaffolding to beta ([#132](https://github.com/bzkf/obds-to-fhir/issues/132)) ([f805b2b](https://github.com/bzkf/obds-to-fhir/commit/f805b2ba40cf68166e759b4725ac491199f746dd)), closes [#101](https://github.com/bzkf/obds-to-fhir/issues/101) * **deps:** update docker.io/gvenzl/oracle-free:23.5-slim-faststart docker digest to 9c0f4d5 ([#112](https://github.com/bzkf/obds-to-fhir/issues/112)) ([9db2691](https://github.com/bzkf/obds-to-fhir/commit/9db2691d38098c93365f3a791dbd7ad6c0892ebc)) * **deps:** update gcr.io/distroless/java21-debian12:nonroot docker digest to 2985410 ([#113](https://github.com/bzkf/obds-to-fhir/issues/113)) ([e338f6b](https://github.com/bzkf/obds-to-fhir/commit/e338f6b2447e4e4b829f70c2984d630437fddbb6)) * **deps:** update github-actions ([#114](https://github.com/bzkf/obds-to-fhir/issues/114)) ([59d30c7](https://github.com/bzkf/obds-to-fhir/commit/59d30c728b4af99795c57a1b89645306243d0401)) * **deps:** update github-actions ([#137](https://github.com/bzkf/obds-to-fhir/issues/137)) ([63fe5cc](https://github.com/bzkf/obds-to-fhir/commit/63fe5cc233526f40e4d005fc1a59bc2687fc5c5f)) ### CI/CD * release only on master or workflow_dispatch ([#135](https://github.com/bzkf/obds-to-fhir/issues/135)) ([e70141a](https://github.com/bzkf/obds-to-fhir/commit/e70141a770e6b3fea005b62157543bb6907bf16b)) --- build.gradle | 2 +- src/main/resources/application.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index c964b455..97a814ac 100644 --- a/build.gradle +++ b/build.gradle @@ -8,7 +8,7 @@ plugins { } group = 'org.miracum.streams.ume' -version = '2.2.1' +version = '2.3.0-beta.1' sourceCompatibility = '21' targetCompatibility = '21' diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index ec8ad6ca..1dc6e1b5 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,5 +1,5 @@ app: - version: 2.2.1 + version: 2.3.0-beta.1 enableCheckDigitConv: ${CHECK_DIGIT_CONVERSION:false} patient-id-pattern: "[^0]\\d{8}"