refs/refs/fhir-to-omop-demo/demo/translate/map/Encounter.jq

147 lines · jq
2# Transforms FHIR Encounters into OMOP table records.
5include "fhir";
6include "fhir/common";
8# An alias for the unit of the measurement.
9def unit:
10 .valueQuantity.concept
13def primary_performer:
14 .participant[] | select(.type[].coding[].code == "PPRF") | .individual
17def code_concept(domain):
18 (.type[].coding[] | [select(.concept.domain_id == domain)]) as $concepts |
19 if ($concepts | length) > 1 then
20 error("Multiple \(domain) codings in Encounter/\(.id) code: \($concepts)")
21 elif ($concepts | length) == 0 then
22 empty
23 else
24 $concepts[0].concept
25 end
28def condition: code_concept("Condition");
29def procedure: code_concept("Procedure");
30def visit: code_concept("Visit");
32def observation:
33 ["Condition", "Device", "Drug", "Measurement", "Procedure"] as $forbidden |
34 (
35 .type[].coding[]
36 | [select(.concept.domain_id | IN($forbidden[]) | not)]
37 ) as $concepts |
38 if ($concepts | length) > 1 then
39 error("Multiple encounter codings in Encounter/\(.id) code")
40 elif ($concepts | length) == 0 then
41 empty
42 else
43 $concepts[0].concept
44 end
47Encounter |
49 "visit_occurrence", # TABLE COLUMNS
50 .id, # visit_occurrence_id
51 .subject.id, # person_id
52 visit.concept_id, # visit_concept_id
53 .period.start, # visit_start_date
54 .period.start, # visit_start_datetime
55 .period.end, # visit_end_date
56 .period.end, # visit_end_datetime
57 44818518, # visit_type_concept_id - EHR visit
58 primary_performer.id, # provider_id
59 .location[0].location.id, # care_site_id
60 null, # visit_source_value
61 null, # visit_source_concept_id
62 null, # admitted_from_concept_id
63 null, # admitted_from_source_value
64 null, # discharge_to_concept_id
65 null, # discharge_to_source_value
66 null # preceding_visit_occurrence_id
67],
69 "condition_occurrence", # TABLE COLUMNS
70 .id, # condition_occurrence_id
71 .subject.id, # person_id
72 condition.concept.concept_id, # condition_concept_id
73 .period.start, # condition_start_date
74 .period.start, # condition_start_datetime
75 .period.end, # condition_end_date
76 .period.end, # condition_end_datetime
77 32817, # condition_type_concept_id # provenance: EHR
78 null, # condition_status_concept_id
79 null, # stop_reason
80 primary_performer.id, # provider_id
81 .id, # visit_occurrence_id
82 null, # visit_detail_id
83 condition.concept_code, # condition_source_value
84 condition.source_concept_id, # condition_source_concept_id
85 null # condition_status_source_value
86],
88 "observation", # TABLE COLUMNS
89 .id, # observation_id
90 .subject.id, # person_id
91 observation.concept_id, # observation_concept_id
92 .period.start, # observation_date
93 .period.start, # observation_datetime
94 32817, # observation_type_concept_id - source EHR
95 null, # value_as_number
96 null, # value_as_string
97 null, # value_as_concept_id
98 null, # qualifier_concept_id
99 null, # unit_concept_id
100 primary_performer.id, # provider_id
101 .id, # visit_occurrence_id
102 null, # visit_detail_id
103 observation.concept_code, # observation_source_value
104 observation.concept_id, # observation_source_concept_id
105 null, # unit_source_value
106 null, # qualifier_source_value
107 null, # value_source_value
108 .id, # observation_event_id
109 null # obs_event_field_concept_id
110],
112 "observation_period", # TABLE COLUMNS
113 .id, # observation_period_id
114 .subject.id, # person_id
115 .period.start, # observation_period_start_date
116 .period.end, # observation_period_end_date
117 32827 # period_type_concept_id - EHR encounter record
118],
120 "procedure_occurrence", # TABLE COLUMNS
121 .id, # procedure_occurrence_id
122 .subject.id, # person_id
123 procedure.concept_id, # procedure_concept_id
124 .period.start, # procedure_date
125 .period.start, # procedure_datetime
126 .period.end, # procedure_end_date
127 .period.end, # procedure_end_datetime
128 32817, # procedure_type_concept_id - source EHR
129 null, # modifier_concept_id
130 null, # quantity
131 primary_performer.id, # provider_id
132 .id, # visit_occurrence_id
133 null, # visit_detail_id
134 procedure.concept_code, # procedure_source_value
135 procedure.source_concept_id, # procedure_source_concept_id
136 null # modifier_source_value
138| select(
139 ((.[0] == "condition_occurrence") and length == 17) or
140 ((.[0] == "visit_occurrence") and length == 18) or
141 ((.[0] == "observation") and length == 22) or
142 ((.[0] == "observation_period") and length == 6) or
143 ((.[0] == "procedure_occurrence") and length == 17)
146@tsv