onc_certification_g10_test_kit 3.0.1 → 3.2.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/lib/inferno/terminology/expected_manifest.yml +36 -693
- data/lib/inferno/terminology/fhir_package_manager.rb +16 -14
- data/lib/inferno/terminology/loader.rb +24 -2
- data/lib/inferno/terminology/tasks/download_umls.rb +2 -1
- data/lib/inferno/terminology/tasks/expand_value_set_to_file.rb +1 -1
- data/lib/inferno/terminology/tasks/run_umls_jar.rb +2 -1
- data/lib/inferno/terminology/value_set.rb +58 -56
- data/lib/onc_certification_g10_test_kit/base_token_refresh_group.rb +2 -0
- data/lib/onc_certification_g10_test_kit/bulk_data_group_export_stu1.rb +2 -0
- data/lib/onc_certification_g10_test_kit/bulk_data_group_export_stu2.rb +1 -1
- data/lib/onc_certification_g10_test_kit/bulk_data_group_export_validation.rb +7 -4
- data/lib/onc_certification_g10_test_kit/bulk_export_validation_tester.rb +2 -11
- data/lib/onc_certification_g10_test_kit/configuration_checker.rb +22 -0
- data/lib/onc_certification_g10_test_kit/export_kick_off_performer.rb +3 -2
- data/lib/onc_certification_g10_test_kit/g10_options.rb +46 -0
- data/lib/onc_certification_g10_test_kit/incorrectly_permitted_tls_versions_messages_setup_test.rb +34 -0
- data/lib/onc_certification_g10_test_kit/limited_scope_grant_test.rb +3 -1
- data/lib/onc_certification_g10_test_kit/multi_patient_api_stu1.rb +11 -0
- data/lib/onc_certification_g10_test_kit/multi_patient_api_stu2.rb +10 -0
- data/lib/onc_certification_g10_test_kit/onc_program_procedure.yml +1502 -658
- data/lib/onc_certification_g10_test_kit/profile_selector.rb +34 -24
- data/lib/onc_certification_g10_test_kit/resource_access_test.rb +1 -2
- data/lib/onc_certification_g10_test_kit/restricted_resource_type_access_group.rb +2 -2
- data/lib/onc_certification_g10_test_kit/short_id_manager.rb +46 -0
- data/lib/onc_certification_g10_test_kit/short_id_map.yml +1536 -0
- data/lib/onc_certification_g10_test_kit/single_patient_api_group.rb +7 -0
- data/lib/onc_certification_g10_test_kit/single_patient_us_core_4_api_group.rb +7 -0
- data/lib/onc_certification_g10_test_kit/single_patient_us_core_5_api_group.rb +9 -2
- data/lib/onc_certification_g10_test_kit/smart_app_launch_invalid_aud_group.rb +2 -2
- data/lib/onc_certification_g10_test_kit/smart_ehr_practitioner_app_group.rb +61 -6
- data/lib/onc_certification_g10_test_kit/smart_invalid_token_refresh_test.rb +37 -0
- data/lib/onc_certification_g10_test_kit/smart_limited_app_group.rb +3 -2
- data/lib/onc_certification_g10_test_kit/smart_scopes_test.rb +4 -2
- data/lib/onc_certification_g10_test_kit/smart_standalone_patient_app_group.rb +60 -4
- data/lib/onc_certification_g10_test_kit/unrestricted_resource_type_access_group.rb +7 -4
- data/lib/onc_certification_g10_test_kit/version.rb +1 -1
- data/lib/onc_certification_g10_test_kit/visual_inspection_and_attestations_group.rb +88 -2
- data/lib/onc_certification_g10_test_kit/well_known_capabilities_test.rb +4 -2
- data/lib/onc_certification_g10_test_kit.rb +25 -20
- metadata +15 -10
@@ -1,5 +1,9 @@
|
|
1
|
+
require_relative 'g10_options'
|
2
|
+
|
1
3
|
module ONCCertificationG10TestKit
|
2
4
|
module ProfileSelector
|
5
|
+
include G10Options
|
6
|
+
|
3
7
|
def extract_profile(profile)
|
4
8
|
case profile
|
5
9
|
when 'Medication'
|
@@ -28,8 +32,8 @@ module ONCCertificationG10TestKit
|
|
28
32
|
def select_profile(resource) # rubocop:disable Metrics/CyclomaticComplexity
|
29
33
|
case resource.resourceType
|
30
34
|
when 'Condition'
|
31
|
-
case
|
32
|
-
when
|
35
|
+
case us_core_version
|
36
|
+
when US_CORE_5
|
33
37
|
if resource_contains_category(resource, 'encounter-diagnosis', 'http://terminology.hl7.org/CodeSystem/condition-category')
|
34
38
|
extract_profile('ConditionEncounterDiagnosis')
|
35
39
|
elsif resource_contains_category(resource, 'problem-list-item',
|
@@ -56,28 +60,28 @@ module ONCCertificationG10TestKit
|
|
56
60
|
return extract_profile('PulseOximetry') if observation_contains_code(resource, '59408-5')
|
57
61
|
|
58
62
|
if observation_contains_code(resource, '8289-1')
|
59
|
-
case
|
60
|
-
when
|
63
|
+
case us_core_version
|
64
|
+
when US_CORE_3
|
61
65
|
return extract_profile('HeadCircumference')
|
62
66
|
else
|
63
67
|
return extract_profile('HeadCircumferencePercentile')
|
64
68
|
end
|
65
69
|
end
|
66
70
|
|
67
|
-
|
71
|
+
if observation_contains_code(resource, '9843-4') && !using_us_core_3?
|
72
|
+
return extract_profile('HeadCircumference')
|
73
|
+
end
|
68
74
|
|
69
75
|
# FHIR Vital Signs profiles: https://www.hl7.org/fhir/observation-vitalsigns.html
|
70
76
|
# Vital Signs Panel, Oxygen Saturation are not required by USCDI
|
71
77
|
# Body Mass Index is replaced by :pediatric_bmi_age Profile
|
72
78
|
# Systolic Blood Pressure, Diastolic Blood Pressure are covered by :blood_pressure Profile
|
73
79
|
# Head Circumference is replaced by US Core Head Occipital-frontal Circumference Percentile Profile
|
74
|
-
if observation_contains_code(resource, '39156-5') &&
|
75
|
-
return extract_profile('Bmi')
|
76
|
-
end
|
80
|
+
return extract_profile('Bmi') if observation_contains_code(resource, '39156-5') && !using_us_core_3?
|
77
81
|
|
78
82
|
if observation_contains_code(resource, '85354-9')
|
79
|
-
case
|
80
|
-
when
|
83
|
+
case us_core_version
|
84
|
+
when US_CORE_3
|
81
85
|
return extract_profile('Bp')
|
82
86
|
else
|
83
87
|
return extract_profile('BloodPressure')
|
@@ -85,8 +89,8 @@ module ONCCertificationG10TestKit
|
|
85
89
|
end
|
86
90
|
|
87
91
|
if observation_contains_code(resource, '8302-2')
|
88
|
-
case
|
89
|
-
when
|
92
|
+
case us_core_version
|
93
|
+
when US_CORE_3
|
90
94
|
return extract_profile('Bodyheight')
|
91
95
|
else
|
92
96
|
return extract_profile('BodyHeight')
|
@@ -94,8 +98,8 @@ module ONCCertificationG10TestKit
|
|
94
98
|
end
|
95
99
|
|
96
100
|
if observation_contains_code(resource, '8310-5')
|
97
|
-
case
|
98
|
-
when
|
101
|
+
case us_core_version
|
102
|
+
when US_CORE_3
|
99
103
|
return extract_profile('Bodytemp')
|
100
104
|
else
|
101
105
|
return extract_profile('BodyTemperature')
|
@@ -103,8 +107,8 @@ module ONCCertificationG10TestKit
|
|
103
107
|
end
|
104
108
|
|
105
109
|
if observation_contains_code(resource, '29463-7')
|
106
|
-
case
|
107
|
-
when
|
110
|
+
case us_core_version
|
111
|
+
when US_CORE_3
|
108
112
|
return extract_profile('Bodyweight')
|
109
113
|
else
|
110
114
|
return extract_profile('BodyWeight')
|
@@ -112,8 +116,8 @@ module ONCCertificationG10TestKit
|
|
112
116
|
end
|
113
117
|
|
114
118
|
if observation_contains_code(resource, '8867-4')
|
115
|
-
case
|
116
|
-
when
|
119
|
+
case us_core_version
|
120
|
+
when US_CORE_3
|
117
121
|
return extract_profile('Heartrate')
|
118
122
|
else
|
119
123
|
return extract_profile('HeartRate')
|
@@ -121,31 +125,37 @@ module ONCCertificationG10TestKit
|
|
121
125
|
end
|
122
126
|
|
123
127
|
if observation_contains_code(resource, '9279-1')
|
124
|
-
case
|
125
|
-
when
|
128
|
+
case us_core_version
|
129
|
+
when US_CORE_3
|
126
130
|
return extract_profile('Resprate')
|
127
131
|
else
|
128
132
|
return extract_profile('RespiratoryRate')
|
129
133
|
end
|
130
134
|
end
|
131
135
|
|
132
|
-
if
|
136
|
+
if using_us_core_5? &&
|
133
137
|
resource_contains_category(
|
134
138
|
resource, 'clinical-test', 'http://terminology.hl7.org/CodeSystem/observation-category'
|
135
139
|
)
|
136
140
|
return extract_profile('ObservationClinicalTest')
|
137
141
|
end
|
138
142
|
|
139
|
-
if
|
143
|
+
if using_us_core_5? && observation_contains_code(resource, '76690-7')
|
140
144
|
return extract_profile('ObservationSexualOrientation')
|
141
145
|
end
|
142
146
|
|
143
|
-
if
|
147
|
+
if using_us_core_5? &&
|
144
148
|
resource_contains_category(resource, 'social-history',
|
145
149
|
'http://terminology.hl7.org/CodeSystem/observation-category')
|
146
150
|
return extract_profile('ObservationSocialHistory')
|
147
151
|
end
|
148
152
|
|
153
|
+
if using_us_core_5? &&
|
154
|
+
resource_contains_category(resource, 'imaging',
|
155
|
+
'http://terminology.hl7.org/CodeSystem/observation-category')
|
156
|
+
return extract_profile('ObservationImaging')
|
157
|
+
end
|
158
|
+
|
149
159
|
# We will simply match all Observations of category "survey" to SDOH,
|
150
160
|
# and do not look at the category "sdoh". US Core spec team says that
|
151
161
|
# support for the "sdoh" category is limited, and the validation rules
|
@@ -157,7 +167,7 @@ module ONCCertificationG10TestKit
|
|
157
167
|
# `resource_contains_category(resource, 'sdoh',
|
158
168
|
# 'http://terminology.hl7.org/CodeSystem/observation-category') &&`
|
159
169
|
# along with a specific extract_profile('ObservationSurvey') to catch non-sdoh.
|
160
|
-
if
|
170
|
+
if using_us_core_5? &&
|
161
171
|
resource_contains_category(resource, 'survey',
|
162
172
|
'http://terminology.hl7.org/CodeSystem/observation-category')
|
163
173
|
|
@@ -74,10 +74,9 @@ module ONCCertificationG10TestKit
|
|
74
74
|
body of the response.
|
75
75
|
)
|
76
76
|
begin
|
77
|
+
assert_valid_json(response[:body])
|
77
78
|
parsed_body = JSON.parse(response[:body])
|
78
79
|
assert parsed_body['resourceType'] == 'OperationOutcome', error_message
|
79
|
-
rescue JSON::ParserError
|
80
|
-
assert false, error_message
|
81
80
|
end
|
82
81
|
fhir_search(
|
83
82
|
resource_type,
|
@@ -323,7 +323,7 @@ module ONCCertificationG10TestKit
|
|
323
323
|
)
|
324
324
|
id :g10_encounter_restricted_access
|
325
325
|
|
326
|
-
required_suite_options
|
326
|
+
required_suite_options G10Options::US_CORE_5_REQUIREMENT
|
327
327
|
|
328
328
|
def resource_group
|
329
329
|
USCoreTestKit::USCoreV501::EncounterGroup
|
@@ -343,7 +343,7 @@ module ONCCertificationG10TestKit
|
|
343
343
|
)
|
344
344
|
id :g10_service_request_restricted_access
|
345
345
|
|
346
|
-
required_suite_options
|
346
|
+
required_suite_options G10Options::US_CORE_5_REQUIREMENT
|
347
347
|
|
348
348
|
def resource_group
|
349
349
|
USCoreTestKit::USCoreV501::ServiceRequestGroup
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module ONCCertificationG10TestKit
|
2
|
+
# @private
|
3
|
+
# This module ensures that short test ids don't change
|
4
|
+
module ShortIDManager
|
5
|
+
class << self
|
6
|
+
def all_children(runnable)
|
7
|
+
runnable
|
8
|
+
.children
|
9
|
+
.flat_map { |child| [child] + all_children(child) }
|
10
|
+
end
|
11
|
+
|
12
|
+
def short_id_file_path
|
13
|
+
File.join(__dir__, 'short_id_map.yml')
|
14
|
+
end
|
15
|
+
|
16
|
+
def short_id_map
|
17
|
+
@short_id_map ||= YAML.load_file(short_id_file_path)
|
18
|
+
end
|
19
|
+
|
20
|
+
def assign_short_ids
|
21
|
+
all_children(G10CertificationSuite).each do |runnable|
|
22
|
+
short_id = short_id_map.fetch(runnable.id)
|
23
|
+
runnable.define_singleton_method(:short_id) do
|
24
|
+
short_id
|
25
|
+
end
|
26
|
+
rescue KeyError
|
27
|
+
Inferno::Application['logger'].warn("No short id defined for #{runnable.id}")
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
### The methods below are only for creating an initial list of short ids
|
32
|
+
|
33
|
+
# Run this in an inferno console to save the current short ids
|
34
|
+
def save_current_short_id_map
|
35
|
+
File.write(short_id_file_path, current_short_id_map.to_yaml)
|
36
|
+
end
|
37
|
+
|
38
|
+
def current_short_id_map
|
39
|
+
@current_short_id_map ||=
|
40
|
+
all_children(G10CertificationSuite).each_with_object({}) do |runnable, mapping|
|
41
|
+
mapping[runnable.id] = runnable.short_id
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|