cqm-reports 3.1.0 → 3.1.1
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/README.md +1 -0
- data/lib/qrda-import/base-importers/section_importer.rb +18 -14
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5affd6fd4135b0c208f5fd5e5299eeb38569fd2a
|
4
|
+
data.tar.gz: dfe623571f807df1af633a4733ddfffb4cd74b67
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0fa02e86800587983fbc7f772c119c8ccebaf1d34a06f4071186a99f9dba9306fef48d3ee124137a9e3bd8ef17a3d2187e49932d93b3beb5542e95480d0c7475
|
7
|
+
data.tar.gz: bba89a9e7d92bcbadee80cb27354cc4cd7a25e2c7cb004cfb2feee8f6c13a237dac833f0f008b073cb4f2de27901301cecb2d5f6cea0b73493f42da51b23216e
|
data/README.md
CHANGED
@@ -11,6 +11,7 @@ Starting with version **2.0.0** released on 6/20/2019, cqm-reports versioning ha
|
|
11
11
|
| X | QRDA Cat 1 | QRDA Cat 3 |
|
12
12
|
| --- | --- | --- |
|
13
13
|
| 2 | R1 STU5.1 | R1 STU2.1 |
|
14
|
+
| 3 | R1 STU5.2 | R1 STU2.1 |
|
14
15
|
|
15
16
|
* **Y** indicates major changes (incompatible API changes)
|
16
17
|
|
@@ -42,7 +42,7 @@ module QRDA
|
|
42
42
|
# This is the id found in the QRDA file
|
43
43
|
entry_qrda_id = extract_id(entry_element, @id_xpath)
|
44
44
|
# Create a hash to map all of entry.ids to the same QRDA ids. This will be used to merge QRDA entries
|
45
|
-
# that represent the same event.
|
45
|
+
# that represent the same event.
|
46
46
|
@entry_id_map["#{entry_qrda_id.value}_#{entry_qrda_id.namingSystem}"] ||= []
|
47
47
|
@entry_id_map["#{entry_qrda_id.value}_#{entry_qrda_id.namingSystem}"] << entry.id
|
48
48
|
entry.dataElementCodes = extract_codes(entry_element, @code_xpath)
|
@@ -115,15 +115,17 @@ module QRDA
|
|
115
115
|
end
|
116
116
|
if low_time && high_time && low_time > high_time
|
117
117
|
# pass warning: current code continues as expected, but adds warning
|
118
|
-
id_attr = parent_element.at_xpath(".//cda:id")
|
118
|
+
id_attr = parent_element.at_xpath(".//cda:id")&.attributes
|
119
|
+
id_str = id_attr ? "and id: #{id_attr['root']&.value}(root), #{id_attr['extension']&.value}(extension)" : ""
|
119
120
|
qrda_type = @entry_class.to_s.split("::")[1]
|
120
|
-
@warnings << ValidationError.new(message: "Interval with low time after high time. Located in element with QRDA type: #{qrda_type}
|
121
|
+
@warnings << ValidationError.new(message: "Interval with low time after high time. Located in element with QRDA type: #{qrda_type} #{id_str}",
|
121
122
|
location: parent_element.path)
|
122
123
|
end
|
123
124
|
if low_time.nil? && high_time.nil?
|
124
|
-
id_attr = parent_element.at_xpath(".//cda:id")
|
125
|
+
id_attr = parent_element.at_xpath(".//cda:id")&.attributes
|
126
|
+
id_str = id_attr ? "and id: #{id_attr['root']&.value}(root), #{id_attr['extension']&.value}(extension)" : ""
|
125
127
|
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}
|
128
|
+
@warnings << ValidationError.new(message: "Interval with nullFlavor low time and nullFlavor high time. Located in element with QRDA type: #{qrda_type} #{id_str}",
|
127
129
|
location: parent_element.path)
|
128
130
|
end
|
129
131
|
QDM::Interval.new(low_time, high_time).shift_dates(0)
|
@@ -168,7 +170,7 @@ module QRDA
|
|
168
170
|
parent_element.xpath(@result_xpath).each do |elem|
|
169
171
|
result << extract_result_value(elem)
|
170
172
|
end
|
171
|
-
result.size > 1 ? result : result.first
|
173
|
+
result.size > 1 ? result : result.first
|
172
174
|
end
|
173
175
|
|
174
176
|
def extract_result_value(value_element)
|
@@ -181,9 +183,10 @@ module QRDA
|
|
181
183
|
elsif value_element['code'].present?
|
182
184
|
return code_if_present(value_element)
|
183
185
|
elsif value_element.text.present?
|
184
|
-
id_attr = value_element.parent.at_xpath(".//cda:id")
|
186
|
+
id_attr = value_element.parent.at_xpath(".//cda:id")&.attributes
|
187
|
+
id_str = id_attr ? "and id: #{id_attr['root']&.value}(root), #{id_attr['extension']&.value}(extension)" : ""
|
185
188
|
qrda_type = @entry_class.to_s.split("::")[1]
|
186
|
-
@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}
|
189
|
+
@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}",
|
187
190
|
location: value_element.path)
|
188
191
|
return value_element.text
|
189
192
|
end
|
@@ -195,16 +198,16 @@ module QRDA
|
|
195
198
|
negation_indicator = parent_element['negationInd']
|
196
199
|
# Return and do not set reason attribute if the entry is negated
|
197
200
|
return nil if negation_indicator.eql?('true')
|
198
|
-
|
199
|
-
reason_element.blank? ? nil : code_if_present(reason_element.first)
|
201
|
+
|
202
|
+
reason_element.blank? ? nil : code_if_present(reason_element.first)
|
200
203
|
end
|
201
204
|
|
202
205
|
def extract_negation(parent_element, entry)
|
203
206
|
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")
|
204
207
|
negation_indicator = parent_element['negationInd']
|
205
208
|
# Return and do not set negationRationale attribute if the entry is not negated
|
206
|
-
return unless negation_indicator.eql?('true')
|
207
|
-
|
209
|
+
return unless negation_indicator.eql?('true')
|
210
|
+
|
208
211
|
entry.negationRationale = code_if_present(negation_element.first) unless negation_element.blank?
|
209
212
|
extract_negated_code(parent_element, entry)
|
210
213
|
end
|
@@ -218,9 +221,10 @@ module QRDA
|
|
218
221
|
else
|
219
222
|
# negated code is nullFlavored with no valueset
|
220
223
|
entry.dataElementCodes = [{ code: "NA", system: '1.2.3.4.5.6.7.8.9.10' }]
|
221
|
-
id_attr = parent_element.at_xpath(".//cda:id")
|
224
|
+
id_attr = parent_element.at_xpath(".//cda:id")&.attributes
|
225
|
+
id_str = id_attr ? "and id: #{id_attr['root']&.value}(root), #{id_attr['extension']&.value}(extension)" : ""
|
222
226
|
qrda_type = @entry_class.to_s.split("::")[1]
|
223
|
-
@warnings << ValidationError.new(message: "Negated code element contains nullFlavor code but no valueset. Located in element with QRDA type: #{qrda_type}
|
227
|
+
@warnings << ValidationError.new(message: "Negated code element contains nullFlavor code but no valueset. Located in element with QRDA type: #{qrda_type} #{id_str}.",
|
224
228
|
location: parent_element.path)
|
225
229
|
end
|
226
230
|
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: 3.1.
|
4
|
+
version: 3.1.1
|
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-07-
|
11
|
+
date: 2020-07-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cqm-models
|