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.
Files changed (24) hide show
  1. checksums.yaml +4 -4
  2. data/lib/davinci_pdex_test_kit/mock_server.rb +42 -13
  3. data/lib/davinci_pdex_test_kit/pdex_payer_client/client_validation_test.rb +13 -50
  4. data/lib/davinci_pdex_test_kit/pdex_payer_client/clinical_data_request_tests/initial_scratch_storing.rb +7 -9
  5. data/lib/davinci_pdex_test_kit/pdex_payer_client/clinical_data_request_tests/initial_wait_test.rb +2 -0
  6. data/lib/davinci_pdex_test_kit/pdex_payer_client_suite.rb +15 -5
  7. 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
  8. 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
  9. data/lib/davinci_pdex_test_kit/pdex_payer_server/explanation_of_benefit_group.rb +2 -2
  10. data/lib/davinci_pdex_test_kit/pdex_payer_server/export_patient_group.rb +8 -33
  11. 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
  12. data/lib/davinci_pdex_test_kit/pdex_payer_server/{abstract_member_match_request_conformance_test.rb → member_match_request_profile_validation.rb} +30 -3
  13. data/lib/davinci_pdex_test_kit/pdex_payer_server/multiple_member_matches_group.rb +10 -13
  14. data/lib/davinci_pdex_test_kit/pdex_payer_server/no_member_matches_group.rb +10 -15
  15. data/lib/davinci_pdex_test_kit/pdex_payer_server/patient_operation_in_capability_statement_validation.rb +59 -0
  16. data/lib/davinci_pdex_test_kit/pdex_payer_server/{workflow_clinical_data.rb → workflow_clinical_data_group.rb} +4 -4
  17. data/lib/davinci_pdex_test_kit/pdex_payer_server/{workflow_everything.rb → workflow_everything_group.rb} +10 -24
  18. data/lib/davinci_pdex_test_kit/pdex_payer_server/{workflow_export.rb → workflow_export_group.rb} +2 -2
  19. data/lib/davinci_pdex_test_kit/pdex_payer_server/{workflow_member_match.rb → workflow_member_match_group.rb} +23 -36
  20. data/lib/davinci_pdex_test_kit/pdex_payer_server_suite.rb +13 -12
  21. data/lib/davinci_pdex_test_kit/tags.rb +3 -1
  22. data/lib/davinci_pdex_test_kit/urls.rb +14 -4
  23. data/lib/davinci_pdex_test_kit/version.rb +1 -1
  24. metadata +25 -10
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 24f9510b1d2105f4b1199d572e887929941fb34ee15a09ccb08faa34558c0561
4
- data.tar.gz: caa1b93a05c412f9a75949dcbea9f0840fe18a43c195a41a76b6dc30a4f8caf5
3
+ metadata.gz: d7e3411ffd5e3404e6a91b2717f1bef55706856f3b2ff240b285305aa171f308
4
+ data.tar.gz: 46503fe353d59752b9c1fb607e7bfd9ae5c66535a4a70e3f21f16ddeac2049fb
5
5
  SHA512:
6
- metadata.gz: f14278dd56909c49768c2fc16578dd199a0e5f200af4c12a4eff4ad282eacd6e91ade0b7ed39778cd80b788e8835566fba6db642ec099028064d01e7751444a5
7
- data.tar.gz: fc7b2623686c52477fdb32973b7bcf23ae103eb5eccd82c2da1ffe99626380497f48e5d30a64c0fa4c37ec228c2eb51f9954af99e75b7c1f672394617cdbda68
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
- # def export_response(request, test = nil, test_result = nil)
64
- # response = server_proxy.get do |req|
65
- # req.url 'Group/pdex-Group/$export' #TODO: change from static response
66
- # req.headers['Prefer'] = 'respond-async'
67
- # req.headers['Accept'] = 'application/fhir+json'
68
- # end
69
- # request.status = response.status
70
- # request.response_headers = response.env.response_headers
71
- # request.response_body = response.body
72
- # end
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.link.map! {|link| {relation: link.relation, url: link.url.gsub(reference_server_base, new_link)}}
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']}/custom/pdex_payer_client/fhir"
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
- # def collect_export_resources
18
- # export_payload = collect_export_payload
19
- # if export_payload
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
- # def export_resources
63
- # @export_resources ||= collect_export_resources
64
- # end
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
- # def export_request
79
- # @export_request ||= load_tagged_requests(EXPORT_TAG).first
80
- # end
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
- # if export_resources
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
- # elsif export_request
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
@@ -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
- # record_response_route :get, EXPORT_PATH, EXPORT_TAG, method(:export_response),
103
- # resumes: method(:test_resumes?) do |request|
104
- # PDexPayerClientSuite.extract_bearer_token(request)
105
- # end
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
- id :coverage_to_link_has_minimal_data
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 !coverage.contract, 'CoverageToLink parameter has uncessary contract field'
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
- id :coverage_to_link_must_support
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 ExplanationOfBenefitTestGroup < Inferno::TestGroup
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: :bulk_data_export_operation_support do
41
- title 'Bulk Data Server declares support for Patient export operation in CapabilityStatement'
42
- description <<~DESCRIPTION
43
- This test verifies that the Bulk Data Server declares support for
44
- `Patient/$export` operation in its server CapabilityStatement.
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
- # Exists to factorize input validation
5
- class AbstractMemberMatchRequestLocalReferencesTest < Inferno::Test
6
- id :abstract_member_match_request_local_references
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](http://hl7.org/fhir/us/davinci-hrex/STU1/OperationDefinition-member-match.html#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 # [String]
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
- # Exists to factorize input validation
5
- class AbstractMemberMatchRequestConformanceTest < Inferno::Test
6
- id :abstract_member_match_request_conformance
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 'abstract_member_match_request_conformance_test'
3
- require_relative 'abstract_member_match_request_local_references_test'
4
- require_relative 'coverage_to_link_has_minimal_data_test'
5
- require_relative 'coverage_to_link_must_support_test'
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 :multiple_member_matches_group
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: :abstract_member_match_request_conformance do
25
- id :multiple_member_match_request_conformance
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: :abstract_member_match_request_local_references do
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: :coverage_to_link_has_minimal_data, config: group_config
44
- test from: :coverage_to_link_must_support, config: group_config
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 'abstract_member_match_request_conformance_test'
3
- require_relative 'abstract_member_match_request_local_references_test'
4
- require_relative 'coverage_to_link_has_minimal_data_test'
5
- require_relative 'coverage_to_link_must_support_test'
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 :no_member_matches_group
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: :abstract_member_match_request_conformance do
24
- id :no_member_match_request_conformance
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: :abstract_member_match_request_local_references do
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: :coverage_to_link_has_minimal_data, config: group_config
44
- test from: :coverage_to_link_must_support, config: group_config
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 WorkflowClinicalData < Inferno::TestGroup
6
- id :workflow_clinical_data
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 :workflow_clinical_encounter_query
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 :workflow_clinical_encounter_validation
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 WorkflowEverythingTestGroup < Inferno::TestGroup
7
+ class WorkflowEverythingGroup < Inferno::TestGroup
6
8
  title 'Server can respond to $everything requests on matched patient'
7
9
  short_title '$everything'
8
- id :workflow_everything
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
- test do
30
- title 'Server asserts Patient instance operation $everything in Capability Statement'
31
-
32
- run do
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 %{
@@ -7,8 +7,8 @@ require_relative 'export_validation_group'
7
7
 
8
8
  module DaVinciTestKit
9
9
  module PDexPayerServer
10
- class WorkflowExportTestGroup < Inferno::TestGroup
11
- id :workflow_export
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 'abstract_member_match_request_conformance_test'
3
- require_relative 'abstract_member_match_request_local_references_test'
4
- require_relative 'coverage_to_link_has_minimal_data_test'
5
- require_relative 'coverage_to_link_must_support_test'
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 WorkflowMemberMatch < Inferno::TestGroup
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 :workflow_member_match
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: :abstract_member_match_request_conformance do
67
- id :member_match_request_request_conformance
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: :abstract_member_match_request_local_references do
78
- id :member_match_request_local_references
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: :coverage_to_link_must_support
83
- test from: :coverage_to_link_has_minimal_data
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 :member_match_on_server
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 :member_match_response_conformance
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/workflow_member_match'
4
- require_relative 'pdex_payer_server/workflow_clinical_data'
5
- require_relative 'pdex_payer_server/workflow_everything'
6
- require_relative 'pdex_payer_server/workflow_export'
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 :pdex_payer_server
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: :workflow_member_match
129
- group from: :workflow_clinical_data
130
- group from: :workflow_everything
131
- group from: :workflow_export
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: :no_member_matches_group
161
- group from: :multiple_member_matches_group
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: :pdex_explanation_of_benefit
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
- # EXPORT_TAG = 'pdex_export'
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
- # EXPORT_PATH = '/fhir/Patient/$export'
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
- # def export_url
48
- # @export_url ||= base_url + EXPORT_PATH
49
- # end
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DaVinciPDexTestKit
4
- VERSION = '0.10.0'
4
+ VERSION = '0.10.1'
5
5
  end
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.0
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-06-11 00:00:00.000000000 Z
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/abstract_member_match_request_conformance_test.rb
165
- - lib/davinci_pdex_test_kit/pdex_payer_server/abstract_member_match_request_local_references_test.rb
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/workflow_clinical_data.rb
186
- - lib/davinci_pdex_test_kit/pdex_payer_server/workflow_everything.rb
187
- - lib/davinci_pdex_test_kit/pdex_payer_server/workflow_export.rb
188
- - lib/davinci_pdex_test_kit/pdex_payer_server/workflow_member_match.rb
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