cqm-reports 4.1.5 → 4.1.6

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
  SHA256:
3
- metadata.gz: '08e7e657c2a3f3cfdde7ed644b30eabcf2fd4be7496b21b89b10e5c7a14def96'
4
- data.tar.gz: '0008b828658cbc5b3c787e773aa28649407c03940b1cc913142c50bcd7d3d188'
3
+ metadata.gz: efcfad7887472c241b0ffe9023f2ec6f81939bfb36c39122d1709ff1ded59863
4
+ data.tar.gz: fa28e9ad1bfd43e9291195514cf5fb7e0e2d89e949815c7ada233fa59a6a21a9
5
5
  SHA512:
6
- metadata.gz: 12ef53ecb61ebe05fab08cdc30b0a04d81122df35947ae4cc15d77e2481ec5c525e5362cdb278f8b559907b5c3f146f0f37edc0909d60556d897f279c5c621c2
7
- data.tar.gz: fa94922e97bd9a5760142a2070560f6ca66b63f45667b37098dc86e8012e97f2cfd446f44bc330df04f0d3063aa5b514d38ec2ff1b0757a0498320ac7663d2df
6
+ metadata.gz: 92fe0a0c7c505a2e0131b6b58d9496ed0ca3cff7db904b34f59abc975d50c0b9389b53c12c5833c71679178676e8e9b0597cf09891b0a4314106b368102d0e81
7
+ data.tar.gz: c09988ba8ee0d8e2fafd32391fee2597b66c5da931c7f50b4035590afe9b7265f5eb5ead9cca7de01172a3ca460d94c8f2d13d4037def410b91670b086889bd0
@@ -131,7 +131,7 @@ class QdmPatient < Mustache
131
131
 
132
132
  # Checks to see if the result is a DateTime value, String, or Numeric
133
133
  begin
134
- DateTime.parse(self['result'])
134
+ DateTime.iso8601(self['result'])
135
135
  rescue ArgumentError, TypeError
136
136
  # If the value is not numeric, just print out the result
137
137
  self['result'].is_a?(Numeric) ? trimed_value(self['result']) : self['result']
@@ -8,14 +8,20 @@
8
8
  <!-- QDM-based QRDA templateId -->
9
9
  <templateId root="2.16.840.1.113883.10.20.24.1.2" extension="2021-08-01"/>
10
10
  <!-- CMS QRDA templateId -->
