davinci_pas_test_kit 0.14.0 → 0.15.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 +4 -4
- data/config/presets/pas_client_v201_run_against_pas_server.json +39 -0
- data/config/presets/pas_client_v221_run_against_pas_server.json +85 -0
- data/config/presets/pas_ri.json +2 -2
- data/config/presets/pas_server_v201_run_against_pas_client.json.erb +76 -0
- data/config/presets/pas_server_v221_run_against_pas_client.json.erb +104 -0
- data/lib/davinci_pas_test_kit/client/abstract_approval_submit_test.rb +75 -0
- data/lib/davinci_pas_test_kit/client/abstract_denial_submit_test.rb +74 -0
- data/lib/davinci_pas_test_kit/client/abstract_gather_must_support_test.rb +160 -0
- data/lib/davinci_pas_test_kit/client/abstract_modification_submit_test.rb +78 -0
- data/lib/davinci_pas_test_kit/client/abstract_response_attest.rb +64 -0
- data/lib/davinci_pas_test_kit/client/abstract_subscription_create_test.rb +57 -0
- data/lib/davinci_pas_test_kit/{urls.rb → client/client_urls.rb} +7 -23
- data/lib/davinci_pas_test_kit/client/endpoints/claim_endpoint.rb +303 -0
- data/lib/davinci_pas_test_kit/{endpoints → client/endpoints}/subscription_create_endpoint.rb +1 -1
- data/lib/davinci_pas_test_kit/{endpoints → client/endpoints}/subscription_status_endpoint.rb +1 -1
- data/lib/davinci_pas_test_kit/{endpoints → client/endpoints}/token_endpoint.rb +1 -2
- data/lib/davinci_pas_test_kit/{generated/v2.0.1/beneficiary/client_submit_request_beneficiary_must_support_test.rb → client/generated/v2.0.1/beneficiary/client_inquire_request_must_support_beneficiary_test.rb} +14 -35
- data/lib/davinci_pas_test_kit/client/generated/v2.0.1/beneficiary/client_inquire_response_must_support_beneficiary_test.rb +59 -0
- data/lib/davinci_pas_test_kit/{generated/v2.0.1/beneficiary/client_inquire_request_beneficiary_must_support_test.rb → client/generated/v2.0.1/beneficiary/client_submit_request_must_support_beneficiary_test.rb} +14 -35
- data/lib/davinci_pas_test_kit/client/generated/v2.0.1/beneficiary/client_submit_response_must_support_beneficiary_test.rb +59 -0
- data/lib/davinci_pas_test_kit/{generated/v2.0.1/claim_inquiry/client_inquire_request_claim_inquiry_must_support_test.rb → client/generated/v2.0.1/claim_inquiry/client_inquire_request_must_support_claim_inquiry_test.rb} +19 -35
- data/lib/davinci_pas_test_kit/{generated/v2.0.1/claim_update/client_submit_request_claim_update_must_support_test.rb → client/generated/v2.0.1/claim_update/client_submit_request_must_support_claim_update_test.rb} +19 -35
- data/lib/davinci_pas_test_kit/client/generated/v2.0.1/claiminquiryresponse/client_inquire_response_must_support_claiminquiryresponse_test.rb +57 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.0.1/claimresponse/client_submit_response_must_support_claimresponse_test.rb +59 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.0.1/communication_request/client_submit_response_must_support_communication_request_test.rb +42 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.0.1/coverage/client_inquire_request_must_support_coverage_test.rb +39 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.0.1/coverage/client_submit_request_must_support_coverage_test.rb +39 -0
- data/lib/davinci_pas_test_kit/{generated/v2.0.1/encounter/client_submit_request_encounter_must_support_test.rb → client/generated/v2.0.1/encounter/client_submit_request_must_support_encounter_test.rb} +14 -35
- data/lib/davinci_pas_test_kit/client/generated/v2.0.1/insurer/client_inquire_request_must_support_insurer_test.rb +44 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.0.1/insurer/client_inquire_response_must_support_insurer_test.rb +44 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.0.1/insurer/client_submit_request_must_support_insurer_test.rb +44 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.0.1/insurer/client_submit_response_must_support_insurer_test.rb +44 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.0.1/pas_client_inquire_must_support_group.rb +48 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.0.1/pas_client_inquire_response_must_support_group.rb +79 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.0.1/pas_client_submit_must_support_group.rb +58 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.0.1/pas_client_submit_response_must_support_group.rb +84 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.0.1/pas_inquiry_request_bundle/client_inquire_request_must_support_pas_inquiry_request_bundle_test.rb +37 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.0.1/pas_inquiry_response_bundle/client_inquire_response_must_support_pas_inquiry_response_bundle_test.rb +36 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.0.1/pas_request_bundle/client_submit_request_must_support_pas_request_bundle_test.rb +37 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.0.1/pas_response_bundle/client_submit_response_must_support_pas_response_bundle_test.rb +36 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.0.1/practitioner/client_inquire_request_must_support_practitioner_test.rb +37 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.0.1/practitioner/client_inquire_response_must_support_practitioner_test.rb +37 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.0.1/practitioner/client_submit_request_must_support_practitioner_test.rb +37 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.0.1/practitioner/client_submit_response_must_support_practitioner_test.rb +37 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.0.1/practitioner_role/client_inquire_request_must_support_practitioner_role_test.rb +33 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.0.1/practitioner_role/client_inquire_response_must_support_practitioner_role_test.rb +33 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.0.1/practitioner_role/client_submit_request_must_support_practitioner_role_test.rb +33 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.0.1/practitioner_role/client_submit_response_must_support_practitioner_role_test.rb +33 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.0.1/requestor/client_inquire_request_must_support_requestor_test.rb +47 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.0.1/requestor/client_inquire_response_must_support_requestor_test.rb +47 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.0.1/requestor/client_submit_request_must_support_requestor_test.rb +47 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.0.1/requestor/client_submit_response_must_support_requestor_test.rb +47 -0
- data/lib/davinci_pas_test_kit/{generated/v2.0.1/subscriber/client_inquire_request_subscriber_must_support_test.rb → client/generated/v2.0.1/subscriber/client_inquire_request_must_support_subscriber_test.rb} +14 -35
- data/lib/davinci_pas_test_kit/{generated/v2.0.1/subscriber/client_submit_request_subscriber_must_support_test.rb → client/generated/v2.0.1/subscriber/client_submit_request_must_support_subscriber_test.rb} +14 -35
- data/lib/davinci_pas_test_kit/client/generated/v2.0.1/task/client_inquire_response_must_support_task_test.rb +45 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.0.1/task/client_submit_response_must_support_task_test.rb +45 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.2.1/beneficiary/client_inquire_response_must_support_beneficiary_test.rb +53 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.2.1/beneficiary/client_submit_response_must_support_beneficiary_test.rb +53 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.2.1/claim_inquiry/client_inquire_request_must_support_claim_inquiry_test.rb +123 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.2.1/claim_update/client_submit_request_must_support_claim_update_test.rb +143 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.2.1/claiminquiryresponse/client_inquire_response_must_support_claiminquiryresponse_test.rb +102 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.2.1/claimresponse/client_submit_response_must_support_claimresponse_test.rb +103 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.2.1/communication_request/client_submit_response_must_support_communication_request_test.rb +42 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.2.1/insurer/client_inquire_response_must_support_insurer_test.rb +47 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.2.1/insurer/client_submit_response_must_support_insurer_test.rb +47 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.2.1/pas_client_inquire_must_support_group.rb +60 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.2.1/pas_client_inquire_response_must_support_group.rb +79 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.2.1/pas_client_submit_must_support_group.rb +89 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.2.1/pas_client_submit_response_must_support_group.rb +84 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.2.1/pas_inquiry_response_bundle/client_inquire_response_must_support_pas_inquiry_response_bundle_test.rb +38 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.2.1/pas_response_bundle/client_submit_response_must_support_pas_response_bundle_test.rb +39 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.2.1/practitioner/client_inquire_response_must_support_practitioner_test.rb +44 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.2.1/practitioner/client_submit_response_must_support_practitioner_test.rb +44 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.2.1/practitioner_role/client_inquire_response_must_support_practitioner_role_test.rb +40 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.2.1/practitioner_role/client_submit_response_must_support_practitioner_role_test.rb +40 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.2.1/requestor/client_inquire_response_must_support_requestor_test.rb +50 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.2.1/requestor/client_submit_response_must_support_requestor_test.rb +50 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.2.1/task/client_inquire_response_must_support_task_test.rb +55 -0
- data/lib/davinci_pas_test_kit/client/generated/v2.2.1/task/client_submit_response_must_support_task_test.rb +55 -0
- data/lib/davinci_pas_test_kit/{jobs → client/jobs}/send_pas_subscription_notification.rb +12 -7
- data/lib/davinci_pas_test_kit/{jobs → client/jobs}/send_subscription_handshake.rb +1 -1
- data/lib/davinci_pas_test_kit/client/metadata/mock_pas_server.rb +26 -0
- data/lib/davinci_pas_test_kit/client/metadata/pas_server_capability_statement.json +60 -0
- data/lib/davinci_pas_test_kit/client/pas_client_options.rb +23 -0
- data/lib/davinci_pas_test_kit/client/pas_client_subscription_pas_conformance_test.rb +33 -0
- data/lib/davinci_pas_test_kit/client/registration/abstract_configuration_other_display_test.rb +45 -0
- data/lib/davinci_pas_test_kit/client/registration/abstract_configuration_smart_display_test.rb +37 -0
- data/lib/davinci_pas_test_kit/client/registration/abstract_configuration_udap_display_test.rb +37 -0
- data/lib/davinci_pas_test_kit/client/registration/abstract_other_auth_attest_test.rb +39 -0
- data/lib/davinci_pas_test_kit/{response_generator.rb → client/response_generator.rb} +198 -62
- data/lib/davinci_pas_test_kit/{session_identification.rb → client/session_identification.rb} +1 -2
- data/lib/davinci_pas_test_kit/client/user_input_response.rb +64 -0
- data/lib/davinci_pas_test_kit/{client_suite.rb → client/v2.0.1/client_suite.rb} +33 -16
- data/lib/davinci_pas_test_kit/client/v2.0.1/must_support/pas_client_gather_must_support_test.rb +12 -0
- data/lib/davinci_pas_test_kit/{custom_groups/v2.0.1/must_support/pas_client_must_support_requirement_test.rb → client/v2.0.1/must_support/pas_client_must_support_request_profiles_test.rb} +12 -46
- data/lib/davinci_pas_test_kit/{custom_groups → client}/v2.0.1/pas_client_approval_group.rb +5 -5
- data/lib/davinci_pas_test_kit/{custom_groups → client}/v2.0.1/pas_client_auth_smart_group.rb +1 -2
- data/lib/davinci_pas_test_kit/{custom_groups → client}/v2.0.1/pas_client_auth_udap_group.rb +1 -2
- data/lib/davinci_pas_test_kit/{custom_groups → client}/v2.0.1/pas_client_denial_group.rb +7 -6
- data/lib/davinci_pas_test_kit/client/v2.0.1/pas_client_must_support_group.rb +96 -0
- data/lib/davinci_pas_test_kit/{custom_groups → client}/v2.0.1/pas_client_pended_group.rb +13 -10
- data/lib/davinci_pas_test_kit/{custom_groups → client}/v2.0.1/pas_client_registration_group.rb +5 -6
- data/lib/davinci_pas_test_kit/{custom_groups → client}/v2.0.1/pas_client_subscription_setup_group.rb +6 -3
- data/lib/davinci_pas_test_kit/client/v2.0.1/registration/configuration_other_display_test.rb +12 -0
- data/lib/davinci_pas_test_kit/client/v2.0.1/registration/configuration_smart_display_test.rb +12 -0
- data/lib/davinci_pas_test_kit/client/v2.0.1/registration/configuration_udap_display_test.rb +12 -0
- data/lib/davinci_pas_test_kit/client/v2.0.1/registration/other_auth_attest_test.rb +12 -0
- data/lib/davinci_pas_test_kit/client/v2.0.1/subscription/pas_client_subscription_create_test.rb +15 -0
- data/lib/davinci_pas_test_kit/client/v2.0.1/urls.rb +15 -0
- data/lib/davinci_pas_test_kit/client/v2.0.1/workflows/pas_client_approval_submit_test.rb +15 -0
- data/lib/davinci_pas_test_kit/client/v2.0.1/workflows/pas_client_denial_submit_test.rb +15 -0
- data/lib/davinci_pas_test_kit/{custom_groups/v2.0.1/client_tests → client/v2.0.1/workflows}/pas_client_inquire_request_bundle_validation_test.rb +1 -3
- data/lib/davinci_pas_test_kit/{custom_groups/v2.0.1/client_tests → client/v2.0.1/workflows}/pas_client_inquire_response_bundle_validation_test.rb +18 -6
- data/lib/davinci_pas_test_kit/{custom_groups/v2.0.1/client_tests → client/v2.0.1/workflows}/pas_client_pended_submit_test.rb +12 -8
- data/lib/davinci_pas_test_kit/{custom_groups/v2.0.1/client_tests → client/v2.0.1/workflows}/pas_client_request_bundle_validation_test.rb +1 -3
- data/lib/davinci_pas_test_kit/client/v2.0.1/workflows/pas_client_response_attest.rb +12 -0
- data/lib/davinci_pas_test_kit/{custom_groups/v2.0.1/client_tests → client/v2.0.1/workflows}/pas_client_response_bundle_validation_test.rb +10 -5
- data/lib/davinci_pas_test_kit/client/v2.2.1/client_suite.rb +240 -0
- data/lib/davinci_pas_test_kit/client/v2.2.1/error_handling/pas_client_operation_failure_submit_test.rb +76 -0
- data/lib/davinci_pas_test_kit/client/v2.2.1/error_handling/pas_client_operation_outcome_validation_test.rb +38 -0
- data/lib/davinci_pas_test_kit/client/v2.2.1/error_handling/pas_client_processing_error_response_validation_test.rb +55 -0
- data/lib/davinci_pas_test_kit/client/v2.2.1/error_handling/pas_client_processing_error_submit_test.rb +67 -0
- data/lib/davinci_pas_test_kit/client/v2.2.1/must_support/must_support_with_attestation_option.rb +214 -0
- data/lib/davinci_pas_test_kit/client/v2.2.1/must_support/pas_client_gather_must_support_test.rb +12 -0
- data/lib/davinci_pas_test_kit/client/v2.2.1/pas_client_approval_group.rb +40 -0
- data/lib/davinci_pas_test_kit/client/v2.2.1/pas_client_auth_smart_group.rb +31 -0
- data/lib/davinci_pas_test_kit/client/v2.2.1/pas_client_auth_udap_group.rb +30 -0
- data/lib/davinci_pas_test_kit/client/v2.2.1/pas_client_claim_updates_group.rb +112 -0
- data/lib/davinci_pas_test_kit/client/v2.2.1/pas_client_denial_group.rb +47 -0
- data/lib/davinci_pas_test_kit/client/v2.2.1/pas_client_error_handling_group.rb +20 -0
- data/lib/davinci_pas_test_kit/client/v2.2.1/pas_client_modification_group.rb +52 -0
- data/lib/davinci_pas_test_kit/client/v2.2.1/pas_client_must_support_group.rb +96 -0
- data/lib/davinci_pas_test_kit/client/v2.2.1/pas_client_operation_failure_group.rb +45 -0
- data/lib/davinci_pas_test_kit/client/v2.2.1/pas_client_pended_group.rb +125 -0
- data/lib/davinci_pas_test_kit/client/v2.2.1/pas_client_processing_error_group.rb +44 -0
- data/lib/davinci_pas_test_kit/client/v2.2.1/pas_client_registration_group.rb +65 -0
- data/lib/davinci_pas_test_kit/client/v2.2.1/pas_client_subscription_setup_group.rb +31 -0
- data/lib/davinci_pas_test_kit/client/v2.2.1/pas_client_workflows_group.rb +25 -0
- data/lib/davinci_pas_test_kit/client/v2.2.1/registration/configuration_other_display_test.rb +12 -0
- data/lib/davinci_pas_test_kit/client/v2.2.1/registration/configuration_smart_display_test.rb +12 -0
- data/lib/davinci_pas_test_kit/client/v2.2.1/registration/configuration_udap_display_test.rb +12 -0
- data/lib/davinci_pas_test_kit/client/v2.2.1/registration/other_auth_attest_test.rb +12 -0
- data/lib/davinci_pas_test_kit/client/v2.2.1/subscription/pas_client_subscription_create_test.rb +14 -0
- data/lib/davinci_pas_test_kit/client/v2.2.1/urls.rb +15 -0
- data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_approval_submit_test.rb +12 -0
- data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_claim_update_cancel_request_test.rb +33 -0
- data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_claim_update_cancelled_entries_test.rb +50 -0
- data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_claim_update_cancelled_items_certtype_test.rb +47 -0
- data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_claim_update_changed_entries_test.rb +100 -0
- data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_claim_update_entries_preserved_test.rb +51 -0
- data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_claim_update_grandparent_excluded_test.rb +52 -0
- data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_claim_update_referenced_claim_test.rb +46 -0
- data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_claim_update_referenced_resources_test.rb +43 -0
- data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_claim_update_submit_tests.rb +238 -0
- data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_claim_update_validation_utils.rb +183 -0
- data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_denial_submit_test.rb +12 -0
- data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_inquire_request_bundle_validation_test.rb +55 -0
- data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_inquire_response_bundle_validation_test.rb +78 -0
- data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_modification_submit_test.rb +12 -0
- data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_modification_verification_test.rb +101 -0
- data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_pended_submit_test.rb +148 -0
- data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_request_bundle_validation_test.rb +56 -0
- data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_response_attest.rb +12 -0
- data/lib/davinci_pas_test_kit/client/v2.2.1/workflows/pas_client_response_bundle_validation_test.rb +84 -0
- data/lib/davinci_pas_test_kit/cross_suite/base_urls.rb +27 -0
- data/lib/davinci_pas_test_kit/cross_suite/fhirpath_utils.rb +55 -0
- data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/beneficiary/metadata.yml +19 -13
- data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/claim_inquiry/metadata.yml +59 -22
- data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/claim_update/metadata.yml +60 -22
- data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/claiminquiryresponse/metadata.yml +17 -10
- data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/claimresponse/metadata.yml +17 -13
- data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/communication_request/metadata.yml +7 -13
- data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/coverage/metadata.yml +8 -12
- data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/device_request/metadata.yml +1 -6
- data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/encounter/metadata.yml +6 -5
- data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/insurer/metadata.yml +16 -13
- data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/medication_request/metadata.yml +1 -6
- data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/metadata.yml +276 -135
- data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/nutrition_order/metadata.yml +1 -6
- data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/pas_inquiry_request_bundle/metadata.yml +5 -7
- data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/pas_inquiry_response_bundle/metadata.yml +5 -5
- data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/pas_request_bundle/metadata.yml +5 -7
- data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/pas_response_bundle/metadata.yml +5 -5
- data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/practitioner/metadata.yml +16 -13
- data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/practitioner_role/metadata.yml +16 -19
- data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/requestor/metadata.yml +16 -13
- data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/service_request/metadata.yml +2 -6
- data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/subscriber/metadata.yml +11 -9
- data/lib/davinci_pas_test_kit/{generated → cross_suite/generated}/v2.0.1/task/metadata.yml +8 -5
- data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/beneficiary/metadata.yml +150 -0
- data/lib/davinci_pas_test_kit/{generated/v2.0.1/claim → cross_suite/generated/v2.2.1/claim_inquiry}/metadata.yml +199 -192
- data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/claim_update/metadata.yml +733 -0
- data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/claiminquiryresponse/metadata.yml +456 -0
- data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/claimresponse/metadata.yml +461 -0
- data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/communication_request/metadata.yml +120 -0
- data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/coverage/metadata.yml +163 -0
- data/lib/davinci_pas_test_kit/{custom_groups/v2.0.1/must_support/device_request_metadata.yml → cross_suite/generated/v2.2.1/device_request/metadata.yml} +32 -33
- data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/encounter/metadata.yml +237 -0
- data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/insurer/metadata.yml +111 -0
- data/lib/davinci_pas_test_kit/{custom_groups/v2.0.1/must_support/medication_request_metadata.yml → cross_suite/generated/v2.2.1/medication_request/metadata.yml} +59 -26
- data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/metadata.yml +6544 -0
- data/lib/davinci_pas_test_kit/{custom_groups/v2.0.1/must_support/nutrition_order_metadata.yml → cross_suite/generated/v2.2.1/nutrition_order/metadata.yml} +13 -14
- data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/pas_inquiry_request_bundle/metadata.yml +74 -0
- data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/pas_inquiry_response_bundle/metadata.yml +70 -0
- data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/pas_request_bundle/metadata.yml +74 -0
- data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/pas_response_bundle/metadata.yml +72 -0
- data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/practitioner/metadata.yml +101 -0
- data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/practitioner_role/metadata.yml +101 -0
- data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/requestor/metadata.yml +114 -0
- data/lib/davinci_pas_test_kit/{custom_groups/v2.0.1/must_support/service_request_metadata.yml → cross_suite/generated/v2.2.1/service_request/metadata.yml} +39 -45
- data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/subscriber/metadata.yml +136 -0
- data/lib/davinci_pas_test_kit/cross_suite/generated/v2.2.1/task/metadata.yml +237 -0
- data/lib/davinci_pas_test_kit/cross_suite/must_support/must_support_data_gathering.rb +111 -0
- data/lib/davinci_pas_test_kit/cross_suite/must_support/must_support_request_type_test.rb +75 -0
- data/lib/davinci_pas_test_kit/cross_suite/must_support/must_support_test.rb +67 -0
- data/lib/davinci_pas_test_kit/{pas_bundle_validation.rb → cross_suite/pas_bundle_validation.rb} +383 -56
- data/lib/davinci_pas_test_kit/cross_suite/pas_constants.rb +31 -0
- data/lib/davinci_pas_test_kit/cross_suite/pas_notification_verification.rb +120 -0
- data/lib/davinci_pas_test_kit/cross_suite/pas_subscription_verification.rb +72 -0
- data/lib/davinci_pas_test_kit/cross_suite/response_selection_utils.rb +88 -0
- data/lib/davinci_pas_test_kit/cross_suite/tags.rb +35 -0
- data/lib/davinci_pas_test_kit/cross_suite/validation_test.rb +25 -0
- data/lib/davinci_pas_test_kit/{validator_suppressions.rb → cross_suite/validator_suppressions.rb} +23 -1
- data/lib/davinci_pas_test_kit/ext/inferno_core/runnable.rb +22 -0
- data/lib/davinci_pas_test_kit/generator/client_must_support_group_generator.rb +230 -0
- data/lib/davinci_pas_test_kit/generator/descriptions.rb +95 -0
- data/lib/davinci_pas_test_kit/generator/ig_metadata.rb +45 -38
- data/lib/davinci_pas_test_kit/generator/ig_metadata_extractor.rb +3 -5
- data/lib/davinci_pas_test_kit/generator/{must_support_check_profiles.rb → must_support_target_profiles.rb} +12 -12
- data/lib/davinci_pas_test_kit/generator/must_support_test_generator.rb +63 -83
- data/lib/davinci_pas_test_kit/generator/pas_must_support_metadata_extractor.rb +129 -0
- data/lib/davinci_pas_test_kit/generator/profile_metadata.rb +86 -0
- data/lib/davinci_pas_test_kit/generator/{group_metadata_extractor.rb → profile_metadata_extractor.rb} +11 -78
- data/lib/davinci_pas_test_kit/generator/server_must_support_group_generator.rb +166 -0
- data/lib/davinci_pas_test_kit/generator/{suite_generator.rb → server_suite_generator.rb} +32 -5
- data/lib/davinci_pas_test_kit/generator/templates/client_must_support_group.rb.erb +80 -0
- data/lib/davinci_pas_test_kit/generator/templates/client_must_support_response_group.rb.erb +43 -0
- data/lib/davinci_pas_test_kit/generator/templates/must_support.rb.erb +14 -35
- data/lib/davinci_pas_test_kit/generator/templates/server_must_support_group.rb.erb +121 -0
- data/lib/davinci_pas_test_kit/generator/templates/{suite.rb.erb → server_suite.rb.erb} +19 -23
- data/lib/davinci_pas_test_kit/generator/templates/use_case_group.rb.erb +181 -0
- data/lib/davinci_pas_test_kit/generator/use_case_group_generator.rb +227 -0
- data/lib/davinci_pas_test_kit/generator.rb +46 -26
- data/lib/davinci_pas_test_kit/igs/davinci_pas_2.2.1.tgz +0 -0
- data/lib/davinci_pas_test_kit/metadata.rb +21 -55
- data/lib/davinci_pas_test_kit/parameters_helper.rb +18 -0
- data/lib/davinci_pas_test_kit/pas_notification_conformance_test.rb +40 -0
- data/lib/davinci_pas_test_kit/requirements/davinci_pas_test_kit_requirements.csv +121 -0
- data/lib/davinci_pas_test_kit/requirements/generated/davinci_pas_client_suite_v201_requirements_coverage.csv +22 -22
- data/lib/davinci_pas_test_kit/requirements/generated/davinci_pas_client_suite_v221_requirements_coverage.csv +66 -0
- data/lib/davinci_pas_test_kit/requirements/generated/davinci_pas_server_suite_v201_requirements_coverage.csv +42 -42
- data/lib/davinci_pas_test_kit/requirements/generated/davinci_pas_server_suite_v221_requirements_coverage.csv +212 -0
- data/lib/davinci_pas_test_kit/requirements/hl7.fhir.us.davinci-pas_2.2.1_requirements.xlsx +0 -0
- data/lib/davinci_pas_test_kit/{custom_groups/v2.0.1/notification/pas_subscription_notification_test.rb → server/abstract_pas_subscription_notification_wait_test.rb} +13 -20
- data/lib/davinci_pas_test_kit/server/claim_inquire_operation_test.rb +31 -0
- data/lib/davinci_pas_test_kit/server/claim_operation_logic.rb +67 -0
- data/lib/davinci_pas_test_kit/server/claim_submit_operation_test.rb +32 -0
- data/lib/davinci_pas_test_kit/{generated/v2.0.1/beneficiary/server_submit_request_beneficiary_must_support_test.rb → server/generated/v2.0.1/beneficiary/server_inquire_request_must_support_beneficiary_test.rb} +14 -35
- data/lib/davinci_pas_test_kit/{generated/v2.0.1/beneficiary/server_submit_response_beneficiary_must_support_test.rb → server/generated/v2.0.1/beneficiary/server_inquire_response_must_support_beneficiary_test.rb} +16 -36
- data/lib/davinci_pas_test_kit/{generated/v2.0.1/beneficiary/server_inquire_request_beneficiary_must_support_test.rb → server/generated/v2.0.1/beneficiary/server_submit_request_must_support_beneficiary_test.rb} +14 -35
- data/lib/davinci_pas_test_kit/{generated/v2.0.1/beneficiary/server_inquire_response_beneficiary_must_support_test.rb → server/generated/v2.0.1/beneficiary/server_submit_response_must_support_beneficiary_test.rb} +16 -36
- data/lib/davinci_pas_test_kit/{generated/v2.0.1/claim_inquiry/server_inquire_request_claim_inquiry_must_support_test.rb → server/generated/v2.0.1/claim_inquiry/server_inquire_request_must_support_claim_inquiry_test.rb} +19 -35
- data/lib/davinci_pas_test_kit/{generated/v2.0.1/claim_update/server_submit_request_claim_update_must_support_test.rb → server/generated/v2.0.1/claim_update/server_submit_request_must_support_claim_update_test.rb} +19 -35
- data/lib/davinci_pas_test_kit/{generated/v2.0.1/claiminquiryresponse/server_inquire_response_claiminquiryresponse_must_support_test.rb → server/generated/v2.0.1/claiminquiryresponse/server_inquire_response_must_support_claiminquiryresponse_test.rb} +14 -35
- data/lib/davinci_pas_test_kit/{generated/v2.0.1/claimresponse/server_submit_response_claimresponse_must_support_test.rb → server/generated/v2.0.1/claimresponse/server_submit_response_must_support_claimresponse_test.rb} +14 -35
- data/lib/davinci_pas_test_kit/server/generated/v2.0.1/communication_request/server_submit_response_must_support_communication_request_test.rb +43 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.0.1/coverage/server_inquire_request_must_support_coverage_test.rb +41 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.0.1/coverage/server_submit_request_must_support_coverage_test.rb +41 -0
- data/lib/davinci_pas_test_kit/{generated/v2.0.1/encounter/server_submit_request_encounter_must_support_test.rb → server/generated/v2.0.1/encounter/server_submit_request_must_support_encounter_test.rb} +14 -35
- data/lib/davinci_pas_test_kit/server/generated/v2.0.1/insurer/server_inquire_request_must_support_insurer_test.rb +46 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.0.1/insurer/server_inquire_response_must_support_insurer_test.rb +45 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.0.1/insurer/server_submit_request_must_support_insurer_test.rb +46 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.0.1/insurer/server_submit_response_must_support_insurer_test.rb +45 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.0.1/pas_inquiry_request_bundle/server_inquire_request_must_support_pas_inquiry_request_bundle_test.rb +39 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.0.1/pas_inquiry_response_bundle/server_inquire_response_must_support_pas_inquiry_response_bundle_test.rb +37 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.0.1/pas_request_bundle/server_submit_request_must_support_pas_request_bundle_test.rb +39 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.0.1/pas_response_bundle/server_submit_response_must_support_pas_response_bundle_test.rb +37 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.0.1/pas_server_approval_use_case_group.rb +145 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.0.1/pas_server_denial_use_case_group.rb +145 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.0.1/pas_server_must_support_group.rb +442 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.0.1/pas_server_pended_use_case_group.rb +280 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.0.1/practitioner/server_inquire_request_must_support_practitioner_test.rb +39 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.0.1/practitioner/server_inquire_response_must_support_practitioner_test.rb +38 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.0.1/practitioner/server_submit_request_must_support_practitioner_test.rb +39 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.0.1/practitioner/server_submit_response_must_support_practitioner_test.rb +38 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.0.1/practitioner_role/server_inquire_request_must_support_practitioner_role_test.rb +35 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.0.1/practitioner_role/server_inquire_response_must_support_practitioner_role_test.rb +34 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.0.1/practitioner_role/server_submit_request_must_support_practitioner_role_test.rb +35 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.0.1/practitioner_role/server_submit_response_must_support_practitioner_role_test.rb +34 -0
- data/lib/davinci_pas_test_kit/{generated/v2.0.1/requestor/server_submit_request_requestor_must_support_test.rb → server/generated/v2.0.1/requestor/server_inquire_request_must_support_requestor_test.rb} +14 -35
- data/lib/davinci_pas_test_kit/server/generated/v2.0.1/requestor/server_inquire_response_must_support_requestor_test.rb +48 -0
- data/lib/davinci_pas_test_kit/{generated/v2.0.1/requestor/server_inquire_request_requestor_must_support_test.rb → server/generated/v2.0.1/requestor/server_submit_request_must_support_requestor_test.rb} +14 -35
- data/lib/davinci_pas_test_kit/server/generated/v2.0.1/requestor/server_submit_response_must_support_requestor_test.rb +48 -0
- data/lib/davinci_pas_test_kit/{generated → server/generated}/v2.0.1/server_suite.rb +14 -20
- data/lib/davinci_pas_test_kit/{generated/v2.0.1/subscriber/server_inquire_request_subscriber_must_support_test.rb → server/generated/v2.0.1/subscriber/server_inquire_request_must_support_subscriber_test.rb} +14 -35
- data/lib/davinci_pas_test_kit/{generated/v2.0.1/subscriber/server_submit_request_subscriber_must_support_test.rb → server/generated/v2.0.1/subscriber/server_submit_request_must_support_subscriber_test.rb} +14 -35
- data/lib/davinci_pas_test_kit/server/generated/v2.0.1/task/server_inquire_response_must_support_task_test.rb +46 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.0.1/task/server_submit_response_must_support_task_test.rb +46 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.2.1/beneficiary/server_inquire_request_must_support_beneficiary_test.rb +55 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.2.1/beneficiary/server_inquire_response_must_support_beneficiary_test.rb +53 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.2.1/beneficiary/server_submit_request_must_support_beneficiary_test.rb +55 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.2.1/beneficiary/server_submit_response_must_support_beneficiary_test.rb +53 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.2.1/claim_inquiry/server_inquire_request_must_support_claim_inquiry_test.rb +125 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.2.1/claim_update/server_submit_request_must_support_claim_update_test.rb +145 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.2.1/claiminquiryresponse/server_inquire_response_must_support_claiminquiryresponse_test.rb +102 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.2.1/claimresponse/server_submit_response_must_support_claimresponse_test.rb +103 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.2.1/communication_request/server_submit_response_must_support_communication_request_test.rb +42 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.2.1/coverage/server_inquire_request_must_support_coverage_test.rb +52 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.2.1/coverage/server_submit_request_must_support_coverage_test.rb +52 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.2.1/encounter/server_submit_request_must_support_encounter_test.rb +58 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.2.1/insurer/server_inquire_request_must_support_insurer_test.rb +49 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.2.1/insurer/server_inquire_response_must_support_insurer_test.rb +47 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.2.1/insurer/server_submit_request_must_support_insurer_test.rb +49 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.2.1/insurer/server_submit_response_must_support_insurer_test.rb +47 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.2.1/pas_inquiry_request_bundle/server_inquire_request_must_support_pas_inquiry_request_bundle_test.rb +41 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.2.1/pas_inquiry_response_bundle/server_inquire_response_must_support_pas_inquiry_response_bundle_test.rb +38 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.2.1/pas_request_bundle/server_submit_request_must_support_pas_request_bundle_test.rb +41 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.2.1/pas_response_bundle/server_submit_response_must_support_pas_response_bundle_test.rb +39 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.2.1/pas_server_approval_use_case_group.rb +125 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.2.1/pas_server_denial_use_case_group.rb +125 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.2.1/pas_server_must_support_group.rb +403 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.2.1/pas_server_pended_use_case_group.rb +150 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.2.1/practitioner/server_inquire_request_must_support_practitioner_test.rb +46 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.2.1/practitioner/server_inquire_response_must_support_practitioner_test.rb +44 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.2.1/practitioner/server_submit_request_must_support_practitioner_test.rb +46 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.2.1/practitioner/server_submit_response_must_support_practitioner_test.rb +44 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.2.1/practitioner_role/server_inquire_request_must_support_practitioner_role_test.rb +42 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.2.1/practitioner_role/server_inquire_response_must_support_practitioner_role_test.rb +40 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.2.1/practitioner_role/server_submit_request_must_support_practitioner_role_test.rb +42 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.2.1/practitioner_role/server_submit_response_must_support_practitioner_role_test.rb +40 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.2.1/requestor/server_inquire_request_must_support_requestor_test.rb +52 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.2.1/requestor/server_inquire_response_must_support_requestor_test.rb +50 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.2.1/requestor/server_submit_request_must_support_requestor_test.rb +52 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.2.1/requestor/server_submit_response_must_support_requestor_test.rb +50 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.2.1/server_suite.rb +148 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.2.1/subscriber/server_inquire_request_must_support_subscriber_test.rb +54 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.2.1/subscriber/server_submit_request_must_support_subscriber_test.rb +54 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.2.1/task/server_inquire_response_must_support_task_test.rb +55 -0
- data/lib/davinci_pas_test_kit/server/generated/v2.2.1/task/server_submit_response_must_support_task_test.rb +55 -0
- data/lib/davinci_pas_test_kit/server/pas_claim_response_decision_test.rb +73 -0
- data/lib/davinci_pas_test_kit/server/server_request_bundle_validation_test.rb +64 -0
- data/lib/davinci_pas_test_kit/server/server_response_bundle_validation_test.rb +76 -0
- data/lib/davinci_pas_test_kit/{custom_groups → server}/v2.0.1/error_tests/pas_inquiry_error_test.rb +2 -2
- data/lib/davinci_pas_test_kit/{custom_groups → server}/v2.0.1/error_tests/pas_submission_error_test.rb +2 -2
- data/lib/davinci_pas_test_kit/{custom_groups/v2.0.1/must_support/pas_server_must_support_requirement_test.rb → server/v2.0.1/must_support/pas_server_must_support_request_profiles_test.rb} +12 -45
- data/lib/davinci_pas_test_kit/{custom_groups → server}/v2.0.1/pas_error_group.rb +3 -3
- data/lib/davinci_pas_test_kit/{custom_groups → server}/v2.0.1/pas_server_subscription_input_conformance.rb +5 -3
- data/lib/davinci_pas_test_kit/server/v2.0.1/pas_server_subscription_notification_wait_test.rb +12 -0
- data/lib/davinci_pas_test_kit/{custom_groups → server}/v2.0.1/pas_server_subscription_setup.rb +5 -3
- data/lib/davinci_pas_test_kit/server/v2.0.1/server_urls.rb +13 -0
- data/lib/davinci_pas_test_kit/server/v2.2.1/claim_updates/server_claim_update_response_tests.rb +143 -0
- data/lib/davinci_pas_test_kit/server/v2.2.1/error_tests/nonconformant_pas_bundle.json +16 -0
- data/lib/davinci_pas_test_kit/server/v2.2.1/error_tests/pas_inquiry_error_test.rb +38 -0
- data/lib/davinci_pas_test_kit/server/v2.2.1/error_tests/pas_submission_error_test.rb +56 -0
- data/lib/davinci_pas_test_kit/server/v2.2.1/must_support/pas_server_must_support_request_profiles_test.rb +86 -0
- data/lib/davinci_pas_test_kit/server/v2.2.1/pas_error_group.rb +20 -0
- data/lib/davinci_pas_test_kit/server/v2.2.1/pas_server_claim_updates_group.rb +104 -0
- data/lib/davinci_pas_test_kit/server/v2.2.1/pas_server_subscription_input_conformance.rb +48 -0
- data/lib/davinci_pas_test_kit/server/v2.2.1/pas_server_subscription_notification_wait_test.rb +12 -0
- data/lib/davinci_pas_test_kit/server/v2.2.1/pas_server_subscription_setup.rb +42 -0
- data/lib/davinci_pas_test_kit/server/v2.2.1/server_urls.rb +13 -0
- data/lib/davinci_pas_test_kit/version.rb +2 -2
- data/lib/davinci_pas_test_kit.rb +5 -2
- metadata +386 -190
- data/config/presets/pas_server_subscription_creation_against_pas_client.json +0 -32
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/claim_response_decision/pas_claim_response_decision_test.rb +0 -43
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_registration/configuration_other_display_test.rb +0 -46
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_registration/configuration_smart_display_test.rb +0 -37
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_registration/configuration_udap_display_test.rb +0 -37
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_registration/other_auth_attest_test.rb +0 -36
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_approval_submit_test.rb +0 -80
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_denial_submit_test.rb +0 -79
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_inquire_must_support_test.rb +0 -63
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_response_attest.rb +0 -52
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_submit_must_support_test.rb +0 -72
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_subscription_create_test.rb +0 -62
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_subscription_pas_conformance_test.rb +0 -30
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/pas_client_must_support_group.rb +0 -29
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/pas_client_options.rb +0 -25
- data/lib/davinci_pas_test_kit/endpoints/claim_endpoint.rb +0 -157
- data/lib/davinci_pas_test_kit/fhir_resource_navigation.rb +0 -72
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claim/claim_operation_test.rb +0 -67
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claim_inquiry/claim_inquiry_operation_test.rb +0 -56
- data/lib/davinci_pas_test_kit/generated/v2.0.1/communication_request/server_submit_response_communication_request_must_support_test.rb +0 -63
- data/lib/davinci_pas_test_kit/generated/v2.0.1/coverage/client_inquire_request_coverage_must_support_test.rb +0 -60
- data/lib/davinci_pas_test_kit/generated/v2.0.1/coverage/client_submit_request_coverage_must_support_test.rb +0 -60
- data/lib/davinci_pas_test_kit/generated/v2.0.1/coverage/server_inquire_request_coverage_must_support_test.rb +0 -62
- data/lib/davinci_pas_test_kit/generated/v2.0.1/coverage/server_submit_request_coverage_must_support_test.rb +0 -62
- data/lib/davinci_pas_test_kit/generated/v2.0.1/device_request/client_submit_request_device_request_must_support_test.rb +0 -56
- data/lib/davinci_pas_test_kit/generated/v2.0.1/device_request/server_submit_request_device_request_must_support_test.rb +0 -58
- data/lib/davinci_pas_test_kit/generated/v2.0.1/insurer/client_inquire_request_insurer_must_support_test.rb +0 -65
- data/lib/davinci_pas_test_kit/generated/v2.0.1/insurer/client_submit_request_insurer_must_support_test.rb +0 -65
- data/lib/davinci_pas_test_kit/generated/v2.0.1/insurer/server_inquire_request_insurer_must_support_test.rb +0 -67
- data/lib/davinci_pas_test_kit/generated/v2.0.1/insurer/server_inquire_response_insurer_must_support_test.rb +0 -65
- data/lib/davinci_pas_test_kit/generated/v2.0.1/insurer/server_submit_request_insurer_must_support_test.rb +0 -67
- data/lib/davinci_pas_test_kit/generated/v2.0.1/insurer/server_submit_response_insurer_must_support_test.rb +0 -65
- data/lib/davinci_pas_test_kit/generated/v2.0.1/medication_request/client_submit_request_medication_request_must_support_test.rb +0 -66
- data/lib/davinci_pas_test_kit/generated/v2.0.1/medication_request/server_submit_request_medication_request_must_support_test.rb +0 -68
- data/lib/davinci_pas_test_kit/generated/v2.0.1/nutrition_order/client_submit_request_nutrition_order_must_support_test.rb +0 -58
- data/lib/davinci_pas_test_kit/generated/v2.0.1/nutrition_order/server_submit_request_nutrition_order_must_support_test.rb +0 -60
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_client_inquiry_must_support_use_case_group.rb +0 -51
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_client_submit_must_support_use_case_group.rb +0 -61
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_inquiry_request_bundle/client_inquire_request_pas_inquiry_request_bundle_must_support_test.rb +0 -58
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_inquiry_request_bundle/server_inquire_request_pas_inquiry_request_bundle_must_support_test.rb +0 -60
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_inquiry_request_bundle/server_pas_inquiry_request_bundle_validation_test.rb +0 -95
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_inquiry_response_bundle/server_inquire_response_pas_inquiry_response_bundle_must_support_test.rb +0 -57
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_inquiry_response_bundle/server_pas_inquiry_response_bundle_validation_test.rb +0 -89
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_request_bundle/client_submit_request_pas_request_bundle_must_support_test.rb +0 -58
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_request_bundle/server_pas_request_bundle_validation_test.rb +0 -95
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_request_bundle/server_submit_request_pas_request_bundle_must_support_test.rb +0 -60
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_response_bundle/server_pas_response_bundle_validation_test.rb +0 -89
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_response_bundle/server_submit_response_pas_response_bundle_must_support_test.rb +0 -57
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_server_approval_use_case_group.rb +0 -54
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_server_denial_use_case_group.rb +0 -54
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_server_must_support_use_case_group.rb +0 -268
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_server_pended_use_case_group.rb +0 -90
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner/client_inquire_request_practitioner_must_support_test.rb +0 -58
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner/client_submit_request_practitioner_must_support_test.rb +0 -58
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner/server_inquire_request_practitioner_must_support_test.rb +0 -60
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner/server_inquire_response_practitioner_must_support_test.rb +0 -58
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner/server_submit_request_practitioner_must_support_test.rb +0 -60
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner/server_submit_response_practitioner_must_support_test.rb +0 -58
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner_role/client_inquire_request_practitioner_role_must_support_test.rb +0 -54
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner_role/client_submit_request_practitioner_role_must_support_test.rb +0 -54
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner_role/server_inquire_request_practitioner_role_must_support_test.rb +0 -56
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner_role/server_inquire_response_practitioner_role_must_support_test.rb +0 -54
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner_role/server_submit_request_practitioner_role_must_support_test.rb +0 -56
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner_role/server_submit_response_practitioner_role_must_support_test.rb +0 -54
- data/lib/davinci_pas_test_kit/generated/v2.0.1/requestor/client_inquire_request_requestor_must_support_test.rb +0 -68
- data/lib/davinci_pas_test_kit/generated/v2.0.1/requestor/client_submit_request_requestor_must_support_test.rb +0 -68
- data/lib/davinci_pas_test_kit/generated/v2.0.1/requestor/server_inquire_response_requestor_must_support_test.rb +0 -68
- data/lib/davinci_pas_test_kit/generated/v2.0.1/requestor/server_submit_response_requestor_must_support_test.rb +0 -68
- data/lib/davinci_pas_test_kit/generated/v2.0.1/resource_list.rb +0 -54
- data/lib/davinci_pas_test_kit/generated/v2.0.1/service_request/client_submit_request_service_request_must_support_test.rb +0 -58
- data/lib/davinci_pas_test_kit/generated/v2.0.1/service_request/server_submit_request_service_request_must_support_test.rb +0 -60
- data/lib/davinci_pas_test_kit/generated/v2.0.1/task/server_inquire_response_task_must_support_test.rb +0 -66
- data/lib/davinci_pas_test_kit/generated/v2.0.1/task/server_submit_response_task_must_support_test.rb +0 -66
- data/lib/davinci_pas_test_kit/generator/group_generator.rb +0 -470
- data/lib/davinci_pas_test_kit/generator/group_metadata.rb +0 -73
- data/lib/davinci_pas_test_kit/generator/naming.rb +0 -50
- data/lib/davinci_pas_test_kit/generator/operation_test_generator.rb +0 -149
- data/lib/davinci_pas_test_kit/generator/resource_list_generator.rb +0 -59
- data/lib/davinci_pas_test_kit/generator/templates/group.rb.erb +0 -136
- data/lib/davinci_pas_test_kit/generator/templates/operation.rb.erb +0 -65
- data/lib/davinci_pas_test_kit/generator/templates/resource_list.rb.erb +0 -13
- data/lib/davinci_pas_test_kit/generator/templates/validation.rb.erb +0 -99
- data/lib/davinci_pas_test_kit/generator/validation_test_generator.rb +0 -172
- data/lib/davinci_pas_test_kit/generator/value_extractor.rb +0 -51
- data/lib/davinci_pas_test_kit/must_support_test.rb +0 -71
- data/lib/davinci_pas_test_kit/pas_subscription_verification.rb +0 -30
- data/lib/davinci_pas_test_kit/tags.rb +0 -17
- data/lib/davinci_pas_test_kit/user_input_response.rb +0 -35
- data/lib/davinci_pas_test_kit/validation_test.rb +0 -57
- /data/lib/davinci_pas_test_kit/{certs → client/certs}/InfernoCA.key +0 -0
- /data/lib/davinci_pas_test_kit/{certs → client/certs}/InfernoCA.pem +0 -0
- /data/lib/davinci_pas_test_kit/{certs → client/certs}/TestKit.pem +0 -0
- /data/lib/davinci_pas_test_kit/{certs → client/certs}/TestKitPrivateKey.key +0 -0
- /data/lib/davinci_pas_test_kit/{descriptions.rb → client/client_input_descriptions.rb} +0 -0
- /data/lib/davinci_pas_test_kit/{custom_groups → client}/v2.0.1/pas_client_workflows_group.rb +0 -0
- /data/lib/davinci_pas_test_kit/{custom_groups → server}/v2.0.1/error_tests/nonconformant_pas_bundle.json +0 -0
data/lib/davinci_pas_test_kit/{pas_bundle_validation.rb → cross_suite/pas_bundle_validation.rb}
RENAMED
|
@@ -1,32 +1,95 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require_relative '../parameters_helper'
|
|
3
4
|
require_relative 'validation_test'
|
|
5
|
+
require_relative 'pas_constants'
|
|
4
6
|
|
|
5
7
|
module DaVinciPASTestKit
|
|
6
8
|
module PasBundleValidation
|
|
7
9
|
include DaVinciPASTestKit::ValidationTest
|
|
10
|
+
include ParametersHelper
|
|
11
|
+
|
|
12
|
+
US_CORE_VERSION = '6.1.0'
|
|
13
|
+
US_CORE_PROFILE_BASE = 'http://hl7.org/fhir/us/core/StructureDefinition'
|
|
14
|
+
BASE_R4_PROFILE = :base_r4
|
|
15
|
+
CLAIM_ENCOUNTER_EXTENSION_URL = 'http://hl7.org/fhir/5.0/StructureDefinition/extension-Claim.encounter'
|
|
16
|
+
LOINC_SYSTEM = 'http://loinc.org'
|
|
17
|
+
TERMINOLOGY_CONDITION_CATEGORY_SYSTEM = 'http://terminology.hl7.org/CodeSystem/condition-category'
|
|
18
|
+
OBSERVATION_CATEGORY_SYSTEM = 'http://terminology.hl7.org/CodeSystem/observation-category'
|
|
19
|
+
DIAGNOSTIC_REPORT_CATEGORY_SYSTEM = 'http://terminology.hl7.org/CodeSystem/v2-0074'
|
|
20
|
+
|
|
21
|
+
US_CORE_SINGLE_PROFILE_IDS_BY_RESOURCE = {
|
|
22
|
+
'AllergyIntolerance' => 'us-core-allergyintolerance',
|
|
23
|
+
'CarePlan' => 'us-core-careplan',
|
|
24
|
+
'CareTeam' => 'us-core-careteam',
|
|
25
|
+
'Coverage' => 'us-core-coverage',
|
|
26
|
+
'Device' => 'us-core-implantable-device',
|
|
27
|
+
'DocumentReference' => 'us-core-documentreference',
|
|
28
|
+
'Encounter' => 'us-core-encounter',
|
|
29
|
+
'Goal' => 'us-core-goal',
|
|
30
|
+
'Immunization' => 'us-core-immunization',
|
|
31
|
+
'Location' => 'us-core-location',
|
|
32
|
+
'Medication' => 'us-core-medication',
|
|
33
|
+
'MedicationDispense' => 'us-core-medicationdispense',
|
|
34
|
+
'MedicationRequest' => 'us-core-medicationrequest',
|
|
35
|
+
'Organization' => 'us-core-organization',
|
|
36
|
+
'Patient' => 'us-core-patient',
|
|
37
|
+
'Practitioner' => 'us-core-practitioner',
|
|
38
|
+
'PractitionerRole' => 'us-core-practitionerrole',
|
|
39
|
+
'Procedure' => 'us-core-procedure',
|
|
40
|
+
'Provenance' => 'us-core-provenance',
|
|
41
|
+
'QuestionnaireResponse' => 'us-core-questionnaireresponse',
|
|
42
|
+
'RelatedPerson' => 'us-core-relatedperson',
|
|
43
|
+
'ServiceRequest' => 'us-core-servicerequest',
|
|
44
|
+
'Specimen' => 'us-core-specimen'
|
|
45
|
+
}.freeze
|
|
46
|
+
|
|
47
|
+
US_CORE_CONDITION_ENCOUNTER_DIAGNOSIS_PROFILE_ID = 'us-core-condition-encounter-diagnosis'
|
|
48
|
+
US_CORE_CONDITION_PROBLEMS_HEALTH_CONCERNS_PROFILE_ID = 'us-core-condition-problems-health-concerns'
|
|
49
|
+
US_CORE_DIAGNOSTIC_REPORT_LAB_PROFILE_ID = 'us-core-diagnosticreport-lab'
|
|
50
|
+
US_CORE_DIAGNOSTIC_REPORT_NOTE_PROFILE_ID = 'us-core-diagnosticreport-note'
|
|
51
|
+
US_CORE_OBSERVATION_CLINICAL_RESULT_PROFILE_ID = 'us-core-observation-clinical-result'
|
|
52
|
+
US_CORE_OBSERVATION_LAB_PROFILE_ID = 'us-core-observation-lab'
|
|
53
|
+
US_CORE_OBSERVATION_SCREENING_ASSESSMENT_PROFILE_ID = 'us-core-observation-screening-assessment'
|
|
54
|
+
US_CORE_SIMPLE_OBSERVATION_PROFILE_ID = 'us-core-simple-observation'
|
|
55
|
+
US_CORE_SMOKING_STATUS_PROFILE_ID = 'us-core-smokingstatus'
|
|
56
|
+
US_CORE_VITAL_SIGNS_PROFILE_ID = 'us-core-vital-signs'
|
|
57
|
+
|
|
58
|
+
US_CORE_OBSERVATION_CODE_PROFILE_IDS = {
|
|
59
|
+
'11341-5' => 'us-core-observation-occupation',
|
|
60
|
+
'86645-9' => 'us-core-observation-pregnancyintent',
|
|
61
|
+
'82810-3' => 'us-core-observation-pregnancystatus',
|
|
62
|
+
'76690-7' => 'us-core-observation-sexual-orientation',
|
|
63
|
+
'8289-1' => 'head-occipital-frontal-circumference-percentile',
|
|
64
|
+
'59576-9' => 'pediatric-bmi-for-age',
|
|
65
|
+
'77606-2' => 'pediatric-weight-for-height',
|
|
66
|
+
'85354-9' => 'us-core-blood-pressure',
|
|
67
|
+
'39156-5' => 'us-core-bmi',
|
|
68
|
+
'8302-2' => 'us-core-body-height',
|
|
69
|
+
'8310-5' => 'us-core-body-temperature',
|
|
70
|
+
'29463-7' => 'us-core-body-weight',
|
|
71
|
+
'9843-4' => 'us-core-head-circumference',
|
|
72
|
+
'8867-4' => 'us-core-heart-rate',
|
|
73
|
+
'59408-5' => 'us-core-pulse-oximetry',
|
|
74
|
+
'2708-6' => 'us-core-pulse-oximetry',
|
|
75
|
+
'9279-1' => 'us-core-respiratory-rate',
|
|
76
|
+
'72166-2' => 'us-core-smokingstatus'
|
|
77
|
+
}.freeze
|
|
8
78
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
CLAIM_INQUIRY_PROFILE = 'http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-claim-inquiry'
|
|
12
|
-
CLAIM_INQUIRY_RESPONSE_PROFILE = 'http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-claiminquiryresponse'
|
|
13
|
-
|
|
14
|
-
def all_scratch_resources
|
|
15
|
-
scratch_resources[:all] ||= []
|
|
79
|
+
def validation_error_messages
|
|
80
|
+
@validation_error_messages ||= []
|
|
16
81
|
end
|
|
17
82
|
|
|
18
|
-
def
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
83
|
+
def perform_bundle_validation(bundle, operation, type, ig_version)
|
|
84
|
+
target_profile = PASConstants.bundle_profile_url_for_operation_and_type(operation, type)
|
|
85
|
+
request_type = "#{operation}_#{type}"
|
|
86
|
+
if type == 'request'
|
|
87
|
+
perform_request_validation(bundle, target_profile, ig_version.delete_prefix('v'), request_type)
|
|
88
|
+
else
|
|
89
|
+
perform_response_validation(bundle, target_profile, ig_version.delete_prefix('v'), request_type)
|
|
23
90
|
end
|
|
24
91
|
end
|
|
25
92
|
|
|
26
|
-
def validation_error_messages
|
|
27
|
-
@validation_error_messages ||= []
|
|
28
|
-
end
|
|
29
|
-
|
|
30
93
|
def perform_request_validation(bundle, profile_url, version, request_type)
|
|
31
94
|
validate_pa_request_payload_structure(bundle, request_type)
|
|
32
95
|
validate_resources_conformance_against_profile(bundle, profile_url, version, request_type)
|
|
@@ -39,20 +102,44 @@ module DaVinciPASTestKit
|
|
|
39
102
|
|
|
40
103
|
def validate_pas_bundle_json(json, profile_url, version, request_type, bundle_type, skips: false, message: '')
|
|
41
104
|
assert_valid_json(json)
|
|
42
|
-
|
|
43
|
-
assert
|
|
44
|
-
assert_resource_type(:bundle, resource: bundle)
|
|
105
|
+
resource = FHIR.from_contents(json)
|
|
106
|
+
assert resource.present?, 'Not a FHIR resource'
|
|
45
107
|
|
|
46
|
-
|
|
47
|
-
|
|
108
|
+
# For v2.2.1 inquire responses, expect Parameters resource
|
|
109
|
+
if version == '2.2.1' && request_type == 'inquire' && bundle_type == 'response_bundle'
|
|
110
|
+
if resource.resourceType == 'Parameters'
|
|
111
|
+
# Extract and validate each Bundle in the Parameters
|
|
112
|
+
bundles = extract_bundles_from_pas_inquiry_response_parameters(resource)
|
|
113
|
+
|
|
114
|
+
bundles.each do |bundle|
|
|
115
|
+
perform_response_validation(bundle, profile_url, version, request_type)
|
|
116
|
+
end
|
|
117
|
+
elsif resource.is_a?(FHIR::Bundle)
|
|
118
|
+
# Bundle received instead of Parameters - validate it but log an error
|
|
119
|
+
validation_error_messages << 'Expected Parameters resource for v2.2.1 inquire response, but received ' \
|
|
120
|
+
'Bundle. The response Bundle should be wrapped in a ' \
|
|
121
|
+
'Parameters resource with a return parameter.'
|
|
122
|
+
perform_response_validation(resource, profile_url, version, request_type)
|
|
123
|
+
else
|
|
124
|
+
assert false,
|
|
125
|
+
"Expected Parameters resource for v2.2.1 inquire response, but received #{resource.resourceType}"
|
|
126
|
+
end
|
|
48
127
|
else
|
|
49
|
-
|
|
128
|
+
# For v2.0.1 or non-inquire operations, expect Bundle resource
|
|
129
|
+
assert_resource_type(:bundle, resource: resource)
|
|
130
|
+
bundle = resource
|
|
131
|
+
|
|
132
|
+
if bundle_type == 'request_bundle'
|
|
133
|
+
perform_request_validation(bundle, profile_url, version, request_type)
|
|
134
|
+
else
|
|
135
|
+
perform_response_validation(bundle, profile_url, version, request_type)
|
|
136
|
+
end
|
|
50
137
|
end
|
|
51
138
|
|
|
52
139
|
validation_error_messages.each do |msg|
|
|
53
140
|
messages << { type: 'error', message: msg }
|
|
54
141
|
end
|
|
55
|
-
msg = 'Bundle
|
|
142
|
+
msg = 'Bundle and/or entry resources are not conformant. Check messages for issues found.'
|
|
56
143
|
assert validation_error_messages.blank?, msg
|
|
57
144
|
rescue Inferno::Exceptions::AssertionException => e
|
|
58
145
|
msg = "#{message} #{e.message}".strip
|
|
@@ -127,7 +214,7 @@ module DaVinciPASTestKit
|
|
|
127
214
|
# a given combination of content. Resources echoed back from the request are validated
|
|
128
215
|
# to ensure the same fullUrl and resource identifiers as in the
|
|
129
216
|
# request are used.
|
|
130
|
-
def validate_pa_response_body_structure(pa_response_bundle,
|
|
217
|
+
def validate_pa_response_body_structure(pa_response_bundle, _pa_request_bundle)
|
|
131
218
|
first_entry = pa_response_bundle.entry.first.resource
|
|
132
219
|
unless first_entry.is_a?(FHIR::ClaimResponse)
|
|
133
220
|
validation_error_messages <<
|
|
@@ -166,6 +253,7 @@ module DaVinciPASTestKit
|
|
|
166
253
|
# The request/response bundle and includes resources are validated against their
|
|
167
254
|
# respective profile.
|
|
168
255
|
def validate_resources_conformance_against_profile(bundle, profile_url, version, request_type)
|
|
256
|
+
reset_bundle_profile_inference_state
|
|
169
257
|
add_resource_target_profile_to_map('bundle', bundle, profile_url)
|
|
170
258
|
|
|
171
259
|
bundle_entry = bundle.entry
|
|
@@ -175,12 +263,18 @@ module DaVinciPASTestKit
|
|
|
175
263
|
end
|
|
176
264
|
|
|
177
265
|
if root_entry.present?
|
|
178
|
-
root_resource_profile_url =
|
|
266
|
+
root_resource_profile_url = if %w[submit submit_request].include?(request_type) &&
|
|
267
|
+
root_entry.resource.resourceType == 'Claim'
|
|
268
|
+
determine_claim_submit_profile_url(version, root_entry.resource)
|
|
269
|
+
else
|
|
270
|
+
find_profile_url(request_type)[root_entry.resource.resourceType]
|
|
271
|
+
end
|
|
179
272
|
|
|
180
273
|
add_resource_target_profile_to_map(root_entry.fullUrl, root_entry.resource, root_resource_profile_url)
|
|
181
274
|
extract_profiles_to_validate_each_entry(bundle_entry, root_entry, root_resource_profile_url, version)
|
|
182
275
|
end
|
|
183
276
|
|
|
277
|
+
add_us_core_profiles_to_unprofiled_entries(bundle_entry, version)
|
|
184
278
|
validate_bundle_entries_against_profiles(version)
|
|
185
279
|
end
|
|
186
280
|
|
|
@@ -209,18 +303,176 @@ module DaVinciPASTestKit
|
|
|
209
303
|
# and collects error messages for non-conformant entries. Asserts that there are no validation errors.
|
|
210
304
|
# @param version [String] The version of the IG.
|
|
211
305
|
def validate_bundle_entries_against_profiles(version)
|
|
212
|
-
bundle_resources_target_profile_map.
|
|
306
|
+
bundle_resources_target_profile_map.each do |key, item|
|
|
213
307
|
resource = item[:resource]
|
|
214
308
|
base_profile = FHIR::Definitions.resource_definition(resource.resourceType).url
|
|
309
|
+
|
|
215
310
|
success_profile = item[:profile_urls].find do |url|
|
|
216
|
-
|
|
217
|
-
|
|
311
|
+
if key == 'bundle'
|
|
312
|
+
profile_to_validate = profile_url_for_validation(url, base_profile, version)
|
|
313
|
+
bundle_profile_valid?(resource, profile_to_validate)
|
|
314
|
+
elsif url == BASE_R4_PROFILE
|
|
315
|
+
resource_is_valid?(resource:)
|
|
316
|
+
else
|
|
317
|
+
profile_to_validate = profile_url_for_validation(url, base_profile, version)
|
|
318
|
+
resource_is_valid?(resource:, profile_url: profile_to_validate)
|
|
319
|
+
end
|
|
218
320
|
end
|
|
219
321
|
|
|
220
322
|
validation_error_messages << generate_non_conformance_message(item) unless success_profile
|
|
221
323
|
end
|
|
222
324
|
end
|
|
223
325
|
|
|
326
|
+
def profile_url_for_validation(url, base_profile, version)
|
|
327
|
+
url = url.to_s
|
|
328
|
+
return url if url.include?('|') || profile_url_without_version(url) == base_profile
|
|
329
|
+
return "#{url}|#{US_CORE_VERSION}" if us_core_profile_url?(url)
|
|
330
|
+
|
|
331
|
+
"#{url}|#{version}"
|
|
332
|
+
end
|
|
333
|
+
|
|
334
|
+
def reset_bundle_profile_inference_state
|
|
335
|
+
bundle_resources_target_profile_map.clear
|
|
336
|
+
@bundle_entry_map = nil
|
|
337
|
+
end
|
|
338
|
+
|
|
339
|
+
def add_us_core_profiles_to_unprofiled_entries(bundle_entry, version)
|
|
340
|
+
return unless us_core_profile_fallback_enabled?(version)
|
|
341
|
+
|
|
342
|
+
bundle_entry.each do |entry|
|
|
343
|
+
resource = entry.resource
|
|
344
|
+
next if resource.blank?
|
|
345
|
+
|
|
346
|
+
resource_full_url = resource_full_url_for_entry(entry)
|
|
347
|
+
next if bundle_resources_target_profile_map[resource_full_url]&.dig(:profile_urls).present?
|
|
348
|
+
|
|
349
|
+
profile_urls = us_core_profile_urls_for_resource(resource)
|
|
350
|
+
profile_urls = [BASE_R4_PROFILE] if profile_urls.blank?
|
|
351
|
+
|
|
352
|
+
profile_urls.each do |profile_url|
|
|
353
|
+
add_resource_target_profile_to_map(resource_full_url, resource, profile_url)
|
|
354
|
+
end
|
|
355
|
+
end
|
|
356
|
+
end
|
|
357
|
+
|
|
358
|
+
def resource_full_url_for_entry(entry)
|
|
359
|
+
resource = entry.resource
|
|
360
|
+
|
|
361
|
+
entry.fullUrl.presence || "#{resource.resourceType}/#{resource.id}"
|
|
362
|
+
end
|
|
363
|
+
|
|
364
|
+
def us_core_profile_fallback_enabled?(version)
|
|
365
|
+
version.to_s.delete_prefix('v').match?(/\A2\.2(\.|\z)/)
|
|
366
|
+
end
|
|
367
|
+
|
|
368
|
+
def us_core_profile_urls_for_resource(resource)
|
|
369
|
+
profile_ids =
|
|
370
|
+
case resource.resourceType
|
|
371
|
+
when 'Condition'
|
|
372
|
+
us_core_condition_profile_ids(resource)
|
|
373
|
+
when 'DiagnosticReport'
|
|
374
|
+
us_core_diagnostic_report_profile_ids(resource)
|
|
375
|
+
when 'Observation'
|
|
376
|
+
us_core_observation_profile_ids(resource)
|
|
377
|
+
else
|
|
378
|
+
Array(US_CORE_SINGLE_PROFILE_IDS_BY_RESOURCE[resource.resourceType])
|
|
379
|
+
end
|
|
380
|
+
|
|
381
|
+
us_core_profile_urls(profile_ids)
|
|
382
|
+
end
|
|
383
|
+
|
|
384
|
+
def us_core_condition_profile_ids(resource)
|
|
385
|
+
if category_code_present?(resource, 'encounter-diagnosis', system: TERMINOLOGY_CONDITION_CATEGORY_SYSTEM)
|
|
386
|
+
[US_CORE_CONDITION_ENCOUNTER_DIAGNOSIS_PROFILE_ID]
|
|
387
|
+
else
|
|
388
|
+
[US_CORE_CONDITION_PROBLEMS_HEALTH_CONCERNS_PROFILE_ID]
|
|
389
|
+
end
|
|
390
|
+
end
|
|
391
|
+
|
|
392
|
+
def us_core_diagnostic_report_profile_ids(resource)
|
|
393
|
+
if category_code_present?(resource, 'LAB', system: DIAGNOSTIC_REPORT_CATEGORY_SYSTEM)
|
|
394
|
+
[US_CORE_DIAGNOSTIC_REPORT_LAB_PROFILE_ID]
|
|
395
|
+
else
|
|
396
|
+
[US_CORE_DIAGNOSTIC_REPORT_NOTE_PROFILE_ID]
|
|
397
|
+
end
|
|
398
|
+
end
|
|
399
|
+
|
|
400
|
+
def us_core_observation_profile_ids(resource)
|
|
401
|
+
code_profile_id = US_CORE_OBSERVATION_CODE_PROFILE_IDS.find do |code, _profile_id|
|
|
402
|
+
codeable_concept_has_code?(resource.code, code, system: LOINC_SYSTEM)
|
|
403
|
+
end&.last
|
|
404
|
+
return [code_profile_id] if code_profile_id.present?
|
|
405
|
+
|
|
406
|
+
profile_ids = []
|
|
407
|
+
profile_ids << US_CORE_SMOKING_STATUS_PROFILE_ID if category_code_present?(resource, 'social-history',
|
|
408
|
+
system: OBSERVATION_CATEGORY_SYSTEM)
|
|
409
|
+
profile_ids << US_CORE_VITAL_SIGNS_PROFILE_ID if category_code_present?(resource, 'vital-signs',
|
|
410
|
+
system: OBSERVATION_CATEGORY_SYSTEM)
|
|
411
|
+
if category_code_present?(resource, 'survey', system: OBSERVATION_CATEGORY_SYSTEM)
|
|
412
|
+
profile_ids << US_CORE_OBSERVATION_SCREENING_ASSESSMENT_PROFILE_ID
|
|
413
|
+
end
|
|
414
|
+
# Keep candidate profiles most-specific first because validation stops at the first conformant profile.
|
|
415
|
+
profile_ids << if category_code_present?(resource, 'laboratory', system: OBSERVATION_CATEGORY_SYSTEM)
|
|
416
|
+
US_CORE_OBSERVATION_LAB_PROFILE_ID
|
|
417
|
+
else
|
|
418
|
+
US_CORE_OBSERVATION_CLINICAL_RESULT_PROFILE_ID
|
|
419
|
+
end
|
|
420
|
+
profile_ids << US_CORE_SIMPLE_OBSERVATION_PROFILE_ID
|
|
421
|
+
profile_ids.uniq
|
|
422
|
+
end
|
|
423
|
+
|
|
424
|
+
def us_core_profile_urls(profile_ids)
|
|
425
|
+
Array(profile_ids).map { |profile_id| "#{US_CORE_PROFILE_BASE}/#{profile_id}|#{US_CORE_VERSION}" }
|
|
426
|
+
end
|
|
427
|
+
|
|
428
|
+
def profile_url_without_version(url)
|
|
429
|
+
url.to_s.split('|', 2).first
|
|
430
|
+
end
|
|
431
|
+
|
|
432
|
+
def us_core_profile_url?(url)
|
|
433
|
+
profile_url_without_version(url).start_with?("#{US_CORE_PROFILE_BASE}/")
|
|
434
|
+
end
|
|
435
|
+
|
|
436
|
+
def category_code_present?(resource, code, system:)
|
|
437
|
+
codeable_concept_has_code?(resource.category, code, system:)
|
|
438
|
+
end
|
|
439
|
+
|
|
440
|
+
def codeable_concept_has_code?(codeable_concepts, code, system:)
|
|
441
|
+
systems = Array(system).compact
|
|
442
|
+
Array(codeable_concepts).compact.any? do |codeable_concept|
|
|
443
|
+
Array(codeable_concept&.coding).compact.any? do |coding|
|
|
444
|
+
coding.code == code && systems.include?(coding.system)
|
|
445
|
+
end
|
|
446
|
+
end
|
|
447
|
+
end
|
|
448
|
+
|
|
449
|
+
# Validates a Bundle resource against a profile, filtering out entry-resource-level issues
|
|
450
|
+
# that are covered by individual resource validation to avoid duplicate messages.
|
|
451
|
+
# @param bundle [FHIR::Bundle] The Bundle resource to validate.
|
|
452
|
+
# @param profile_url [String] The profile URL (with version) to validate against.
|
|
453
|
+
# @return [Boolean] true if no unfiltered errors remain after removing entry-resource issues.
|
|
454
|
+
def bundle_profile_valid?(bundle, profile_url)
|
|
455
|
+
response_details = []
|
|
456
|
+
resource_is_valid?(resource: bundle, profile_url:,
|
|
457
|
+
add_messages_to_runnable: false,
|
|
458
|
+
validator_response_details: response_details)
|
|
459
|
+
bundle_level_issues = reject_entry_resource_issues(response_details)
|
|
460
|
+
bundle_level_issues.each { |issue| messages << { type: issue.severity, message: issue.message } }
|
|
461
|
+
bundle_level_issues.none? { |issue| issue.severity == 'error' }
|
|
462
|
+
end
|
|
463
|
+
|
|
464
|
+
# Rejects validator issues that are already filtered or are located at/below
|
|
465
|
+
# Bundle.entry[N].resource, since those are validated individually per resource.
|
|
466
|
+
# @param issues [Array<ValidatorIssue>] Raw issues from the validator.
|
|
467
|
+
# @return [Array<ValidatorIssue>] Issues relevant only to the Bundle structure itself.
|
|
468
|
+
#
|
|
469
|
+
# Entry resources that receive direct PAS or US Core target profiles are validated individually after this filter.
|
|
470
|
+
def reject_entry_resource_issues(issues)
|
|
471
|
+
issues.reject do |issue|
|
|
472
|
+
issue.filtered || issue.location&.match?(/\ABundle\.entry\[\d+\]\.resource/)
|
|
473
|
+
end
|
|
474
|
+
end
|
|
475
|
+
|
|
224
476
|
def generate_non_conformance_message(item)
|
|
225
477
|
"#{item[:resource].resourceType}/#{item[:resource].id} is not conformant to any of the " \
|
|
226
478
|
"target profiles: #{item[:profile_urls]}."
|
|
@@ -236,14 +488,18 @@ module DaVinciPASTestKit
|
|
|
236
488
|
return if current_entry.blank?
|
|
237
489
|
|
|
238
490
|
# NOTE: the IG does not have the metadata for us-core profiles.
|
|
239
|
-
metadata = metadata_map("v#{version}")[current_entry_profile_url]
|
|
491
|
+
metadata = metadata_map("v#{version}")[profile_url_without_version(current_entry_profile_url)]
|
|
240
492
|
return if metadata.blank?
|
|
241
493
|
|
|
242
494
|
bundle_map = bundle_entry_map(bundle_entry)
|
|
243
|
-
reference_elements = metadata.references
|
|
495
|
+
reference_elements = metadata.references.dup
|
|
244
496
|
|
|
245
497
|
# Special handling for Claim submit profile
|
|
246
|
-
|
|
498
|
+
claim_submit_profile_urls = [
|
|
499
|
+
PASConstants::CLAIM_PROFILE,
|
|
500
|
+
PASConstants::CLAIM_PROFILE_FIRST_SUBMIT
|
|
501
|
+
]
|
|
502
|
+
if claim_submit_profile_urls.include?(current_entry_profile_url)
|
|
247
503
|
handle_claim_profile(reference_elements,
|
|
248
504
|
current_entry_profile_url)
|
|
249
505
|
end
|
|
@@ -259,7 +515,11 @@ module DaVinciPASTestKit
|
|
|
259
515
|
# @param reference_elements [Array] The array of reference elements to be updated.
|
|
260
516
|
# @param current_entry_profile_url [String] The profile URL of the current entry being processed.
|
|
261
517
|
def handle_claim_profile(reference_elements, current_entry_profile_url)
|
|
262
|
-
|
|
518
|
+
claim_submit_profile_urls = [
|
|
519
|
+
PASConstants::CLAIM_PROFILE,
|
|
520
|
+
PASConstants::CLAIM_PROFILE_FIRST_SUBMIT
|
|
521
|
+
]
|
|
522
|
+
return unless claim_submit_profile_urls.include?(current_entry_profile_url)
|
|
263
523
|
|
|
264
524
|
claim_ref_element = {
|
|
265
525
|
path: 'Claim.item.extension.value',
|
|
@@ -271,7 +531,16 @@ module DaVinciPASTestKit
|
|
|
271
531
|
]
|
|
272
532
|
}
|
|
273
533
|
|
|
534
|
+
# This temporary traversal handling may be replaced later by shared metadata-driven navigation logic.
|
|
535
|
+
claim_encounter_ref_element = {
|
|
536
|
+
path: "Claim.extension.where(url = '#{CLAIM_ENCOUNTER_EXTENSION_URL}').value",
|
|
537
|
+
profiles: [
|
|
538
|
+
'http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-encounter'
|
|
539
|
+
]
|
|
540
|
+
}
|
|
541
|
+
|
|
274
542
|
reference_elements << claim_ref_element
|
|
543
|
+
reference_elements << claim_encounter_ref_element
|
|
275
544
|
end
|
|
276
545
|
|
|
277
546
|
# Processes a given reference element definition from a FHIR bundle entry.
|
|
@@ -311,7 +580,7 @@ module DaVinciPASTestKit
|
|
|
311
580
|
|
|
312
581
|
reference_element[:profiles].each do |profile_url|
|
|
313
582
|
# NOTE: the IG does not have the metadata for us-core profiles.
|
|
314
|
-
target_metadata = metadata_map("v#{version}")[profile_url]
|
|
583
|
+
target_metadata = metadata_map("v#{version}")[profile_url_without_version(profile_url)]
|
|
315
584
|
resource_type = instance.resource.resourceType
|
|
316
585
|
next unless target_metadata&.resource == resource_type || profile_url.include?(resource_type)
|
|
317
586
|
|
|
@@ -356,16 +625,18 @@ module DaVinciPASTestKit
|
|
|
356
625
|
|
|
357
626
|
# Mapping profile url to metadata
|
|
358
627
|
def metadata_map(version)
|
|
359
|
-
@metadata ||=
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
628
|
+
@metadata ||= {}
|
|
629
|
+
@metadata[version] ||= YAML.load_file(File.join(__dir__, "generated/#{version}/metadata.yml"),
|
|
630
|
+
aliases: true)
|
|
631
|
+
@metadata_map ||= {}
|
|
632
|
+
@metadata_map[version] ||= @metadata[version][:profiles].to_h do |profile_metadata|
|
|
633
|
+
[profile_metadata[:profile_url], Generator::ProfileMetadata.new(profile_metadata)]
|
|
363
634
|
end
|
|
364
635
|
end
|
|
365
636
|
|
|
366
637
|
def bundle_entry_map(bundle_entry)
|
|
367
|
-
@bundle_entry_map ||= bundle_entry.
|
|
368
|
-
|
|
638
|
+
@bundle_entry_map ||= bundle_entry.to_h do |entry|
|
|
639
|
+
[entry.fullUrl, entry]
|
|
369
640
|
end
|
|
370
641
|
end
|
|
371
642
|
|
|
@@ -407,11 +678,39 @@ module DaVinciPASTestKit
|
|
|
407
678
|
# Resource Types to validate in request/ response bundle
|
|
408
679
|
def find_profile_url(request_type)
|
|
409
680
|
{
|
|
410
|
-
'Claim' => request_type
|
|
411
|
-
|
|
681
|
+
'Claim' => if request_type.start_with?('submit')
|
|
682
|
+
PASConstants::CLAIM_PROFILE
|
|
683
|
+
else
|
|
684
|
+
PASConstants::CLAIM_INQUIRY_PROFILE
|
|
685
|
+
end,
|
|
686
|
+
'ClaimResponse' => if %w[submit submit_response].include?(request_type)
|
|
687
|
+
PASConstants::CLAIM_RESPONSE_PROFILE
|
|
688
|
+
else
|
|
689
|
+
PASConstants::CLAIM_INQUIRY_RESPONSE_PROFILE
|
|
690
|
+
end
|
|
412
691
|
}
|
|
413
692
|
end
|
|
414
693
|
|
|
694
|
+
# Determines the target profile URL for a Claim resource in a submit request bundle.
|
|
695
|
+
#
|
|
696
|
+
# In v2.2.1, profile-pas-request-bundle permits either profile-claim or profile-claim-update.
|
|
697
|
+
# The structural discriminator is Claim.related: profile-claim-update requires it (must-support)
|
|
698
|
+
# while profile-claim disallows it (max: 0). For all other versions, profile-claim-update is
|
|
699
|
+
# used unconditionally.
|
|
700
|
+
#
|
|
701
|
+
# @param version [String] The IG version (e.g. '2.2.1').
|
|
702
|
+
# @param claim [FHIR::Claim] The Claim resource to inspect.
|
|
703
|
+
# @return [String] The profile URL to validate against.
|
|
704
|
+
def determine_claim_submit_profile_url(version, claim)
|
|
705
|
+
return PASConstants::CLAIM_PROFILE unless version == '2.2.1'
|
|
706
|
+
|
|
707
|
+
if claim.related.blank?
|
|
708
|
+
PASConstants::CLAIM_PROFILE_FIRST_SUBMIT
|
|
709
|
+
else
|
|
710
|
+
PASConstants::CLAIM_PROFILE
|
|
711
|
+
end
|
|
712
|
+
end
|
|
713
|
+
|
|
415
714
|
# Checks the following requirement:
|
|
416
715
|
# The Claim.supportingInfo.sequence for each entry SHALL be unique within the Claim.
|
|
417
716
|
#
|
|
@@ -456,13 +755,17 @@ module DaVinciPASTestKit
|
|
|
456
755
|
# @param target_resource [FHIR::Model] The FHIR resource to traverse and validate.
|
|
457
756
|
# @param base_url [String] The server base url.
|
|
458
757
|
# @param resources_to_match [Array<FHIR:Bundle:Entry] The list of FHIR bundle entries to match references against.
|
|
459
|
-
|
|
758
|
+
# @param skip_claim_related [Boolean] When true, a Claim's `related` element is not traversed. This is set
|
|
759
|
+
# for any Claim reached by following a reference (i.e. a non-primary Claim in a Claim Update chain), whose
|
|
760
|
+
# own Claim.related.claim (the grandparent) is deliberately omitted from the Bundle per spec-65/66. The
|
|
761
|
+
# primary Claim passed in by the caller keeps `skip_claim_related: false`, so its parent reference - and the
|
|
762
|
+
# parent's own referenced resources - are still checked.
|
|
763
|
+
def check_presence_of_referenced_resources(target_resource, base_url, resources_to_match,
|
|
764
|
+
skip_claim_related: false)
|
|
460
765
|
return if target_resource.blank?
|
|
461
766
|
|
|
462
767
|
if target_resource.is_a?(FHIR::Reference) && target_resource.reference.present?
|
|
463
768
|
ref = target_resource.reference
|
|
464
|
-
return if ref.blank?
|
|
465
|
-
|
|
466
769
|
absolute_ref = absolute_url(ref, base_url)
|
|
467
770
|
matching_resources = resources_to_match.find_all { |res| res.fullUrl == absolute_ref }
|
|
468
771
|
|
|
@@ -472,20 +775,49 @@ module DaVinciPASTestKit
|
|
|
472
775
|
end
|
|
473
776
|
|
|
474
777
|
if matching_resources.length.positive?
|
|
475
|
-
|
|
778
|
+
# A resource reached by following a reference is an included resource, not the primary Claim
|
|
779
|
+
# being validated; if it is itself a Claim Update, its referenced grandparent Claim is omitted.
|
|
780
|
+
check_presence_of_referenced_resources(matching_resources.first.resource, base_url, resources_to_match,
|
|
781
|
+
skip_claim_related: true)
|
|
476
782
|
end
|
|
477
783
|
else
|
|
478
784
|
target_resource.source_hash.each_key do |attr|
|
|
785
|
+
next if claim_response_request_attr?(target_resource, attr)
|
|
786
|
+
next if skip_claim_related && claim_related_attr?(target_resource, attr)
|
|
787
|
+
|
|
479
788
|
value = target_resource.send(attr.to_sym)
|
|
480
789
|
if value.is_a?(FHIR::Model)
|
|
481
|
-
check_presence_of_referenced_resources(value, base_url, resources_to_match)
|
|
482
|
-
elsif value.is_a?(Array) && value.all?
|
|
483
|
-
value.each
|
|
790
|
+
check_presence_of_referenced_resources(value, base_url, resources_to_match, skip_claim_related:)
|
|
791
|
+
elsif value.is_a?(Array) && value.all?(FHIR::Model)
|
|
792
|
+
value.each do |elmt|
|
|
793
|
+
check_presence_of_referenced_resources(elmt, base_url, resources_to_match, skip_claim_related:)
|
|
794
|
+
end
|
|
484
795
|
end
|
|
485
796
|
end
|
|
486
797
|
end
|
|
487
798
|
end
|
|
488
799
|
|
|
800
|
+
# ClaimResponse.request is a back-reference to the submitted Claim. The PAS IG response bundle
|
|
801
|
+
# profile (profile-pas-response-bundle) has no required Claim entry slice, so the Claim need
|
|
802
|
+
# not be present in the response bundle. Skipping here matches the identical guard in
|
|
803
|
+
# ResponseGenerator#referenced_entities, which also skips ClaimResponse.request when
|
|
804
|
+
# building mock response bundles.
|
|
805
|
+
def claim_response_request_attr?(resource, attr)
|
|
806
|
+
attr.to_s == 'request' &&
|
|
807
|
+
resource.respond_to?(:resourceType) &&
|
|
808
|
+
resource.resourceType == 'ClaimResponse'
|
|
809
|
+
end
|
|
810
|
+
|
|
811
|
+
# Claim.related.claim points to the Claim being updated. For a non-primary Claim in a Claim Update
|
|
812
|
+
# chain (one reached by following a reference), that prior Claim is the grandparent, which spec-65/66
|
|
813
|
+
# require to be omitted from the Bundle. Used with the `skip_claim_related` flag so the generic
|
|
814
|
+
# reference-presence check does not flag the deliberately-omitted grandparent as missing.
|
|
815
|
+
def claim_related_attr?(resource, attr)
|
|
816
|
+
attr.to_s == 'related' &&
|
|
817
|
+
resource.respond_to?(:resourceType) &&
|
|
818
|
+
resource.resourceType == 'Claim'
|
|
819
|
+
end
|
|
820
|
+
|
|
489
821
|
# Extracts resources from a bundle while following "next" links.
|
|
490
822
|
#
|
|
491
823
|
# @param bundle [FHIR::Bundle] The initial FHIR bundle to extract resources from.
|
|
@@ -527,10 +859,7 @@ module DaVinciPASTestKit
|
|
|
527
859
|
# This method generates an error message when a referenced resource appears more than once
|
|
528
860
|
# in a FHIR bundle, which is not allowed.
|
|
529
861
|
def resource_shall_appear_once_message(absolute_ref, total_matches)
|
|
530
|
-
"
|
|
531
|
-
The referenced #{absolute_ref} resource
|
|
532
|
-
SHALL appear exactly once in the Bundle, but found #{total_matches}.
|
|
533
|
-
"
|
|
862
|
+
" The referenced #{absolute_ref} resource SHALL appear exactly once in the Bundle, but found #{total_matches}."
|
|
534
863
|
end
|
|
535
864
|
|
|
536
865
|
# Generates a message for a resource present in both the PA request and response bundles.
|
|
@@ -540,10 +869,8 @@ module DaVinciPASTestKit
|
|
|
540
869
|
# This method generates an error message when a resource appears in both the PA request
|
|
541
870
|
# and response bundles but does not have the same fullUrl or identifiers.
|
|
542
871
|
def resource_present_in_pa_request_and_response_msg(resource)
|
|
543
|
-
"
|
|
544
|
-
|
|
545
|
-
and the Response Bundle, but they do not have the same fullUrl or identifiers
|
|
546
|
-
"
|
|
872
|
+
"Resource #{resource.resourceType}/#{resource.id} is an entry in both the PA Request Bundle and the Response " \
|
|
873
|
+
'Bundle, but they do not have the same fullUrl or identifiers'
|
|
547
874
|
end
|
|
548
875
|
end
|
|
549
876
|
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
module DaVinciPASTestKit
|
|
2
|
+
module PASConstants
|
|
3
|
+
CLAIM_PROFILE = 'http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-claim-update'.freeze
|
|
4
|
+
CLAIM_PROFILE_FIRST_SUBMIT = 'http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-claim'.freeze
|
|
5
|
+
CLAIM_RESPONSE_PROFILE = 'http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-claimresponse'.freeze
|
|
6
|
+
CLAIM_INQUIRY_PROFILE = 'http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-claim-inquiry'.freeze
|
|
7
|
+
CLAIM_INQUIRY_RESPONSE_PROFILE = 'http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-claiminquiryresponse'.freeze
|
|
8
|
+
|
|
9
|
+
BUNDLE_PROFILES_FOR_OPERATION_TYPE = {
|
|
10
|
+
submit_request: 'http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-pas-request-bundle',
|
|
11
|
+
submit_response: 'http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-pas-response-bundle',
|
|
12
|
+
inquire_request: 'http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-pas-inquiry-request-bundle',
|
|
13
|
+
inquire_response: 'http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-pas-inquiry-response-bundle'
|
|
14
|
+
}.freeze
|
|
15
|
+
|
|
16
|
+
def self.bundle_profile_url_for_operation_and_type(operation, type)
|
|
17
|
+
BUNDLE_PROFILES_FOR_OPERATION_TYPE[:"#{operation}_#{type}"]
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def self.bundle_profile_name_for_operation_and_type(operation, type)
|
|
21
|
+
url = bundle_profile_url_for_operation_and_type(operation, type)
|
|
22
|
+
url.split('/profile-').last.titleize.gsub('Pas', 'PAS')
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
X12_ADJUDICATION_CODES = {
|
|
26
|
+
approval: 'A1',
|
|
27
|
+
denial: 'A3',
|
|
28
|
+
pended: 'A4'
|
|
29
|
+
}.freeze
|
|
30
|
+
end
|
|
31
|
+
end
|