Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Specimen script fnusa #54

Merged
merged 2 commits into from
Apr 5, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package projects.patientfinder


import de.kairos.fhir.centraxx.metamodel.Episode
import de.kairos.fhir.centraxx.metamodel.LaborFindingLaborValue
import de.kairos.fhir.centraxx.metamodel.LaborMethod
import de.kairos.fhir.centraxx.metamodel.LaborValue
import de.kairos.fhir.centraxx.metamodel.MultilingualEntry
import de.kairos.fhir.centraxx.metamodel.PrecisionDate
import de.kairos.fhir.centraxx.metamodel.enums.LaborMappingType
import de.kairos.fhir.centraxx.metamodel.enums.LaborValueDType
import org.hl7.fhir.r4.model.DiagnosticReport

Expand All @@ -15,7 +15,6 @@ import static de.kairos.fhir.centraxx.metamodel.AbstractIdContainer.PSN
import static de.kairos.fhir.centraxx.metamodel.CrfTemplateField.LABOR_VALUE
import static de.kairos.fhir.centraxx.metamodel.LaborFindingLaborValue.CRF_TEMPLATE_FIELD
import static de.kairos.fhir.centraxx.metamodel.RootEntities.laborMapping

/**
* represented by CXX LaborMapping
* @author Mike Wähnert
Expand Down Expand Up @@ -49,6 +48,12 @@ diagnosticReport {

id = "DiagnosticReport/" + context.source[laborMapping().laborFinding().id()]

if (context.source[laborMapping().mappingType()].toString().equalsIgnoreCase(LaborMappingType.SAMPLELABORMAPPING.toString())) {
specimen {
reference = "Specimen/" + context.source[laborMapping().relatedOid()]
}
}

identifier {
system = "urn:centraxx"
value = context.source[laborMapping().laborFinding().laborFindingId()]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import de.kairos.fhir.centraxx.metamodel.LaborValue
import de.kairos.fhir.centraxx.metamodel.LaborValueNumeric
import de.kairos.fhir.centraxx.metamodel.PrecisionDate
import de.kairos.fhir.centraxx.metamodel.ValueReference
import de.kairos.fhir.centraxx.metamodel.enums.LaborMappingType
import de.kairos.fhir.centraxx.metamodel.enums.LaborValueDType
import org.hl7.fhir.r4.model.Observation

Expand Down Expand Up @@ -42,6 +43,12 @@ observation {
return
}

if (context.source[laborMapping().mappingType()].toString().equalsIgnoreCase(LaborMappingType.SAMPLELABORMAPPING.toString())) {
specimen {
reference = "Specimen/" + context.source[laborMapping().relatedOid()]
}
}

id = "Observation/" + context.source[laborMapping().laborFinding().id()]

status = Observation.ObservationStatus.UNKNOWN
Expand Down
59 changes: 59 additions & 0 deletions src/main/groovy/projects/patientfinder/specimen.groovy
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package projects.patientfinder

import de.kairos.centraxx.fhir.r4.utils.FhirUrls
import de.kairos.fhir.centraxx.metamodel.AbstractSample

import static de.kairos.fhir.centraxx.metamodel.AbstractCode.CODE
import static de.kairos.fhir.centraxx.metamodel.AbstractIdContainer.ID_CONTAINER_TYPE
import static de.kairos.fhir.centraxx.metamodel.AbstractIdContainer.PSN
import static de.kairos.fhir.centraxx.metamodel.IdContainerType.DECISIVE
import static de.kairos.fhir.centraxx.metamodel.RootEntities.sample

specimen {

id = "Specimen/" + context.source[sample().id()]

context.source[sample().idContainer()].each { final idContainer ->
final boolean isDecisive = idContainer[ID_CONTAINER_TYPE]?.getAt(DECISIVE)
if (isDecisive) {
identifier {
value = idContainer[PSN]
type {
coding {
system = FhirUrls.System.IdContainerType.BASE_URL
code = idContainer[ID_CONTAINER_TYPE]?.getAt(CODE)
}
}
}
}
}

type {
coding {
system = FhirUrls.System.Sample.SampleKind.BASE_URL
code = context.source[sample().sampleKind()]
}
}

subject {
reference = "Patient/" + context.source[sample().patientContainer().id()]
}

final def parentSample = context.source[sample().parent()]

if (parentSample != null){
parent {
reference = "Specimen/" + parentSample[AbstractSample.ID]
}
}

collection {
collectedDateTime {
date = context.source[sample().samplingDate().date()]
quantity {
value = context.source[sample().initialAmount().amount()] as Number
unit = context.source[sample().initialAmount().unit()]
}
}
}
}