cqm-converter 0.3.2 → 0.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/cqm-converter.gemspec +1 -1
- data/lib/cqm/converter/hds_record.rb +17 -2
- data/lib/cqm/converter/qdm_patient.rb +28 -11
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: b9bf0ffa8c1e7ccaee1c1e195bd7496c68478816
|
|
4
|
+
data.tar.gz: b3a1e58694bd32ad2ec739f209a977ea5debd746
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c9bca3f3ff73d4af8ca2500427a74bcee811e8c913583832920ecf894d07c4c9e2e83b5e321f719dd8f45d65a6671e30f5447f7d51469960918ccdabb0dae0fb
|
|
7
|
+
data.tar.gz: cd0c029021db2240019391ab35d4681e04fd3255ec7b21c4fcba10966eec871db1b30d5af88afe86b436a2855d7dbb7b4e91a98556f41ef877b68d7cf776fedc
|
data/cqm-converter.gemspec
CHANGED
|
@@ -43,7 +43,7 @@ module CQM::Converter
|
|
|
43
43
|
cql_qdm_patient.keys.each do |dc_type|
|
|
44
44
|
cql_qdm_patient[dc_type].each do |dc|
|
|
45
45
|
# Convert snake_case to camelCase
|
|
46
|
-
dc_fixed_keys = dc.deep_transform_keys { |key| key.to_s.camelize(:lower) }
|
|
46
|
+
dc_fixed_keys = dc.deep_transform_keys { |key| key.to_s.gsub(/^_/, '').camelize(:lower) }
|
|
47
47
|
|
|
48
48
|
# Our Code model uses 'codeSystem' to describe the code system (since system is
|
|
49
49
|
# a reserved keyword). The cql.Code calls this 'system', so make sure the proper
|
|
@@ -51,7 +51,7 @@ module CQM::Converter
|
|
|
51
51
|
dc_fixed_keys = dc_fixed_keys.deep_transform_keys { |key| key.to_s == 'system' ? :codeSystem : key }
|
|
52
52
|
dc_fixed_keys = dc_fixed_keys.deep_transform_keys { |key| key.to_s == 'display' ? :descriptor : key }
|
|
53
53
|
|
|
54
|
-
patient.dataElements <<
|
|
54
|
+
patient.dataElements << generate_qdm_data_element(dc_fixed_keys, dc_type)
|
|
55
55
|
end
|
|
56
56
|
end
|
|
57
57
|
|
|
@@ -125,5 +125,20 @@ module CQM::Converter
|
|
|
125
125
|
|
|
126
126
|
patient
|
|
127
127
|
end
|
|
128
|
+
|
|
129
|
+
def generate_qdm_data_element(dc_fixed_keys, dc_type)
|
|
130
|
+
data_element = QDM.const_get(dc_type).new.from_json(dc_fixed_keys.to_json)
|
|
131
|
+
|
|
132
|
+
# Any nested QDM types that need initialization should be handled here
|
|
133
|
+
# when converting from the QDM models to the HDS models.
|
|
134
|
+
# For now, that should just be FacilityLocation objects
|
|
135
|
+
if data_element.is_a?(QDM::EncounterPerformed)
|
|
136
|
+
data_element.facilityLocations = data_element.facilityLocations.map do |facility|
|
|
137
|
+
QDM::FacilityLocation.new.from_json(facility.to_json)
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
data_element
|
|
142
|
+
end
|
|
128
143
|
end
|
|
129
144
|
end
|
|
@@ -62,7 +62,7 @@ module CQM::Converter
|
|
|
62
62
|
# Handle something that has multiple parts.
|
|
63
63
|
hds_attrs[hds_attr[:low]] = extracted_value.first
|
|
64
64
|
hds_attrs[hds_attr[:high]] = extracted_value.last if hds_attr[:high]
|
|
65
|
-
elsif extracted_value.is_a?(Array) && extracted_value.any? && extracted_value.first.is_a?(Hash) && extracted_value.first[:code]
|
|
65
|
+
elsif extracted_value.is_a?(Array) && extracted_value.any? && extracted_value.first.is_a?(Hash) && extracted_value.first[:code] && hds_attr != 'facility' && hds_attr != 'components'
|
|
66
66
|
# Handle a result that is returning multiple codes.
|
|
67
67
|
hds_attrs[hds_attr] = [CodedResultValue.new(codes: Utils.qdm_codes_to_hds_codes(extracted_value), description: extracted_value.first[:title])]
|
|
68
68
|
elsif extracted_value.is_a?(Array)
|
|
@@ -139,15 +139,19 @@ module CQM::Converter
|
|
|
139
139
|
date_time_converter(qdm_thing)
|
|
140
140
|
elsif qdm_thing.is_a?(Hash) && keys.include?(:low) # Is a QDM::Interval.
|
|
141
141
|
interval_extractor(qdm_thing.symbolize_keys)
|
|
142
|
+
elsif qdm_thing.is_a?(Hash) && keys.include?(:locationPeriod)
|
|
143
|
+
location_extractor(qdm_thing.symbolize_keys)
|
|
144
|
+
elsif qdm_thing.is_a?(Hash) && keys.include?(:result) # is a QDM::CodedResultValue
|
|
145
|
+
component_extractor(qdm_thing.symbolize_keys)
|
|
142
146
|
elsif qdm_thing.is_a?(Hash) && keys.include?(:code) # Is a QDM::Code.
|
|
143
147
|
code_extractor(qdm_thing.symbolize_keys)
|
|
144
148
|
elsif qdm_thing.is_a?(Hash) && keys.include?(:unit) # Is a QDM::Quantity.
|
|
145
149
|
quantity_extractor(qdm_thing.symbolize_keys)
|
|
146
150
|
elsif qdm_thing.is_a?(Array) # Is an Array.
|
|
147
151
|
qdm_thing.collect { |item| extractor(item) }
|
|
148
|
-
elsif qdm_thing.is_a?(Numeric) # Is
|
|
152
|
+
elsif qdm_thing.is_a?(Numeric) # Is a Number.
|
|
149
153
|
{ units: '', scalar: qdm_thing.to_s }
|
|
150
|
-
elsif qdm_thing.is_a?(String) # Is
|
|
154
|
+
elsif qdm_thing.is_a?(String) # Is a String.
|
|
151
155
|
qdm_thing
|
|
152
156
|
elsif qdm_thing.is_a?(Hash)
|
|
153
157
|
qdm_thing.each { |k, v| qdm_thing[k] = extractor(v) }
|
|
@@ -156,6 +160,15 @@ module CQM::Converter
|
|
|
156
160
|
end
|
|
157
161
|
end
|
|
158
162
|
|
|
163
|
+
def location_extractor(facility)
|
|
164
|
+
interval = interval_extractor(facility[:locationPeriod].as_json.symbolize_keys)
|
|
165
|
+
{ 'code' => code_extractor(facility[:code].as_json.symbolize_keys), 'locationPeriod' => interval }
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
def component_extractor(component)
|
|
169
|
+
{ code: code_extractor(component[:code].symbolize_keys), result: code_extractor(component[:result].symbolize_keys) }
|
|
170
|
+
end
|
|
171
|
+
|
|
159
172
|
# Extract a QDM::Code to something usable in HDS.
|
|
160
173
|
def code_extractor(code)
|
|
161
174
|
{ code: code[:code], code_system: code[:codeSystem], title: code[:descriptor] }
|
|
@@ -216,10 +229,14 @@ module CQM::Converter
|
|
|
216
229
|
return unless hds_attrs.key?('components') && !hds_attrs['components'].nil?
|
|
217
230
|
hds_attrs['components']['type'] = 'COL'
|
|
218
231
|
hds_attrs['components'][:values]&.collect do |code_value|
|
|
219
|
-
code_value[
|
|
220
|
-
code_value[
|
|
221
|
-
|
|
222
|
-
|
|
232
|
+
code_value[:code] = code_value.delete('Code') if code_value.key?('Code')
|
|
233
|
+
code_value[:result] = if code_value.key?('Result')
|
|
234
|
+
{ code: code_value.delete('Result'), title: code_value['code'][:title] }
|
|
235
|
+
else
|
|
236
|
+
{ code: code_value.delete(:result), title: code_value[:code][:title] }
|
|
237
|
+
end
|
|
238
|
+
code_value[:code].delete(:title)
|
|
239
|
+
code_value[:result][:code].delete(:title)
|
|
223
240
|
{ code: code_value }
|
|
224
241
|
end
|
|
225
242
|
end
|
|
@@ -250,11 +267,11 @@ module CQM::Converter
|
|
|
250
267
|
return unless hds_attrs.key?('facility') && !hds_attrs['facility'].empty?
|
|
251
268
|
hds_attrs['facility']['type'] = 'COL'
|
|
252
269
|
hds_attrs['facility'][:values]&.each do |value|
|
|
253
|
-
value['code'] = value.delete('Code')
|
|
270
|
+
value['code'] = value.delete('Code') if value['Code']
|
|
254
271
|
value[:display] = value['code'].delete(:title) if value['code']
|
|
255
|
-
value[:locationPeriodHigh] = Time.at(value['
|
|
256
|
-
value[:locationPeriodLow] = Time.at(value['
|
|
257
|
-
value.delete('
|
|
272
|
+
value[:locationPeriodHigh] = Time.at(value['locationPeriod'].last).utc.strftime('%m/%d/%Y %l:%M %p').split.join(' ')
|
|
273
|
+
value[:locationPeriodLow] = Time.at(value['locationPeriod'].first).utc.strftime('%m/%d/%Y %l:%M %p').split.join(' ')
|
|
274
|
+
value.delete('locationPeriod')
|
|
258
275
|
end
|
|
259
276
|
end
|
|
260
277
|
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: cqm-converter
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.3.
|
|
4
|
+
version: 0.3.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- aholmes@mitre.org
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2018-
|
|
11
|
+
date: 2018-06-18 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activesupport
|
|
@@ -223,7 +223,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
223
223
|
version: '0'
|
|
224
224
|
requirements: []
|
|
225
225
|
rubyforge_project:
|
|
226
|
-
rubygems_version: 2.
|
|
226
|
+
rubygems_version: 2.6.11
|
|
227
227
|
signing_key:
|
|
228
228
|
specification_version: 4
|
|
229
229
|
summary: HDS <=> QDM Model Converter
|