summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPaul-Christian Volkmer2026-06-02 13:59:37 +0200
committerPaul-Christian Volkmer2026-06-02 13:59:37 +0200
commit7a77574432e79469fa704ac1167e3a3c9a3745d1 (patch)
tree49998d3cdffa5a501b94d4de3cb8f8313a3ff39d /src
parent401864411103b04b44c7ba264558716822517c2b (diff)
feat!: change data model librarychange-data-model
Since DNPM Datenmodell 2.1 changes from time to time, use a (mostly) autogenerated library based on JSON schema.
Diffstat (limited to 'src')
-rw-r--r--src/integrationTest/kotlin/dev/dnpm/etl/processor/EtlProcessorApplicationTests.kt19
-rw-r--r--src/integrationTest/kotlin/dev/dnpm/etl/processor/input/MtbFileRestControllerTest.kt32
-rw-r--r--src/integrationTest/kotlin/dev/dnpm/etl/processor/output/RestDipMtbFileSenderTest.kt13
-rw-r--r--src/main/kotlin/dev/dnpm/etl/processor/config/AppConfiguration.kt1
-rw-r--r--src/main/kotlin/dev/dnpm/etl/processor/consent/ConsentEvaluator.kt12
-rw-r--r--src/main/kotlin/dev/dnpm/etl/processor/input/KafkaInputListener.kt8
-rw-r--r--src/main/kotlin/dev/dnpm/etl/processor/input/MtbFileRestController.kt7
-rw-r--r--src/main/kotlin/dev/dnpm/etl/processor/output/KafkaMtbFileSender.kt8
-rw-r--r--src/main/kotlin/dev/dnpm/etl/processor/output/MtbRequest.kt8
-rw-r--r--src/main/kotlin/dev/dnpm/etl/processor/pseudonym/extensions.kt36
-rw-r--r--src/main/kotlin/dev/dnpm/etl/processor/services/ConsentProcessor.kt48
-rw-r--r--src/main/kotlin/dev/dnpm/etl/processor/services/RequestProcessor.kt14
-rw-r--r--src/main/kotlin/dev/dnpm/etl/processor/services/TransformationService.kt6
-rw-r--r--src/test/kotlin/dev/dnpm/etl/processor/config/Jackson3ConfigTest.kt9
-rw-r--r--src/test/kotlin/dev/dnpm/etl/processor/config/JacksonConfigTest.kt9
-rw-r--r--src/test/kotlin/dev/dnpm/etl/processor/consent/Dnpm21BasedConsentEvaluatorTest.kt81
-rw-r--r--src/test/kotlin/dev/dnpm/etl/processor/input/KafkaInputListenerTest.kt64
-rw-r--r--src/test/kotlin/dev/dnpm/etl/processor/input/MtbFileRestControllerTest.kt48
-rw-r--r--src/test/kotlin/dev/dnpm/etl/processor/output/KafkaMtbFileSenderTest.kt16
-rw-r--r--src/test/kotlin/dev/dnpm/etl/processor/output/RestDipMtbFileSenderTest.kt13
-rw-r--r--src/test/kotlin/dev/dnpm/etl/processor/pseudonym/ExtensionsTest.kt70
-rw-r--r--src/test/kotlin/dev/dnpm/etl/processor/pseudonym/PseudonymizeServiceTest.kt12
-rw-r--r--src/test/kotlin/dev/dnpm/etl/processor/services/ConsentProcessorTest.kt18
-rw-r--r--src/test/kotlin/dev/dnpm/etl/processor/services/RequestProcessorTest.kt97
-rw-r--r--src/test/kotlin/dev/dnpm/etl/processor/services/TransformationServiceTest.kt56
25 files changed, 398 insertions, 307 deletions
diff --git a/src/integrationTest/kotlin/dev/dnpm/etl/processor/EtlProcessorApplicationTests.kt b/src/integrationTest/kotlin/dev/dnpm/etl/processor/EtlProcessorApplicationTests.kt
index 248f889..9f1e183 100644
--- a/src/integrationTest/kotlin/dev/dnpm/etl/processor/EtlProcessorApplicationTests.kt
+++ b/src/integrationTest/kotlin/dev/dnpm/etl/processor/EtlProcessorApplicationTests.kt
@@ -24,7 +24,16 @@ import dev.dnpm.etl.processor.monitoring.RequestRepository
import dev.dnpm.etl.processor.monitoring.RequestStatus
import dev.dnpm.etl.processor.output.DnpmV2MtbFileRequest
import dev.dnpm.etl.processor.output.MtbFileSender
-import dev.pcvolkmer.mv64e.mtb.*
+import dev.pcvolkmer.mv64e.model.Coding
+import dev.pcvolkmer.mv64e.model.ConsentProvisionType
+import dev.pcvolkmer.mv64e.model.ModelProjectConsentPurpose
+import dev.pcvolkmer.mv64e.model.MtbDiagnosis
+import dev.pcvolkmer.mv64e.model.MvhMetadata
+import dev.pcvolkmer.mv64e.model.MvhMetadataModelProjectConsent
+import dev.pcvolkmer.mv64e.model.MvhMetadataModelProjectConsentProvisionsInner
+import dev.pcvolkmer.mv64e.model.Patient
+import dev.pcvolkmer.mv64e.model.PatientRecord
+import dev.pcvolkmer.mv64e.model.Reference
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Nested
@@ -105,16 +114,16 @@ class EtlProcessorApplicationTests : AbstractTestcontainerTest() {
.send(any<DnpmV2MtbFileRequest>())
val mtbFile =
- Mtb.builder()
+ PatientRecord.builder()
.patient(Patient.builder().id("TEST_12345678").build())
.metadata(
MvhMetadata.builder()
.modelProjectConsent(
- ModelProjectConsent.builder()
+ MvhMetadataModelProjectConsent.builder()
.provisions(
listOf(
- Provision.builder()
- .type(ConsentProvision.PERMIT)
+ MvhMetadataModelProjectConsentProvisionsInner.builder()
+ .type(ConsentProvisionType.PERMIT)
.purpose(ModelProjectConsentPurpose.SEQUENCING)
.build()
)
diff --git a/src/integrationTest/kotlin/dev/dnpm/etl/processor/input/MtbFileRestControllerTest.kt b/src/integrationTest/kotlin/dev/dnpm/etl/processor/input/MtbFileRestControllerTest.kt
index ba793f2..a9427b7 100644
--- a/src/integrationTest/kotlin/dev/dnpm/etl/processor/input/MtbFileRestControllerTest.kt
+++ b/src/integrationTest/kotlin/dev/dnpm/etl/processor/input/MtbFileRestControllerTest.kt
@@ -29,7 +29,11 @@ import dev.dnpm.etl.processor.consent.TtpConsentStatus
import dev.dnpm.etl.processor.security.TokenRepository
import dev.dnpm.etl.processor.security.UserRoleRepository
import dev.dnpm.etl.processor.services.RequestProcessor
-import dev.pcvolkmer.mv64e.mtb.*
+import dev.pcvolkmer.mv64e.model.MtbEpisodeOfCare
+import dev.pcvolkmer.mv64e.model.Patient
+import dev.pcvolkmer.mv64e.model.PatientRecord
+import dev.pcvolkmer.mv64e.model.PeriodDate
+import dev.pcvolkmer.mv64e.model.Reference
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Nested
@@ -112,7 +116,7 @@ class MtbFileRestControllerTest {
]
)
fun testShouldGrantPermissionToSendMtbFile(url: String) {
- whenever { requestProcessor.processMtbFile(any<Mtb>()) }.thenReturn(true)
+ whenever { requestProcessor.processMtbFile(any<PatientRecord>()) }.thenReturn(true)
mockMvc
.post(url) {
@@ -122,7 +126,7 @@ class MtbFileRestControllerTest {
}
.andExpect { status { isAccepted() } }
- verify(requestProcessor, times(1)).processMtbFile(any<Mtb>())
+ verify(requestProcessor, times(1)).processMtbFile(any<PatientRecord>())
}
@ParameterizedTest
@@ -140,7 +144,7 @@ class MtbFileRestControllerTest {
]
)
fun testShouldGrantPermissionToSendMtbFileToAdminUser(url: String) {
- whenever { requestProcessor.processMtbFile(any<Mtb>()) }.thenReturn(true)
+ whenever { requestProcessor.processMtbFile(any<PatientRecord>()) }.thenReturn(true)
mockMvc
.post(url) {
@@ -150,7 +154,7 @@ class MtbFileRestControllerTest {
}
.andExpect { status { isAccepted() } }
- verify(requestProcessor, times(1)).processMtbFile(any<Mtb>())
+ verify(requestProcessor, times(1)).processMtbFile(any<PatientRecord>())
}
@ParameterizedTest
@@ -168,7 +172,7 @@ class MtbFileRestControllerTest {
]
)
fun testShouldGrantPermissionToSendMtbFileToUser(url: String) {
- whenever { requestProcessor.processMtbFile(any<Mtb>()) }.thenReturn(true)
+ whenever { requestProcessor.processMtbFile(any<PatientRecord>()) }.thenReturn(true)
mockMvc
.post(url) {
@@ -178,7 +182,7 @@ class MtbFileRestControllerTest {
}
.andExpect { status { isAccepted() } }
- verify(requestProcessor, times(1)).processMtbFile(any<Mtb>())
+ verify(requestProcessor, times(1)).processMtbFile(any<PatientRecord>())
}
@ParameterizedTest
@@ -203,7 +207,7 @@ class MtbFileRestControllerTest {
}
.andExpect { status { isUnauthorized() } }
- verify(requestProcessor, never()).processMtbFile(any<Mtb>())
+ verify(requestProcessor, never()).processMtbFile(any<PatientRecord>())
}
@ParameterizedTest
@@ -269,7 +273,7 @@ class MtbFileRestControllerTest {
}
.andExpect { status { isBadRequest() } }
- val result = verify(requestProcessor, times(1)).processMtbFile(any<Mtb>())
+ val result = verify(requestProcessor, times(1)).processMtbFile(any<PatientRecord>())
assertThat(result).isFalse()
}
@@ -301,7 +305,7 @@ class MtbFileRestControllerTest {
]
)
fun testShouldGrantPermissionToSendMtbFileToAdminUser(url: String) {
- whenever { requestProcessor.processMtbFile(any<Mtb>()) }.thenReturn(true)
+ whenever { requestProcessor.processMtbFile(any<PatientRecord>()) }.thenReturn(true)
mockMvc
.post(url) {
@@ -311,7 +315,7 @@ class MtbFileRestControllerTest {
}
.andExpect { status { isAccepted() } }
- verify(requestProcessor, times(1)).processMtbFile(any<Mtb>())
+ verify(requestProcessor, times(1)).processMtbFile(any<PatientRecord>())
}
@ParameterizedTest
@@ -329,7 +333,7 @@ class MtbFileRestControllerTest {
]
)
fun testShouldGrantPermissionToSendMtbFileToUser(url: String) {
- whenever { requestProcessor.processMtbFile(any<Mtb>()) }.thenReturn(true)
+ whenever { requestProcessor.processMtbFile(any<PatientRecord>()) }.thenReturn(true)
mockMvc
.post(url) {
@@ -339,14 +343,14 @@ class MtbFileRestControllerTest {
}
.andExpect { status { isAccepted() } }
- verify(requestProcessor, times(1)).processMtbFile(any<Mtb>())
+ verify(requestProcessor, times(1)).processMtbFile(any<PatientRecord>())
}
}
companion object {
val mtbFile =
- Mtb.builder()
+ PatientRecord.builder()
.patient(Patient.builder().id("PID").build())
.episodesOfCare(
listOf(
diff --git a/src/integrationTest/kotlin/dev/dnpm/etl/processor/output/RestDipMtbFileSenderTest.kt b/src/integrationTest/kotlin/dev/dnpm/etl/processor/output/RestDipMtbFileSenderTest.kt
index 9c94c4a..2e42174 100644
--- a/src/integrationTest/kotlin/dev/dnpm/etl/processor/output/RestDipMtbFileSenderTest.kt
+++ b/src/integrationTest/kotlin/dev/dnpm/etl/processor/output/RestDipMtbFileSenderTest.kt
@@ -25,7 +25,12 @@ import dev.dnpm.etl.processor.config.*
import dev.dnpm.etl.processor.consent.ConsentEvaluator
import dev.dnpm.etl.processor.monitoring.ReportService
import dev.dnpm.etl.processor.monitoring.RequestStatus
-import dev.pcvolkmer.mv64e.mtb.*
+import dev.pcvolkmer.mv64e.model.GenderCoding
+import dev.pcvolkmer.mv64e.model.MtbEpisodeOfCare
+import dev.pcvolkmer.mv64e.model.Patient
+import dev.pcvolkmer.mv64e.model.PatientRecord
+import dev.pcvolkmer.mv64e.model.PeriodDate
+import dev.pcvolkmer.mv64e.model.Reference
import org.assertj.core.api.Assertions.assertThat
import org.hamcrest.CoreMatchers.not
import org.hamcrest.Matchers.containsString
@@ -121,13 +126,13 @@ class RestDipMtbFileSenderTest {
}
companion object {
- fun dnpmV2MtbFile(): Mtb {
- return Mtb().apply {
+ fun dnpmV2MtbFile(): PatientRecord {
+ return PatientRecord().apply {
this.patient =
Patient().apply {
this.id = "PID"
this.birthDate = Date.from(Instant.now())
- this.gender = GenderCoding().apply { this.code = GenderCodingCode.MALE }
+ this.gender = GenderCoding().apply { this.code = GenderCoding.CodeEnum.MALE }
}
this.episodesOfCare =
listOf(
diff --git a/src/main/kotlin/dev/dnpm/etl/processor/config/AppConfiguration.kt b/src/main/kotlin/dev/dnpm/etl/processor/config/AppConfiguration.kt
index 3e88ffd..d780642 100644
--- a/src/main/kotlin/dev/dnpm/etl/processor/config/AppConfiguration.kt
+++ b/src/main/kotlin/dev/dnpm/etl/processor/config/AppConfiguration.kt
@@ -20,7 +20,6 @@
package dev.dnpm.etl.processor.config
-import com.fasterxml.jackson.databind.ObjectMapper
import dev.dnpm.etl.processor.consent.GicsConsentService
import dev.dnpm.etl.processor.consent.GicsGetBroadConsentService
import dev.dnpm.etl.processor.consent.IConsentService
diff --git a/src/main/kotlin/dev/dnpm/etl/processor/consent/ConsentEvaluator.kt b/src/main/kotlin/dev/dnpm/etl/processor/consent/ConsentEvaluator.kt
index a8b8fdb..1f867e8 100644
--- a/src/main/kotlin/dev/dnpm/etl/processor/consent/ConsentEvaluator.kt
+++ b/src/main/kotlin/dev/dnpm/etl/processor/consent/ConsentEvaluator.kt
@@ -20,9 +20,9 @@
package dev.dnpm.etl.processor.consent
-import dev.pcvolkmer.mv64e.mtb.ConsentProvision
-import dev.pcvolkmer.mv64e.mtb.ModelProjectConsentPurpose
-import dev.pcvolkmer.mv64e.mtb.Mtb
+import dev.pcvolkmer.mv64e.model.ConsentProvisionType
+import dev.pcvolkmer.mv64e.model.ModelProjectConsentPurpose
+import dev.pcvolkmer.mv64e.model.PatientRecord
import org.springframework.stereotype.Service
/** Evaluates consent using provided consent service and file based consent information */
@@ -30,8 +30,8 @@ import org.springframework.stereotype.Service
class ConsentEvaluator(
private val consentService: IConsentService,
) {
- fun check(mtbFile: Mtb): ConsentEvaluation {
- val ttpConsentStatus = consentService.getTtpBroadConsentStatus(mtbFile.patient.id)
+ fun check(mtbFile: PatientRecord): ConsentEvaluation {
+ val ttpConsentStatus = consentService.getTtpBroadConsentStatus(mtbFile.patient!!.id)
val consentGiven =
ttpConsentStatus == TtpConsentStatus.BROAD_CONSENT_GIVEN ||
ttpConsentStatus == TtpConsentStatus.GENOM_DE_CONSENT_SEQUENCING_PERMIT ||
@@ -39,7 +39,7 @@ class ConsentEvaluator(
ttpConsentStatus == TtpConsentStatus.UNKNOWN_CHECK_FILE &&
mtbFile.metadata?.modelProjectConsent?.provisions?.any {
it.purpose == ModelProjectConsentPurpose.SEQUENCING &&
- it.type == ConsentProvision.PERMIT
+ it.type == ConsentProvisionType.PERMIT
} == true
return ConsentEvaluation(ttpConsentStatus, consentGiven)
diff --git a/src/main/kotlin/dev/dnpm/etl/processor/input/KafkaInputListener.kt b/src/main/kotlin/dev/dnpm/etl/processor/input/KafkaInputListener.kt
index a126e07..51d093b 100644
--- a/src/main/kotlin/dev/dnpm/etl/processor/input/KafkaInputListener.kt
+++ b/src/main/kotlin/dev/dnpm/etl/processor/input/KafkaInputListener.kt
@@ -26,7 +26,7 @@ import dev.dnpm.etl.processor.RequestId
import dev.dnpm.etl.processor.consent.ConsentEvaluator
import dev.dnpm.etl.processor.consent.TtpConsentStatus
import dev.dnpm.etl.processor.services.RequestProcessor
-import dev.pcvolkmer.mv64e.mtb.Mtb
+import dev.pcvolkmer.mv64e.model.PatientRecord
import org.apache.kafka.clients.consumer.ConsumerRecord
import org.slf4j.LoggerFactory
import org.springframework.http.MediaType
@@ -72,8 +72,8 @@ class KafkaInputListener(
private fun handleDnpmV2Message(record: ConsumerRecord<String, String>) {
try {
- val mtbFile = jsonMapper.readValue(record.value(), Mtb::class.java)
- val patientId = PatientId(mtbFile.patient.id)
+ val mtbFile = jsonMapper.readValue(record.value(), PatientRecord::class.java)
+ val patientId = PatientId(mtbFile.patient!!.id)
val firstRequestIdHeader = record.headers().headers("requestId")?.firstOrNull()
val requestId =
if (null != firstRequestIdHeader) {
@@ -106,7 +106,7 @@ class KafkaInputListener(
}
} catch (e: Exception) {
logger.error("Error while processing MtbFile", e)
- requestProcessor.processMtbFile(Mtb.builder().build())
+ requestProcessor.processMtbFile(PatientRecord.builder().build())
}
}
}
diff --git a/src/main/kotlin/dev/dnpm/etl/processor/input/MtbFileRestController.kt b/src/main/kotlin/dev/dnpm/etl/processor/input/MtbFileRestController.kt
index 47f0766..7ab846a 100644
--- a/src/main/kotlin/dev/dnpm/etl/processor/input/MtbFileRestController.kt
+++ b/src/main/kotlin/dev/dnpm/etl/processor/input/MtbFileRestController.kt
@@ -22,10 +22,9 @@ package dev.dnpm.etl.processor.input
import dev.dnpm.etl.processor.CustomMediaType
import dev.dnpm.etl.processor.PatientId
-import dev.dnpm.etl.processor.consent.ConsentEvaluator
import dev.dnpm.etl.processor.consent.TtpConsentStatus
import dev.dnpm.etl.processor.services.RequestProcessor
-import dev.pcvolkmer.mv64e.mtb.Mtb
+import dev.pcvolkmer.mv64e.model.PatientRecord
import org.slf4j.LoggerFactory
import org.springframework.http.MediaType
import org.springframework.http.ResponseEntity
@@ -52,7 +51,7 @@ class MtbFileRestController(
CustomMediaType.APPLICATION_VND_DNPM_V2_MTB_JSON_VALUE,
],
)
- fun mtbFile(@RequestBody mtbFile: Mtb): ResponseEntity<Unit> {
+ fun mtbFile(@RequestBody mtbFile: PatientRecord): ResponseEntity<Unit> {
logger.debug("Accepted MTB File (DNPM V2) for processing")
if (requestProcessor.processMtbFile(mtbFile)) {
return ResponseEntity.accepted().build()
@@ -80,7 +79,7 @@ class MtbFileRestControllerAdvice(
@ExceptionHandler(HttpMessageNotReadableException::class)
fun handleMessageNotReadableException(e: Exception): ResponseEntity<Unit> {
logger.error("Error while processing MtbFile", e)
- requestProcessor.processMtbFile(Mtb.builder().build())
+ requestProcessor.processMtbFile(PatientRecord.builder().build())
return ResponseEntity.badRequest().build()
}
diff --git a/src/main/kotlin/dev/dnpm/etl/processor/output/KafkaMtbFileSender.kt b/src/main/kotlin/dev/dnpm/etl/processor/output/KafkaMtbFileSender.kt
index 8c20b7c..e198952 100644
--- a/src/main/kotlin/dev/dnpm/etl/processor/output/KafkaMtbFileSender.kt
+++ b/src/main/kotlin/dev/dnpm/etl/processor/output/KafkaMtbFileSender.kt
@@ -23,8 +23,8 @@ package dev.dnpm.etl.processor.output
import dev.dnpm.etl.processor.CustomMediaType
import dev.dnpm.etl.processor.config.KafkaProperties
import dev.dnpm.etl.processor.monitoring.RequestStatus
-import dev.pcvolkmer.mv64e.mtb.Mtb
-import dev.pcvolkmer.mv64e.mtb.MvhMetadata
+import dev.pcvolkmer.mv64e.model.MvhMetadata
+import dev.pcvolkmer.mv64e.model.PatientRecord
import org.apache.kafka.clients.producer.ProducerRecord
import org.slf4j.LoggerFactory
import org.springframework.kafka.core.KafkaTemplate
@@ -75,7 +75,7 @@ class KafkaMtbFileSender(
}
override fun send(request: DeleteRequest): MtbFileSender.Response {
- val dummyMtbFile = Mtb.builder().metadata(MvhMetadata()).build()
+ val dummyMtbFile = PatientRecord.builder().metadata(MvhMetadata()).build()
return try {
return retryTemplate.execute<MtbFileSender.Response, Exception> {
@@ -114,7 +114,7 @@ class KafkaMtbFileSender(
private fun key(request: MtbRequest): String =
when (request) {
- is DnpmV2MtbFileRequest -> "{\"pid\": \"${request.content.patient.id}\"}"
+ is DnpmV2MtbFileRequest -> "{\"pid\": \"${request.content.patient?.id}\"}"
is DeleteRequest -> "{\"pid\": \"${request.patientId.value}\"}"
else ->
throw IllegalArgumentException("Unsupported request type: ${request::class.simpleName}")
diff --git a/src/main/kotlin/dev/dnpm/etl/processor/output/MtbRequest.kt b/src/main/kotlin/dev/dnpm/etl/processor/output/MtbRequest.kt
index 75401e6..e066d54 100644
--- a/src/main/kotlin/dev/dnpm/etl/processor/output/MtbRequest.kt
+++ b/src/main/kotlin/dev/dnpm/etl/processor/output/MtbRequest.kt
@@ -22,7 +22,7 @@ package dev.dnpm.etl.processor.output
import dev.dnpm.etl.processor.PatientPseudonym
import dev.dnpm.etl.processor.RequestId
-import dev.pcvolkmer.mv64e.mtb.Mtb
+import dev.pcvolkmer.mv64e.model.PatientRecord
interface MtbRequest {
val requestId: RequestId
@@ -37,9 +37,9 @@ sealed interface MtbFileRequest<out T> : MtbRequest {
data class DnpmV2MtbFileRequest(
override val requestId: RequestId,
- override val content: Mtb,
-) : MtbFileRequest<Mtb> {
- override fun patientPseudonym(): PatientPseudonym = PatientPseudonym(content.patient.id)
+ override val content: PatientRecord,
+) : MtbFileRequest<PatientRecord> {
+ override fun patientPseudonym(): PatientPseudonym = PatientPseudonym(content.patient!!.id)
}
data class DeleteRequest(
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 6615b35..21f3a7f 100644
--- a/src/main/kotlin/dev/dnpm/etl/processor/pseudonym/extensions.kt
+++ b/src/main/kotlin/dev/dnpm/etl/processor/pseudonym/extensions.kt
@@ -21,9 +21,9 @@
package dev.dnpm.etl.processor.pseudonym
import dev.dnpm.etl.processor.PatientId
-import dev.pcvolkmer.mv64e.mtb.ModelProjectConsent
-import dev.pcvolkmer.mv64e.mtb.Mtb
-import dev.pcvolkmer.mv64e.mtb.MvhMetadata
+import dev.pcvolkmer.mv64e.model.MvhMetadata
+import dev.pcvolkmer.mv64e.model.MvhMetadataModelProjectConsent
+import dev.pcvolkmer.mv64e.model.PatientRecord
import org.apache.commons.codec.digest.DigestUtils
/**
@@ -33,8 +33,8 @@ import org.apache.commons.codec.digest.DigestUtils
* @return The MTB file containing patient pseudonymes
* @since 0.11.0
*/
-infix fun Mtb.pseudonymizeWith(pseudonymizeService: PseudonymizeService) {
- val patientPseudonym = pseudonymizeService.patientPseudonym(PatientId(this.patient.id)).value
+infix fun PatientRecord.pseudonymizeWith(pseudonymizeService: PseudonymizeService) {
+ val patientPseudonym = pseudonymizeService.patientPseudonym(PatientId(this.patient!!.id)).value
this.episodesOfCare?.filterNotNull()?.forEach { it.patient?.id = patientPseudonym }
this.carePlans?.filterNotNull()?.forEach { carePlan ->
@@ -57,7 +57,7 @@ infix fun Mtb.pseudonymizeWith(pseudonymizeService: PseudonymizeService) {
this.diagnoses?.filterNotNull()?.forEach { it.patient?.id = patientPseudonym }
this.guidelineTherapies?.filterNotNull()?.forEach { it.patient?.id = patientPseudonym }
this.guidelineProcedures?.filterNotNull()?.forEach { it.patient?.id = patientPseudonym }
- this.patient.id = patientPseudonym
+ this.patient?.id = patientPseudonym
this.claims?.filterNotNull()?.forEach { it.patient?.id = patientPseudonym }
this.claimResponses?.filterNotNull()?.forEach { it.patient?.id = patientPseudonym }
this.familyMemberHistories?.filterNotNull()?.forEach { it.patient?.id = patientPseudonym }
@@ -116,7 +116,7 @@ infix fun Mtb.pseudonymizeWith(pseudonymizeService: PseudonymizeService) {
* @return The MTB file containing rehashed content IDs
* @since 0.11.0
*/
-infix fun Mtb.anonymizeContentWith(pseudonymizeService: PseudonymizeService) {
+infix fun PatientRecord.anonymizeContentWith(pseudonymizeService: PseudonymizeService) {
val prefix = pseudonymizeService.prefix()
fun anonymize(id: String): String {
@@ -280,25 +280,25 @@ infix fun Mtb.anonymizeContentWith(pseudonymizeService: PseudonymizeService) {
}
}
-fun Mtb.ensureMetaDataIsInitialized() {
+fun PatientRecord.ensureMetaDataIsInitialized() {
// init metadata if necessary
if (this.metadata == null) {
val mvhMetadata = MvhMetadata.builder().build()
this.metadata = mvhMetadata
}
- if (this.metadata.researchConsents == null) {
- this.metadata.researchConsents = mutableListOf()
+ if (this.metadata?.researchConsents == null) {
+ this.metadata?.researchConsents = mutableListOf()
}
- if (this.metadata.modelProjectConsent == null) {
- this.metadata.modelProjectConsent = ModelProjectConsent()
- this.metadata.modelProjectConsent.provisions = mutableListOf()
- } else if (this.metadata.modelProjectConsent.provisions != null) {
+ if (this.metadata?.modelProjectConsent == null) {
+ this.metadata?.modelProjectConsent = MvhMetadataModelProjectConsent()
+ this.metadata?.modelProjectConsent?.provisions = mutableListOf()
+ } else if (this.metadata?.modelProjectConsent?.provisions != null) {
// make sure list can be changed
- this.metadata.modelProjectConsent.provisions =
- this.metadata.modelProjectConsent.provisions.toMutableList()
+ this.metadata?.modelProjectConsent?.provisions =
+ this.metadata?.modelProjectConsent?.provisions?.toMutableList()
}
}
-infix fun Mtb.addGenomDeTan(pseudonymizeService: PseudonymizeService) {
- this.metadata?.transferTan = pseudonymizeService.genomDeTan(PatientId(this.patient.id))
+infix fun PatientRecord.addGenomDeTan(pseudonymizeService: PseudonymizeService) {
+ this.metadata?.transferTAN = pseudonymizeService.genomDeTan(PatientId(this.patient!!.id))
}
diff --git a/src/main/kotlin/dev/dnpm/etl/processor/services/ConsentProcessor.kt b/src/main/kotlin/dev/dnpm/etl/processor/services/ConsentProcessor.kt
index a95420a..15ccdc4 100644
--- a/src/main/kotlin/dev/dnpm/etl/processor/services/ConsentProcessor.kt
+++ b/src/main/kotlin/dev/dnpm/etl/processor/services/ConsentProcessor.kt
@@ -28,7 +28,13 @@ import dev.dnpm.etl.processor.consent.ConsentDomain
import dev.dnpm.etl.processor.consent.IConsentService
import dev.dnpm.etl.processor.consent.MtbFileConsentService
import dev.dnpm.etl.processor.pseudonym.ensureMetaDataIsInitialized
-import dev.pcvolkmer.mv64e.mtb.*
+import dev.pcvolkmer.mv64e.model.ConsentProvisionType
+import dev.pcvolkmer.mv64e.model.ModelProjectConsentPurpose
+import dev.pcvolkmer.mv64e.model.MvhMetadata
+import dev.pcvolkmer.mv64e.model.MvhMetadataModelProjectConsentProvisionsInner
+import dev.pcvolkmer.mv64e.model.MvhSubmissionType
+import dev.pcvolkmer.mv64e.model.PatientRecord
+import dev.pcvolkmer.mv64e.model.ResearchConsent
import org.apache.commons.lang3.NotImplementedException
import org.hl7.fhir.r4.model.*
import org.hl7.fhir.r4.model.Bundle.BundleEntryComponent
@@ -65,7 +71,7 @@ class ConsentProcessor(
* @param mtbFile File v2 (will be enriched with consent data)
* @return true if consent is given
*/
- fun consentGatedCheckAndTryEmbedding(mtbFile: Mtb): Boolean {
+ fun consentGatedCheckAndTryEmbedding(mtbFile: PatientRecord): Boolean {
mtbFile.ensureMetaDataIsInitialized()
if (consentService is MtbFileConsentService) {
@@ -73,7 +79,7 @@ class ConsentProcessor(
return true
}
- val personIdentifierValue = mtbFile.patient.id
+ val personIdentifierValue = mtbFile.patient!!.id
val requestDate = Date.from(Instant.now(Clock.systemUTC()))
// 1. Broad consent Entry exists?
@@ -129,7 +135,7 @@ class ConsentProcessor(
return false
}
- fun embedBroadConsentResources(mtbFile: Mtb, broadConsent: Bundle) {
+ fun embedBroadConsentResources(mtbFile: PatientRecord, broadConsent: Bundle) {
for (entry in broadConsent.entry) {
val resource = entry.resource
if (resource is Consent) {
@@ -137,12 +143,12 @@ class ConsentProcessor(
// we need another step to back to string, before we convert to object map
val asJsonString = fhirContext.newJsonParser().encodeResourceToString(resource)
try {
- val mapOfJson: MvhMetadata.ResearchConsent? =
+ val mapOfJson: ResearchConsent? =
jsonMapper.readValue(
asJsonString,
- MvhMetadata.ResearchConsent::class.java,
+ ResearchConsent::class.java,
)
- mtbFile.metadata.researchConsents.add(mapOfJson)
+ mtbFile.metadata?.researchConsents?.add(mapOfJson)
} catch (e: JsonProcessingException) {
throw RuntimeException(e)
}
@@ -150,7 +156,7 @@ class ConsentProcessor(
}
}
- fun addGenomeDbProvisions(mtbFile: Mtb, consentGnomeDe: Bundle) {
+ fun addGenomeDbProvisions(mtbFile: PatientRecord, consentGnomeDe: Bundle) {
for (entry in consentGnomeDe.entry) {
val resource = entry.resource
if (resource !is Consent) {
@@ -167,22 +173,22 @@ class ConsentProcessor(
val provisionCode = getProvisionCode(provisionComponent)
if (provisionCode != null) {
try {
- val modelProjectConsentPurpose = ModelProjectConsentPurpose.forValue(provisionCode)
+ val modelProjectConsentPurpose = ModelProjectConsentPurpose.fromValue(provisionCode)
if (ModelProjectConsentPurpose.SEQUENCING == modelProjectConsentPurpose) {
// CONVENTION: wrapping date is date of SEQUENCING consent
- mtbFile.metadata.modelProjectConsent.date = resource.dateTime
+ mtbFile.metadata?.modelProjectConsent?.date = resource.dateTime
}
val provision =
- Provision.builder()
- .type(ConsentProvision.valueOf(provisionComponent.type.name))
+ MvhMetadataModelProjectConsentProvisionsInner.builder()
+ .type(ConsentProvisionType.valueOf(provisionComponent.type.name))
.date(provisionComponent.period.start)
.purpose(modelProjectConsentPurpose)
.build()
- mtbFile.metadata.modelProjectConsent.provisions.add(provision)
- } catch (ioe: IOException) {
+ mtbFile.metadata?.modelProjectConsent?.provisions?.add(provision)
+ } catch (ioe: IllegalArgumentException) {
logger.error(
"Provision code '$provisionCode' is unknown and cannot be mapped.",
ioe.toString(),
@@ -190,8 +196,8 @@ class ConsentProcessor(
}
}
- if (mtbFile.metadata.modelProjectConsent.provisions.isNotEmpty()) {
- mtbFile.metadata.modelProjectConsent.version = gIcsConfigProperties.genomeDeConsentVersion
+ if (mtbFile.metadata?.modelProjectConsent?.provisions?.isNotEmpty() == true) {
+ mtbFile.metadata?.modelProjectConsent?.version = gIcsConfigProperties.genomeDeConsentVersion
}
}
}
@@ -207,15 +213,15 @@ class ConsentProcessor(
return provisionCode
}
- private fun setGenomDeSubmissionType(mtbFile: Mtb) {
+ private fun setGenomDeSubmissionType(mtbFile: PatientRecord) {
if (appConfigProperties.genomDeTestSubmission) {
- mtbFile.metadata.type = MvhSubmissionType.TEST
+ mtbFile.metadata?.type = MvhSubmissionType.TEST
logger.info("genomeDe submission mit TEST")
} else {
- mtbFile.metadata.type =
- when (mtbFile.metadata.type) {
+ mtbFile.metadata?.type =
+ when (mtbFile.metadata?.type) {
null -> MvhSubmissionType.INITIAL
- else -> mtbFile.metadata.type
+ else -> mtbFile.metadata?.type
}
}
}
diff --git a/src/main/kotlin/dev/dnpm/etl/processor/services/RequestProcessor.kt b/src/main/kotlin/dev/dnpm/etl/processor/services/RequestProcessor.kt
index 4b7afff..c152d0f 100644
--- a/src/main/kotlin/dev/dnpm/etl/processor/services/RequestProcessor.kt
+++ b/src/main/kotlin/dev/dnpm/etl/processor/services/RequestProcessor.kt
@@ -32,8 +32,8 @@ import dev.dnpm.etl.processor.pseudonym.PseudonymizeService
import dev.dnpm.etl.processor.pseudonym.addGenomDeTan
import dev.dnpm.etl.processor.pseudonym.anonymizeContentWith
import dev.dnpm.etl.processor.pseudonym.pseudonymizeWith
-import dev.pcvolkmer.mv64e.mtb.Mtb
-import dev.pcvolkmer.mv64e.mtb.MvhSubmissionType
+import dev.pcvolkmer.mv64e.model.MvhSubmissionType
+import dev.pcvolkmer.mv64e.model.PatientRecord
import org.apache.commons.codec.binary.Base32
import org.apache.commons.codec.digest.DigestUtils
import org.slf4j.Logger
@@ -58,11 +58,11 @@ class RequestProcessor(
private var logger: Logger = LoggerFactory.getLogger("RequestProcessor")
- fun processMtbFile(mtbFile: Mtb): Boolean {
+ fun processMtbFile(mtbFile: PatientRecord): Boolean {
return processMtbFile(mtbFile, randomRequestId())
}
- fun processMtbFile(mtbFile: Mtb, requestId: RequestId): Boolean {
+ fun processMtbFile(mtbFile: PatientRecord, requestId: RequestId): Boolean {
val isConsentOk =
consentProcessor != null && consentProcessor.consentGatedCheckAndTryEmbedding(mtbFile) ||
consentProcessor == null
@@ -127,7 +127,7 @@ class RequestProcessor(
RequestType.MTB_FILE,
submissionType,
RequestStatus.BLOCKED_INITIAL,
- Tan(request.content.metadata?.transferTan.orEmpty())
+ Tan(request.content.metadata?.transferTAN.orEmpty())
)
)
// Exit - no further processing
@@ -164,7 +164,7 @@ class RequestProcessor(
RequestType.MTB_FILE,
submissionType,
RequestStatus.UNKNOWN,
- Tan(request.content.metadata?.transferTan.orEmpty()),
+ Tan(request.content.metadata?.transferTAN.orEmpty()),
)
)
@@ -229,7 +229,7 @@ class RequestProcessor(
val patientPseudonym =
when (pseudonymizedMtbFileRequest) {
is DnpmV2MtbFileRequest ->
- PatientPseudonym(pseudonymizedMtbFileRequest.content.patient.id)
+ PatientPseudonym(pseudonymizedMtbFileRequest.content.patient!!.id)
}
val lastMtbFileRequestForPatient =
diff --git a/src/main/kotlin/dev/dnpm/etl/processor/services/TransformationService.kt b/src/main/kotlin/dev/dnpm/etl/processor/services/TransformationService.kt
index 755e6b3..d6318ce 100644
--- a/src/main/kotlin/dev/dnpm/etl/processor/services/TransformationService.kt
+++ b/src/main/kotlin/dev/dnpm/etl/processor/services/TransformationService.kt
@@ -22,16 +22,16 @@ package dev.dnpm.etl.processor.services
import com.jayway.jsonpath.JsonPath
import com.jayway.jsonpath.PathNotFoundException
-import dev.pcvolkmer.mv64e.mtb.Mtb
+import dev.pcvolkmer.mv64e.model.PatientRecord
import tools.jackson.databind.json.JsonMapper
class TransformationService(
private val jsonMapper: JsonMapper,
private val transformations: List<Transformation>,
) {
- fun transform(mtbFile: Mtb): Mtb {
+ fun transform(mtbFile: PatientRecord): PatientRecord {
val json = transform(jsonMapper.writeValueAsString(mtbFile))
- return jsonMapper.readValue(json, Mtb::class.java)
+ return jsonMapper.readValue(json, PatientRecord::class.java)
}
private fun transform(content: String): String {
diff --git a/src/test/kotlin/dev/dnpm/etl/processor/config/Jackson3ConfigTest.kt b/src/test/kotlin/dev/dnpm/etl/processor/config/Jackson3ConfigTest.kt
index b940537..d543f87 100644
--- a/src/test/kotlin/dev/dnpm/etl/processor/config/Jackson3ConfigTest.kt
+++ b/src/test/kotlin/dev/dnpm/etl/processor/config/Jackson3ConfigTest.kt
@@ -21,8 +21,9 @@
package dev.dnpm.etl.processor.config
import com.fasterxml.jackson.databind.node.ObjectNode
-import dev.pcvolkmer.mv64e.mtb.Mtb
-import dev.pcvolkmer.mv64e.mtb.MvhMetadata
+import dev.pcvolkmer.mv64e.model.MvhMetadata
+import dev.pcvolkmer.mv64e.model.PatientRecord
+import dev.pcvolkmer.mv64e.model.ResearchConsent
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
@@ -78,10 +79,10 @@ class Jackson3ConfigTest {
val inputConsentJson =
Objects.requireNonNull(this.javaClass.classLoader.getResourceAsStream("fake_broadConsent_mii_response_permit.json"))?.readAllBytes()?.decodeToString()
- val mtb = this.jacksonConfig.jsonMapper().readValue<Mtb>(inputMtbFileJson, Mtb::class.java)
+ val mtb = this.jacksonConfig.jsonMapper().readValue<PatientRecord>(inputMtbFileJson, PatientRecord::class.java)
// Still use Jackson2 ObjectMapper since MTB DTO requires Jackson2 ObjectNode
val consentJsonNode = Jackson2Config().objectMapper().readTree(inputConsentJson)
- mtb.metadata = MvhMetadata.builder().researchConsents(listOf(MvhMetadata.ResearchConsent.from(consentJsonNode as ObjectNode))).build()
+ mtb.metadata = MvhMetadata.builder().researchConsents(listOf(ResearchConsent.from(consentJsonNode as ObjectNode))).build()
val actual = this.jacksonConfig.jsonMapper().writeValueAsString(mtb)
diff --git a/src/test/kotlin/dev/dnpm/etl/processor/config/JacksonConfigTest.kt b/src/test/kotlin/dev/dnpm/etl/processor/config/JacksonConfigTest.kt
index e734c6f..4411e70 100644
--- a/src/test/kotlin/dev/dnpm/etl/processor/config/JacksonConfigTest.kt
+++ b/src/test/kotlin/dev/dnpm/etl/processor/config/JacksonConfigTest.kt
@@ -21,8 +21,9 @@
package dev.dnpm.etl.processor.config
import com.fasterxml.jackson.databind.node.ObjectNode
-import dev.pcvolkmer.mv64e.mtb.Mtb
-import dev.pcvolkmer.mv64e.mtb.MvhMetadata
+import dev.pcvolkmer.mv64e.model.MvhMetadata
+import dev.pcvolkmer.mv64e.model.PatientRecord
+import dev.pcvolkmer.mv64e.model.ResearchConsent
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
@@ -78,9 +79,9 @@ class JacksonConfigTest {
val inputConsentJson =
Objects.requireNonNull(this.javaClass.classLoader.getResourceAsStream("fake_broadConsent_mii_response_permit.json"))?.readAllBytes()?.decodeToString()
- val mtb = this.jacksonConfig.objectMapper().readValue<Mtb>(inputMtbFileJson, Mtb::class.java)
+ val mtb = this.jacksonConfig.objectMapper().readValue<PatientRecord>(inputMtbFileJson, PatientRecord::class.java)
val consentJsonNode = this.jacksonConfig.objectMapper().readTree(inputConsentJson)
- mtb.metadata = MvhMetadata.builder().researchConsents(listOf(MvhMetadata.ResearchConsent.from(consentJsonNode as ObjectNode))).build()
+ mtb.metadata = MvhMetadata.builder().researchConsents(listOf(ResearchConsent.from(consentJsonNode as ObjectNode))).build()
val actual = this.jacksonConfig.objectMapper().writeValueAsString(mtb)
diff --git a/src/test/kotlin/dev/dnpm/etl/processor/consent/Dnpm21BasedConsentEvaluatorTest.kt b/src/test/kotlin/dev/dnpm/etl/processor/consent/Dnpm21BasedConsentEvaluatorTest.kt
index 284c552..3cf54fe 100644
--- a/src/test/kotlin/dev/dnpm/etl/processor/consent/Dnpm21BasedConsentEvaluatorTest.kt
+++ b/src/test/kotlin/dev/dnpm/etl/processor/consent/Dnpm21BasedConsentEvaluatorTest.kt
@@ -21,7 +21,16 @@
package dev.dnpm.etl.processor.consent
import dev.dnpm.etl.processor.ArgProvider
-import dev.pcvolkmer.mv64e.mtb.*
+import dev.pcvolkmer.mv64e.model.ConsentProvisionType
+import dev.pcvolkmer.mv64e.model.GenderCoding
+import dev.pcvolkmer.mv64e.model.ModelProjectConsentPurpose
+import dev.pcvolkmer.mv64e.model.MtbEpisodeOfCare
+import dev.pcvolkmer.mv64e.model.MvhMetadata
+import dev.pcvolkmer.mv64e.model.MvhMetadataModelProjectConsent
+import dev.pcvolkmer.mv64e.model.MvhMetadataModelProjectConsentProvisionsInner
+import dev.pcvolkmer.mv64e.model.Patient
+import dev.pcvolkmer.mv64e.model.PatientRecord
+import dev.pcvolkmer.mv64e.model.Reference
import java.time.Instant
import java.util.*
import org.assertj.core.api.Assertions.assertThat
@@ -54,7 +63,7 @@ class Dnpm21BasedConsentEvaluatorTest {
@ParameterizedTest
@ArgumentsSource(WithGicsMtbFileProvider::class)
fun test(
- mtbFile: Mtb,
+ mtbFile: PatientRecord,
ttpConsentStatus: TtpConsentStatus,
expectedConsentEvaluation: ConsentEvaluation,
) {
@@ -77,7 +86,7 @@ class Dnpm21BasedConsentEvaluatorTest {
@ParameterizedTest
@ArgumentsSource(MtbFileProvider::class)
- fun test(mtbFile: Mtb, expectedConsentEvaluation: ConsentEvaluation) {
+ fun test(mtbFile: PatientRecord, expectedConsentEvaluation: ConsentEvaluation) {
assertThat(consentEvaluator.check(mtbFile)).isEqualTo(expectedConsentEvaluation)
}
}
@@ -88,120 +97,120 @@ class Dnpm21BasedConsentEvaluatorTest {
ArgProvider(
// Has file ModelProjectConsent and broad consent => consent given
Arguments.of(
- buildMtb(ConsentProvision.PERMIT),
+ buildMtb(ConsentProvisionType.PERMIT),
TtpConsentStatus.BROAD_CONSENT_GIVEN,
ConsentEvaluation(TtpConsentStatus.BROAD_CONSENT_GIVEN, true),
),
// Has file ModelProjectConsent and broad consent missing => no consent given
Arguments.of(
- buildMtb(ConsentProvision.PERMIT),
+ buildMtb(ConsentProvisionType.PERMIT),
TtpConsentStatus.BROAD_CONSENT_MISSING,
ConsentEvaluation(TtpConsentStatus.BROAD_CONSENT_MISSING, false),
),
// Has file ModelProjectConsent and broad consent missing or rejected => no consent given
Arguments.of(
- buildMtb(ConsentProvision.PERMIT),
+ buildMtb(ConsentProvisionType.PERMIT),
TtpConsentStatus.BROAD_CONSENT_MISSING_OR_REJECTED,
ConsentEvaluation(TtpConsentStatus.BROAD_CONSENT_MISSING_OR_REJECTED, false),
),
// Has file ModelProjectConsent and MV consent => consent given
Arguments.of(
- buildMtb(ConsentProvision.PERMIT),
+ buildMtb(ConsentProvisionType.PERMIT),
TtpConsentStatus.GENOM_DE_CONSENT_SEQUENCING_PERMIT,
ConsentEvaluation(TtpConsentStatus.GENOM_DE_CONSENT_SEQUENCING_PERMIT, true),
),
// Has file ModelProjectConsent and MV consent rejected => no consent given
Arguments.of(
- buildMtb(ConsentProvision.PERMIT),
+ buildMtb(ConsentProvisionType.PERMIT),
TtpConsentStatus.GENOM_DE_SEQUENCING_REJECTED,
ConsentEvaluation(TtpConsentStatus.GENOM_DE_SEQUENCING_REJECTED, false),
),
// Has file ModelProjectConsent and MV consent missing => no consent given
Arguments.of(
- buildMtb(ConsentProvision.PERMIT),
+ buildMtb(ConsentProvisionType.PERMIT),
TtpConsentStatus.GENOM_DE_CONSENT_MISSING,
ConsentEvaluation(TtpConsentStatus.GENOM_DE_CONSENT_MISSING, false),
),
// Has file ModelProjectConsent and no broad consent result => consent given
Arguments.of(
- buildMtb(ConsentProvision.PERMIT),
+ buildMtb(ConsentProvisionType.PERMIT),
TtpConsentStatus.UNKNOWN_CHECK_FILE,
ConsentEvaluation(TtpConsentStatus.UNKNOWN_CHECK_FILE, true),
),
// Has file ModelProjectConsent and failed to ask => no consent given
Arguments.of(
- buildMtb(ConsentProvision.PERMIT),
+ buildMtb(ConsentProvisionType.PERMIT),
TtpConsentStatus.FAILED_TO_ASK,
ConsentEvaluation(TtpConsentStatus.FAILED_TO_ASK, false),
),
// File ModelProjectConsent rejected and broad consent => consent given
Arguments.of(
- buildMtb(ConsentProvision.DENY),
+ buildMtb(ConsentProvisionType.DENY),
TtpConsentStatus.BROAD_CONSENT_GIVEN,
ConsentEvaluation(TtpConsentStatus.BROAD_CONSENT_GIVEN, true),
),
// File ModelProjectConsent rejected and broad consent missing => no consent given
Arguments.of(
- buildMtb(ConsentProvision.DENY),
+ buildMtb(ConsentProvisionType.DENY),
TtpConsentStatus.BROAD_CONSENT_MISSING,
ConsentEvaluation(TtpConsentStatus.BROAD_CONSENT_MISSING, false),
),
// File ModelProjectConsent rejected and broad consent missing or rejected => no consent
// given
Arguments.of(
- buildMtb(ConsentProvision.DENY),
+ buildMtb(ConsentProvisionType.DENY),
TtpConsentStatus.BROAD_CONSENT_MISSING_OR_REJECTED,
ConsentEvaluation(TtpConsentStatus.BROAD_CONSENT_MISSING_OR_REJECTED, false),
),
// File ModelProjectConsent rejected and MV consent => consent given
Arguments.of(
- buildMtb(ConsentProvision.DENY),
+ buildMtb(ConsentProvisionType.DENY),
TtpConsentStatus.GENOM_DE_CONSENT_SEQUENCING_PERMIT,
ConsentEvaluation(TtpConsentStatus.GENOM_DE_CONSENT_SEQUENCING_PERMIT, true),
),
// File ModelProjectConsent rejected and MV consent rejected => no consent given
Arguments.of(
- buildMtb(ConsentProvision.DENY),
+ buildMtb(ConsentProvisionType.DENY),
TtpConsentStatus.GENOM_DE_SEQUENCING_REJECTED,
ConsentEvaluation(TtpConsentStatus.GENOM_DE_SEQUENCING_REJECTED, false),
),
// File ModelProjectConsent rejected and MV consent missing => no consent given
Arguments.of(
- buildMtb(ConsentProvision.DENY),
+ buildMtb(ConsentProvisionType.DENY),
TtpConsentStatus.GENOM_DE_CONSENT_MISSING,
ConsentEvaluation(TtpConsentStatus.GENOM_DE_CONSENT_MISSING, false),
),
// File ModelProjectConsent rejected and no broad consent result => no consent given
Arguments.of(
- buildMtb(ConsentProvision.DENY),
+ buildMtb(ConsentProvisionType.DENY),
TtpConsentStatus.UNKNOWN_CHECK_FILE,
ConsentEvaluation(TtpConsentStatus.UNKNOWN_CHECK_FILE, false),
),
// File ModelProjectConsent rejected and failed to ask => no consent given
Arguments.of(
- buildMtb(ConsentProvision.DENY),
+ buildMtb(ConsentProvisionType.DENY),
TtpConsentStatus.FAILED_TO_ASK,
ConsentEvaluation(TtpConsentStatus.FAILED_TO_ASK, false),
),
) {
companion object {
- fun buildMtb(consentProvision: ConsentProvision): Mtb {
- return Mtb.builder()
+ fun buildMtb(consentProvision: ConsentProvisionType): PatientRecord {
+ return PatientRecord.builder()
.patient(
Patient.builder()
.id("TEST_12345678")
.birthDate(Date.from(Instant.parse("2000-08-08T12:34:56Z")))
- .gender(GenderCoding.builder().code(GenderCodingCode.MALE).build())
+ .gender(GenderCoding.builder().code(GenderCoding.CodeEnum.MALE).build())
.build()
)
.metadata(
MvhMetadata.builder()
.modelProjectConsent(
- ModelProjectConsent.builder()
+ MvhMetadataModelProjectConsent.builder()
.provisions(
listOf(
- Provision.builder()
+ MvhMetadataModelProjectConsentProvisionsInner.builder()
.date(Date())
.type(consentProvision)
.purpose(ModelProjectConsentPurpose.SEQUENCING)
@@ -229,55 +238,55 @@ class Dnpm21BasedConsentEvaluatorTest {
ArgProvider(
// Has file consent => consent given
Arguments.of(
- buildMtb(ConsentProvision.PERMIT),
+ buildMtb(ConsentProvisionType.PERMIT),
ConsentEvaluation(TtpConsentStatus.UNKNOWN_CHECK_FILE, true),
),
// File consent rejected => no consent given
Arguments.of(
- buildMtb(ConsentProvision.DENY),
+ buildMtb(ConsentProvisionType.DENY),
ConsentEvaluation(TtpConsentStatus.UNKNOWN_CHECK_FILE, false),
),
// policy REIDENTIFICATION has no effect on ConsentEvaluation
Arguments.of(
- buildMtb(ModelProjectConsentPurpose.REIDENTIFICATION, ConsentProvision.DENY),
+ buildMtb(ModelProjectConsentPurpose.REIDENTIFICATION, ConsentProvisionType.DENY),
ConsentEvaluation(TtpConsentStatus.UNKNOWN_CHECK_FILE, false),
),
Arguments.of(
- buildMtb(ModelProjectConsentPurpose.REIDENTIFICATION, ConsentProvision.PERMIT),
+ buildMtb(ModelProjectConsentPurpose.REIDENTIFICATION, ConsentProvisionType.PERMIT),
ConsentEvaluation(TtpConsentStatus.UNKNOWN_CHECK_FILE, false),
),
// policy CASE_IDENTIFICATION has no effect on ConsentEvaluation
Arguments.of(
- buildMtb(ModelProjectConsentPurpose.CASE_IDENTIFICATION, ConsentProvision.DENY),
+ buildMtb(ModelProjectConsentPurpose.CASE_IDENTIFICATION, ConsentProvisionType.DENY),
ConsentEvaluation(TtpConsentStatus.UNKNOWN_CHECK_FILE, false),
),
Arguments.of(
- buildMtb(ModelProjectConsentPurpose.CASE_IDENTIFICATION, ConsentProvision.PERMIT),
+ buildMtb(ModelProjectConsentPurpose.CASE_IDENTIFICATION, ConsentProvisionType.PERMIT),
ConsentEvaluation(TtpConsentStatus.UNKNOWN_CHECK_FILE, false),
),
) {
companion object {
- fun buildMtb(consentProvision: ConsentProvision): Mtb {
+ fun buildMtb(consentProvision: ConsentProvisionType): PatientRecord {
return buildMtb(ModelProjectConsentPurpose.SEQUENCING, consentProvision)
}
- fun buildMtb(policy: ModelProjectConsentPurpose, consentProvision: ConsentProvision): Mtb {
- return Mtb.builder()
+ fun buildMtb(policy: ModelProjectConsentPurpose, consentProvision: ConsentProvisionType): PatientRecord {
+ return PatientRecord.builder()
.patient(
Patient.builder()
.id("TEST_12345678")
.birthDate(Date.from(Instant.parse("2000-08-08T12:34:56Z")))
- .gender(GenderCoding.builder().code(GenderCodingCode.MALE).build())
+ .gender(GenderCoding.builder().code(GenderCoding.CodeEnum.MALE).build())
.build()
)
.metadata(
MvhMetadata.builder()
.modelProjectConsent(
- ModelProjectConsent.builder()
+ MvhMetadataModelProjectConsent.builder()
.provisions(
listOf(
- Provision.builder()
+ MvhMetadataModelProjectConsentProvisionsInner.builder()
.date(Date())
.type(consentProvision)
.purpose(policy)
diff --git a/src/test/kotlin/dev/dnpm/etl/processor/input/KafkaInputListenerTest.kt b/src/test/kotlin/dev/dnpm/etl/processor/input/KafkaInputListenerTest.kt
index eeb6288..9a5a2ee 100644
--- a/src/test/kotlin/dev/dnpm/etl/processor/input/KafkaInputListenerTest.kt
+++ b/src/test/kotlin/dev/dnpm/etl/processor/input/KafkaInputListenerTest.kt
@@ -25,7 +25,13 @@ import dev.dnpm.etl.processor.CustomMediaType
import dev.dnpm.etl.processor.consent.ConsentEvaluator
import dev.dnpm.etl.processor.consent.TtpConsentStatus
import dev.dnpm.etl.processor.services.RequestProcessor
-import dev.pcvolkmer.mv64e.mtb.*
+import dev.pcvolkmer.mv64e.model.ConsentProvisionType
+import dev.pcvolkmer.mv64e.model.ModelProjectConsentPurpose
+import dev.pcvolkmer.mv64e.model.MvhMetadata
+import dev.pcvolkmer.mv64e.model.MvhMetadataModelProjectConsent
+import dev.pcvolkmer.mv64e.model.MvhMetadataModelProjectConsentProvisionsInner
+import dev.pcvolkmer.mv64e.model.Patient
+import dev.pcvolkmer.mv64e.model.PatientRecord
import org.apache.kafka.clients.consumer.ConsumerRecord
import org.apache.kafka.common.header.internals.RecordHeader
import org.apache.kafka.common.header.internals.RecordHeaders
@@ -69,16 +75,16 @@ class KafkaInputListenerTest {
@Test
fun shouldProcessMtbFileRequest() {
val mtbFile =
- Mtb.builder()
+ PatientRecord.builder()
.patient(Patient.builder().id("DUMMY_12345678").build())
.metadata(
MvhMetadata.builder()
.modelProjectConsent(
- ModelProjectConsent.builder()
+ MvhMetadataModelProjectConsent.builder()
.provisions(
listOf(
- Provision.builder()
- .type(ConsentProvision.PERMIT)
+ MvhMetadataModelProjectConsentProvisionsInner.builder()
+ .type(ConsentProvisionType.PERMIT)
.purpose(ModelProjectConsentPurpose.SEQUENCING)
.build()
)
@@ -93,18 +99,18 @@ class KafkaInputListenerTest {
ConsumerRecord("testtopic", 0, 0, "", this.jsonMapper.writeValueAsString(mtbFile))
)
- verify(requestProcessor, times(1)).processMtbFile(any<Mtb>())
+ verify(requestProcessor, times(1)).processMtbFile(any<PatientRecord>())
}
@Test
fun shouldProcessRequestEvenIfNoConsentInformation() {
val mtbFile =
- Mtb.builder()
+ PatientRecord.builder()
.patient(Patient.builder().id("DUMMY_12345678").build())
.metadata(
MvhMetadata.builder()
.modelProjectConsent(
- ModelProjectConsent.builder()
+ MvhMetadataModelProjectConsent.builder()
.provisions(
listOf()
)
@@ -117,22 +123,22 @@ class KafkaInputListenerTest {
kafkaInputListener.onMessage(
ConsumerRecord("testtopic", 0, 0, "", this.jsonMapper.writeValueAsString(mtbFile))
)
- verify(requestProcessor, times(1)).processMtbFile(any<Mtb>())
+ verify(requestProcessor, times(1)).processMtbFile(any<PatientRecord>())
}
@Test
fun shouldProcessMtbFileRequestWithExistingRequestId() {
val mtbFile =
- Mtb.builder()
+ PatientRecord.builder()
.patient(Patient.builder().id("DUMMY_12345678").build())
.metadata(
MvhMetadata.builder()
.modelProjectConsent(
- ModelProjectConsent.builder()
+ MvhMetadataModelProjectConsent.builder()
.provisions(
listOf(
- Provision.builder()
- .type(ConsentProvision.PERMIT)
+ MvhMetadataModelProjectConsentProvisionsInner.builder()
+ .type(ConsentProvisionType.PERMIT)
.purpose(ModelProjectConsentPurpose.SEQUENCING)
.build()
)
@@ -161,22 +167,22 @@ class KafkaInputListenerTest {
)
)
- verify(requestProcessor, times(1)).processMtbFile(any<Mtb>(), anyValueClass())
+ verify(requestProcessor, times(1)).processMtbFile(any<PatientRecord>(), anyValueClass())
}
@Test
fun shouldProcessRequestWithoutConsentGiven() {
val mtbFile =
- Mtb.builder()
+ PatientRecord.builder()
.patient(Patient.builder().id("DUMMY_12345678").build())
.metadata(
MvhMetadata.builder()
.modelProjectConsent(
- ModelProjectConsent.builder()
+ MvhMetadataModelProjectConsent.builder()
.provisions(
listOf(
- Provision.builder()
- .type(ConsentProvision.DENY)
+ MvhMetadataModelProjectConsentProvisionsInner.builder()
+ .type(ConsentProvisionType.DENY)
.purpose(ModelProjectConsentPurpose.SEQUENCING)
.build()
)
@@ -204,22 +210,22 @@ class KafkaInputListenerTest {
Optional.empty(),
)
)
- verify(requestProcessor, times(1)).processMtbFile(any<Mtb>(), anyValueClass())
+ verify(requestProcessor, times(1)).processMtbFile(any<PatientRecord>(), anyValueClass())
}
@Test
fun shouldProcessDnpmV2Request() {
val mtbFile =
- Mtb.builder()
+ PatientRecord.builder()
.patient(Patient.builder().id("DUMMY_12345678").build())
.metadata(
MvhMetadata.builder()
.modelProjectConsent(
- ModelProjectConsent.builder()
+ MvhMetadataModelProjectConsent.builder()
.provisions(
listOf(
- Provision.builder()
- .type(ConsentProvision.DENY)
+ MvhMetadataModelProjectConsentProvisionsInner.builder()
+ .type(ConsentProvisionType.DENY)
.purpose(ModelProjectConsentPurpose.SEQUENCING)
.build()
)
@@ -255,22 +261,22 @@ class KafkaInputListenerTest {
Optional.empty(),
)
)
- verify(requestProcessor, times(1)).processMtbFile(any<Mtb>(), anyValueClass())
+ verify(requestProcessor, times(1)).processMtbFile(any<PatientRecord>(), anyValueClass())
}
@Test
fun shouldProcessDnpmV2DeleteRequest() {
val mtbFile =
- Mtb.builder()
+ PatientRecord.builder()
.patient(Patient.builder().id("DUMMY_12345678").build())
.metadata(
MvhMetadata.builder()
.modelProjectConsent(
- ModelProjectConsent.builder()
+ MvhMetadataModelProjectConsent.builder()
.provisions(
listOf(
- Provision.builder()
- .type(ConsentProvision.DENY)
+ MvhMetadataModelProjectConsentProvisionsInner.builder()
+ .type(ConsentProvisionType.DENY)
.purpose(ModelProjectConsentPurpose.SEQUENCING)
.build()
)
@@ -323,7 +329,7 @@ class KafkaInputListenerTest {
ConsumerRecord("testtopic", 0, 0, "", content)
)
- val result = verify(requestProcessor, times(1)).processMtbFile(any<Mtb>())
+ val result = verify(requestProcessor, times(1)).processMtbFile(any<PatientRecord>())
assertThat(result).isFalse()
}
}
diff --git a/src/test/kotlin/dev/dnpm/etl/processor/input/MtbFileRestControllerTest.kt b/src/test/kotlin/dev/dnpm/etl/processor/input/MtbFileRestControllerTest.kt
index 9ee4b2b..75d69dc 100644
--- a/src/test/kotlin/dev/dnpm/etl/processor/input/MtbFileRestControllerTest.kt
+++ b/src/test/kotlin/dev/dnpm/etl/processor/input/MtbFileRestControllerTest.kt
@@ -27,7 +27,17 @@ import dev.dnpm.etl.processor.consent.ConsentEvaluator
import dev.dnpm.etl.processor.consent.TtpConsentStatus
import dev.dnpm.etl.processor.input.Dnpm21MtbFile.Companion.buildMtb
import dev.dnpm.etl.processor.services.RequestProcessor
-import dev.pcvolkmer.mv64e.mtb.*
+import dev.pcvolkmer.mv64e.model.ConsentProvisionType
+import dev.pcvolkmer.mv64e.model.GenderCoding
+import dev.pcvolkmer.mv64e.model.ModelProjectConsentPurpose
+import dev.pcvolkmer.mv64e.model.MtbEpisodeOfCare
+import dev.pcvolkmer.mv64e.model.MvhMetadata
+import dev.pcvolkmer.mv64e.model.MvhMetadataModelProjectConsent
+import dev.pcvolkmer.mv64e.model.MvhMetadataModelProjectConsentProvisionsInner
+import dev.pcvolkmer.mv64e.model.Patient
+import dev.pcvolkmer.mv64e.model.PatientRecord
+import dev.pcvolkmer.mv64e.model.Reference
+import org.flywaydb.core.internal.configuration.resolvers.ProvisionerMode
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Nested
import org.junit.jupiter.api.Test
@@ -78,7 +88,7 @@ class MtbFileRestControllerTest {
.readAllBytes()
.toString(Charsets.UTF_8)
- whenever { requestProcessor.processMtbFile(any<Mtb>()) }.thenReturn(true)
+ whenever { requestProcessor.processMtbFile(any<PatientRecord>()) }.thenReturn(true)
mockMvc
.post("/mtb") {
@@ -87,13 +97,13 @@ class MtbFileRestControllerTest {
}
.andExpect { status { isAccepted() } }
- verify(requestProcessor, times(1)).processMtbFile(any<Mtb>())
+ verify(requestProcessor, times(1)).processMtbFile(any<PatientRecord>())
}
@ParameterizedTest
@ArgumentsSource(Dnpm21MtbFile::class)
- fun shouldProcessPostRequest(mtb: Mtb) {
- whenever { requestProcessor.processMtbFile(any<Mtb>()) }.thenReturn(true)
+ fun shouldProcessPostRequest(mtb: PatientRecord) {
+ whenever { requestProcessor.processMtbFile(any<PatientRecord>()) }.thenReturn(true)
mockMvc
.post("/mtbfile") {
@@ -132,12 +142,12 @@ class MtbFileRestControllerTest {
buildMtb(
MvhMetadata.builder()
.modelProjectConsent(
- ModelProjectConsent.builder()
+ MvhMetadataModelProjectConsent.builder()
.provisions(
listOf(
- Provision.builder()
+ MvhMetadataModelProjectConsentProvisionsInner.builder()
.date(Date())
- .type(ConsentProvision.PERMIT)
+ .type(ConsentProvisionType.PERMIT)
.purpose(ModelProjectConsentPurpose.SEQUENCING)
.build()
)
@@ -147,7 +157,7 @@ class MtbFileRestControllerTest {
.build()
)
- whenever { requestProcessor.processMtbFile(any<Mtb>()) }.thenReturn(true)
+ whenever { requestProcessor.processMtbFile(any<PatientRecord>()) }.thenReturn(true)
mockMvc
.post(url) {
@@ -200,7 +210,7 @@ class Dnpm21MtbFile :
Arguments.of(
buildMtb(
MvhMetadata.builder()
- .modelProjectConsent(ModelProjectConsent.builder().build())
+ .modelProjectConsent(MvhMetadataModelProjectConsent.builder().build())
.build()
)
),
@@ -209,12 +219,12 @@ class Dnpm21MtbFile :
buildMtb(
MvhMetadata.builder()
.modelProjectConsent(
- ModelProjectConsent.builder()
+ MvhMetadataModelProjectConsent.builder()
.provisions(
listOf(
- Provision.builder()
+ MvhMetadataModelProjectConsentProvisionsInner.builder()
.date(Date())
- .type(ConsentProvision.PERMIT)
+ .type(ConsentProvisionType.PERMIT)
.purpose(ModelProjectConsentPurpose.SEQUENCING)
.build()
)
@@ -229,12 +239,12 @@ class Dnpm21MtbFile :
buildMtb(
MvhMetadata.builder()
.modelProjectConsent(
- ModelProjectConsent.builder()
+ MvhMetadataModelProjectConsent.builder()
.provisions(
listOf(
- Provision.builder()
+ MvhMetadataModelProjectConsentProvisionsInner.builder()
.date(Date())
- .type(ConsentProvision.PERMIT)
+ .type(ConsentProvisionType.PERMIT)
.purpose(ModelProjectConsentPurpose.SEQUENCING)
.build()
)
@@ -247,13 +257,13 @@ class Dnpm21MtbFile :
) {
companion object {
- fun buildMtb(metadata: MvhMetadata?): Mtb {
- return Mtb.builder()
+ fun buildMtb(metadata: MvhMetadata?): PatientRecord {
+ return PatientRecord.builder()
.patient(
Patient.builder()
.id("TEST_12345678")
.birthDate(Date.from(Instant.parse("2000-08-08T12:34:56Z")))
- .gender(GenderCoding.builder().code(GenderCodingCode.MALE).build())
+ .gender(GenderCoding.builder().code(GenderCoding.CodeEnum.MALE).build())
.build()
)
.metadata(metadata)
diff --git a/src/test/kotlin/dev/dnpm/etl/processor/output/KafkaMtbFileSenderTest.kt b/src/test/kotlin/dev/dnpm/etl/processor/output/KafkaMtbFileSenderTest.kt
index ee840a8..9384aae 100644
--- a/src/test/kotlin/dev/dnpm/etl/processor/output/KafkaMtbFileSenderTest.kt
+++ b/src/test/kotlin/dev/dnpm/etl/processor/output/KafkaMtbFileSenderTest.kt
@@ -25,7 +25,11 @@ import dev.dnpm.etl.processor.PatientPseudonym
import dev.dnpm.etl.processor.RequestId
import dev.dnpm.etl.processor.config.KafkaProperties
import dev.dnpm.etl.processor.monitoring.RequestStatus
-import dev.pcvolkmer.mv64e.mtb.*
+import dev.pcvolkmer.mv64e.model.GenderCoding
+import dev.pcvolkmer.mv64e.model.MtbEpisodeOfCare
+import dev.pcvolkmer.mv64e.model.PatientRecord
+import dev.pcvolkmer.mv64e.model.PeriodDate
+import dev.pcvolkmer.mv64e.model.Reference
import org.apache.kafka.clients.producer.ProducerRecord
import org.apache.kafka.clients.producer.RecordMetadata
import org.apache.kafka.common.TopicPartition
@@ -252,13 +256,13 @@ class KafkaMtbFileSenderTest {
val TEST_REQUEST_ID = RequestId("TestId")
val TEST_PATIENT_PSEUDONYM = PatientPseudonym("PID")
- fun dnpmV2MtbFile(): Mtb {
- return Mtb().apply {
+ fun dnpmV2MtbFile(): PatientRecord {
+ return PatientRecord().apply {
this.patient =
- dev.pcvolkmer.mv64e.mtb.Patient().apply {
+ dev.pcvolkmer.mv64e.model.Patient().apply {
this.id = "PID"
this.birthDate = Date.from(Instant.now())
- this.gender = GenderCoding().apply { this.code = GenderCodingCode.MALE }
+ this.gender = GenderCoding().apply { this.code = GenderCoding.CodeEnum.MALE }
}
this.episodesOfCare =
listOf(
@@ -271,7 +275,7 @@ class KafkaMtbFileSenderTest {
}
}
- fun dnmpV2kafkaRecordData(requestId: RequestId): Mtb {
+ fun dnmpV2kafkaRecordData(requestId: RequestId): PatientRecord {
return DnpmV2MtbFileRequest(requestId, dnpmV2MtbFile()).content
}
diff --git a/src/test/kotlin/dev/dnpm/etl/processor/output/RestDipMtbFileSenderTest.kt b/src/test/kotlin/dev/dnpm/etl/processor/output/RestDipMtbFileSenderTest.kt
index d95ced0..3a0b3f0 100644
--- a/src/test/kotlin/dev/dnpm/etl/processor/output/RestDipMtbFileSenderTest.kt
+++ b/src/test/kotlin/dev/dnpm/etl/processor/output/RestDipMtbFileSenderTest.kt
@@ -28,7 +28,12 @@ import dev.dnpm.etl.processor.config.AppConfiguration
import dev.dnpm.etl.processor.config.RestTargetProperties
import dev.dnpm.etl.processor.monitoring.ReportService
import dev.dnpm.etl.processor.monitoring.RequestStatus
-import dev.pcvolkmer.mv64e.mtb.*
+import dev.pcvolkmer.mv64e.model.GenderCoding
+import dev.pcvolkmer.mv64e.model.MtbEpisodeOfCare
+import dev.pcvolkmer.mv64e.model.Patient
+import dev.pcvolkmer.mv64e.model.PatientRecord
+import dev.pcvolkmer.mv64e.model.PeriodDate
+import dev.pcvolkmer.mv64e.model.Reference
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Nested
@@ -194,13 +199,13 @@ class RestDipMtbFileSenderTest {
val TEST_REQUEST_ID = RequestId("TestId")
val TEST_PATIENT_PSEUDONYM = PatientPseudonym("PID")
- fun dnpmV2MtbFile(): Mtb {
- return Mtb().apply {
+ fun dnpmV2MtbFile(): PatientRecord {
+ return PatientRecord().apply {
this.patient =
Patient().apply {
this.id = "PID"
this.birthDate = Date.from(Instant.now())
- this.gender = GenderCoding().apply { this.code = GenderCodingCode.MALE }
+ this.gender = GenderCoding().apply { this.code = GenderCoding.CodeEnum.MALE }
}
this.episodesOfCare =
listOf(
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 abc17c6..93c9106 100644
--- a/src/test/kotlin/dev/dnpm/etl/processor/pseudonym/ExtensionsTest.kt
+++ b/src/test/kotlin/dev/dnpm/etl/processor/pseudonym/ExtensionsTest.kt
@@ -27,7 +27,17 @@ import dev.dnpm.etl.processor.config.JacksonConfig
import dev.dnpm.etl.processor.consent.MtbFileConsentService
import dev.dnpm.etl.processor.services.ConsentProcessor
import dev.dnpm.etl.processor.services.ConsentProcessorTest
-import dev.pcvolkmer.mv64e.mtb.*
+import dev.pcvolkmer.mv64e.model.GenderCoding
+import dev.pcvolkmer.mv64e.model.Msi
+import dev.pcvolkmer.mv64e.model.MtbDiagnosis
+import dev.pcvolkmer.mv64e.model.MtbEpisodeOfCare
+import dev.pcvolkmer.mv64e.model.MtbSystemicTherapy
+import dev.pcvolkmer.mv64e.model.OncoProcedure
+import dev.pcvolkmer.mv64e.model.Patient
+import dev.pcvolkmer.mv64e.model.PatientRecord
+import dev.pcvolkmer.mv64e.model.PeriodDate
+import dev.pcvolkmer.mv64e.model.Reference
+import dev.pcvolkmer.mv64e.model.TumorSpecimen
import org.assertj.core.api.Assertions.assertThat
import org.hl7.fhir.r4.model.Bundle
import org.junit.jupiter.api.Nested
@@ -56,12 +66,12 @@ class ExtensionsTest {
val FAKE_MTB_FILE_PATH = "mv64e-mtb-fake-patient.json"
val CLEAN_PATIENT_ID = "644bae7a-56f6-4ee8-b02f-c532e65af5b1"
- private fun fakeMtbFile(): Mtb {
+ private fun fakeMtbFile(): PatientRecord {
val mtbFile = ClassPathResource(FAKE_MTB_FILE_PATH).inputStream
- return getJsonMapper().readValue(mtbFile, Mtb::class.java)
+ return getJsonMapper().readValue(mtbFile, PatientRecord::class.java)
}
- private fun Mtb.serialized(): String {
+ private fun PatientRecord.serialized(): String {
return getJsonMapper().writeValueAsString(this)
}
@@ -80,11 +90,11 @@ class ExtensionsTest {
mtbFile.pseudonymizeWith(pseudonymizeService)
- assertThat(mtbFile.patient.id).isEqualTo("PSEUDO-ID")
+ assertThat(mtbFile.patient?.id).isEqualTo("PSEUDO-ID")
assertThat(mtbFile.serialized()).doesNotContain(CLEAN_PATIENT_ID)
}
- private fun addConsentData(mtbFile: Mtb) {
+ private fun addConsentData(mtbFile: PatientRecord) {
val gIcsConfigProperties = GIcsConfigProperties("", "", "")
val appConfigProperties = AppConfigProperties(emptyList())
@@ -115,12 +125,12 @@ class ExtensionsTest {
doAnswer { "TESTDOMAIN" }.whenever(pseudonymizeService).prefix()
val mtbFile =
- Mtb().apply {
+ PatientRecord().apply {
this.patient =
Patient().apply {
this.id = "PID"
this.birthDate = Date.from(Instant.now())
- this.gender = GenderCoding().apply { this.code = GenderCodingCode.MALE }
+ this.gender = GenderCoding().apply { this.code = GenderCoding.CodeEnum.MALE }
}
this.episodesOfCare =
listOf(
@@ -136,7 +146,7 @@ class ExtensionsTest {
mtbFile.anonymizeContentWith(pseudonymizeService)
assertThat(mtbFile.episodesOfCare).hasSize(1)
- assertThat(mtbFile.episodesOfCare.map { it.id }).isNotNull
+ assertThat(mtbFile.episodesOfCare?.map { it.id }).isNotNull
}
@Test
@@ -153,20 +163,20 @@ class ExtensionsTest {
val mtbFile = fakeMtbFile()
/** replace hex values with random long, so our test does not match false positives */
- mtbFile.ngsReports.forEach { report ->
- report.results.simpleVariants.forEach { simpleVariant ->
- simpleVariant.externalIds.forEach { extIdValue ->
+ mtbFile.ngsReports?.forEach { report ->
+ report.results.simpleVariants?.forEach { simpleVariant ->
+ simpleVariant.externalIds?.forEach { extIdValue ->
extIdValue.value = Math.random().toLong().toString()
}
}
}
- mtbFile.ngsReports.forEach { report ->
- report.results.rnaFusions.forEach { simpleVariant ->
- simpleVariant.externalIds.forEach { extIdValue ->
+ mtbFile.ngsReports?.forEach { report ->
+ report.results.rnaFusions?.forEach { simpleVariant ->
+ simpleVariant.externalIds?.forEach { extIdValue ->
extIdValue.value = Math.random().toLong().toString()
}
- simpleVariant.fusionPartner3Prime?.transcriptId?.value = Math.random().toLong().toString()
- simpleVariant.fusionPartner5Prime?.transcriptId?.value = Math.random().toLong().toString()
+ simpleVariant.fusionPartner3prime?.transcriptId?.value = Math.random().toLong().toString()
+ simpleVariant.fusionPartner5prime?.transcriptId?.value = Math.random().toLong().toString()
simpleVariant.externalIds?.forEach { it?.value = Math.random().toLong().toString() }
}
}
@@ -203,12 +213,12 @@ class ExtensionsTest {
doAnswer { "TESTDOMAIN" }.whenever(pseudonymizeService).prefix()
val mtbFile =
- Mtb().apply {
+ PatientRecord().apply {
this.patient =
Patient().apply {
this.id = "PID"
this.birthDate = Date.from(Instant.now())
- this.gender = GenderCoding().apply { this.code = GenderCodingCode.MALE }
+ this.gender = GenderCoding().apply { this.code = GenderCoding.CodeEnum.MALE }
}
this.diagnoses = listOf(MtbDiagnosis().apply { this.id = "Diagnosis-1" })
this.episodesOfCare =
@@ -244,12 +254,12 @@ class ExtensionsTest {
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)
+ 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)
}
@Test
@@ -265,12 +275,12 @@ class ExtensionsTest {
doAnswer { "TESTDOMAIN" }.whenever(pseudonymizeService).prefix()
val mtbFile =
- Mtb().apply {
+ PatientRecord().apply {
this.patient =
Patient().apply {
this.id = "PID"
this.birthDate = Date.from(Instant.now())
- this.gender = GenderCoding().apply { this.code = GenderCodingCode.MALE }
+ this.gender = GenderCoding().apply { this.code = GenderCoding.CodeEnum.MALE }
}
this.msiFindings =
listOf(
@@ -286,10 +296,10 @@ class ExtensionsTest {
mtbFile.anonymizeContentWith(pseudonymizeService)
assertThat(mtbFile.msiFindings).isNotNull
- assertThat(mtbFile.msiFindings[1])
+ assertThat(mtbFile.msiFindings?.get(1))
.satisfiesAnyOf(
- { assertThat(it.id).isNull() },
- { assertThat(it.id).isEqualTo("TESTDOMAIN44e20a53bbbf9f3ae39626d05df7014dcd77d6098") },
+ { assertThat(it?.id).isNull() },
+ { assertThat(it?.id).isEqualTo("TESTDOMAIN44e20a53bbbf9f3ae39626d05df7014dcd77d6098") },
)
}
}
diff --git a/src/test/kotlin/dev/dnpm/etl/processor/pseudonym/PseudonymizeServiceTest.kt b/src/test/kotlin/dev/dnpm/etl/processor/pseudonym/PseudonymizeServiceTest.kt
index 7c6d6c9..00487d0 100644
--- a/src/test/kotlin/dev/dnpm/etl/processor/pseudonym/PseudonymizeServiceTest.kt
+++ b/src/test/kotlin/dev/dnpm/etl/processor/pseudonym/PseudonymizeServiceTest.kt
@@ -21,7 +21,11 @@
package dev.dnpm.etl.processor.pseudonym
import dev.dnpm.etl.processor.config.PseudonymizeConfigProperties
-import dev.pcvolkmer.mv64e.mtb.*
+import dev.pcvolkmer.mv64e.model.MtbEpisodeOfCare
+import dev.pcvolkmer.mv64e.model.Patient
+import dev.pcvolkmer.mv64e.model.PatientRecord
+import dev.pcvolkmer.mv64e.model.PeriodDate
+import dev.pcvolkmer.mv64e.model.Reference
import java.time.Instant
import java.util.*
import org.assertj.core.api.Assertions.assertThat
@@ -37,7 +41,7 @@ import org.mockito.kotlin.whenever
class PseudonymizeServiceTest {
private val mtbFile =
- Mtb.builder()
+ PatientRecord.builder()
.patient(Patient.builder().id("123").build())
.episodesOfCare(
listOf(
@@ -62,7 +66,7 @@ class PseudonymizeServiceTest {
mtbFile.pseudonymizeWith(pseudonymizeService)
- assertThat(mtbFile.patient.id).isEqualTo("123")
+ assertThat(mtbFile.patient?.id).isEqualTo("123")
}
@Test
@@ -80,7 +84,7 @@ class PseudonymizeServiceTest {
mtbFile.pseudonymizeWith(pseudonymizeService)
- assertThat(mtbFile.patient.id).isEqualTo("UNKNOWN_123")
+ assertThat(mtbFile.patient?.id).isEqualTo("UNKNOWN_123")
}
@Test
diff --git a/src/test/kotlin/dev/dnpm/etl/processor/services/ConsentProcessorTest.kt b/src/test/kotlin/dev/dnpm/etl/processor/services/ConsentProcessorTest.kt
index a85d555..1f1024f 100644
--- a/src/test/kotlin/dev/dnpm/etl/processor/services/ConsentProcessorTest.kt
+++ b/src/test/kotlin/dev/dnpm/etl/processor/services/ConsentProcessorTest.kt
@@ -27,9 +27,9 @@ import dev.dnpm.etl.processor.config.JacksonConfig
import dev.dnpm.etl.processor.consent.ConsentDomain
import dev.dnpm.etl.processor.consent.GicsConsentService
import dev.dnpm.etl.processor.consent.MtbFileConsentService
-import dev.pcvolkmer.mv64e.mtb.Mtb
-import dev.pcvolkmer.mv64e.mtb.MvhSubmissionType
-import dev.pcvolkmer.mv64e.mtb.Patient
+import dev.pcvolkmer.mv64e.model.MvhSubmissionType
+import dev.pcvolkmer.mv64e.model.Patient
+import dev.pcvolkmer.mv64e.model.PatientRecord
import org.assertj.core.api.Assertions.assertThat
import org.hl7.fhir.r4.model.Bundle
import org.hl7.fhir.r4.model.CodeableConcept
@@ -99,13 +99,13 @@ class ConsentProcessorTest {
.getConsent(any(), any(), eq(ConsentDomain.MODELLVORHABEN_64E))
val inputMtb =
- Mtb.builder()
+ PatientRecord.builder()
.patient(Patient.builder().id("d611d429-5003-11f0-a144-661e92ac9503").build())
.build()
val checkResult = consentProcessor.consentGatedCheckAndTryEmbedding(inputMtb)
assertThat(checkResult).isTrue
- assertThat(inputMtb.metadata.researchConsents).isNotEmpty
+ assertThat(inputMtb.metadata?.researchConsents).isNotEmpty
}
@Test
@@ -122,7 +122,7 @@ class ConsentProcessorTest {
assertThat(consentProcessor.toString()).isNotNull
val inputMtb =
- Mtb.builder()
+ PatientRecord.builder()
.patient(Patient.builder().id("d611d429-5003-11f0-a144-661e92ac9503").build())
.build()
val checkResult = consentProcessor.consentGatedCheckAndTryEmbedding(inputMtb)
@@ -256,15 +256,15 @@ class ConsentProcessorTest {
.getConsent(any(), any(), eq(ConsentDomain.MODELLVORHABEN_64E))
val inputMtb =
- Mtb.builder()
+ PatientRecord.builder()
.patient(Patient.builder().id("d611d429-5003-11f0-a144-661e92ac9503").build())
.build()
val checkResult = fixture.consentGatedCheckAndTryEmbedding(inputMtb)
assertThat(checkResult).isNotNull
- if (isTestSubmission) assertThat(inputMtb.metadata.type).isEqualTo(MvhSubmissionType.TEST)
+ if (isTestSubmission) assertThat(inputMtb.metadata?.type).isEqualTo(MvhSubmissionType.TEST)
else {
- assertThat(inputMtb.metadata.type).isEqualTo(MvhSubmissionType.INITIAL)
+ assertThat(inputMtb.metadata?.type).isEqualTo(MvhSubmissionType.INITIAL)
}
}
}
diff --git a/src/test/kotlin/dev/dnpm/etl/processor/services/RequestProcessorTest.kt b/src/test/kotlin/dev/dnpm/etl/processor/services/RequestProcessorTest.kt
index 6827a4f..0010bf0 100644
--- a/src/test/kotlin/dev/dnpm/etl/processor/services/RequestProcessorTest.kt
+++ b/src/test/kotlin/dev/dnpm/etl/processor/services/RequestProcessorTest.kt
@@ -33,7 +33,18 @@ import dev.dnpm.etl.processor.output.DnpmV2MtbFileRequest
import dev.dnpm.etl.processor.output.MtbFileSender
import dev.dnpm.etl.processor.output.RestMtbFileSender
import dev.dnpm.etl.processor.pseudonym.PseudonymizeService
-import dev.pcvolkmer.mv64e.mtb.*
+import dev.pcvolkmer.mv64e.model.ConsentProvisionType
+import dev.pcvolkmer.mv64e.model.FollowUp
+import dev.pcvolkmer.mv64e.model.ModelProjectConsentPurpose
+import dev.pcvolkmer.mv64e.model.MtbEpisodeOfCare
+import dev.pcvolkmer.mv64e.model.MvhMetadata
+import dev.pcvolkmer.mv64e.model.MvhMetadataModelProjectConsent
+import dev.pcvolkmer.mv64e.model.MvhMetadataModelProjectConsentProvisionsInner
+import dev.pcvolkmer.mv64e.model.MvhSubmissionType
+import dev.pcvolkmer.mv64e.model.Patient
+import dev.pcvolkmer.mv64e.model.PatientRecord
+import dev.pcvolkmer.mv64e.model.PeriodDate
+import dev.pcvolkmer.mv64e.model.Reference
import org.assertj.core.api.Assertions.assertThat
import org.hl7.fhir.r4.model.Consent
import org.junit.jupiter.api.BeforeEach
@@ -123,12 +134,12 @@ class RequestProcessorTest {
.whenever(pseudonymizeService)
.patientPseudonym(anyValueClass())
- doAnswer { it.arguments[0] }.whenever(transformationService).transform(any<Mtb>())
+ doAnswer { it.arguments[0] }.whenever(transformationService).transform(any<PatientRecord>())
whenever(consentProcessor.consentGatedCheckAndTryEmbedding(any())).thenReturn(true)
val mtbFile =
- Mtb.builder()
+ PatientRecord.builder()
.patient(Patient.builder().id("123").build())
.episodesOfCare(
listOf(
@@ -180,12 +191,12 @@ class RequestProcessorTest {
.whenever(pseudonymizeService)
.patientPseudonym(anyValueClass())
- doAnswer { it.arguments[0] }.whenever(transformationService).transform(any<Mtb>())
+ doAnswer { it.arguments[0] }.whenever(transformationService).transform(any<PatientRecord>())
whenever(consentProcessor.consentGatedCheckAndTryEmbedding(any())).thenReturn(true)
val mtbFile =
- Mtb.builder()
+ PatientRecord.builder()
.patient(Patient.builder().id("123").build())
.episodesOfCare(
listOf(
@@ -241,12 +252,12 @@ class RequestProcessorTest {
.whenever(pseudonymizeService)
.patientPseudonym(anyValueClass())
- doAnswer { it.arguments[0] }.whenever(transformationService).transform(any<Mtb>())
+ doAnswer { it.arguments[0] }.whenever(transformationService).transform(any<PatientRecord>())
whenever(consentProcessor.consentGatedCheckAndTryEmbedding(any())).thenReturn(true)
val mtbFile =
- Mtb.builder()
+ PatientRecord.builder()
.patient(Patient.builder().id("123").build())
.episodesOfCare(
listOf(
@@ -306,21 +317,21 @@ class RequestProcessorTest {
.whenever(pseudonymizeService)
.genomDeTan(anyValueClass())
- doAnswer { it.arguments[0] }.whenever(transformationService).transform(any<Mtb>())
+ doAnswer { it.arguments[0] }.whenever(transformationService).transform(any<PatientRecord>())
whenever(consentProcessor.consentGatedCheckAndTryEmbedding(any())).thenReturn(true)
val mtbFile =
- Mtb.builder()
+ PatientRecord.builder()
.patient(Patient.builder().id("123").build())
.metadata(
MvhMetadata.builder()
.modelProjectConsent(
- ModelProjectConsent.builder()
+ MvhMetadataModelProjectConsent.builder()
.provisions(
listOf(
- Provision.builder()
- .type(ConsentProvision.PERMIT)
+ MvhMetadataModelProjectConsentProvisionsInner.builder()
+ .type(ConsentProvisionType.PERMIT)
.purpose(ModelProjectConsentPurpose.SEQUENCING)
.build()
)
@@ -406,7 +417,7 @@ class RequestProcessorTest {
.whenever(pseudonymizeService)
.genomDeTan(anyValueClass())
- doAnswer { it.arguments[0] }.whenever(transformationService).transform(any<Mtb>())
+ doAnswer { it.arguments[0] }.whenever(transformationService).transform(any<PatientRecord>())
whenever(consentProcessor.consentGatedCheckAndTryEmbedding(any())).thenReturn(true)
@@ -423,7 +434,7 @@ class RequestProcessorTest {
)
val mtbFile =
- Mtb.builder()
+ PatientRecord.builder()
.patient(Patient.builder().id("123").build())
.metadata(MvhMetadata())
.episodesOfCare(
@@ -446,8 +457,8 @@ class RequestProcessorTest {
val requestCaptor = argumentCaptor<DnpmV2MtbFileRequest>()
verify(sender, times(1)).send(requestCaptor.capture())
assertThat(requestCaptor.firstValue).isNotNull
- assertThat(requestCaptor.firstValue.content.metadata.type).isEqualTo(MvhSubmissionType.ADDITION)
- assertThat(requestCaptor.firstValue.content.metadata.transferTan).isEqualTo("f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2")
+ assertThat(requestCaptor.firstValue.content.metadata?.type).isEqualTo(MvhSubmissionType.ADDITION)
+ assertThat(requestCaptor.firstValue.content.metadata?.transferTAN).isEqualTo("f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2")
val eventCaptor = argumentCaptor<ResponseEvent>()
verify(applicationEventPublisher, times(1)).publishEvent(eventCaptor.capture())
@@ -503,10 +514,10 @@ class RequestProcessorTest {
doAnswer { it.arguments.first() }
.whenever(transformationService)
- .transform(any<Mtb>())
+ .transform(any<PatientRecord>())
val mtbFile =
- Mtb.builder()
+ PatientRecord.builder()
.patient(Patient.builder().id("123").build())
.metadata(MvhMetadata())
.episodesOfCare(
@@ -577,7 +588,7 @@ class RequestProcessorTest {
.whenever(pseudonymizeService)
.patientPseudonym(anyValueClass())
- doAnswer { it.arguments[0] }.whenever(transformationService).transform(any<Mtb>())
+ doAnswer { it.arguments[0] }.whenever(transformationService).transform(any<PatientRecord>())
doAnswer { MtbFileSender.Response(status = RequestStatus.SUCCESS) }
.whenever(sender)
@@ -586,7 +597,7 @@ class RequestProcessorTest {
whenever(consentProcessor.consentGatedCheckAndTryEmbedding(any())).thenReturn(true)
val mtbFile =
- Mtb.builder()
+ PatientRecord.builder()
.patient(Patient.builder().id("123").build())
.episodesOfCare(
listOf(
@@ -630,7 +641,7 @@ class RequestProcessorTest {
.whenever(pseudonymizeService)
.genomDeTan(anyValueClass())
- doAnswer { it.arguments[0] }.whenever(transformationService).transform(any<Mtb>())
+ doAnswer { it.arguments[0] }.whenever(transformationService).transform(any<PatientRecord>())
whenever(consentProcessor.consentGatedCheckAndTryEmbedding(any())).thenReturn(true)
@@ -647,7 +658,7 @@ class RequestProcessorTest {
)
val mtbFile =
- Mtb.builder()
+ PatientRecord.builder()
.patient(Patient.builder().id("123").build())
.metadata(MvhMetadata())
.episodesOfCare(
@@ -772,7 +783,7 @@ class RequestProcessorTest {
.whenever(pseudonymizeService)
.patientPseudonym(anyValueClass())
- doAnswer { it.arguments[0] }.whenever(transformationService).transform(any<Mtb>())
+ doAnswer { it.arguments[0] }.whenever(transformationService).transform(any<PatientRecord>())
whenever(consentProcessor.consentGatedCheckAndTryEmbedding(any())).thenReturn(true)
@@ -789,7 +800,7 @@ class RequestProcessorTest {
)
val mtbFile =
- Mtb.builder()
+ PatientRecord.builder()
.patient(Patient.builder().id("123").build())
.episodesOfCare(
listOf(
@@ -872,7 +883,7 @@ class RequestProcessorTest {
.whenever(pseudonymizeService)
.patientPseudonym(anyValueClass())
- doAnswer { it.arguments[0] }.whenever(transformationService).transform(any<Mtb>())
+ doAnswer { it.arguments[0] }.whenever(transformationService).transform(any<PatientRecord>())
doAnswer { MtbFileSender.Response(status = RequestStatus.SUCCESS) }
.whenever(sender)
@@ -893,7 +904,7 @@ class RequestProcessorTest {
)
val mtbFile =
- Mtb.builder()
+ PatientRecord.builder()
.patient(Patient.builder().id("123").build())
.metadata(MvhMetadata.builder().type(MvhSubmissionType.INITIAL).build())
.episodesOfCare(
@@ -925,7 +936,7 @@ class RequestProcessorTest {
val sendRequestCaptor = argumentCaptor<DnpmV2MtbFileRequest>()
verify(sender, times(1)).send(sendRequestCaptor.capture())
- assertThat(sendRequestCaptor.firstValue.content.metadata.type).isEqualTo(MvhSubmissionType.ADDITION)
+ assertThat(sendRequestCaptor.firstValue.content.metadata?.type).isEqualTo(MvhSubmissionType.ADDITION)
}
@Test
@@ -983,7 +994,7 @@ class RequestProcessorTest {
.whenever(pseudonymizeService)
.patientPseudonym(anyValueClass())
- doAnswer { it.arguments[0] }.whenever(transformationService).transform(any<Mtb>())
+ doAnswer { it.arguments[0] }.whenever(transformationService).transform(any<PatientRecord>())
doAnswer { MtbFileSender.Response(status = RequestStatus.SUCCESS) }
.whenever(sender)
@@ -1004,7 +1015,7 @@ class RequestProcessorTest {
)
val mtbFile =
- Mtb.builder()
+ PatientRecord.builder()
.patient(Patient.builder().id("123").build())
.metadata(MvhMetadata.builder().type(MvhSubmissionType.INITIAL).build())
.episodesOfCare(
@@ -1036,7 +1047,7 @@ class RequestProcessorTest {
val sendRequestCaptor = argumentCaptor<DnpmV2MtbFileRequest>()
verify(sender, times(1)).send(sendRequestCaptor.capture())
- assertThat(sendRequestCaptor.firstValue.content.metadata.type).isEqualTo(MvhSubmissionType.ADDITION)
+ assertThat(sendRequestCaptor.firstValue.content.metadata?.type).isEqualTo(MvhSubmissionType.ADDITION)
}
@Test
@@ -1081,7 +1092,7 @@ class RequestProcessorTest {
.whenever(pseudonymizeService)
.patientPseudonym(anyValueClass())
- doAnswer { it.arguments[0] }.whenever(transformationService).transform(any<Mtb>())
+ doAnswer { it.arguments[0] }.whenever(transformationService).transform(any<PatientRecord>())
doAnswer { MtbFileSender.Response(status = RequestStatus.SUCCESS) }
.whenever(sender)
@@ -1102,7 +1113,7 @@ class RequestProcessorTest {
)
val mtbFile =
- Mtb.builder()
+ PatientRecord.builder()
.patient(Patient.builder().id("123").build())
.metadata(MvhMetadata.builder().type(MvhSubmissionType.INITIAL).build())
.episodesOfCare(
@@ -1134,7 +1145,7 @@ class RequestProcessorTest {
val sendRequestCaptor = argumentCaptor<DnpmV2MtbFileRequest>()
verify(sender, times(1)).send(sendRequestCaptor.capture())
- assertThat(sendRequestCaptor.firstValue.content.metadata.type).isEqualTo(MvhSubmissionType.INITIAL)
+ assertThat(sendRequestCaptor.firstValue.content.metadata?.type).isEqualTo(MvhSubmissionType.INITIAL)
}
@Test
@@ -1192,7 +1203,7 @@ class RequestProcessorTest {
.whenever(pseudonymizeService)
.patientPseudonym(anyValueClass())
- doAnswer { it.arguments[0] }.whenever(transformationService).transform(any<Mtb>())
+ doAnswer { it.arguments[0] }.whenever(transformationService).transform(any<PatientRecord>())
doAnswer { MtbFileSender.Response(status = RequestStatus.SUCCESS) }
.whenever(sender)
@@ -1213,7 +1224,7 @@ class RequestProcessorTest {
)
val mtbFile =
- Mtb.builder()
+ PatientRecord.builder()
.patient(Patient.builder().id("123").build())
.metadata(MvhMetadata.builder().type(MvhSubmissionType.INITIAL).build())
.episodesOfCare(
@@ -1254,7 +1265,7 @@ class RequestProcessorTest {
val sendRequestCaptor = argumentCaptor<DnpmV2MtbFileRequest>()
verify(sender, times(1)).send(sendRequestCaptor.capture())
- assertThat(sendRequestCaptor.firstValue.content.metadata.type).isEqualTo(MvhSubmissionType.FOLLOWUP)
+ assertThat(sendRequestCaptor.firstValue.content.metadata?.type).isEqualTo(MvhSubmissionType.FOLLOWUP)
}
@@ -1313,7 +1324,7 @@ class RequestProcessorTest {
.whenever(pseudonymizeService)
.patientPseudonym(anyValueClass())
- doAnswer { it.arguments[0] }.whenever(transformationService).transform(any<Mtb>())
+ doAnswer { it.arguments[0] }.whenever(transformationService).transform(any<PatientRecord>())
doAnswer { MtbFileSender.Response(status = RequestStatus.SUCCESS) }
.whenever(sender)
@@ -1334,7 +1345,7 @@ class RequestProcessorTest {
)
val mtbFile =
- Mtb.builder()
+ PatientRecord.builder()
.patient(Patient.builder().id("123").build())
.metadata(MvhMetadata.builder().type(MvhSubmissionType.INITIAL).build())
.episodesOfCare(
@@ -1375,7 +1386,7 @@ class RequestProcessorTest {
val sendRequestCaptor = argumentCaptor<DnpmV2MtbFileRequest>()
verify(sender, times(1)).send(sendRequestCaptor.capture())
- assertThat(sendRequestCaptor.firstValue.content.metadata.type).isEqualTo(MvhSubmissionType.FOLLOWUP)
+ assertThat(sendRequestCaptor.firstValue.content.metadata?.type).isEqualTo(MvhSubmissionType.FOLLOWUP)
}
}
@@ -1434,7 +1445,7 @@ class RequestProcessorTest {
.whenever(pseudonymizeService)
.patientPseudonym(anyValueClass())
- doAnswer { it.arguments[0] }.whenever(transformationService).transform(any<Mtb>())
+ doAnswer { it.arguments[0] }.whenever(transformationService).transform(any<PatientRecord>())
doAnswer { MtbFileSender.Response(status = RequestStatus.SUCCESS) }
.whenever(sender)
@@ -1455,7 +1466,7 @@ class RequestProcessorTest {
)
val mtbFile =
- Mtb.builder()
+ PatientRecord.builder()
.patient(Patient.builder().id("123").build())
.metadata(MvhMetadata.builder().type(MvhSubmissionType.INITIAL).build())
.episodesOfCare(
@@ -1496,12 +1507,12 @@ class RequestProcessorTest {
val sendRequestCaptor = argumentCaptor<DnpmV2MtbFileRequest>()
verify(sender, times(1)).send(sendRequestCaptor.capture())
- assertThat(sendRequestCaptor.firstValue.content.metadata.type).isEqualTo(MvhSubmissionType.ADDITION)
+ assertThat(sendRequestCaptor.firstValue.content.metadata?.type).isEqualTo(MvhSubmissionType.ADDITION)
}
@Test
fun shouldCatchExceptionsWhenProcessingMtbFileAndSaveError() {
- val invalidMtbFile = Mtb.builder().build()
+ val invalidMtbFile = PatientRecord.builder().build()
val success = this.requestProcessor.processMtbFile(invalidMtbFile)
diff --git a/src/test/kotlin/dev/dnpm/etl/processor/services/TransformationServiceTest.kt b/src/test/kotlin/dev/dnpm/etl/processor/services/TransformationServiceTest.kt
index 66e45f8..cbca4f7 100644
--- a/src/test/kotlin/dev/dnpm/etl/processor/services/TransformationServiceTest.kt
+++ b/src/test/kotlin/dev/dnpm/etl/processor/services/TransformationServiceTest.kt
@@ -24,7 +24,15 @@ import ca.uhn.fhir.context.FhirContext
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.databind.node.ObjectNode
import dev.dnpm.etl.processor.config.JacksonConfig
-import dev.pcvolkmer.mv64e.mtb.*
+import dev.pcvolkmer.mv64e.model.Coding
+import dev.pcvolkmer.mv64e.model.ConsentProvisionType
+import dev.pcvolkmer.mv64e.model.ModelProjectConsentPurpose
+import dev.pcvolkmer.mv64e.model.MtbDiagnosis
+import dev.pcvolkmer.mv64e.model.MvhMetadata
+import dev.pcvolkmer.mv64e.model.MvhMetadataModelProjectConsent
+import dev.pcvolkmer.mv64e.model.MvhMetadataModelProjectConsentProvisionsInner
+import dev.pcvolkmer.mv64e.model.PatientRecord
+import dev.pcvolkmer.mv64e.model.ResearchConsent
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
@@ -49,7 +57,7 @@ class TransformationServiceTest {
@Test
fun shouldTransformMtbFile() {
val mtbFile =
- Mtb.builder()
+ PatientRecord.builder()
.diagnoses(
listOf(
MtbDiagnosis.builder()
@@ -63,13 +71,13 @@ class TransformationServiceTest {
val actual = this.service.transform(mtbFile)
assertThat(actual).isNotNull
- assertThat(actual.diagnoses[0].code.version).isEqualTo("2014")
+ assertThat(actual.diagnoses!![0].code.version).isEqualTo("2014")
}
@Test
fun shouldOnlyTransformGivenValues() {
val mtbFile =
- Mtb.builder()
+ PatientRecord.builder()
.diagnoses(
listOf(
MtbDiagnosis.builder()
@@ -87,16 +95,16 @@ class TransformationServiceTest {
val actual = this.service.transform(mtbFile)
assertThat(actual).isNotNull
- assertThat(actual.diagnoses[0].code.code).isEqualTo("F79.9")
- assertThat(actual.diagnoses[0].code.version).isEqualTo("2014")
- assertThat(actual.diagnoses[1].code.code).isEqualTo("F79.8")
- assertThat(actual.diagnoses[1].code.version).isEqualTo("2019")
+ assertThat(actual.diagnoses!![0].code.code).isEqualTo("F79.9")
+ assertThat(actual.diagnoses!![0].code.version).isEqualTo("2014")
+ assertThat(actual.diagnoses!![1].code.code).isEqualTo("F79.8")
+ assertThat(actual.diagnoses!![1].code.version).isEqualTo("2019")
}
@Test
fun shouldTransformConsentValues() {
val mtbFile =
- Mtb.builder()
+ PatientRecord.builder()
.diagnoses(
listOf(
MtbDiagnosis.builder()
@@ -114,35 +122,35 @@ class TransformationServiceTest {
val actual = this.service.transform(mtbFile)
assertThat(actual).isNotNull
- assertThat(actual.diagnoses[0].code.code).isEqualTo("F79.9")
- assertThat(actual.diagnoses[0].code.version).isEqualTo("2014")
- assertThat(actual.diagnoses[1].code.code).isEqualTo("F79.8")
- assertThat(actual.diagnoses[1].code.version).isEqualTo("2019")
+ assertThat(actual.diagnoses!![0].code.code).isEqualTo("F79.9")
+ assertThat(actual.diagnoses!![0].code.version).isEqualTo("2014")
+ assertThat(actual.diagnoses!![1].code.code).isEqualTo("F79.8")
+ assertThat(actual.diagnoses!![1].code.version).isEqualTo("2019")
}
@Test
fun shouldTransformConsent() {
- val mvhMetadata = MvhMetadata.builder().transferTan("transfertan12345").build()
+ val mvhMetadata = MvhMetadata.builder().transferTAN("transfertan12345").build()
assertThat(mvhMetadata).isNotNull
mvhMetadata.modelProjectConsent =
- ModelProjectConsent.builder()
+ MvhMetadataModelProjectConsent.builder()
.date(Date.from(Instant.parse("2025-08-15T00:00:00.00Z")))
.version("1")
.provisions(
listOf(
- Provision.builder()
- .type(ConsentProvision.PERMIT)
+ MvhMetadataModelProjectConsentProvisionsInner.builder()
+ .type(ConsentProvisionType.PERMIT)
.purpose(ModelProjectConsentPurpose.SEQUENCING)
.date(Date.from(Instant.parse("2025-08-15T00:00:00.00Z")))
.build(),
- Provision.builder()
- .type(ConsentProvision.PERMIT)
+ MvhMetadataModelProjectConsentProvisionsInner.builder()
+ .type(ConsentProvisionType.PERMIT)
.purpose(ModelProjectConsentPurpose.REIDENTIFICATION)
.date(Date.from(Instant.parse("2025-08-15T00:00:00.00Z")))
.build(),
- Provision.builder()
- .type(ConsentProvision.DENY)
+ MvhMetadataModelProjectConsentProvisionsInner.builder()
+ .type(ConsentProvisionType.DENY)
.purpose(ModelProjectConsentPurpose.CASE_IDENTIFICATION)
.date(Date.from(Instant.parse("2025-08-15T00:00:00.00Z")))
.build(),
@@ -158,11 +166,11 @@ class TransformationServiceTest {
)
mvhMetadata.researchConsents = mutableListOf()
- mvhMetadata.researchConsents.add(MvhMetadata.ResearchConsent.from(jsonNode))
+ mvhMetadata.researchConsents?.add(ResearchConsent.from(jsonNode))
- val mtbFile = Mtb.builder().metadata(mvhMetadata).build()
+ val mtbFile = PatientRecord.builder().metadata(mvhMetadata).build()
val transformed = service.transform(mtbFile)
- assertThat(transformed.metadata.modelProjectConsent.date).isNotNull
+ assertThat(transformed.metadata?.modelProjectConsent?.date).isNotNull
}
}