davinci_pas_test_kit 0.9.0 → 0.9.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (93) hide show
  1. checksums.yaml +4 -4
  2. data/lib/davinci_pas_test_kit/client_suite.rb +1 -169
  3. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/{claim_status/pas_claim_status_test.rb → claim_response_decision/pas_claim_response_decision_test.rb} +10 -27
  4. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_approval_submit_response_attest.rb +1 -0
  5. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/must_support/pas_client_must_support_requirement_test.rb +1 -1
  6. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/must_support/pas_server_must_support_requirement_test.rb +4 -1
  7. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/notification/pas_subscription_notification_test.rb +40 -0
  8. data/lib/davinci_pas_test_kit/docs/client_suite_description_v201.md +172 -0
  9. data/lib/davinci_pas_test_kit/docs/server_suite_description_v201.md +150 -0
  10. data/lib/davinci_pas_test_kit/generated/v2.0.1/beneficiary/client_inquiry_request_beneficiary_must_support_test.rb +5 -1
  11. data/lib/davinci_pas_test_kit/generated/v2.0.1/beneficiary/client_submit_request_beneficiary_must_support_test.rb +5 -1
  12. data/lib/davinci_pas_test_kit/generated/v2.0.1/beneficiary/server_inquiry_request_beneficiary_must_support_test.rb +7 -1
  13. data/lib/davinci_pas_test_kit/generated/v2.0.1/beneficiary/server_inquiry_response_beneficiary_must_support_test.rb +5 -1
  14. data/lib/davinci_pas_test_kit/generated/v2.0.1/beneficiary/server_submit_request_beneficiary_must_support_test.rb +7 -1
  15. data/lib/davinci_pas_test_kit/generated/v2.0.1/beneficiary/server_submit_response_beneficiary_must_support_test.rb +5 -1
  16. data/lib/davinci_pas_test_kit/generated/v2.0.1/claim/claim_operation_test.rb +1 -1
  17. data/lib/davinci_pas_test_kit/generated/v2.0.1/claim_inquiry/claim_inquiry_operation_test.rb +1 -1
  18. data/lib/davinci_pas_test_kit/generated/v2.0.1/claim_inquiry/client_inquiry_request_claim_inquiry_must_support_test.rb +5 -1
  19. data/lib/davinci_pas_test_kit/generated/v2.0.1/claim_inquiry/server_inquiry_request_claim_inquiry_must_support_test.rb +7 -1
  20. data/lib/davinci_pas_test_kit/generated/v2.0.1/claim_update/client_submit_request_claim_update_must_support_test.rb +5 -1
  21. data/lib/davinci_pas_test_kit/generated/v2.0.1/claim_update/server_submit_request_claim_update_must_support_test.rb +7 -1
  22. data/lib/davinci_pas_test_kit/generated/v2.0.1/claiminquiryresponse/server_inquiry_response_claiminquiryresponse_must_support_test.rb +5 -1
  23. data/lib/davinci_pas_test_kit/generated/v2.0.1/claimresponse/server_submit_response_claimresponse_must_support_test.rb +5 -1
  24. data/lib/davinci_pas_test_kit/generated/v2.0.1/client_tests/client_denial_pas_response_bundle_validation_test.rb +3 -0
  25. data/lib/davinci_pas_test_kit/generated/v2.0.1/client_tests/client_pended_pas_response_bundle_validation_test.rb +3 -0
  26. data/lib/davinci_pas_test_kit/generated/v2.0.1/communication_request/server_submit_response_communication_request_must_support_test.rb +5 -1
  27. data/lib/davinci_pas_test_kit/generated/v2.0.1/coverage/client_inquiry_request_coverage_must_support_test.rb +5 -1
  28. data/lib/davinci_pas_test_kit/generated/v2.0.1/coverage/client_submit_request_coverage_must_support_test.rb +5 -1
  29. data/lib/davinci_pas_test_kit/generated/v2.0.1/coverage/server_inquiry_request_coverage_must_support_test.rb +7 -1
  30. data/lib/davinci_pas_test_kit/generated/v2.0.1/coverage/server_submit_request_coverage_must_support_test.rb +7 -1
  31. data/lib/davinci_pas_test_kit/generated/v2.0.1/device_request/client_submit_request_device_request_must_support_test.rb +5 -1
  32. data/lib/davinci_pas_test_kit/generated/v2.0.1/device_request/server_submit_request_device_request_must_support_test.rb +7 -1
  33. data/lib/davinci_pas_test_kit/generated/v2.0.1/encounter/client_submit_request_encounter_must_support_test.rb +5 -1
  34. data/lib/davinci_pas_test_kit/generated/v2.0.1/encounter/server_submit_request_encounter_must_support_test.rb +7 -1
  35. data/lib/davinci_pas_test_kit/generated/v2.0.1/insurer/client_inquiry_request_insurer_must_support_test.rb +5 -1
  36. data/lib/davinci_pas_test_kit/generated/v2.0.1/insurer/client_submit_request_insurer_must_support_test.rb +5 -1
  37. data/lib/davinci_pas_test_kit/generated/v2.0.1/insurer/server_inquiry_request_insurer_must_support_test.rb +7 -1
  38. data/lib/davinci_pas_test_kit/generated/v2.0.1/insurer/server_inquiry_response_insurer_must_support_test.rb +5 -1
  39. data/lib/davinci_pas_test_kit/generated/v2.0.1/insurer/server_submit_request_insurer_must_support_test.rb +7 -1
  40. data/lib/davinci_pas_test_kit/generated/v2.0.1/insurer/server_submit_response_insurer_must_support_test.rb +5 -1
  41. data/lib/davinci_pas_test_kit/generated/v2.0.1/medication_request/client_submit_request_medication_request_must_support_test.rb +5 -1
  42. data/lib/davinci_pas_test_kit/generated/v2.0.1/medication_request/server_submit_request_medication_request_must_support_test.rb +7 -1
  43. data/lib/davinci_pas_test_kit/generated/v2.0.1/nutrition_order/client_submit_request_nutrition_order_must_support_test.rb +5 -1
  44. data/lib/davinci_pas_test_kit/generated/v2.0.1/nutrition_order/server_submit_request_nutrition_order_must_support_test.rb +7 -1
  45. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_inquiry_request_bundle/client_inquiry_request_pas_inquiry_request_bundle_must_support_test.rb +5 -1
  46. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_inquiry_request_bundle/server_inquiry_request_pas_inquiry_request_bundle_must_support_test.rb +7 -1
  47. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_inquiry_request_bundle/server_pas_inquiry_request_bundle_validation_test.rb +4 -0
  48. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_inquiry_response_bundle/server_inquiry_response_pas_inquiry_response_bundle_must_support_test.rb +5 -1
  49. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_inquiry_response_bundle/server_pas_inquiry_response_bundle_validation_test.rb +1 -0
  50. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_request_bundle/client_submit_request_pas_request_bundle_must_support_test.rb +5 -1
  51. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_request_bundle/server_pas_request_bundle_validation_test.rb +4 -0
  52. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_request_bundle/server_submit_request_pas_request_bundle_must_support_test.rb +7 -1
  53. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_response_bundle/server_pas_response_bundle_validation_test.rb +1 -0
  54. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_response_bundle/server_submit_response_pas_response_bundle_must_support_test.rb +5 -1
  55. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_server_approval_use_case_group.rb +3 -7
  56. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_server_denial_use_case_group.rb +3 -7
  57. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_server_must_support_use_case_group.rb +2 -2
  58. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_server_pended_use_case_group.rb +6 -8
  59. data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner/client_inquiry_request_practitioner_must_support_test.rb +5 -1
  60. data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner/client_submit_request_practitioner_must_support_test.rb +5 -1
  61. data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner/server_inquiry_request_practitioner_must_support_test.rb +7 -1
  62. data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner/server_inquiry_response_practitioner_must_support_test.rb +5 -1
  63. data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner/server_submit_request_practitioner_must_support_test.rb +7 -1
  64. data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner/server_submit_response_practitioner_must_support_test.rb +5 -1
  65. data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner_role/client_inquiry_request_practitioner_role_must_support_test.rb +5 -1
  66. data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner_role/client_submit_request_practitioner_role_must_support_test.rb +5 -1
  67. data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner_role/server_inquiry_request_practitioner_role_must_support_test.rb +7 -1
  68. data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner_role/server_inquiry_response_practitioner_role_must_support_test.rb +5 -1
  69. data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner_role/server_submit_request_practitioner_role_must_support_test.rb +7 -1
  70. data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner_role/server_submit_response_practitioner_role_must_support_test.rb +5 -1
  71. data/lib/davinci_pas_test_kit/generated/v2.0.1/requestor/client_inquiry_request_requestor_must_support_test.rb +5 -1
  72. data/lib/davinci_pas_test_kit/generated/v2.0.1/requestor/client_submit_request_requestor_must_support_test.rb +5 -1
  73. data/lib/davinci_pas_test_kit/generated/v2.0.1/requestor/server_inquiry_request_requestor_must_support_test.rb +7 -1
  74. data/lib/davinci_pas_test_kit/generated/v2.0.1/requestor/server_inquiry_response_requestor_must_support_test.rb +5 -1
  75. data/lib/davinci_pas_test_kit/generated/v2.0.1/requestor/server_submit_request_requestor_must_support_test.rb +7 -1
  76. data/lib/davinci_pas_test_kit/generated/v2.0.1/requestor/server_submit_response_requestor_must_support_test.rb +5 -1
  77. data/lib/davinci_pas_test_kit/generated/v2.0.1/server_suite.rb +2 -153
  78. data/lib/davinci_pas_test_kit/generated/v2.0.1/service_request/client_submit_request_service_request_must_support_test.rb +5 -1
  79. data/lib/davinci_pas_test_kit/generated/v2.0.1/service_request/server_submit_request_service_request_must_support_test.rb +7 -1
  80. data/lib/davinci_pas_test_kit/generated/v2.0.1/subscriber/client_inquiry_request_subscriber_must_support_test.rb +5 -1
  81. data/lib/davinci_pas_test_kit/generated/v2.0.1/subscriber/client_submit_request_subscriber_must_support_test.rb +5 -1
  82. data/lib/davinci_pas_test_kit/generated/v2.0.1/subscriber/server_inquiry_request_subscriber_must_support_test.rb +7 -1
  83. data/lib/davinci_pas_test_kit/generated/v2.0.1/subscriber/server_submit_request_subscriber_must_support_test.rb +7 -1
  84. data/lib/davinci_pas_test_kit/generated/v2.0.1/task/server_inquiry_response_task_must_support_test.rb +5 -1
  85. data/lib/davinci_pas_test_kit/generated/v2.0.1/task/server_submit_response_task_must_support_test.rb +5 -1
  86. data/lib/davinci_pas_test_kit/generator/group_generator.rb +26 -13
  87. data/lib/davinci_pas_test_kit/generator/operation_test_generator.rb +1 -1
  88. data/lib/davinci_pas_test_kit/generator/validation_test_generator.rb +9 -0
  89. data/lib/davinci_pas_test_kit/mock_server.rb +21 -3
  90. data/lib/davinci_pas_test_kit/must_support_test.rb +6 -2
  91. data/lib/davinci_pas_test_kit/pas_bundle_validation.rb +1 -1
  92. data/lib/davinci_pas_test_kit/version.rb +1 -1
  93. metadata +6 -3