11
- {{#ry2026_submission?}}
12
- <!-- QRDA Category I Report - CMS (V9) -->
13
- <templateId root="2.16.840.1.113883.10.20.24.1.3" extension="2025-03-01"/>
14
- {{/ry2026_submission?}}
15
- {{^ry2026_submission?}}
16
- <!-- QRDA Category I Report - CMS (V8) -->
17
- <templateId root="2.16.840.1.113883.10.20.24.1.3" extension="2022-02-01"/>
18
- {{/ry2026_submission?}}
11
+ {{#ry2027_submission?}}
12
+ <!-- QRDA Category I Report - CMS (V10) -->
13
+ <templateId root="2.16.840.1.113883.10.20.24.1.3" extension="2026-05-01"/>
14
+ {{/ry2027_submission?}}
15
+ {{^ry2027_submission?}}
16
+ {{#ry2026_submission?}}
17
+ <!-- QRDA Category I Report - CMS (V9) -->
18
+ <templateId root="2.16.840.1.113883.10.20.24.1.3" extension="2025-03-01"/>
19
+ {{/ry2026_submission?}}
20
+ {{^ry2026_submission?}}
21
+ <!-- QRDA Category I Report - CMS (V8) -->
22
+ <templateId root="2.16.840.1.113883.10.20.24.1.3" extension="2022-02-01"/>
23
+ {{/ry2026_submission?}}
24
+ {{/ry2027_submission?}}
19
25
  <!-- This is the globally unique identifier for this QRDA document -->
20
26
  <id root="{{random_id}}"/>
21
27
  <!-- QRDA document type code -->
@@ -21,14 +21,19 @@ class Qrda1R5 < Mustache
21
21
  @performance_period_end = options[:end_time]
22
22
  @submission_program = options[:submission_program]
23
23
  @ry2026_submission = options[:ry2026_submission]
24
+ @ry2027_submission = options[:ry2027_submission]
24
25
  @medicare_beneficiary_identifier = options[:medicare_beneficiary_identifier]
25
26
  @hicn = options[:hicn]
26
27
  @authoring_system = options[:authoring_system]
27
28
  end
28
29
 
29
- # use 2026 template ids if 2026 submission is specified as true, or if it unspecified
30
+ # use 2027 template ids if 2027 submission is specified as true, or if it unspecified
31
+ def ry2027_submission?
32
+ @ry2027_submission || @ry2027_submission.nil?
33
+ end
34
+
30
35
  def ry2026_submission?
31
- @ry2026_submission || @ry2026_submission.nil?
36
+ @ry2026_submission
32
37
  end
33
38
 
34
39
  def authoring_system
@@ -72,7 +72,7 @@ module Qrda
72
72
  result_value_as_string(self['result'])
73
73
  elsif self['result'].is_a? String
74
74
  begin
75
- DateTime.parse self['result']
75
+ DateTime.iso8601 self['result']
76
76
  "<value xsi:type=\"TS\" #{value_or_null_flavor(self['result'])}/>"
77
77
  rescue StandardError
78
78
  "<value xsi:type=\"ST\">#{self['result']}</value>"
@@ -173,11 +173,11 @@ module QRDA
173
173
  def extract_frequency_in_hours(parent_element, frequency_xpath)
174
174
  # Need to go get low, high and institutionspecified
175
175
  low = parent_element.at_xpath("#{frequency_xpath}/@value").value.to_i if parent_element.at_xpath("#{frequency_xpath}/@value")
176
- low = parent_element.at_xpath("#{frequency_xpath}/cda:period/cda:low/@value").value.to_i if parent_element.at_xpath("#{frequency_xpath}/cda:period/cda:low/@value")
176
+ low = parent_element.at_xpath("#{frequency_xpath}/cda:low/@value").value.to_i if parent_element.at_xpath("#{frequency_xpath}/cda:low/@value")
177
177
  unit = parent_element.at_xpath("#{frequency_xpath}/@unit").value if parent_element.at_xpath("#{frequency_xpath}/@unit")
178
- unit = parent_element.at_xpath("#{frequency_xpath}/cda:period/cda:low/@unit").value if parent_element.at_xpath("#{frequency_xpath}/cda:period/cda:low/@unit")
179
- high = parent_element.at_xpath("#{frequency_xpath}/cda:period/cda:high/@value").value.to_i if parent_element.at_xpath("#{frequency_xpath}/cda:period/cda:high/@value")
180
- institution_specified = parent_element.at_xpath("#{frequency_xpath}/@institutionSpecified") || false
178
+ unit = parent_element.at_xpath("#{frequency_xpath}/cda:low/@unit").value if parent_element.at_xpath("#{frequency_xpath}/cda:low/@unit")
179
+ high = parent_element.at_xpath("#{frequency_xpath}/cda:high/@value").value.to_i if parent_element.at_xpath("#{frequency_xpath}/cda:high/@value")
180
+ institution_specified = parent_element.at_xpath(frequency_xpath.to_s)&.parent&.at_xpath('@institutionSpecified')&.value == 'true'
181
181
  # Expected units are H (hours) and D (days)
182
182
  if unit && unit.upcase == 'D'
183
183
  low = low * 24 if low
@@ -217,7 +217,7 @@ module QRDA
217
217
  qrda_type = @entry_class.to_s.split("::")[1]
218
218
  @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}",
219
219
  location: value_element.path)
220
- return value_element.text
220
+ return Regexp.escape(value_element.text)
221
221
  end
222
222
  end
223
223
 
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: 4.1.5
4
+ version: 4.1.6
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: 2025-11-14 00:00:00.000000000 Z
11
+ date: 2026-06-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cqm-models