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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8d2524cbacaae3fea93a3dca5545a113a25f1454
4
- data.tar.gz: 77634976e41228b7dbdf43293f0596b481ed9eba
3
+ metadata.gz: e8ef5e1f1c6d14646a8d523109b41d9d9609503c
4
+ data.tar.gz: 1ccc64f200b387965a3271501cb933e795435cba
5
5
  SHA512:
6
- metadata.gz: 96c3f9a0fc48608c70790be92d6bf44781dd85acc012e004d31f1f3ecdfcf8b91b14ca98bf491d0ac2b08f6c56e371104ab7e9e37c8aeacf4d4fd1dcd811468b
7
- data.tar.gz: 7030f81b37ddd6362c967a16fa166a6f2fac407dcc084ee2be739eade82ae2b54947bf3edc792fefeafd886b7fbd02ca9be8497edc6cef49951382cda984ec40
6
+ metadata.gz: 62af1b280c4701bed265910f768bb6d19be6f087bd028b022b9cdfbd4b02fae834252fc1ed0798e6555b4e978962f9e4d237d27c9528523cc5c6ba89d8ace2e1
7
+ data.tar.gz: 71cc7d395c9af17f8d946e28ac108f25142c9d2e4e6028e4799e8297fb8a5fc47f1b898939554cbd7616494320ec9d79c8caa489fc8bda0b60f3eb4050f8d69f
data/Gemfile CHANGED
@@ -28,6 +28,5 @@ group :test do
28
28
  gem 'minitest', '~> 5.3'
29
29
  gem 'minitest-reporters'
30
30
  gem 'awesome_print', :require => 'ap'
31
- gem 'cqm-validators'
32
31
  gem 'nokogiri-diff'
33
32
  end
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
@@ -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' && code_element['sdtc:valueSet']
194
- entry.dataElementCodes = [{ code: code_element['sdtc:valueSet'], codeSystemOid: '1.2.3.4.5.6.7.8.9.10' }]
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).low
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).low
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 << generate_importer(AdverseEventImporter)
16
- @data_element_importers << generate_importer(AllergyIntoleranceImporter)
17
- @data_element_importers << generate_importer(AssessmentOrderImporter)
18
- @data_element_importers << generate_importer(AssessmentPerformedImporter)
19
- @data_element_importers << generate_importer(AssessmentRecommendedImporter)
20
- @data_element_importers << generate_importer(CommunicationPerformedImporter)
21
- @data_element_importers << generate_importer(DeviceAppliedImporter)
22
- @data_element_importers << generate_importer(DeviceOrderImporter)
23
- @data_element_importers << generate_importer(DeviceRecommendedImporter)
24
- @data_element_importers << generate_importer(DiagnosisImporter)
25
- @data_element_importers << generate_importer(DiagnosticStudyOrderImporter)
26
- @data_element_importers << generate_importer(DiagnosticStudyPerformedImporter)
27
- @data_element_importers << generate_importer(DiagnosticStudyRecommendedImporter)
28
- @data_element_importers << generate_importer(EncounterOrderImporter)
29
- @data_element_importers << generate_importer(EncounterPerformedImporter)
30
- @data_element_importers << generate_importer(EncounterRecommendedImporter)
31
- @data_element_importers << generate_importer(FamilyHistoryImporter)
32
- @data_element_importers << generate_importer(ImmunizationAdministeredImporter)
33
- @data_element_importers << generate_importer(ImmunizationOrderImporter)
34
- @data_element_importers << generate_importer(InterventionOrderImporter)
35
- @data_element_importers << generate_importer(InterventionPerformedImporter)
36
- @data_element_importers << generate_importer(InterventionRecommendedImporter)
37
- @data_element_importers << generate_importer(LaboratoryTestOrderImporter)
38
- @data_element_importers << generate_importer(LaboratoryTestPerformedImporter)
39
- @data_element_importers << generate_importer(LaboratoryTestRecommendedImporter)
40
- @data_element_importers << generate_importer(MedicationActiveImporter)
41
- @data_element_importers << generate_importer(MedicationAdministeredImporter)
42
- @data_element_importers << generate_importer(MedicationDischargeImporter)
43
- @data_element_importers << generate_importer(MedicationDispensedImporter)
44
- @data_element_importers << generate_importer(MedicationOrderImporter)
45
- @data_element_importers << generate_importer(PatientCareExperienceImporter)
46
- @data_element_importers << generate_importer(PatientCharacteristicClinicalTrialParticipantImporter)
47
- @data_element_importers << generate_importer(PatientCharacteristicExpiredImporter)
48
- @data_element_importers << generate_importer(PatientCharacteristicPayerImporter)
49
- @data_element_importers << generate_importer(PhysicalExamOrderImporter)
50
- @data_element_importers << generate_importer(PhysicalExamPerformedImporter)
51
- @data_element_importers << generate_importer(PhysicalExamRecommendedImporter)
52
- @data_element_importers << generate_importer(ProcedureOrderImporter)
53
- @data_element_importers << generate_importer(ProcedurePerformedImporter)
54
- @data_element_importers << generate_importer(ProcedureRecommendedImporter)
55
- @data_element_importers << generate_importer(ProviderCareExperienceImporter)
56
- @data_element_importers << generate_importer(ProviderCharacteristicImporter)
57
- @data_element_importers << generate_importer(SubstanceAdministeredImporter)
58
- @data_element_importers << generate_importer(SubstanceOrderImporter)
59
- @data_element_importers << generate_importer(SubstanceRecommendedImporter)
60
- @data_element_importers << generate_importer(SymptomImporter)
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 |entry_package|
77
- data_elements, id_map = entry_package.package_entries(context, nrh)
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.relevantPeriod.low.to_s
115
- discharge_date_time = encounter.relevantPeriod.high.to_s
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.8
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-05-08 00:00:00.000000000 Z
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
@@ -1,16 +0,0 @@
1
- module QRDA
2
- module Cat1
3
- class EntryPackage
4
-
5
- attr_accessor :importer_type
6
-
7
- def initialize(type)
8
- self.importer_type = type
9
- end
10
-
11
- def package_entries(doc, nrh)
12
- importer_type.create_entries(doc, nrh)
13
- end
14
- end
15
- end
16
- end