You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
/// title = 'FHIR Patient resource to Tables CDM OMOP'
5
+
/// description = 'Cette ressource présente les spécifications de l\'alignement entre la ressource `Patient` vers les tables correspodantes du CDM OMOP.'
6
+
/// status = 'draft'
7
+
8
+
uses "http://hl7.org/fhir/StructureDefinition/Patient" alias Patient as source
9
+
uses "https://aphp.fr/ig/fhir/dm/StructureDefinition/LogicalBundle" alias LogicalBundle as target
10
+
uses "https://aphp.fr/ig/fhir/dm/StructureDefinition/OMOPPerson" alias PersonTable as target
11
+
uses "https://aphp.fr/ig/fhir/dm/StructureDefinition/OMOPLocation" alias LocationTable as target
12
+
uses "https://aphp.fr/ig/fhir/dm/StructureDefinition/OMOPDeath" alias DeathTable as target
srcDataSet.patient as srcPatient -> tgtBundle.entry as tgtEntry, tgtEntry.resource = create("Patient") as newPatient then {
24
25
srcPatient then patient(srcPatient, newPatient) "setPatient";
25
-
srcDataSet.encounter as srcEncounter -> tgtBundle.entry as tgtEntry, tgtEntry.resource = create("Encounter") as newEncounter then {
26
-
srcEncounter then encounter(srcEncounter, newPatient, newEncounter) "setEncounter";
27
-
srcDataSet.biology as srcBiology where encounterNi.reference = ('EncounterCore/' + %srcEncounter.encounterNi.toString()) -> tgtBundle.entry as tgtEntry, tgtEntry.resource = create("Observation") as newObservation then {
26
+
srcDataSet.sejour as srcSejour -> tgtBundle.entry as tgtEntry, tgtEntry.resource = create("Encounter") as newEncounter then {
27
+
srcSejour then encounter(srcSejour, newPatient, newEncounter) "setEncounter";
28
+
srcDataSet.biology as srcBiology where sejourNi.reference = ('SejourCore/' + %srcSejour.sejourNi.toString()) -> tgtBundle.entry as tgtEntry, tgtEntry.resource = create("Observation") as newObservation then {
28
29
srcBiology then observation(srcBiology, newPatient, newEncounter, newObservation) "setBiology";
srcPatient.birthDate as srcPatientBirthDate -> tgtPatient.birthDate = srcPatientBirthDate "setBirthDate"; // copie la valeur du champ birthDate de la table Patient dans l'élément birthDate de la ressource FHIR Patient
40
41
}
41
42
42
-
group setPatientMeta(source srcNi, target tgtMeta) {
43
+
group setPatientMeta(source srcNi, target tgtMeta : FHIRMeta) {
srcEncounter.encounterNi as srcNi -> tgtEncounter.meta as tgtMeta then setEncounterMeta(srcNi, tgtMeta) "setMeta"; // copie la valeur du champ patientNi de la table Patient dans l'élément id de la ressource FHIR Patient
srcSejour.sejourNi as srcNi -> tgtEncounter.meta as tgtMeta then setEncounterMeta(srcNi, tgtMeta) "setMeta"; // copie la valeur du champ patientNi de la table Patient dans l'élément id de la ressource FHIR Patient
srcSejour.sejourType as srcSejourType -> tgtEncounter.type = translate(srcSejourType, 'https://aphp.fr/ig/fhir/dm/ConceptMap/DpiEncounterType2SemanticLayerEncounterType', 'CodeableConcept') "setEncounterType";
58
59
srcPatient.id as patientId -> tgtEncounter.subject = create("Reference") as newSubject then setSubjectReference(patientId, newSubject) "setSubjectReference";
59
-
srcEncounter.patientNi "patientNi";// fk vers le patient
60
-
srcEncounter -> tgtEncounter.period = create("Period") as newActualPeriod then {
61
-
srcEncounter.encounterStart as srcPeriodStart -> newActualPeriod.start = srcPeriodStart "setStart";
62
-
srcEncounter.encounterEnd as srcPeriodEnd -> newActualPeriod.end = srcPeriodEnd "setEnd";
60
+
srcSejour.patientNi "patientNi";// fk vers le patient
61
+
srcSejour -> tgtEncounter.period = create("Period") as newActualPeriod then {
62
+
srcSejour.sejourStart as srcPeriodStart -> newActualPeriod.start = srcPeriodStart "setStart";
63
+
srcSejour.sejourEnd as srcPeriodEnd -> newActualPeriod.end = srcPeriodEnd "setEnd";
63
64
} "setPeriod";
64
65
}
65
66
66
-
group setEncounterMeta(source srcNi, target tgtMeta) {
/// name = 'CoreSimpleObservation2OMOPMeasurement'
4
+
/// title = 'Mapping simple Observation laboratory resources to Measurement OMOP Domain'
5
+
/// status = 'draft'
6
+
7
+
uses "http://hl7.org/fhir/StructureDefinition/Observation" alias LabObs as source
8
+
uses "https://aphp.fr/ig/fhir/dm/StructureDefinition/OMOPMeasurement" alias MeasurementTable as target
9
+
10
+
group SimpleObservation(source src: LabObs, target tgt : MeasurementTable) {
11
+
src.subject as srcSubject -> tgt.person_id = srcSubject "setSubject"; // reference impropre dans le monde OMOP mais permet d'illustrer l'information qui doit être utilisée pour retrouver la bonne OMOPPerson
12
+
src.code as srcCode -> tgt.measurement_concept_id = create('Reference') as tgtReference then {
13
+
srcCode.coding as srcCoding -> translate(srcCoding, 'https://aphp.fr/ig/fhir/dm/ConceptMap/LabAnalyses', 'code') as measurementCode,
srcValueQuantity.value as srcResultValue-> tgt.value_as_number = srcResultValue "setResultValue";
22
+
srcValueQuantity -> tgt.operator_concept_id = create('Reference') as tgtReference then {
23
+
srcValueQuantity.comparator as srcValueComparator -> translate(srcValueComparator, 'https://aphp.fr/ig/fhir/dm/ConceptMap/LabComparator', 'code') as comparatorCode,
srcValueQuantity.code as srcValueCode -> tgt.unit_source_value = srcValueCode "setUnitSourceValue";
31
+
} "SetValue";
32
+
src.referenceRange as srcRange then {
33
+
srcRange.low as srcRangeLow then {
34
+
srcRangeLow.value as srcRangeLowValue -> tgt.range_low = srcRangeLowValue "setRangeLow1";
35
+
} "setRangeLow0";
36
+
srcRange.high as srcRangeHigh then {
37
+
srcRangeHigh.value as srcRangeHighValue -> tgt.range_high = srcRangeHighValue "setRangeHigh1";
38
+
} "setRangeHigh0";
39
+
} "setRange";
40
+
src.performer as srcPerformer -> tgt.provider_id = srcPerformer "setPerformer"; // reference impropre dans le monde OMOP mais permet d'illustrer l'information qui doit être utilisée pour retrouver le bon OMOPProvider
0 commit comments