davinci_pas_test_kit 0.9.0
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 +7 -0
- data/LICENSE +201 -0
- data/lib/davinci_pas_test_kit/client_suite.rb +289 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/claim_status/pas_claim_status_test.rb +109 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_approval_submit_response_attest.rb +39 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_approval_submit_test.rb +38 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_denial_submit_response_attest.rb +38 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_denial_submit_test.rb +43 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_inquire_must_support_test.rb +51 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_pended_inquire_response_attest.rb +39 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_pended_inquire_test.rb +35 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_pended_submit_response_attest.rb +39 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_pended_submit_test.rb +43 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_submit_must_support_test.rb +57 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_token_request_test.rb +31 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_token_validation_test.rb +18 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/error_tests/nonconformant_pas_bundle.json +16 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/error_tests/pas_inquiry_error_test.rb +38 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/error_tests/pas_submission_error_test.rb +56 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/must_support/device_request_metadata.yml +112 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/must_support/medication_request_metadata.yml +183 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/must_support/nutrition_order_metadata.yml +109 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/must_support/pas_client_must_support_requirement_test.rb +117 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/must_support/pas_server_must_support_requirement_test.rb +116 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/must_support/service_request_metadata.yml +148 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/pas_client_approval_group.rb +26 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/pas_client_authentication_group.rb +49 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/pas_client_denial_group.rb +41 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/pas_client_pended_group.rb +56 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/pas_error_group.rb +20 -0
- data/lib/davinci_pas_test_kit/ext/inferno_core/record_response_route.rb +98 -0
- data/lib/davinci_pas_test_kit/ext/inferno_core/request.rb +19 -0
- data/lib/davinci_pas_test_kit/ext/inferno_core/runnable.rb +18 -0
- data/lib/davinci_pas_test_kit/fhir_resource_navigation.rb +72 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/beneficiary/client_inquiry_request_beneficiary_must_support_test.rb +75 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/beneficiary/client_submit_request_beneficiary_must_support_test.rb +75 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/beneficiary/metadata.yml +162 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/beneficiary/server_inquiry_request_beneficiary_must_support_test.rb +75 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/beneficiary/server_inquiry_response_beneficiary_must_support_test.rb +75 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/beneficiary/server_submit_request_beneficiary_must_support_test.rb +75 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/beneficiary/server_submit_response_beneficiary_must_support_test.rb +75 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claim/claim_operation_test.rb +67 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claim/metadata.yml +577 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claim_inquiry/claim_inquiry_operation_test.rb +57 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claim_inquiry/client_inquiry_request_claim_inquiry_must_support_test.rb +95 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claim_inquiry/metadata.yml +516 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claim_inquiry/server_inquiry_request_claim_inquiry_must_support_test.rb +95 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claim_update/client_submit_request_claim_update_must_support_test.rb +102 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claim_update/metadata.yml +591 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claim_update/server_submit_request_claim_update_must_support_test.rb +102 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claiminquiryresponse/metadata.yml +311 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claiminquiryresponse/server_inquiry_response_claiminquiryresponse_must_support_test.rb +73 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claimresponse/metadata.yml +318 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claimresponse/server_submit_response_claimresponse_must_support_test.rb +75 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/client_tests/client_denial_pas_response_bundle_validation_test.rb +53 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/client_tests/client_pas_request_bundle_validation_test.rb +55 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/client_tests/client_pended_pas_inquiry_request_bundle_validation_test.rb +55 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/client_tests/client_pended_pas_response_bundle_validation_test.rb +53 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/communication_request/metadata.yml +130 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/communication_request/server_submit_response_communication_request_must_support_test.rb +58 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/coverage/client_inquiry_request_coverage_must_support_test.rb +55 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/coverage/client_submit_request_coverage_must_support_test.rb +55 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/coverage/metadata.yml +111 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/coverage/server_inquiry_request_coverage_must_support_test.rb +55 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/coverage/server_submit_request_coverage_must_support_test.rb +55 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/device_request/client_submit_request_device_request_must_support_test.rb +51 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/device_request/metadata.yml +112 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/device_request/server_submit_request_device_request_must_support_test.rb +51 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/encounter/client_submit_request_encounter_must_support_test.rb +67 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/encounter/metadata.yml +213 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/encounter/server_submit_request_encounter_must_support_test.rb +67 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/insurer/client_inquiry_request_insurer_must_support_test.rb +60 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/insurer/client_submit_request_insurer_must_support_test.rb +60 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/insurer/metadata.yml +104 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/insurer/server_inquiry_request_insurer_must_support_test.rb +60 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/insurer/server_inquiry_response_insurer_must_support_test.rb +60 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/insurer/server_submit_request_insurer_must_support_test.rb +60 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/insurer/server_submit_response_insurer_must_support_test.rb +60 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/medication_request/client_submit_request_medication_request_must_support_test.rb +61 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/medication_request/metadata.yml +183 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/medication_request/server_submit_request_medication_request_must_support_test.rb +61 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/metadata.yml +5253 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/nutrition_order/client_submit_request_nutrition_order_must_support_test.rb +53 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/nutrition_order/metadata.yml +109 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/nutrition_order/server_submit_request_nutrition_order_must_support_test.rb +53 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_client_inquiry_must_support_use_case_group.rb +51 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_client_submit_must_support_use_case_group.rb +61 -0
- 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 +53 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_inquiry_request_bundle/metadata.yml +77 -0
- 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 +53 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_inquiry_request_bundle/server_pas_inquiry_request_bundle_validation_test.rb +83 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_inquiry_response_bundle/metadata.yml +67 -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 +52 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_inquiry_response_bundle/server_pas_inquiry_response_bundle_validation_test.rb +80 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_request_bundle/client_submit_request_pas_request_bundle_must_support_test.rb +53 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_request_bundle/metadata.yml +77 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_request_bundle/server_pas_request_bundle_validation_test.rb +83 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_request_bundle/server_submit_request_pas_request_bundle_must_support_test.rb +53 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_response_bundle/metadata.yml +71 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_response_bundle/server_pas_response_bundle_validation_test.rb +80 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_response_bundle/server_submit_response_pas_response_bundle_must_support_test.rb +52 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_server_approval_use_case_group.rb +59 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_server_denial_use_case_group.rb +59 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_server_must_support_use_case_group.rb +265 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_server_pended_use_case_group.rb +84 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner/client_inquiry_request_practitioner_must_support_test.rb +53 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner/client_submit_request_practitioner_must_support_test.rb +53 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner/metadata.yml +74 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner/server_inquiry_request_practitioner_must_support_test.rb +53 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner/server_inquiry_response_practitioner_must_support_test.rb +53 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner/server_submit_request_practitioner_must_support_test.rb +53 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner/server_submit_response_practitioner_must_support_test.rb +53 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner_role/client_inquiry_request_practitioner_role_must_support_test.rb +49 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner_role/client_submit_request_practitioner_role_must_support_test.rb +49 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner_role/metadata.yml +81 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner_role/server_inquiry_request_practitioner_role_must_support_test.rb +49 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner_role/server_inquiry_response_practitioner_role_must_support_test.rb +49 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner_role/server_submit_request_practitioner_role_must_support_test.rb +49 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner_role/server_submit_response_practitioner_role_must_support_test.rb +49 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/requestor/client_inquiry_request_requestor_must_support_test.rb +63 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/requestor/client_submit_request_requestor_must_support_test.rb +63 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/requestor/metadata.yml +107 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/requestor/server_inquiry_request_requestor_must_support_test.rb +63 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/requestor/server_inquiry_response_requestor_must_support_test.rb +63 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/requestor/server_submit_request_requestor_must_support_test.rb +63 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/requestor/server_submit_response_requestor_must_support_test.rb +63 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/resource_list.rb +54 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/server_suite.rb +236 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/service_request/client_submit_request_service_request_must_support_test.rb +53 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/service_request/metadata.yml +148 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/service_request/server_submit_request_service_request_must_support_test.rb +53 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/subscriber/client_inquiry_request_subscriber_must_support_test.rb +74 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/subscriber/client_submit_request_subscriber_must_support_test.rb +74 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/subscriber/metadata.yml +159 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/subscriber/server_inquiry_request_subscriber_must_support_test.rb +74 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/subscriber/server_submit_request_subscriber_must_support_test.rb +74 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/task/metadata.yml +192 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/task/server_inquiry_response_task_must_support_test.rb +61 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/task/server_submit_response_task_must_support_test.rb +61 -0
- data/lib/davinci_pas_test_kit/generator/group_generator.rb +440 -0
- data/lib/davinci_pas_test_kit/generator/group_metadata.rb +73 -0
- data/lib/davinci_pas_test_kit/generator/group_metadata_extractor.rb +244 -0
- data/lib/davinci_pas_test_kit/generator/ig_loader.rb +78 -0
- data/lib/davinci_pas_test_kit/generator/ig_metadata.rb +66 -0
- data/lib/davinci_pas_test_kit/generator/ig_metadata_extractor.rb +54 -0
- data/lib/davinci_pas_test_kit/generator/ig_resources.rb +74 -0
- data/lib/davinci_pas_test_kit/generator/must_support_check_profiles.rb +86 -0
- data/lib/davinci_pas_test_kit/generator/must_support_metadata_extractor.rb +327 -0
- data/lib/davinci_pas_test_kit/generator/must_support_test_generator.rb +155 -0
- data/lib/davinci_pas_test_kit/generator/naming.rb +50 -0
- data/lib/davinci_pas_test_kit/generator/operation_test_generator.rb +136 -0
- data/lib/davinci_pas_test_kit/generator/resource_list_generator.rb +59 -0
- data/lib/davinci_pas_test_kit/generator/suite_generator.rb +94 -0
- data/lib/davinci_pas_test_kit/generator/terminology_binding_metadata_extractor.rb +108 -0
- data/lib/davinci_pas_test_kit/generator/validation_test_generator.rb +181 -0
- data/lib/davinci_pas_test_kit/generator/value_extractor.rb +48 -0
- data/lib/davinci_pas_test_kit/generator.rb +80 -0
- data/lib/davinci_pas_test_kit/mock_server.rb +189 -0
- data/lib/davinci_pas_test_kit/must_support_test.rb +267 -0
- data/lib/davinci_pas_test_kit/pas_bundle_validation.rb +568 -0
- data/lib/davinci_pas_test_kit/tags.rb +7 -0
- data/lib/davinci_pas_test_kit/urls.rb +39 -0
- data/lib/davinci_pas_test_kit/user_input_response.rb +32 -0
- data/lib/davinci_pas_test_kit/validation_test.rb +58 -0
- data/lib/davinci_pas_test_kit/validator_suppressions.rb +143 -0
- data/lib/davinci_pas_test_kit/version.rb +5 -0
- data/lib/davinci_pas_test_kit.rb +2 -0
- metadata +281 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 8afec0fe44554f72cce5bfd53e2ec230aac6b9cf7a1c9619a2e7264f3e09a2ba
|
|
4
|
+
data.tar.gz: 02c6532a6c3e541a704df48a875e20bf73282e4d8fbf7cd590c6541d7d1183f9
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 2a198d440407b88f2c9fef9002f36ece049baec615418d8a538a14d3314551366546331d44cea15b12e433cfbb25c5e8f087b71d45fa2a66c404618a2f1a4f58
|
|
7
|
+
data.tar.gz: c21b95655561c420a0a28efaf222d0ad0a480b17aa1dc53c4d2faeee0322bc6de5395c82162197dfd9e748dbf21c58438b1a9a978190f75af10a277accc0af3a
|
data/LICENSE
ADDED
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
Apache License
|
|
2
|
+
Version 2.0, January 2004
|
|
3
|
+
http://www.apache.org/licenses/
|
|
4
|
+
|
|
5
|
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
6
|
+
|
|
7
|
+
1. Definitions.
|
|
8
|
+
|
|
9
|
+
"License" shall mean the terms and conditions for use, reproduction,
|
|
10
|
+
and distribution as defined by Sections 1 through 9 of this document.
|
|
11
|
+
|
|
12
|
+
"Licensor" shall mean the copyright owner or entity authorized by
|
|
13
|
+
the copyright owner that is granting the License.
|
|
14
|
+
|
|
15
|
+
"Legal Entity" shall mean the union of the acting entity and all
|
|
16
|
+
other entities that control, are controlled by, or are under common
|
|
17
|
+
control with that entity. For the purposes of this definition,
|
|
18
|
+
"control" means (i) the power, direct or indirect, to cause the
|
|
19
|
+
direction or management of such entity, whether by contract or
|
|
20
|
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
|
21
|
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
|
22
|
+
|
|
23
|
+
"You" (or "Your") shall mean an individual or Legal Entity
|
|
24
|
+
exercising permissions granted by this License.
|
|
25
|
+
|
|
26
|
+
"Source" form shall mean the preferred form for making modifications,
|
|
27
|
+
including but not limited to software source code, documentation
|
|
28
|
+
source, and configuration files.
|
|
29
|
+
|
|
30
|
+
"Object" form shall mean any form resulting from mechanical
|
|
31
|
+
transformation or translation of a Source form, including but
|
|
32
|
+
not limited to compiled object code, generated documentation,
|
|
33
|
+
and conversions to other media types.
|
|
34
|
+
|
|
35
|
+
"Work" shall mean the work of authorship, whether in Source or
|
|
36
|
+
Object form, made available under the License, as indicated by a
|
|
37
|
+
copyright notice that is included in or attached to the work
|
|
38
|
+
(an example is provided in the Appendix below).
|
|
39
|
+
|
|
40
|
+
"Derivative Works" shall mean any work, whether in Source or Object
|
|
41
|
+
form, that is based on (or derived from) the Work and for which the
|
|
42
|
+
editorial revisions, annotations, elaborations, or other modifications
|
|
43
|
+
represent, as a whole, an original work of authorship. For the purposes
|
|
44
|
+
of this License, Derivative Works shall not include works that remain
|
|
45
|
+
separable from, or merely link (or bind by name) to the interfaces of,
|
|
46
|
+
the Work and Derivative Works thereof.
|
|
47
|
+
|
|
48
|
+
"Contribution" shall mean any work of authorship, including
|
|
49
|
+
the original version of the Work and any modifications or additions
|
|
50
|
+
to that Work or Derivative Works thereof, that is intentionally
|
|
51
|
+
submitted to Licensor for inclusion in the Work by the copyright owner
|
|
52
|
+
or by an individual or Legal Entity authorized to submit on behalf of
|
|
53
|
+
the copyright owner. For the purposes of this definition, "submitted"
|
|
54
|
+
means any form of electronic, verbal, or written communication sent
|
|
55
|
+
to the Licensor or its representatives, including but not limited to
|
|
56
|
+
communication on electronic mailing lists, source code control systems,
|
|
57
|
+
and issue tracking systems that are managed by, or on behalf of, the
|
|
58
|
+
Licensor for the purpose of discussing and improving the Work, but
|
|
59
|
+
excluding communication that is conspicuously marked or otherwise
|
|
60
|
+
designated in writing by the copyright owner as "Not a Contribution."
|
|
61
|
+
|
|
62
|
+
"Contributor" shall mean Licensor and any individual or Legal Entity
|
|
63
|
+
on behalf of whom a Contribution has been received by Licensor and
|
|
64
|
+
subsequently incorporated within the Work.
|
|
65
|
+
|
|
66
|
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
|
67
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
68
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
69
|
+
copyright license to reproduce, prepare Derivative Works of,
|
|
70
|
+
publicly display, publicly perform, sublicense, and distribute the
|
|
71
|
+
Work and such Derivative Works in Source or Object form.
|
|
72
|
+
|
|
73
|
+
3. Grant of Patent License. Subject to the terms and conditions of
|
|
74
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
75
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
76
|
+
(except as stated in this section) patent license to make, have made,
|
|
77
|
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
|
78
|
+
where such license applies only to those patent claims licensable
|
|
79
|
+
by such Contributor that are necessarily infringed by their
|
|
80
|
+
Contribution(s) alone or by combination of their Contribution(s)
|
|
81
|
+
with the Work to which such Contribution(s) was submitted. If You
|
|
82
|
+
institute patent litigation against any entity (including a
|
|
83
|
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
|
84
|
+
or a Contribution incorporated within the Work constitutes direct
|
|
85
|
+
or contributory patent infringement, then any patent licenses
|
|
86
|
+
granted to You under this License for that Work shall terminate
|
|
87
|
+
as of the date such litigation is filed.
|
|
88
|
+
|
|
89
|
+
4. Redistribution. You may reproduce and distribute copies of the
|
|
90
|
+
Work or Derivative Works thereof in any medium, with or without
|
|
91
|
+
modifications, and in Source or Object form, provided that You
|
|
92
|
+
meet the following conditions:
|
|
93
|
+
|
|
94
|
+
(a) You must give any other recipients of the Work or
|
|
95
|
+
Derivative Works a copy of this License; and
|
|
96
|
+
|
|
97
|
+
(b) You must cause any modified files to carry prominent notices
|
|
98
|
+
stating that You changed the files; and
|
|
99
|
+
|
|
100
|
+
(c) You must retain, in the Source form of any Derivative Works
|
|
101
|
+
that You distribute, all copyright, patent, trademark, and
|
|
102
|
+
attribution notices from the Source form of the Work,
|
|
103
|
+
excluding those notices that do not pertain to any part of
|
|
104
|
+
the Derivative Works; and
|
|
105
|
+
|
|
106
|
+
(d) If the Work includes a "NOTICE" text file as part of its
|
|
107
|
+
distribution, then any Derivative Works that You distribute must
|
|
108
|
+
include a readable copy of the attribution notices contained
|
|
109
|
+
within such NOTICE file, excluding those notices that do not
|
|
110
|
+
pertain to any part of the Derivative Works, in at least one
|
|
111
|
+
of the following places: within a NOTICE text file distributed
|
|
112
|
+
as part of the Derivative Works; within the Source form or
|
|
113
|
+
documentation, if provided along with the Derivative Works; or,
|
|
114
|
+
within a display generated by the Derivative Works, if and
|
|
115
|
+
wherever such third-party notices normally appear. The contents
|
|
116
|
+
of the NOTICE file are for informational purposes only and
|
|
117
|
+
do not modify the License. You may add Your own attribution
|
|
118
|
+
notices within Derivative Works that You distribute, alongside
|
|
119
|
+
or as an addendum to the NOTICE text from the Work, provided
|
|
120
|
+
that such additional attribution notices cannot be construed
|
|
121
|
+
as modifying the License.
|
|
122
|
+
|
|
123
|
+
You may add Your own copyright statement to Your modifications and
|
|
124
|
+
may provide additional or different license terms and conditions
|
|
125
|
+
for use, reproduction, or distribution of Your modifications, or
|
|
126
|
+
for any such Derivative Works as a whole, provided Your use,
|
|
127
|
+
reproduction, and distribution of the Work otherwise complies with
|
|
128
|
+
the conditions stated in this License.
|
|
129
|
+
|
|
130
|
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
|
131
|
+
any Contribution intentionally submitted for inclusion in the Work
|
|
132
|
+
by You to the Licensor shall be under the terms and conditions of
|
|
133
|
+
this License, without any additional terms or conditions.
|
|
134
|
+
Notwithstanding the above, nothing herein shall supersede or modify
|
|
135
|
+
the terms of any separate license agreement you may have executed
|
|
136
|
+
with Licensor regarding such Contributions.
|
|
137
|
+
|
|
138
|
+
6. Trademarks. This License does not grant permission to use the trade
|
|
139
|
+
names, trademarks, service marks, or product names of the Licensor,
|
|
140
|
+
except as required for reasonable and customary use in describing the
|
|
141
|
+
origin of the Work and reproducing the content of the NOTICE file.
|
|
142
|
+
|
|
143
|
+
7. Disclaimer of Warranty. Unless required by applicable law or
|
|
144
|
+
agreed to in writing, Licensor provides the Work (and each
|
|
145
|
+
Contributor provides its Contributions) on an "AS IS" BASIS,
|
|
146
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
147
|
+
implied, including, without limitation, any warranties or conditions
|
|
148
|
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
|
149
|
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
|
150
|
+
appropriateness of using or redistributing the Work and assume any
|
|
151
|
+
risks associated with Your exercise of permissions under this License.
|
|
152
|
+
|
|
153
|
+
8. Limitation of Liability. In no event and under no legal theory,
|
|
154
|
+
whether in tort (including negligence), contract, or otherwise,
|
|
155
|
+
unless required by applicable law (such as deliberate and grossly
|
|
156
|
+
negligent acts) or agreed to in writing, shall any Contributor be
|
|
157
|
+
liable to You for damages, including any direct, indirect, special,
|
|
158
|
+
incidental, or consequential damages of any character arising as a
|
|
159
|
+
result of this License or out of the use or inability to use the
|
|
160
|
+
Work (including but not limited to damages for loss of goodwill,
|
|
161
|
+
work stoppage, computer failure or malfunction, or any and all
|
|
162
|
+
other commercial damages or losses), even if such Contributor
|
|
163
|
+
has been advised of the possibility of such damages.
|
|
164
|
+
|
|
165
|
+
9. Accepting Warranty or Additional Liability. While redistributing
|
|
166
|
+
the Work or Derivative Works thereof, You may choose to offer,
|
|
167
|
+
and charge a fee for, acceptance of support, warranty, indemnity,
|
|
168
|
+
or other liability obligations and/or rights consistent with this
|
|
169
|
+
License. However, in accepting such obligations, You may act only
|
|
170
|
+
on Your own behalf and on Your sole responsibility, not on behalf
|
|
171
|
+
of any other Contributor, and only if You agree to indemnify,
|
|
172
|
+
defend, and hold each Contributor harmless for any liability
|
|
173
|
+
incurred by, or claims asserted against, such Contributor by reason
|
|
174
|
+
of your accepting any such warranty or additional liability.
|
|
175
|
+
|
|
176
|
+
END OF TERMS AND CONDITIONS
|
|
177
|
+
|
|
178
|
+
APPENDIX: How to apply the Apache License to your work.
|
|
179
|
+
|
|
180
|
+
To apply the Apache License to your work, attach the following
|
|
181
|
+
boilerplate notice, with the fields enclosed by brackets "{}"
|
|
182
|
+
replaced with your own identifying information. (Don't include
|
|
183
|
+
the brackets!) The text should be enclosed in the appropriate
|
|
184
|
+
comment syntax for the file format. We also recommend that a
|
|
185
|
+
file or class name and description of purpose be included on the
|
|
186
|
+
same "printed page" as the copyright notice for easier
|
|
187
|
+
identification within third-party archives.
|
|
188
|
+
|
|
189
|
+
Copyright {yyyy} {name of copyright owner}
|
|
190
|
+
|
|
191
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
192
|
+
you may not use this file except in compliance with the License.
|
|
193
|
+
You may obtain a copy of the License at
|
|
194
|
+
|
|
195
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
196
|
+
|
|
197
|
+
Unless required by applicable law or agreed to in writing, software
|
|
198
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
199
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
200
|
+
See the License for the specific language governing permissions and
|
|
201
|
+
limitations under the License.
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
require_relative 'ext/inferno_core/record_response_route'
|
|
2
|
+
require_relative 'ext/inferno_core/runnable'
|
|
3
|
+
require_relative 'ext/inferno_core/request'
|
|
4
|
+
require_relative 'validator_suppressions'
|
|
5
|
+
require_relative 'tags'
|
|
6
|
+
require_relative 'urls'
|
|
7
|
+
require_relative 'mock_server'
|
|
8
|
+
require_relative 'custom_groups/v2.0.1/pas_client_authentication_group'
|
|
9
|
+
require_relative 'custom_groups/v2.0.1/pas_client_approval_group'
|
|
10
|
+
require_relative 'custom_groups/v2.0.1/pas_client_denial_group'
|
|
11
|
+
require_relative 'custom_groups/v2.0.1/pas_client_pended_group'
|
|
12
|
+
require_relative 'generated/v2.0.1/pas_client_submit_must_support_use_case_group'
|
|
13
|
+
require_relative 'generated/v2.0.1/pas_client_inquiry_must_support_use_case_group'
|
|
14
|
+
require_relative 'version'
|
|
15
|
+
|
|
16
|
+
module DaVinciPASTestKit
|
|
17
|
+
class ClientSuite < Inferno::TestSuite
|
|
18
|
+
extend MockServer
|
|
19
|
+
|
|
20
|
+
id :davinci_pas_client_suite_v201
|
|
21
|
+
title 'Da Vinci PAS Client Suite v2.0.1'
|
|
22
|
+
version VERSION
|
|
23
|
+
description %(
|
|
24
|
+
The Da Vinci PAS Test Kit Client Suite validates the conformance of client
|
|
25
|
+
systems to the STU 2 version of the HL7® FHIR®
|
|
26
|
+
[Da Vinci Prior Authorization Support Implementation Guide](https://hl7.org/fhir/us/davinci-pas/STU2/).
|
|
27
|
+
|
|
28
|
+
## Scope
|
|
29
|
+
|
|
30
|
+
These tests are a **DRAFT** intended to allow PAS client implementers to perform
|
|
31
|
+
preliminary checks of their clients against PAS IG requirements and [provide
|
|
32
|
+
feedback](https://github.com/inferno-framework/davinci-pas-test-kit/issues)
|
|
33
|
+
on the tests. Future versions of these tests may validate other
|
|
34
|
+
requirements and may change the test validation logic.
|
|
35
|
+
|
|
36
|
+
## Test Methodology
|
|
37
|
+
|
|
38
|
+
Inferno will simulate a PAS server for the client under test to interact with. The client
|
|
39
|
+
will be expected to initiate requests to the server and demonstrate its ability to react
|
|
40
|
+
to the returned responses. Over the course of these interactions,
|
|
41
|
+
Inferno will seek to observe conformant handling of PAS requirements, including
|
|
42
|
+
- The ability of the client to initiate and react to
|
|
43
|
+
- The approval of a prior authorization request
|
|
44
|
+
- The denial of a prior authorization request
|
|
45
|
+
- The pending of a prior authorization request and a subsequent final decision
|
|
46
|
+
- The ability of the client to provide data covering the full scope of required by PAS, including
|
|
47
|
+
- The ability to send prior auth requests and inquiries with all PAS profiles and all must support elements on
|
|
48
|
+
those profiles
|
|
49
|
+
- The ability to handle responses that contain all PAS profiles and all must support elements on those
|
|
50
|
+
profiles (not included in the current version of these tests)
|
|
51
|
+
|
|
52
|
+
Because X12 details, including coded values indicating details like “denied” and “pended”,
|
|
53
|
+
are not public, Inferno is not currently able to generate a full set of responses to requests
|
|
54
|
+
or otherwise provide details on specific codes used to represent those concepts
|
|
55
|
+
and is limited to responses that look similar to the examples in the IG (e.g., [here](https://hl7.org/fhir/us/davinci-pas/STU2/Bundle-ReferralAuthorizationResponseBundleExample.html)).
|
|
56
|
+
Thus,
|
|
57
|
+
|
|
58
|
+
- In order to demonstrate specific workflows, namely pend and denial, users will need to provide the expected
|
|
59
|
+
response for Inferno to send back
|
|
60
|
+
- The current tests do not return to the client all PAS profiles and must support elements to confirm support.
|
|
61
|
+
|
|
62
|
+
For further details on limitations of these tests, see the *Testing Limitations* section below.
|
|
63
|
+
|
|
64
|
+
All requests and responses will be checked for conformance to the PAS
|
|
65
|
+
IG requirements individually and used in aggregate to determine whether
|
|
66
|
+
required features and functionality are present. HL7® FHIR® resources are
|
|
67
|
+
validated with the Java validator using `tx.fhir.org` as the terminology server.
|
|
68
|
+
|
|
69
|
+
## Running the Tests
|
|
70
|
+
|
|
71
|
+
### Quick Start
|
|
72
|
+
|
|
73
|
+
For Inferno to simulate a server that always returns approved responses, it needs
|
|
74
|
+
only to know the bearer token that the client will send on requests, for which there are two options.
|
|
75
|
+
|
|
76
|
+
1. If you want to choose your own bearer token, then
|
|
77
|
+
1. Select the "2. PAS Client Validation" test from the list on the left.
|
|
78
|
+
2. Click the '*Run All Tests*' button on the right.
|
|
79
|
+
3. In the "access_token" field, enter the bearer token that will be sent by the client under test (as part
|
|
80
|
+
of the Authorization header - Bearer: <provided value>).
|
|
81
|
+
4. Click the '*Submit*' button at the bottom of the dialog.
|
|
82
|
+
2. If you want to use a client_id to obtain an access token, then
|
|
83
|
+
1. Click the '*Run All Tests*' button on the right.
|
|
84
|
+
2. Provide the client's registered id "client_id" field of the input (NOTE, Inferno doesn't support the
|
|
85
|
+
registration API, so this must be obtained from another system or configured manually).
|
|
86
|
+
3. Click the '*Submit*' button at the bottom of the dialog.
|
|
87
|
+
4. Make a token request that includes the specified client id to the
|
|
88
|
+
`<inferno host>/custom/davinci_pas_client_suite_v201/mock_auth/token` endpoint to get
|
|
89
|
+
an access token to use on the request of the requests.
|
|
90
|
+
|
|
91
|
+
In either case, the tests will continue from that point, requesting the user to
|
|
92
|
+
direct the client to make certain requests to demonstrate PAS client capabilities.
|
|
93
|
+
|
|
94
|
+
Note: authentication options for these tests have not been finalized and are subject to change.
|
|
95
|
+
|
|
96
|
+
### Complete Setup
|
|
97
|
+
|
|
98
|
+
The *Quick Start* approach does not test pended or deny workflows. To test these, provide a
|
|
99
|
+
json-encoded FHIR bundle in the "Claim pended response JSON" and "Claim deny response JSON" input field after
|
|
100
|
+
clicking the '*Run All Tests*' button. These responses will be echoed back when a request
|
|
101
|
+
is made during the corresponding test.
|
|
102
|
+
|
|
103
|
+
### Postman-based Demo
|
|
104
|
+
|
|
105
|
+
If you do not have a PAS client but would like to try the tests out, you can use
|
|
106
|
+
[this postman collection](https://raw.githubusercontent.com/inferno-framework/davinci-pas-test-kit/blob/main/config/PAS%20Test%20Kit%20Client%20Test%20Demo.postman_collection.json)
|
|
107
|
+
to make requests against Inferno. The following requests and example responses from that collection can be used.
|
|
108
|
+
|
|
109
|
+
- Configuration
|
|
110
|
+
- *Deny Response* example under the *Homecare Prior Authorization Request*: use as the value of the
|
|
111
|
+
"Claim denied response JSON" input field. NOTE: this contains a placeholder code `DENIEDCODE` for the
|
|
112
|
+
X12 code representing the denied status. Replace with the X12-specified code before providing to Inferno
|
|
113
|
+
to accurately replicate a denial workflow for the client under test.
|
|
114
|
+
- *Pend Response* example under the *Medical Services Prior Authorization Request*: use as the value of the
|
|
115
|
+
"Claim pended response JSON" input field. NOTE: this contains a placeholder code `PENDEDCODE` for the
|
|
116
|
+
X12 code representing the pended status. Replace with the X12-specified code before providing to Inferno
|
|
117
|
+
to accurately replicate a pend workflow for the client under test.
|
|
118
|
+
- Submissions
|
|
119
|
+
- *mock token*: for submitting a client id to get back an access token to use on the rest of the tests. Set the
|
|
120
|
+
collection's access_token variable to the result.
|
|
121
|
+
- *Referral Prior Authorization Request*: use for the "Approval" workflow test submission.
|
|
122
|
+
- *Medical Services Prior Authorization Request*: use for the "Pended" workflow test submission.
|
|
123
|
+
- *Medical Services Inquiry Request*: use for the "Pended" workflow test inquiry.
|
|
124
|
+
|
|
125
|
+
No additional requests are present to submit as a part of the must support tests, so
|
|
126
|
+
testers can simply click the link to indicate they are done submitting requests. Note
|
|
127
|
+
that the requests within the Postman client are not expected to fully pass the tests as they
|
|
128
|
+
do not contain all must support items.
|
|
129
|
+
|
|
130
|
+
## Testing Limitations
|
|
131
|
+
|
|
132
|
+
### Private X12 details
|
|
133
|
+
|
|
134
|
+
HIPAA [requires](https://hl7.org/fhir/us/davinci-pas/STU2/regulations.html) electronic prior authorization
|
|
135
|
+
processing to use the X12 278 standard. While recent CMS rule-making suggests that [this requirement
|
|
136
|
+
will not be enforced in the future](https://www.cms.gov/newsroom/fact-sheets/cms-interoperability-and-prior-authorization-final-rule-cms-0057-f),
|
|
137
|
+
the current PAS IG relies heavily on X12. As the IG authors note at the
|
|
138
|
+
top of the [IG home page](https://hl7.org/fhir/us/davinci-pas/STU2/index.html):
|
|
139
|
+
|
|
140
|
+
> Note that this implementation guide is intended to support mapping between FHIR and X12 transactions. To respect
|
|
141
|
+
> X12 intellectual property, all mapping and X12-specific terminology information will be solely published by X12
|
|
142
|
+
> and made available in accordance with X12 rules - which may require membership and/or payment. Please see this
|
|
143
|
+
> [Da Vinci External Reference page](https://confluence.hl7.org/display/DVP/Da+Vinci+Reference+to+External+Standards+and+Terminologies)
|
|
144
|
+
> for details on how to get this mapping.
|
|
145
|
+
>
|
|
146
|
+
> There are many situationally required fields that are specified in the X12 TRN03 guide that do not have guidance
|
|
147
|
+
> in this Implementation Guide. Implementers need to consult the X12 PAS guides to know the requirements for these
|
|
148
|
+
> fields.
|
|
149
|
+
>
|
|
150
|
+
> Several of the profiles will require use of terminologies that are part of X12 which we anticipate being made
|
|
151
|
+
> publicly available. At such time as this occurs, the implementation guide will be updated to bind to these as
|
|
152
|
+
> external terminologies.
|
|
153
|
+
|
|
154
|
+
The implications of this reliance on proprietary information that is not publicly available means that this test
|
|
155
|
+
kit:
|
|
156
|
+
|
|
157
|
+
- Cannot verify the correct usage of X12-based terminology: terminology requirements for all elements bound to X12
|
|
158
|
+
value sets will not be validated.
|
|
159
|
+
- Cannot verify the meaning of codes: validation that a given response conveys something specific, e.g., approval
|
|
160
|
+
or pending, is not performed.
|
|
161
|
+
- Cannot verify matching semantics on inquiries: no checking of the identity of the ClaimResponse returned for an
|
|
162
|
+
inquiry, e.g., that it matches the input or the original request.
|
|
163
|
+
|
|
164
|
+
These limitations may be removed in future versions of these tests. In the meantime, testers should consider these
|
|
165
|
+
requirements to be verified through attestation and should not represent their systems to have passed these tests
|
|
166
|
+
if these requirements are not met.
|
|
167
|
+
|
|
168
|
+
### Underspecified Subscription Details
|
|
169
|
+
|
|
170
|
+
The current PAS specification around subscriptions and notifications
|
|
171
|
+
is not detailed enough to support testing. Notably,
|
|
172
|
+
- There are no examples of what a notification payload looks like
|
|
173
|
+
- There is no instruction on how to turn the notification payload into an inquiry
|
|
174
|
+
|
|
175
|
+
Once these details have been clarified, validation of the notification workflows
|
|
176
|
+
will be added to these tests.
|
|
177
|
+
|
|
178
|
+
### Future Details
|
|
179
|
+
|
|
180
|
+
The PAS IG places additional requirements on clients that are not currently tested by this test kit, including
|
|
181
|
+
|
|
182
|
+
- Prior Authorization update workflows
|
|
183
|
+
- Requests for additional information handled through the CDex framework
|
|
184
|
+
- PDF, CDA, and JPG attachments
|
|
185
|
+
- US Core profile support for supporting information
|
|
186
|
+
- The ability to handle responses containing all PAS-defined profiles and must support elements
|
|
187
|
+
- Most details requiring manual review of the client system, e.g., the requirement that clinicians can update
|
|
188
|
+
details of the prior authorization request before submitting them
|
|
189
|
+
|
|
190
|
+
These and any other requirements found in the PAS IG may be tested in future versions of these tests.
|
|
191
|
+
)
|
|
192
|
+
|
|
193
|
+
links [
|
|
194
|
+
{
|
|
195
|
+
label: 'Report Issue',
|
|
196
|
+
url: 'https://github.com/inferno-framework/davinci-pas-test-kit/issues/'
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
label: 'Open Source',
|
|
200
|
+
url: 'https://github.com/inferno-framework/davinci-pas-test-kit/'
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
label: 'Implementation Guide',
|
|
204
|
+
url: 'https://hl7.org/fhir/us/davinci-pas/STU2/'
|
|
205
|
+
}
|
|
206
|
+
]
|
|
207
|
+
|
|
208
|
+
def self.test_resumes?(test)
|
|
209
|
+
!test.config.options[:accepts_multiple_requests]
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
validator do
|
|
213
|
+
url ENV.fetch('VALIDATOR_URL')
|
|
214
|
+
|
|
215
|
+
exclude_message do |message|
|
|
216
|
+
# Messages expected of the form `<ResourceType>: <FHIRPath>: <message>`
|
|
217
|
+
# We strip `<ResourceType>: <FHIRPath>: ` for the sake of matching
|
|
218
|
+
SUPPRESSED_MESSAGES.match?(message.message.sub(/\A\S+: \S+: /, ''))
|
|
219
|
+
end
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
record_response_route :post, TOKEN_PATH, AUTH_TAG, method(:token_response) do |request|
|
|
223
|
+
ClientSuite.extract_client_id(request)
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
record_response_route :post, SUBMIT_PATH, SUBMIT_TAG, method(:claim_response),
|
|
227
|
+
resumes: method(:test_resumes?) do |request|
|
|
228
|
+
ClientSuite.extract_bearer_token(request)
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
record_response_route :post, INQUIRE_PATH, INQUIRE_TAG, method(:claim_response),
|
|
232
|
+
resumes: method(:test_resumes?) do |request|
|
|
233
|
+
ClientSuite.extract_bearer_token(request)
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
resume_test_route :get, RESUME_PASS_PATH do |request|
|
|
237
|
+
ClientSuite.extract_token_from_query_params(request)
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
resume_test_route :get, RESUME_FAIL_PATH, result: 'fail' do |request|
|
|
241
|
+
ClientSuite.extract_token_from_query_params(request)
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
group from: :pas_client_v201_authentication_group
|
|
245
|
+
group do
|
|
246
|
+
title 'PAS Client Validation'
|
|
247
|
+
description %(
|
|
248
|
+
These tests perform the functional validation of the client under test.
|
|
249
|
+
For requests to be recognized by Inferno to be part of this test session
|
|
250
|
+
they must include the configured bearer token
|
|
251
|
+
(user provided or generated during the authorization tests)
|
|
252
|
+
in the Authorization HTTP header with prefix "Bearer: ".
|
|
253
|
+
)
|
|
254
|
+
|
|
255
|
+
group do
|
|
256
|
+
title 'Demonstrate Workflow Support'
|
|
257
|
+
description %(
|
|
258
|
+
The workflow tests validate that the client can participate in complete end-to-end prior
|
|
259
|
+
authorization interactions, initiating requests and reacting appropriately to the
|
|
260
|
+
responses returned.
|
|
261
|
+
)
|
|
262
|
+
group from: :pas_client_v201_approval_group
|
|
263
|
+
group from: :pas_client_v201_denial_group
|
|
264
|
+
group from: :pas_client_v201_pended_group
|
|
265
|
+
end
|
|
266
|
+
|
|
267
|
+
group do
|
|
268
|
+
title 'Demonstrate Element Support'
|
|
269
|
+
description %(
|
|
270
|
+
Demonstrate the ability of the client to support all PAS-defined profiles and the must support elements
|
|
271
|
+
defined in them. This includes
|
|
272
|
+
|
|
273
|
+
- the ability to make prior authorization submission and inquiry requests that contain all
|
|
274
|
+
PAS-defined profiles and their must support elements.
|
|
275
|
+
- the ability to receive in responses to those requests all PAS-defined profiles and their
|
|
276
|
+
must support elements and continue the prior authorization workflow as appropriate (not currently
|
|
277
|
+
implemented in these tests).
|
|
278
|
+
|
|
279
|
+
Clients under test will be asked to make additional requests to Inferno demonstrating coverage
|
|
280
|
+
of all must support items in the requests. Note that Inferno will consider requests made during
|
|
281
|
+
the workflow group of tests, so only profiles and must support elements not demonstrated during
|
|
282
|
+
those tests need to be submitted as a part of these.
|
|
283
|
+
)
|
|
284
|
+
group from: :pas_client_v201_submit_must_support_use_case
|
|
285
|
+
group from: :pas_client_v201_inquiry_must_support_use_case
|
|
286
|
+
end
|
|
287
|
+
end
|
|
288
|
+
end
|
|
289
|
+
end
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# require 'securerandom' //used for attestation experiment - see below
|
|
2
|
+
# require_relative '../../../urls' // used for attestation experiment - see below
|
|
3
|
+
|
|
4
|
+
module DaVinciPASTestKit
|
|
5
|
+
module DaVinciPASV201
|
|
6
|
+
class PasClaimStatusTest < Inferno::Test
|
|
7
|
+
# include URLs // used for attestation experiment - see below
|
|
8
|
+
|
|
9
|
+
id :prior_auth_claim_status
|
|
10
|
+
title 'Server returns the expected authorization response'
|
|
11
|
+
description %(
|
|
12
|
+
This test aims to confirm that the status of the prior authorization matches
|
|
13
|
+
the anticipated status for the workflow under examination.
|
|
14
|
+
(NOT YET IMPLEMENTED)
|
|
15
|
+
)
|
|
16
|
+
uses_request :pa_submit
|
|
17
|
+
|
|
18
|
+
def status
|
|
19
|
+
if use_case == 'approval'
|
|
20
|
+
'approved'
|
|
21
|
+
else
|
|
22
|
+
use_case == 'denial' ? 'denied' : 'pended'
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
run do
|
|
27
|
+
# Experiment with extraction of statuses and use in an attestation
|
|
28
|
+
# Not used due to the following problems:
|
|
29
|
+
# - no real clients to test with
|
|
30
|
+
# - how to express the location we're looking for? The spec never mentions it explicitly.
|
|
31
|
+
#
|
|
32
|
+
# # Extract the response status
|
|
33
|
+
# status_values = []
|
|
34
|
+
# if resource.resourceType == 'Bundle'
|
|
35
|
+
# resource.entry.each do |one_entry|
|
|
36
|
+
# next unless one_entry.resource.resourceType == 'ClaimResponse'
|
|
37
|
+
#
|
|
38
|
+
# one_entry.resource.item.each do |one_item|
|
|
39
|
+
# one_item.adjudication.each do |one_adjudication|
|
|
40
|
+
# one_adjudication.extension
|
|
41
|
+
# .select { |ext| ext.url == 'http://hl7.org/fhir/us/davinci-pas/StructureDefinition/extension-reviewAction' }
|
|
42
|
+
# .each do |review_action_ext|
|
|
43
|
+
# review_action_ext.extension.select { |ext| ext.url == 'http://hl7.org/fhir/us/davinci-pas/StructureDefinition/extension-reviewActionCode' }
|
|
44
|
+
# .each do |review_action_code_ext|
|
|
45
|
+
# review_action_code_ext.valueCodeableConcept.coding.select { |coding| coding.system == 'https://codesystem.x12.org/005010/306' }
|
|
46
|
+
# .each do |one_code|
|
|
47
|
+
# if one_code.code
|
|
48
|
+
# status_values << "#{one_code.code}#{one_code.display ? " (#{one_code.display})" : ''}"
|
|
49
|
+
# end
|
|
50
|
+
# end
|
|
51
|
+
# end
|
|
52
|
+
# end
|
|
53
|
+
# end
|
|
54
|
+
# end
|
|
55
|
+
# end
|
|
56
|
+
# end
|
|
57
|
+
#
|
|
58
|
+
# assert !status_values.empty?, 'No status values found **where??**'
|
|
59
|
+
#
|
|
60
|
+
# # Attestation
|
|
61
|
+
# attestation_key = SecureRandom.uuid
|
|
62
|
+
# status_display = status_values.reduce('') { |result, status| result + "- #{status}\n" }
|
|
63
|
+
# wait(
|
|
64
|
+
# identifier: attestation_key,
|
|
65
|
+
# message: %(
|
|
66
|
+
# **Status Validation for `#{status}`**:
|
|
67
|
+
#
|
|
68
|
+
# The following adjudication status
|
|
69
|
+
# #{status_values.length > 1 ? 'values were' : 'value was'}
|
|
70
|
+
# found in the response **where??**:
|
|
71
|
+
#
|
|
72
|
+
# #{status_display}
|
|
73
|
+
#
|
|
74
|
+
# I attest that
|
|
75
|
+
# #{status_values.length > 1 ? 'one of the status values' : 'the status value'}
|
|
76
|
+
# returned by the server indicates that the request was #{status}
|
|
77
|
+
#
|
|
78
|
+
# [Click here](#{resume_pass_url}?token=#{attestation_key}) if the above statement is **true**.
|
|
79
|
+
#
|
|
80
|
+
# [Click here](#{resume_fail_url}?token=#{attestation_key}) if the above statement is **false**.
|
|
81
|
+
# )
|
|
82
|
+
# )
|
|
83
|
+
#
|
|
84
|
+
# end of experiment with attestation code
|
|
85
|
+
|
|
86
|
+
# TODO: Implement subscription for pended: Inferno will subscribe to the server to receive notification
|
|
87
|
+
# when the submitted claim status will be updated.
|
|
88
|
+
if use_case == 'pended'
|
|
89
|
+
# rubocop:disable Layout/LineLength
|
|
90
|
+
wait(
|
|
91
|
+
identifier: use_case,
|
|
92
|
+
message: %(
|
|
93
|
+
Inferno has received a 'Pended' claim response as expected.
|
|
94
|
+
|
|
95
|
+
Please
|
|
96
|
+
**[click
|
|
97
|
+
here](#{Inferno::Application['base_url']}/custom/davinci_pas_server_suite_v201/resume_after_notification?use_case=#{use_case})**
|
|
98
|
+
when the status of this claim has been finalized to inform Inferno to resume testing.
|
|
99
|
+
|
|
100
|
+
Future versions of this test may implement automated monitoring
|
|
101
|
+
capabilities described in the implementation guide.
|
|
102
|
+
)
|
|
103
|
+
)
|
|
104
|
+
# rubocop:enable Layout/LineLength
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
require_relative '../../../urls'
|
|
2
|
+
|
|
3
|
+
module DaVinciPASTestKit
|
|
4
|
+
module DaVinciPASV201
|
|
5
|
+
class PASClientApprovalSubmitResponseAttest < Inferno::Test
|
|
6
|
+
include URLs
|
|
7
|
+
|
|
8
|
+
id :pas_client_v201_approval_submit_response_attest
|
|
9
|
+
title 'Check that the client registers the request as approved (Attestation)'
|
|
10
|
+
description %(
|
|
11
|
+
This test provides the tester an opportunity to observe their client following
|
|
12
|
+
the receipt of the approved response and attest that users are able to determine
|
|
13
|
+
that the response has been approved.
|
|
14
|
+
)
|
|
15
|
+
input :access_token,
|
|
16
|
+
title: 'Access Token',
|
|
17
|
+
description: %(
|
|
18
|
+
Access token that the client will provide in the Authorization header of each request
|
|
19
|
+
made during this test.
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
run do
|
|
23
|
+
wait(
|
|
24
|
+
identifier: access_token,
|
|
25
|
+
message: %(
|
|
26
|
+
**Approval Workflow Test**:
|
|
27
|
+
|
|
28
|
+
I attest that the client system displays the submitted claim as 'approved' meaning that
|
|
29
|
+
the user can proceed with ordering or providing the requested service.
|
|
30
|
+
|
|
31
|
+
[Click here](#{resume_pass_url}?token=#{access_token}) if the above statement is **true**.
|
|
32
|
+
|
|
33
|
+
[Click here](#{resume_fail_url}?token=#{access_token}) if the above statement is **false**.
|
|
34
|
+
)
|
|
35
|
+
)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|