cqm-reports 1.0.0.0 → 2.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +1 -1
- data/README.md +8 -6
- data/lib/html-export/qdm-patient/data_element/_data_element_codes.mustache +1 -1
- data/lib/html-export/qdm-patient/qdm_patient.rb +5 -1
- data/lib/qrda-export/catI-r5/qrda_templates/communication_performed.mustache +5 -3
- data/lib/qrda-export/catI-r5/qrda_templates/device_order.mustache +4 -4
- data/lib/qrda-export/catI-r5/qrda_templates/device_recommended.mustache +4 -4
- data/lib/qrda-export/catI-r5/qrda_templates/encounter_order.mustache +4 -4
- data/lib/qrda-export/catI-r5/qrda_templates/encounter_performed.mustache +4 -4
- data/lib/qrda-export/catI-r5/qrda_templates/encounter_recommended.mustache +4 -4
- data/lib/qrda-export/catI-r5/qrda_templates/medication_discharge.mustache +0 -3
- data/lib/qrda-export/catI-r5/qrda_templates/medication_dispensed.mustache +4 -4
- data/lib/qrda-export/catI-r5/qrda_templates/physical_exam_performed.mustache +4 -0
- data/lib/qrda-export/catI-r5/qrda_templates/template_partials/_immunization_details.mustache +2 -2
- data/lib/qrda-export/catI-r5/qrda_templates/template_partials/_medication_details.mustache +5 -1
- data/lib/qrda-export/catI-r5/qrda_templates/template_partials/_medication_supply_request.mustache +1 -1
- data/lib/qrda-export/catI-r5/qrda_templates/template_partials/_results.mustache +0 -12
- data/lib/qrda-export/catIII-r2-1/_header.mustache +7 -0
- data/lib/qrda-export/catIII-r2-1/_measure_data.mustache +2 -0
- data/lib/qrda-export/catIII-r2-1/_measure_section.mustache +3 -0
- data/lib/qrda-export/catIII-r2-1/_supplemental_data.mustache +8 -1
- data/lib/qrda-export/catIII-r2-1/qrda3_r21.mustache +0 -1
- data/lib/qrda-export/catIII-r2-1/qrda3_r21.rb +16 -1
- data/lib/qrda-export/catIII-r2-1/qrda_header/_information_recipient.mustache +7 -0
- data/lib/qrda-export/catIII-r2-1/qrda_header/_participant_ehr.mustache +6 -0
- data/lib/qrda-export/catIII-r2-1/qrda_header/_participant_location.mustache +13 -0
- data/lib/qrda-export/helper/aggregate_object_helper.rb +1 -1
- data/lib/qrda-export/helper/cat1_view_helper.rb +18 -10
- data/lib/qrda-import/base-importers/demographics_importer.rb +3 -3
- data/lib/qrda-import/base-importers/section_importer.rb +37 -33
- data/lib/qrda-import/data-element-importers/assessment_order_importer.rb +2 -0
- data/lib/qrda-import/data-element-importers/assessment_performed_importer.rb +2 -0
- data/lib/qrda-import/data-element-importers/assessment_recommended_importer.rb +2 -0
- data/lib/qrda-import/data-element-importers/communication_performed_importer.rb +1 -2
- data/lib/qrda-import/data-element-importers/device_applied_importer.rb +2 -0
- data/lib/qrda-import/data-element-importers/device_order_importer.rb +2 -0
- data/lib/qrda-import/data-element-importers/device_recommended_importer.rb +2 -0
- data/lib/qrda-import/data-element-importers/diagnostic_study_order_importer.rb +2 -0
- data/lib/qrda-import/data-element-importers/diagnostic_study_performed_importer.rb +2 -0
- data/lib/qrda-import/data-element-importers/encounter_order_importer.rb +2 -0
- data/lib/qrda-import/data-element-importers/encounter_recommended_importer.rb +2 -0
- data/lib/qrda-import/data-element-importers/immunization_administered_importer.rb +2 -0
- data/lib/qrda-import/data-element-importers/immunization_order_importer.rb +2 -0
- data/lib/qrda-import/data-element-importers/intervention_order_importer.rb +2 -0
- data/lib/qrda-import/data-element-importers/intervention_performed_importer.rb +2 -0
- data/lib/qrda-import/data-element-importers/intervention_recommended_importer.rb +2 -0
- data/lib/qrda-import/data-element-importers/laboratory_test_order_importer.rb +2 -0
- data/lib/qrda-import/data-element-importers/laboratory_test_performed_importer.rb +2 -0
- data/lib/qrda-import/data-element-importers/laboratory_test_recommended_importer.rb +2 -0
- data/lib/qrda-import/data-element-importers/medication_administered_importer.rb +2 -0
- data/lib/qrda-import/data-element-importers/medication_dispensed_importer.rb +0 -1
- data/lib/qrda-import/data-element-importers/medication_order_importer.rb +2 -0
- data/lib/qrda-import/data-element-importers/patient_characteristic_clinical_trial_participant_importer.rb +2 -0
- data/lib/qrda-import/data-element-importers/physical_exam_order_importer.rb +2 -0
- data/lib/qrda-import/data-element-importers/physical_exam_performed_importer.rb +2 -0
- data/lib/qrda-import/data-element-importers/physical_exam_recommended_importer.rb +2 -0
- data/lib/qrda-import/data-element-importers/procedure_order_importer.rb +2 -0
- data/lib/qrda-import/data-element-importers/procedure_performed_importer.rb +2 -0
- data/lib/qrda-import/data-element-importers/procedure_recommended_importer.rb +2 -0
- data/lib/qrda-import/data-element-importers/substance_administered_importer.rb +0 -1
- data/lib/qrda-import/data-element-importers/substance_order_importer.rb +2 -0
- data/lib/qrda-import/data-element-importers/substance_recommended_importer.rb +2 -0
- data/lib/qrda-import/patient_importer.rb +1 -1
- data/lib/util/code_system_helper.rb +3 -24
- metadata +20 -18
@@ -9,7 +9,7 @@ module QRDA
|
|
9
9
|
patient.qdmPatient.birthDatetime = DateTime.parse(patient_element.at_xpath('cda:birthTime')['value'])
|
10
10
|
pcbd = QDM::PatientCharacteristicBirthdate.new
|
11
11
|
pcbd.birthDatetime = patient.qdmPatient.birthDatetime
|
12
|
-
pcbd.dataElementCodes = [{ code: '21112-8',
|
12
|
+
pcbd.dataElementCodes = [{ code: '21112-8', codeSystemOid: '2.16.840.1.113883.6.1' }]
|
13
13
|
patient.qdmPatient.dataElements << pcbd
|
14
14
|
|
15
15
|
pcs = QDM::PatientCharacteristicSex.new
|
@@ -29,9 +29,9 @@ module QRDA
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def code_if_present(code_element)
|
32
|
-
return unless code_element && code_element['
|
32
|
+
return unless code_element && code_element['code'] && code_element['codeSystem']
|
33
33
|
|
34
|
-
QDM::Code.new(code_element['code'],
|
34
|
+
QDM::Code.new(code_element['code'], code_element['codeSystem'])
|
35
35
|
end
|
36
36
|
end
|
37
37
|
end
|
@@ -49,7 +49,7 @@ module QRDA
|
|
49
49
|
if @result_xpath
|
50
50
|
entry.result = extract_result_values(entry_element)
|
51
51
|
end
|
52
|
-
|
52
|
+
extract_negation(entry_element, entry)
|
53
53
|
entry
|
54
54
|
end
|
55
55
|
|
@@ -79,9 +79,8 @@ module QRDA
|
|
79
79
|
end
|
80
80
|
|
81
81
|
def code_if_present(code_element)
|
82
|
-
return unless code_element && code_element['
|
83
|
-
|
84
|
-
QDM::Code.new(code_element['code'], HQMF::Util::CodeSystemHelper.code_system_for(code_element['codeSystem']))
|
82
|
+
return unless code_element && code_element['code'] && code_element['codeSystem']
|
83
|
+
QDM::Code.new(code_element['code'], code_element['codeSystem'])
|
85
84
|
end
|
86
85
|
|
87
86
|
def extract_dates(parent_element, entry)
|
@@ -96,13 +95,13 @@ module QRDA
|
|
96
95
|
high_time = DateTime.parse(parent_element.at_xpath(interval_xpath)['value'])
|
97
96
|
end
|
98
97
|
if parent_element.at_xpath("#{interval_xpath}/cda:low")
|
99
|
-
low_time =
|
98
|
+
low_time = if parent_element.at_xpath("#{interval_xpath}/cda:low")['value']
|
99
|
+
DateTime.parse(parent_element.at_xpath("#{interval_xpath}/cda:low")['value'])
|
100
|
+
end
|
100
101
|
end
|
101
102
|
if parent_element.at_xpath("#{interval_xpath}/cda:high")
|
102
103
|
high_time = if parent_element.at_xpath("#{interval_xpath}/cda:high")['value']
|
103
104
|
DateTime.parse(parent_element.at_xpath("#{interval_xpath}/cda:high")['value'])
|
104
|
-
else
|
105
|
-
DateTime.new(9999,1,1)
|
106
105
|
end
|
107
106
|
end
|
108
107
|
if parent_element.at_xpath("#{interval_xpath}/cda:center")
|
@@ -122,25 +121,26 @@ module QRDA
|
|
122
121
|
# If a frequency interval is not found, return nil
|
123
122
|
return nil unless frequency[:low]
|
124
123
|
# If a frequency interval is found, search for a corresponding Direct Reference Code
|
125
|
-
key, value = Qrda::Export::Helper::FrequencyHelper::FREQUENCY_CODE_MAP.select { |_k,v| v[:low] == frequency[
|
124
|
+
key, value = Qrda::Export::Helper::FrequencyHelper::FREQUENCY_CODE_MAP.select { |_k,v| v[:low] == frequency[:low] && v[:high] == frequency[:high] && v[:institution_specified] == frequency[:institution_specified] && v[:unit] == frequency[:unit] }.first
|
126
125
|
# If a Direct Reference Code isn't found, return nil
|
127
126
|
return nil unless key
|
128
127
|
# If a Direct Reference Code is found, return that code
|
129
|
-
QDM::Code.new(key,
|
128
|
+
QDM::Code.new(key, value[:code_system])
|
130
129
|
end
|
131
130
|
|
132
131
|
def extract_frequency_in_hours(parent_element, frequency_xpath)
|
133
132
|
# Need to go get low, high and institutionspecified
|
134
|
-
low = parent_element.at_xpath("#{frequency_xpath}/@value").value if parent_element.at_xpath("#{frequency_xpath}/@value")
|
135
|
-
low = parent_element.at_xpath("#{frequency_xpath}/cda:period/cda:low/@value").value if parent_element.at_xpath("#{frequency_xpath}/cda:period/cda:low/@value")
|
133
|
+
low = parent_element.at_xpath("#{frequency_xpath}/@value").value.to_i if parent_element.at_xpath("#{frequency_xpath}/@value")
|
134
|
+
low = parent_element.at_xpath("#{frequency_xpath}/cda:period/cda:low/@value").value.to_i if parent_element.at_xpath("#{frequency_xpath}/cda:period/cda:low/@value")
|
136
135
|
unit = parent_element.at_xpath("#{frequency_xpath}/@unit").value if parent_element.at_xpath("#{frequency_xpath}/@unit")
|
137
136
|
unit = parent_element.at_xpath("#{frequency_xpath}/cda:period/cda:low/@unit").value if parent_element.at_xpath("#{frequency_xpath}/cda:period/cda:low/@unit")
|
138
|
-
high = parent_element.at_xpath("#{frequency_xpath}/cda:period/cda:high/@value").value if parent_element.at_xpath("#{frequency_xpath}/cda:period/cda:high/@value")
|
137
|
+
high = parent_element.at_xpath("#{frequency_xpath}/cda:period/cda:high/@value").value.to_i if parent_element.at_xpath("#{frequency_xpath}/cda:period/cda:high/@value")
|
139
138
|
institution_specified = parent_element.at_xpath("#{frequency_xpath}/@institutionSpecified") || false
|
140
139
|
# Expected units are H (hours) and D (days)
|
141
140
|
if unit && unit.upcase == 'D'
|
142
141
|
low = low * 24 if low
|
143
|
-
high = high *
|
142
|
+
high = high * 24 if high
|
143
|
+
unit = 'h'
|
144
144
|
end
|
145
145
|
{ low: low, high: high, unit: unit, institution_specified: institution_specified }
|
146
146
|
end
|
@@ -158,44 +158,48 @@ module QRDA
|
|
158
158
|
|
159
159
|
value = value_element['value']
|
160
160
|
if value.present?
|
161
|
-
return value.strip.
|
161
|
+
return value.strip.to_f if (value_element['unit'] == "1" || value_element['unit'].nil?)
|
162
162
|
|
163
|
-
return QDM::Quantity.new(value.strip.
|
163
|
+
return QDM::Quantity.new(value.strip.to_f, value_element['unit'])
|
164
164
|
elsif value_element['code'].present?
|
165
165
|
return code_if_present(value_element)
|
166
166
|
end
|
167
167
|
end
|
168
168
|
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
coded_parent_element ||= parent_element
|
173
|
-
reason_element = parent_element.xpath(".//cda:entryRelationship[@typeCode='RSON']/cda:observation[cda:templateId/@root='2.16.840.1.113883.10.20.24.3.88']/cda:value | .//cda:entryRelationship[@typeCode='RSON']/cda:act[cda:templateId/@root='2.16.840.1.113883.10.20.1.27']/cda:code")
|
169
|
+
def extract_reason(parent_element)
|
170
|
+
return unless @reason_xpath
|
171
|
+
reason_element = parent_element.xpath(@reason_xpath)
|
174
172
|
negation_indicator = parent_element['negationInd']
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
173
|
+
# Return and do not set reason attribute if the entry is negated
|
174
|
+
return nil if negation_indicator.eql?('true')
|
175
|
+
|
176
|
+
reason_element.blank? ? nil : code_if_present(reason_element.first)
|
177
|
+
end
|
178
|
+
|
179
|
+
def extract_negation(parent_element, entry)
|
180
|
+
negation_element = parent_element.xpath("./cda:entryRelationship[@typeCode='RSON']/cda:observation[cda:templateId/@root='2.16.840.1.113883.10.20.24.3.88']/cda:value")
|
181
|
+
negation_indicator = parent_element['negationInd']
|
182
|
+
# Return and do not set negationRationale attribute if the entry is not negated
|
183
|
+
return unless negation_indicator.eql?('true')
|
184
|
+
|
185
|
+
entry.negationRationale = code_if_present(negation_element.first) unless negation_element.blank?
|
186
|
+
extract_negated_code(parent_element, entry)
|
183
187
|
end
|
184
188
|
|
185
|
-
def extract_negated_code(
|
186
|
-
code_elements =
|
189
|
+
def extract_negated_code(parent_element, entry)
|
190
|
+
code_elements = parent_element.xpath(@code_xpath)
|
187
191
|
code_elements.each do |code_element|
|
188
192
|
if code_element['nullFlavor'] == 'NA' && code_element['sdtc:valueSet']
|
189
|
-
entry.dataElementCodes = [{ code: code_element['sdtc:valueSet'],
|
193
|
+
entry.dataElementCodes = [{ code: code_element['sdtc:valueSet'], codeSystemOid: '1.2.3.4.5.6.7.8.9.10' }]
|
190
194
|
end
|
191
195
|
end
|
192
196
|
end
|
193
197
|
|
194
198
|
def extract_scalar(parent_element, scalar_xpath)
|
195
199
|
scalar_element = parent_element.at_xpath(scalar_xpath)
|
196
|
-
return unless scalar_element
|
200
|
+
return unless scalar_element && scalar_element['value'].present?
|
197
201
|
|
198
|
-
QDM::Quantity.new(scalar_element['value'].
|
202
|
+
QDM::Quantity.new(scalar_element['value'].to_f, scalar_element['unit'])
|
199
203
|
end
|
200
204
|
|
201
205
|
def extract_components(parent_element)
|
@@ -6,11 +6,13 @@ module QRDA
|
|
6
6
|
@id_xpath = './cda:id'
|
7
7
|
@code_xpath = './cda:code'
|
8
8
|
@author_datetime_xpath = "./cda:author/cda:time"
|
9
|
+
@reason_xpath = "./cda:entryRelationship[@typeCode='RSON']/cda:observation[cda:templateId/@root='2.16.840.1.113883.10.20.24.3.88']/cda:value"
|
9
10
|
@entry_class = QDM::AssessmentOrder
|
10
11
|
end
|
11
12
|
|
12
13
|
def create_entry(entry_element, nrh = NarrativeReferenceHandler.new)
|
13
14
|
assessment_order = super
|
15
|
+
assessment_order.reason = extract_reason(entry_element)
|
14
16
|
assessment_order
|
15
17
|
end
|
16
18
|
|
@@ -9,6 +9,7 @@ module QRDA
|
|
9
9
|
@result_xpath = "./cda:value"
|
10
10
|
@method_xpath = './cda:methodCode'
|
11
11
|
@components_xpath = "./cda:entryRelationship/cda:observation[cda:templateId/@root = '2.16.840.1.113883.10.20.24.3.149']"
|
12
|
+
@reason_xpath = "./cda:entryRelationship[@typeCode='RSON']/cda:observation[cda:templateId/@root='2.16.840.1.113883.10.20.24.3.88']/cda:value"
|
12
13
|
@entry_class = QDM::AssessmentPerformed
|
13
14
|
end
|
14
15
|
|
@@ -16,6 +17,7 @@ module QRDA
|
|
16
17
|
assessment_performed = super
|
17
18
|
assessment_performed.method = code_if_present(entry_element.at_xpath(@method_xpath))
|
18
19
|
assessment_performed.components = extract_components(entry_element)
|
20
|
+
assessment_performed.reason = extract_reason(entry_element)
|
19
21
|
assessment_performed
|
20
22
|
end
|
21
23
|
|
@@ -6,11 +6,13 @@ module QRDA
|
|
6
6
|
@id_xpath = './cda:id'
|
7
7
|
@code_xpath = './cda:code'
|
8
8
|
@author_datetime_xpath = "./cda:author/cda:time"
|
9
|
+
@reason_xpath = "./cda:entryRelationship[@typeCode='RSON']/cda:observation[cda:templateId/@root='2.16.840.1.113883.10.20.24.3.88']/cda:value"
|
9
10
|
@entry_class = QDM::AssessmentRecommended
|
10
11
|
end
|
11
12
|
|
12
13
|
def create_entry(entry_element, nrh = NarrativeReferenceHandler.new)
|
13
14
|
assessment_recommended = super
|
15
|
+
assessment_recommended.reason = extract_reason(entry_element)
|
14
16
|
assessment_recommended
|
15
17
|
end
|
16
18
|
|
@@ -3,9 +3,8 @@ module QRDA
|
|
3
3
|
class CommunicationPerformedImporter < SectionImporter
|
4
4
|
def initialize(entry_finder = QRDA::Cat1::EntryFinder.new("./cda:entry/cda:act[cda:templateId/@root = '2.16.840.1.113883.10.20.24.3.156']"))
|
5
5
|
super(entry_finder)
|
6
|
-
@entry_does_not_have_reason = true
|
7
6
|
@id_xpath = './cda:id'
|
8
|
-
@code_xpath = "./cda:entryRelationship/cda:observation[cda:templateId/@root='2.16.840.1.113883.10.20.24.3.88']/cda:value"
|
7
|
+
@code_xpath = "./cda:entryRelationship[@typeCode='REFR']/cda:observation[cda:templateId/@root='2.16.840.1.113883.10.20.24.3.88']/cda:value"
|
9
8
|
@author_datetime_xpath = "./cda:author/cda:time"
|
10
9
|
@relevant_period_xpath = "./cda:effectiveTime"
|
11
10
|
@related_to_xpath = "./sdtc:inFulfillmentOf1/sdtc:actReference"
|
@@ -8,12 +8,14 @@ module QRDA
|
|
8
8
|
@author_datetime_xpath = "./cda:author/cda:time"
|
9
9
|
@relevant_period_xpath = "./cda:effectiveTime"
|
10
10
|
@anatomical_location_site_xpath = "./cda:targetSiteCode"
|
11
|
+
@reason_xpath = "./cda:entryRelationship[@typeCode='RSON']/cda:observation[cda:templateId/@root='2.16.840.1.113883.10.20.24.3.88']/cda:value"
|
11
12
|
@entry_class = QDM::DeviceApplied
|
12
13
|
end
|
13
14
|
|
14
15
|
def create_entry(entry_element, nrh = NarrativeReferenceHandler.new)
|
15
16
|
device_applied = super
|
16
17
|
device_applied.anatomicalLocationSite = code_if_present(entry_element.at_xpath(@anatomical_location_site_xpath))
|
18
|
+
device_applied.reason = extract_reason(entry_element)
|
17
19
|
device_applied
|
18
20
|
end
|
19
21
|
|
@@ -6,11 +6,13 @@ module QRDA
|
|
6
6
|
@id_xpath = "./cda:entryRelationship/cda:supply[cda:templateId/@root = '2.16.840.1.113883.10.20.24.3.9']/cda:id"
|
7
7
|
@code_xpath = "./cda:entryRelationship/cda:supply[cda:templateId/@root = '2.16.840.1.113883.10.20.24.3.9']/cda:participant/cda:participantRole/cda:playingDevice/cda:code"
|
8
8
|
@author_datetime_xpath = "./cda:entryRelationship/cda:supply[cda:templateId/@root = '2.16.840.1.113883.10.20.24.3.9']/cda:author/cda:time"
|
9
|
+
@reason_xpath = "./cda:entryRelationship/cda:supply[cda:templateId/@root = '2.16.840.1.113883.10.20.24.3.9']/cda:entryRelationship[@typeCode='RSON']/cda:observation[cda:templateId/@root='2.16.840.1.113883.10.20.24.3.88']/cda:value"
|
9
10
|
@entry_class = QDM::DeviceOrder
|
10
11
|
end
|
11
12
|
|
12
13
|
def create_entry(entry_element, nrh = NarrativeReferenceHandler.new)
|
13
14
|
device_order = super
|
15
|
+
device_order.reason = extract_reason(entry_element)
|
14
16
|
device_order
|
15
17
|
end
|
16
18
|
|
@@ -6,11 +6,13 @@ module QRDA
|
|
6
6
|
@id_xpath = "./cda:entryRelationship/cda:supply[cda:templateId/@root = '2.16.840.1.113883.10.20.24.3.10']/cda:id"
|
7
7
|
@code_xpath = "./cda:entryRelationship/cda:supply[cda:templateId/@root = '2.16.840.1.113883.10.20.24.3.10']/cda:participant/cda:participantRole/cda:playingDevice/cda:code"
|
8
8
|
@author_datetime_xpath = "./cda:entryRelationship/cda:supply[cda:templateId/@root = '2.16.840.1.113883.10.20.24.3.10']/cda:author/cda:time"
|
9
|
+
@reason_xpath = "./cda:entryRelationship/cda:supply[cda:templateId/@root = '2.16.840.1.113883.10.20.24.3.10']/cda:entryRelationship[@typeCode='RSON']/cda:observation[cda:templateId/@root='2.16.840.1.113883.10.20.24.3.88']/cda:value"
|
9
10
|
@entry_class = QDM::DeviceRecommended
|
10
11
|
end
|
11
12
|
|
12
13
|
def create_entry(entry_element, nrh = NarrativeReferenceHandler.new)
|
13
14
|
device_recommended = super
|
15
|
+
device_recommended.reason = extract_reason(entry_element)
|
14
16
|
device_recommended
|
15
17
|
end
|
16
18
|
|
@@ -6,11 +6,13 @@ module QRDA
|
|
6
6
|
@id_xpath = './cda:id'
|
7
7
|
@code_xpath = './cda:code'
|
8
8
|
@author_datetime_xpath = "./cda:author/cda:time"
|
9
|
+
@reason_xpath = "./cda:entryRelationship[@typeCode='RSON']/cda:observation[cda:templateId/@root='2.16.840.1.113883.10.20.24.3.88']/cda:value"
|
9
10
|
@entry_class = QDM::DiagnosticStudyOrder
|
10
11
|
end
|
11
12
|
|
12
13
|
def create_entry(entry_element, nrh = NarrativeReferenceHandler.new)
|
13
14
|
diagnostic_study_order = super
|
15
|
+
diagnostic_study_order.reason = extract_reason(entry_element)
|
14
16
|
diagnostic_study_order
|
15
17
|
end
|
16
18
|
|
@@ -13,6 +13,7 @@ module QRDA
|
|
13
13
|
@method_xpath = './cda:methodCode'
|
14
14
|
@facility_locations_xpath = "./cda:participant[cda:templateId/@root = '2.16.840.1.113883.10.20.24.3.100']"
|
15
15
|
@components_xpath = "./cda:entryRelationship/cda:observation[cda:templateId/@root = '2.16.840.1.113883.10.20.24.3.149']"
|
16
|
+
@reason_xpath = "./cda:entryRelationship[@typeCode='RSON']/cda:observation[cda:templateId/@root='2.16.840.1.113883.10.20.24.3.88']/cda:value"
|
16
17
|
@entry_class = QDM::DiagnosticStudyPerformed
|
17
18
|
end
|
18
19
|
|
@@ -24,6 +25,7 @@ module QRDA
|
|
24
25
|
diagnostic_study_performed.method = code_if_present(entry_element.at_xpath(@method_xpath))
|
25
26
|
diagnostic_study_performed.facilityLocation = extract_facility_locations(entry_element)[0]
|
26
27
|
diagnostic_study_performed.components = extract_components(entry_element)
|
28
|
+
diagnostic_study_performed.reason = extract_reason(entry_element)
|
27
29
|
diagnostic_study_performed
|
28
30
|
end
|
29
31
|
|
@@ -7,12 +7,14 @@ module QRDA
|
|
7
7
|
@code_xpath = "./cda:entryRelationship/cda:encounter[cda:templateId/@root = '2.16.840.1.113883.10.20.24.3.22']/cda:code"
|
8
8
|
@author_datetime_xpath = "./cda:entryRelationship/cda:encounter[cda:templateId/@root = '2.16.840.1.113883.10.20.24.3.22']/cda:author/cda:time"
|
9
9
|
@facility_locations_xpath = "./cda:entryRelationship/cda:encounter[cda:templateId/@root = '2.16.840.1.113883.10.20.24.3.22']/cda:participant[cda:templateId/@root = '2.16.840.1.113883.10.20.24.3.100']"
|
10
|
+
@reason_xpath = "./cda:entryRelationship/cda:encounter[cda:templateId/@root = '2.16.840.1.113883.10.20.24.3.22']/cda:entryRelationship[@typeCode='RSON']/cda:observation[cda:templateId/@root='2.16.840.1.113883.10.20.24.3.88']/cda:value"
|
10
11
|
@entry_class = QDM::EncounterOrder
|
11
12
|
end
|
12
13
|
|
13
14
|
def create_entry(entry_element, nrh = NarrativeReferenceHandler.new)
|
14
15
|
encounter_order = super
|
15
16
|
encounter_order.facilityLocation = extract_facility_locations(entry_element)[0]
|
17
|
+
encounter_order.reason = extract_reason(entry_element)
|
16
18
|
encounter_order
|
17
19
|
end
|
18
20
|
|
@@ -7,12 +7,14 @@ module QRDA
|
|
7
7
|
@code_xpath = "./cda:entryRelationship/cda:encounter[cda:templateId/@root = '2.16.840.1.113883.10.20.24.3.24']/cda:code"
|
8
8
|
@author_datetime_xpath = "./cda:entryRelationship/cda:encounter[cda:templateId/@root = '2.16.840.1.113883.10.20.24.3.24']/cda:author/cda:time"
|
9
9
|
@facility_locations_xpath = "./cda:entryRelationship/cda:encounter[cda:templateId/@root = '2.16.840.1.113883.10.20.24.3.24']/cda:participant[cda:templateId/@root = '2.16.840.1.113883.10.20.24.3.100']"
|
10
|
+
@reason_xpath = "./cda:entryRelationship/cda:encounter[cda:templateId/@root = '2.16.840.1.113883.10.20.24.3.24']/cda:entryRelationship[@typeCode='RSON']/cda:observation[cda:templateId/@root='2.16.840.1.113883.10.20.24.3.88']/cda:value"
|
10
11
|
@entry_class = QDM::EncounterRecommended
|
11
12
|
end
|
12
13
|
|
13
14
|
def create_entry(entry_element, nrh = NarrativeReferenceHandler.new)
|
14
15
|
encounter_recommended = super
|
15
16
|
encounter_recommended.facilityLocation = extract_facility_locations(entry_element)[0]
|
17
|
+
encounter_recommended.reason = extract_reason(entry_element)
|
16
18
|
encounter_recommended
|
17
19
|
end
|
18
20
|
|
@@ -8,6 +8,7 @@ module QRDA
|
|
8
8
|
@author_datetime_xpath = "./cda:effectiveTime"
|
9
9
|
@dosage_xpath = "./cda:doseQuantity"
|
10
10
|
@route_xpath = "./cda:routeCode"
|
11
|
+
@reason_xpath = "./cda:entryRelationship[@typeCode='RSON']/cda:observation[cda:templateId/@root='2.16.840.1.113883.10.20.24.3.88']/cda:value"
|
11
12
|
@entry_class = QDM::ImmunizationAdministered
|
12
13
|
end
|
13
14
|
|
@@ -15,6 +16,7 @@ module QRDA
|
|
15
16
|
immunization_administered = super
|
16
17
|
immunization_administered.dosage = extract_scalar(entry_element, @dosage_xpath)
|
17
18
|
immunization_administered.route = code_if_present(entry_element.at_xpath(@route_xpath))
|
19
|
+
immunization_administered.reason = extract_reason(entry_element)
|
18
20
|
immunization_administered
|
19
21
|
end
|
20
22
|
|
@@ -10,6 +10,7 @@ module QRDA
|
|
10
10
|
@dosage_xpath = "./cda:doseQuantity"
|
11
11
|
@supply_xpath = "./cda:entryRelationship/cda:supply[cda:templateId/@root = '2.16.840.1.113883.10.20.24.3.99']/cda:quantity"
|
12
12
|
@route_xpath = "./cda:routeCode"
|
13
|
+
@reason_xpath = "./cda:entryRelationship[@typeCode='RSON']/cda:observation[cda:templateId/@root='2.16.840.1.113883.10.20.24.3.88']/cda:value"
|
13
14
|
@entry_class = QDM::ImmunizationOrder
|
14
15
|
end
|
15
16
|
|
@@ -19,6 +20,7 @@ module QRDA
|
|
19
20
|
immunization_order.dosage = extract_scalar(entry_element, @dosage_xpath)
|
20
21
|
immunization_order.supply = extract_scalar(entry_element, @supply_xpath)
|
21
22
|
immunization_order.route = code_if_present(entry_element.at_xpath(@route_xpath))
|
23
|
+
immunization_order.reason = extract_reason(entry_element)
|
22
24
|
immunization_order
|
23
25
|
end
|
24
26
|
|
@@ -6,11 +6,13 @@ module QRDA
|
|
6
6
|
@id_xpath = './cda:id'
|
7
7
|
@code_xpath = './cda:code'
|
8
8
|
@author_datetime_xpath = "./cda:author/cda:time"
|
9
|
+
@reason_xpath = "./cda:entryRelationship[@typeCode='RSON']/cda:observation[cda:templateId/@root='2.16.840.1.113883.10.20.24.3.88']/cda:value"
|
9
10
|
@entry_class = QDM::InterventionOrder
|
10
11
|
end
|
11
12
|
|
12
13
|
def create_entry(entry_element, nrh = NarrativeReferenceHandler.new)
|
13
14
|
intervention_order = super
|
15
|
+
intervention_order.reason = extract_reason(entry_element)
|
14
16
|
intervention_order
|
15
17
|
end
|
16
18
|
|
@@ -9,12 +9,14 @@ module QRDA
|
|
9
9
|
@author_datetime_xpath = "./cda:author/cda:time"
|
10
10
|
@result_xpath = "./cda:entryRelationship/cda:observation[cda:templateId/@root = '2.16.840.1.113883.10.20.22.4.2']/cda:value"
|
11
11
|
@status_xpath = "./cda:entryRelationship/cda:observation[cda:templateId/@root = '2.16.840.1.113883.10.20.24.3.93']/cda:value"
|
12
|
+
@reason_xpath = "./cda:entryRelationship[@typeCode='RSON']/cda:observation[cda:templateId/@root='2.16.840.1.113883.10.20.24.3.88']/cda:value"
|
12
13
|
@entry_class = QDM::InterventionPerformed
|
13
14
|
end
|
14
15
|
|
15
16
|
def create_entry(entry_element, nrh = NarrativeReferenceHandler.new)
|
16
17
|
intervention_performed = super
|
17
18
|
intervention_performed.status = code_if_present(entry_element.at_xpath(@status_xpath))
|
19
|
+
intervention_performed.reason = extract_reason(entry_element)
|
18
20
|
intervention_performed
|
19
21
|
end
|
20
22
|
|
@@ -6,11 +6,13 @@ module QRDA
|
|
6
6
|
@id_xpath = './cda:id'
|
7
7
|
@code_xpath = './cda:code'
|
8
8
|
@author_datetime_xpath = "./cda:author/cda:time"
|
9
|
+
@reason_xpath = "./cda:entryRelationship[@typeCode='RSON']/cda:observation[cda:templateId/@root='2.16.840.1.113883.10.20.24.3.88']/cda:value"
|
9
10
|
@entry_class = QDM::InterventionRecommended
|
10
11
|
end
|
11
12
|
|
12
13
|
def create_entry(entry_element, nrh = NarrativeReferenceHandler.new)
|
13
14
|
intervention_recommended = super
|
15
|
+
intervention_recommended.reason = extract_reason(entry_element)
|
14
16
|
intervention_recommended
|
15
17
|
end
|
16
18
|
|
@@ -6,11 +6,13 @@ module QRDA
|
|
6
6
|
@id_xpath = './cda:id'
|
7
7
|
@code_xpath = './cda:code'
|
8
8
|
@author_datetime_xpath = "./cda:author/cda:time"
|
9
|
+
@reason_xpath = "./cda:entryRelationship[@typeCode='RSON']/cda:observation[cda:templateId/@root='2.16.840.1.113883.10.20.24.3.88']/cda:value"
|
9
10
|
@entry_class = QDM::LaboratoryTestOrder
|
10
11
|
end
|
11
12
|
|
12
13
|
def create_entry(entry_element, nrh = NarrativeReferenceHandler.new)
|
13
14
|
laboratory_test_order = super
|
15
|
+
laboratory_test_order.reason = extract_reason(entry_element)
|
14
16
|
laboratory_test_order
|
15
17
|
end
|
16
18
|
|
@@ -12,6 +12,7 @@ module QRDA
|
|
12
12
|
@result_xpath = "./cda:entryRelationship/cda:observation[cda:templateId/@root = '2.16.840.1.113883.10.20.22.4.2']/cda:value"
|
13
13
|
@result_datetime_xpath = "./cda:entryRelationship[@typeCode='REFR']/cda:observation/cda:effectiveTime"
|
14
14
|
@components_xpath = "./cda:entryRelationship/cda:observation[cda:templateId/@root = '2.16.840.1.113883.10.20.24.3.149']"
|
15
|
+
@reason_xpath = "./cda:entryRelationship[@typeCode='RSON']/cda:observation[cda:templateId/@root='2.16.840.1.113883.10.20.24.3.88']/cda:value"
|
15
16
|
@entry_class = QDM::LaboratoryTestPerformed
|
16
17
|
end
|
17
18
|
|
@@ -21,6 +22,7 @@ module QRDA
|
|
21
22
|
laboratory_test_performed.method = code_if_present(entry_element.at_xpath(@method_xpath))
|
22
23
|
laboratory_test_performed.resultDatetime = extract_time(entry_element, @result_datetime_xpath)
|
23
24
|
laboratory_test_performed.components = extract_components(entry_element)
|
25
|
+
laboratory_test_performed.reason = extract_reason(entry_element)
|
24
26
|
laboratory_test_performed
|
25
27
|
end
|
26
28
|
|
@@ -6,11 +6,13 @@ module QRDA
|
|
6
6
|
@id_xpath = './cda:id'
|
7
7
|
@code_xpath = './cda:code'
|
8
8
|
@author_datetime_xpath = "./cda:author/cda:time"
|
9
|
+
@reason_xpath = "./cda:entryRelationship[@typeCode='RSON']/cda:observation[cda:templateId/@root='2.16.840.1.113883.10.20.24.3.88']/cda:value"
|
9
10
|
@entry_class = QDM::LaboratoryTestRecommended
|
10
11
|
end
|
11
12
|
|
12
13
|
def create_entry(entry_element, nrh = NarrativeReferenceHandler.new)
|
13
14
|
laboratory_test_recommended = super
|
15
|
+
laboratory_test_recommended.reason = extract_reason(entry_element)
|
14
16
|
laboratory_test_recommended
|
15
17
|
end
|
16
18
|
|