health-data-standards 3.0.6 → 3.1.0
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.
- data/README.md +3 -1
- data/Rakefile +2 -0
- data/lib/health-data-standards.rb +10 -0
- data/lib/health-data-standards/export/cat_3.rb +24 -0
- data/lib/health-data-standards/export/html.rb +2 -1
- data/lib/health-data-standards/import/bundle/importer.rb +178 -146
- data/lib/health-data-standards/import/cat1/diagnosis_active_importer.rb +0 -5
- data/lib/health-data-standards/import/cat1/diagnosis_inactive_importer.rb +1 -6
- data/lib/health-data-standards/import/cat1/diagnostic_study_order_importer.rb +0 -4
- data/lib/health-data-standards/import/cat1/ecog_status_importer.rb +12 -0
- data/lib/health-data-standards/import/cat1/encounter_order_importer.rb +0 -5
- data/lib/health-data-standards/import/cat1/lab_order_importer.rb +1 -5
- data/lib/health-data-standards/import/cat1/lab_result_importer.rb +18 -0
- data/lib/health-data-standards/import/cat1/medication_active_importer.rb +27 -0
- data/lib/health-data-standards/import/cat1/patient_importer.rb +54 -46
- data/lib/health-data-standards/import/cat1/procedure_performed_importer.rb +28 -0
- data/lib/health-data-standards/import/cat1/symptom_active_importer.rb +12 -0
- data/lib/health-data-standards/import/cda/condition_importer.rb +2 -0
- data/lib/health-data-standards/import/cda/encounter_importer.rb +6 -0
- data/lib/health-data-standards/import/cda/procedure_importer.rb +1 -0
- data/lib/health-data-standards/import/cda/section_importer.rb +27 -5
- data/lib/health-data-standards/models/cda_identifier.rb +17 -0
- data/lib/health-data-standards/models/cqm/aggregate_objects.rb +92 -0
- data/lib/health-data-standards/models/cqm/measure.rb +51 -30
- data/lib/health-data-standards/models/cqm/query_cache.rb +64 -0
- data/lib/health-data-standards/models/entry.rb +1 -1
- data/lib/health-data-standards/models/record.rb +28 -3
- data/lib/health-data-standards/models/svs/value_set.rb +20 -0
- data/lib/health-data-standards/tasks/bundle.rake +18 -8
- data/lib/health-data-standards/util/hqmf_template_helper.rb +6 -2
- data/lib/health-data-standards/util/hqmf_template_oid_map.json +4 -0
- data/lib/health-data-standards/util/vs_api.rb +9 -6
- data/lib/hqmf-model/data_criteria.json +10 -10
- data/lib/hqmf-parser.rb +0 -2
- data/lib/hqmf-parser/1.0/range.rb +21 -9
- data/templates/c32/show.c32.erb +1 -1
- data/templates/cat1/_2.16.840.1.113883.10.20.24.3.4.cat1.erb +1 -0
- data/templates/cat1/_2.16.840.1.113883.10.20.24.3.40.cat1.erb +2 -1
- data/templates/cat1/_2.16.840.1.113883.10.20.24.3.44.cat1.erb +1 -0
- data/templates/cat1/_2.16.840.1.113883.10.20.24.3.46.cat1.erb +1 -1
- data/templates/cat1/_2.16.840.1.113883.10.20.24.3.54.cat1.erb +16 -1
- data/templates/cat1/_2.16.840.1.113883.10.20.24.3.62.cat1.erb +1 -1
- data/templates/cat1/_2.16.840.1.113883.10.20.24.3.69.cat1.erb +7 -2
- data/templates/cat1/_2.16.840.1.113883.10.20.24.3.76.cat1.erb +2 -1
- data/templates/cat1/_medication_details.cat1.erb +4 -4
- data/templates/cat1/_record_target.cat1.erb +2 -2
- data/templates/cat1/_result_value.cat1.erb +1 -1
- data/templates/cat1/show.cat1.erb +2 -2
- data/templates/cat3/_continuous_variable_value.cat3.erb +20 -0
- data/templates/cat3/_measure_data.cat3.erb +126 -0
- data/templates/cat3/_performance_rate.cat3.erb +16 -0
- data/templates/cat3/_supplemental_data.cat3.erb +36 -0
- data/templates/cat3/show.cat3.erb +157 -0
- data/templates/ccda/show.ccda.erb +1 -1
- metadata +25 -45
- data/lib/hqmf-parser/value_sets/value_set_parser.rb +0 -241
@@ -4,7 +4,7 @@
|
|
4
4
|
<typeId root="2.16.840.1.113883.1.3" extension="POCD_HD000040"/>
|
5
5
|
<templateId root="2.16.840.1.113883.10.20.22.1.1" />
|
6
6
|
<templateId root='2.16.840.1.113883.10.20.22.1.2'/>
|
7
|
-
<id root="2.16.840.1.113883.
|
7
|
+
<id root="2.16.840.1.113883.19.5" extension="<%= patient.id %>" assigningAuthorityName="Cypress Project"/>
|
8
8
|
<code code="34133-9" displayName="Summarization of episode note" codeSystem="2.16.840.1.113883.6.1" codeSystemName="LOINC"/>
|
9
9
|
<title>Cypress C32 Patient Test Record: <%= patient.first %> <%= patient.last %></title>
|
10
10
|
<effectiveTime value="<%= Time.now.utc.to_formatted_s(:number) %>"/>
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: health-data-standards
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0
|
4
|
+
version: 3.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ authors:
|
|
13
13
|
autorequire:
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
|
-
date: 2013-
|
16
|
+
date: 2013-04-22 00:00:00.000000000 Z
|
17
17
|
dependencies:
|
18
18
|
- !ruby/object:Gem::Dependency
|
19
19
|
name: rest-client
|
@@ -144,61 +144,29 @@ dependencies:
|
|
144
144
|
- !ruby/object:Gem::Version
|
145
145
|
version: '0'
|
146
146
|
- !ruby/object:Gem::Dependency
|
147
|
-
name:
|
148
|
-
requirement: !ruby/object:Gem::Requirement
|
149
|
-
none: false
|
150
|
-
requirements:
|
151
|
-
- - '='
|
152
|
-
- !ruby/object:Gem::Version
|
153
|
-
version: 0.6.8
|
154
|
-
type: :runtime
|
155
|
-
prerelease: false
|
156
|
-
version_requirements: !ruby/object:Gem::Requirement
|
157
|
-
none: false
|
158
|
-
requirements:
|
159
|
-
- - '='
|
160
|
-
- !ruby/object:Gem::Version
|
161
|
-
version: 0.6.8
|
162
|
-
- !ruby/object:Gem::Dependency
|
163
|
-
name: google-spreadsheet-ruby
|
164
|
-
requirement: !ruby/object:Gem::Requirement
|
165
|
-
none: false
|
166
|
-
requirements:
|
167
|
-
- - '='
|
168
|
-
- !ruby/object:Gem::Version
|
169
|
-
version: 0.1.8
|
170
|
-
type: :runtime
|
171
|
-
prerelease: false
|
172
|
-
version_requirements: !ruby/object:Gem::Requirement
|
173
|
-
none: false
|
174
|
-
requirements:
|
175
|
-
- - '='
|
176
|
-
- !ruby/object:Gem::Version
|
177
|
-
version: 0.1.8
|
178
|
-
- !ruby/object:Gem::Dependency
|
179
|
-
name: roo
|
147
|
+
name: log4r
|
180
148
|
requirement: !ruby/object:Gem::Requirement
|
181
149
|
none: false
|
182
150
|
requirements:
|
183
|
-
- -
|
151
|
+
- - ~>
|
184
152
|
- !ruby/object:Gem::Version
|
185
|
-
version: 1.10
|
153
|
+
version: 1.1.10
|
186
154
|
type: :runtime
|
187
155
|
prerelease: false
|
188
156
|
version_requirements: !ruby/object:Gem::Requirement
|
189
157
|
none: false
|
190
158
|
requirements:
|
191
|
-
- -
|
159
|
+
- - ~>
|
192
160
|
- !ruby/object:Gem::Version
|
193
|
-
version: 1.10
|
161
|
+
version: 1.1.10
|
194
162
|
- !ruby/object:Gem::Dependency
|
195
|
-
name:
|
163
|
+
name: memoist
|
196
164
|
requirement: !ruby/object:Gem::Requirement
|
197
165
|
none: false
|
198
166
|
requirements:
|
199
167
|
- - ~>
|
200
168
|
- !ruby/object:Gem::Version
|
201
|
-
version:
|
169
|
+
version: 0.9.0
|
202
170
|
type: :runtime
|
203
171
|
prerelease: false
|
204
172
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -206,7 +174,7 @@ dependencies:
|
|
206
174
|
requirements:
|
207
175
|
- - ~>
|
208
176
|
- !ruby/object:Gem::Version
|
209
|
-
version:
|
177
|
+
version: 0.9.0
|
210
178
|
description: A library for generating and consuming various healthcare related formats.
|
211
179
|
This includes HITSP C32, ASTM CCR and PQRI.
|
212
180
|
email: talk@projectpophealth.org
|
@@ -216,6 +184,7 @@ extra_rdoc_files: []
|
|
216
184
|
files:
|
217
185
|
- lib/health-data-standards/export/c32.rb
|
218
186
|
- lib/health-data-standards/export/cat_1.rb
|
187
|
+
- lib/health-data-standards/export/cat_3.rb
|
219
188
|
- lib/health-data-standards/export/ccda.rb
|
220
189
|
- lib/health-data-standards/export/ccr.rb
|
221
190
|
- lib/health-data-standards/export/csv.rb
|
@@ -242,14 +211,19 @@ files:
|
|
242
211
|
- lib/health-data-standards/import/cat1/diagnosis_active_importer.rb
|
243
212
|
- lib/health-data-standards/import/cat1/diagnosis_inactive_importer.rb
|
244
213
|
- lib/health-data-standards/import/cat1/diagnostic_study_order_importer.rb
|
214
|
+
- lib/health-data-standards/import/cat1/ecog_status_importer.rb
|
245
215
|
- lib/health-data-standards/import/cat1/encounter_order_importer.rb
|
246
216
|
- lib/health-data-standards/import/cat1/entry_package.rb
|
247
217
|
- lib/health-data-standards/import/cat1/gestational_age_importer.rb
|
248
218
|
- lib/health-data-standards/import/cat1/lab_order_importer.rb
|
219
|
+
- lib/health-data-standards/import/cat1/lab_result_importer.rb
|
220
|
+
- lib/health-data-standards/import/cat1/medication_active_importer.rb
|
249
221
|
- lib/health-data-standards/import/cat1/medication_dispensed_importer.rb
|
250
222
|
- lib/health-data-standards/import/cat1/patient_importer.rb
|
251
223
|
- lib/health-data-standards/import/cat1/procedure_intolerance_importer.rb
|
252
224
|
- lib/health-data-standards/import/cat1/procedure_order_importer.rb
|
225
|
+
- lib/health-data-standards/import/cat1/procedure_performed_importer.rb
|
226
|
+
- lib/health-data-standards/import/cat1/symptom_active_importer.rb
|
253
227
|
- lib/health-data-standards/import/cat1/tobacco_use_importer.rb
|
254
228
|
- lib/health-data-standards/import/ccda/allergy_importer.rb
|
255
229
|
- lib/health-data-standards/import/ccda/care_goal_importer.rb
|
@@ -302,10 +276,13 @@ files:
|
|
302
276
|
- lib/health-data-standards/import/provider_import_utils.rb
|
303
277
|
- lib/health-data-standards/models/address.rb
|
304
278
|
- lib/health-data-standards/models/allergy.rb
|
279
|
+
- lib/health-data-standards/models/cda_identifier.rb
|
305
280
|
- lib/health-data-standards/models/coded_result_value.rb
|
306
281
|
- lib/health-data-standards/models/condition.rb
|
282
|
+
- lib/health-data-standards/models/cqm/aggregate_objects.rb
|
307
283
|
- lib/health-data-standards/models/cqm/bundle.rb
|
308
284
|
- lib/health-data-standards/models/cqm/measure.rb
|
285
|
+
- lib/health-data-standards/models/cqm/query_cache.rb
|
309
286
|
- lib/health-data-standards/models/encounter.rb
|
310
287
|
- lib/health-data-standards/models/entry.rb
|
311
288
|
- lib/health-data-standards/models/facility.rb
|
@@ -383,7 +360,6 @@ files:
|
|
383
360
|
- lib/hqmf-parser/converter/pass2/comparison_converter.rb
|
384
361
|
- lib/hqmf-parser/converter/pass2/operator_converter.rb
|
385
362
|
- lib/hqmf-parser/parser.rb
|
386
|
-
- lib/hqmf-parser/value_sets/value_set_parser.rb
|
387
363
|
- lib/hqmf-parser.rb
|
388
364
|
- lib/util/counter.rb
|
389
365
|
- templates/_pedigree.hdata.erb
|
@@ -456,6 +432,11 @@ files:
|
|
456
432
|
- templates/cat1/_reporting_parameters.cat1.erb
|
457
433
|
- templates/cat1/_result_value.cat1.erb
|
458
434
|
- templates/cat1/show.cat1.erb
|
435
|
+
- templates/cat3/_continuous_variable_value.cat3.erb
|
436
|
+
- templates/cat3/_measure_data.cat3.erb
|
437
|
+
- templates/cat3/_performance_rate.cat3.erb
|
438
|
+
- templates/cat3/_supplemental_data.cat3.erb
|
439
|
+
- templates/cat3/show.cat3.erb
|
459
440
|
- templates/ccda/_allergies.ccda.erb
|
460
441
|
- templates/ccda/_allergies_no_current.ccda.erb
|
461
442
|
- templates/ccda/_care_goals.ccda.erb
|
@@ -559,9 +540,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
559
540
|
version: '0'
|
560
541
|
requirements: []
|
561
542
|
rubyforge_project:
|
562
|
-
rubygems_version: 1.8.
|
543
|
+
rubygems_version: 1.8.25
|
563
544
|
signing_key:
|
564
545
|
specification_version: 3
|
565
546
|
summary: A library for generating and consuming various healthcare related formats.
|
566
547
|
test_files: []
|
567
|
-
has_rdoc:
|
@@ -1,241 +0,0 @@
|
|
1
|
-
require 'zip/zipfilesystem'
|
2
|
-
require 'spreadsheet'
|
3
|
-
require 'google_spreadsheet'
|
4
|
-
require 'roo'
|
5
|
-
require 'iconv'
|
6
|
-
|
7
|
-
module HQMF
|
8
|
-
module ValueSet
|
9
|
-
class Parser
|
10
|
-
|
11
|
-
attr_accessor :child_oids
|
12
|
-
|
13
|
-
GROUP_CODE_SET = "GROUPING"
|
14
|
-
|
15
|
-
ORGANIZATION_TITLE = "Value Set Developer"
|
16
|
-
OID_TITLE = "Value Set OID"
|
17
|
-
CONCEPT_TITLE = "Value Set Name"
|
18
|
-
CATEGORY_TITLE = "QDM Category"
|
19
|
-
CODE_SET_TITLE ="Code System"
|
20
|
-
VERSION_TITLE = "Code System Version"
|
21
|
-
CODE_TITLE = "Code"
|
22
|
-
DESCRIPTION_TITLE = "Descriptor"
|
23
|
-
|
24
|
-
CODE_SYSTEM_NORMALIZER = {
|
25
|
-
'ICD-9'=>'ICD-9-CM',
|
26
|
-
'ICD-10'=>'ICD-10-CM',
|
27
|
-
'HL7 (2.16.840.1.113883.5.1)'=>'HL7'
|
28
|
-
}
|
29
|
-
IGNORED_CODE_SYSTEM_NAMES = ['Grouping', 'GROUPING' ,'HL7', "Administrative Sex"]
|
30
|
-
|
31
|
-
def initialize()
|
32
|
-
@child_oids = []
|
33
|
-
end
|
34
|
-
|
35
|
-
# import an excel matrix array into mongo
|
36
|
-
def parse(file, options={})
|
37
|
-
sheet_array = file_to_array(file, options)
|
38
|
-
by_oid_ungrouped = cells_to_hashs_by_oid(sheet_array)
|
39
|
-
value_sets = collapse_groups(by_oid_ungrouped)
|
40
|
-
translate_json(value_sets)
|
41
|
-
end
|
42
|
-
|
43
|
-
def collapse_groups(by_oid_ungrouped)
|
44
|
-
|
45
|
-
final = []
|
46
|
-
|
47
|
-
# select the grouped code sets and fill in the children... also remove the children that are a
|
48
|
-
# member of a group. We remove the children so that we can create parent groups for the orphans
|
49
|
-
(by_oid_ungrouped.select {|key,value| value["code_set"].upcase == GROUP_CODE_SET}).each do |key, value|
|
50
|
-
# remove the group so that it is not in the orphan list
|
51
|
-
by_oid_ungrouped.delete(value["oid"])
|
52
|
-
codes = []
|
53
|
-
value["codes"].each do |child_oid|
|
54
|
-
# codes << by_oid_ungrouped.delete(child_oid)
|
55
|
-
# do not delete the children of a group. These may be referenced by other groups or directly by the measure
|
56
|
-
code = by_oid_ungrouped[child_oid]
|
57
|
-
@child_oids << child_oid
|
58
|
-
puts "\tcode could not be found: #{child_oid}" unless code
|
59
|
-
codes << code if code
|
60
|
-
# for hierarchies we need to probably have codes be a hash that we select from if we don't find the
|
61
|
-
# element in by_oid_ungrouped we may need to look for it in final
|
62
|
-
end
|
63
|
-
value["code_sets"] = codes
|
64
|
-
value.delete("codes")
|
65
|
-
value.delete("code_set")
|
66
|
-
final << value
|
67
|
-
end
|
68
|
-
|
69
|
-
# fill out the orphans
|
70
|
-
by_oid_ungrouped.each do |key, orphan|
|
71
|
-
final << adopt_orphan(orphan)
|
72
|
-
end
|
73
|
-
|
74
|
-
deleted = []
|
75
|
-
final.delete_if {|x| to_delete = x['code_sets'].nil? || x['code_sets'].empty?; deleted << x if to_delete; to_delete }
|
76
|
-
deleted.each do |value|
|
77
|
-
puts "\tDeleted value set with no code sets: #{value['oid']}"
|
78
|
-
end
|
79
|
-
final
|
80
|
-
|
81
|
-
end
|
82
|
-
|
83
|
-
def adopt_orphan(orphan)
|
84
|
-
parent = orphan.dup
|
85
|
-
parent["code_sets"] = [orphan]
|
86
|
-
parent.delete("codes")
|
87
|
-
parent.delete("code_set")
|
88
|
-
parent
|
89
|
-
end
|
90
|
-
|
91
|
-
# take an excel matrix array and turn it into an array of db models
|
92
|
-
def cells_to_hashs_by_oid(array)
|
93
|
-
a = Array.new(array) # new variable for reentrant
|
94
|
-
headers = a.shift.map {|i| i.to_s } # because of this shift
|
95
|
-
string_data = a.map {|row| row.map {|cell| cell.to_s } }
|
96
|
-
array_of_hashes = string_data.map {|row| Hash[*headers.zip(row).flatten] }
|
97
|
-
|
98
|
-
by_oid = {}
|
99
|
-
array_of_hashes.each do |row|
|
100
|
-
entry = convert_row(row)
|
101
|
-
|
102
|
-
existing = by_oid[entry["oid"]]
|
103
|
-
if (existing)
|
104
|
-
existing["codes"].concat(entry["codes"])
|
105
|
-
else
|
106
|
-
by_oid[entry["oid"]] = entry
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
by_oid
|
111
|
-
end
|
112
|
-
|
113
|
-
def self.get_format(file_path)
|
114
|
-
if file_path =~ /xls$/
|
115
|
-
:xls
|
116
|
-
elsif file_path =~ /xlsx$/
|
117
|
-
:xlsx
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
private
|
122
|
-
|
123
|
-
def convert_row(row)
|
124
|
-
# Value Set Developer
|
125
|
-
# Value Set OID
|
126
|
-
# Value Set Name
|
127
|
-
# QDM Category
|
128
|
-
# Code System
|
129
|
-
# Code System Version
|
130
|
-
# Code
|
131
|
-
# Descriptor
|
132
|
-
value = {
|
133
|
-
"key" => normalize_names(row[CATEGORY_TITLE],row[CONCEPT_TITLE]),
|
134
|
-
"organization" => row[ORGANIZATION_TITLE],
|
135
|
-
"oid" => row[OID_TITLE].strip.gsub(/[^0-9\.]/i, ''),
|
136
|
-
"concept" => normalize_names(row[CONCEPT_TITLE]),
|
137
|
-
"category" => normalize_names(row[CATEGORY_TITLE]),
|
138
|
-
"code_set" => normalize_code_system(row[CODE_SET_TITLE]),
|
139
|
-
"version" => row[VERSION_TITLE],
|
140
|
-
"codes" => extract_code(row[CODE_TITLE], row[CODE_SET_TITLE]),
|
141
|
-
"description" => row[DESCRIPTION_TITLE]
|
142
|
-
}
|
143
|
-
value['codes'].map! {|code| code.strip.gsub(/[^0-9\.]/i, '')} if (value['code_set'].upcase == GROUP_CODE_SET)
|
144
|
-
value
|
145
|
-
end
|
146
|
-
|
147
|
-
# Break all the supplied strings into separate words and return the resulting list as a
|
148
|
-
# new string with each word separated with '_'
|
149
|
-
def normalize_names(*components)
|
150
|
-
name = []
|
151
|
-
components.each do |component|
|
152
|
-
name.concat component.gsub(/\W/,' ').split.collect { |word| word.strip.downcase }
|
153
|
-
end
|
154
|
-
name.join '_'
|
155
|
-
end
|
156
|
-
|
157
|
-
def normalize_code_system(code_system_name)
|
158
|
-
code_system_name = CODE_SYSTEM_NORMALIZER[code_system_name] if CODE_SYSTEM_NORMALIZER[code_system_name]
|
159
|
-
return code_system_name if IGNORED_CODE_SYSTEM_NAMES.include? code_system_name
|
160
|
-
oid = HealthDataStandards::Util::CodeSystemHelper.oid_for_code_system(code_system_name)
|
161
|
-
puts "\tbad code system name: #{code_system_name}" unless oid
|
162
|
-
code_system_name
|
163
|
-
end
|
164
|
-
|
165
|
-
def extract_code(code, set)
|
166
|
-
|
167
|
-
code.strip!
|
168
|
-
if set=='CPT' && code.include?('-')
|
169
|
-
eval(code.strip.gsub('-','..')).to_a.collect { |i| i.to_s }
|
170
|
-
else
|
171
|
-
[code]
|
172
|
-
end
|
173
|
-
|
174
|
-
end
|
175
|
-
|
176
|
-
def file_to_array(file_path, options)
|
177
|
-
defaults = {
|
178
|
-
:columns => 2, # range of import
|
179
|
-
:sheet => 1 # only one sheet at a time can be worked on
|
180
|
-
}
|
181
|
-
options = defaults.merge(options)
|
182
|
-
|
183
|
-
book = book_by_format(file_path, options[:format])
|
184
|
-
book.default_sheet=book.sheets[options[:sheet]]
|
185
|
-
|
186
|
-
# catch double byte encoding problems in spreadsheet files
|
187
|
-
# Encoding::InvalidByteSequenceError: "\x9E\xDE" on UTF-16LE
|
188
|
-
begin
|
189
|
-
book.to_matrix.to_a
|
190
|
-
rescue Encoding::InvalidByteSequenceError => e
|
191
|
-
raise "Spreadsheet encoding problem: #{e}"
|
192
|
-
end
|
193
|
-
end
|
194
|
-
|
195
|
-
def book_by_format(file_path, format)
|
196
|
-
format = HQMF::ValueSet::Parser.get_format(file_path) unless format
|
197
|
-
|
198
|
-
if format == :xls
|
199
|
-
book = Excel.new(file_path, nil, :ignore)
|
200
|
-
elsif format == :xlsx
|
201
|
-
book = Excelx.new(file_path, nil, :ignore)
|
202
|
-
else
|
203
|
-
raise "File does not end in .xls or .xlsx"
|
204
|
-
end
|
205
|
-
book
|
206
|
-
end
|
207
|
-
|
208
|
-
def translate_json(value_sets)
|
209
|
-
value_set_models = []
|
210
|
-
|
211
|
-
value_sets.each do |value_set|
|
212
|
-
hds_value_set = HealthDataStandards::SVS::ValueSet.new()
|
213
|
-
hds_value_set['oid'] = value_set['oid']
|
214
|
-
hds_value_set['display_name'] = value_set['key']
|
215
|
-
hds_value_set['version'] = value_set['version']
|
216
|
-
hds_value_set['concepts'] = []
|
217
|
-
|
218
|
-
value_set['code_sets'].each do |code_set|
|
219
|
-
code_set['codes'].map{ |code|
|
220
|
-
concept = HealthDataStandards::SVS::Concept.new()
|
221
|
-
concept['code'] = code
|
222
|
-
concept['code_system'] = nil
|
223
|
-
concept['code_system_name'] = code_set['code_set']
|
224
|
-
concept['code_system_version'] = code_set['version']
|
225
|
-
concept['display_name'] = nil
|
226
|
-
hds_value_set['concepts'].concat([concept])
|
227
|
-
}
|
228
|
-
end
|
229
|
-
if hds_value_set['concepts'].include? nil
|
230
|
-
puts "Value Set has a bad code set (code set is null)"
|
231
|
-
hds_value_set['concepts'].compact!
|
232
|
-
end
|
233
|
-
value_set_models << hds_value_set
|
234
|
-
end
|
235
|
-
value_set_models
|
236
|
-
end
|
237
|
-
|
238
|
-
|
239
|
-
end
|
240
|
-
end
|
241
|
-
end
|