onc_certification_g10_test_kit 3.3.0 → 3.3.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/inferno/terminology/terminology_validation.rb +9 -6
- data/lib/onc_certification_g10_test_kit/profile_selector.rb +1 -1
- data/lib/onc_certification_g10_test_kit/smart_scopes_test.rb +1 -1
- data/lib/onc_certification_g10_test_kit/terminology_binding_validator.rb +27 -1
- data/lib/onc_certification_g10_test_kit/token_revocation_group.rb +1 -1
- data/lib/onc_certification_g10_test_kit/version.rb +1 -1
- data/lib/onc_certification_g10_test_kit.rb +12 -3
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9bb1416b5f4a895760df48a2c49468074e882651237b8b76ebc81434b16df44d
|
4
|
+
data.tar.gz: '09d90f9db1f4c5be41a8e7705c5b2809f81da0bb377bcc4c4bde14e5d168943e'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3bc7515b56f5680e57f7ef716b34ecf77b04abfdba314bc12d9c8a51a85b31da9a4da8895a32093431d52a18af36f7ca0cb9bb6fa2b2ff2f597f45e42442b151
|
7
|
+
data.tar.gz: d37b1c5641703be96934aeaa96444be227c7eab3653c888dcc37dfd70a41f9b44383a19efb3898337f73a93552ad48c1166b9ddffcef9eb10b8a0f87a493823f
|
@@ -4,27 +4,30 @@ require_relative '../terminology/bcp_13'
|
|
4
4
|
module Inferno
|
5
5
|
module Terminology
|
6
6
|
module TerminologyValidation
|
7
|
-
#
|
7
|
+
# CodeSystems/ValueSets to "preprocess" prior to validation, and the
|
8
|
+
# function to use
|
8
9
|
PREPROCESS_FUNCS = {
|
9
|
-
'urn:ietf:bcp:13' => BCP13.method(:preprocess_code)
|
10
|
+
'urn:ietf:bcp:13' => BCP13.method(:preprocess_code),
|
11
|
+
'http://hl7.org/fhir/ValueSet/mimetypes' => BCP13.method(:preprocess_code)
|
10
12
|
}.freeze
|
11
13
|
|
12
14
|
def validators_repo
|
13
15
|
@validators_repo ||= Repositories::Validators.new
|
14
16
|
end
|
15
17
|
|
16
|
-
# This function accepts a valueset URL, code, and optional system, and
|
17
|
-
# if the code or code/system combination is valid for the
|
18
|
-
# represented by that URL
|
18
|
+
# This function accepts a valueset URL, code, and optional system, and
|
19
|
+
# returns true if the code or code/system combination is valid for the
|
20
|
+
# valueset represented by that URL
|
19
21
|
#
|
20
22
|
# @param String value_set_url the URL for the valueset to validate against
|
21
23
|
# @param String code the code to validate against the valueset
|
22
|
-
# @param String system an optional codesystem to validate against.
|
24
|
+
# @param String system an optional codesystem to validate against.
|
23
25
|
# @return Boolean whether the code or code/system is in the valueset
|
24
26
|
def validate_code(code:, value_set_url: nil, system: nil)
|
25
27
|
# Before we validate the code, see if there's any preprocessing steps we have to do
|
26
28
|
# To get the code "ready" for validation
|
27
29
|
code = PREPROCESS_FUNCS[system].call(code) if PREPROCESS_FUNCS[system]
|
30
|
+
code = PREPROCESS_FUNCS[value_set_url].call(code) if PREPROCESS_FUNCS[value_set_url]
|
28
31
|
|
29
32
|
# Get the valueset from the url. Redundant if the 'system' is not nil,
|
30
33
|
# but allows us to throw a better error if the valueset isn't known by Inferno
|
@@ -38,7 +38,7 @@ module ONCCertificationG10TestKit
|
|
38
38
|
extract_profile('ConditionEncounterDiagnosis')
|
39
39
|
elsif resource_contains_category(resource, 'problem-list-item',
|
40
40
|
'http://terminology.hl7.org/CodeSystem/condition-category') ||
|
41
|
-
resource_contains_category(resource, 'health-concern', 'http://
|
41
|
+
resource_contains_category(resource, 'health-concern', 'http://hl7.org/fhir/us/core/CodeSystem/condition-category')
|
42
42
|
extract_profile('ConditionProblemsHealthConcerns')
|
43
43
|
end
|
44
44
|
else
|
@@ -41,7 +41,7 @@ module ONCCertificationG10TestKit
|
|
41
41
|
].freeze
|
42
42
|
|
43
43
|
V5_VALID_RESOURCE_TYPES =
|
44
|
-
(VALID_RESOURCE_TYPES + ['ServiceRequest', 'QuestionnaireResponse']).freeze
|
44
|
+
(VALID_RESOURCE_TYPES + ['ServiceRequest', 'QuestionnaireResponse', 'Media']).freeze
|
45
45
|
|
46
46
|
PATIENT_COMPARTMENT_RESOURCE_TYPES = [
|
47
47
|
'*',
|
@@ -19,11 +19,37 @@ module ONCCertificationG10TestKit
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def validate
|
22
|
-
|
22
|
+
# Handle special case due to required binding on a slice
|
23
|
+
if binding_definition[:required_binding_slice]
|
24
|
+
validate_required_binding_slice
|
25
|
+
else
|
26
|
+
add_error(element_with_invalid_binding) if element_with_invalid_binding.present? # rubocop:disable Style/IfInsideElse
|
27
|
+
end
|
23
28
|
|
24
29
|
validation_messages
|
25
30
|
end
|
26
31
|
|
32
|
+
def validate_required_binding_slice
|
33
|
+
valid_binding =
|
34
|
+
find_a_value_at(path_source, binding_definition[:path]) do |element|
|
35
|
+
!invalid_binding?(element)
|
36
|
+
end
|
37
|
+
|
38
|
+
return if valid_binding.present?
|
39
|
+
|
40
|
+
system = binding_definition[:system].presence || 'the declared Value Set'
|
41
|
+
|
42
|
+
error_message = %(
|
43
|
+
#{resource_type}/#{resource.id} at #{resource_type}.#{binding_definition[:path]}
|
44
|
+
does not contain a valid code from #{system}.
|
45
|
+
)
|
46
|
+
|
47
|
+
validation_messages << {
|
48
|
+
type: 'error',
|
49
|
+
message: error_message
|
50
|
+
}
|
51
|
+
end
|
52
|
+
|
27
53
|
def path_source
|
28
54
|
return resource if binding_definition[:extensions].blank?
|
29
55
|
|
@@ -45,7 +45,7 @@ module ONCCertificationG10TestKit
|
|
45
45
|
|
46
46
|
run do
|
47
47
|
assert token_revocation_attestation == 'true',
|
48
|
-
'Health IT Module did not demonstrate
|
48
|
+
'Health IT Module did not demonstrate the ability to revoke tokens.'
|
49
49
|
pass token_revocation_notes if token_revocation_notes.present?
|
50
50
|
end
|
51
51
|
end
|
@@ -102,13 +102,22 @@ module ONCCertificationG10TestKit
|
|
102
102
|
end
|
103
103
|
next if metadata.nil?
|
104
104
|
|
105
|
-
|
105
|
+
validation_messages = if resource.instance_of?(FHIR::Provenance)
|
106
|
+
USCoreTestKit::ProvenanceValidator.validate(resource)
|
107
|
+
else
|
108
|
+
[]
|
109
|
+
end
|
110
|
+
|
111
|
+
terminology_validation_messages = metadata.bindings
|
106
112
|
.select { |binding_definition| binding_definition[:strength] == 'required' }
|
107
113
|
.flat_map do |binding_definition|
|
108
114
|
TerminologyBindingValidator.validate(resource, binding_definition)
|
109
|
-
|
110
|
-
|
115
|
+
rescue Inferno::UnknownValueSetException, Inferno::UnknownCodeSystemException => e
|
116
|
+
{ type: 'warning', message: e.message }
|
111
117
|
end.compact
|
118
|
+
|
119
|
+
validation_messages.concat(terminology_validation_messages)
|
120
|
+
validation_messages
|
112
121
|
end
|
113
122
|
end
|
114
123
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: onc_certification_g10_test_kit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.3.
|
4
|
+
version: 3.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stephen MacVicar
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-12-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bloomer
|
@@ -142,14 +142,14 @@ dependencies:
|
|
142
142
|
requirements:
|
143
143
|
- - '='
|
144
144
|
- !ruby/object:Gem::Version
|
145
|
-
version: 0.4.
|
145
|
+
version: 0.4.3
|
146
146
|
type: :runtime
|
147
147
|
prerelease: false
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
150
|
- - '='
|
151
151
|
- !ruby/object:Gem::Version
|
152
|
-
version: 0.4.
|
152
|
+
version: 0.4.3
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
154
|
name: database_cleaner-sequel
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|