davinci_crd_test_kit 0.12.2 → 0.14.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/inferno_crd_client_suite.json.erb +20 -14
- data/config/presets/inferno_crd_client_suite_prefetch_subset_v221.json.erb +125 -0
- data/config/presets/inferno_crd_client_suite_v221.json.erb +124 -0
- data/config/presets/inferno_crd_server_suite.json.erb +59 -2
- data/config/presets/inferno_crd_server_suite_v221.json.erb +94 -0
- data/config/presets/ri_crd_request_generator.json_v221.json.erb +13 -0
- data/config/presets/ri_crd_server.json.erb +19 -19
- data/lib/davinci_crd_test_kit/client/client_base_urls.rb +80 -0
- data/lib/davinci_crd_test_kit/{client_hook_request_validation.rb → client/client_hook_request_validation.rb} +1 -1
- data/lib/davinci_crd_test_kit/client/crd_client_options.rb +30 -0
- data/lib/davinci_crd_test_kit/client/endpoints/cds_services_discovery_handler.rb +34 -0
- data/lib/davinci_crd_test_kit/client/endpoints/custom_service_response.rb +342 -0
- data/lib/davinci_crd_test_kit/client/endpoints/gather_response_generation_data.rb +410 -0
- data/lib/davinci_crd_test_kit/client/endpoints/hook_request_endpoint.rb +233 -0
- data/lib/davinci_crd_test_kit/{mock_service_response.rb → client/endpoints/mock_service_response.rb} +165 -59
- data/lib/davinci_crd_test_kit/{card_responses → client/endpoints/mocked_card_responses}/companions_prerequisites.json +1 -0
- data/lib/davinci_crd_test_kit/{card_responses → client/endpoints/mocked_card_responses}/create_update_coverage_information.json +3 -2
- data/lib/davinci_crd_test_kit/{card_responses → client/endpoints/mocked_card_responses}/launch_smart_app.json +8 -1
- data/lib/davinci_crd_test_kit/{card_responses → client/endpoints/mocked_card_responses}/propose_alternate_request.json +1 -0
- data/lib/davinci_crd_test_kit/{card_responses → client/endpoints/mocked_card_responses}/request_form_completion.json +17 -16
- data/lib/davinci_crd_test_kit/client/multi_request_message_helper.rb +35 -0
- data/lib/davinci_crd_test_kit/client/tagged_request_load_helper.rb +38 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/api/client_fhir_api_create_test.rb +43 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/api/client_fhir_api_read_test.rb +43 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/api/client_fhir_api_search_test.rb +234 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/api/client_fhir_api_update_test.rb +43 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/api/client_fhir_api_validation_test.rb +63 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/auth/decode_auth_token_test.rb +65 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/auth/retrieve_jwks_test.rb +109 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/auth/token_header_test.rb +70 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/auth/token_payload_test.rb +85 -0
- data/lib/davinci_crd_test_kit/{routes/cds-services.json → client/v2.0.1/cds-services-v201.json} +1 -1
- data/lib/davinci_crd_test_kit/client/v2.0.1/client_appointment_book_group.rb +108 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/client_card_must_support_group.rb +31 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/client_encounter_discharge_group.rb +105 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/client_encounter_start_group.rb +105 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/client_fhir_api_group.rb +790 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/client_hooks_group.rb +74 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/client_order_dispatch_group.rb +111 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/client_order_select_group.rb +116 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/client_order_sign_group.rb +113 -0
- data/lib/davinci_crd_test_kit/{client_registration_group.rb → client/v2.0.1/client_registration_group.rb} +12 -8
- data/lib/davinci_crd_test_kit/client/v2.0.1/client_urls.rb +13 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/crd_client_suite.rb +134 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/invocation/appointment_book_receive_request_test.rb +129 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/invocation/encounter_discharge_receive_request_test.rb +126 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/invocation/encounter_start_receive_request_test.rb +126 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/invocation/order_dispatch_receive_request_test.rb +138 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/invocation/order_select_receive_request_test.rb +134 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/invocation/order_sign_receive_request_test.rb +136 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/must_support/client_card_must_support_coverage_information.rb +93 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/must_support/client_card_must_support_external_reference.rb +62 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/must_support/client_card_must_support_instructions.rb +62 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/registration/client_registration_verification_test.rb +94 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/registration/client_service_registration_attestation_test.rb +40 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/verify_request/hook_request_fetched_data_test.rb +86 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/verify_request/hook_request_optional_fields_test.rb +63 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/verify_request/hook_request_prefetch_equals_queried_test.rb +96 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/verify_request/hook_request_required_fields_test.rb +55 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/verify_request/hook_request_valid_context_test.rb +70 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/verify_request/hook_request_valid_prefetch_test.rb +62 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/verify_response/client_display_cards_attest.rb +83 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/verify_response/inferno_response_validation.rb +79 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/api/client_coverage_info_update_test.rb +212 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/api/client_crd_update_verification_group.rb +18 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/auth/decode_auth_token_test.rb +69 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/auth/retrieve_jwks_test.rb +120 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/auth/token_header_test.rb +92 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/auth/token_payload_test.rb +93 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/cds-services-prefetch-subset-v221.json +198 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/cds-services-v221.json +202 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/client_appointment_book_group.rb +102 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/client_cross_hook_group.rb +28 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/client_encounter_discharge_group.rb +96 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/client_encounter_start_group.rb +95 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/client_fhir_api_group.rb +88 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/client_hooks_group.rb +64 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/client_long_running_hook_group.rb +32 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/client_order_dispatch_group.rb +101 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/client_order_select_group.rb +102 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/client_order_sign_group.rb +107 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/client_registration_group.rb +27 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/client_urls.rb +27 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/crd_client_suite.rb +229 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/cross_hook/client_card_must_support_coverage_information_test.rb +63 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/cross_hook/client_fhirpath_collection_as_comma_delimited_string_test.rb +60 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/cross_hook/client_hook_instances_unique_test.rb +45 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/cross_hook/client_location_address_propagation_test.rb +135 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/cross_hook/client_prefetch_complete_and_subset_test.rb +103 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/appointment_book_receive_request_test.rb +156 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/encounter_discharge_receive_request_test.rb +157 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/encounter_start_receive_request_test.rb +157 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/order_dispatch_receive_request_test.rb +165 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/order_select_receive_request_test.rb +165 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/order_sign_receive_request_test.rb +165 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/long_running/client_long_running_receive_request_test.rb +64 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/long_running/client_skip_long_running_attestation_test.rb +49 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/registration/client_registration_verification_test.rb +161 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/registration/client_service_registration_attestation_test.rb +107 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_conformance_test.rb +47 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_coverage_verification_test.rb +152 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_data_fetch_verification_test.rb +55 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_granted_scopes_test.rb +123 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_prefetch_complete_test.rb +127 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_prefetch_profiles_test.rb +55 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_requested_version_test.rb +54 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_secured_transport_test.rb +48 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/verify_response/client_display_cards_attest.rb +74 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/verify_response/hook_response_support_coverage_information_test.rb +30 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/verify_response/inferno_response_validation.rb +77 -0
- data/lib/davinci_crd_test_kit/cross_suite/base_urls.rb +20 -0
- data/lib/davinci_crd_test_kit/cross_suite/cards_identification.rb +312 -0
- data/lib/davinci_crd_test_kit/{cards_validation.rb → cross_suite/cards_validation.rb} +104 -47
- data/lib/davinci_crd_test_kit/cross_suite/coverage-information_stu201_metadata.yml +27 -0
- data/lib/davinci_crd_test_kit/cross_suite/coverage-information_stu221_metadata.yml +60 -0
- data/lib/davinci_crd_test_kit/cross_suite/fhirpath_on_cds_request.rb +177 -0
- data/lib/davinci_crd_test_kit/{hook_request_field_validation.rb → cross_suite/hook_request_field_validation.rb} +282 -203
- data/lib/davinci_crd_test_kit/cross_suite/logical_models_override_helper.rb +220 -0
- data/lib/davinci_crd_test_kit/cross_suite/prefetch_completeness_checker.rb +462 -0
- data/lib/davinci_crd_test_kit/cross_suite/prefetch_contents_validation.rb +81 -0
- data/lib/davinci_crd_test_kit/cross_suite/prefetch_profile_validation.rb +48 -0
- data/lib/davinci_crd_test_kit/cross_suite/profiles_and_resource_types.rb +63 -0
- data/lib/davinci_crd_test_kit/cross_suite/replace_tokens.rb +38 -0
- data/lib/davinci_crd_test_kit/cross_suite/requests_logical_model_validation.rb +202 -0
- data/lib/davinci_crd_test_kit/cross_suite/response_logical_model_validation.rb +274 -0
- data/lib/davinci_crd_test_kit/{suggestion_actions_validation.rb → cross_suite/suggestion_actions_validation.rb} +70 -50
- data/lib/davinci_crd_test_kit/cross_suite/tags.rb +42 -0
- data/lib/davinci_crd_test_kit/metadata.rb +10 -44
- data/lib/davinci_crd_test_kit/requirements/cds-hooks-library_1.0.1_requirements.xlsx +0 -0
- data/lib/davinci_crd_test_kit/requirements/cds-hooks_2.0_requirements.xlsx +0 -0
- data/lib/davinci_crd_test_kit/requirements/cds-hooks_3.0.0-ballot_requirements.xlsx +0 -0
- data/lib/davinci_crd_test_kit/requirements/davinci_crd_test_kit_requirements.csv +742 -65
- data/lib/davinci_crd_test_kit/requirements/generated/crd_client_requirements_coverage.csv +279 -54
- data/lib/davinci_crd_test_kit/requirements/generated/crd_client_v221_requirements_coverage.csv +1430 -0
- data/lib/davinci_crd_test_kit/requirements/generated/crd_server_requirements_coverage.csv +36 -45
- data/lib/davinci_crd_test_kit/requirements/generated/crd_server_v221_requirements_coverage.csv +143 -0
- data/lib/davinci_crd_test_kit/requirements/hl7.fhir.us.davinci-crd_2.0.1_requirements.xlsx +0 -0
- data/lib/davinci_crd_test_kit/requirements/hl7.fhir.us.davinci-crd_2.2.1_requirements.xlsx +0 -0
- data/lib/davinci_crd_test_kit/server/endpoints/jwk_set_endpoint_handler.rb +13 -0
- data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_create_endpoint.rb +23 -0
- data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_delete_endpoint.rb +30 -0
- data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_metadata_endpoint.rb +112 -0
- data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_read_endpoint.rb +21 -0
- data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_request_handler.rb +261 -0
- data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_search_endpoint.rb +561 -0
- data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_update_endpoint.rb +24 -0
- data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/stress-test-Bundle.json +54687 -0
- data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr_endpoints.rb +95 -0
- data/lib/davinci_crd_test_kit/server/jobs/invoke_hook.rb +225 -0
- data/lib/davinci_crd_test_kit/{jwt_helper.rb → server/jwt_helper.rb} +1 -12
- data/lib/davinci_crd_test_kit/server/resource_extractor.rb +68 -0
- data/lib/davinci_crd_test_kit/server/server_abstract_invoke_hook_test.rb +165 -0
- data/lib/davinci_crd_test_kit/server/server_base_urls.rb +30 -0
- data/lib/davinci_crd_test_kit/{server_hook_helper.rb → server/server_hook_helper.rb} +1 -1
- data/lib/davinci_crd_test_kit/{server_hook_request_validation.rb → server/server_hook_request_validation.rb} +1 -1
- data/lib/davinci_crd_test_kit/{test_helper.rb → server/server_test_helper.rb} +7 -3
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Appointment.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/ClaimResponse.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/CommunicationRequest.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Coverage.yml +21 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Device.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/DeviceRequest.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Encounter.yml +7 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Location.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/MedicationRequest.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/NutritionOrder.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Organization.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Patient.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Practitioner.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/PractitionerRole.yml +40 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/ServiceRequest.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Task.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/VisionPrescription.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_server_suite.rb +99 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/discovery/discovery_endpoint_test.rb +90 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/discovery/discovery_services_validation_test.rb +67 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/interaction/server_invoke_hook_test.rb +12 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/must_support/coverage_information_system_action_across_hooks_validation_test.rb +34 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/must_support/external_reference_card_across_hooks_validation_test.rb +30 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/must_support/instructions_card_received_across_hooks_test.rb +27 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/server_appointment_book_group.rb +191 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/server_demonstrate_hook_response_group.rb +93 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/server_discovery_group.rb +62 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/server_encounter_discharge_group.rb +186 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/server_encounter_start_group.rb +186 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/server_hooks_group.rb +73 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/server_order_dispatch_group.rb +191 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/server_order_select_group.rb +211 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/server_order_sign_group.rb +216 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/server_required_card_response_validation_group.rb +28 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/server_urls.rb +13 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/verify_request/service_request_context_validation_test.rb +30 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/verify_request/service_request_optional_fields_validation_test.rb +39 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/verify_request/service_request_required_fields_validation_test.rb +40 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/additional_orders_validation_test.rb +59 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/card_optional_fields_validation_test.rb +51 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/coverage_information_system_action_received_test.rb +65 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/coverage_information_system_action_validation_test.rb +120 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/create_or_update_coverage_info_response_validation_test.rb +70 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/external_reference_card_validation_test.rb +37 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/form_completion_response_validation_test.rb +67 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/instructions_card_received_test.rb +30 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/launch_smart_app_card_validation_test.rb +39 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/propose_alternate_request_card_validation_test.rb +46 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/service_response_validation_test.rb +83 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Appointment_withorder.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Appointment_withoutorder.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/CommunicationRequest.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Coverage.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Device.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/DeviceRequest.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Encounter.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Location.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/MedicationRequest.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/NutritionOrder.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Organization.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Patient.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/PractitionerRole.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/ServiceRequest.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/VisionPrescription.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/crd_server_suite.rb +115 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/discovery/discovery_configuration_test.rb +159 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/discovery/discovery_endpoint_test.rb +90 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/discovery/discovery_prefetch_support_test.rb +43 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/discovery/discovery_services_validation_test.rb +121 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/interaction/server_invoke_hook_test.rb +17 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/must_support/coverage_information_must_support_test.rb +71 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/must_support/coverage_information_system_action_across_hooks_validation_test.rb +36 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/must_support/supported_us_core_versions_test.rb +118 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/server_appointment_book_group.rb +213 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/server_demonstrate_hook_response_group.rb +93 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/server_discovery_group.rb +69 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/server_encounter_discharge_group.rb +194 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/server_encounter_start_group.rb +194 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/server_hooks_group.rb +73 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/server_order_dispatch_group.rb +214 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/server_order_select_group.rb +219 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/server_order_sign_group.rb +241 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/server_required_card_response_validation_group.rb +30 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/server_urls.rb +13 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_request/service_request_context_validation_test.rb +30 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_request/service_request_no_custom_extensions_test.rb +120 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_request/service_request_optional_fields_validation_test.rb +39 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_request/service_request_required_fields_validation_test.rb +40 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/additional_orders_validation_test.rb +66 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/all_responses_include_coverage_information_test.rb +123 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/card_optional_fields_validation_test.rb +57 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/coverage_info_configuration_test.rb +83 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/coverage_information_system_action_received_test.rb +65 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/coverage_information_system_action_validation_test.rb +184 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/create_or_update_coverage_info_response_validation_test.rb +75 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/external_reference_card_validation_test.rb +47 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/form_completion_response_validation_test.rb +91 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/hook_request_resource_resolution.rb +137 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/instructions_card_received_test.rb +32 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/launch_smart_app_card_validation_test.rb +49 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/order_dispatch_coverage_information_test.rb +38 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/propose_alternate_request_card_validation_test.rb +54 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/service_response_validation_test.rb +97 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/unknown_cds_hooks_elements_test.rb +78 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/unknown_configuration_test.rb +78 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/unknown_context_test.rb +78 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/verify_response_without_billing_options_test.rb +43 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/verify_response_without_configuration_test.rb +44 -0
- data/lib/davinci_crd_test_kit/version.rb +2 -2
- data/lib/davinci_crd_test_kit.rb +4 -2
- metadata +308 -101
- data/lib/davinci_crd_test_kit/client_fhir_api_group.rb +0 -785
- data/lib/davinci_crd_test_kit/client_hooks_group.rb +0 -75
- data/lib/davinci_crd_test_kit/client_tests/appointment_book_receive_request_test.rb +0 -93
- data/lib/davinci_crd_test_kit/client_tests/client_appointment_book_group.rb +0 -75
- data/lib/davinci_crd_test_kit/client_tests/client_display_cards_attest.rb +0 -48
- data/lib/davinci_crd_test_kit/client_tests/client_encounter_discharge_group.rb +0 -73
- data/lib/davinci_crd_test_kit/client_tests/client_encounter_start_group.rb +0 -73
- data/lib/davinci_crd_test_kit/client_tests/client_fhir_api_create_test.rb +0 -41
- data/lib/davinci_crd_test_kit/client_tests/client_fhir_api_read_test.rb +0 -39
- data/lib/davinci_crd_test_kit/client_tests/client_fhir_api_search_test.rb +0 -232
- data/lib/davinci_crd_test_kit/client_tests/client_fhir_api_update_test.rb +0 -41
- data/lib/davinci_crd_test_kit/client_tests/client_fhir_api_validation_test.rb +0 -60
- data/lib/davinci_crd_test_kit/client_tests/client_order_dispatch_group.rb +0 -79
- data/lib/davinci_crd_test_kit/client_tests/client_order_select_group.rb +0 -82
- data/lib/davinci_crd_test_kit/client_tests/client_order_sign_group.rb +0 -81
- data/lib/davinci_crd_test_kit/client_tests/client_registration_verification_test.rb +0 -88
- data/lib/davinci_crd_test_kit/client_tests/decode_auth_token_test.rb +0 -60
- data/lib/davinci_crd_test_kit/client_tests/encounter_discharge_receive_request_test.rb +0 -90
- data/lib/davinci_crd_test_kit/client_tests/encounter_start_receive_request_test.rb +0 -90
- data/lib/davinci_crd_test_kit/client_tests/hook_request_optional_fields_test.rb +0 -57
- data/lib/davinci_crd_test_kit/client_tests/hook_request_required_fields_test.rb +0 -49
- data/lib/davinci_crd_test_kit/client_tests/hook_request_valid_context_test.rb +0 -68
- data/lib/davinci_crd_test_kit/client_tests/hook_request_valid_prefetch_test.rb +0 -69
- data/lib/davinci_crd_test_kit/client_tests/order_dispatch_receive_request_test.rb +0 -102
- data/lib/davinci_crd_test_kit/client_tests/order_select_receive_request_test.rb +0 -98
- data/lib/davinci_crd_test_kit/client_tests/order_sign_receive_request_test.rb +0 -101
- data/lib/davinci_crd_test_kit/client_tests/retrieve_jwks_test.rb +0 -105
- data/lib/davinci_crd_test_kit/client_tests/submitted_response_validation.rb +0 -44
- data/lib/davinci_crd_test_kit/client_tests/token_header_test.rb +0 -65
- data/lib/davinci_crd_test_kit/client_tests/token_payload_test.rb +0 -78
- data/lib/davinci_crd_test_kit/crd_client_suite.rb +0 -185
- data/lib/davinci_crd_test_kit/crd_options.rb +0 -9
- data/lib/davinci_crd_test_kit/crd_server_suite.rb +0 -125
- data/lib/davinci_crd_test_kit/igs/davinci-crd-2.0.1.tgz +0 -0
- data/lib/davinci_crd_test_kit/routes/cds_services_discovery_handler.rb +0 -18
- data/lib/davinci_crd_test_kit/routes/hook_request_endpoint.rb +0 -77
- data/lib/davinci_crd_test_kit/routes/jwk_set_endpoint_handler.rb +0 -15
- data/lib/davinci_crd_test_kit/server_appointment_book_group.rb +0 -176
- data/lib/davinci_crd_test_kit/server_demonstrate_hook_response_group.rb +0 -77
- data/lib/davinci_crd_test_kit/server_discovery_group.rb +0 -60
- data/lib/davinci_crd_test_kit/server_encounter_discharge_group.rb +0 -170
- data/lib/davinci_crd_test_kit/server_encounter_start_group.rb +0 -170
- data/lib/davinci_crd_test_kit/server_hooks_group.rb +0 -71
- data/lib/davinci_crd_test_kit/server_order_dispatch_group.rb +0 -176
- data/lib/davinci_crd_test_kit/server_order_select_group.rb +0 -195
- data/lib/davinci_crd_test_kit/server_order_sign_group.rb +0 -201
- data/lib/davinci_crd_test_kit/server_required_card_response_validation_group.rb +0 -26
- data/lib/davinci_crd_test_kit/server_tests/additional_orders_validation_test.rb +0 -68
- data/lib/davinci_crd_test_kit/server_tests/card_optional_fields_validation_test.rb +0 -47
- data/lib/davinci_crd_test_kit/server_tests/coverage_information_system_action_across_hooks_validation_test.rb +0 -32
- data/lib/davinci_crd_test_kit/server_tests/coverage_information_system_action_received_test.rb +0 -63
- data/lib/davinci_crd_test_kit/server_tests/coverage_information_system_action_validation_test.rb +0 -118
- data/lib/davinci_crd_test_kit/server_tests/create_or_update_coverage_info_response_validation_test.rb +0 -71
- data/lib/davinci_crd_test_kit/server_tests/discovery_endpoint_test.rb +0 -88
- data/lib/davinci_crd_test_kit/server_tests/discovery_services_validation_test.rb +0 -65
- data/lib/davinci_crd_test_kit/server_tests/external_reference_card_across_hooks_validation_test.rb +0 -28
- data/lib/davinci_crd_test_kit/server_tests/external_reference_card_validation_test.rb +0 -36
- data/lib/davinci_crd_test_kit/server_tests/form_completion_response_validation_test.rb +0 -78
- data/lib/davinci_crd_test_kit/server_tests/instructions_card_received_across_hooks_test.rb +0 -25
- data/lib/davinci_crd_test_kit/server_tests/instructions_card_received_test.rb +0 -26
- data/lib/davinci_crd_test_kit/server_tests/launch_smart_app_card_validation_test.rb +0 -38
- data/lib/davinci_crd_test_kit/server_tests/propose_alternate_request_card_validation_test.rb +0 -63
- data/lib/davinci_crd_test_kit/server_tests/service_call_test.rb +0 -101
- data/lib/davinci_crd_test_kit/server_tests/service_request_context_validation_test.rb +0 -28
- data/lib/davinci_crd_test_kit/server_tests/service_request_optional_fields_validation_test.rb +0 -37
- data/lib/davinci_crd_test_kit/server_tests/service_request_required_fields_validation_test.rb +0 -38
- data/lib/davinci_crd_test_kit/server_tests/service_response_validation_test.rb +0 -81
- data/lib/davinci_crd_test_kit/tags.rb +0 -10
- data/lib/davinci_crd_test_kit/urls.rb +0 -52
- /data/lib/davinci_crd_test_kit/{card_responses → client/endpoints/mocked_card_responses}/external_reference.json +0 -0
- /data/lib/davinci_crd_test_kit/{card_responses → client/endpoints/mocked_card_responses}/instructions.json +0 -0
- /data/lib/davinci_crd_test_kit/{crd_jwks.json → server/endpoints/crd_jwks.json} +0 -0
- /data/lib/davinci_crd_test_kit/{jwks.rb → server/endpoints/jwks.rb} +0 -0
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
require_relative '../../cross_suite/tags'
|
|
2
|
+
require_relative 'interaction/server_invoke_hook_test'
|
|
3
|
+
require_relative 'verify_request/service_request_required_fields_validation_test'
|
|
4
|
+
require_relative 'verify_request/service_request_optional_fields_validation_test'
|
|
5
|
+
require_relative 'verify_request/service_request_context_validation_test'
|
|
6
|
+
require_relative 'verify_response/service_response_validation_test'
|
|
7
|
+
require_relative 'verify_response/card_optional_fields_validation_test'
|
|
8
|
+
require_relative 'verify_response/external_reference_card_validation_test'
|
|
9
|
+
require_relative 'verify_response/launch_smart_app_card_validation_test'
|
|
10
|
+
require_relative 'verify_response/instructions_card_received_test'
|
|
11
|
+
require_relative 'verify_response/coverage_information_system_action_received_test'
|
|
12
|
+
require_relative 'verify_response/coverage_information_system_action_validation_test'
|
|
13
|
+
require_relative 'verify_response/propose_alternate_request_card_validation_test'
|
|
14
|
+
require_relative 'verify_response/additional_orders_validation_test'
|
|
15
|
+
require_relative 'verify_response/form_completion_response_validation_test'
|
|
16
|
+
require_relative 'verify_response/create_or_update_coverage_info_response_validation_test'
|
|
17
|
+
|
|
18
|
+
module DaVinciCRDTestKit
|
|
19
|
+
module V201
|
|
20
|
+
class ServerOrderSignGroup < Inferno::TestGroup
|
|
21
|
+
title 'order-sign'
|
|
22
|
+
id :crd_v201_server_order_sign
|
|
23
|
+
description %(
|
|
24
|
+
This group of tests invokes the order-sign hook and ensures that
|
|
25
|
+
the user-provided requests are valid as per the requirements described
|
|
26
|
+
in the [CRD IG section on order-sign hook](https://hl7.org/fhir/us/davinci-crd/STU2/hooks.html#order-sign)
|
|
27
|
+
and the [CDS Hooks specification section on order-sign context](https://cds-hooks.hl7.org/hooks/order-sign/2023SepSTU1Ballot/order-sign/).
|
|
28
|
+
It also ensures that the contents of the server's response are valid as per the requirements described in
|
|
29
|
+
the [CRD IG section on order-sign hook](https://hl7.org/fhir/us/davinci-crd/STU2/hooks.html#order-sign)
|
|
30
|
+
and the [CDS Hooks section on CDS Service Response](https://cds-hooks.hl7.org/2.0/#cds-service-response).
|
|
31
|
+
|
|
32
|
+
The [CRD IG section on order-sign hook](https://hl7.org/fhir/us/davinci-crd/STU2/hooks.html#order-sign)
|
|
33
|
+
states that "servers SHALL, at minimum, support returning and processing the Coverage Information
|
|
34
|
+
system action for all invocations of this hook."
|
|
35
|
+
|
|
36
|
+
This group includes tests to validate the following CRD response types:
|
|
37
|
+
- [additional orders as companions/prerequisites](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#identify-additional-orders-as-companionsprerequisites-for-current-order)\
|
|
38
|
+
- optional
|
|
39
|
+
- [Coverage Information](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#coverage-information)
|
|
40
|
+
- [Create or update coverage information](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#create-or-update-coverage-information)\
|
|
41
|
+
- optional
|
|
42
|
+
- [External Reference](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#external-reference) - optional
|
|
43
|
+
- [Instructions](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#instructions) - optional
|
|
44
|
+
- [Launch SMART application](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#launch-smart-application) -
|
|
45
|
+
optional
|
|
46
|
+
- [Propose alternate request](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#propose-alternate-request) -
|
|
47
|
+
optional
|
|
48
|
+
- [Request form completion](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#request-form-completion) -
|
|
49
|
+
optional
|
|
50
|
+
)
|
|
51
|
+
verifies_requirements 'hl7.fhir.us.davinci-crd_2.0.1@164', 'hl7.fhir.us.davinci-crd_2.0.1@168',
|
|
52
|
+
'hl7.fhir.us.davinci-crd_2.0.1@217', 'hl7.fhir.us.davinci-crd_2.0.1@226'
|
|
53
|
+
|
|
54
|
+
config options: { hook_name: ORDER_SIGN_TAG }
|
|
55
|
+
run_as_group
|
|
56
|
+
|
|
57
|
+
group do
|
|
58
|
+
title 'Make Hook Requests'
|
|
59
|
+
|
|
60
|
+
test from: :crd_v201_server_invoke_hook_test,
|
|
61
|
+
config: {
|
|
62
|
+
inputs: {
|
|
63
|
+
service_ids: {
|
|
64
|
+
name: :order_sign_service_ids,
|
|
65
|
+
title: 'Service id for the service that implements the `order-sign` hook'
|
|
66
|
+
},
|
|
67
|
+
service_request_bodies: {
|
|
68
|
+
name: :order_sign_request_bodies,
|
|
69
|
+
title: 'Request body or bodies for invoking the `order-sign` hook'
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
group do
|
|
76
|
+
title 'Verify Requests'
|
|
77
|
+
|
|
78
|
+
test from: :crd_v201_service_request_required_fields_validation,
|
|
79
|
+
config: {
|
|
80
|
+
outputs: {
|
|
81
|
+
contexts: {
|
|
82
|
+
name: :order_sign_contexts
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
test from: :crd_v201_service_request_context_validation,
|
|
87
|
+
config: {
|
|
88
|
+
inputs: {
|
|
89
|
+
contexts: {
|
|
90
|
+
name: :order_sign_contexts
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
test from: :crd_v201_service_request_optional_fields_validation
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
group do
|
|
98
|
+
title 'Verify Responses'
|
|
99
|
+
|
|
100
|
+
test from: :crd_v201_service_response_validation,
|
|
101
|
+
config: {
|
|
102
|
+
outputs: {
|
|
103
|
+
valid_cards: {
|
|
104
|
+
name: :order_sign_valid_cards
|
|
105
|
+
},
|
|
106
|
+
valid_system_actions: {
|
|
107
|
+
name: :order_sign_valid_system_actions
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
test from: :crd_v201_card_optional_fields_validation,
|
|
112
|
+
config: {
|
|
113
|
+
inputs: {
|
|
114
|
+
valid_cards: {
|
|
115
|
+
name: :order_sign_valid_cards
|
|
116
|
+
}
|
|
117
|
+
},
|
|
118
|
+
outputs: {
|
|
119
|
+
valid_cards_with_links: {
|
|
120
|
+
name: :order_sign_valid_cards_with_links
|
|
121
|
+
},
|
|
122
|
+
valid_cards_with_suggestions: {
|
|
123
|
+
name: :order_sign_valid_cards_with_suggestions
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
test from: :crd_v201_external_reference_card_validation,
|
|
128
|
+
config: {
|
|
129
|
+
inputs: {
|
|
130
|
+
valid_cards_with_links: {
|
|
131
|
+
name: :order_sign_valid_cards_with_links
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
test from: :crd_v201_launch_smart_app_card_validation,
|
|
136
|
+
config: {
|
|
137
|
+
inputs: {
|
|
138
|
+
valid_cards_with_links: {
|
|
139
|
+
name: :order_sign_valid_cards_with_links
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
test from: :crd_v201_valid_instructions_card_received,
|
|
144
|
+
config: {
|
|
145
|
+
inputs: {
|
|
146
|
+
valid_cards: {
|
|
147
|
+
name: :order_sign_valid_cards
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
test from: :crd_v201_coverage_info_system_action_received,
|
|
152
|
+
config: {
|
|
153
|
+
inputs: {
|
|
154
|
+
valid_system_actions: {
|
|
155
|
+
name: :order_sign_valid_system_actions
|
|
156
|
+
}
|
|
157
|
+
},
|
|
158
|
+
outputs: {
|
|
159
|
+
coverage_info: {
|
|
160
|
+
name: :order_sign_coverage_info
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
test from: :crd_v201_coverage_info_system_action_validation,
|
|
165
|
+
config: {
|
|
166
|
+
inputs: {
|
|
167
|
+
coverage_info: {
|
|
168
|
+
name: :order_sign_coverage_info
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
test from: :crd_v201_propose_alternate_request_card_validation,
|
|
173
|
+
config: {
|
|
174
|
+
inputs: {
|
|
175
|
+
valid_cards_with_suggestions: {
|
|
176
|
+
name: :order_sign_valid_cards_with_suggestions
|
|
177
|
+
},
|
|
178
|
+
contexts: {
|
|
179
|
+
name: :order_sign_contexts
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
test from: :crd_v201_additional_orders_card_validation,
|
|
184
|
+
config: {
|
|
185
|
+
inputs: {
|
|
186
|
+
valid_cards_with_suggestions: {
|
|
187
|
+
name: :order_sign_valid_cards_with_suggestions
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
test from: :crd_v201_request_form_completion_response_validation,
|
|
192
|
+
config: {
|
|
193
|
+
inputs: {
|
|
194
|
+
valid_system_actions: {
|
|
195
|
+
name: :order_sign_valid_system_actions
|
|
196
|
+
},
|
|
197
|
+
valid_cards_with_suggestions: {
|
|
198
|
+
name: :order_sign_valid_cards_with_suggestions
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
test from: :crd_v201_create_or_update_coverage_info_response_validation,
|
|
203
|
+
config: {
|
|
204
|
+
inputs: {
|
|
205
|
+
valid_system_actions: {
|
|
206
|
+
name: :order_sign_valid_system_actions
|
|
207
|
+
},
|
|
208
|
+
valid_cards_with_suggestions: {
|
|
209
|
+
name: :order_sign_valid_cards_with_suggestions
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
end
|
|
214
|
+
end
|
|
215
|
+
end
|
|
216
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
require_relative 'must_support/external_reference_card_across_hooks_validation_test'
|
|
2
|
+
require_relative 'must_support/instructions_card_received_across_hooks_test'
|
|
3
|
+
require_relative 'must_support/coverage_information_system_action_across_hooks_validation_test'
|
|
4
|
+
|
|
5
|
+
module DaVinciCRDTestKit
|
|
6
|
+
module V201
|
|
7
|
+
class ServerRequiredCardResponseValidationGroup < Inferno::TestGroup
|
|
8
|
+
title 'Required Card Response Validation'
|
|
9
|
+
description %(
|
|
10
|
+
This group contains tests to verify the presence and validity of required response types
|
|
11
|
+
across all hooks invoked. As per the [Da Vinci CRD Implementation Guide](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#potential-crd-response-types),
|
|
12
|
+
CRD Servers SHALL, at minimum, demonstrate an ability to return the following response types:
|
|
13
|
+
- Coverage Information System Action
|
|
14
|
+
- External Reference Card
|
|
15
|
+
- Instructions Card
|
|
16
|
+
)
|
|
17
|
+
verifies_requirements 'hl7.fhir.us.davinci-crd_2.0.1@247', 'hl7.fhir.us.davinci-crd_2.0.1@248',
|
|
18
|
+
'hl7.fhir.us.davinci-crd_2.0.1@249'
|
|
19
|
+
|
|
20
|
+
id :crd_v201_server_required_card_response_validation
|
|
21
|
+
run_as_group
|
|
22
|
+
|
|
23
|
+
test from: :crd_v201_external_reference_card_across_hooks_validation
|
|
24
|
+
test from: :crd_v201_valid_instructions_card_received_across_hooks
|
|
25
|
+
test from: :crd_v201_coverage_info_system_action_across_hooks_validation
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
require_relative '../../server_hook_request_validation'
|
|
2
|
+
require_relative '../../server_test_helper'
|
|
3
|
+
require_relative '../../server_hook_helper'
|
|
4
|
+
|
|
5
|
+
module DaVinciCRDTestKit
|
|
6
|
+
module V201
|
|
7
|
+
class ServiceRequestContextValidationTest < Inferno::Test
|
|
8
|
+
include DaVinciCRDTestKit::ServerHookRequestValidation
|
|
9
|
+
include DaVinciCRDTestKit::ServerTestHelper
|
|
10
|
+
include DaVinciCRDTestKit::ServerHookHelper
|
|
11
|
+
|
|
12
|
+
title 'All service requests contain valid context'
|
|
13
|
+
id :crd_v201_service_request_context_validation
|
|
14
|
+
description %(
|
|
15
|
+
This test verifies that all service requests `context` field is valid and contains all the
|
|
16
|
+
required fields.
|
|
17
|
+
)
|
|
18
|
+
input :contexts, :invoked_hook
|
|
19
|
+
|
|
20
|
+
run do
|
|
21
|
+
parsed_contexts = parse_json(contexts)
|
|
22
|
+
parsed_contexts.each do |context|
|
|
23
|
+
hook_request_context_check(context, invoked_hook, ig_version: 'v201')
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
no_error_validation('Some contexts are not valid.')
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
require_relative '../../server_hook_request_validation'
|
|
2
|
+
require_relative '../../server_hook_helper'
|
|
3
|
+
|
|
4
|
+
module DaVinciCRDTestKit
|
|
5
|
+
module V201
|
|
6
|
+
class ServiceRequestOptionalFieldsValidationTest < Inferno::Test
|
|
7
|
+
include DaVinciCRDTestKit::ServerHookRequestValidation
|
|
8
|
+
include DaVinciCRDTestKit::ServerHookHelper
|
|
9
|
+
|
|
10
|
+
title 'All service requests contain optional fields'
|
|
11
|
+
id :crd_v201_service_request_optional_fields_validation
|
|
12
|
+
description %(
|
|
13
|
+
This optional test reviews the user-submitted CRD service requests for the presence of optional fields:
|
|
14
|
+
`fhirAuthorization` and `prefetch`.
|
|
15
|
+
|
|
16
|
+
The test will not fail if these optional fields are missing from a service request; instead, it generates an
|
|
17
|
+
informational message.
|
|
18
|
+
)
|
|
19
|
+
optional
|
|
20
|
+
|
|
21
|
+
run do
|
|
22
|
+
load_tagged_requests(tested_hook_name)
|
|
23
|
+
skip_if requests.empty?, "No #{tested_hook_name} request was made in a previous test as expected."
|
|
24
|
+
|
|
25
|
+
requests.each_with_index do |request, index|
|
|
26
|
+
@request_number = index + 1
|
|
27
|
+
request_body = json_parse(request.request_body)
|
|
28
|
+
if request_body.blank?
|
|
29
|
+
add_message('error', "#{request_number}Hook request body cannot be empty.")
|
|
30
|
+
next
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
hook_request_optional_fields_check(request_body, ig_version: 'v201')
|
|
34
|
+
end
|
|
35
|
+
no_error_validation('Some service requests have invalid optional fields.')
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
require_relative '../../server_hook_request_validation'
|
|
2
|
+
require_relative '../../server_hook_helper'
|
|
3
|
+
|
|
4
|
+
module DaVinciCRDTestKit
|
|
5
|
+
module V201
|
|
6
|
+
class ServiceRequestRequiredFieldsValidationTest < Inferno::Test
|
|
7
|
+
include DaVinciCRDTestKit::ServerHookRequestValidation
|
|
8
|
+
include DaVinciCRDTestKit::ServerHookHelper
|
|
9
|
+
|
|
10
|
+
title 'All service requests contain required fields'
|
|
11
|
+
id :crd_v201_service_request_required_fields_validation
|
|
12
|
+
description %(
|
|
13
|
+
This test validates all CRD service requests provided by the user, ensuring each includes all required fields
|
|
14
|
+
specified in the [CDS Hooks spec section on Calling a CDS Service](https://cds-hooks.hl7.org/2.0/#calling-a-cds-service):
|
|
15
|
+
`hook`, `hookInstance`, and `context`. Furthermore, the test checks for the conditional presence of the
|
|
16
|
+
`fhirServer` field if `fhirAuthorization` is included.
|
|
17
|
+
)
|
|
18
|
+
input :invoked_hook
|
|
19
|
+
output :contexts
|
|
20
|
+
|
|
21
|
+
run do
|
|
22
|
+
load_tagged_requests(tested_hook_name)
|
|
23
|
+
skip_if requests.empty?, "No #{tested_hook_name} request was made in a previous test as expected."
|
|
24
|
+
contexts = []
|
|
25
|
+
requests.each_with_index do |request, index|
|
|
26
|
+
@request_number = index + 1
|
|
27
|
+
request_body = json_parse(request.request_body)
|
|
28
|
+
next if request_body.blank?
|
|
29
|
+
|
|
30
|
+
contexts << request_body['context'] if request_body['context'].is_a?(Hash)
|
|
31
|
+
hook_request_required_fields_check(request_body, invoked_hook, ig_version: 'v201')
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
output contexts: contexts.to_json
|
|
35
|
+
|
|
36
|
+
no_error_validation('Some service requests made are not valid.')
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/additional_orders_validation_test.rb
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
require_relative '../../server_test_helper'
|
|
2
|
+
require_relative '../../server_hook_helper'
|
|
3
|
+
require_relative '../../../cross_suite/suggestion_actions_validation'
|
|
4
|
+
require_relative '../../../cross_suite/cards_identification'
|
|
5
|
+
|
|
6
|
+
module DaVinciCRDTestKit
|
|
7
|
+
module V201
|
|
8
|
+
class AdditionalOrdersValidationTest < Inferno::Test
|
|
9
|
+
include DaVinciCRDTestKit::ServerTestHelper
|
|
10
|
+
include DaVinciCRDTestKit::SuggestionActionsValidation
|
|
11
|
+
include DaVinciCRDTestKit::ServerHookHelper
|
|
12
|
+
include DaVinciCRDTestKit::CardsIdentification
|
|
13
|
+
|
|
14
|
+
title 'Valid Additional Orders as companions/prerequisites cards received'
|
|
15
|
+
id :crd_v201_additional_orders_card_validation
|
|
16
|
+
description %(
|
|
17
|
+
This test validates that an [Additional Orders as companions/prerequisites](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#identify-additional-orders-as-companionsprerequisites-for-current-order)
|
|
18
|
+
card was received. It does so by:
|
|
19
|
+
- Filtering cards with the following criteria:
|
|
20
|
+
- For each suggestion in the card's suggestions array, all actions have a type of 'create'
|
|
21
|
+
and the action's resource type is one of the expected types: CommunicationRequest, Device,
|
|
22
|
+
DeviceRequest, Medication, MedicationRequest, NutritionOrder, ServiceRequest, or VisionPrescription.
|
|
23
|
+
- Then, for each valid Additional Orders card retrieved, verifying that each action within the
|
|
24
|
+
card's suggestions complies with their respective profiles as specified in the
|
|
25
|
+
[CRD IG section on Additional Orders as companions/prerequisites](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#identify-additional-orders-as-companionsprerequisites-for-current-order):
|
|
26
|
+
- [crd-profile-communicationrequest](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-profile-communicationrequest.html)
|
|
27
|
+
- [crd-profile-device](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-profile-device.html)
|
|
28
|
+
- [crd-profile-deviceRequest](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-profile-devicerequest.html)
|
|
29
|
+
- [us-core-medication](http://hl7.org/fhir/us/core/STU3.1.1/StructureDefinition-us-core-medication.html)
|
|
30
|
+
- [crd-profile-medicationRequest](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-profile-medicationrequest.html)
|
|
31
|
+
- [crd-profile-nutritionOrder](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-profile-nutritionorder.html)
|
|
32
|
+
- [crd-profile-serviceRequest](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-profile-servicerequest.html)
|
|
33
|
+
- [crd-profile-visionPrescription](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-profile-visionprescription.html).
|
|
34
|
+
|
|
35
|
+
The test will skip if no Additional Orders cards are found.
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
optional
|
|
39
|
+
input :valid_cards_with_suggestions
|
|
40
|
+
|
|
41
|
+
run do
|
|
42
|
+
parsed_cards = parse_json(valid_cards_with_suggestions)
|
|
43
|
+
additional_orders_cards = parsed_cards.filter do |card|
|
|
44
|
+
additional_orders_response_type?(card)
|
|
45
|
+
end
|
|
46
|
+
skip_if additional_orders_cards.blank?,
|
|
47
|
+
"#{tested_hook_name} hook response does not include Additional Orders as companion/prerequisite cards."
|
|
48
|
+
|
|
49
|
+
additional_orders_cards.each do |card|
|
|
50
|
+
card['suggestions'].each do |suggestion|
|
|
51
|
+
actions_check(suggestion['actions'], ig_version: 'v201')
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
no_error_validation('Some companions/prerequisites Additional Order cards are not valid.')
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/card_optional_fields_validation_test.rb
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
require_relative '../../server_test_helper'
|
|
2
|
+
require_relative '../../server_hook_request_validation'
|
|
3
|
+
require_relative '../../../cross_suite/cards_validation'
|
|
4
|
+
|
|
5
|
+
module DaVinciCRDTestKit
|
|
6
|
+
module V201
|
|
7
|
+
class CardOptionalFieldsValidationTest < Inferno::Test
|
|
8
|
+
include DaVinciCRDTestKit::ServerTestHelper
|
|
9
|
+
include DaVinciCRDTestKit::ServerHookRequestValidation
|
|
10
|
+
include DaVinciCRDTestKit::CardsValidation
|
|
11
|
+
|
|
12
|
+
title 'Cards contain valid optional fields'
|
|
13
|
+
id :crd_v201_card_optional_fields_validation
|
|
14
|
+
description %(
|
|
15
|
+
This test checks for the presence and validity of optional fields in a card,
|
|
16
|
+
but only if the card's required fields are valid. As specified in the
|
|
17
|
+
[CDS Hooks specification section on Card Attributes](https://cds-hooks.hl7.org/2.0/#card-attributes),
|
|
18
|
+
the optional fields include `uuid`, `detail`, `suggestions`, `overrideReasons`, and `links`.
|
|
19
|
+
|
|
20
|
+
Additionally, the test validates the presence of the conditional field `selectionBehavior`
|
|
21
|
+
only if the `suggestions` field is present.
|
|
22
|
+
)
|
|
23
|
+
optional
|
|
24
|
+
input :valid_cards
|
|
25
|
+
output :valid_cards_with_links, :valid_cards_with_suggestions
|
|
26
|
+
|
|
27
|
+
def cards_with_suggestions
|
|
28
|
+
@cards_with_suggestions ||= []
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def cards_with_links
|
|
32
|
+
@cards_with_links ||= []
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
run do
|
|
36
|
+
parsed_cards = parse_json(valid_cards)
|
|
37
|
+
parsed_cards.each do |card|
|
|
38
|
+
if valid_card_with_optionals?(card, 'v201')
|
|
39
|
+
cards_with_links << card if card['links']
|
|
40
|
+
cards_with_suggestions << card if card['suggestions']
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
output valid_cards_with_links: cards_with_links.to_json
|
|
45
|
+
output valid_cards_with_suggestions: cards_with_suggestions.to_json
|
|
46
|
+
|
|
47
|
+
no_error_validation('Some cards with valid required fields have invalid optional fields.')
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
require_relative '../../server_test_helper'
|
|
2
|
+
require_relative '../../server_hook_helper'
|
|
3
|
+
require_relative '../../../cross_suite/cards_identification'
|
|
4
|
+
|
|
5
|
+
module DaVinciCRDTestKit
|
|
6
|
+
module V201
|
|
7
|
+
class CoverageInformationSystemActionReceivedTest < Inferno::Test
|
|
8
|
+
include DaVinciCRDTestKit::ServerTestHelper
|
|
9
|
+
include DaVinciCRDTestKit::ServerHookHelper
|
|
10
|
+
include DaVinciCRDTestKit::CardsIdentification
|
|
11
|
+
|
|
12
|
+
title 'Coverage Information system action was received'
|
|
13
|
+
id :crd_v201_coverage_info_system_action_received
|
|
14
|
+
description %(
|
|
15
|
+
This test validates that a [Coverage Information](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#coverage-information)
|
|
16
|
+
system action was returned. It does so by:
|
|
17
|
+
- First checking for the presence of actions with a `resource` element of the following types:
|
|
18
|
+
- For `appointment-book`: Appointment
|
|
19
|
+
- For `order-sign` or `order-dispatch`: DeviceRequest, MedicationRequest, NutritionOrder,
|
|
20
|
+
ServiceRequest, or VisionPrescription
|
|
21
|
+
- Then, among the target actions, checking if their resource has the [coverage-information extension](http://hl7.org/fhir/us/davinci-crd/StructureDefinition/ext-coverage-information).
|
|
22
|
+
)
|
|
23
|
+
verifies_requirements 'hl7.fhir.us.davinci-crd_2.0.1@272', 'hl7.fhir.us.davinci-crd_2.0.1@273',
|
|
24
|
+
'hl7.fhir.us.davinci-crd_2.0.1@274', 'hl7.fhir.us.davinci-crd_2.0.1@275',
|
|
25
|
+
'hl7.fhir.us.davinci-crd_2.0.1@276', 'hl7.fhir.us.davinci-crd_2.0.1@277'
|
|
26
|
+
|
|
27
|
+
input :valid_system_actions, :invoked_hook
|
|
28
|
+
output :coverage_info
|
|
29
|
+
|
|
30
|
+
def resources_by_hook
|
|
31
|
+
shared_resources = [
|
|
32
|
+
'DeviceRequest', 'MedicationRequest', 'NutritionOrder',
|
|
33
|
+
'ServiceRequest', 'VisionPrescription'
|
|
34
|
+
]
|
|
35
|
+
{
|
|
36
|
+
'appointment-book' => ['Appointment'],
|
|
37
|
+
'order-sign' => shared_resources,
|
|
38
|
+
'order-dispatch' => shared_resources,
|
|
39
|
+
'order-select' => shared_resources,
|
|
40
|
+
'encounter-start' => ['Encounter'],
|
|
41
|
+
'encounter-discharge' => ['Encounter']
|
|
42
|
+
}
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
run do
|
|
46
|
+
parsed_actions = parse_json(valid_system_actions)
|
|
47
|
+
target_resources = resources_by_hook[invoked_hook]
|
|
48
|
+
|
|
49
|
+
target_actions = parsed_actions.select do |action|
|
|
50
|
+
resource = FHIR.from_contents(action['resource'].to_json)
|
|
51
|
+
target_resources.include?(resource&.resourceType)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
coverage_info_system_actions = target_actions.select do |action|
|
|
55
|
+
coverage_information_response_type?(action)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
assert coverage_info_system_actions.present?,
|
|
59
|
+
"Coverage Information system action was not returned in the #{tested_hook_name} hook response."
|
|
60
|
+
|
|
61
|
+
output coverage_info: coverage_info_system_actions.to_json
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
require_relative '../../server_hook_request_validation'
|
|
2
|
+
require_relative '../../server_test_helper'
|
|
3
|
+
|
|
4
|
+
module DaVinciCRDTestKit
|
|
5
|
+
module V201
|
|
6
|
+
class CoverageInformationSystemActionValidationTest < Inferno::Test
|
|
7
|
+
include DaVinciCRDTestKit::ServerHookRequestValidation
|
|
8
|
+
include DaVinciCRDTestKit::ServerTestHelper
|
|
9
|
+
|
|
10
|
+
title 'All Coverage Information system actions received are valid'
|
|
11
|
+
id :crd_v201_coverage_info_system_action_validation
|
|
12
|
+
description %(
|
|
13
|
+
This test validates all [Coverage Information](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#coverage-information)
|
|
14
|
+
system actions received. It verifies the following for each action:
|
|
15
|
+
- The action type is `update`.
|
|
16
|
+
- The resource within the action conforms its respective FHIR profile.
|
|
17
|
+
|
|
18
|
+
Additionally, the test examines the `coverage-info` extensions within the resource to ensure that:
|
|
19
|
+
- Entries referencing differing coverage have distinct `coverage-assertion-ids` and `satisfied-pa-ids`
|
|
20
|
+
(if present).
|
|
21
|
+
- Entries referencing the same coverage have the same `coverage-assertion-ids` and `satisfied-pa-ids`
|
|
22
|
+
(if present).
|
|
23
|
+
)
|
|
24
|
+
input :coverage_info
|
|
25
|
+
verifies_requirements 'hl7.fhir.us.davinci-crd_2.0.1@264', 'hl7.fhir.us.davinci-crd_2.0.1@265'
|
|
26
|
+
|
|
27
|
+
def find_extension_value(extension, url, *properties)
|
|
28
|
+
found_extension = extension.extension.find { |ext| ext.url == url }
|
|
29
|
+
return nil unless found_extension
|
|
30
|
+
|
|
31
|
+
properties.reduce(found_extension) do |current, prop|
|
|
32
|
+
return current unless current.respond_to?(prop)
|
|
33
|
+
|
|
34
|
+
current.send(prop)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def extract_and_group_coverage_info(resource)
|
|
39
|
+
resource.extension.each_with_object({}) do |extension, grouped_extensions|
|
|
40
|
+
next unless extension.url == 'http://hl7.org/fhir/us/davinci-crd/StructureDefinition/ext-coverage-information'
|
|
41
|
+
|
|
42
|
+
coverage_key = find_extension_value(extension, 'coverage', 'valueReference', 'reference')
|
|
43
|
+
grouped_extensions[coverage_key] ||= []
|
|
44
|
+
grouped_extensions[coverage_key] << extension
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# For the same coverage, ensure coverage-assertion-ids and satisfied-pa-ids are the same.
|
|
49
|
+
# For different coverages, ensure coverage-assertion-ids and satisfied-pa-ids are distinct.
|
|
50
|
+
def multiple_extensions_conformance_check(grouped_coverage_info, resource)
|
|
51
|
+
resource_ref = "#{resource.resourceType}/#{resource.id}"
|
|
52
|
+
assertion_ids_across_coverages = Set.new
|
|
53
|
+
pa_ids_across_coverages = Set.new
|
|
54
|
+
|
|
55
|
+
grouped_coverage_info.each do |coverage, extensions|
|
|
56
|
+
coverage_assertion_ids = collect_extensions_id(extensions, 'coverage-assertion-id', 'valueString').uniq
|
|
57
|
+
satisfied_pa_ids = collect_extensions_id(extensions, 'satisfied-pa-id', 'valueString').uniq.compact
|
|
58
|
+
assert coverage_assertion_ids.length == 1,
|
|
59
|
+
same_coverage_conformance_error_msg(resource_ref, coverage, 'coverage-assertion-ids')
|
|
60
|
+
|
|
61
|
+
assert satisfied_pa_ids.length <= 1,
|
|
62
|
+
same_coverage_conformance_error_msg(resource_ref, coverage, 'satisfied-pa-ids')
|
|
63
|
+
|
|
64
|
+
assertion_id = coverage_assertion_ids.first
|
|
65
|
+
assert !assertion_ids_across_coverages.include?(assertion_id),
|
|
66
|
+
different_coverage_conformance_error_msg(resource_ref, 'coverage-assertion-ids')
|
|
67
|
+
assertion_ids_across_coverages.add(assertion_id)
|
|
68
|
+
pa_id = satisfied_pa_ids.first
|
|
69
|
+
next unless pa_id
|
|
70
|
+
|
|
71
|
+
assert !pa_ids_across_coverages.include?(pa_id),
|
|
72
|
+
different_coverage_conformance_error_msg(resource_ref, 'satisfied-pa-ids')
|
|
73
|
+
pa_ids_across_coverages.add(pa_id)
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def collect_extensions_id(extensions, url, *properties)
|
|
78
|
+
extensions.map do |extension|
|
|
79
|
+
find_extension_value(extension, url, *properties)
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def same_coverage_conformance_error_msg(resource_ref, coverage, id_name)
|
|
84
|
+
"#{resource_ref}: extension has multiple repetitions of coverage `#{coverage}` with different #{id_name}."
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def different_coverage_conformance_error_msg(resource_ref, id_name)
|
|
88
|
+
"#{resource_ref}: extensions referencing differing coverage SHALL have distinct #{id_name}."
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def coverage_info_system_action_check(coverage_info_system_action)
|
|
92
|
+
type = coverage_info_system_action['type']
|
|
93
|
+
assert type, '`type` field is missing.'
|
|
94
|
+
assert type == 'update', "`type` must be `update`, but was `#{type}`"
|
|
95
|
+
|
|
96
|
+
resource = FHIR.from_contents(coverage_info_system_action['resource'].to_json)
|
|
97
|
+
profile_url = structure_definition_map('v201')[resource.resourceType]
|
|
98
|
+
assert_valid_resource(resource:, profile_url:)
|
|
99
|
+
|
|
100
|
+
grouped_coverage_info = extract_and_group_coverage_info(resource)
|
|
101
|
+
multiple_extensions_conformance_check(grouped_coverage_info, resource)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
run do
|
|
105
|
+
parsed_coverage_info = parse_json(coverage_info)
|
|
106
|
+
error_messages = []
|
|
107
|
+
parsed_coverage_info.each do |action|
|
|
108
|
+
coverage_info_system_action_check(action)
|
|
109
|
+
rescue Inferno::Exceptions::AssertionException => e
|
|
110
|
+
error_messages << "Coverage Info system action `#{action}`: #{e.message}"
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
error_messages.each do |msg|
|
|
114
|
+
messages << { type: 'error', message: msg }
|
|
115
|
+
end
|
|
116
|
+
assert error_messages.empty?, 'Some Coverage Info system actions are not valid.'
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
end
|