@@ -10,6 +10,8 @@ module DaVinciPASTestKit
10
10
  title 'All must support elements for Profile PAS PractitionerRole are observed across all instances submitted'
11
11
  description %(
12
12
 
13
+ **USER INPUT VALIDATION**: This test validates input provided by the user instead of the system under test. Errors encountered will be treated as a skip instead of a failure.
14
+
13
15
  PAS server systems are required to be able to receive all
14
16
  must support elements on instances of all profiles included in
15
17
  requests, including instances of the PAS PractitionerRole Profile.
@@ -27,6 +29,10 @@ module DaVinciPASTestKit
27
29
  'PractitionerRole'
28
30
  end
29
31
 
32
+ def user_input_validation
33
+ true
34
+ end
35
+
30
36
  def self.metadata
31
37
  @metadata ||= Generator::GroupMetadata.new(YAML.load_file(File.join(__dir__, 'metadata.yml'), aliases: true))
32
38
  end
@@ -42,7 +48,7 @@ module DaVinciPASTestKit
42
48
 
43
49
  run do
44
50
  perform_must_support_test(resources_of_interest)
45
- validate_must_support
51
+ validate_must_support(user_input_validation)
46
52
  end
47
53
  end
48
54
  end
@@ -27,6 +27,10 @@ module DaVinciPASTestKit
27
27
  'PractitionerRole'
28
28
  end
29
29
 
30
+ def user_input_validation
31
+ false
32
+ end
33
+
30
34
  def self.metadata
31
35
  @metadata ||= Generator::GroupMetadata.new(YAML.load_file(File.join(__dir__, 'metadata.yml'), aliases: true))
32
36
  end
@@ -42,7 +46,7 @@ module DaVinciPASTestKit
42
46
 
43
47
  run do
44
48
  perform_must_support_test(resources_of_interest)
45
- validate_must_support
49
+ validate_must_support(user_input_validation)
46
50
  end
47
51
  end
48
52
  end
@@ -41,6 +41,10 @@ module DaVinciPASTestKit
41
41
  'Organization'
42
42
  end
43
43
 
44
+ def user_input_validation
45
+ false
46
+ end
47
+
44
48
  def self.metadata
45
49
  @metadata ||= Generator::GroupMetadata.new(YAML.load_file(File.join(__dir__, 'metadata.yml'), aliases: true))
46
50
  end
@@ -56,7 +60,7 @@ module DaVinciPASTestKit
56
60
 
57
61
  run do
58
62
  perform_must_support_test(resources_of_interest)
59
- validate_must_support
63
+ validate_must_support(user_input_validation)
60
64
  end
61
65
  end
62
66
  end
@@ -41,6 +41,10 @@ module DaVinciPASTestKit
41
41
  'Organization'
42
42
  end
43
43
 
44
+ def user_input_validation
45
+ false
46
+ end
47
+
44
48
  def self.metadata
45
49
  @metadata ||= Generator::GroupMetadata.new(YAML.load_file(File.join(__dir__, 'metadata.yml'), aliases: true))
46
50
  end
@@ -56,7 +60,7 @@ module DaVinciPASTestKit
56
60
 
57
61
  run do
58
62
  perform_must_support_test(resources_of_interest)
59
- validate_must_support
63
+ validate_must_support(user_input_validation)
60
64
  end
61
65
  end
62
66
  end
@@ -10,6 +10,8 @@ module DaVinciPASTestKit
10
10
  title 'All must support elements for Profile PAS Requestor Organization are observed across all instances submitted'
11
11
  description %(
12
12
 
13
+ **USER INPUT VALIDATION**: This test validates input provided by the user instead of the system under test. Errors encountered will be treated as a skip instead of a failure.
14
+
13
15
  PAS server systems are required to be able to receive all
14
16
  must support elements on instances of all profiles included in
15
17
  requests, including instances of the PAS Requestor Organization Profile.
@@ -41,6 +43,10 @@ module DaVinciPASTestKit
41
43
  'Organization'
42
44
  end
43
45
 
46
+ def user_input_validation
47
+ true
48
+ end
49
+
44
50
  def self.metadata
45
51
  @metadata ||= Generator::GroupMetadata.new(YAML.load_file(File.join(__dir__, 'metadata.yml'), aliases: true))
46
52
  end
@@ -56,7 +62,7 @@ module DaVinciPASTestKit
56
62
 
57
63
  run do
58
64
  perform_must_support_test(resources_of_interest)
59
- validate_must_support
65
+ validate_must_support(user_input_validation)
60
66
  end
61
67
  end
62
68
  end
@@ -41,6 +41,10 @@ module DaVinciPASTestKit
41
41
  'Organization'
42
42
  end
43
43
 
44
+ def user_input_validation
45
+ false
46
+ end
47
+
44
48
  def self.metadata
45
49
  @metadata ||= Generator::GroupMetadata.new(YAML.load_file(File.join(__dir__, 'metadata.yml'), aliases: true))
46
50
  end
@@ -56,7 +60,7 @@ module DaVinciPASTestKit
56
60
 
57
61
  run do
58
62
  perform_must_support_test(resources_of_interest)
59
- validate_must_support
63
+ validate_must_support(user_input_validation)
60
64
  end
61
65
  end
62
66
  end
@@ -10,6 +10,8 @@ module DaVinciPASTestKit
10
10
  title 'All must support elements for Profile PAS Requestor Organization are observed across all instances submitted'
11
11
  description %(
12
12
 
13
+ **USER INPUT VALIDATION**: This test validates input provided by the user instead of the system under test. Errors encountered will be treated as a skip instead of a failure.
14
+
13
15
  PAS server systems are required to be able to receive all
14
16
  must support elements on instances of all profiles included in
15
17
  requests, including instances of the PAS Requestor Organization Profile.
@@ -41,6 +43,10 @@ module DaVinciPASTestKit
41
43
  'Organization'
42
44
  end
43
45
 
46
+ def user_input_validation
47
+ true
48
+ end
49
+
44
50
  def self.metadata
45
51
  @metadata ||= Generator::GroupMetadata.new(YAML.load_file(File.join(__dir__, 'metadata.yml'), aliases: true))
46
52
  end
@@ -56,7 +62,7 @@ module DaVinciPASTestKit
56
62
 
57
63
  run do
58
64
  perform_must_support_test(resources_of_interest)
59
- validate_must_support
65
+ validate_must_support(user_input_validation)
60
66
  end
61
67
  end
62
68
  end
@@ -41,6 +41,10 @@ module DaVinciPASTestKit
41
41
  'Organization'
42
42
  end
43
43
 
44
+ def user_input_validation
45
+ false
46
+ end
47
+
44
48
  def self.metadata
45
49
  @metadata ||= Generator::GroupMetadata.new(YAML.load_file(File.join(__dir__, 'metadata.yml'), aliases: true))
46
50
  end
@@ -56,7 +60,7 @@ module DaVinciPASTestKit
56
60
 
57
61
  run do
58
62
  perform_must_support_test(resources_of_interest)
59
- validate_must_support
63
+ validate_must_support(user_input_validation)
60
64
  end
61
65
  end
62
66
  end
@@ -12,158 +12,7 @@ module DaVinciPASTestKit
12
12
  id :davinci_pas_server_suite_v201
13
13
  title 'Da Vinci PAS Server Suite v2.0.1'
14
14
  version DaVinciPASTestKit::VERSION
15
- description %(
16
- The Da Vinci PAS Server Suite validates the conformance of server systems
17
- to the STU 2 version of the HL7® FHIR®
18
- [Da Vinci Prior Authorization Support Implementation Guide](https://hl7.org/fhir/us/davinci-pas/STU2/).
19
-
20
- ## Scope
21
-
22
- These tests are a **DRAFT** intended to allow PAS server implementers to perform
23
- preliminary checks of their servers against PAS IG requirements and [provide
24
- feedback](https://github.com/inferno-framework/davinci-pas-test-kit/issues)
25
- on the tests. Future versions of these tests may validate other
26
- requirements and may change the test validation logic.
27
-
28
- ## Test Methodology
29
-
30
- Inferno will simulate a client and make a series of prior authorization requests to the
31
- server under test. Over the course of these requests, Inferno will seek to observe
32
- conformant handling of PAS requirements, including
33
- - The ability of the server to use PAS API interactions to communicate
34
- - Approval of a prior authorization request
35
- - Denial of a prior authorization request
36
- - Pending of a prior authorization request and a subsequent final decision
37
- - Inability to process a prior authorization request
38
- - The ability of the server to handle the full scope of data required by PAS, including
39
- - Ability to process prior auth requests and inquiries with all PAS profiles and all must support elements on those profiles
40
- - Ability to return responses that demonstrate the use of all PAS profiles and all must support elements on those profiles
41
-
42
- Because the business logic that determines decisions and the elements populated in responses
43
- Is outside of the PAS specification and will vary between implementers, testers
44
- are required to provide the requests that Inferno will make to the server.
45
-
46
- All requests and responses will be checked for conformance to the PAS
47
- IG requirements individually and used in aggregate to determine whether
48
- required features and functionality are present. HL7® FHIR® resources are
49
- validated with the Java validator using `tx.fhir.org` as the terminology server.
50
-
51
- These tests do not currently test the full scope of the IG. See the *Testing Limitations* section below
52
- for more details about the current scope of the tests and the reasons that some details have been left out.
53
-
54
- ## Running the Tests
55
-
56
- ### Quick Start
57
-
58
- Execution of these tests require a significant amount of tester input in the
59
- form of requests that Inferno will make against the server under test.
60
-
61
- If you would like to try out the tests using examples from the IG against the
62
- [public reference server endpoint](https://prior-auth.davinci.hl7.org/fhir) ([code on github](https://github.com/HL7-DaVinci/prior-auth)), you can do so by
63
- 1. Selecting the *Prior Authorization Support Reference Implementation* option from the Preset dropdown in the upper left
64
- 2. Clicking the *Run All Tests* button in the upper right
65
- 3. Clicking the *Submit* button at the bottom of the input dialog
66
-
67
- You can run these tests using your own server by updating the "FHIR Server Endpoint URL" and "OAuth Credentials" inputs.
68
-
69
- Note that:
70
- - the inputs for these tests are not complete and systems are not expected to pass the tests based on them.
71
- - the public reference server has not been updated to reflect the STU2 version that these tests target,
72
- so expect some additional failures when testing against it.
73
-
74
- ## Test Configuration Details
75
-
76
- The details provided here supplement the documentation of individual fields in the input dialog
77
- that appears when initiating a test run.
78
-
79
- ### Server identification
80
-
81
- Requests will be made to the `/Claim/$submit` and `/Claim/$inquire` endpoints under the url provided in the "FHIR Server Endpoint URL" field.
82
-
83
- ### Authentication
84
-
85
- The PAS IG states that
86
-
87
- > "PAS Servers **SHOULD** support server-server OAuth… In a future release of this guide, direction will limit the option to [require] server-server OAuth."
88
-
89
- The PAS test kit currently assumes that the handshake has already occurred and requires
90
- that a bearer token be provided in the “OAuth Credentials / Access Token” configuration
91
- field. Inferno will submit this token on all requests it makes to the server as a part of
92
- executing the tests. A complete backend server authentication handshake may be supported
93
- in future versions of the test kit.
94
-
95
- ### Payload
96
-
97
- All other inputs are for providing bundles for Inferno to submit as a part of the tests. To avoid placing
98
- requirements on the business logic, Inferno does not have standard requests to send as a part of the tests
99
- and instead relies on the tester to provide the requests that Inferno will make.
100
-
101
- For single-request fields (e.g., “PAS Submit Request Payload for Approval Response”), the input must be a json-encoded FHIR bundle.
102
-
103
- For multiple-request fields (e.g., “Additional PAS Submit Request Payloads”), the input must be a json array of json-encoded FHIR bundles (e.g., [fhir-bundle-1, fhir-bundle-2, …] where each fhir-bundle-n is a full bundle).
104
-
105
- ## Testing Limitations
106
-
107
- ### Private X12 details
108
-
109
- HIPAA [requires](https://hl7.org/fhir/us/davinci-pas/STU2/regulations.html) electronic prior authorization
110
- processing to use the X12 278 standard. While recent CMS rule-making suggests that [this requirement
111
- will not be enforced in the future](https://www.cms.gov/newsroom/fact-sheets/cms-interoperability-and-prior-authorization-final-rule-cms-0057-f),
112
- the current PAS IG relies heavily on X12. As the IG authors note at the
113
- top of the [IG home page](https://hl7.org/fhir/us/davinci-pas/STU2/):
114
-
115
- > Note that this implementation guide is intended to support mapping between FHIR and X12 transactions. To respect
116
- > X12 intellectual property, all mapping and X12-specific terminology information will be solely published by X12
117
- > and made available in accordance with X12 rules - which may require membership and/or payment. Please see this
118
- > [Da Vinci External Reference page](https://confluence.hl7.org/display/DVP/Da+Vinci+Reference+to+External+Standards+and+Terminologies)
119
- > for details on how to get this mapping.
120
- >
121
- > There are many situationally required fields that are specified in the X12 TRN03 guide that do not have guidance
122
- > in this Implementation Guide. Implementers need to consult the X12 PAS guides to know the requirements for these
123
- > fields.
124
- >
125
- > Several of the profiles will require use of terminologies that are part of X12 which we anticipate being made
126
- > publicly available. At such time as this occurs, the implementation guide will be updated to bind to these as
127
- > external terminologies.
128
-
129
- The implications of this reliance on proprietary information that is not publicly available means that this test
130
- kit:
131
-
132
- - Cannot verify the correct usage of X12-based terminology: terminology requirements for all elements bound to X12
133
- value sets will not be validated.
134
- - Cannot verify the meaning of codes: validation that a given response conveys something specific, e.g., approval
135
- or pending, is not performed.
136
- - Cannot verify matching semantics on inquiries: no checking of the identity of the ClaimResponse returned for an
137
- inquiry, e.g., that it matches the input or the original request.
138
-
139
- These limitations may be removed in future versions of these tests. In the meantime, testers should consider these
140
- requirements to be verified through attestation and should not represent their systems to have passed these tests
141
- if these requirements are not met.
142
-
143
- ### Underspecified Subscription Details
144
-
145
- The current PAS specification around subscriptions and notifications
146
- is not detailed enough to support testing. Notably,
147
- - There are no examples of what a notification payload looks like
148
- - There is no instruction on how to turn the notification payload into an inquiry
149
-
150
- Once these details have been clarified, validation of the notification workflows
151
- will be added to these tests.
152
-
153
- ### Future Details
154
-
155
- The PAS IG places additional requirements on servers that are not currently tested by this test kit, including
156
-
157
- - Prior Authorization update workflows
158
- - Requests for additional information handled through the CDex framework
159
- - PDF, CDA, and JPG attachments
160
- - US Core profile support for supporting information
161
- - Inquiry matching and subsetting logic
162
- - Inquiry requests from non-submitting systems
163
- - Collection of metrics
164
-
165
- These and any other requirements found in the PAS IG may be tested in future versions of these tests.
166
- )
15
+ description File.read(File.join(__dir__, '..', '..', 'docs', 'server_suite_description_v201.md'))
167
16
 
168
17
  links [
169
18
  {
@@ -209,7 +58,7 @@ module DaVinciPASTestKit
209
58
  oauth_credentials :smart_credentials
210
59
  end
211
60
 
212
- # Used for attestation experiment - see pas_claim_status_test.rb
61
+ # Used for attestation experiment - see pas_claim_response_decision_test.rb
213
62
  # resume_test_route :get, RESUME_PASS_PATH do |request|
214
63
  # request.query_parameters['token']
215
64
  # end
@@ -31,6 +31,10 @@ module DaVinciPASTestKit
31
31
  'ServiceRequest'
32
32
  end
33
33
 
34
+ def user_input_validation
35
+ false
36
+ end
37
+
34
38
  def self.metadata
35
39
  @metadata ||= Generator::GroupMetadata.new(YAML.load_file(File.join(__dir__, 'metadata.yml'), aliases: true))
36
40
  end
@@ -46,7 +50,7 @@ module DaVinciPASTestKit
46
50
 
47
51
  run do
48
52
  perform_must_support_test(resources_of_interest)
49
- validate_must_support
53
+ validate_must_support(user_input_validation)
50
54
  end
51
55
  end
52
56
  end
@@ -10,6 +10,8 @@ module DaVinciPASTestKit
10
10
  title 'All must support elements for Profile PAS Service Request are observed across all instances submitted'
11
11
  description %(
12
12
 
13
+ **USER INPUT VALIDATION**: This test validates input provided by the user instead of the system under test. Errors encountered will be treated as a skip instead of a failure.
14
+
13
15
  PAS server systems are required to be able to receive all
14
16
  must support elements on instances of all profiles included in
15
17
  requests, including instances of the PAS Service Request Profile.
@@ -31,6 +33,10 @@ module DaVinciPASTestKit
31
33
  'ServiceRequest'
32
34
  end
33
35
 
36
+ def user_input_validation
37
+ true
38
+ end
39
+
34
40
  def self.metadata
35
41
  @metadata ||= Generator::GroupMetadata.new(YAML.load_file(File.join(__dir__, 'metadata.yml'), aliases: true))
36
42
  end
@@ -46,7 +52,7 @@ module DaVinciPASTestKit
46
52
 
47
53
  run do
48
54
  perform_must_support_test(resources_of_interest)
49
- validate_must_support
55
+ validate_must_support(user_input_validation)
50
56
  end
51
57
  end
52
58
  end
@@ -52,6 +52,10 @@ module DaVinciPASTestKit
52
52
  'Patient'
53
53
  end
54
54
 
55
+ def user_input_validation
56
+ false
57
+ end
58
+
55
59
  def self.metadata
56
60
  @metadata ||= Generator::GroupMetadata.new(YAML.load_file(File.join(__dir__, 'metadata.yml'), aliases: true))
57
61
  end
@@ -67,7 +71,7 @@ module DaVinciPASTestKit
67
71
 
68
72
  run do
69
73
  perform_must_support_test(resources_of_interest)
70
- validate_must_support
74
+ validate_must_support(user_input_validation)
71
75
  end
72
76
  end
73
77
  end
@@ -52,6 +52,10 @@ module DaVinciPASTestKit
52
52
  'Patient'
53
53
  end
54
54
 
55
+ def user_input_validation
56
+ false
57
+ end
58
+
55
59
  def self.metadata
56
60
  @metadata ||= Generator::GroupMetadata.new(YAML.load_file(File.join(__dir__, 'metadata.yml'), aliases: true))
57
61
  end
@@ -67,7 +71,7 @@ module DaVinciPASTestKit
67
71
 
68
72
  run do
69
73
  perform_must_support_test(resources_of_interest)
70
- validate_must_support
74
+ validate_must_support(user_input_validation)
71
75
  end
72
76
  end
73
77
  end
@@ -10,6 +10,8 @@ module DaVinciPASTestKit
10
10
  title 'All must support elements for Profile PAS Subscriber Patient are observed across all instances submitted'
11
11
  description %(
12
12
 
13
+ **USER INPUT VALIDATION**: This test validates input provided by the user instead of the system under test. Errors encountered will be treated as a skip instead of a failure.
14
+
13
15
  PAS server systems are required to be able to receive all
14
16
  must support elements on instances of all profiles included in
15
17
  requests, including instances of the PAS Subscriber Patient Profile.
@@ -52,6 +54,10 @@ module DaVinciPASTestKit
52
54
  'Patient'
53
55
  end
54
56
 
57
+ def user_input_validation
58
+ true
59
+ end
60
+
55
61
  def self.metadata
56
62
  @metadata ||= Generator::GroupMetadata.new(YAML.load_file(File.join(__dir__, 'metadata.yml'), aliases: true))
57
63
  end
@@ -67,7 +73,7 @@ module DaVinciPASTestKit
67
73
 
68
74
  run do
69
75
  perform_must_support_test(resources_of_interest)
70
- validate_must_support
76
+ validate_must_support(user_input_validation)
71
77
  end
72
78
  end
73
79
  end
@@ -10,6 +10,8 @@ module DaVinciPASTestKit
10
10
  title 'All must support elements for Profile PAS Subscriber Patient are observed across all instances submitted'
11
11
  description %(
12
12
 
13
+ **USER INPUT VALIDATION**: This test validates input provided by the user instead of the system under test. Errors encountered will be treated as a skip instead of a failure.
14
+
13
15
  PAS server systems are required to be able to receive all
14
16
  must support elements on instances of all profiles included in
15
17
  requests, including instances of the PAS Subscriber Patient Profile.
@@ -52,6 +54,10 @@ module DaVinciPASTestKit
52
54
  'Patient'
53
55
  end
54
56
 
57
+ def user_input_validation
58
+ true
59
+ end
60
+
55
61
  def self.metadata
56
62
  @metadata ||= Generator::GroupMetadata.new(YAML.load_file(File.join(__dir__, 'metadata.yml'), aliases: true))
57
63
  end
@@ -67,7 +73,7 @@ module DaVinciPASTestKit
67
73
 
68
74
  run do
69
75
  perform_must_support_test(resources_of_interest)
70
- validate_must_support
76
+ validate_must_support(user_input_validation)
71
77
  end
72
78
  end
73
79
  end
@@ -39,6 +39,10 @@ module DaVinciPASTestKit
39
39
  'Task'
40
40
  end
41
41
 
42
+ def user_input_validation
43
+ false
44
+ end
45
+
42
46
  def self.metadata
43
47
  @metadata ||= Generator::GroupMetadata.new(YAML.load_file(File.join(__dir__, 'metadata.yml'), aliases: true))
44
48
  end
@@ -54,7 +58,7 @@ module DaVinciPASTestKit
54
58
 
55
59
  run do
56
60
  perform_must_support_test(resources_of_interest)
57
- validate_must_support
61
+ validate_must_support(user_input_validation)
58
62
  end
59
63
  end
60
64
  end
@@ -39,6 +39,10 @@ module DaVinciPASTestKit
39
39
  'Task'
40
40
  end
41
41
 
42
+ def user_input_validation
43
+ false
44
+ end
45
+
42
46
  def self.metadata
43
47
  @metadata ||= Generator::GroupMetadata.new(YAML.load_file(File.join(__dir__, 'metadata.yml'), aliases: true))
44
48
  end
@@ -54,7 +58,7 @@ module DaVinciPASTestKit
54
58
 
55
59
  run do
56
60
  perform_must_support_test(resources_of_interest)
57
- validate_must_support
61
+ validate_must_support(user_input_validation)
58
62
  end
59
63
  end
60
64
  end
@@ -174,13 +174,14 @@ module DaVinciPASTestKit
174
174
  end
175
175
 
176
176
  def approval_denial_test_ids
177
- submit_request_validation_test_ids + submit_operation_test_ids + submit_response_validation_test_ids
177
+ submit_request_validation_test_ids + submit_operation_test_ids +
178
+ submit_response_validation_test_ids + [claim_response_decision_test_id]
178
179
  end
179
180
 
180
181
  def grouped_approval_denial_test_ids
181
182
  {
182
- 'PAS Submit Operation' => approval_denial_test_ids,
183
- 'PAS Status Check' => [claim_status_test_id]
183
+ 'Server can respond to claims submitted for prior authorization' =>
184
+ approval_denial_test_ids
184
185
  }
185
186
  end
186
187
 
@@ -190,11 +191,12 @@ module DaVinciPASTestKit
190
191
  end
191
192
 
192
193
  def grouped_pended_test_ids
193
- inquiry_operation = inquiry_request_validation_test_ids +
194
+ inquiry_operation = [inquiry_notification_test_id] +
195
+ inquiry_request_validation_test_ids +
194
196
  inquiry_operation_test_ids +
195
197
  inquiry_response_validation_test_ids
196
198
  inquiry_tests = {
197
- 'PAS Inquiry Operation' => inquiry_operation
199
+ 'Server can respond to claims submitted for inquiry' => inquiry_operation
198
200
  }
199
201
 
200
202
  grouped_approval_denial_test_ids.merge(inquiry_tests)
@@ -214,12 +216,12 @@ module DaVinciPASTestKit
214
216
  inquiry_response_validation_test_ids
215
217
  {
216
218
  '$submit Element Support' => {
217
- 'PAS Submit Operation' => submit_tests,
219
+ 'Submission of claims to the $submit operation for must support validation' => submit_tests,
218
220
  '[USER INPUT VALIDATION] Submit Request Must Support' => submit_request_must_support_test_ids,
219
221
  'Submit Response Must Support' => submit_response_must_support_test_ids
220
222
  },
221
223
  '$inquire Element Support' => {
222
- 'PAS Inquiry Operation' => inquiry_operation,
224
+ 'Submission of claims to the $inquire operation for must support validation' => inquiry_operation,
223
225
  '[USER INPUT VALIDATION] Inquiry Request Must Support' => inquiry_request_must_support_test_ids,
224
226
  'Inquiry Response Must Support' => inquiry_response_must_support_test_ids
225
227
  }
@@ -243,11 +245,14 @@ module DaVinciPASTestKit
243
245
  end
244
246
 
245
247
  def approval_denial_test_file_list
246
- common_test_file_list(approval_denial_test_ids) << claim_status_file_name
248
+ common_test_file_list(approval_denial_test_ids) << claim_response_decision_file_name
247
249
  end
248
250
 
249
251
  def pended_test_file_list
250
- common_test_file_list(pended_test_ids) << claim_status_file_name
252
+ common_test_file_list(pended_test_ids).push(
253
+ claim_response_decision_file_name,
254
+ subscription_notification_file_name
255
+ )
251
256
  end
252
257
 
253
258
  def must_support_test_file_list
@@ -296,12 +301,20 @@ module DaVinciPASTestKit
296
301
  end
297
302
  end
298
303
 
299
- def claim_status_test_id
300
- 'prior_auth_claim_status'
304
+ def claim_response_decision_test_id
305
+ 'prior_auth_claim_response_decision_validation'
306
+ end
307
+
308
+ def inquiry_notification_test_id
309
+ 'prior_auth_claim_response_update_notification_validation'
310
+ end
311
+
312
+ def claim_response_decision_file_name
313
+ "../../custom_groups/#{ig_metadata.ig_version}/claim_response_decision/pas_claim_response_decision_test"
301
314
  end
302
315
 
303
- def claim_status_file_name
304
- "../../custom_groups/#{ig_metadata.ig_version}/claim_status/pas_claim_status_test"
316
+ def subscription_notification_file_name
317
+ "../../custom_groups/#{ig_metadata.ig_version}/notification/pas_subscription_notification_test"
305
318
  end
306
319
 
307
320
  def rename_input?(test_id)
@@ -119,7 +119,7 @@ module DaVinciPASTestKit
119
119
  end
120
120
 
121
121
  def title
122
- "Claim/$#{operation} Operation Test"
122
+ "Submission of a claim to the $#{operation} operation succeeds"
123
123
  end
124
124
 
125
125
  def description