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
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
---
|
|
2
|
+
:name: profile_requestor
|
|
3
|
+
:class_name: ProfileRequestorSequence
|
|
4
|
+
:version: v2.0.1
|
|
5
|
+
:reformatted_version: v201
|
|
6
|
+
:resource: Organization
|
|
7
|
+
:profile_url: http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-requestor
|
|
8
|
+
:profile_name: PAS Requestor Organization
|
|
9
|
+
:profile_version: 2.0.1
|
|
10
|
+
:title: Requestor Organization
|
|
11
|
+
:short_description: Verify support for the server capabilities required by the PAS
|
|
12
|
+
Requestor Organization.
|
|
13
|
+
:interactions: []
|
|
14
|
+
:operations: []
|
|
15
|
+
:required_concepts:
|
|
16
|
+
- type
|
|
17
|
+
:must_supports:
|
|
18
|
+
:extensions: []
|
|
19
|
+
:slices:
|
|
20
|
+
- :name: Organization.identifier:NPI
|
|
21
|
+
:path: identifier
|
|
22
|
+
:discriminator:
|
|
23
|
+
:type: patternIdentifier
|
|
24
|
+
:path: ''
|
|
25
|
+
:system: http://hl7.org/fhir/sid/us-npi
|
|
26
|
+
- :name: Organization.identifier:TIN
|
|
27
|
+
:path: identifier
|
|
28
|
+
:discriminator:
|
|
29
|
+
:type: patternIdentifier
|
|
30
|
+
:path: ''
|
|
31
|
+
:system: http://terminology.hl7.org/NamingSystem/USEIN
|
|
32
|
+
:elements:
|
|
33
|
+
- :path: identifier
|
|
34
|
+
- :path: active
|
|
35
|
+
- :path: type
|
|
36
|
+
- :path: name
|
|
37
|
+
- :path: telecom
|
|
38
|
+
- :path: address
|
|
39
|
+
- :path: address.line
|
|
40
|
+
- :path: address.city
|
|
41
|
+
- :path: address.state
|
|
42
|
+
- :path: address.postalCode
|
|
43
|
+
- :path: address.country
|
|
44
|
+
- :path: contact
|
|
45
|
+
- :path: contact.name
|
|
46
|
+
- :path: contact.telecom
|
|
47
|
+
:mandatory_elements:
|
|
48
|
+
- Organization.identifier.system
|
|
49
|
+
- Organization.active
|
|
50
|
+
- Organization.name
|
|
51
|
+
:bindings:
|
|
52
|
+
- :type: code
|
|
53
|
+
:strength: preferred
|
|
54
|
+
:system: http://hl7.org/fhir/ValueSet/languages
|
|
55
|
+
:path: language
|
|
56
|
+
- :type: code
|
|
57
|
+
:strength: required
|
|
58
|
+
:system: http://hl7.org/fhir/ValueSet/identifier-use
|
|
59
|
+
:path: identifier.use
|
|
60
|
+
- :type: CodeableConcept
|
|
61
|
+
:strength: extensible
|
|
62
|
+
:system: http://hl7.org/fhir/ValueSet/identifier-type
|
|
63
|
+
:path: identifier.type
|
|
64
|
+
- :type: CodeableConcept
|
|
65
|
+
:strength: required
|
|
66
|
+
:system: https://valueset.x12.org/x217/005010/response/2010B/NM1/1/01/00/98
|
|
67
|
+
:path: type
|
|
68
|
+
- :type: code
|
|
69
|
+
:strength: required
|
|
70
|
+
:system: http://hl7.org/fhir/ValueSet/address-use
|
|
71
|
+
:path: address.use
|
|
72
|
+
- :type: code
|
|
73
|
+
:strength: required
|
|
74
|
+
:system: http://hl7.org/fhir/ValueSet/address-type
|
|
75
|
+
:path: address.type
|
|
76
|
+
- :type: string
|
|
77
|
+
:strength: extensible
|
|
78
|
+
:system: http://hl7.org/fhir/us/core/ValueSet/us-core-usps-state
|
|
79
|
+
:path: address.state
|
|
80
|
+
- :type: CodeableConcept
|
|
81
|
+
:strength: extensible
|
|
82
|
+
:system: http://hl7.org/fhir/ValueSet/contactentity-type
|
|
83
|
+
:path: contact.purpose
|
|
84
|
+
:references:
|
|
85
|
+
- :path: Organization.identifier.assigner
|
|
86
|
+
:profiles:
|
|
87
|
+
- http://hl7.org/fhir/StructureDefinition/Organization
|
|
88
|
+
- :path: Organization.partOf
|
|
89
|
+
:profiles:
|
|
90
|
+
- http://hl7.org/fhir/StructureDefinition/Organization
|
|
91
|
+
- :path: Organization.endpoint
|
|
92
|
+
:profiles:
|
|
93
|
+
- http://hl7.org/fhir/StructureDefinition/Endpoint
|
|
94
|
+
:tests:
|
|
95
|
+
- :id: pas_server_submit_request_v201_requestor_must_support_test
|
|
96
|
+
:file_name: server_submit_request_requestor_must_support_test.rb
|
|
97
|
+
- :id: pas_client_submit_request_v201_requestor_must_support_test
|
|
98
|
+
:file_name: client_submit_request_requestor_must_support_test.rb
|
|
99
|
+
- :id: pas_server_submit_response_v201_requestor_must_support_test
|
|
100
|
+
:file_name: server_submit_response_requestor_must_support_test.rb
|
|
101
|
+
- :id: pas_server_inquiry_request_v201_requestor_must_support_test
|
|
102
|
+
:file_name: server_inquiry_request_requestor_must_support_test.rb
|
|
103
|
+
- :id: pas_client_inquiry_request_v201_requestor_must_support_test
|
|
104
|
+
:file_name: client_inquiry_request_requestor_must_support_test.rb
|
|
105
|
+
- :id: pas_server_inquiry_response_v201_requestor_must_support_test
|
|
106
|
+
:file_name: server_inquiry_response_requestor_must_support_test.rb
|
|
107
|
+
:delayed_references: []
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
require_relative '../../../must_support_test'
|
|
2
|
+
require_relative '../../../generator/group_metadata'
|
|
3
|
+
require_relative '../../../tags'
|
|
4
|
+
|
|
5
|
+
module DaVinciPASTestKit
|
|
6
|
+
module DaVinciPASV201
|
|
7
|
+
class ServerInquiryRequestRequestorMustSupportTest < Inferno::Test
|
|
8
|
+
include DaVinciPASTestKit::MustSupportTest
|
|
9
|
+
|
|
10
|
+
title 'All must support elements for Profile PAS Requestor Organization are observed across all instances submitted'
|
|
11
|
+
description %(
|
|
12
|
+
|
|
13
|
+
PAS server systems are required to be able to receive all
|
|
14
|
+
must support elements on instances of all profiles included in
|
|
15
|
+
requests, including instances of the PAS Requestor Organization Profile.
|
|
16
|
+
This test checks all identified instances of the PAS Requestor Organization
|
|
17
|
+
Profile on requests sent to the server to ensure that the following
|
|
18
|
+
must support elements are observed:
|
|
19
|
+
|
|
20
|
+
* Organization.active
|
|
21
|
+
* Organization.address
|
|
22
|
+
* Organization.address.city
|
|
23
|
+
* Organization.address.country
|
|
24
|
+
* Organization.address.line
|
|
25
|
+
* Organization.address.postalCode
|
|
26
|
+
* Organization.address.state
|
|
27
|
+
* Organization.contact
|
|
28
|
+
* Organization.contact.name
|
|
29
|
+
* Organization.contact.telecom
|
|
30
|
+
* Organization.identifier
|
|
31
|
+
* Organization.identifier:NPI
|
|
32
|
+
* Organization.identifier:TIN
|
|
33
|
+
* Organization.name
|
|
34
|
+
* Organization.telecom
|
|
35
|
+
* Organization.type
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
id :pas_server_inquiry_request_v201_requestor_must_support_test
|
|
39
|
+
|
|
40
|
+
def resource_type
|
|
41
|
+
'Organization'
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def self.metadata
|
|
45
|
+
@metadata ||= Generator::GroupMetadata.new(YAML.load_file(File.join(__dir__, 'metadata.yml'), aliases: true))
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def scratch_resources
|
|
49
|
+
scratch[:inquire_request_resources] ||= {}
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def resources_of_interest
|
|
53
|
+
collection = tagged_resources(INQUIRE_TAG).presence || all_scratch_resources
|
|
54
|
+
collection.select { |res| res.resourceType == resource_type }
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
run do
|
|
58
|
+
perform_must_support_test(resources_of_interest)
|
|
59
|
+
validate_must_support
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
require_relative '../../../must_support_test'
|
|
2
|
+
require_relative '../../../generator/group_metadata'
|
|
3
|
+
require_relative '../../../tags'
|
|
4
|
+
|
|
5
|
+
module DaVinciPASTestKit
|
|
6
|
+
module DaVinciPASV201
|
|
7
|
+
class ServerInquiryResponseRequestorMustSupportTest < Inferno::Test
|
|
8
|
+
include DaVinciPASTestKit::MustSupportTest
|
|
9
|
+
|
|
10
|
+
title 'All must support elements for Profile PAS Requestor Organization are observed across all instances returned'
|
|
11
|
+
description %(
|
|
12
|
+
|
|
13
|
+
PAS server systems are required to be able to populate all
|
|
14
|
+
must support elements on instances of all profiles included in
|
|
15
|
+
responses, including instances of the PAS Requestor Organization Profile.
|
|
16
|
+
This test checks all identified instances of the PAS Requestor Organization
|
|
17
|
+
Profile on responses returned by the server to ensure that the following
|
|
18
|
+
must support elements are observed:
|
|
19
|
+
|
|
20
|
+
* Organization.active
|
|
21
|
+
* Organization.address
|
|
22
|
+
* Organization.address.city
|
|
23
|
+
* Organization.address.country
|
|
24
|
+
* Organization.address.line
|
|
25
|
+
* Organization.address.postalCode
|
|
26
|
+
* Organization.address.state
|
|
27
|
+
* Organization.contact
|
|
28
|
+
* Organization.contact.name
|
|
29
|
+
* Organization.contact.telecom
|
|
30
|
+
* Organization.identifier
|
|
31
|
+
* Organization.identifier:NPI
|
|
32
|
+
* Organization.identifier:TIN
|
|
33
|
+
* Organization.name
|
|
34
|
+
* Organization.telecom
|
|
35
|
+
* Organization.type
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
id :pas_server_inquiry_response_v201_requestor_must_support_test
|
|
39
|
+
|
|
40
|
+
def resource_type
|
|
41
|
+
'Organization'
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def self.metadata
|
|
45
|
+
@metadata ||= Generator::GroupMetadata.new(YAML.load_file(File.join(__dir__, 'metadata.yml'), aliases: true))
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def scratch_resources
|
|
49
|
+
scratch[:inquiry_response_resources] ||= {}
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def resources_of_interest
|
|
53
|
+
collection = tagged_resources(INQUIRE_TAG).presence || all_scratch_resources
|
|
54
|
+
collection.select { |res| res.resourceType == resource_type }
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
run do
|
|
58
|
+
perform_must_support_test(resources_of_interest)
|
|
59
|
+
validate_must_support
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
require_relative '../../../must_support_test'
|
|
2
|
+
require_relative '../../../generator/group_metadata'
|
|
3
|
+
require_relative '../../../tags'
|
|
4
|
+
|
|
5
|
+
module DaVinciPASTestKit
|
|
6
|
+
module DaVinciPASV201
|
|
7
|
+
class ServerSubmitRequestRequestorMustSupportTest < Inferno::Test
|
|
8
|
+
include DaVinciPASTestKit::MustSupportTest
|
|
9
|
+
|
|
10
|
+
title 'All must support elements for Profile PAS Requestor Organization are observed across all instances submitted'
|
|
11
|
+
description %(
|
|
12
|
+
|
|
13
|
+
PAS server systems are required to be able to receive all
|
|
14
|
+
must support elements on instances of all profiles included in
|
|
15
|
+
requests, including instances of the PAS Requestor Organization Profile.
|
|
16
|
+
This test checks all identified instances of the PAS Requestor Organization
|
|
17
|
+
Profile on requests sent to the server to ensure that the following
|
|
18
|
+
must support elements are observed:
|
|
19
|
+
|
|
20
|
+
* Organization.active
|
|
21
|
+
* Organization.address
|
|
22
|
+
* Organization.address.city
|
|
23
|
+
* Organization.address.country
|
|
24
|
+
* Organization.address.line
|
|
25
|
+
* Organization.address.postalCode
|
|
26
|
+
* Organization.address.state
|
|
27
|
+
* Organization.contact
|
|
28
|
+
* Organization.contact.name
|
|
29
|
+
* Organization.contact.telecom
|
|
30
|
+
* Organization.identifier
|
|
31
|
+
* Organization.identifier:NPI
|
|
32
|
+
* Organization.identifier:TIN
|
|
33
|
+
* Organization.name
|
|
34
|
+
* Organization.telecom
|
|
35
|
+
* Organization.type
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
id :pas_server_submit_request_v201_requestor_must_support_test
|
|
39
|
+
|
|
40
|
+
def resource_type
|
|
41
|
+
'Organization'
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def self.metadata
|
|
45
|
+
@metadata ||= Generator::GroupMetadata.new(YAML.load_file(File.join(__dir__, 'metadata.yml'), aliases: true))
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def scratch_resources
|
|
49
|
+
scratch[:submit_request_resources] ||= {}
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def resources_of_interest
|
|
53
|
+
collection = tagged_resources(SUBMIT_TAG).presence || all_scratch_resources
|
|
54
|
+
collection.select { |res| res.resourceType == resource_type }
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
run do
|
|
58
|
+
perform_must_support_test(resources_of_interest)
|
|
59
|
+
validate_must_support
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
require_relative '../../../must_support_test'
|
|
2
|
+
require_relative '../../../generator/group_metadata'
|
|
3
|
+
require_relative '../../../tags'
|
|
4
|
+
|
|
5
|
+
module DaVinciPASTestKit
|
|
6
|
+
module DaVinciPASV201
|
|
7
|
+
class ServerSubmitResponseRequestorMustSupportTest < Inferno::Test
|
|
8
|
+
include DaVinciPASTestKit::MustSupportTest
|
|
9
|
+
|
|
10
|
+
title 'All must support elements for Profile PAS Requestor Organization are observed across all instances returned'
|
|
11
|
+
description %(
|
|
12
|
+
|
|
13
|
+
PAS server systems are required to be able to populate all
|
|
14
|
+
must support elements on instances of all profiles included in
|
|
15
|
+
responses, including instances of the PAS Requestor Organization Profile.
|
|
16
|
+
This test checks all identified instances of the PAS Requestor Organization
|
|
17
|
+
Profile on responses returned by the server to ensure that the following
|
|
18
|
+
must support elements are observed:
|
|
19
|
+
|
|
20
|
+
* Organization.active
|
|
21
|
+
* Organization.address
|
|
22
|
+
* Organization.address.city
|
|
23
|
+
* Organization.address.country
|
|
24
|
+
* Organization.address.line
|
|
25
|
+
* Organization.address.postalCode
|
|
26
|
+
* Organization.address.state
|
|
27
|
+
* Organization.contact
|
|
28
|
+
* Organization.contact.name
|
|
29
|
+
* Organization.contact.telecom
|
|
30
|
+
* Organization.identifier
|
|
31
|
+
* Organization.identifier:NPI
|
|
32
|
+
* Organization.identifier:TIN
|
|
33
|
+
* Organization.name
|
|
34
|
+
* Organization.telecom
|
|
35
|
+
* Organization.type
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
id :pas_server_submit_response_v201_requestor_must_support_test
|
|
39
|
+
|
|
40
|
+
def resource_type
|
|
41
|
+
'Organization'
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def self.metadata
|
|
45
|
+
@metadata ||= Generator::GroupMetadata.new(YAML.load_file(File.join(__dir__, 'metadata.yml'), aliases: true))
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def scratch_resources
|
|
49
|
+
scratch[:submit_response_resources] ||= {}
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def resources_of_interest
|
|
53
|
+
collection = tagged_resources(SUBMIT_TAG).presence || all_scratch_resources
|
|
54
|
+
collection.select { |res| res.resourceType == resource_type }
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
run do
|
|
58
|
+
perform_must_support_test(resources_of_interest)
|
|
59
|
+
validate_must_support
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
module DaVinciPASTestKit
|
|
2
|
+
module PASV201
|
|
3
|
+
module ResourceList
|
|
4
|
+
RESOURCE_LIST = [
|
|
5
|
+
'Inquiry Request Bundle',
|
|
6
|
+
'Inquiry Response Bundle',
|
|
7
|
+
'Request Bundle',
|
|
8
|
+
'Response Bundle',
|
|
9
|
+
'Claim Base',
|
|
10
|
+
'Claim Inquiry',
|
|
11
|
+
'Claim Update',
|
|
12
|
+
'Claim',
|
|
13
|
+
'Claim Inquiry Response',
|
|
14
|
+
'Claim Response Base',
|
|
15
|
+
'Claim Response',
|
|
16
|
+
'CommunicationRequest',
|
|
17
|
+
'Coverage',
|
|
18
|
+
'Device Request',
|
|
19
|
+
'Encounter',
|
|
20
|
+
'Location',
|
|
21
|
+
'Medication Request',
|
|
22
|
+
'Nutrition Order',
|
|
23
|
+
'Insurer Organization',
|
|
24
|
+
'Organization Base',
|
|
25
|
+
'Requestor Organization',
|
|
26
|
+
'Beneficiary Patient',
|
|
27
|
+
'Subscriber Patient',
|
|
28
|
+
'Practitioner',
|
|
29
|
+
'PractitionerRole',
|
|
30
|
+
'Service Request',
|
|
31
|
+
'Task'
|
|
32
|
+
].freeze
|
|
33
|
+
|
|
34
|
+
RESOURCE_SUPPORTED_PROFILES = {
|
|
35
|
+
Bundle: ["http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-pas-inquiry-request-bundle", "http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-pas-inquiry-response-bundle", "http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-pas-request-bundle", "http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-pas-response-bundle"],
|
|
36
|
+
Claim: ["http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-claim-base", "http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-claim-inquiry", "http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-claim-update", "http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-claim"],
|
|
37
|
+
ClaimResponse: ["http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-claiminquiryresponse", "http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-claimresponse-base", "http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-claimresponse"],
|
|
38
|
+
CommunicationRequest: ["http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-communicationrequest"],
|
|
39
|
+
Coverage: ["http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-coverage"],
|
|
40
|
+
DeviceRequest: ["http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-devicerequest"],
|
|
41
|
+
Encounter: ["http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-encounter"],
|
|
42
|
+
Location: ["http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-location"],
|
|
43
|
+
MedicationRequest: ["http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-medicationrequest"],
|
|
44
|
+
NutritionOrder: ["http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-nutritionorder"],
|
|
45
|
+
Organization: ["http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-insurer", "http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-organization", "http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-requestor"],
|
|
46
|
+
Patient: ["http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-beneficiary", "http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-subscriber"],
|
|
47
|
+
Practitioner: ["http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-practitioner"],
|
|
48
|
+
PractitionerRole: ["http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-practitionerrole"],
|
|
49
|
+
ServiceRequest: ["http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-servicerequest"],
|
|
50
|
+
Task: ["http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-task"],
|
|
51
|
+
}.freeze
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
require_relative '../../validator_suppressions'
|
|
2
|
+
require_relative '../../custom_groups/v2.0.1/pas_error_group'
|
|
3
|
+
require_relative '../../version.rb'
|
|
4
|
+
require_relative 'pas_server_approval_use_case_group'
|
|
5
|
+
require_relative 'pas_server_denial_use_case_group'
|
|
6
|
+
require_relative 'pas_server_pended_use_case_group'
|
|
7
|
+
require_relative 'pas_server_must_support_use_case_group'
|
|
8
|
+
|
|
9
|
+
module DaVinciPASTestKit
|
|
10
|
+
module DaVinciPASV201
|
|
11
|
+
class ServerSuite < Inferno::TestSuite
|
|
12
|
+
id :davinci_pas_server_suite_v201
|
|
13
|
+
title 'Da Vinci PAS Server Suite v2.0.1'
|
|
14
|
+
version DaVinciPASTestKit::VERSION
|
|
15
|
+
description %(
|
|
16
|
+
The Da Vinci PAS Server Suite validates the conformance of server systems
|
|
17
|
+
to the STU 2 version of the HL7® FHIR®
|
|
18
|
+
[Da Vinci Prior Authorization Support Implementation Guide](https://hl7.org/fhir/us/davinci-pas/STU2/).
|
|
19
|
+
|
|
20
|
+
## Scope
|
|
21
|
+
|
|
22
|
+
These tests are a **DRAFT** intended to allow PAS server implementers to perform
|
|
23
|
+
preliminary checks of their servers against PAS IG requirements and [provide
|
|
24
|
+
feedback](https://github.com/inferno-framework/davinci-pas-test-kit/issues)
|
|
25
|
+
on the tests. Future versions of these tests may validate other
|
|
26
|
+
requirements and may change the test validation logic.
|
|
27
|
+
|
|
28
|
+
## Test Methodology
|
|
29
|
+
|
|
30
|
+
Inferno will simulate a client and make a series of prior authorization requests to the
|
|
31
|
+
server under test. Over the course of these requests, Inferno will seek to observe
|
|
32
|
+
conformant handling of PAS requirements, including
|
|
33
|
+
- The ability of the server to use PAS API interactions to communicate
|
|
34
|
+
- Approval of a prior authorization request
|
|
35
|
+
- Denial of a prior authorization request
|
|
36
|
+
- Pending of a prior authorization request and a subsequent final decision
|
|
37
|
+
- Inability to process a prior authorization request
|
|
38
|
+
- The ability of the server to handle the full scope of data required by PAS, including
|
|
39
|
+
- Ability to process prior auth requests and inquiries with all PAS profiles and all must support elements on those profiles
|
|
40
|
+
- Ability to return responses that demonstrate the use of all PAS profiles and all must support elements on those profiles
|
|
41
|
+
|
|
42
|
+
Because the business logic that determines decisions and the elements populated in responses
|
|
43
|
+
Is outside of the PAS specification and will vary between implementers, testers
|
|
44
|
+
are required to provide the requests that Inferno will make to the server.
|
|
45
|
+
|
|
46
|
+
All requests and responses will be checked for conformance to the PAS
|
|
47
|
+
IG requirements individually and used in aggregate to determine whether
|
|
48
|
+
required features and functionality are present. HL7® FHIR® resources are
|
|
49
|
+
validated with the Java validator using `tx.fhir.org` as the terminology server.
|
|
50
|
+
|
|
51
|
+
These tests do not currently test the full scope of the IG. See the *Testing Limitations* section below
|
|
52
|
+
for more details about the current scope of the tests and the reasons that some details have been left out.
|
|
53
|
+
|
|
54
|
+
## Running the Tests
|
|
55
|
+
|
|
56
|
+
### Quick Start
|
|
57
|
+
|
|
58
|
+
Execution of these tests require a significant amount of tester input in the
|
|
59
|
+
form of requests that Inferno will make against the server under test.
|
|
60
|
+
|
|
61
|
+
If you would like to try out the tests using examples from the IG against the
|
|
62
|
+
[public reference server endpoint](https://prior-auth.davinci.hl7.org/fhir) ([code on github](https://github.com/HL7-DaVinci/prior-auth)), you can do so by
|
|
63
|
+
1. Selecting the *Prior Authorization Support Reference Implementation* option from the Preset dropdown in the upper left
|
|
64
|
+
2. Clicking the *Run All Tests* button in the upper right
|
|
65
|
+
3. Clicking the *Submit* button at the bottom of the input dialog
|
|
66
|
+
|
|
67
|
+
You can run these tests using your own server by updating the "FHIR Server Endpoint URL" and "OAuth Credentials" inputs.
|
|
68
|
+
|
|
69
|
+
Note that:
|
|
70
|
+
- the inputs for these tests are not complete and systems are not expected to pass the tests based on them.
|
|
71
|
+
- the public reference server has not been updated to reflect the STU2 version that these tests target,
|
|
72
|
+
so expect some additional failures when testing against it.
|
|
73
|
+
|
|
74
|
+
## Test Configuration Details
|
|
75
|
+
|
|
76
|
+
The details provided here supplement the documentation of individual fields in the input dialog
|
|
77
|
+
that appears when initiating a test run.
|
|
78
|
+
|
|
79
|
+
### Server identification
|
|
80
|
+
|
|
81
|
+
Requests will be made to the `/Claim/$submit` and `/Claim/$inquire` endpoints under the url provided in the "FHIR Server Endpoint URL" field.
|
|
82
|
+
|
|
83
|
+
### Authentication
|
|
84
|
+
|
|
85
|
+
The PAS IG states that
|
|
86
|
+
|
|
87
|
+
> "PAS Servers **SHOULD** support server-server OAuth… In a future release of this guide, direction will limit the option to [require] server-server OAuth."
|
|
88
|
+
|
|
89
|
+
The PAS test kit currently assumes that the handshake has already occurred and requires
|
|
90
|
+
that a bearer token be provided in the “OAuth Credentials / Access Token” configuration
|
|
91
|
+
field. Inferno will submit this token on all requests it makes to the server as a part of
|
|
92
|
+
executing the tests. A complete backend server authentication handshake may be supported
|
|
93
|
+
in future versions of the test kit.
|
|
94
|
+
|
|
95
|
+
### Payload
|
|
96
|
+
|
|
97
|
+
All other inputs are for providing bundles for Inferno to submit as a part of the tests. To avoid placing
|
|
98
|
+
requirements on the business logic, Inferno does not have standard requests to send as a part of the tests
|
|
99
|
+
and instead relies on the tester to provide the requests that Inferno will make.
|
|
100
|
+
|
|
101
|
+
For single-request fields (e.g., “PAS Submit Request Payload for Approval Response”), the input must be a json-encoded FHIR bundle.
|
|
102
|
+
|
|
103
|
+
For multiple-request fields (e.g., “Additional PAS Submit Request Payloads”), the input must be a json array of json-encoded FHIR bundles (e.g., [fhir-bundle-1, fhir-bundle-2, …] where each fhir-bundle-n is a full bundle).
|
|
104
|
+
|
|
105
|
+
## Testing Limitations
|
|
106
|
+
|
|
107
|
+
### Private X12 details
|
|
108
|
+
|
|
109
|
+
HIPAA [requires](https://hl7.org/fhir/us/davinci-pas/STU2/regulations.html) electronic prior authorization
|
|
110
|
+
processing to use the X12 278 standard. While recent CMS rule-making suggests that [this requirement
|
|
111
|
+
will not be enforced in the future](https://www.cms.gov/newsroom/fact-sheets/cms-interoperability-and-prior-authorization-final-rule-cms-0057-f),
|
|
112
|
+
the current PAS IG relies heavily on X12. As the IG authors note at the
|
|
113
|
+
top of the [IG home page](https://hl7.org/fhir/us/davinci-pas/STU2/):
|
|
114
|
+
|
|
115
|
+
> Note that this implementation guide is intended to support mapping between FHIR and X12 transactions. To respect
|
|
116
|
+
> X12 intellectual property, all mapping and X12-specific terminology information will be solely published by X12
|
|
117
|
+
> and made available in accordance with X12 rules - which may require membership and/or payment. Please see this
|
|
118
|
+
> [Da Vinci External Reference page](https://confluence.hl7.org/display/DVP/Da+Vinci+Reference+to+External+Standards+and+Terminologies)
|
|
119
|
+
> for details on how to get this mapping.
|
|
120
|
+
>
|
|
121
|
+
> There are many situationally required fields that are specified in the X12 TRN03 guide that do not have guidance
|
|
122
|
+
> in this Implementation Guide. Implementers need to consult the X12 PAS guides to know the requirements for these
|
|
123
|
+
> fields.
|
|
124
|
+
>
|
|
125
|
+
> Several of the profiles will require use of terminologies that are part of X12 which we anticipate being made
|
|
126
|
+
> publicly available. At such time as this occurs, the implementation guide will be updated to bind to these as
|
|
127
|
+
> external terminologies.
|
|
128
|
+
|
|
129
|
+
The implications of this reliance on proprietary information that is not publicly available means that this test
|
|
130
|
+
kit:
|
|
131
|
+
|
|
132
|
+
- Cannot verify the correct usage of X12-based terminology: terminology requirements for all elements bound to X12
|
|
133
|
+
value sets will not be validated.
|
|
134
|
+
- Cannot verify the meaning of codes: validation that a given response conveys something specific, e.g., approval
|
|
135
|
+
or pending, is not performed.
|
|
136
|
+
- Cannot verify matching semantics on inquiries: no checking of the identity of the ClaimResponse returned for an
|
|
137
|
+
inquiry, e.g., that it matches the input or the original request.
|
|
138
|
+
|
|
139
|
+
These limitations may be removed in future versions of these tests. In the meantime, testers should consider these
|
|
140
|
+
requirements to be verified through attestation and should not represent their systems to have passed these tests
|
|
141
|
+
if these requirements are not met.
|
|
142
|
+
|
|
143
|
+
### Underspecified Subscription Details
|
|
144
|
+
|
|
145
|
+
The current PAS specification around subscriptions and notifications
|
|
146
|
+
is not detailed enough to support testing. Notably,
|
|
147
|
+
- There are no examples of what a notification payload looks like
|
|
148
|
+
- There is no instruction on how to turn the notification payload into an inquiry
|
|
149
|
+
|
|
150
|
+
Once these details have been clarified, validation of the notification workflows
|
|
151
|
+
will be added to these tests.
|
|
152
|
+
|
|
153
|
+
### Future Details
|
|
154
|
+
|
|
155
|
+
The PAS IG places additional requirements on servers that are not currently tested by this test kit, including
|
|
156
|
+
|
|
157
|
+
- Prior Authorization update workflows
|
|
158
|
+
- Requests for additional information handled through the CDex framework
|
|
159
|
+
- PDF, CDA, and JPG attachments
|
|
160
|
+
- US Core profile support for supporting information
|
|
161
|
+
- Inquiry matching and subsetting logic
|
|
162
|
+
- Inquiry requests from non-submitting systems
|
|
163
|
+
- Collection of metrics
|
|
164
|
+
|
|
165
|
+
These and any other requirements found in the PAS IG may be tested in future versions of these tests.
|
|
166
|
+
)
|
|
167
|
+
|
|
168
|
+
links [
|
|
169
|
+
{
|
|
170
|
+
label: 'Report Issue',
|
|
171
|
+
url: 'https://github.com/inferno-framework/davinci-pas-test-kit/issues/'
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
label: 'Open Source',
|
|
175
|
+
url: 'https://github.com/inferno-framework/davinci-pas-test-kit/'
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
label: 'Implementation Guide',
|
|
179
|
+
url: 'https://hl7.org/fhir/us/davinci-pas/STU2/'
|
|
180
|
+
}
|
|
181
|
+
]
|
|
182
|
+
|
|
183
|
+
resume_test_route :get, '/resume_after_notification' do |request|
|
|
184
|
+
request.query_parameters['use_case']
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
validator do
|
|
188
|
+
url ENV.fetch('VALIDATOR_URL')
|
|
189
|
+
|
|
190
|
+
exclude_message do |message|
|
|
191
|
+
# Messages expected of the form `<ResourceType>: <FHIRPath>: <message>`
|
|
192
|
+
# We strip `<ResourceType>: <FHIRPath>: ` for the sake of matching
|
|
193
|
+
SUPPRESSED_MESSAGES.match?(message.message.sub(/\A\S+: \S+: /, '')) ||
|
|
194
|
+
message.message.downcase.include?('x12')
|
|
195
|
+
end
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
input :server_endpoint,
|
|
199
|
+
title: 'FHIR Server Endpoint URL',
|
|
200
|
+
description: 'Insert the FHIR server endpoint URL for PAS'
|
|
201
|
+
|
|
202
|
+
input :smart_credentials,
|
|
203
|
+
title: 'OAuth Credentials',
|
|
204
|
+
type: :oauth_credentials,
|
|
205
|
+
optional: true
|
|
206
|
+
|
|
207
|
+
fhir_client do
|
|
208
|
+
url :server_endpoint
|
|
209
|
+
oauth_credentials :smart_credentials
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
# Used for attestation experiment - see pas_claim_status_test.rb
|
|
213
|
+
# resume_test_route :get, RESUME_PASS_PATH do |request|
|
|
214
|
+
# request.query_parameters['token']
|
|
215
|
+
# end
|
|
216
|
+
#
|
|
217
|
+
# resume_test_route :get, RESUME_FAIL_PATH, result: 'fail' do |request|
|
|
218
|
+
# request.query_parameters['token']
|
|
219
|
+
# end
|
|
220
|
+
|
|
221
|
+
group 'Demonstrate Workflow Support' do
|
|
222
|
+
description %(
|
|
223
|
+
The workflow tests validate that the server can participate in complete
|
|
224
|
+
end-to-end prior authorization interactions, returning responses that are
|
|
225
|
+
conformant and also contain the correct codes.
|
|
226
|
+
)
|
|
227
|
+
|
|
228
|
+
group from: :pas_server_v201_approval_use_case
|
|
229
|
+
group from: :pas_server_v201_denial_use_case
|
|
230
|
+
group from: :pas_server_v201_pended_use_case
|
|
231
|
+
end
|
|
232
|
+
group from: :pas_server_v201_must_support_use_case
|
|
233
|
+
group from: :pas_v201_error_group
|
|
234
|
+
end
|
|
235
|
+
end
|
|
236
|
+
end
|