davinci_pdex_test_kit 0.10.0 → 0.10.1

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.
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