cqm-reports 2.0.8 → 2.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.
- checksums.yaml +4 -4
- data/Gemfile +0 -1
- data/README.md +27 -0
- data/lib/cqm_report.rb +0 -1
- data/lib/qrda-import/base-importers/section_importer.rb +42 -9
- data/lib/qrda-import/data-element-importers/diagnostic_study_performed_importer.rb +1 -1
- data/lib/qrda-import/data-element-importers/encounter_performed_importer.rb +10 -0
- data/lib/qrda-import/data-element-importers/immunization_order_importer.rb +1 -1
- data/lib/qrda-import/patient_importer.rb +61 -60
- metadata +16 -3
- data/lib/qrda-import/entry_package.rb +0 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e8ef5e1f1c6d14646a8d523109b41d9d9609503c
|
4
|
+
data.tar.gz: 1ccc64f200b387965a3271501cb933e795435cba
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 62af1b280c4701bed265910f768bb6d19be6f087bd028b022b9cdfbd4b02fae834252fc1ed0798e6555b4e978962f9e4d237d27c9528523cc5c6ba89d8ace2e1
|
7
|
+
data.tar.gz: 71cc7d395c9af17f8d946e28ac108f25142c9d2e4e6028e4799e8297fb8a5fc47f1b898939554cbd7616494320ec9d79c8caa489fc8bda0b60f3eb4050f8d69f
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -18,6 +18,33 @@ Starting with version **2.0.0** released on 6/20/2019, cqm-reports versioning ha
|
|
18
18
|
|
19
19
|
For the versions available, see [tags on this repository](https://github.com/projecttacoma/cqm-validators/tags).
|
20
20
|
|
21
|
+
=======
|
22
|
+
Importing QRDA
|
23
|
+
==========
|
24
|
+
|
25
|
+
A QRDA document can be imported into a CQM::Patient (defined in [cqm-models](https://github.com/projecttacoma/cqm-models)) using the following commands.
|
26
|
+
|
27
|
+
doc = Nokogiri::XML(file)
|
28
|
+
patient, warnings = QRDA::Cat1::PatientImporter.instance.parse_cat1(doc)
|
29
|
+
|
30
|
+
Exporting QRDA Category I
|
31
|
+
==========
|
32
|
+
|
33
|
+
Exporting a QRDA document from a CQM::Patient (defined in [cqm-models](https://github.com/projecttacoma/cqm-models)) using the following command.
|
34
|
+
|
35
|
+
Qrda1R5.new(patient, measures, options).render
|
36
|
+
* patient is a [CQM::Patient](https://github.com/projecttacoma/cqm-models/blob/master/app/models/cqm/patient.rb)
|
37
|
+
* measures is an array of [CQM::Measure](https://github.com/projecttacoma/cqm-models/blob/master/app/models/cqm/measure.rb)
|
38
|
+
* options is a hash that can be used to pass in:
|
39
|
+
* provider
|
40
|
+
* patient_addresses
|
41
|
+
* patient_telecoms
|
42
|
+
* start_time
|
43
|
+
* end_time
|
44
|
+
* submission_program
|
45
|
+
|
46
|
+
QRDA export requires the [mustache](https://github.com/mustache/mustache) gem
|
47
|
+
|
21
48
|
## License
|
22
49
|
|
23
50
|
Copyright 2019 The MITRE Corporation
|
data/lib/cqm_report.rb
CHANGED
@@ -18,7 +18,6 @@ require_relative 'html-export/qdm-patient/qdm_patient.rb'
|
|
18
18
|
require_relative 'qrda-export/catI-r5/qrda1_r5.rb'
|
19
19
|
require_relative 'qrda-export/catIII-r2-1/qrda3_r21.rb'
|
20
20
|
|
21
|
-
require_relative 'qrda-import/entry_package.rb'
|
22
21
|
require_relative 'qrda-import/cda_identifier.rb'
|
23
22
|
require_relative 'qrda-import/narrative_reference_handler.rb'
|
24
23
|
require_relative 'qrda-import/entry_finder.rb'
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module QRDA
|
2
2
|
module Cat1
|
3
3
|
class SectionImporter
|
4
|
-
attr_accessor :check_for_usable, :status_xpath, :code_xpath
|
4
|
+
attr_accessor :check_for_usable, :status_xpath, :code_xpath, :warnings, :codes_modifiers
|
5
5
|
|
6
6
|
def initialize(entry_finder)
|
7
7
|
@entry_finder = entry_finder
|
@@ -9,6 +9,8 @@ module QRDA
|
|
9
9
|
@entry_id_map = {}
|
10
10
|
@check_for_usable = true
|
11
11
|
@entry_class = QDM::DataElement
|
12
|
+
@warnings = []
|
13
|
+
@codes_modifiers = {}
|
12
14
|
end
|
13
15
|
|
14
16
|
# Traverses an HL7 CDA document passed in and creates an Array of Entry
|
@@ -41,7 +43,7 @@ module QRDA
|
|
41
43
|
# This is the id found in the QRDA file
|
42
44
|
entry_qrda_id = extract_id(entry_element, @id_xpath)
|
43
45
|
# Create a hash to map all of entry.ids to the same QRDA ids. This will be used to merge QRDA entries
|
44
|
-
# that represent the same event.
|
46
|
+
# that represent the same event.
|
45
47
|
@entry_id_map["#{entry_qrda_id.value}_#{entry_qrda_id.namingSystem}"] ||= []
|
46
48
|
@entry_id_map["#{entry_qrda_id.value}_#{entry_qrda_id.namingSystem}"] << entry.id
|
47
49
|
entry.dataElementCodes = extract_codes(entry_element, @code_xpath)
|
@@ -90,6 +92,7 @@ module QRDA
|
|
90
92
|
end
|
91
93
|
|
92
94
|
def extract_interval(parent_element, interval_xpath)
|
95
|
+
return nil unless parent_element.at_xpath(interval_xpath)
|
93
96
|
if parent_element.at_xpath("#{interval_xpath}/@value")
|
94
97
|
low_time = DateTime.parse(parent_element.at_xpath(interval_xpath)['value'])
|
95
98
|
high_time = DateTime.parse(parent_element.at_xpath(interval_xpath)['value'])
|
@@ -108,6 +111,21 @@ module QRDA
|
|
108
111
|
low_time = Time.parse(parent_element.at_xpath("#{interval_xpath}/cda:center")['value'])
|
109
112
|
high_time = Time.parse(parent_element.at_xpath("#{interval_xpath}/cda:center")['value'])
|
110
113
|
end
|
114
|
+
if low_time && high_time && low_time > high_time
|
115
|
+
# pass warning: current code continues as expected, but adds warning
|
116
|
+
id_attr = parent_element.at_xpath(".//cda:id")&.attributes
|
117
|
+
id_str = id_attr ? "and id: #{id_attr['root']&.value}(root), #{id_attr['extension']&.value}(extension)" : ""
|
118
|
+
qrda_type = @entry_class.to_s.split("::")[1]
|
119
|
+
@warnings << ValidationError.new(message: "Interval with low time after high time. Located in element with QRDA type: #{qrda_type} #{id_str}",
|
120
|
+
location: parent_element.path)
|
121
|
+
end
|
122
|
+
if low_time.nil? && high_time.nil?
|
123
|
+
id_attr = parent_element.at_xpath(".//cda:id")&.attributes
|
124
|
+
id_str = id_attr ? "and id: #{id_attr['root']&.value}(root), #{id_attr['extension']&.value}(extension)" : ""
|
125
|
+
qrda_type = @entry_class.to_s.split("::")[1]
|
126
|
+
@warnings << ValidationError.new(message: "Interval with nullFlavor low time and nullFlavor high time. Located in element with QRDA type: #{qrda_type} #{id_str}",
|
127
|
+
location: parent_element.path)
|
128
|
+
end
|
111
129
|
QDM::Interval.new(low_time, high_time).shift_dates(0)
|
112
130
|
end
|
113
131
|
|
@@ -150,7 +168,7 @@ module QRDA
|
|
150
168
|
parent_element.xpath(@result_xpath).each do |elem|
|
151
169
|
result << extract_result_value(elem)
|
152
170
|
end
|
153
|
-
result.size > 1 ? result : result.first
|
171
|
+
result.size > 1 ? result : result.first
|
154
172
|
end
|
155
173
|
|
156
174
|
def extract_result_value(value_element)
|
@@ -163,6 +181,11 @@ module QRDA
|
|
163
181
|
elsif value_element['code'].present?
|
164
182
|
return code_if_present(value_element)
|
165
183
|
elsif value_element.text.present?
|
184
|
+
id_attr = value_element.parent.at_xpath(".//cda:id")&.attributes
|
185
|
+
id_str = id_attr ? "and id: #{id_attr['root']&.value}(root), #{id_attr['extension']&.value}(extension)" : ""
|
186
|
+
qrda_type = @entry_class.to_s.split("::")[1]
|
187
|
+
@warnings << ValidationError.new(message: "Value with string type found. When possible, it's best practice to use a coded value or scalar. Located in element with QRDA type: #{qrda_type} #{id_str}",
|
188
|
+
location: value_element.path)
|
166
189
|
return value_element.text
|
167
190
|
end
|
168
191
|
end
|
@@ -173,16 +196,16 @@ module QRDA
|
|
173
196
|
negation_indicator = parent_element['negationInd']
|
174
197
|
# Return and do not set reason attribute if the entry is negated
|
175
198
|
return nil if negation_indicator.eql?('true')
|
176
|
-
|
177
|
-
reason_element.blank? ? nil : code_if_present(reason_element.first)
|
199
|
+
|
200
|
+
reason_element.blank? ? nil : code_if_present(reason_element.first)
|
178
201
|
end
|
179
202
|
|
180
203
|
def extract_negation(parent_element, entry)
|
181
204
|
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")
|
182
205
|
negation_indicator = parent_element['negationInd']
|
183
206
|
# Return and do not set negationRationale attribute if the entry is not negated
|
184
|
-
return unless negation_indicator.eql?('true')
|
185
|
-
|
207
|
+
return unless negation_indicator.eql?('true')
|
208
|
+
|
186
209
|
entry.negationRationale = code_if_present(negation_element.first) unless negation_element.blank?
|
187
210
|
extract_negated_code(parent_element, entry)
|
188
211
|
end
|
@@ -190,8 +213,18 @@ module QRDA
|
|
190
213
|
def extract_negated_code(parent_element, entry)
|
191
214
|
code_elements = parent_element.xpath(@code_xpath)
|
192
215
|
code_elements.each do |code_element|
|
193
|
-
if code_element['nullFlavor'] == 'NA'
|
194
|
-
|
216
|
+
if code_element['nullFlavor'] == 'NA'
|
217
|
+
if code_element['sdtc:valueSet']
|
218
|
+
entry.dataElementCodes = [{ code: code_element['sdtc:valueSet'], codeSystemOid: '1.2.3.4.5.6.7.8.9.10' }]
|
219
|
+
else
|
220
|
+
# negated code is nullFlavored with no valueset
|
221
|
+
entry.dataElementCodes = [{ code: "NA", codeSystemOid: '1.2.3.4.5.6.7.8.9.10' }]
|
222
|
+
id_attr = parent_element.at_xpath(".//cda:id")&.attributes
|
223
|
+
id_str = id_attr ? "and id: #{id_attr['root']&.value}(root), #{id_attr['extension']&.value}(extension)" : ""
|
224
|
+
qrda_type = @entry_class.to_s.split("::")[1]
|
225
|
+
@warnings << ValidationError.new(message: "Negated code element contains nullFlavor code but no valueset. Located in element with QRDA type: #{qrda_type} #{id_str}.",
|
226
|
+
location: parent_element.path)
|
227
|
+
end
|
195
228
|
end
|
196
229
|
end
|
197
230
|
end
|
@@ -20,7 +20,7 @@ module QRDA
|
|
20
20
|
def create_entry(entry_element, nrh = NarrativeReferenceHandler.new)
|
21
21
|
diagnostic_study_performed = super
|
22
22
|
diagnostic_study_performed.resultDatetime = extract_time(entry_element, @result_datetime_xpath)
|
23
|
-
diagnostic_study_performed.resultDatetime ||= extract_interval(entry_element, @result_datetime_xpath)
|
23
|
+
diagnostic_study_performed.resultDatetime ||= extract_interval(entry_element, @result_datetime_xpath)&.low
|
24
24
|
diagnostic_study_performed.status = code_if_present(entry_element.at_xpath(@status_xpath))
|
25
25
|
diagnostic_study_performed.method = code_if_present(entry_element.at_xpath(@method_xpath))
|
26
26
|
diagnostic_study_performed.facilityLocation = extract_facility_locations(entry_element)[0]
|
@@ -26,11 +26,21 @@ module QRDA
|
|
26
26
|
los = encounter_performed.relevantPeriod.high - encounter_performed.relevantPeriod.low
|
27
27
|
encounter_performed.lengthOfStay = QDM::Quantity.new(los.to_i, 'd')
|
28
28
|
end
|
29
|
+
extract_modifier_code(encounter_performed, entry_element)
|
29
30
|
encounter_performed
|
30
31
|
end
|
31
32
|
|
32
33
|
private
|
33
34
|
|
35
|
+
def extract_modifier_code(encounter_performed, entry_element)
|
36
|
+
code_element = entry_element.at_xpath(@code_xpath)
|
37
|
+
return unless code_element
|
38
|
+
|
39
|
+
qualifier_name = code_element.at_xpath('./cda:qualifier/cda:name')
|
40
|
+
qualifier_value = code_element.at_xpath('./cda:qualifier/cda:value')
|
41
|
+
codes_modifiers[encounter_performed.id] = { name: code_if_present(qualifier_name), value: code_if_present(qualifier_value), xpath_location: entry_element.path } if qualifier_value || qualifier_name
|
42
|
+
end
|
43
|
+
|
34
44
|
def extract_diagnoses(parent_element)
|
35
45
|
diagnosis_elements = parent_element.xpath(@diagnosis_xpath)
|
36
46
|
diagnosis_list = []
|
@@ -16,7 +16,7 @@ module QRDA
|
|
16
16
|
|
17
17
|
def create_entry(entry_element, nrh = NarrativeReferenceHandler.new)
|
18
18
|
immunization_order = super
|
19
|
-
immunization_order.activeDatetime = extract_interval(entry_element, @active_datetime_xpath)
|
19
|
+
immunization_order.activeDatetime = extract_interval(entry_element, @active_datetime_xpath)&.low
|
20
20
|
immunization_order.dosage = extract_scalar(entry_element, @dosage_xpath)
|
21
21
|
immunization_order.supply = extract_scalar(entry_element, @supply_xpath)
|
22
22
|
immunization_order.route = code_if_present(entry_element.at_xpath(@route_xpath))
|
@@ -12,69 +12,71 @@ module QRDA
|
|
12
12
|
def initialize
|
13
13
|
# This differs from other HDS patient importers in that sections can have multiple importers
|
14
14
|
@data_element_importers = []
|
15
|
-
@data_element_importers <<
|
16
|
-
@data_element_importers <<
|
17
|
-
@data_element_importers <<
|
18
|
-
@data_element_importers <<
|
19
|
-
@data_element_importers <<
|
20
|
-
@data_element_importers <<
|
21
|
-
@data_element_importers <<
|
22
|
-
@data_element_importers <<
|
23
|
-
@data_element_importers <<
|
24
|
-
@data_element_importers <<
|
25
|
-
@data_element_importers <<
|
26
|
-
@data_element_importers <<
|
27
|
-
@data_element_importers <<
|
28
|
-
@data_element_importers <<
|
29
|
-
@data_element_importers <<
|
30
|
-
@data_element_importers <<
|
31
|
-
@data_element_importers <<
|
32
|
-
@data_element_importers <<
|
33
|
-
@data_element_importers <<
|
34
|
-
@data_element_importers <<
|
35
|
-
@data_element_importers <<
|
36
|
-
@data_element_importers <<
|
37
|
-
@data_element_importers <<
|
38
|
-
@data_element_importers <<
|
39
|
-
@data_element_importers <<
|
40
|
-
@data_element_importers <<
|
41
|
-
@data_element_importers <<
|
42
|
-
@data_element_importers <<
|
43
|
-
@data_element_importers <<
|
44
|
-
@data_element_importers <<
|
45
|
-
@data_element_importers <<
|
46
|
-
@data_element_importers <<
|
47
|
-
@data_element_importers <<
|
48
|
-
@data_element_importers <<
|
49
|
-
@data_element_importers <<
|
50
|
-
@data_element_importers <<
|
51
|
-
@data_element_importers <<
|
52
|
-
@data_element_importers <<
|
53
|
-
@data_element_importers <<
|
54
|
-
@data_element_importers <<
|
55
|
-
@data_element_importers <<
|
56
|
-
@data_element_importers <<
|
57
|
-
@data_element_importers <<
|
58
|
-
@data_element_importers <<
|
59
|
-
@data_element_importers <<
|
60
|
-
@data_element_importers <<
|
15
|
+
@data_element_importers << AdverseEventImporter.new
|
16
|
+
@data_element_importers << AllergyIntoleranceImporter.new
|
17
|
+
@data_element_importers << AssessmentOrderImporter.new
|
18
|
+
@data_element_importers << AssessmentPerformedImporter.new
|
19
|
+
@data_element_importers << AssessmentRecommendedImporter.new
|
20
|
+
@data_element_importers << CommunicationPerformedImporter.new
|
21
|
+
@data_element_importers << DeviceAppliedImporter.new
|
22
|
+
@data_element_importers << DeviceOrderImporter.new
|
23
|
+
@data_element_importers << DeviceRecommendedImporter.new
|
24
|
+
@data_element_importers << DiagnosisImporter.new
|
25
|
+
@data_element_importers << DiagnosticStudyOrderImporter.new
|
26
|
+
@data_element_importers << DiagnosticStudyPerformedImporter.new
|
27
|
+
@data_element_importers << DiagnosticStudyRecommendedImporter.new
|
28
|
+
@data_element_importers << EncounterOrderImporter.new
|
29
|
+
@data_element_importers << EncounterPerformedImporter.new
|
30
|
+
@data_element_importers << EncounterRecommendedImporter.new
|
31
|
+
@data_element_importers << FamilyHistoryImporter.new
|
32
|
+
@data_element_importers << ImmunizationAdministeredImporter.new
|
33
|
+
@data_element_importers << ImmunizationOrderImporter.new
|
34
|
+
@data_element_importers << InterventionOrderImporter.new
|
35
|
+
@data_element_importers << InterventionPerformedImporter.new
|
36
|
+
@data_element_importers << InterventionRecommendedImporter.new
|
37
|
+
@data_element_importers << LaboratoryTestOrderImporter.new
|
38
|
+
@data_element_importers << LaboratoryTestPerformedImporter.new
|
39
|
+
@data_element_importers << LaboratoryTestRecommendedImporter.new
|
40
|
+
@data_element_importers << MedicationActiveImporter.new
|
41
|
+
@data_element_importers << MedicationAdministeredImporter.new
|
42
|
+
@data_element_importers << MedicationDischargeImporter.new
|
43
|
+
@data_element_importers << MedicationDispensedImporter.new
|
44
|
+
@data_element_importers << MedicationOrderImporter.new
|
45
|
+
@data_element_importers << PatientCareExperienceImporter.new
|
46
|
+
@data_element_importers << PatientCharacteristicClinicalTrialParticipantImporter.new
|
47
|
+
@data_element_importers << PatientCharacteristicExpiredImporter.new
|
48
|
+
@data_element_importers << PatientCharacteristicPayerImporter.new
|
49
|
+
@data_element_importers << PhysicalExamOrderImporter.new
|
50
|
+
@data_element_importers << PhysicalExamPerformedImporter.new
|
51
|
+
@data_element_importers << PhysicalExamRecommendedImporter.new
|
52
|
+
@data_element_importers << ProcedureOrderImporter.new
|
53
|
+
@data_element_importers << ProcedurePerformedImporter.new
|
54
|
+
@data_element_importers << ProcedureRecommendedImporter.new
|
55
|
+
@data_element_importers << ProviderCareExperienceImporter.new
|
56
|
+
@data_element_importers << ProviderCharacteristicImporter.new
|
57
|
+
@data_element_importers << SubstanceAdministeredImporter.new
|
58
|
+
@data_element_importers << SubstanceOrderImporter.new
|
59
|
+
@data_element_importers << SubstanceRecommendedImporter.new
|
60
|
+
@data_element_importers << SymptomImporter.new
|
61
61
|
end
|
62
62
|
|
63
63
|
def parse_cat1(doc)
|
64
64
|
patient = CQM::Patient.new
|
65
|
+
warnings = []
|
66
|
+
codes_modifiers = {}
|
65
67
|
entry_id_map = {}
|
66
|
-
import_data_elements(patient, doc, entry_id_map)
|
68
|
+
import_data_elements(patient, doc, entry_id_map, codes_modifiers, warnings)
|
67
69
|
normalize_references(patient, entry_id_map)
|
68
70
|
get_demographics(patient, doc)
|
69
|
-
patient
|
71
|
+
[patient, warnings, codes_modifiers]
|
70
72
|
end
|
71
73
|
|
72
|
-
def import_data_elements(patient, doc, entry_id_map)
|
74
|
+
def import_data_elements(patient, doc, entry_id_map, codes_modifiers, warnings = [])
|
73
75
|
context = doc.xpath("/cda:ClinicalDocument/cda:component/cda:structuredBody/cda:component/cda:section[cda:templateId/@root = '2.16.840.1.113883.10.20.24.2.1']")
|
74
76
|
nrh = NarrativeReferenceHandler.new
|
75
77
|
nrh.build_id_map(doc)
|
76
|
-
@data_element_importers.each do |
|
77
|
-
data_elements, id_map =
|
78
|
+
@data_element_importers.each do |importer|
|
79
|
+
data_elements, id_map = importer.create_entries(context, nrh)
|
78
80
|
new_data_elements = []
|
79
81
|
|
80
82
|
id_map.each_value do |elem_ids|
|
@@ -91,7 +93,7 @@ module QRDA
|
|
91
93
|
unique_element_keys << key_elements_for_determining_encounter_uniqueness(data_element)
|
92
94
|
|
93
95
|
# Loop through all other data elements with the same id
|
94
|
-
elem_ids[1,elem_ids.length].each do |dup_id|
|
96
|
+
elem_ids[1,elem_ids.length].each do |dup_id|
|
95
97
|
dup_element = data_elements.find { |de| de.id == dup_id }
|
96
98
|
dup_element_keys = key_elements_for_determining_encounter_uniqueness(dup_element)
|
97
99
|
# See if a previously selected data element shared all of the keys files
|
@@ -106,13 +108,18 @@ module QRDA
|
|
106
108
|
|
107
109
|
patient.qdmPatient.dataElements << new_data_elements
|
108
110
|
entry_id_map.merge!(id_map)
|
111
|
+
warnings.concat(importer.warnings)
|
112
|
+
codes_modifiers.merge!(importer.codes_modifiers)
|
113
|
+
# reset warnings after they're captured so that the importer can be re-used
|
114
|
+
importer.warnings = []
|
115
|
+
importer.codes_modifiers = {}
|
109
116
|
end
|
110
117
|
end
|
111
118
|
|
112
119
|
def key_elements_for_determining_encounter_uniqueness(encounter)
|
113
120
|
codes = encounter.codes.collect { |dec| "#{dec.code}_#{dec.codeSystemOid}" }.sort.to_s
|
114
|
-
admission_date_time = encounter
|
115
|
-
discharge_date_time = encounter
|
121
|
+
admission_date_time = encounter&.relevantPeriod&.low.to_s
|
122
|
+
discharge_date_time = encounter&.relevantPeriod&.high.to_s
|
116
123
|
"#{codes}#{admission_date_time}#{discharge_date_time}"
|
117
124
|
end
|
118
125
|
|
@@ -138,12 +145,6 @@ module QRDA
|
|
138
145
|
end
|
139
146
|
end
|
140
147
|
end
|
141
|
-
|
142
|
-
private
|
143
|
-
|
144
|
-
def generate_importer(importer_class)
|
145
|
-
EntryPackage.new(importer_class.new)
|
146
|
-
end
|
147
148
|
end
|
148
149
|
end
|
149
150
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cqm-reports
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- The MITRE Corporation
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-09-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cqm-models
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 2.0.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: cqm-validators
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 2.0.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 2.0.0
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: mustache
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -306,7 +320,6 @@ files:
|
|
306
320
|
- lib/qrda-import/data-element-importers/substance_recommended_importer.rb
|
307
321
|
- lib/qrda-import/data-element-importers/symptom_importer.rb
|
308
322
|
- lib/qrda-import/entry_finder.rb
|
309
|
-
- lib/qrda-import/entry_package.rb
|
310
323
|
- lib/qrda-import/narrative_reference_handler.rb
|
311
324
|
- lib/qrda-import/patient_importer.rb
|
312
325
|
- lib/util/code_system_helper.rb
|