davinci_dtr_test_kit 0.17.1 → 0.18.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/v220_full_ehr_suite_run_against_payer_suite.json.erb +19 -0
- data/config/presets/v220_payer_suite_run_against_full_ehr_suite.json.erb +76 -0
- data/lib/davinci_dtr_test_kit/cross_suite/fhirpath_utils.rb +52 -0
- data/lib/davinci_dtr_test_kit/cross_suite/generated/v2.2.0/dtr_base_questionnaire/metadata.yml +212 -0
- data/lib/davinci_dtr_test_kit/cross_suite/generated/v2.2.0/dtr_q_package_bundle/metadata.yml +39 -0
- data/lib/davinci_dtr_test_kit/cross_suite/generated/v2.2.0/dtr_qpackage_output_parameters/metadata.yml +30 -0
- data/lib/davinci_dtr_test_kit/cross_suite/generated/v2.2.0/dtr_questionnaire_adapt/metadata.yml +17 -0
- data/lib/davinci_dtr_test_kit/cross_suite/generated/v2.2.0/dtr_questionnaire_adapt_search/metadata.yml +91 -0
- data/lib/davinci_dtr_test_kit/cross_suite/generated/v2.2.0/dtr_std_questionnaire/metadata.yml +17 -0
- data/lib/davinci_dtr_test_kit/cross_suite/generated/v2.2.0/metadata.yml +403 -0
- data/lib/davinci_dtr_test_kit/cross_suite/generated_profile_metadata.rb +22 -0
- data/lib/davinci_dtr_test_kit/cross_suite/response_selection_utils.rb +85 -0
- data/lib/davinci_dtr_test_kit/cross_suite/v2.2.0/dtr_conformance_verification.rb +21 -0
- data/lib/davinci_dtr_test_kit/cross_suite/v2.2.0/multi_request_message_helper.rb +35 -0
- data/lib/davinci_dtr_test_kit/cross_suite/v2.2.0/questionnaire_helper.rb +162 -0
- data/lib/davinci_dtr_test_kit/{dtr_client_options.rb → full_ehr/dtr_full_ehr_options.rb} +1 -1
- data/lib/davinci_dtr_test_kit/{endpoints → full_ehr/endpoints}/mock_payer.rb +9 -3
- data/lib/davinci_dtr_test_kit/{endpoints → full_ehr/endpoints}/mock_udap_smart_server/token_endpoint.rb +2 -2
- data/lib/davinci_dtr_test_kit/full_ehr/fixture_loader.rb +37 -0
- data/lib/davinci_dtr_test_kit/full_ehr/fixtures/dinner_adaptive/dinner_order_adaptive_next_question_template.json +243 -0
- data/lib/davinci_dtr_test_kit/full_ehr/fixtures/dinner_adaptive/parameters_questionnaire_dinner_order_adaptive.json +104 -0
- data/lib/davinci_dtr_test_kit/full_ehr/fixtures/dinner_static/parameters_questionnaire_dinner_order_static.json +291 -0
- data/lib/davinci_dtr_test_kit/full_ehr/fixtures/empty_templates/next_question_template_empty.json +1 -0
- data/lib/davinci_dtr_test_kit/full_ehr/fixtures/empty_templates/parameters_questionnaire_package_empty.json +9 -0
- data/lib/davinci_dtr_test_kit/full_ehr/short_circuit_interaction_verification.rb +73 -0
- data/lib/davinci_dtr_test_kit/{client_groups/adaptive_questionnaire/custom → full_ehr/v2.0.1/adaptive_custom}/dtr_full_ehr_custom_adaptive_request_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/adaptive_questionnaire/dinner_order → full_ehr/v2.0.1/adaptive_dinner}/dtr_adaptive_next_question_retrieval_group.rb +3 -3
- data/lib/davinci_dtr_test_kit/{client_groups/adaptive_questionnaire/dinner_order → full_ehr/v2.0.1/adaptive_dinner}/dtr_full_ehr_adaptive_initial_retrieval_group.rb +5 -5
- data/lib/davinci_dtr_test_kit/{client_groups/adaptive_questionnaire → full_ehr/v2.0.1/adaptive_interaction}/dtr_adaptive_next_question_request_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/adaptive_questionnaire → full_ehr/v2.0.1/adaptive_interaction}/dtr_adaptive_next_question_request_validation_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/adaptive_questionnaire → full_ehr/v2.0.1/adaptive_interaction}/dtr_adaptive_response_validation_test.rb +2 -2
- data/lib/davinci_dtr_test_kit/{client_groups/adaptive_questionnaire/dinner_order → full_ehr/v2.0.1}/dtr_full_ehr_adaptive_dinner_workflow_group.rb +7 -7
- data/lib/davinci_dtr_test_kit/{client_groups/adaptive_questionnaire/custom → full_ehr/v2.0.1}/dtr_full_ehr_custom_adaptive_workflow_group.rb +14 -14
- data/lib/davinci_dtr_test_kit/{client_groups/custom_static → full_ehr/v2.0.1}/dtr_full_ehr_custom_static_workflow_group.rb +11 -11
- data/lib/davinci_dtr_test_kit/{client_groups/must_support → full_ehr/v2.0.1}/dtr_full_ehr_questionnaire_must_support_group.rb +6 -6
- data/lib/davinci_dtr_test_kit/{client_groups/dinner_static → full_ehr/v2.0.1}/dtr_full_ehr_static_dinner_workflow_group.rb +7 -7
- data/lib/davinci_dtr_test_kit/{dtr_full_ehr_suite.rb → full_ehr/v2.0.1/dtr_full_ehr_suite.rb} +19 -20
- data/lib/davinci_dtr_test_kit/{client_groups/payer_registration/dtr_client_registration_group.rb → full_ehr/v2.0.1/dtr_payer_registration_group.rb} +8 -8
- data/lib/davinci_dtr_test_kit/{endpoints/mock_payer/next_question_endpoint.rb → full_ehr/v2.0.1/full_ehr_next_question_endpoint.rb} +18 -7
- data/lib/davinci_dtr_test_kit/{endpoints/mock_payer/questionnaire_package_endpoint.rb → full_ehr/v2.0.1/full_ehr_questionnaire_package_endpoint.rb} +22 -7
- data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/must_support/dtr_full_ehr_ms_questionnaire_package_request_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/must_support/dtr_must_support_attestation_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/must_support/dtr_questionnaire_must_support_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/payer_registration/configuration_display_smart_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/payer_registration/configuration_display_udap_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_custom_questionnaire_expressions_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_custom_questionnaire_extensions_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_custom_questionnaire_libraries_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_custom_questionnaire_package_validation_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/full_ehr → full_ehr/v2.0.1/shared}/dtr_full_ehr_adaptive_request_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/full_ehr → full_ehr/v2.0.1/shared}/dtr_full_ehr_launch_attestation_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/full_ehr → full_ehr/v2.0.1/shared}/dtr_full_ehr_prepopulation_attestation_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/full_ehr → full_ehr/v2.0.1/shared}/dtr_full_ehr_prepopulation_override_attestation_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/full_ehr → full_ehr/v2.0.1/shared}/dtr_full_ehr_questionnaire_package_request_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/full_ehr → full_ehr/v2.0.1/shared}/dtr_full_ehr_questionnaire_response_conformance_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/full_ehr → full_ehr/v2.0.1/shared}/dtr_full_ehr_questionnaire_response_correctness_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/full_ehr → full_ehr/v2.0.1/shared}/dtr_full_ehr_store_attestation_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_prepopulation_attestation_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_prepopulation_override_attestation_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_questionnaire_package_request_validation_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_questionnaire_response_basic_conformance_test.rb +2 -2
- data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_questionnaire_response_prepopulation_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_rendering_attestation_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/dinner_static → full_ehr/v2.0.1/static_dinner}/dtr_static_dinner_enabled_questions_attestation_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/dtr_full_ehr_abstract_adaptive_group.rb +87 -0
- data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/dtr_full_ehr_abstract_standard_group.rb +59 -0
- data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/dtr_full_ehr_suite.rb +145 -0
- data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/dtr_full_ehr_suite_description_v220.md +254 -0
- data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/full_ehr_next_question_endpoint.rb +391 -0
- data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/full_ehr_questionnaire_package_endpoint.rb +206 -0
- data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/interaction/adaptive_questionnaires_completed_test.rb +108 -0
- data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/interaction/interaction_wait_test.rb +177 -0
- data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/interaction/ui_display_and_interaction_attestation_test.rb +132 -0
- data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/must_support/dtr_additional_questionnaires_interaction_group.rb +74 -0
- data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/must_support/dtr_questionnaire_adaptive_must_support_test.rb +45 -0
- data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/must_support/dtr_questionnaire_base_must_support_test.rb +43 -0
- data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/must_support/dtr_questionnaire_standard_must_support_test.rb +45 -0
- data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/next_question_template_questionnaires.rb +21 -0
- data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/request/dtr_next_question_request_validation_test.rb +85 -0
- data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/request/dtr_questionnaire_package_request_validation_test.rb +89 -0
- data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/response/dtr_next_question_response_validation_test.rb +85 -0
- data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/response/dtr_questionnaire_package_response_validation_test.rb +77 -0
- data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/workflows/dtr_full_ehr_workflow_adaptive_group.rb +24 -0
- data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/workflows/dtr_full_ehr_workflow_standard_group.rb +21 -0
- data/lib/davinci_dtr_test_kit/generator/ig_metadata.rb +21 -0
- data/lib/davinci_dtr_test_kit/generator/profile_metadata_extractor.rb +57 -0
- data/lib/davinci_dtr_test_kit/generator.rb +117 -0
- data/lib/davinci_dtr_test_kit/igs/davinci_dtr_2.2.0.tgz +0 -0
- data/lib/davinci_dtr_test_kit/{dtr_options.rb → light_ehr/dtr_light_ehr_options.rb} +1 -1
- data/lib/davinci_dtr_test_kit/{dtr_light_ehr_suite.rb → light_ehr/v2.0.1/dtr_light_ehr_suite.rb} +8 -9
- data/lib/davinci_dtr_test_kit/{client_groups/light_ehr → light_ehr/v2.0.1}/dtr_light_ehr_supported_endpoints_group.rb +5 -5
- data/lib/davinci_dtr_test_kit/{client_groups/light_ehr → light_ehr/v2.0.1}/dtr_smart_ehr_launch.rb +3 -3
- data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/communication_request/communication_request_read.rb +1 -1
- data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/coverage/coverage_read.rb +1 -1
- data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/device_request/device_request_read.rb +1 -1
- data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/encounter/encounter_read.rb +1 -1
- data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/medication_request/medication_request_read.rb +1 -1
- data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/nutrition_order/nutrition_order_read.rb +1 -1
- data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/questionnaire_response/questionnaire_response_create.rb +1 -1
- data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/questionnaire_response/questionnaire_response_update.rb +1 -1
- data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/service_request/service_request_read.rb +1 -1
- data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/task/task_create.rb +1 -1
- data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/task/task_read.rb +1 -1
- data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/task/task_update.rb +1 -1
- data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/vision_prescription/vision_prescription_read.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/light_ehr → light_ehr/v2.0.1/supported_endpoints}/dtr_light_ehr_supported_payers_accept_header_test.rb +2 -2
- data/lib/davinci_dtr_test_kit/{client_groups/light_ehr → light_ehr/v2.0.1/supported_endpoints}/dtr_light_ehr_supported_payers_config_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/light_ehr → light_ehr/v2.0.1/supported_endpoints}/dtr_light_ehr_supported_payers_endpoint_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/light_ehr → light_ehr/v2.0.1/supported_endpoints}/dtr_light_ehr_supported_payers_use_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/light_ehr → light_ehr/v2.0.1/supported_endpoints}/dtr_light_ehr_supported_payers_user_response_test.rb +2 -2
- data/lib/davinci_dtr_test_kit/metadata.rb +13 -68
- data/lib/davinci_dtr_test_kit/requirements/davinci_dtr_test_kit_requirements.csv +216 -0
- data/lib/davinci_dtr_test_kit/requirements/generated/dtr_full_ehr_requirements_coverage.csv +1 -1
- data/lib/davinci_dtr_test_kit/requirements/generated/dtr_full_ehr_v220_requirements_coverage.csv +1 -0
- data/lib/davinci_dtr_test_kit/requirements/generated/dtr_light_ehr_requirements_coverage.csv +1 -1
- data/lib/davinci_dtr_test_kit/requirements/generated/dtr_payer_server_requirements_coverage.csv +1 -1
- data/lib/davinci_dtr_test_kit/requirements/generated/dtr_payer_server_v220_requirements_coverage.csv +114 -0
- data/lib/davinci_dtr_test_kit/requirements/generated/dtr_smart_app_requirements_coverage.csv +1 -1
- data/lib/davinci_dtr_test_kit/requirements/hl7.fhir.us.davinci-dtr_2.2.0_requirements.xlsx +0 -0
- data/lib/davinci_dtr_test_kit/{endpoints/mock_payer → server/endpoints}/next_question_proxy_endpoint.rb +2 -0
- data/lib/davinci_dtr_test_kit/{endpoints/mock_payer → server/endpoints}/questionnaire_package_proxy_endpoint.rb +2 -0
- data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/adaptive_form_libraries_test.rb +2 -1
- data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/adaptive_form_questionnaire_expressions_test.rb +2 -1
- data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/adaptive_form_questionnaire_extensions_test.rb +2 -1
- data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/adaptive_next_questionnaire_expressions_test.rb +2 -1
- data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/adaptive_next_questionnaire_extensions_test.rb +2 -1
- data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/payer_server_adaptive_request_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/payer_server_adaptive_request_validation_test.rb +2 -1
- data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/payer_server_adaptive_response_bundles_validation_test.rb +2 -1
- data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/payer_server_adaptive_response_search_validation_test.rb +2 -1
- data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/payer_server_adaptive_response_validation_test.rb +3 -2
- data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/payer_server_next_request_validation_test.rb +2 -1
- data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/payer_server_next_response_validation_test.rb +2 -1
- data/lib/davinci_dtr_test_kit/{dtr_payer_server_suite.rb → server/v2.0.1/dtr_payer_server_suite.rb} +9 -10
- data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1}/payer_server_adaptive_group.rb +13 -13
- data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1}/payer_server_static_group.rb +6 -6
- data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/static_forms}/static_form_libraries_test.rb +2 -1
- data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/static_forms}/static_form_questionnaire_expressions_test.rb +2 -1
- data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/static_forms}/static_form_questionnaire_extensions_test.rb +2 -1
- data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/static_forms}/static_form_request_test.rb +3 -2
- data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/static_forms}/static_form_request_validation_test.rb +3 -2
- data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/static_forms}/static_form_response_validation_test.rb +4 -3
- data/lib/davinci_dtr_test_kit/server/v2.2.0/client_simulation.rb +297 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/dtr_payer_server_capability_statement_test.rb +73 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/dtr_payer_server_suite.rb +322 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/dtr_payer_server_suite_description_v220.md +37 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/interaction_test.rb +97 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/log_questionnaire_errors_support_test.rb +57 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/must_support/questionnaire_adaptive_must_support_test.rb +47 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/must_support/questionnaire_adaptive_search_must_support_test.rb +40 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/must_support/questionnaire_base_must_support_test.rb +40 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/must_support/questionnaire_package_bundle_must_support_test.rb +38 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/must_support/questionnaire_package_output_parameters_must_support_test.rb +37 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/must_support/questionnaire_standard_must_support_test.rb +39 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/next_question_request_validation_test.rb +45 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/next_question_support/adaptive_questionnaire_endpoint_test.rb +98 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/next_question_support/invalid_questionnaire_response_test.rb +43 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/next_question_support/next_contained_questionnaire_response_references_test.rb +46 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/next_question_support/next_question_response_references_test.rb +56 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/next_question_support/next_question_response_validation_test.rb +67 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_design/contained_binary_test.rb +58 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_design/contained_binary_validation.rb +128 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_design/cql_library_validation_test.rb +58 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_design/questionnaire_design_support.rb +65 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_design/questionnaire_expression_elm_test.rb +81 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_design/questionnaire_expression_language_test.rb +63 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_design/questionnaire_prepopulation_test.rb +42 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_design/questionnaire_relevance_logic_test.rb +40 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_operation_validation.rb +440 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_request_validation_test.rb +42 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/adaptive_questionnaire_response_contained_questionnaire_test.rb +127 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/adaptive_questionnaire_response_validation_test.rb +61 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/contained_questionnaire_response_references_test.rb +42 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/dtr_server_no_custom_extension_test.rb +184 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/dtr_server_questionnaire_not_found_test.rb +76 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/dtr_server_questionnaire_package_contents_test.rb +89 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/initial_questionnaire_response_test.rb +132 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/questionnaire_package_input_type_test.rb +110 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/questionnaire_references_version_specific_test.rb +79 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/questionnaire_response_questionnaire_canonical_test.rb +89 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/questionnaire_response_references_test.rb +51 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/questionnaire_response_validation_test.rb +63 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/source_data_error_test.rb +43 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/value_set_validation_test.rb +90 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_response_reference_validation.rb +133 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/value_set_expand_support/small_value_set_expansion_test.rb +120 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/value_set_expand_support/value_set_expansion_test.rb +51 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/value_set_expand_support/value_set_expansion_validation.rb +58 -0
- data/lib/davinci_dtr_test_kit/{endpoints → smart_app/endpoints}/mock_authorization/token_endpoint.rb +1 -1
- data/lib/davinci_dtr_test_kit/{endpoints → smart_app/endpoints}/mock_ehr/fhir_get_endpoint.rb +1 -1
- data/lib/davinci_dtr_test_kit/smart_app/endpoints/mock_payer/smart_app_next_question_endpoint.rb +12 -0
- data/lib/davinci_dtr_test_kit/smart_app/endpoints/mock_payer/smart_app_questionnaire_package_endpoint.rb +12 -0
- data/lib/davinci_dtr_test_kit/{client_groups/adaptive_questionnaire/custom → smart_app/v2.0.1/adaptive_custom}/dtr_smart_app_custom_adaptive_workflow_group.rb +12 -12
- data/lib/davinci_dtr_test_kit/{client_groups/adaptive_questionnaire/dinner_order → smart_app/v2.0.1/adaptive_dinner}/dtr_smart_app_adaptive_dinner_workflow_group.rb +5 -5
- data/lib/davinci_dtr_test_kit/{client_groups/adaptive_questionnaire/dinner_order → smart_app/v2.0.1/adaptive_dinner}/dtr_smart_app_adaptive_initial_retrieval_group.rb +4 -4
- data/lib/davinci_dtr_test_kit/{auth_groups → smart_app/v2.0.1/auth}/token_request_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/custom_static → smart_app/v2.0.1}/dtr_smart_app_custom_static_workflow_group.rb +11 -11
- data/lib/davinci_dtr_test_kit/{client_groups/must_support → smart_app/v2.0.1}/dtr_smart_app_questionnaire_must_support_group.rb +6 -6
- data/lib/davinci_dtr_test_kit/{client_groups/respiratory → smart_app/v2.0.1}/dtr_smart_app_respiratory_workflow_group.rb +3 -3
- data/lib/davinci_dtr_test_kit/{client_groups/dinner_static → smart_app/v2.0.1}/dtr_smart_app_static_dinner_workflow_group.rb +7 -7
- data/lib/davinci_dtr_test_kit/{dtr_smart_app_suite.rb → smart_app/v2.0.1/dtr_smart_app_suite.rb} +21 -21
- data/lib/davinci_dtr_test_kit/{client_groups → smart_app/v2.0.1}/must_support/dtr_smart_app_ms_questionnaire_package_request_test.rb +2 -2
- data/lib/davinci_dtr_test_kit/{auth_groups → smart_app/v2.0.1}/oauth2_authentication_group.rb +2 -2
- data/lib/davinci_dtr_test_kit/{client_groups/respiratory → smart_app/v2.0.1/static_respiratory}/dtr_respiratory_questionnaire_package_group.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/respiratory → smart_app/v2.0.1/static_respiratory}/dtr_respiratory_questionnaire_package_request_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/respiratory → smart_app/v2.0.1/static_respiratory}/dtr_respiratory_questionnaire_response_group.rb +2 -2
- data/lib/davinci_dtr_test_kit/{client_groups/respiratory → smart_app/v2.0.1/static_respiratory}/dtr_respiratory_questionnaire_response_save_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/respiratory → smart_app/v2.0.1/static_respiratory}/dtr_respiratory_rendering_attestation_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/smart_app → smart_app/v2.0.1/tests}/dtr_smart_app_adaptive_request_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/smart_app → smart_app/v2.0.1/tests}/dtr_smart_app_prepopulation_attestation_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/smart_app → smart_app/v2.0.1/tests}/dtr_smart_app_prepopulation_override_attestation_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/smart_app → smart_app/v2.0.1/tests}/dtr_smart_app_questionnaire_package_request_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/smart_app → smart_app/v2.0.1/tests}/dtr_smart_app_questionnaire_response_correctness_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/smart_app → smart_app/v2.0.1/tests}/dtr_smart_app_questionnaire_response_save_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/smart_app → smart_app/v2.0.1/tests}/dtr_smart_app_saving_questionnaire_response_group.rb +1 -1
- data/lib/davinci_dtr_test_kit/tags.rb +2 -0
- data/lib/davinci_dtr_test_kit/version.rb +2 -2
- data/lib/davinci_dtr_test_kit.rb +6 -4
- metadata +299 -209
- data/lib/davinci_dtr_test_kit/certs/InfernoCA.key +0 -52
- data/lib/davinci_dtr_test_kit/certs/InfernoCA.pem +0 -35
- data/lib/davinci_dtr_test_kit/certs/TestKit.pem +0 -32
- data/lib/davinci_dtr_test_kit/certs/TestKitPrivateKey.key +0 -28
- data/lib/davinci_dtr_test_kit/endpoints/mock_payer/full_ehr_next_question_endpoint.rb +0 -30
- data/lib/davinci_dtr_test_kit/endpoints/mock_payer/full_ehr_questionnaire_package_endpoint.rb +0 -31
- data/lib/davinci_dtr_test_kit/fixture_loader.rb +0 -21
- /data/lib/davinci_dtr_test_kit/{endpoints → cross_suite}/cors.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{cql_test.rb → cross_suite/v2.0.1/cql_test.rb} +0 -0
- /data/lib/davinci_dtr_test_kit/{dtr_questionnaire_response_validation.rb → cross_suite/v2.0.1/dtr_questionnaire_response_validation.rb} +0 -0
- /data/lib/davinci_dtr_test_kit/{descriptions.rb → full_ehr/descriptions.rb} +0 -0
- /data/lib/davinci_dtr_test_kit/{fixtures → full_ehr/fixtures}/dinner_adaptive/dinner_order_adaptive_next_question_burrito.json +0 -0
- /data/lib/davinci_dtr_test_kit/{fixtures → full_ehr/fixtures}/dinner_adaptive/dinner_order_adaptive_next_question_hamburger.json +0 -0
- /data/lib/davinci_dtr_test_kit/{fixtures → full_ehr/fixtures}/dinner_adaptive/dinner_order_adaptive_next_question_initial.json +0 -0
- /data/lib/davinci_dtr_test_kit/{fixtures → full_ehr/fixtures}/dinner_adaptive/questionnaire_dinner_order_adaptive.json +0 -0
- /data/lib/davinci_dtr_test_kit/{fixtures → full_ehr/fixtures}/dinner_static/questionnaire_dinner_order_static.json +0 -0
- /data/lib/davinci_dtr_test_kit/{fixtures → full_ehr/fixtures}/dinner_static/questionnaire_response_dinner_order_static.json +0 -0
- /data/lib/davinci_dtr_test_kit/{fixtures → full_ehr/fixtures}/respiratory_assist_device/pre_populated_questionnaire_response.json +0 -0
- /data/lib/davinci_dtr_test_kit/{fixtures → full_ehr/fixtures}/respiratory_assist_device/questionnaire_package.json +0 -0
- /data/lib/davinci_dtr_test_kit/{fixtures.rb → full_ehr/fixtures.rb} +0 -0
- /data/lib/davinci_dtr_test_kit/{client_groups/adaptive_questionnaire/custom → full_ehr/v2.0.1/adaptive_custom}/dtr_custom_next_question_response_validation_test.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{client_groups/adaptive_questionnaire/dinner_order → full_ehr/v2.0.1/adaptive_dinner}/dtr_adaptive_completion_group.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{client_groups/adaptive_questionnaire/dinner_order → full_ehr/v2.0.1/adaptive_dinner}/dtr_adaptive_followup_questions_group.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{client_groups/auth → full_ehr/v2.0.1}/dtr_client_payer_auth_smart_group.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{client_groups/auth → full_ehr/v2.0.1}/dtr_client_payer_auth_udap_group.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{docs → full_ehr/v2.0.1}/dtr_full_ehr_suite_description_v201.md +0 -0
- /data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/must_support/questionnaire_must_support_elements.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{client_groups/full_ehr → full_ehr/v2.0.1/shared}/dtr_full_ehr_saving_questionnaire_response_group.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{create_test.rb → light_ehr/create_test.rb} +0 -0
- /data/lib/davinci_dtr_test_kit/{endpoints/mock_payer → light_ehr/endpoints}/light_ehr_supported_payer_endpoint.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{read_test.rb → light_ehr/read_test.rb} +0 -0
- /data/lib/davinci_dtr_test_kit/{update_test.rb → light_ehr/update_test.rb} +0 -0
- /data/lib/davinci_dtr_test_kit/{docs → light_ehr/v2.0.1}/dtr_light_ehr_suite_description_v201.md +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/communication_request/communication_request_must_support_test.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/communication_request/communication_request_validation.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/communication_request/metadata.yml +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/communication_request_group.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/coverage/coverage_must_support_test.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/coverage/coverage_validation.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/coverage/metadata.yml +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/coverage_group.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/device_request/device_request_must_support_test.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/device_request/device_request_validation.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/device_request/metadata.yml +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/device_request_group.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/encounter/encounter_must_support_test.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/encounter/encounter_validation.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/encounter/metadata.yml +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/encounter_group.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/medication_request/medication_request_must_support_test.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/medication_request/medication_request_validation.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/medication_request/metadata.yml +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/medication_request_group.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/nutrition_order/metadata.yml +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/nutrition_order/nutrition_order_must_support_test.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/nutrition_order/nutrition_order_validation.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/nutrition_order_group.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/questionnaire_response/metadata.yml +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/questionnaire_response/questionnaire_response_context_search.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/questionnaire_response/questionnaire_response_must_support_test.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/questionnaire_response/questionnaire_response_patient_search.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/questionnaire_response/questionnaire_response_read.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/questionnaire_response/questionnaire_response_validation.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/questionnaire_response_group.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/service_request/metadata.yml +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/service_request/service_request_must_support_test.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/service_request/service_request_validation.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/service_request_group.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/task/metadata.yml +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/task/task_must_support_test.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/task/task_validation.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/task_group.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/vision_prescription/metadata.yml +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/vision_prescription/vision_prescription_must_support_test.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/vision_prescription/vision_prescription_validation.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/vision_prescription_group.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{client_groups/light_ehr → light_ehr/v2.0.1/smart_ehr_launch}/fhir_context_coverage_test.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{client_groups/light_ehr → light_ehr/v2.0.1/smart_ehr_launch}/fhir_context_references_test.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{client_groups/light_ehr → light_ehr/v2.0.1/smart_ehr_launch}/fhir_launch_context_test.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{endpoints/mock_authorization → server/endpoints}/simple_token_endpoint.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/payer_server_next_response_complete_test.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{docs → server/v2.0.1}/dtr_payer_server_suite_description_v201.md +0 -0
- /data/lib/davinci_dtr_test_kit/{validation_test.rb → server/validation_test.rb} +0 -0
- /data/lib/davinci_dtr_test_kit/{endpoints → smart_app/endpoints}/mock_authorization/authorize_endpoint.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{endpoints → smart_app/endpoints}/mock_authorization.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{endpoints → smart_app/endpoints}/mock_ehr/questionnaire_response_endpoint.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{endpoints → smart_app/endpoints}/mock_ehr.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{client_groups/adaptive_questionnaire/custom → smart_app/v2.0.1/adaptive_custom}/dtr_smart_app_custom_adaptive_request_test.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{auth_groups → smart_app/v2.0.1/auth}/token_validation_test.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{docs → smart_app/v2.0.1}/dtr_smart_app_suite_description_v201.md +0 -0
- /data/lib/davinci_dtr_test_kit/{client_groups/respiratory → smart_app/v2.0.1/static_respiratory}/dtr_respiratory_rendering_group.rb +0 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
require_relative '../../../tags'
|
|
2
|
+
require_relative '../../validation_test'
|
|
3
|
+
require_relative '../questionnaire_operation_validation'
|
|
4
|
+
|
|
5
|
+
module DaVinciDTRTestKit
|
|
6
|
+
module DTRPayerServerV220
|
|
7
|
+
class AdaptiveQuestionnaireResponseValidationTest < Inferno::Test
|
|
8
|
+
include DaVinciDTRTestKit::ValidationTest
|
|
9
|
+
include QuestionnaireOperationValidation
|
|
10
|
+
|
|
11
|
+
ADAPTIVE_QUESTIONNAIRE_SEARCH_PROFILE =
|
|
12
|
+
'http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-adapt-search|2.2.0'.freeze
|
|
13
|
+
ADAPTIVE_QUESTIONNAIRE_EXTENSION_URL = 'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-questionnaireAdaptive'.freeze
|
|
14
|
+
|
|
15
|
+
id :dtr_v220_payer_adaptive_questionnaire_response_validation
|
|
16
|
+
title 'Validate adaptive Questionnaires against the DTR AdaptiveQuestionnaire-Search profile'
|
|
17
|
+
description %(
|
|
18
|
+
This test validates Questionnaires responses are compliant with the DTR
|
|
19
|
+
AdaptiveQuestionnaire-Search profile. It will check that the
|
|
20
|
+
Questionnaires returned from the $questionnaire-package operation are
|
|
21
|
+
valid against the profile.
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
verifies_requirements 'hl7.fhir.us.davinci-dtr_2.2.0@spec-23'
|
|
25
|
+
|
|
26
|
+
run do
|
|
27
|
+
load_tagged_requests(QUESTIONNAIRE_TAG)
|
|
28
|
+
|
|
29
|
+
skip_if requests.blank?, 'No $questionnaire-package requests were made.'
|
|
30
|
+
|
|
31
|
+
successful_requests = requests.select { |request| [200, 201].include? request.status }
|
|
32
|
+
|
|
33
|
+
skip_if successful_requests.blank?, 'No successful $questionnaire-package requests were made'
|
|
34
|
+
|
|
35
|
+
questionnaires = requests.flat_map do |request|
|
|
36
|
+
resource = FHIR.from_contents(request.response_body)
|
|
37
|
+
bundles = extract_questionnaire_bundles(resource)
|
|
38
|
+
next [] if bundles.blank?
|
|
39
|
+
|
|
40
|
+
extract_questionnaires_from_bundles(bundles)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
skip_if questionnaires.blank?, 'No Questionnaires were found.'
|
|
44
|
+
|
|
45
|
+
adaptive_questionnaires = questionnaires.select do |questionnaire|
|
|
46
|
+
questionnaire.extension&.any? do |extension|
|
|
47
|
+
extension.url == ADAPTIVE_QUESTIONNAIRE_EXTENSION_URL
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
omit_if adaptive_questionnaires.blank?, 'No adaptive Questionnaires were found.'
|
|
52
|
+
|
|
53
|
+
perform_response_validation_test(
|
|
54
|
+
adaptive_questionnaires,
|
|
55
|
+
:questionnaire,
|
|
56
|
+
ADAPTIVE_QUESTIONNAIRE_SEARCH_PROFILE
|
|
57
|
+
)
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative '../questionnaire_response_reference_validation'
|
|
4
|
+
require_relative '../../../cross_suite/v2.2.0/multi_request_message_helper'
|
|
5
|
+
require_relative '../../../tags'
|
|
6
|
+
|
|
7
|
+
module DaVinciDTRTestKit
|
|
8
|
+
module DTRPayerServerV220
|
|
9
|
+
class ContainedQuestionnaireResponseReferencesTest < Inferno::Test
|
|
10
|
+
include QuestionnaireResponseReferenceValidation
|
|
11
|
+
include MultiRequestMessageHelper
|
|
12
|
+
|
|
13
|
+
id :dtr_v220_payer_contained_questionnaire_response_references
|
|
14
|
+
title 'Contained QuestionnaireResponse references occur only in answer values'
|
|
15
|
+
description %(
|
|
16
|
+
This test verifies that a QuestionnaireResponse returned by `$questionnaire-package`
|
|
17
|
+
uses contained resource references only as
|
|
18
|
+
`QuestionnaireResponse.item.answer.valueReference` values.
|
|
19
|
+
)
|
|
20
|
+
verifies_requirements 'hl7.fhir.us.davinci-dtr_2.2.0@spec-140',
|
|
21
|
+
'hl7.fhir.us.davinci-dtr_2.2.0@spec-141'
|
|
22
|
+
|
|
23
|
+
run do
|
|
24
|
+
load_tagged_requests(QUESTIONNAIRE_TAG)
|
|
25
|
+
responses_by_request = requests.map { |request| questionnaire_responses_from_request(request) }
|
|
26
|
+
skip_if responses_by_request.all?(&:empty?), 'No QuestionnaireResponse resources were returned.'
|
|
27
|
+
|
|
28
|
+
responses_by_request.each_with_index do |questionnaire_responses, request_index|
|
|
29
|
+
questionnaire_responses.each do |questionnaire_response|
|
|
30
|
+
invalid_contained_reference_locations(questionnaire_response).each do |reference|
|
|
31
|
+
add_request_message('error', reference, request_index)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
message = "#{requests_with_errors_prefix}" \
|
|
37
|
+
'Contained resource references are permitted only in item.answer valueReference '
|
|
38
|
+
assert_no_error_messages("#{message}elements. See Messages for details.")
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
require_relative '../../../tags'
|
|
2
|
+
|
|
3
|
+
module DaVinciDTRTestKit
|
|
4
|
+
module DTRPayerServerV220
|
|
5
|
+
class DTRNoCustomExtensionTest < Inferno::Test
|
|
6
|
+
US_CORE_EXTENSION_URLS = [
|
|
7
|
+
'http://hl7.org/fhir/us/core/StructureDefinition/us-core-birthsex',
|
|
8
|
+
'http://hl7.org/fhir/us/core/StructureDefinition/us-core-direct',
|
|
9
|
+
'http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity',
|
|
10
|
+
'http://hl7.org/fhir/us/core/StructureDefinition/us-core-race',
|
|
11
|
+
'http://hl7.org/fhir/us/core/StructureDefinition/uscdi-requirement',
|
|
12
|
+
'http://hl7.org/fhir/us/core/StructureDefinition/us-core-extension-questionnaire-uri',
|
|
13
|
+
'http://hl7.org/fhir/us/core/StructureDefinition/us-core-genderIdentity',
|
|
14
|
+
'http://hl7.org/fhir/us/core/StructureDefinition/us-core-jurisdiction',
|
|
15
|
+
'http://hl7.org/fhir/us/core/StructureDefinition/us-core-sex',
|
|
16
|
+
'http://hl7.org/fhir/us/core/StructureDefinition/us-core-tribal-affiliation',
|
|
17
|
+
'http://hl7.org/fhir/us/core/StructureDefinition/us-core-medication-adherence',
|
|
18
|
+
'http://hl7.org/fhir/StructureDefinition/condition-assertedDate'
|
|
19
|
+
].freeze
|
|
20
|
+
|
|
21
|
+
HREX_EXTENSION_URLS = [
|
|
22
|
+
'http://hl7.org/fhir/us/davinci-hrex/StructureDefinition/extension-CoverageDavinciWellknownLocation'
|
|
23
|
+
].freeze
|
|
24
|
+
|
|
25
|
+
CRD_EXTENSION_URLS = [
|
|
26
|
+
'http://hl7.org/fhir/us/davinci-crd/StructureDefinition/ext-coverage-information',
|
|
27
|
+
'http://hl7.org/fhir/us/davinci-crd/StructureDefinition/ext-billing-options',
|
|
28
|
+
'http://hl7.org/fhir/us/davinci-crd/StructureDefinition/ext-request-category',
|
|
29
|
+
'http://hl7.org/fhir/StructureDefinition/codeOptions',
|
|
30
|
+
'http://hl7.org/fhir/StructureDefinition/alternate-reference',
|
|
31
|
+
'http://hl7.org/fhir/5.0/StructureDefinition/extension-CommunicationRequest.payload.content',
|
|
32
|
+
'http://hl7.org/fhir/5.0/StructureDefinition/extension-Task.requestedPeriod',
|
|
33
|
+
'http://hl7.org/fhir/5.0/StructureDefinition/extension-Task.requestedPerformer',
|
|
34
|
+
'http://hl7.org/fhir/5.0/StructureDefinition/extension-Task.performer',
|
|
35
|
+
'http://hl7.org/fhir/StructureDefinition/request-doNotPerform',
|
|
36
|
+
'http://hl7.org/fhir/5.0/StructureDefinition/extension-Task.input.value',
|
|
37
|
+
'http://hl7.org/fhir/5.0/StructureDefinition/extension-Task.output.value',
|
|
38
|
+
'http://hl7.org/fhir/5.0/StructureDefinition/extension-Task.statusReason'
|
|
39
|
+
].freeze
|
|
40
|
+
|
|
41
|
+
DTR_EXTENSION_URLS = [
|
|
42
|
+
'http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/activeRole',
|
|
43
|
+
'http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/alternativeExpression',
|
|
44
|
+
'http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/containedReference',
|
|
45
|
+
'http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/information-origin',
|
|
46
|
+
'http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/intendedUse',
|
|
47
|
+
'http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/qr-context',
|
|
48
|
+
'http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/estimated-completion-time',
|
|
49
|
+
'http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/questionnaireAudience',
|
|
50
|
+
'http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/qr-coverage',
|
|
51
|
+
'http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/request-specific'
|
|
52
|
+
].freeze
|
|
53
|
+
|
|
54
|
+
SDC_EXTENSION_URLS = [
|
|
55
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-answerExpression',
|
|
56
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-answerOptionsToggleExpression',
|
|
57
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-assemble-expectation',
|
|
58
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-assembleContext',
|
|
59
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-assembleDefinitionRoot',
|
|
60
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-assembledFrom',
|
|
61
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-calculatedExpression',
|
|
62
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-candidateExpression',
|
|
63
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-choiceColumn',
|
|
64
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-collapsible',
|
|
65
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-columnCount',
|
|
66
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-contextExpression',
|
|
67
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-definitionExtract',
|
|
68
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-definitionExtractValue',
|
|
69
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-enableWhenExpression',
|
|
70
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-endpoint',
|
|
71
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-entryMode',
|
|
72
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-extractAllocateId',
|
|
73
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression',
|
|
74
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-isSubject',
|
|
75
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-itemAnswerMedia',
|
|
76
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-itemExtractionContext',
|
|
77
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-itemMedia',
|
|
78
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-itemPopulationContext',
|
|
79
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-keyboard',
|
|
80
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-launchContext',
|
|
81
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-lookupQuestionnaire',
|
|
82
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-maxQuantity',
|
|
83
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-minQuantity',
|
|
84
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-observation-extract-category',
|
|
85
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-observationExtract',
|
|
86
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-observationExtractEntry',
|
|
87
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-observationLinkPeriod',
|
|
88
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-openLabel',
|
|
89
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-optionalDisplay',
|
|
90
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-performerType',
|
|
91
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-preferredTerminologyServer',
|
|
92
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-questionnaireAdaptive',
|
|
93
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-shortText',
|
|
94
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-sourceQueries',
|
|
95
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-sourceStructureMap',
|
|
96
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-subQuestionnaire',
|
|
97
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-targetStructureMap',
|
|
98
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-templateExtract',
|
|
99
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-templateExtractBundle',
|
|
100
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-templateExtractContext',
|
|
101
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-templateExtractValue',
|
|
102
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-unitOpen',
|
|
103
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-unitSupplementalSystem',
|
|
104
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-width',
|
|
105
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaireresponse-isSubject',
|
|
106
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-rendering-criticalExtension',
|
|
107
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-servicerequest-questionnaire'
|
|
108
|
+
].freeze
|
|
109
|
+
|
|
110
|
+
VALID_EXTENSION_URLS = (US_CORE_EXTENSION_URLS + HREX_EXTENSION_URLS \
|
|
111
|
+
+ DTR_EXTENSION_URLS + SDC_EXTENSION_URLS).freeze
|
|
112
|
+
|
|
113
|
+
id :dtr_server_v220_no_custom_extension_test
|
|
114
|
+
title 'Server processes $questionnaire-package without custom extensions'
|
|
115
|
+
description %(
|
|
116
|
+
This test verifies that the DTR server can successfully process a
|
|
117
|
+
$questionnaire-package request without depending on extensions outside
|
|
118
|
+
those defined by DTR, HRex, or US Core.
|
|
119
|
+
|
|
120
|
+
Successful requests containing additional extensions are permitted.
|
|
121
|
+
The test passes when at least one successful request is observed that
|
|
122
|
+
does not depend on such extensions.
|
|
123
|
+
)
|
|
124
|
+
|
|
125
|
+
verifies_requirements 'hl7.fhir.us.davinci-dtr_2.2.0@conf-8'
|
|
126
|
+
|
|
127
|
+
run do
|
|
128
|
+
requests = load_tagged_requests(QUESTIONNAIRE_TAG)
|
|
129
|
+
skip_if requests.blank?, 'No requests were made in a previous test as expected.'
|
|
130
|
+
|
|
131
|
+
successful_requests = requests.select { |request| request.status == 200 }
|
|
132
|
+
skip_if successful_requests.empty?, 'All service requests were unsuccessful.'
|
|
133
|
+
|
|
134
|
+
resources = successful_requests.filter_map { |request| resource_from_request(request) }
|
|
135
|
+
skip_if resources.empty?, 'No FHIR resources were found in successful $questionnaire-package requests.'
|
|
136
|
+
|
|
137
|
+
request_with_no_custom_extensions = resources.any? do |resource|
|
|
138
|
+
no_custom_extensions?(resource)
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
pass_if request_with_no_custom_extensions
|
|
142
|
+
|
|
143
|
+
custom_extensions_string = resources
|
|
144
|
+
.flat_map { |resource| custom_extensions(resource) }
|
|
145
|
+
.uniq
|
|
146
|
+
.map { |extension| "\n- `#{extension}`" }
|
|
147
|
+
.join
|
|
148
|
+
|
|
149
|
+
skip 'No requests were made without custom extensions. The following custom extensions were found: ' \
|
|
150
|
+
"#{custom_extensions_string}"
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
def resource_from_request(request)
|
|
154
|
+
FHIR.from_contents(request.request_body)
|
|
155
|
+
rescue JSON::ParserError
|
|
156
|
+
nil
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
def no_custom_extensions?(bundle)
|
|
160
|
+
bundle.each_element do |value, _metadata, path|
|
|
161
|
+
next unless value.is_a?(FHIR::Extension)
|
|
162
|
+
|
|
163
|
+
next if path.to_s.scan('extension').length > 1
|
|
164
|
+
|
|
165
|
+
return false unless VALID_EXTENSION_URLS.include?(value.url.to_s)
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
true
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
def custom_extensions(bundle)
|
|
172
|
+
[].tap do |custom_extensions|
|
|
173
|
+
bundle.each_element do |value, _metadata, path|
|
|
174
|
+
next unless value.is_a?(FHIR::Extension)
|
|
175
|
+
|
|
176
|
+
next if path.to_s.scan('extension').length > 1
|
|
177
|
+
|
|
178
|
+
custom_extensions << value.url.to_s unless VALID_EXTENSION_URLS.include?(value.url.to_s)
|
|
179
|
+
end
|
|
180
|
+
end
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
end
|
|
184
|
+
end
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
require_relative '../../../tags'
|
|
2
|
+
|
|
3
|
+
module DaVinciDTRTestKit
|
|
4
|
+
module DTRPayerServerV220
|
|
5
|
+
class DTRServerQuestionnaireNotFoundTest < Inferno::Test
|
|
6
|
+
id :dtr_server_v220_payer_questionnaire_not_found
|
|
7
|
+
title 'Questionnaire package response includes a warning for an unknown Questionnaire'
|
|
8
|
+
description %(
|
|
9
|
+
The DTR Questionnaire Package operation requires the server to return a warning
|
|
10
|
+
when a requested Questionnaire cannot be found. Inferno adds an unknown Questionnaire
|
|
11
|
+
to a previously made `$questionnaire-package` request and verifies that the
|
|
12
|
+
response contains the required warning.
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
verifies_requirements 'hl7.fhir.us.davinci-dtr_2.2.0@oper-9'
|
|
16
|
+
|
|
17
|
+
QUESTIONNAIRE_NOT_FOUND_URL = 'https://inferno.health/Questionnaire/does-not-exist'.freeze
|
|
18
|
+
|
|
19
|
+
input :url,
|
|
20
|
+
title: 'Payer FHIR Server Base Url',
|
|
21
|
+
description: 'Base FHIR URL implementing the DTR server operations.'
|
|
22
|
+
|
|
23
|
+
fhir_client do
|
|
24
|
+
url :url
|
|
25
|
+
auth_info :backend_services_smart_auth_info
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
run do
|
|
29
|
+
load_tagged_requests(QUESTIONNAIRE_TAG)
|
|
30
|
+
|
|
31
|
+
skip_if requests.blank?,
|
|
32
|
+
'No $questionnaire-package requests were made in the Request Questionnaires test.'
|
|
33
|
+
|
|
34
|
+
questionnaire_package_parameters = FHIR.from_contents(requests.first.request_body)
|
|
35
|
+
|
|
36
|
+
assert_resource_type(:parameters, resource: questionnaire_package_parameters)
|
|
37
|
+
|
|
38
|
+
questionnaire_package_parameters.parameter << FHIR::Parameters::Parameter.new(
|
|
39
|
+
name: 'questionnaire',
|
|
40
|
+
valueCanonical: QUESTIONNAIRE_NOT_FOUND_URL
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
fhir_operation(
|
|
44
|
+
'/Questionnaire/$questionnaire-package',
|
|
45
|
+
body: questionnaire_package_parameters,
|
|
46
|
+
tags: [QUESTIONNAIRE_TAG]
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
assert_valid_json(request.response_body)
|
|
50
|
+
assert_resource_type(:parameters)
|
|
51
|
+
assert_valid_resource
|
|
52
|
+
|
|
53
|
+
outcome_parameter = resource.parameter.find do |parameter|
|
|
54
|
+
parameter.name == 'outcome'
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
assert outcome_parameter.present?,
|
|
58
|
+
'The questionnaire-package response is missing the required `outcome` parameter.'
|
|
59
|
+
|
|
60
|
+
outcome = outcome_parameter.resource
|
|
61
|
+
|
|
62
|
+
assert outcome.present?,
|
|
63
|
+
'The `outcome` parameter does not contain an OperationOutcome resource.'
|
|
64
|
+
|
|
65
|
+
assert_resource_type(:operation_outcome, resource: outcome)
|
|
66
|
+
|
|
67
|
+
has_warning = outcome.issue.any? do |issue|
|
|
68
|
+
issue.severity == 'warning'
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
assert has_warning,
|
|
72
|
+
'The OperationOutcome in the `outcome` parameter does not contain a warning issue.'
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
require_relative '../../../tags'
|
|
2
|
+
|
|
3
|
+
module DaVinciDTRTestKit
|
|
4
|
+
module DTRPayerServerV220
|
|
5
|
+
class DTRServerQuestionnairePackageContentsTest < Inferno::Test
|
|
6
|
+
id :dtr_server_v220_payer_questionnaire_package_contents
|
|
7
|
+
title 'Questionnaire package Bundles include the Questionnaire as the first entry'
|
|
8
|
+
description %(
|
|
9
|
+
The DTR Questionnaire Package operation requires each response Bundle to include
|
|
10
|
+
the requested Questionnaire as its first entry.
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
verifies_requirements 'hl7.fhir.us.davinci-dtr_2.2.0@oper-12'
|
|
14
|
+
|
|
15
|
+
run do
|
|
16
|
+
load_tagged_requests(QUESTIONNAIRE_TAG)
|
|
17
|
+
|
|
18
|
+
skip_if requests.blank?,
|
|
19
|
+
'No $questionnaire-package requests were made in the Request Questionnaires test.'
|
|
20
|
+
|
|
21
|
+
valid_questionnaire_package_found = false
|
|
22
|
+
|
|
23
|
+
requests.each do |questionnaire_package_exchange|
|
|
24
|
+
JSON.parse(questionnaire_package_exchange.response_body)
|
|
25
|
+
|
|
26
|
+
questionnaire_package_parameters = FHIR.from_contents(
|
|
27
|
+
questionnaire_package_exchange.response_body
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
next unless questionnaire_package_parameters&.resourceType == 'Parameters'
|
|
31
|
+
|
|
32
|
+
package_bundles = questionnaire_package_parameters.parameter.filter_map do |parameter|
|
|
33
|
+
parameter.resource if parameter.name == 'packagebundle'
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
next if package_bundles.blank?
|
|
37
|
+
|
|
38
|
+
valid_questionnaire_package_found = true
|
|
39
|
+
|
|
40
|
+
package_bundles.each do |package_bundle|
|
|
41
|
+
unless package_bundle.resourceType == 'Bundle'
|
|
42
|
+
add_message(
|
|
43
|
+
'error',
|
|
44
|
+
'Unexpected resource type: expected Bundle, but received ' \
|
|
45
|
+
"#{package_bundle.resourceType}"
|
|
46
|
+
)
|
|
47
|
+
next
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
first_entry = package_bundle.entry.first
|
|
51
|
+
|
|
52
|
+
unless first_entry.present?
|
|
53
|
+
add_message(
|
|
54
|
+
'error',
|
|
55
|
+
'Each questionnaire-package Bundle must contain at least one entry.'
|
|
56
|
+
)
|
|
57
|
+
next
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
unless first_entry.resource.present?
|
|
61
|
+
add_message(
|
|
62
|
+
'error',
|
|
63
|
+
'The first entry in each questionnaire-package Bundle must contain a resource.'
|
|
64
|
+
)
|
|
65
|
+
next
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
next if first_entry.resource.resourceType == 'Questionnaire'
|
|
69
|
+
|
|
70
|
+
add_message(
|
|
71
|
+
'error',
|
|
72
|
+
'Unexpected resource type: expected Questionnaire, but received ' \
|
|
73
|
+
"#{first_entry.resource.resourceType}"
|
|
74
|
+
)
|
|
75
|
+
end
|
|
76
|
+
rescue JSON::ParserError
|
|
77
|
+
next
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
skip_if !valid_questionnaire_package_found,
|
|
81
|
+
'No valid questionnaire-package response Bundles were found.'
|
|
82
|
+
|
|
83
|
+
assert_no_error_messages(
|
|
84
|
+
'Not all questionnaire-package Bundles included the Questionnaire as the first entry.'
|
|
85
|
+
)
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative '../../../cross_suite/v2.2.0/multi_request_message_helper'
|
|
4
|
+
require_relative '../../../tags'
|
|
5
|
+
require_relative '../questionnaire_operation_validation'
|
|
6
|
+
|
|
7
|
+
module DaVinciDTRTestKit
|
|
8
|
+
module DTRPayerServerV220
|
|
9
|
+
class InitialQuestionnaireResponseTest < Inferno::Test
|
|
10
|
+
include MultiRequestMessageHelper
|
|
11
|
+
include QuestionnaireOperationValidation
|
|
12
|
+
|
|
13
|
+
CONTEXT_EXTENSION_URL = 'http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/qr-context'
|
|
14
|
+
|
|
15
|
+
id :dtr_v220_payer_initial_questionnaire_response
|
|
16
|
+
title 'Questionnaire package contains initial QuestionnaireResponse context'
|
|
17
|
+
description %(
|
|
18
|
+
This test verifies that each QuestionnaireResponse returned in a
|
|
19
|
+
`$questionnaire-package` Bundle is an initial response: it is in-progress.
|
|
20
|
+
|
|
21
|
+
This test also verifies `qr-context` when the corresponding
|
|
22
|
+
`$questionnaire-package` request supplies an `order` parameter. It
|
|
23
|
+
verifies that a context reference is present in that scenario; it does
|
|
24
|
+
not determine which input resource each QuestionnaireResponse is
|
|
25
|
+
associated with or compare reference values.
|
|
26
|
+
|
|
27
|
+
The Questionnaire Package Output Parameters profile validation separately
|
|
28
|
+
verifies that every package Bundle contains exactly one DTR
|
|
29
|
+
QuestionnaireResponse, including its required `subject` and `qr-coverage`
|
|
30
|
+
elements.
|
|
31
|
+
)
|
|
32
|
+
verifies_requirements 'hl7.fhir.us.davinci-dtr_2.2.0@oper-18'
|
|
33
|
+
|
|
34
|
+
run do
|
|
35
|
+
load_tagged_requests(QUESTIONNAIRE_TAG)
|
|
36
|
+
questionnaire_responses_found = false
|
|
37
|
+
|
|
38
|
+
requests.each_with_index do |request, request_index|
|
|
39
|
+
package_bundles_from_request(request).each do |package_bundle|
|
|
40
|
+
questionnaire_response = package_resources(package_bundle, FHIR::QuestionnaireResponse).first
|
|
41
|
+
next unless questionnaire_response
|
|
42
|
+
|
|
43
|
+
questionnaire_responses_found = true
|
|
44
|
+
validate_initial_questionnaire_response(
|
|
45
|
+
questionnaire_response,
|
|
46
|
+
request_index,
|
|
47
|
+
context_required: request_includes_context_resource?(request)
|
|
48
|
+
)
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
skip_if !questionnaire_responses_found,
|
|
53
|
+
'No QuestionnaireResponse resources were returned; ' \
|
|
54
|
+
'the response validation test verifies their presence.'
|
|
55
|
+
|
|
56
|
+
message = "#{requests_with_errors_prefix}" \
|
|
57
|
+
'QuestionnaireResponses in package Bundles must be initial responses ' \
|
|
58
|
+
'with context when an order is supplied.'
|
|
59
|
+
assert_no_error_messages("#{message} See Messages for details.")
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
private
|
|
63
|
+
|
|
64
|
+
def validate_initial_questionnaire_response(questionnaire_response, request_index, context_required:)
|
|
65
|
+
validate_initial_status(questionnaire_response, request_index)
|
|
66
|
+
validate_context_extensions(questionnaire_response, request_index, context_required:)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def validate_initial_status(questionnaire_response, request_index)
|
|
70
|
+
return if questionnaire_response.status == 'in-progress'
|
|
71
|
+
|
|
72
|
+
add_request_message('error', 'QuestionnaireResponse.status must be `in-progress`.', request_index)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def validate_context_extensions(questionnaire_response, request_index, context_required:)
|
|
76
|
+
return unless context_required
|
|
77
|
+
|
|
78
|
+
validate_extension(questionnaire_response.extension || [], CONTEXT_EXTENSION_URL, 'qr-context', request_index)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def validate_extension(extensions, url, extension_name, request_index)
|
|
82
|
+
references = extension_references(extensions, url)
|
|
83
|
+
return unless references.empty?
|
|
84
|
+
|
|
85
|
+
add_request_message(
|
|
86
|
+
'error', "QuestionnaireResponse must include a #{extension_name} extension.", request_index
|
|
87
|
+
)
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def extension_references(extensions, url)
|
|
91
|
+
extensions.filter_map do |extension|
|
|
92
|
+
extension.valueReference if extension.url == url && extension.valueReference&.reference.present?
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def package_bundles_from_request(request)
|
|
97
|
+
resource = FHIR.from_contents(request.response_body)
|
|
98
|
+
return [] unless resource.is_a?(FHIR::Parameters)
|
|
99
|
+
|
|
100
|
+
extract_questionnaire_bundles(resource)
|
|
101
|
+
rescue JSON::ParserError
|
|
102
|
+
[]
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def request_includes_context_resource?(request)
|
|
106
|
+
parameters = request_parameters(request)
|
|
107
|
+
parameter_resources(parameters, 'order').present?
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def request_parameters(request)
|
|
111
|
+
return unless request.request_body.present?
|
|
112
|
+
|
|
113
|
+
resource = FHIR.from_contents(request.request_body)
|
|
114
|
+
resource if resource.is_a?(FHIR::Parameters)
|
|
115
|
+
rescue JSON::ParserError
|
|
116
|
+
nil
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def parameter_resources(parameters, name)
|
|
120
|
+
return [] unless parameters
|
|
121
|
+
|
|
122
|
+
parameters.parameter.filter_map { |parameter| parameter.resource if parameter.name == name }
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def package_resources(package_bundle, resource_class)
|
|
126
|
+
package_bundle.entry.filter_map do |entry|
|
|
127
|
+
entry.resource if entry.resource.is_a?(resource_class)
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
end
|