1
0
mirror of https://github.com/pcvolkmer/mv64e-etl-processor synced 2025-09-13 17:02:52 +00:00

feat: configuration of genomDe test submission via 'app.genomDeTestSubmission' = 'true', is implemented, now. (#136)

Co-authored-by: Paul-Christian Volkmer <code@pcvolkmer.de>
This commit is contained in:
jlidke
2025-08-20 10:47:38 +02:00
committed by GitHub
parent c40fd7f816
commit 3b66f42eb2
2 changed files with 62 additions and 29 deletions

View File

@@ -6,9 +6,9 @@ import com.fasterxml.jackson.core.type.TypeReference
import com.fasterxml.jackson.databind.ObjectMapper
import dev.dnpm.etl.processor.config.AppConfigProperties
import dev.dnpm.etl.processor.config.GIcsConfigProperties
import dev.dnpm.etl.processor.consent.MtbFileConsentService
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 org.apache.commons.lang3.NotImplementedException
@@ -72,7 +72,7 @@ class ConsentProcessor(
val broadConsent = consentService.getConsent(
personIdentifierValue, requestDate, ConsentDomain.BROAD_CONSENT
)
val broadConsentHasBeenAsked = !broadConsent.entry.isEmpty()
val broadConsentHasBeenAsked = broadConsent.entry.isNotEmpty()
// fast exit - if patient has not been asked, we can skip and exit
if (!broadConsentHasBeenAsked) return false
@@ -83,7 +83,7 @@ class ConsentProcessor(
addGenomeDbProvisions(mtbFile, genomeDeConsent)
if (!genomeDeConsent.entry.isEmpty()) setGenomDeSubmissionType(mtbFile)
if (genomeDeConsent.entry.isNotEmpty()) setGenomDeSubmissionType(mtbFile)
embedBroadConsentResources(mtbFile, broadConsent)
@@ -105,8 +105,8 @@ class ConsentProcessor(
}
fun embedBroadConsentResources(mtbFile: Mtb, broadConsent: Bundle) {
for (entry in broadConsent.getEntry()) {
val resource = entry.getResource()
for (entry in broadConsent.entry) {
val resource = entry.resource
if (resource is Consent) {
// since jackson convertValue does not work here,
// we need another step to back to string, before we convert to object map
@@ -124,14 +124,14 @@ class ConsentProcessor(
}
fun addGenomeDbProvisions(mtbFile: Mtb, consentGnomeDe: Bundle) {
for (entry in consentGnomeDe.getEntry()) {
val resource = entry.getResource()
for (entry in consentGnomeDe.entry) {
val resource = entry.resource
if (resource !is Consent) {
continue
}
// We expect only one provision in collection, therefore get first or none
val provisions = resource.getProvision().getProvision()
val provisions = resource.provision.provision
if (provisions.isEmpty()) {
continue
}
@@ -139,10 +139,10 @@ class ConsentProcessor(
val provisionComponent: ProvisionComponent = provisions.first()
var provisionCode: String? = null
if (provisionComponent.getCode() != null && !provisionComponent.getCode().isEmpty()) {
val codableConcept: CodeableConcept = provisionComponent.getCode().first()
if (codableConcept.getCoding() != null && !codableConcept.getCoding().isEmpty()) {
provisionCode = codableConcept.getCoding().first().getCode()
if (provisionComponent.code != null && provisionComponent.code.isNotEmpty()) {
val codableConcept: CodeableConcept = provisionComponent.code.first()
if (codableConcept.coding != null && codableConcept.coding.isNotEmpty()) {
provisionCode = codableConcept.coding.first().code
}
}
@@ -153,12 +153,12 @@ class ConsentProcessor(
if (ModelProjectConsentPurpose.SEQUENCING == modelProjectConsentPurpose) {
// CONVENTION: wrapping date is date of SEQUENCING consent
mtbFile.metadata.modelProjectConsent.date = resource.getDateTime()
mtbFile.metadata.modelProjectConsent.date = resource.dateTime
}
val provision = Provision.builder()
.type(ConsentProvision.valueOf(provisionComponent.getType().name))
.date(provisionComponent.getPeriod().getStart())
.type(ConsentProvision.valueOf(provisionComponent.type.name))
.date(provisionComponent.period.start)
.purpose(modelProjectConsentPurpose).build()
mtbFile.metadata.modelProjectConsent.provisions.add(provision)
@@ -170,27 +170,22 @@ class ConsentProcessor(
}
}
if (!mtbFile.metadata.modelProjectConsent.provisions.isEmpty()) {
if (mtbFile.metadata.modelProjectConsent.provisions.isNotEmpty()) {
mtbFile.metadata.modelProjectConsent.version =
gIcsConfigProperties.genomeDeConsentVersion
}
}
}
/**
* fixme: currently we do not have information about submission type
*/
private fun setGenomDeSubmissionType(mtbFile: Mtb) {
if (appConfigProperties.genomDeTestSubmission) {
// fixme: remove INITIAL and uncomment when data model is updated
mtbFile.metadata.type = MvhSubmissionType.INITIAL
// mtbFile.metadata.type = MvhSubmissionType.Test
mtbFile.metadata.type = MvhSubmissionType.TEST
logger.info("genomeDe submission mit TEST")
} else {
mtbFile.metadata.type = MvhSubmissionType.INITIAL
mtbFile.metadata.type = when (mtbFile.metadata.type) {
null -> MvhSubmissionType.INITIAL
else -> mtbFile.metadata.type
}
}
}
@@ -251,7 +246,7 @@ class ConsentProcessor(
}
}.flatten()
if (!entriesOfInterest.isEmpty()) {
if (entriesOfInterest.isNotEmpty()) {
return entriesOfInterest.first().type
}
return Consent.ConsentProvisionType.NULL
@@ -270,8 +265,8 @@ class ConsentProcessor(
}
fun isRequestDateInRange(requestDate: Date?, provPeriod: Period): Boolean {
val isRequestDateAfterOrEqualStart = provPeriod.getStart().compareTo(requestDate)
val isRequestDateBeforeOrEqualEnd = provPeriod.getEnd().compareTo(requestDate)
val isRequestDateAfterOrEqualStart = provPeriod.start.compareTo(requestDate)
val isRequestDateBeforeOrEqualEnd = provPeriod.end.compareTo(requestDate)
return isRequestDateAfterOrEqualStart <= 0 && isRequestDateBeforeOrEqualEnd >= 0
}