davinci_pdex_test_kit 0.10.0 → 0.10.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/davinci_pdex_test_kit/mock_server.rb +42 -13
- data/lib/davinci_pdex_test_kit/pdex_payer_client/client_validation_test.rb +13 -50
- data/lib/davinci_pdex_test_kit/pdex_payer_client/clinical_data_request_tests/initial_scratch_storing.rb +7 -9
- data/lib/davinci_pdex_test_kit/pdex_payer_client/clinical_data_request_tests/initial_wait_test.rb +2 -0
- data/lib/davinci_pdex_test_kit/pdex_payer_client_suite.rb +15 -5
- data/lib/davinci_pdex_test_kit/pdex_payer_server/{coverage_to_link_has_minimal_data_test.rb → coverage_to_link_minimal_data_validation.rb} +28 -3
- data/lib/davinci_pdex_test_kit/pdex_payer_server/{coverage_to_link_must_support_test.rb → coverage_to_link_must_support_validation.rb} +28 -2
- data/lib/davinci_pdex_test_kit/pdex_payer_server/explanation_of_benefit_group.rb +2 -2
- data/lib/davinci_pdex_test_kit/pdex_payer_server/export_patient_group.rb +8 -33
- data/lib/davinci_pdex_test_kit/pdex_payer_server/{abstract_member_match_request_local_references_test.rb → member_match_request_local_references_validation.rb} +31 -5
- data/lib/davinci_pdex_test_kit/pdex_payer_server/{abstract_member_match_request_conformance_test.rb → member_match_request_profile_validation.rb} +30 -3
- data/lib/davinci_pdex_test_kit/pdex_payer_server/multiple_member_matches_group.rb +10 -13
- data/lib/davinci_pdex_test_kit/pdex_payer_server/no_member_matches_group.rb +10 -15
- data/lib/davinci_pdex_test_kit/pdex_payer_server/patient_operation_in_capability_statement_validation.rb +59 -0
- data/lib/davinci_pdex_test_kit/pdex_payer_server/{workflow_clinical_data.rb → workflow_clinical_data_group.rb} +4 -4
- data/lib/davinci_pdex_test_kit/pdex_payer_server/{workflow_everything.rb → workflow_everything_group.rb} +10 -24
- data/lib/davinci_pdex_test_kit/pdex_payer_server/{workflow_export.rb → workflow_export_group.rb} +2 -2
- data/lib/davinci_pdex_test_kit/pdex_payer_server/{workflow_member_match.rb → workflow_member_match_group.rb} +23 -36
- data/lib/davinci_pdex_test_kit/pdex_payer_server_suite.rb +13 -12
- data/lib/davinci_pdex_test_kit/tags.rb +3 -1
- data/lib/davinci_pdex_test_kit/urls.rb +14 -4
- data/lib/davinci_pdex_test_kit/version.rb +1 -1
- metadata +25 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d7e3411ffd5e3404e6a91b2717f1bef55706856f3b2ff240b285305aa171f308
|
4
|
+
data.tar.gz: 46503fe353d59752b9c1fb607e7bfd9ae5c66535a4a70e3f21f16ddeac2049fb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1de8d2ae27f2250c259517e878b8d5b45239525f09b7a6091fd317dd4dfa8172291829882c2eb7bfb5fe509f53d50034acdbec6c700a969f6468ee98daacab3b
|
7
|
+
data.tar.gz: 89898d10b981dae40d94f949b1b95a6d19e65c8fe2f21e7ff6155e436a106854de78803022a48c1c2a05f504ad20e64d7c85ea06a596d9daf331dd6a1e04c391
|
@@ -17,7 +17,7 @@ module DaVinciPDexTestKit
|
|
17
17
|
@server_proxy ||= Faraday.new(
|
18
18
|
url: ENV.fetch('FHIR_REFERENCE_SERVER'),
|
19
19
|
params: {},
|
20
|
-
headers: {'Content-Type' => 'application/json', 'Authorization' => 'Bearer SAMPLE_TOKEN'},
|
20
|
+
headers: {'Content-Type' => 'application/json', 'Authorization' => 'Bearer SAMPLE_TOKEN', 'Host' => ENV.fetch('HOST_HEADER')},
|
21
21
|
)
|
22
22
|
end
|
23
23
|
|
@@ -60,16 +60,38 @@ module DaVinciPDexTestKit
|
|
60
60
|
request.response_body = replace_bundle_urls(FHIR.from_contents(response.body)).to_json
|
61
61
|
end
|
62
62
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
63
|
+
def export_response(request, test = nil, test_result = nil)
|
64
|
+
headers_as_hash = request.request_headers.map { |header| {"#{header.name}": header.value}}.reduce({}) { |reduced, curr| reduced.merge(curr)}
|
65
|
+
response = server_proxy.get do |req|
|
66
|
+
req.url 'Group/pdex-Group/$export' #TODO: change from static response
|
67
|
+
req.headers = headers_as_hash.merge(server_proxy.headers)
|
68
|
+
end
|
69
|
+
request.status = response.status
|
70
|
+
request.response_headers = response.env.response_headers
|
71
|
+
request.response_header("content-location").value.gsub!(/(.*)\?/, "#{new_link}/$export-poll-status?")
|
72
|
+
request.response_body = response.body
|
73
|
+
end
|
74
|
+
|
75
|
+
def export_status_response(request, test = nil, test_result = nil)
|
76
|
+
headers_as_hash = request.request_headers.map { |header| {"#{header.name}": header.value}}.reduce({}) { |reduced, curr| reduced.merge(curr)}
|
77
|
+
response = server_proxy.get do |req|
|
78
|
+
req.url '$export-poll-status'
|
79
|
+
req.params = request.query_parameters
|
80
|
+
req.headers = headers_as_hash.merge(server_proxy.headers)
|
81
|
+
end
|
82
|
+
request.status = response.status
|
83
|
+
request.response_headers = response.env.response_headers
|
84
|
+
request.response_body = response.status.to_i == 200 ? replace_export_urls(JSON.parse(response.body)).to_json : response.body
|
85
|
+
request.response_header("content-length").value = request.response_body.length
|
86
|
+
end
|
87
|
+
|
88
|
+
def binary_read_response(request, test = nil, test_result = nil)
|
89
|
+
binary_id = request.url.split('/').last
|
90
|
+
response = server_proxy.get('Binary/'+binary_id)
|
91
|
+
request.status = response.status
|
92
|
+
request.response_headers = response.headers
|
93
|
+
request.response_body = response.body
|
94
|
+
end
|
73
95
|
|
74
96
|
def member_match_response(request, test = nil, test_result = nil)
|
75
97
|
#remove token from request as well
|
@@ -170,7 +192,7 @@ module DaVinciPDexTestKit
|
|
170
192
|
|
171
193
|
def replace_bundle_urls(bundle)
|
172
194
|
reference_server_base = ENV.fetch('FHIR_REFERENCE_SERVER')
|
173
|
-
bundle
|
195
|
+
bundle&.link.map! {|link| {relation: link.relation, url: link.url.gsub(reference_server_base, new_link)}}
|
174
196
|
bundle&.entry&.map! do |bundled_resource|
|
175
197
|
{fullUrl: bundled_resource.fullUrl.gsub(reference_server_base, new_link),
|
176
198
|
resource: bundled_resource.resource,
|
@@ -180,8 +202,15 @@ module DaVinciPDexTestKit
|
|
180
202
|
bundle
|
181
203
|
end
|
182
204
|
|
205
|
+
def replace_export_urls(export_status_output)
|
206
|
+
reference_server_base = ENV.fetch('FHIR_REFERENCE_SERVER')
|
207
|
+
export_status_output['output'].map! { |binary| {type: binary["type"], url: binary["url"].gsub(reference_server_base, new_link)} }
|
208
|
+
export_status_output['request'] = new_link + '/Patient/$export'
|
209
|
+
export_status_output
|
210
|
+
end
|
211
|
+
|
183
212
|
def new_link
|
184
|
-
"#{Inferno::Application['base_url']}
|
213
|
+
"#{Inferno::Application['base_url']}\/custom\/pdex_payer_client\/fhir"
|
185
214
|
end
|
186
215
|
|
187
216
|
# @private
|
@@ -14,54 +14,13 @@ module DaVinciPDexTestKit
|
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
# ndjson_list = JSON.parse(export_payload)
|
21
|
-
# request_resources = ndjson_list['output'].map do |resource_binary|
|
22
|
-
# retrieved_resources = Faraday.new(
|
23
|
-
# url: resource_binary['url'],
|
24
|
-
# headers: {'Content-Type' => 'application/json',
|
25
|
-
# 'Authorization' => 'Bearer SAMPLE_TOKEN'}
|
26
|
-
# ).get
|
27
|
-
# connect_bundle(retrieved_resources.env.response_body)
|
28
|
-
# end
|
29
|
-
# puts request_resources
|
30
|
-
# request_resources.flatten
|
31
|
-
# else
|
32
|
-
# nil
|
33
|
-
# end
|
34
|
-
# end
|
35
|
-
|
36
|
-
# def connect_bundle(export_binary)
|
37
|
-
# export_binary.split(/(?<=}\n)(?={)/).map { |str| FHIR.from_contents(str)}
|
38
|
-
# end
|
39
|
-
|
40
|
-
# def collect_export_payload
|
41
|
-
# url = export_request&.response_header('content-location')&.value
|
42
|
-
# attempts = 0
|
43
|
-
# return nil if url.nil?
|
44
|
-
# while attempts < 5
|
45
|
-
# request_attempt = Faraday.new(
|
46
|
-
# url: url,
|
47
|
-
# headers: {'Content-Type' => 'application/json',
|
48
|
-
# 'Authorization' => 'Bearer SAMPLE_TOKEN',
|
49
|
-
# 'Prefer' => 'respond-async',
|
50
|
-
# 'Accept' => 'application/fhir+json'}
|
51
|
-
# ).get
|
52
|
-
# if request_attempt.status != 200
|
53
|
-
# attempts += 1
|
54
|
-
# sleep(2)
|
55
|
-
# else
|
56
|
-
# return request_attempt.env.response_body
|
57
|
-
# end
|
58
|
-
# end
|
59
|
-
# return nil
|
60
|
-
# end
|
17
|
+
def connect_bundle(export_binary)
|
18
|
+
export_binary.split(/(?<=}\n)(?={)/).map { |str| FHIR.from_contents(str)}
|
19
|
+
end
|
61
20
|
|
62
|
-
|
63
|
-
|
64
|
-
|
21
|
+
def export_resources
|
22
|
+
@export_resources ||= (load_tagged_requests(BINARY_TAG).map { |binary_read| binary_read.response_body.split("\n") }.flatten).map { |resource_in_binary| FHIR.from_contents(resource_in_binary)}
|
23
|
+
end
|
65
24
|
|
66
25
|
def previous_clinical_data_requests
|
67
26
|
@previous_clinical_data_requests ||= load_tagged_requests(SUBMIT_TAG) + [everything_request].compact
|
@@ -75,9 +34,13 @@ module DaVinciPDexTestKit
|
|
75
34
|
@member_match_request ||= load_tagged_requests(MEMBER_MATCH_TAG).first
|
76
35
|
end
|
77
36
|
|
78
|
-
|
79
|
-
|
80
|
-
|
37
|
+
def export_request
|
38
|
+
@export_request ||= load_tagged_requests(EXPORT_TAG).first
|
39
|
+
end
|
40
|
+
|
41
|
+
def export_status_request
|
42
|
+
@export_status_request ||= load_tagged_requests(EXPORT_STATUS_TAG).first
|
43
|
+
end
|
81
44
|
|
82
45
|
# def patient_id_from_match_request
|
83
46
|
# @patient_id_from_match_request ||= member_match_request ? "999" : nil #TODO: Change from static response
|
@@ -17,15 +17,13 @@ module DaVinciPDexTestKit
|
|
17
17
|
scratch[resource.resourceType.to_sym] |= [resource]
|
18
18
|
end
|
19
19
|
end
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
# info "Found an $export request, but no resources found. It may not have had enough time to build"
|
28
|
-
# end
|
20
|
+
if !export_resources.empty?
|
21
|
+
info "Attempted an $export request"
|
22
|
+
export_resources.each do |resource|
|
23
|
+
scratch[resource.resourceType.to_sym] ||= []
|
24
|
+
scratch[resource.resourceType.to_sym] |= [resource]
|
25
|
+
end
|
26
|
+
end
|
29
27
|
if everything_request
|
30
28
|
info "Attempted an $everything request"
|
31
29
|
end
|
data/lib/davinci_pdex_test_kit/pdex_payer_client/clinical_data_request_tests/initial_wait_test.rb
CHANGED
@@ -19,6 +19,8 @@ module DaVinciPDexTestKit
|
|
19
19
|
Submit PDex requests via at least one of the following methods:
|
20
20
|
* Single Resource API: `#{submit_url}`, with `:endpoint` replaced with the endpoint you want to reach
|
21
21
|
* $everything method: `#{everything_url}`, with `:patient` replaced with the patient you are matching
|
22
|
+
* $export method: `#{export_url}`, see workflow process at the [Bulk Data IG](https://hl7.org/fhir/uv/bulkdata/STU2/)
|
23
|
+
* $export-poll-status: `#{export_status_url}`, then continue to make reads from the binaries if a payload is delivered
|
22
24
|
|
23
25
|
and [click here](#{resume_clinical_data_url}?token=#{access_token}) when done.
|
24
26
|
)
|
@@ -88,21 +88,31 @@ module DaVinciPDexTestKit
|
|
88
88
|
resumes: method(:test_resumes?) do |request|
|
89
89
|
PDexPayerClientSuite.extract_bearer_token(request)
|
90
90
|
end
|
91
|
-
|
91
|
+
|
92
92
|
record_response_route :get, SUBMIT_PATH, SUBMIT_TAG, method(:claim_response),
|
93
93
|
resumes: method(:test_resumes?) do |request|
|
94
94
|
PDexPayerClientSuite.extract_bearer_token(request)
|
95
95
|
end
|
96
96
|
|
97
|
+
record_response_route :get, BINARY_PATH, BINARY_TAG, method(:binary_read_response),
|
98
|
+
resumes: method(:test_resumes?) do |request|
|
99
|
+
PDexPayerClientSuite.extract_bearer_token(request)
|
100
|
+
end
|
101
|
+
|
97
102
|
record_response_route :get, EVERYTHING_PATH, EVERYTHING_TAG, method(:everything_response),
|
98
103
|
resumes: method(:test_resumes?) do |request|
|
99
104
|
PDexPayerClientSuite.extract_bearer_token(request)
|
100
105
|
end
|
101
106
|
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
107
|
+
record_response_route :get, EXPORT_PATH, EXPORT_TAG, method(:export_response),
|
108
|
+
resumes: method(:test_resumes?) do |request|
|
109
|
+
PDexPayerClientSuite.extract_bearer_token(request)
|
110
|
+
end
|
111
|
+
|
112
|
+
record_response_route :get, EXPORT_STATUS_PATH, EXPORT_STATUS_TAG, method(:export_status_response),
|
113
|
+
resumes: method(:test_resumes?) do |request|
|
114
|
+
PDexPayerClientSuite.extract_bearer_token(request)
|
115
|
+
end
|
106
116
|
|
107
117
|
record_response_route :post, MEMBER_MATCH_PATH, MEMBER_MATCH_TAG, method(:member_match_response),
|
108
118
|
resumes: method(:test_resumes?) do |request|
|
@@ -1,9 +1,34 @@
|
|
1
1
|
|
2
2
|
module DaVinciPDexTestKit
|
3
3
|
module PDexPayerServer
|
4
|
-
class CoverageToLinkHasMinimalDataTest < Inferno::Test
|
5
4
|
|
6
|
-
|
5
|
+
# Factorized test for Member Match Request CoverageToLink parameter validation on PDex v2.0.0 and HRex v1.0.0.
|
6
|
+
#
|
7
|
+
# See https://hl7.org/fhir/us/davinci-hrex/STU1/OperationDefinition-member-match.html#notes.
|
8
|
+
#
|
9
|
+
# ==== Inputs
|
10
|
+
#
|
11
|
+
# +member_match_request+ - Parameters FHIR resource JSON text with CoverageToLink parameter
|
12
|
+
#
|
13
|
+
# ==== Outputs
|
14
|
+
#
|
15
|
+
# (none)
|
16
|
+
#
|
17
|
+
# ==== Required Config
|
18
|
+
#
|
19
|
+
# (none)
|
20
|
+
#
|
21
|
+
# ==== Required Scratch
|
22
|
+
#
|
23
|
+
# (none)
|
24
|
+
#
|
25
|
+
# ==== Notes
|
26
|
+
#
|
27
|
+
# Skips if no CoverageToLink parameter provided.
|
28
|
+
#
|
29
|
+
class CoverageToLinkMinimalDataValidation < Inferno::Test
|
30
|
+
|
31
|
+
id :pdex_coverage_to_link_minimal_data_validation
|
7
32
|
title '[USER INPUT VALIDATION] CoverageToLink parameter should not include any data elements not marked as mustSupport'
|
8
33
|
optional
|
9
34
|
description %{
|
@@ -45,7 +70,7 @@ module DaVinciPDexTestKit
|
|
45
70
|
assert !coverage.network, 'CoverageToLink parameter has unecessary network field'
|
46
71
|
assert coverage.costToBeneficiary.nil? || coverage.costToBeneficiary.empty?, 'CoverageToLink parameter has unnecessary costToBeneficiary field'
|
47
72
|
assert coverage.subrogation.nil?, 'CoverageToLink parameter has unnecessary subrogation field'
|
48
|
-
assert
|
73
|
+
assert coverage.contract.nil? || coverage.contract.empty?, 'CoverageToLink parameter has uncessary contract field'
|
49
74
|
end
|
50
75
|
|
51
76
|
end
|
@@ -1,9 +1,35 @@
|
|
1
1
|
|
2
2
|
module DaVinciPDexTestKit
|
3
3
|
module PDexPayerServer
|
4
|
-
class CoverageToLinkMustSupportTest < Inferno::Test
|
5
4
|
|
6
|
-
|
5
|
+
# Factorized test for Member Match Request CoverageToLink parameter validation on PDex v2.0.0 and HRex v1.0.0.
|
6
|
+
#
|
7
|
+
# See Documentation for CoverageToLink parameter at
|
8
|
+
# https://hl7.org/fhir/us/davinci-hrex/STU1/OperationDefinition-member-match.html#membermatch
|
9
|
+
#
|
10
|
+
# ==== Inputs
|
11
|
+
#
|
12
|
+
# +member_match_request+ - Parameters FHIR resource JSON text with CoverageToLink parameter
|
13
|
+
#
|
14
|
+
# ==== Outputs
|
15
|
+
#
|
16
|
+
# (none)
|
17
|
+
#
|
18
|
+
# ==== Required Config
|
19
|
+
#
|
20
|
+
# (none)
|
21
|
+
#
|
22
|
+
# ==== Required Scratch
|
23
|
+
#
|
24
|
+
# (none)
|
25
|
+
#
|
26
|
+
# ==== Notes
|
27
|
+
#
|
28
|
+
# Fails if no CoverageToLink parameter provided.
|
29
|
+
#
|
30
|
+
class CoverageToLinkMustSupportValidation < Inferno::Test
|
31
|
+
|
32
|
+
id :pdex_coverage_to_link_must_support_validation
|
7
33
|
title '[USER INPUT VALIDATION] CoverageToLink parameter is optional for generic FHIR clients, but required for Payer systems.'
|
8
34
|
description 'See [CoverageToLink parameter documentation](https://hl7.org/fhir/us/davinci-hrex/STU1/OperationDefinition-member-match.html).'
|
9
35
|
optional
|
@@ -17,7 +17,8 @@ module DaVinciPDexTestKit
|
|
17
17
|
module PDexPayerServer
|
18
18
|
|
19
19
|
# PDex PriorAuthorization Profile for ExplanationOfBenefit Resource Test Group
|
20
|
-
class
|
20
|
+
class ExplanationOfBenefitGroup < Inferno::TestGroup
|
21
|
+
id :pdex_explanation_of_benefit_group
|
21
22
|
title 'PDex Prior Authorization Tests'
|
22
23
|
short_description 'Verify support for the server capabilities required by the PDex Prior Authorization Profile.'
|
23
24
|
description %(
|
@@ -81,7 +82,6 @@ The test will attempt to read each reference found and will fail if no
|
|
81
82
|
read succeeds.
|
82
83
|
)
|
83
84
|
|
84
|
-
id :pdex_explanation_of_benefit
|
85
85
|
run_as_group
|
86
86
|
|
87
87
|
def self.metadata
|
@@ -2,12 +2,14 @@
|
|
2
2
|
|
3
3
|
require 'tls_test_kit'
|
4
4
|
|
5
|
-
require 'bulk_data_test_kit/v1.0.1/bulk_data_export_operation_support_test'
|
5
|
+
# require 'bulk_data_test_kit/v1.0.1/bulk_data_export_operation_support_test'
|
6
6
|
require 'bulk_data_test_kit/v1.0.1/bulk_data_no_auth_test'
|
7
7
|
require 'bulk_data_test_kit/v1.0.1/bulk_data_export_kick_off_test'
|
8
8
|
require 'bulk_data_test_kit/v1.0.1/bulk_data_status_check_test'
|
9
9
|
require 'bulk_data_test_kit/v1.0.1/bulk_data_output_check_test'
|
10
10
|
|
11
|
+
require_relative 'patient_operation_in_capability_statement_validation'
|
12
|
+
|
11
13
|
module DaVinciPDexTestKit
|
12
14
|
module PDexPayerServer
|
13
15
|
class ExportPatientGroup < Inferno::TestGroup
|
@@ -37,38 +39,11 @@ module DaVinciPDexTestKit
|
|
37
39
|
|
38
40
|
output :patient_requires_access_token, :patient_status_output, :patient_bulk_download_url
|
39
41
|
|
40
|
-
test from: :
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
Given flexibility in the FHIR specification for declaring constrained
|
47
|
-
OperationDefinitions, this test only verifies that the server declares
|
48
|
-
any operation on the Patient resource. It does not verify that it
|
49
|
-
declares the standard Patient export OperationDefinition provided in the
|
50
|
-
Bulk Data specification, nor does it attempt to resolve any non-standard
|
51
|
-
OperationDefinitions to verify if it is a constrained version of the
|
52
|
-
standard OperationDefintion.
|
53
|
-
|
54
|
-
This test will provide a warning if no operations are declared at
|
55
|
-
`Patient/$export`, via the
|
56
|
-
`CapabilityStatement.rest.resource.operation.name` element. It will
|
57
|
-
also provide an informational message if an operation on the Patient
|
58
|
-
resource exists, but does not point to the standard OperationDefinition
|
59
|
-
canonical URL:
|
60
|
-
http://hl7.org/fhir/uv/bulkdata/OperationDefinition/patient-export
|
61
|
-
|
62
|
-
Additionally, this test provides a warning if the bulk data server does
|
63
|
-
not include the following URL in its `CapabilityStatement.instantiates`
|
64
|
-
element: http://hl7.org/fhir/uv/bulkdata/CapabilityStatement/bulk-data
|
65
|
-
DESCRIPTION
|
66
|
-
id :bulk_data_patient_export_operation_support
|
67
|
-
|
68
|
-
config(
|
69
|
-
options: { resource_type: 'Patient', require_absolute_urls_in_output: true }
|
70
|
-
)
|
71
|
-
end
|
42
|
+
test from: :patient_operation_in_capability_statement_validation,
|
43
|
+
title: 'Bulk Data Server declares support for Patient export operation in CapabilityStatement',
|
44
|
+
config: {
|
45
|
+
options: { operation_name: 'export', operation_url: 'http://hl7.org/fhir/uv/bulkdata/OperationDefinition/patient-export' }
|
46
|
+
}
|
72
47
|
|
73
48
|
test from: :bulk_data_kick_off,
|
74
49
|
id: :pdex_export_patient_kick_off,
|
@@ -1,18 +1,44 @@
|
|
1
1
|
module DaVinciPDexTestKit
|
2
2
|
module PDexPayerServer
|
3
3
|
|
4
|
-
#
|
5
|
-
|
6
|
-
|
4
|
+
# Factorized test for Member Match Request Profile local references on PDex v2.0.0 and HRex v1.0.0.
|
5
|
+
#
|
6
|
+
# See http://hl7.org/fhir/us/davinci-hrex/STU1/OperationDefinition-member-match.html#resolving-parameter-references
|
7
|
+
#
|
8
|
+
# ==== Inputs
|
9
|
+
#
|
10
|
+
# +member_match_request+ - *Optional:* FHIR Parameters resource JSON text
|
11
|
+
#
|
12
|
+
# ==== Outputs
|
13
|
+
#
|
14
|
+
# (none)
|
15
|
+
#
|
16
|
+
# ==== Required Config
|
17
|
+
#
|
18
|
+
# (none)
|
19
|
+
#
|
20
|
+
# ==== Required Scratch
|
21
|
+
#
|
22
|
+
# (none)
|
23
|
+
#
|
24
|
+
# ==== Notes
|
25
|
+
#
|
26
|
+
# Skips if no input provided. This test does not validate all requirements of a Member Match Request
|
27
|
+
# resource.
|
28
|
+
#
|
29
|
+
class MemberMatchRequestLocalReferencesValidation < Inferno::Test
|
30
|
+
id :pdex_member_match_request_local_references_validation
|
31
|
+
|
7
32
|
title '[USER INPUT VALIDATION] Member match request only uses local references'
|
33
|
+
|
8
34
|
description %{
|
9
35
|
This test confirms that all Patient references inside the Consent and CoverageToMatch parameters are local references to the MemberPatient
|
10
36
|
parameter. See
|
11
|
-
[resolving parameter references](
|
37
|
+
[resolving parameter references](https://hl7.org/fhir/us/davinci-hrex/STU1/OperationDefinition-member-match.html#resolving-parameter-references)
|
12
38
|
from the HRex 1.0.0. Implementation Guide.
|
13
39
|
}
|
14
40
|
|
15
|
-
input :member_match_request
|
41
|
+
input :member_match_request
|
16
42
|
|
17
43
|
# @param member_match_request_parameters [FHIR::Parameters]
|
18
44
|
def assert_local_patient_references(member_match_request_parameters)
|
@@ -1,9 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module DaVinciPDexTestKit
|
2
4
|
module PDexPayerServer
|
3
5
|
|
4
|
-
#
|
5
|
-
|
6
|
-
|
6
|
+
# Factorized test for Member Match Request Profile validation on PDex v2.0.0 and HRex v1.0.0.
|
7
|
+
#
|
8
|
+
# http://hl7.org/fhir/us/davinci-hrex/STU1/StructureDefinition-hrex-parameters-member-match-in.html
|
9
|
+
#
|
10
|
+
# ==== Inputs
|
11
|
+
#
|
12
|
+
# +member_match_request+ - *Optional:* JSON text to validate against profile
|
13
|
+
#
|
14
|
+
# ==== Outputs
|
15
|
+
#
|
16
|
+
# (none)
|
17
|
+
#
|
18
|
+
# ==== Required Config
|
19
|
+
#
|
20
|
+
# (none)
|
21
|
+
#
|
22
|
+
# ==== Required Scratch
|
23
|
+
#
|
24
|
+
# (none)
|
25
|
+
#
|
26
|
+
# ==== Notes
|
27
|
+
#
|
28
|
+
# Skips if no input provided. This test does not validate all requirements of a Member Match Request
|
29
|
+
# resource.
|
30
|
+
#
|
31
|
+
class MemberMatchRequestProfileValidation < Inferno::Test
|
32
|
+
id :pdex_member_match_request_profile_validation
|
33
|
+
|
7
34
|
input :member_match_request
|
8
35
|
|
9
36
|
def assert_local_patient_references(member_match_request_parameters)
|
@@ -1,14 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require_relative '
|
3
|
-
require_relative '
|
4
|
-
require_relative '
|
5
|
-
require_relative '
|
2
|
+
require_relative 'member_match_request_profile_validation'
|
3
|
+
require_relative 'member_match_request_local_references_validation'
|
4
|
+
require_relative 'coverage_to_link_minimal_data_validation'
|
5
|
+
require_relative 'coverage_to_link_must_support_validation'
|
6
6
|
|
7
7
|
module DaVinciPDexTestKit
|
8
8
|
module PDexPayerServer
|
9
9
|
class MultipleMemberMatchesGroup < Inferno::TestGroup
|
10
10
|
|
11
|
-
id :
|
11
|
+
id :pdex_multiple_member_matches_group
|
12
12
|
title '$member-match with multiple matches'
|
13
13
|
|
14
14
|
run_as_group
|
@@ -21,8 +21,8 @@ module DaVinciPDexTestKit
|
|
21
21
|
|
22
22
|
group_config = { inputs: { member_match_request: { name: :multiple_member_match_request } } }
|
23
23
|
|
24
|
-
test from: :
|
25
|
-
id :
|
24
|
+
test from: :pdex_member_match_request_profile_validation do
|
25
|
+
id :multiple_member_match_request_profile_test
|
26
26
|
config(group_config)
|
27
27
|
title '[USER INPUT VALIDATION] Member match request for multiple matches is valid'
|
28
28
|
description %{
|
@@ -35,13 +35,10 @@ module DaVinciPDexTestKit
|
|
35
35
|
# Inherits
|
36
36
|
end
|
37
37
|
|
38
|
-
test from: :
|
39
|
-
id :multiple_member_match_request_local_references
|
40
|
-
config(group_config)
|
41
|
-
end
|
38
|
+
test from: :pdex_member_match_request_local_references_validation, config: group_config
|
42
39
|
|
43
|
-
test from: :
|
44
|
-
test from: :
|
40
|
+
test from: :pdex_coverage_to_link_minimal_data_validation, config: group_config
|
41
|
+
test from: :pdex_coverage_to_link_must_support_validation, config: group_config
|
45
42
|
|
46
43
|
test do
|
47
44
|
id :member_match_has_multiple_matches
|
@@ -1,13 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require_relative '
|
3
|
-
require_relative '
|
4
|
-
require_relative '
|
5
|
-
require_relative '
|
2
|
+
require_relative 'member_match_request_profile_validation'
|
3
|
+
require_relative 'member_match_request_local_references_validation'
|
4
|
+
require_relative 'coverage_to_link_minimal_data_validation'
|
5
|
+
require_relative 'coverage_to_link_must_support_validation'
|
6
6
|
|
7
7
|
module DaVinciPDexTestKit
|
8
8
|
module PDexPayerServer
|
9
9
|
class NoMemberMatchesGroup < Inferno::TestGroup
|
10
|
-
id :
|
10
|
+
id :pdex_no_member_matches_group
|
11
11
|
title '$member-match with no matches'
|
12
12
|
|
13
13
|
run_as_group
|
@@ -20,8 +20,8 @@ module DaVinciPDexTestKit
|
|
20
20
|
|
21
21
|
group_config = { inputs: { member_match_request: { name: :no_member_match_request } } }
|
22
22
|
|
23
|
-
test from: :
|
24
|
-
id :
|
23
|
+
test from: :pdex_member_match_request_profile_validation do
|
24
|
+
id :no_member_match_request_profile_test
|
25
25
|
config(group_config)
|
26
26
|
|
27
27
|
title '[USER INPUT VALIDATION] Member match request for no matches is valid'
|
@@ -31,17 +31,12 @@ module DaVinciPDexTestKit
|
|
31
31
|
ensuring subsequent tests can accurately simulate content. It also checks conformance to the [Parameters Resource](https://hl7.org/fhir/R4/parameters.html),
|
32
32
|
mandatory elements, and terminology. It also checks that the Patient reference with the Consent and CoverageToMatch parameters are local references.
|
33
33
|
}
|
34
|
-
|
35
|
-
# Inherits run
|
36
34
|
end
|
37
35
|
|
38
|
-
test from: :
|
39
|
-
id :no_member_match_request_local_references
|
40
|
-
config(group_config)
|
41
|
-
end
|
36
|
+
test from: :pdex_member_match_request_local_references_validation, config: group_config
|
42
37
|
|
43
|
-
test from: :
|
44
|
-
test from: :
|
38
|
+
test from: :pdex_coverage_to_link_minimal_data_validation, config: group_config
|
39
|
+
test from: :pdex_coverage_to_link_must_support_validation, config: group_config
|
45
40
|
|
46
41
|
|
47
42
|
test do
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module DaVinciPDexTestKit
|
4
|
+
module PDexPayerServer
|
5
|
+
# Factorized test for asserting a patient resource opeartion in a Capability Statement
|
6
|
+
#
|
7
|
+
# ==== Inputs
|
8
|
+
#
|
9
|
+
# (none)
|
10
|
+
#
|
11
|
+
# ==== Outputs
|
12
|
+
#
|
13
|
+
# (none)
|
14
|
+
#
|
15
|
+
# ==== Required Config
|
16
|
+
#
|
17
|
+
# options:
|
18
|
+
# operation_name: operation to check for, i.e: 'member-match'
|
19
|
+
# operation_url: operation definition canonical URL
|
20
|
+
#
|
21
|
+
# ==== Required Scratch
|
22
|
+
#
|
23
|
+
# (none)
|
24
|
+
#
|
25
|
+
# ==== Notes
|
26
|
+
#
|
27
|
+
# Requires an Inferno fhir client configured.
|
28
|
+
#
|
29
|
+
class PatientOperationInCapabilityStatementValidation < Inferno::Test
|
30
|
+
id :patient_operation_in_capability_statement_validation
|
31
|
+
|
32
|
+
description %{
|
33
|
+
The [CapabilityStatement](https://hl7.org/fhir/R4/capabilitystatement.html) must declare support for the
|
34
|
+
patient resource-level operation in `CapabilityStatement.rest[].resource(type: Patient).operation` by
|
35
|
+
having both name (without `$`) and definition (canonical URL). See the operation definition for these
|
36
|
+
values.
|
37
|
+
|
38
|
+
The operation shall only be declared in one object in the `rest` array.
|
39
|
+
}
|
40
|
+
|
41
|
+
run do
|
42
|
+
fhir_get_capability_statement
|
43
|
+
|
44
|
+
assert_response_status(200)
|
45
|
+
assert_resource_type(:capability_statement)
|
46
|
+
|
47
|
+
assert(
|
48
|
+
resource.rest&.one? do |rest_metadata|
|
49
|
+
rest_metadata.resource&.find{|resource_metadata| resource_metadata.type == 'Patient'}
|
50
|
+
&.operation&.any? do |operation_metadata|
|
51
|
+
operation_metadata.name == config.options[:operation_name] &&
|
52
|
+
operation_metadata.definition == config.options[:operation_url]
|
53
|
+
end
|
54
|
+
end
|
55
|
+
)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -2,8 +2,8 @@
|
|
2
2
|
|
3
3
|
module DaVinciPDexTestKit
|
4
4
|
module PDexPayerServer
|
5
|
-
class
|
6
|
-
id :
|
5
|
+
class WorkflowClinicalDataGroup < Inferno::TestGroup
|
6
|
+
id :pdex_workflow_clinical_data_group
|
7
7
|
title 'Server can respond to search requests for clinical data on the matched patient'
|
8
8
|
short_title 'Clinical data query'
|
9
9
|
description %{
|
@@ -26,7 +26,7 @@ module DaVinciPDexTestKit
|
|
26
26
|
optional: true
|
27
27
|
|
28
28
|
test do
|
29
|
-
id :
|
29
|
+
id :workflow_clinical_encounter_query_test
|
30
30
|
title 'Server can provide clinical Encounter data from matched member identifier'
|
31
31
|
description %{
|
32
32
|
Server receives request `GET [baseURL]/Encounter?subject=Patient/[id]` and returns 200.
|
@@ -44,7 +44,7 @@ module DaVinciPDexTestKit
|
|
44
44
|
end
|
45
45
|
|
46
46
|
test do
|
47
|
-
id :
|
47
|
+
id :workflow_clinical_encounter_test
|
48
48
|
title 'Server returned Search bundle with valid Encounter data'
|
49
49
|
description %{
|
50
50
|
Server returned search Bundle of Encounters with least 1 resource entry.
|
@@ -1,11 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative 'patient_operation_in_capability_statement_validation'
|
4
|
+
|
3
5
|
module DaVinciPDexTestKit
|
4
6
|
module PDexPayerServer
|
5
|
-
class
|
7
|
+
class WorkflowEverythingGroup < Inferno::TestGroup
|
6
8
|
title 'Server can respond to $everything requests on matched patient'
|
7
9
|
short_title '$everything'
|
8
|
-
id :
|
10
|
+
id :pdex_workflow_everything_group
|
9
11
|
optional
|
10
12
|
description %{
|
11
13
|
# Background
|
@@ -25,30 +27,15 @@ module DaVinciPDexTestKit
|
|
25
27
|
description: 'Manual Patient ID for testing Clinical Query and $everything $export without $member-match.',
|
26
28
|
optional: true
|
27
29
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
fhir_get_capability_statement
|
34
|
-
|
35
|
-
assert_response_status 200
|
36
|
-
assert(
|
37
|
-
resource.rest.one? do |rest_metadata|
|
38
|
-
rest_metadata.resource.select { |resource_metadata| resource_metadata.type == 'Patient' }.first
|
39
|
-
.operation.any? do |operation_metadata|
|
40
|
-
operation_metadata.name == 'everything' && operation_metadata.definition == 'http://hl7.org/fhir/OperationDefinition/Patient-everything'
|
41
|
-
end
|
42
|
-
end
|
43
|
-
)
|
44
|
-
end
|
45
|
-
end
|
30
|
+
test from: :patient_operation_in_capability_statement_validation,
|
31
|
+
title: 'Server declares support for Patient everything operation in CapabilityStatement',
|
32
|
+
config: {
|
33
|
+
options: { operation_name: 'everything', operation_url: 'http://hl7.org/fhir/OperationDefinition/Patient-everything' }
|
34
|
+
}
|
46
35
|
|
47
36
|
test do
|
48
37
|
title 'Server can handle GET /Patient/[ID]/$everything'
|
49
38
|
|
50
|
-
# input :patient_id # borrows properties from workflow_clinical_data
|
51
|
-
|
52
39
|
makes_request :pdex_patient_everything
|
53
40
|
|
54
41
|
run do
|
@@ -69,9 +56,9 @@ module DaVinciPDexTestKit
|
|
69
56
|
uses_request :pdex_patient_everything
|
70
57
|
|
71
58
|
run do
|
72
|
-
skip_if response[:status] != 200, 'Skipped because previous test did not pass'
|
73
59
|
skip_if !patient_id
|
74
60
|
'No Patient ID was derived from $member-match nor supplied from user input'
|
61
|
+
skip_if response[:status] != 200, 'Skipped because previous test did not pass'
|
75
62
|
|
76
63
|
assert_valid_resource
|
77
64
|
assert_resource_type(:bundle)
|
@@ -84,7 +71,6 @@ module DaVinciPDexTestKit
|
|
84
71
|
end
|
85
72
|
end
|
86
73
|
|
87
|
-
|
88
74
|
# TODO: convert to attestation
|
89
75
|
# test do
|
90
76
|
# title %{
|
data/lib/davinci_pdex_test_kit/pdex_payer_server/{workflow_export.rb → workflow_export_group.rb}
RENAMED
@@ -7,8 +7,8 @@ require_relative 'export_validation_group'
|
|
7
7
|
|
8
8
|
module DaVinciTestKit
|
9
9
|
module PDexPayerServer
|
10
|
-
class
|
11
|
-
id :
|
10
|
+
class WorkflowExportGroup < Inferno::TestGroup
|
11
|
+
id :pdex_workflow_export_group
|
12
12
|
title 'Server can respond to FHIR Bulk $export requests on the matched patient'
|
13
13
|
short_title 'Bulk $export'
|
14
14
|
optional
|
@@ -1,15 +1,17 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require_relative '
|
3
|
-
require_relative '
|
4
|
-
require_relative '
|
5
|
-
require_relative '
|
2
|
+
require_relative 'member_match_request_profile_validation'
|
3
|
+
require_relative 'member_match_request_local_references_validation'
|
4
|
+
require_relative 'coverage_to_link_minimal_data_validation'
|
5
|
+
require_relative 'coverage_to_link_must_support_validation'
|
6
|
+
|
7
|
+
require_relative 'patient_operation_in_capability_statement_validation'
|
6
8
|
|
7
9
|
module DaVinciPDexTestKit
|
8
10
|
module PDexPayerServer
|
9
|
-
class
|
11
|
+
class WorkflowMemberMatchGroup < Inferno::TestGroup
|
10
12
|
title 'Server can return a matching member in response to $member-match request'
|
11
13
|
short_title '$member-match'
|
12
|
-
id :
|
14
|
+
id :pdex_workflow_member_match_group
|
13
15
|
description %{
|
14
16
|
# Background
|
15
17
|
|
@@ -36,35 +38,20 @@ module DaVinciPDexTestKit
|
|
36
38
|
|
37
39
|
run_as_group
|
38
40
|
|
39
|
-
# TODO factorize cap statement tests
|
40
|
-
test do
|
41
|
-
id :member_match_in_capability_statement
|
42
|
-
title 'Server asserts Patient $member_match operation in capability statement.'
|
43
|
-
|
44
|
-
run do
|
45
|
-
fhir_get_capability_statement
|
46
|
-
|
47
|
-
assert_response_status(200)
|
48
|
-
assert_resource_type(:capability_statement)
|
49
|
-
|
50
|
-
assert(
|
51
|
-
resource.rest.one? do |rest_metadata|
|
52
|
-
rest_metadata.resource.select { |resource_metadata| resource_metadata.type == 'Patient' }.first
|
53
|
-
.operation.any? do |operation_metadata|
|
54
|
-
operation_metadata.name == 'member-match' && operation_metadata.definition == 'http://hl7.org/fhir/us/davinci-hrex/OperationDefinition/member-match'
|
55
|
-
end
|
56
|
-
end
|
57
|
-
)
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
41
|
input :member_match_request,
|
62
42
|
title: 'Member Match Request for one match',
|
63
43
|
description: "A JSON payload for server's $member-match endpoint that has **exactly one match**",
|
64
44
|
type: 'textarea'
|
65
45
|
|
66
|
-
test from: :
|
67
|
-
|
46
|
+
test from: :patient_operation_in_capability_statement_validation,
|
47
|
+
id: :member_match_operation_in_capability_statement_test,
|
48
|
+
title: 'Server declares support for Patient member match operation in CapabilityStatement',
|
49
|
+
config: {
|
50
|
+
options: { operation_name: 'member-match', operation_url: 'http://hl7.org/fhir/us/davinci-hrex/OperationDefinition/member-match' }
|
51
|
+
}
|
52
|
+
|
53
|
+
test from: :pdex_member_match_request_profile_validation do
|
54
|
+
id :member_match_request_profile_test
|
68
55
|
title '[USER INPUT VALIDATION] Member match request for exactly one match is valid'
|
69
56
|
description %{
|
70
57
|
This test validates the conformity of the user input to the
|
@@ -74,16 +61,16 @@ module DaVinciPDexTestKit
|
|
74
61
|
}
|
75
62
|
end
|
76
63
|
|
77
|
-
test from: :
|
78
|
-
id :
|
64
|
+
test from: :pdex_member_match_request_local_references_validation do
|
65
|
+
id :member_match_request_local_references_test
|
79
66
|
title '[USER INPUT VALIDATION] Member match request only uses local references'
|
80
67
|
end
|
81
68
|
|
82
|
-
test from: :
|
83
|
-
test from: :
|
69
|
+
test from: :pdex_coverage_to_link_minimal_data_validation
|
70
|
+
test from: :pdex_coverage_to_link_must_support_validation
|
84
71
|
|
85
72
|
test do
|
86
|
-
id :
|
73
|
+
id :member_match_on_server_test
|
87
74
|
title 'Server handles $member-match operation successfully'
|
88
75
|
description 'Server receives request `POST [baseURL]/Patient/$member-match` and returns 200'
|
89
76
|
|
@@ -98,7 +85,7 @@ module DaVinciPDexTestKit
|
|
98
85
|
end
|
99
86
|
|
100
87
|
test do
|
101
|
-
id :
|
88
|
+
id :member_match_response_profile_test
|
102
89
|
title 'Server $member-match response conforms to profile'
|
103
90
|
description %{
|
104
91
|
The response body from the previous POST request to $member-match must be valid FHIR JSON conforming to
|
@@ -1,9 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative 'pdex_payer_server/
|
4
|
-
require_relative 'pdex_payer_server/
|
5
|
-
require_relative 'pdex_payer_server/
|
6
|
-
require_relative 'pdex_payer_server/
|
3
|
+
require_relative 'pdex_payer_server/workflow_member_match_group'
|
4
|
+
require_relative 'pdex_payer_server/workflow_clinical_data_group'
|
5
|
+
require_relative 'pdex_payer_server/workflow_everything_group'
|
6
|
+
require_relative 'pdex_payer_server/workflow_export_group'
|
7
7
|
|
8
8
|
require_relative 'pdex_payer_server/no_member_matches_group'
|
9
9
|
require_relative 'pdex_payer_server/multiple_member_matches_group'
|
@@ -12,7 +12,7 @@ require_relative 'pdex_payer_server/explanation_of_benefit_group'
|
|
12
12
|
|
13
13
|
module DaVinciPDexTestKit
|
14
14
|
class PDexPayerServerSuite < Inferno::TestSuite
|
15
|
-
id :
|
15
|
+
id :pdex_payer_server_suite
|
16
16
|
title 'Da Vinci PDex Payer Server Test Suite'
|
17
17
|
description File.read(File.join(__dir__, 'docs', 'payer_server_suite_description_v200.md'))
|
18
18
|
|
@@ -125,10 +125,10 @@ module DaVinciPDexTestKit
|
|
125
125
|
See the corresponding test group's description for the testing methodology of each part.
|
126
126
|
)
|
127
127
|
|
128
|
-
group from: :
|
129
|
-
group from: :
|
130
|
-
group from: :
|
131
|
-
group from: :
|
128
|
+
group from: :pdex_workflow_member_match_group
|
129
|
+
group from: :pdex_workflow_clinical_data_group
|
130
|
+
group from: :pdex_workflow_everything_group
|
131
|
+
group from: :pdex_workflow_export_group
|
132
132
|
end
|
133
133
|
|
134
134
|
group do
|
@@ -157,15 +157,16 @@ module DaVinciPDexTestKit
|
|
157
157
|
|
158
158
|
input_order :url, :credentials, :no_member_match_request, :multiple_member_match_request
|
159
159
|
|
160
|
-
group from: :
|
161
|
-
group from: :
|
160
|
+
group from: :pdex_no_member_matches_group
|
161
|
+
group from: :pdex_multiple_member_matches_group
|
162
162
|
end
|
163
163
|
|
164
164
|
group do
|
165
165
|
title 'PDEX Search and Read API (US Core plus additional PDex resource types)'
|
166
166
|
id :search_and_read_api_coverage
|
167
167
|
|
168
|
-
group from: :
|
168
|
+
group from: :pdex_explanation_of_benefit_group
|
169
|
+
|
169
170
|
# Import all US Core v3.1.1 groups without the Suite
|
170
171
|
Dir.glob(File.join($LOAD_PATH.find { |x| x.match? "us_core_test_kit" }, 'us_core_test_kit/generated/v3.1.1/*_group.rb')).each do |test_group_path|
|
171
172
|
require_relative test_group_path
|
@@ -3,7 +3,9 @@
|
|
3
3
|
module DaVinciPDexTestKit
|
4
4
|
AUTH_TAG = 'pdex_auth'
|
5
5
|
SUBMIT_TAG = 'pdex_submit'
|
6
|
-
|
6
|
+
BINARY_TAG = 'pdex_binary'
|
7
|
+
EXPORT_TAG = 'pdex_export'
|
8
|
+
EXPORT_STATUS_TAG = 'pdex_export_status'
|
7
9
|
EVERYTHING_TAG = 'pdex_everything'
|
8
10
|
MEMBER_MATCH_TAG = 'pdex_member_match'
|
9
11
|
end
|
@@ -2,10 +2,12 @@ module DaVinciPDexTestKit
|
|
2
2
|
TOKEN_PATH = '/mock_auth/token'
|
3
3
|
PATIENT_PATH = '/fhir/Patient'
|
4
4
|
SUBMIT_PATH = '/fhir/:endpoint'
|
5
|
+
BINARY_PATH = '/fhir/Binary/:id'
|
5
6
|
METADATA_PATH = '/fhir/metadata'
|
6
7
|
EVERYTHING_PATH = '/fhir/Patient/:patient/$everything'
|
7
8
|
MEMBER_MATCH_PATH = '/fhir/Patient/$member-match'
|
8
|
-
|
9
|
+
EXPORT_PATH = '/fhir/Patient/$export'
|
10
|
+
EXPORT_STATUS_PATH = '/fhir/$export-poll-status'
|
9
11
|
BASE_FHIR_PATH = '/fhir'
|
10
12
|
RESUME_PASS_PATH = '/resume_pass'
|
11
13
|
RESUME_CLINICAL_DATA_PATH = '/resume_clinical_data'
|
@@ -32,6 +34,10 @@ module DaVinciPDexTestKit
|
|
32
34
|
@submit_url ||= base_url + SUBMIT_PATH
|
33
35
|
end
|
34
36
|
|
37
|
+
def binary_url
|
38
|
+
@binary_url ||= base_url + BINARY_PATH
|
39
|
+
end
|
40
|
+
|
35
41
|
def metadata_url
|
36
42
|
@metadata_url ||= base_url + METADATA_PATH
|
37
43
|
end
|
@@ -44,9 +50,13 @@ module DaVinciPDexTestKit
|
|
44
50
|
@member_match_url ||= base_url + MEMBER_MATCH_PATH
|
45
51
|
end
|
46
52
|
|
47
|
-
|
48
|
-
|
49
|
-
|
53
|
+
def export_url
|
54
|
+
@export_url ||= base_url + EXPORT_PATH
|
55
|
+
end
|
56
|
+
|
57
|
+
def export_status_url
|
58
|
+
@export_status_url ||= base_url + EXPORT_STATUS_PATH
|
59
|
+
end
|
50
60
|
|
51
61
|
def resume_pass_url
|
52
62
|
@resume_pass_url ||= base_url + RESUME_PASS_PATH
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: davinci_pdex_test_kit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.10.
|
4
|
+
version: 0.10.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Karl Naden
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2024-
|
13
|
+
date: 2024-07-03 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: inferno_core
|
@@ -110,6 +110,20 @@ dependencies:
|
|
110
110
|
- - "~>"
|
111
111
|
- !ruby/object:Gem::Version
|
112
112
|
version: '3.11'
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: faker
|
115
|
+
requirement: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - "~>"
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: '3.4'
|
120
|
+
type: :development
|
121
|
+
prerelease: false
|
122
|
+
version_requirements: !ruby/object:Gem::Requirement
|
123
|
+
requirements:
|
124
|
+
- - "~>"
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: '3.4'
|
113
127
|
description: Test Kit for the Da Vinci Payer Data Exchange (PDex) FHIR Implementation
|
114
128
|
Guide
|
115
129
|
email:
|
@@ -161,10 +175,8 @@ files:
|
|
161
175
|
- lib/davinci_pdex_test_kit/pdex_payer_client/clinical_data_request_tests/procedure_clinical_data_request_test.rb
|
162
176
|
- lib/davinci_pdex_test_kit/pdex_payer_client/collection.rb
|
163
177
|
- lib/davinci_pdex_test_kit/pdex_payer_client_suite.rb
|
164
|
-
- lib/davinci_pdex_test_kit/pdex_payer_server/
|
165
|
-
- lib/davinci_pdex_test_kit/pdex_payer_server/
|
166
|
-
- lib/davinci_pdex_test_kit/pdex_payer_server/coverage_to_link_has_minimal_data_test.rb
|
167
|
-
- lib/davinci_pdex_test_kit/pdex_payer_server/coverage_to_link_must_support_test.rb
|
178
|
+
- lib/davinci_pdex_test_kit/pdex_payer_server/coverage_to_link_minimal_data_validation.rb
|
179
|
+
- lib/davinci_pdex_test_kit/pdex_payer_server/coverage_to_link_must_support_validation.rb
|
168
180
|
- lib/davinci_pdex_test_kit/pdex_payer_server/explanation_of_benefit/explanation_of_benefit_id_search_test.rb
|
169
181
|
- lib/davinci_pdex_test_kit/pdex_payer_server/explanation_of_benefit/explanation_of_benefit_identifier_search_test.rb
|
170
182
|
- lib/davinci_pdex_test_kit/pdex_payer_server/explanation_of_benefit/explanation_of_benefit_must_support_test.rb
|
@@ -180,12 +192,15 @@ files:
|
|
180
192
|
- lib/davinci_pdex_test_kit/pdex_payer_server/explanation_of_benefit_group.rb
|
181
193
|
- lib/davinci_pdex_test_kit/pdex_payer_server/export_patient_group.rb
|
182
194
|
- lib/davinci_pdex_test_kit/pdex_payer_server/export_validation_group.rb
|
195
|
+
- lib/davinci_pdex_test_kit/pdex_payer_server/member_match_request_local_references_validation.rb
|
196
|
+
- lib/davinci_pdex_test_kit/pdex_payer_server/member_match_request_profile_validation.rb
|
183
197
|
- lib/davinci_pdex_test_kit/pdex_payer_server/multiple_member_matches_group.rb
|
184
198
|
- lib/davinci_pdex_test_kit/pdex_payer_server/no_member_matches_group.rb
|
185
|
-
- lib/davinci_pdex_test_kit/pdex_payer_server/
|
186
|
-
- lib/davinci_pdex_test_kit/pdex_payer_server/
|
187
|
-
- lib/davinci_pdex_test_kit/pdex_payer_server/
|
188
|
-
- lib/davinci_pdex_test_kit/pdex_payer_server/
|
199
|
+
- lib/davinci_pdex_test_kit/pdex_payer_server/patient_operation_in_capability_statement_validation.rb
|
200
|
+
- lib/davinci_pdex_test_kit/pdex_payer_server/workflow_clinical_data_group.rb
|
201
|
+
- lib/davinci_pdex_test_kit/pdex_payer_server/workflow_everything_group.rb
|
202
|
+
- lib/davinci_pdex_test_kit/pdex_payer_server/workflow_export_group.rb
|
203
|
+
- lib/davinci_pdex_test_kit/pdex_payer_server/workflow_member_match_group.rb
|
189
204
|
- lib/davinci_pdex_test_kit/pdex_payer_server_suite.rb
|
190
205
|
- lib/davinci_pdex_test_kit/pdex_provider_client_suite.rb
|
191
206
|
- lib/davinci_pdex_test_kit/tags.rb
|