From c24587a5bd2bc56ce273d3fb7291de73982e4427 Mon Sep 17 00:00:00 2001 From: Paul-Christian Volkmer Date: Tue, 6 Aug 2024 09:06:33 +0200 Subject: [PATCH] feat: add topic fhir.pseudonymized.* --- README.md | 3 +- docs/screenshot.jpeg | Bin 50163 -> 55665 bytes .../OncoAnalyticsMonitorApplication.kt | 5 ++ .../FhirPseudonymizedTopicMonitor.kt | 55 ++++++++++++++++++ .../monitor/web/StatisticsController.kt | 7 +++ src/main/resources/static/css/style.css | 36 ++++++++---- src/main/resources/templates/index.html | 36 +++++++++--- 7 files changed, 120 insertions(+), 22 deletions(-) create mode 100644 src/main/kotlin/dev/pcvolkmer/oncoanalytics/monitor/topiclisteners/FhirPseudonymizedTopicMonitor.kt diff --git a/README.md b/README.md index a2e6c6b..c3384ba 100644 --- a/README.md +++ b/README.md @@ -19,4 +19,5 @@ Das `*` wird als Wildcard Match für ein beliebiges Jahr gemäß der Topics in [onco-analytics-on-fhir](https://github.com/bzkf/onco-analytics-on-fhir) verwendet. * `onkostar.MELDUNG_EXPORT.*`: Alle eingehenden Meldungen aus Onkostar -* `fhir.obds.Condition.*`: Alle Conditions, die aus den oBDS-Meldungen erzeugt wurden. \ No newline at end of file +* `fhir.obds.Condition.*`: Alle Conditions, die aus den oBDS-Meldungen erzeugt wurden. +* `fhir.pseudonymized.*`: Alle pseudonymisierten Conditions. \ No newline at end of file diff --git a/docs/screenshot.jpeg b/docs/screenshot.jpeg index 0506cb0e9452d33bce647a1ad8d64e2d519432fa..a69181ab4b97978e0be330f09db8e44796a44056 100644 GIT binary patch literal 55665 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%0DJ-NpLl0!dTdS6W(?r`lIo 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�IneNHy$7Z0f@mkV-N)Jb%qnT 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 diff --git a/src/main/kotlin/dev/pcvolkmer/oncoanalytics/monitor/OncoAnalyticsMonitorApplication.kt b/src/main/kotlin/dev/pcvolkmer/oncoanalytics/monitor/OncoAnalyticsMonitorApplication.kt index 2e8239e..48cef6a 100644 --- a/src/main/kotlin/dev/pcvolkmer/oncoanalytics/monitor/OncoAnalyticsMonitorApplication.kt +++ b/src/main/kotlin/dev/pcvolkmer/oncoanalytics/monitor/OncoAnalyticsMonitorApplication.kt @@ -27,6 +27,11 @@ class OncoAnalyticsMonitorApplication { return ConditionInMemoryRepository() } + @Bean + fun fhirPseudonymizedConditionRepository(): ConditionInMemoryRepository { + return ConditionInMemoryRepository() + } + } fun main(args: Array) { diff --git a/src/main/kotlin/dev/pcvolkmer/oncoanalytics/monitor/topiclisteners/FhirPseudonymizedTopicMonitor.kt b/src/main/kotlin/dev/pcvolkmer/oncoanalytics/monitor/topiclisteners/FhirPseudonymizedTopicMonitor.kt new file mode 100644 index 0000000..526ee8a --- /dev/null +++ b/src/main/kotlin/dev/pcvolkmer/oncoanalytics/monitor/topiclisteners/FhirPseudonymizedTopicMonitor.kt @@ -0,0 +1,55 @@ +package dev.pcvolkmer.oncoanalytics.monitor.topiclisteners + +import ca.uhn.fhir.context.FhirContext +import dev.pcvolkmer.oncoanalytics.monitor.StatisticsSink +import dev.pcvolkmer.oncoanalytics.monitor.conditions.Condition +import dev.pcvolkmer.oncoanalytics.monitor.conditions.ConditionId +import dev.pcvolkmer.oncoanalytics.monitor.conditions.ConditionInMemoryRepository +import dev.pcvolkmer.oncoanalytics.monitor.fetchStatistics +import org.hl7.fhir.r4.model.Bundle +import org.springframework.beans.factory.annotation.Qualifier +import org.springframework.kafka.annotation.KafkaListener +import org.springframework.kafka.support.KafkaHeaders +import org.springframework.messaging.handler.annotation.Header +import org.springframework.messaging.handler.annotation.Payload +import org.springframework.stereotype.Component + +@Component +class FhirPseudonymizedTopicMonitor( + @Qualifier("fhirPseudonymizedConditionRepository") + private val conditionRepository: ConditionInMemoryRepository, + statisticsEventProducer: StatisticsSink, +) : TopicMonitor(statisticsEventProducer) { + + @KafkaListener(topicPattern = "fhir.pseudonymized.*") + override fun handleTopicRecord( + @Header(KafkaHeaders.RECEIVED_TOPIC) topic: String, + @Header(KafkaHeaders.RECEIVED_TIMESTAMP) timestamp: Long, + @Header(KafkaHeaders.RECEIVED_KEY) key: String, + @Payload payload: String, + ) { + try { + val ctx = FhirContext.forR4() + val parser = ctx.newJsonParser() + + val bundle = parser.parseResource(Bundle::class.java, payload) + val firstEntry = bundle.entry.firstOrNull() ?: return + + if (firstEntry.resource.fhirType() == "Condition") { + val condition = firstEntry.resource as org.hl7.fhir.r4.model.Condition + val updated = conditionRepository.save( + Condition( + ConditionId(condition.id), + condition.code.coding.first { "http://fhir.de/CodeSystem/bfarm/icd-10-gm" == it.system }.code + ) + ) + + if (updated) { + sendUpdatedStatistics(fetchStatistics("fhirpseudonymized", conditionRepository)) + } + } + } catch (e: Exception) { + // Ignore + } + } +} \ No newline at end of file diff --git a/src/main/kotlin/dev/pcvolkmer/oncoanalytics/monitor/web/StatisticsController.kt b/src/main/kotlin/dev/pcvolkmer/oncoanalytics/monitor/web/StatisticsController.kt index 6d126ce..35b2964 100644 --- a/src/main/kotlin/dev/pcvolkmer/oncoanalytics/monitor/web/StatisticsController.kt +++ b/src/main/kotlin/dev/pcvolkmer/oncoanalytics/monitor/web/StatisticsController.kt @@ -15,6 +15,8 @@ class StatisticsController( private val obdsXmlConditionRepository: ConditionInMemoryRepository, @Qualifier("obdsFhirConditionRepository") private val obdsFhirConditionRepository: ConditionInMemoryRepository, + @Qualifier("fhirPseudonymizedConditionRepository") + private val fhirPseudonymizedConditionRepository: ConditionInMemoryRepository, ) { @GetMapping(path = ["obdsxml"]) @@ -27,4 +29,9 @@ class StatisticsController( return fetchStatistics("obdfhir", obdsFhirConditionRepository) } + @GetMapping(path = ["fhirpseudonymized"]) + fun fhirpseudonymizedStatistics(): Statistics { + return fetchStatistics("fhirpseudonymized", fhirPseudonymizedConditionRepository) + } + } \ No newline at end of file diff --git a/src/main/resources/static/css/style.css b/src/main/resources/static/css/style.css index 33f19ab..0639173 100644 --- a/src/main/resources/static/css/style.css +++ b/src/main/resources/static/css/style.css @@ -1,11 +1,26 @@ +* { + box-sizing: border-box; + color: #333; + font-family: sans-serif; +} + body { - margin: 0; + margin: 0 auto; background-color: #f5f5f5; + + display: grid; + width: fit-content; } header { - margin: 1em 0 6em 0; text-align: left; + margin: 1em 0; +} + +main { + width: fit-content; + margin: 1em auto; + text-align: center; } .statistics table { @@ -39,18 +54,15 @@ tr > td:last-of-type { text-align: right; } -.content { - width: fit-content; - height: 100vh; - margin: 0 auto; - padding: 1em; - text-align: center; -} - .step { display: inline-block; width: fit-content; vertical-align: top; + margin-top: 1em; +} + +.step:has(.item .statistics) { + margin-top: 1px; } .step > .item { @@ -65,7 +77,7 @@ tr > td:last-of-type { } .step .item:has(.statistics) { - width: 14em; + width: 11em; background: white; border-radius: 2em 2em .4em .4em; @@ -76,7 +88,7 @@ tr > td:last-of-type { .step:before, .step:after { content: ""; margin: 2em 0; - width: 1em; + width: 8px; height: 2px; background: black; display: inline-block; diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html index 6e3407a..237aaa1 100644 --- a/src/main/resources/templates/index.html +++ b/src/main/resources/templates/index.html @@ -7,14 +7,14 @@ -
+
+

onco-analytics-monitor

+

+ Überwachung der einzelnen Kafka Topics und enthaltener Conditions - aufgeteilt nach ICD10-Gruppe. +

+
-
-

onco-analytics-monitor

-

- Überwachung der einzelnen Kafka Topics und enthaltener Conditions - aufgeteilt nach ICD10-Gruppe. -

-
+
@@ -29,7 +29,7 @@
-
Kafka Topic oBDS XML
+
Kafka Topic
oBDS XML
@@ -42,12 +42,25 @@
-
Kafka Topic oBDS FHIR
+
Kafka Topic
oBDS FHIR
+
+
+ +
fhir-pseudonymizer
+
+
+ +
Kafka Topic
FHIR pseudonymized
+
+
+
+
+
@@ -66,6 +79,7 @@ fetch('/statistics/obdsxml').then(res => res.json()).then(data => updateData(data, 'obdsxml')); fetch('/statistics/obdsfhir').then(res => res.json()).then(data => updateData(data, 'obdsfhir')); + fetch('/statistics/fhirpseudonymized').then(res => res.json()).then(data => updateData(data, 'fhirpseudonymized')); window.addEventListener('load', () => { const evtSource = new EventSource('/events'); @@ -77,6 +91,10 @@ evtSource.addEventListener('obdsfhir', (event) => { updateData(JSON.parse(event.data), 'obdsfhir') }); + + evtSource.addEventListener('fhirpseudonymized', (event) => { + updateData(JSON.parse(event.data), 'fhirpseudonymized') + }); });