davinci_pas_test_kit 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|