summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPaul-Christian Volkmer2025-11-03 11:43:19 +0100
committerPaul-Christian Volkmer2025-11-04 14:45:06 +0100
commitc88788997d2d7487eb4460d7e5cd49d087454f2f (patch)
tree7ededa0b3853790bf2226c2e95cb7e3555d21f66 /src
parent6dfbadde23a7c920c4d4e474a060d2caf9c05246 (diff)
fix: do not re-anonymize diagnosis ID (#179)
(cherry picked from commit 30ad7c299cb5c6e70a934df885efe82501fe5172)
Diffstat (limited to 'src')
-rw-r--r--src/main/kotlin/dev/dnpm/etl/processor/pseudonym/extensions.kt36
-rw-r--r--src/test/kotlin/dev/dnpm/etl/processor/pseudonym/ExtensionsTest.kt74
2 files changed, 86 insertions, 24 deletions
diff --git a/src/main/kotlin/dev/dnpm/etl/processor/pseudonym/extensions.kt b/src/main/kotlin/dev/dnpm/etl/processor/pseudonym/extensions.kt
index 21d49c2..8721cbe 100644
--- a/src/main/kotlin/dev/dnpm/etl/processor/pseudonym/extensions.kt
+++ b/src/main/kotlin/dev/dnpm/etl/processor/pseudonym/extensions.kt
@@ -125,35 +125,32 @@ infix fun Mtb.anonymizeContentWith(pseudonymizeService: PseudonymizeService) {
this.carePlans?.onEach { carePlan ->
carePlan?.apply {
- id = id?.let { anonymize(it) }
+ this.id = id?.let { anonymize(it) }
- diagnoses?.forEach { it -> it?.id = it.id?.let(::anonymize) }
- geneticCounselingRecommendation?.apply {
- id = geneticCounselingRecommendation.id?.let(::anonymize)
+ this.geneticCounselingRecommendation?.apply {
+ this.id = this.id?.let(::anonymize)
}
- rebiopsyRequests?.forEach { it ->
+ this.rebiopsyRequests?.forEach { it ->
it.id = it.id?.let(::anonymize)
it.tumorEntity?.id = it.tumorEntity?.id?.let(::anonymize)
}
- histologyReevaluationRequests?.forEach { it ->
+ this.histologyReevaluationRequests?.forEach { it ->
it.id = it?.id?.let(::anonymize)
it.specimen?.id = it.specimen?.id?.let(::anonymize)
}
- medicationRecommendations?.forEach { it ->
+ this.medicationRecommendations?.forEach { it ->
it.id = it?.id?.let(::anonymize)
it.supportingVariants?.forEach { it ->
it.variant?.id = it.variant?.id?.let(::anonymize)
}
it.reason?.id = it.reason?.id?.let(::anonymize)
}
- reason?.id = reason?.id?.let(::anonymize)
- studyEnrollmentRecommendations?.forEach { it ->
+ this.reason?.id = this.reason?.id?.let(::anonymize)
+ this.studyEnrollmentRecommendations?.forEach { it ->
it?.reason?.id = it.reason?.id?.let(::anonymize)
}
-
- procedureRecommendations?.forEach { it ->
-
+ this.procedureRecommendations?.forEach { it ->
it.id = it?.id?.let(::anonymize)
it.supportingVariants?.forEach { it ->
it.variant?.id = it.variant?.id?.let(::anonymize)
@@ -161,16 +158,11 @@ infix fun Mtb.anonymizeContentWith(pseudonymizeService: PseudonymizeService) {
it.reason?.id = it.reason?.id?.let(::anonymize)
- studyEnrollmentRecommendations?.forEach { it ->
-
- it.id = it?.id?.let(::anonymize)
- it.supportingVariants.forEach { it ->
- it.variant?.id = it?.variant?.id?.let(::anonymize)
- }
- responses?.forEach { it ->
- it.id = it?.id?.let(::anonymize)
- it.id = it?.id?.let(::anonymize)
- }
+ }
+ this.studyEnrollmentRecommendations?.forEach { it ->
+ it.id = it?.id?.let(::anonymize)
+ it.supportingVariants.forEach { it ->
+ it.variant?.id = it?.variant?.id?.let(::anonymize)
}
}
}
diff --git a/src/test/kotlin/dev/dnpm/etl/processor/pseudonym/ExtensionsTest.kt b/src/test/kotlin/dev/dnpm/etl/processor/pseudonym/ExtensionsTest.kt
index 8460293..c302362 100644
--- a/src/test/kotlin/dev/dnpm/etl/processor/pseudonym/ExtensionsTest.kt
+++ b/src/test/kotlin/dev/dnpm/etl/processor/pseudonym/ExtensionsTest.kt
@@ -112,7 +112,7 @@ class ExtensionsTest {
}.whenever(pseudonymizeService).prefix()
val mtbFile = Mtb().apply {
- this.patient = dev.pcvolkmer.mv64e.mtb.Patient().apply {
+ this.patient = Patient().apply {
this.id = "PID"
this.birthDate = Date.from(Instant.now())
this.gender = GenderCoding().apply {
@@ -173,7 +173,7 @@ class ExtensionsTest {
Math.random().toLong().toString()
simpleVariant.fusionPartner5Prime?.transcriptId?.value =
Math.random().toLong().toString()
- simpleVariant.externalIds?.forEach { it ->
+ simpleVariant.externalIds?.forEach {
it?.value = Math.random().toLong().toString()
}
}
@@ -197,4 +197,74 @@ class ExtensionsTest {
}
}
}
+
+ @Test
+ fun shouldUseSameAnonymIdForDiagnosisAndDiagnosisReferences(@Mock pseudonymizeService: PseudonymizeService) {
+
+ doAnswer {
+ it.arguments[0]
+ "PSEUDO-ID"
+ }.whenever(pseudonymizeService).patientPseudonym(anyValueClass())
+
+ doAnswer {
+ "TESTDOMAIN"
+ }.whenever(pseudonymizeService).prefix()
+
+ val mtbFile = Mtb().apply {
+ this.patient = Patient().apply {
+ this.id = "PID"
+ this.birthDate = Date.from(Instant.now())
+ this.gender = GenderCoding().apply {
+ this.code = GenderCodingCode.MALE
+ }
+ }
+ this.diagnoses = listOf(
+ MtbDiagnosis().apply {
+ this.id = "Diagnosis-1"
+ }
+ )
+ this.episodesOfCare = listOf(
+ MtbEpisodeOfCare().apply {
+ this.id = "Episode-1"
+ this.diagnoses = listOf(
+ Reference().apply {
+ this.id = "Diagnosis-1"
+ }
+ )
+ }
+ )
+ this.guidelineTherapies = listOf(
+ MtbSystemicTherapy().apply {
+ this.id = "Systemic-Therapy-1"
+ this.reason = Reference().apply {
+ this.id = "Diagnosis-1"
+ }
+ }
+ )
+ this.guidelineProcedures = listOf(
+ OncoProcedure().apply {
+ this.id = "Onco-Procedure-1"
+ this.reason = Reference().apply {
+ this.id = "Diagnosis-1"
+ }
+ }
+ )
+ this.specimens = listOf(
+ TumorSpecimen().apply {
+ this.id = "Specimen-1"
+ this.diagnosis = Reference().apply {
+ this.id = "Diagnosis-1"
+ }
+ }
+ )
+ }
+
+ mtbFile.pseudonymizeWith(pseudonymizeService)
+ mtbFile.anonymizeContentWith(pseudonymizeService)
+
+ assertThat(mtbFile.diagnoses.first().id).isEqualTo(mtbFile.episodesOfCare.first().diagnoses.first().id)
+ assertThat(mtbFile.diagnoses.first().id).isEqualTo(mtbFile.guidelineTherapies.first().reason.id)
+ assertThat(mtbFile.diagnoses.first().id).isEqualTo(mtbFile.guidelineProcedures.first().reason.id)
+ assertThat(mtbFile.diagnoses.first().id).isEqualTo(mtbFile.specimens.first().diagnosis.id)
+ }
}