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.
- checksums.yaml +4 -4
- data/lib/davinci_pas_test_kit/client_suite.rb +1 -169
- 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
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_approval_submit_response_attest.rb +1 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/must_support/pas_client_must_support_requirement_test.rb +1 -1
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/must_support/pas_server_must_support_requirement_test.rb +4 -1
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/notification/pas_subscription_notification_test.rb +40 -0
- data/lib/davinci_pas_test_kit/docs/client_suite_description_v201.md +172 -0
- data/lib/davinci_pas_test_kit/docs/server_suite_description_v201.md +150 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/beneficiary/client_inquiry_request_beneficiary_must_support_test.rb +5 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/beneficiary/client_submit_request_beneficiary_must_support_test.rb +5 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/beneficiary/server_inquiry_request_beneficiary_must_support_test.rb +7 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/beneficiary/server_inquiry_response_beneficiary_must_support_test.rb +5 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/beneficiary/server_submit_request_beneficiary_must_support_test.rb +7 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/beneficiary/server_submit_response_beneficiary_must_support_test.rb +5 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claim/claim_operation_test.rb +1 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claim_inquiry/claim_inquiry_operation_test.rb +1 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claim_inquiry/client_inquiry_request_claim_inquiry_must_support_test.rb +5 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claim_inquiry/server_inquiry_request_claim_inquiry_must_support_test.rb +7 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claim_update/client_submit_request_claim_update_must_support_test.rb +5 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claim_update/server_submit_request_claim_update_must_support_test.rb +7 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claiminquiryresponse/server_inquiry_response_claiminquiryresponse_must_support_test.rb +5 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claimresponse/server_submit_response_claimresponse_must_support_test.rb +5 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/client_tests/client_denial_pas_response_bundle_validation_test.rb +3 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/client_tests/client_pended_pas_response_bundle_validation_test.rb +3 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/communication_request/server_submit_response_communication_request_must_support_test.rb +5 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/coverage/client_inquiry_request_coverage_must_support_test.rb +5 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/coverage/client_submit_request_coverage_must_support_test.rb +5 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/coverage/server_inquiry_request_coverage_must_support_test.rb +7 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/coverage/server_submit_request_coverage_must_support_test.rb +7 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/device_request/client_submit_request_device_request_must_support_test.rb +5 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/device_request/server_submit_request_device_request_must_support_test.rb +7 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/encounter/client_submit_request_encounter_must_support_test.rb +5 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/encounter/server_submit_request_encounter_must_support_test.rb +7 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/insurer/client_inquiry_request_insurer_must_support_test.rb +5 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/insurer/client_submit_request_insurer_must_support_test.rb +5 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/insurer/server_inquiry_request_insurer_must_support_test.rb +7 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/insurer/server_inquiry_response_insurer_must_support_test.rb +5 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/insurer/server_submit_request_insurer_must_support_test.rb +7 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/insurer/server_submit_response_insurer_must_support_test.rb +5 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/medication_request/client_submit_request_medication_request_must_support_test.rb +5 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/medication_request/server_submit_request_medication_request_must_support_test.rb +7 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/nutrition_order/client_submit_request_nutrition_order_must_support_test.rb +5 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/nutrition_order/server_submit_request_nutrition_order_must_support_test.rb +7 -1
- 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
- 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
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_inquiry_request_bundle/server_pas_inquiry_request_bundle_validation_test.rb +4 -0
- 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
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_inquiry_response_bundle/server_pas_inquiry_response_bundle_validation_test.rb +1 -0
- 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
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_request_bundle/server_pas_request_bundle_validation_test.rb +4 -0
- 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
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_response_bundle/server_pas_response_bundle_validation_test.rb +1 -0
- 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
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_server_approval_use_case_group.rb +3 -7
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_server_denial_use_case_group.rb +3 -7
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_server_must_support_use_case_group.rb +2 -2
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_server_pended_use_case_group.rb +6 -8
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner/client_inquiry_request_practitioner_must_support_test.rb +5 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner/client_submit_request_practitioner_must_support_test.rb +5 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner/server_inquiry_request_practitioner_must_support_test.rb +7 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner/server_inquiry_response_practitioner_must_support_test.rb +5 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner/server_submit_request_practitioner_must_support_test.rb +7 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner/server_submit_response_practitioner_must_support_test.rb +5 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner_role/client_inquiry_request_practitioner_role_must_support_test.rb +5 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner_role/client_submit_request_practitioner_role_must_support_test.rb +5 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner_role/server_inquiry_request_practitioner_role_must_support_test.rb +7 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner_role/server_inquiry_response_practitioner_role_must_support_test.rb +5 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner_role/server_submit_request_practitioner_role_must_support_test.rb +7 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner_role/server_submit_response_practitioner_role_must_support_test.rb +5 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/requestor/client_inquiry_request_requestor_must_support_test.rb +5 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/requestor/client_submit_request_requestor_must_support_test.rb +5 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/requestor/server_inquiry_request_requestor_must_support_test.rb +7 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/requestor/server_inquiry_response_requestor_must_support_test.rb +5 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/requestor/server_submit_request_requestor_must_support_test.rb +7 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/requestor/server_submit_response_requestor_must_support_test.rb +5 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/server_suite.rb +2 -153
- data/lib/davinci_pas_test_kit/generated/v2.0.1/service_request/client_submit_request_service_request_must_support_test.rb +5 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/service_request/server_submit_request_service_request_must_support_test.rb +7 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/subscriber/client_inquiry_request_subscriber_must_support_test.rb +5 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/subscriber/client_submit_request_subscriber_must_support_test.rb +5 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/subscriber/server_inquiry_request_subscriber_must_support_test.rb +7 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/subscriber/server_submit_request_subscriber_must_support_test.rb +7 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/task/server_inquiry_response_task_must_support_test.rb +5 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/task/server_submit_response_task_must_support_test.rb +5 -1
- data/lib/davinci_pas_test_kit/generator/group_generator.rb +26 -13
- data/lib/davinci_pas_test_kit/generator/operation_test_generator.rb +1 -1
- data/lib/davinci_pas_test_kit/generator/validation_test_generator.rb +9 -0
- data/lib/davinci_pas_test_kit/mock_server.rb +21 -3
- data/lib/davinci_pas_test_kit/must_support_test.rb +6 -2
- data/lib/davinci_pas_test_kit/pas_bundle_validation.rb +1 -1
- data/lib/davinci_pas_test_kit/version.rb +1 -1
- 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
|
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
|
data/lib/davinci_pas_test_kit/generated/v2.0.1/task/server_submit_response_task_must_support_test.rb
CHANGED
@@ -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 +
|
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
|
-
'
|
183
|
-
|
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 =
|
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
|
-
'
|
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
|
-
'
|
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
|
-
'
|
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) <<
|
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)
|
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
|
300
|
-
'
|
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
|
304
|
-
"../../custom_groups/#{ig_metadata.ig_version}/
|
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)
|