davinci_pas_test_kit 0.9.0 → 0.9.2
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.
- 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/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 +167 -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/must_support_test.rb +6 -2
- 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)
|