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,297 @@
|
|
|
1
|
+
require_relative '../../tags'
|
|
2
|
+
|
|
3
|
+
module DaVinciDTRTestKit
|
|
4
|
+
module DTRPayerServerV220
|
|
5
|
+
module ClientSimulation
|
|
6
|
+
def questionnaire_interaction(
|
|
7
|
+
fhir_base_url,
|
|
8
|
+
questionnaire_package_request_parameters,
|
|
9
|
+
questionnaire_response_templates
|
|
10
|
+
)
|
|
11
|
+
qp_response = make_questionnaire_package_request(fhir_base_url, questionnaire_package_request_parameters)
|
|
12
|
+
|
|
13
|
+
package_bundles = extract_response_package_bundles(qp_response)
|
|
14
|
+
|
|
15
|
+
find_and_expand_value_sets(package_bundles, fhir_base_url)
|
|
16
|
+
|
|
17
|
+
adaptive_questionnaire_details =
|
|
18
|
+
extract_adaptive_questionnaires(package_bundles, questionnaire_response_templates)
|
|
19
|
+
adaptive_questionnaire_details.each do |detail|
|
|
20
|
+
request_adaptive_questionnaire_using_next_question(detail, fhir_base_url)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
private
|
|
25
|
+
|
|
26
|
+
#########################################################################
|
|
27
|
+
# $questionnaire-package request and response processing
|
|
28
|
+
#########################################################################
|
|
29
|
+
|
|
30
|
+
def make_questionnaire_package_request(fhir_base_url, parameters)
|
|
31
|
+
tags = [QUESTIONNAIRE_TAG]
|
|
32
|
+
fhir_operation("#{fhir_base_url.chomp('/')}/Questionnaire/$questionnaire-package",
|
|
33
|
+
body: parameters,
|
|
34
|
+
headers: { 'Content-Type': 'application/fhir+json' },
|
|
35
|
+
tags:)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def extract_response_package_bundles(qp_response)
|
|
39
|
+
qp_response_parameters = extract_response_parameters(qp_response)
|
|
40
|
+
return [] unless qp_response_parameters.present?
|
|
41
|
+
|
|
42
|
+
qp_response_parameters.parameter.select do |param|
|
|
43
|
+
param.name == 'packagebundle' && param.resource.is_a?(FHIR::Bundle)
|
|
44
|
+
end.map(&:resource)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def extract_response_parameters(qp_response)
|
|
48
|
+
return nil unless qp_response.status.to_s.starts_with?('2')
|
|
49
|
+
|
|
50
|
+
qp_response_parameters = FHIR.from_contents(qp_response.response_body)
|
|
51
|
+
qp_response_parameters.is_a?(FHIR::Parameters) ? qp_response_parameters : nil
|
|
52
|
+
rescue JSON::ParserError
|
|
53
|
+
nil
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
#########################################################################
|
|
57
|
+
# ValueSet/$expand
|
|
58
|
+
#########################################################################
|
|
59
|
+
|
|
60
|
+
def find_and_expand_value_sets(package_bundles, fhir_base_url)
|
|
61
|
+
package_bundles.each do |bundle|
|
|
62
|
+
bundle.entry.each do |entry|
|
|
63
|
+
next unless expandable_value_set?(entry.resource)
|
|
64
|
+
|
|
65
|
+
expand_value_set(entry.resource, fhir_base_url)
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def expandable_value_set?(resource)
|
|
71
|
+
resource.is_a?(FHIR::ValueSet) &&
|
|
72
|
+
resource.expansion.blank? &&
|
|
73
|
+
resource.url.present?
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def expand_value_set(value_set, fhir_base_url)
|
|
77
|
+
tags = [VALUE_SET_EXPAND_TAG]
|
|
78
|
+
canonical = canonical_url_for_resource(value_set)
|
|
79
|
+
parameters = FHIR::Parameters.new(
|
|
80
|
+
parameter: [
|
|
81
|
+
FHIR::Parameters::Parameter.new(name: 'url', valueUri: canonical)
|
|
82
|
+
]
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
fhir_operation("#{fhir_base_url.chomp('/')}/ValueSet/$expand",
|
|
86
|
+
body: parameters,
|
|
87
|
+
headers: { 'Content-Type': 'application/fhir+json' },
|
|
88
|
+
tags:)
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
#########################################################################
|
|
92
|
+
# $next-question request sequence
|
|
93
|
+
#########################################################################
|
|
94
|
+
|
|
95
|
+
def request_adaptive_questionnaire_using_next_question(adaptive_questionnaire_detail, fhir_base_url)
|
|
96
|
+
base_url = next_question_base_url(adaptive_questionnaire_detail[:questionnaire], fhir_base_url)
|
|
97
|
+
template = adaptive_questionnaire_detail[:template]
|
|
98
|
+
|
|
99
|
+
form = adaptive_questionnaire_detail[:questionnaire_response]
|
|
100
|
+
loop do
|
|
101
|
+
nq_response = make_next_question_request(base_url, form)
|
|
102
|
+
returned_form = extract_next_question_response(nq_response)
|
|
103
|
+
break unless returned_form.present?
|
|
104
|
+
|
|
105
|
+
if form_completed?(returned_form)
|
|
106
|
+
form = returned_form
|
|
107
|
+
break
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
new_items = identify_new_items(form, returned_form)
|
|
111
|
+
break unless new_items.present?
|
|
112
|
+
break unless new_answers?(new_items, template)
|
|
113
|
+
|
|
114
|
+
form = add_new_answers(returned_form, new_items, template)
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
return if form_completed?(form)
|
|
118
|
+
|
|
119
|
+
add_message('warning', '$next-question requests did not result in a completed form')
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def make_next_question_request(fhir_base_url, questionnaire_response)
|
|
123
|
+
tags = [NEXT_TAG]
|
|
124
|
+
fhir_operation("#{fhir_base_url}/Questionnaire/$next-question",
|
|
125
|
+
body: questionnaire_response,
|
|
126
|
+
headers: { 'Content-Type': 'application/fhir+json' },
|
|
127
|
+
tags:)
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def extract_next_question_response(nq_response)
|
|
131
|
+
return nil unless nq_response.status.to_s.starts_with?('2')
|
|
132
|
+
|
|
133
|
+
extract_next_question_response_form(nq_response)
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
def extract_next_question_response_form(nq_response)
|
|
137
|
+
resource = FHIR.from_contents(nq_response.response_body)
|
|
138
|
+
return resource if resource.is_a?(FHIR::QuestionnaireResponse)
|
|
139
|
+
return nil unless resource.is_a?(FHIR::Parameters)
|
|
140
|
+
|
|
141
|
+
resource.parameter.find do |param|
|
|
142
|
+
param.name == 'return' && param.resource.is_a?(FHIR::QuestionnaireResponse)
|
|
143
|
+
end&.resource
|
|
144
|
+
rescue JSON::ParserError
|
|
145
|
+
nil
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
#########################################################################
|
|
149
|
+
# Identify Adaptive Questionnaire Details
|
|
150
|
+
#########################################################################
|
|
151
|
+
|
|
152
|
+
def next_question_base_url(questionnaire, fhir_base_url)
|
|
153
|
+
questionnaire_url = questionnaire.extension.find do |ext|
|
|
154
|
+
ext.url == 'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-questionnaireAdaptive' &&
|
|
155
|
+
ext.valueUrl.present?
|
|
156
|
+
end&.valueUrl
|
|
157
|
+
|
|
158
|
+
questionnaire_url.present? ? questionnaire_url : fhir_base_url
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
def extract_adaptive_questionnaires(package_bundles, questionnaire_response_templates)
|
|
162
|
+
package_bundles.select { |bundle| bundle.entry.any? { |entry| adaptive_questionnaire?(entry.resource) } }
|
|
163
|
+
.filter_map do |bundle|
|
|
164
|
+
collect_adaptive_questionnaire_details(bundle, questionnaire_response_templates)
|
|
165
|
+
end
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
def collect_adaptive_questionnaire_details(package_bundle, questionnaire_response_templates)
|
|
169
|
+
questionnaire = package_bundle.entry.find { |entry| entry.resource.is_a?(FHIR::Questionnaire) }.resource
|
|
170
|
+
canonical = canonical_url_for_resource(questionnaire)
|
|
171
|
+
unless canonical.present?
|
|
172
|
+
add_message('error', 'Adaptive Questionnaire has no canonical url, ' \
|
|
173
|
+
'cannot match to a QuestionnaireResponse template.')
|
|
174
|
+
return nil
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
template = find_template_for_canonical(canonical, questionnaire_response_templates)
|
|
178
|
+
unless template.present?
|
|
179
|
+
add_message('error', 'No QuestionnaireResponse template provided for ' \
|
|
180
|
+
"Questionnaire with canonical `#{canonical}`.")
|
|
181
|
+
return nil
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
questionnaire_response = package_bundle.entry.find do |entry|
|
|
185
|
+
entry.resource.is_a?(FHIR::QuestionnaireResponse)
|
|
186
|
+
end&.resource
|
|
187
|
+
unless questionnaire_response.present?
|
|
188
|
+
questionnaire_response = template.dup
|
|
189
|
+
questionnaire_response.item = []
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
{ questionnaire:, questionnaire_response:, template: }
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
def find_template_for_canonical(canonical, questionnaire_response_templates)
|
|
196
|
+
return nil unless questionnaire_response_templates.present?
|
|
197
|
+
|
|
198
|
+
questionnaire_response_templates.find do |questionnaire_response|
|
|
199
|
+
canonical == target_questionnaire_response_template_canonical(questionnaire_response)
|
|
200
|
+
end
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
def target_questionnaire_response_template_canonical(questionnaire_response)
|
|
204
|
+
questionnaire = extract_contained_questionnaire(questionnaire_response)
|
|
205
|
+
return nil unless questionnaire.present?
|
|
206
|
+
|
|
207
|
+
canonical_url_for_resource(questionnaire)
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
def extract_contained_questionnaire(questionnaire_response)
|
|
211
|
+
questionnaire_response.contained.find { |entry| entry.is_a?(FHIR::Questionnaire) }
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
def canonical_url_for_resource(resource)
|
|
215
|
+
return nil unless resource.url.present?
|
|
216
|
+
|
|
217
|
+
"#{resource.url}#{"|#{resource.version}" if resource.version.present?}"
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
def adaptive_questionnaire?(resource)
|
|
221
|
+
resource.is_a?(FHIR::Questionnaire) &&
|
|
222
|
+
resource.extension.any? do |ext|
|
|
223
|
+
ext.url == 'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-questionnaireAdaptive' &&
|
|
224
|
+
(ext.valueBoolean || ext.valueUrl.present?)
|
|
225
|
+
end
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
#########################################################################
|
|
229
|
+
# Update QuestionnaireResponse for next $next-question request
|
|
230
|
+
#########################################################################
|
|
231
|
+
|
|
232
|
+
def new_answers?(new_items, template)
|
|
233
|
+
return false unless template.item.present?
|
|
234
|
+
|
|
235
|
+
template.item.any? do |item|
|
|
236
|
+
new_items.include?(item.linkId) || new_answers?(new_items, item)
|
|
237
|
+
end
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
def add_new_answers(questionnaire_response, new_items, template)
|
|
241
|
+
new_items.each do |new_item|
|
|
242
|
+
answer, parent_address = extract_template_answer_and_parent_address(new_item, template)
|
|
243
|
+
next unless answer
|
|
244
|
+
|
|
245
|
+
add_answer_under_address(questionnaire_response, answer, parent_address)
|
|
246
|
+
end
|
|
247
|
+
questionnaire_response
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
def extract_template_answer_and_parent_address(new_item, template)
|
|
251
|
+
search_for_item(new_item, template.item, [])
|
|
252
|
+
end
|
|
253
|
+
|
|
254
|
+
def search_for_item(target_item, item_list, parent_address)
|
|
255
|
+
item_list.each do |item_node|
|
|
256
|
+
if item_node.linkId == target_item
|
|
257
|
+
answer = item_node.dup
|
|
258
|
+
answer.item = [] # don't add sub-answers
|
|
259
|
+
return [answer, parent_address]
|
|
260
|
+
elsif item_node.item.present?
|
|
261
|
+
result = search_for_item(target_item, item_node.item, parent_address + [item_node.linkId])
|
|
262
|
+
return result if result.present?
|
|
263
|
+
end
|
|
264
|
+
end
|
|
265
|
+
nil
|
|
266
|
+
end
|
|
267
|
+
|
|
268
|
+
def add_answer_under_address(questionnaire_response, answer, address)
|
|
269
|
+
item_node = questionnaire_response
|
|
270
|
+
while address.present?
|
|
271
|
+
next_link_id = address.shift
|
|
272
|
+
item_node = item_node.item.find { |item| item.linkId == next_link_id }
|
|
273
|
+
return unless item_node
|
|
274
|
+
end
|
|
275
|
+
item_node.item << answer
|
|
276
|
+
end
|
|
277
|
+
|
|
278
|
+
def identify_new_items(submitted_form, returned_form)
|
|
279
|
+
original_questionnaire = extract_contained_questionnaire(submitted_form)
|
|
280
|
+
updated_questionnaire = extract_contained_questionnaire(returned_form)
|
|
281
|
+
return [] unless original_questionnaire.present? && updated_questionnaire.present?
|
|
282
|
+
|
|
283
|
+
item_list(updated_questionnaire) - item_list(original_questionnaire)
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
def item_list(questionnaire)
|
|
287
|
+
questionnaire.item.flat_map do |item|
|
|
288
|
+
[item.linkId] + item_list(item)
|
|
289
|
+
end.uniq.compact
|
|
290
|
+
end
|
|
291
|
+
|
|
292
|
+
def form_completed?(questionnaire_response)
|
|
293
|
+
questionnaire_response.status == 'completed'
|
|
294
|
+
end
|
|
295
|
+
end
|
|
296
|
+
end
|
|
297
|
+
end
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
module DaVinciDTRTestKit
|
|
2
|
+
module DTRPayerServerV220
|
|
3
|
+
class DTRPayerServerCapabilityStatementTest < Inferno::Test
|
|
4
|
+
id :dtr_payer_server_v220_capability_statement_test
|
|
5
|
+
|
|
6
|
+
title 'Server CapabilityStatement declares required DTR Payer Service operations'
|
|
7
|
+
|
|
8
|
+
description %(
|
|
9
|
+
The DTR IG [requires](https://hl7.org/fhir/us/davinci-dtr/2.2.0/en/confexpectations.html#conformance-to-this-implementation-guide)
|
|
10
|
+
conformant systems to conform to an appropriate CapabilityStatement. This test verifies that the payer server's
|
|
11
|
+
CapabilityStatement declares support for the operations required by the DTR Payer Service CapabilityStatement.
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
verifies_requirements 'hl7.fhir.us.davinci-dtr_2.2.0@conf-1'
|
|
15
|
+
|
|
16
|
+
REQUIRED_RESOURCE_OPERATIONS = {
|
|
17
|
+
'Questionnaire' => [
|
|
18
|
+
'questionnaire-package',
|
|
19
|
+
'next-question',
|
|
20
|
+
'log-questionnaire-errors'
|
|
21
|
+
],
|
|
22
|
+
'ValueSet' => ['expand']
|
|
23
|
+
}.freeze
|
|
24
|
+
|
|
25
|
+
run do
|
|
26
|
+
fhir_get_capability_statement
|
|
27
|
+
|
|
28
|
+
assert_response_status(200)
|
|
29
|
+
assert_resource_type(:capability_statement)
|
|
30
|
+
assert_valid_resource
|
|
31
|
+
|
|
32
|
+
server_rest = resource.rest.find { |rest| rest.mode == 'server' }
|
|
33
|
+
|
|
34
|
+
unless server_rest.present?
|
|
35
|
+
add_message(
|
|
36
|
+
'error',
|
|
37
|
+
'CapabilityStatement is missing a `rest` entry with `mode` set to `server`.'
|
|
38
|
+
)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
if server_rest.present?
|
|
42
|
+
REQUIRED_RESOURCE_OPERATIONS.each do |resource_type, required_operations|
|
|
43
|
+
resource_entry = server_rest.resource.find do |entry|
|
|
44
|
+
entry.type == resource_type
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
unless resource_entry.present?
|
|
48
|
+
add_message(
|
|
49
|
+
'error',
|
|
50
|
+
"CapabilityStatement is missing a `#{resource_type}` resource entry " \
|
|
51
|
+
'in its server-mode `rest` section.'
|
|
52
|
+
)
|
|
53
|
+
next
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
declared_operations = resource_entry.operation.map(&:name)
|
|
57
|
+
missing_operations = required_operations - declared_operations
|
|
58
|
+
|
|
59
|
+
next if missing_operations.empty?
|
|
60
|
+
|
|
61
|
+
add_message(
|
|
62
|
+
'error',
|
|
63
|
+
"CapabilityStatement is missing required `#{resource_type}` operations: " \
|
|
64
|
+
"#{missing_operations.map { |operation| "$#{operation}" }.join(', ')}."
|
|
65
|
+
)
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
assert_no_error_messages
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
require 'smart_app_launch_test_kit'
|
|
2
|
+
require_relative 'interaction_test'
|
|
3
|
+
require_relative 'log_questionnaire_errors_support_test'
|
|
4
|
+
require_relative 'next_question_support/invalid_questionnaire_response_test'
|
|
5
|
+
require_relative 'questionnaire_package_request_validation_test'
|
|
6
|
+
require_relative 'next_question_request_validation_test'
|
|
7
|
+
require_relative 'questionnaire_package_support/questionnaire_package_input_type_test'
|
|
8
|
+
require_relative 'questionnaire_package_support/dtr_server_no_custom_extension_test'
|
|
9
|
+
require_relative 'questionnaire_package_support/questionnaire_response_validation_test'
|
|
10
|
+
require_relative 'questionnaire_package_support/dtr_server_questionnaire_package_contents_test'
|
|
11
|
+
require_relative 'questionnaire_package_support/initial_questionnaire_response_test'
|
|
12
|
+
require_relative 'next_question_support/next_question_response_validation_test'
|
|
13
|
+
require_relative 'questionnaire_package_support/dtr_server_questionnaire_not_found_test'
|
|
14
|
+
require_relative 'questionnaire_design/cql_library_validation_test'
|
|
15
|
+
require_relative 'dtr_payer_server_capability_statement_test'
|
|
16
|
+
require_relative 'questionnaire_package_support/questionnaire_response_references_test'
|
|
17
|
+
require_relative 'questionnaire_package_support/contained_questionnaire_response_references_test'
|
|
18
|
+
require_relative 'questionnaire_package_support/questionnaire_response_questionnaire_canonical_test'
|
|
19
|
+
require_relative 'questionnaire_package_support/questionnaire_references_version_specific_test'
|
|
20
|
+
require_relative 'next_question_support/next_question_response_references_test'
|
|
21
|
+
require_relative 'next_question_support/next_contained_questionnaire_response_references_test'
|
|
22
|
+
require_relative 'next_question_support/adaptive_questionnaire_endpoint_test'
|
|
23
|
+
require_relative 'questionnaire_package_support/adaptive_questionnaire_response_validation_test'
|
|
24
|
+
require_relative 'questionnaire_package_support/adaptive_questionnaire_response_contained_questionnaire_test'
|
|
25
|
+
require_relative 'value_set_expand_support/value_set_expansion_test'
|
|
26
|
+
require_relative 'value_set_expand_support/small_value_set_expansion_test'
|
|
27
|
+
require_relative 'questionnaire_design/questionnaire_expression_elm_test'
|
|
28
|
+
require_relative 'questionnaire_design/questionnaire_expression_language_test'
|
|
29
|
+
require_relative 'questionnaire_design/questionnaire_prepopulation_test'
|
|
30
|
+
require_relative 'questionnaire_design/questionnaire_relevance_logic_test'
|
|
31
|
+
require_relative 'questionnaire_package_support/source_data_error_test'
|
|
32
|
+
require_relative 'questionnaire_design/contained_binary_test'
|
|
33
|
+
require_relative 'questionnaire_package_support/value_set_validation_test'
|
|
34
|
+
require_relative 'must_support/questionnaire_package_output_parameters_must_support_test'
|
|
35
|
+
require_relative 'must_support/questionnaire_package_bundle_must_support_test'
|
|
36
|
+
require_relative 'must_support/questionnaire_base_must_support_test'
|
|
37
|
+
require_relative 'must_support/questionnaire_standard_must_support_test'
|
|
38
|
+
require_relative 'must_support/questionnaire_adaptive_must_support_test'
|
|
39
|
+
require_relative 'must_support/questionnaire_adaptive_search_must_support_test'
|
|
40
|
+
|
|
41
|
+
module DaVinciDTRTestKit
|
|
42
|
+
module DTRPayerServerV220
|
|
43
|
+
class DTRPayerServerSuiteV220 < Inferno::TestSuite
|
|
44
|
+
id :dtr_payer_server_v220
|
|
45
|
+
title 'Da Vinci DTR Payer Server Test Suite v2.2.0'
|
|
46
|
+
description File.read(File.join(__dir__, 'dtr_payer_server_suite_description_v220.md'))
|
|
47
|
+
|
|
48
|
+
links [
|
|
49
|
+
{
|
|
50
|
+
label: 'Report Issue',
|
|
51
|
+
url: 'https://github.com/inferno-framework/davinci-dtr-test-kit/issues'
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
label: 'Open Source',
|
|
55
|
+
url: 'https://github.com/inferno-framework/davinci-dtr-test-kit'
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
label: 'Download',
|
|
59
|
+
url: 'https://github.com/inferno-framework/davinci-dtr-test-kit/releases'
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
label: 'Implementation Guide',
|
|
63
|
+
url: 'https://hl7.org/fhir/us/davinci-dtr/2.2.0/'
|
|
64
|
+
}
|
|
65
|
+
]
|
|
66
|
+
|
|
67
|
+
requirement_sets(
|
|
68
|
+
{
|
|
69
|
+
identifier: 'hl7.fhir.us.davinci-dtr_2.2.0',
|
|
70
|
+
title: 'Da Vinci Documentation Templates and Rules (DTR) v2.2.0',
|
|
71
|
+
actor: 'DTR Server'
|
|
72
|
+
}
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
fhir_resource_validator do
|
|
76
|
+
igs('hl7.fhir.us.davinci-dtr#2.2.0')
|
|
77
|
+
|
|
78
|
+
exclude_message do |message|
|
|
79
|
+
message.message.match?(/\A\S+: \S+: URL value '.*' does not resolve/)
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
input :url,
|
|
84
|
+
title: 'Payer FHIR Server Base Url',
|
|
85
|
+
description: 'Base FHIR URL implementing the DTR server operations.'
|
|
86
|
+
|
|
87
|
+
fhir_client do
|
|
88
|
+
url :url
|
|
89
|
+
auth_info :backend_services_smart_auth_info
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
group do
|
|
93
|
+
title 'Discovery'
|
|
94
|
+
id :dtr_payer_v220_discovery
|
|
95
|
+
description <<~DESCRIPTION
|
|
96
|
+
The Discovery group verifies that a server advertises the required DTR
|
|
97
|
+
functionality in its CapabilityStatement.
|
|
98
|
+
DESCRIPTION
|
|
99
|
+
|
|
100
|
+
run_as_group
|
|
101
|
+
|
|
102
|
+
fhir_client do
|
|
103
|
+
url :url
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
test from: :dtr_payer_server_v220_capability_statement_test
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
group from: :'smart_stu2-smart_backend_services' do
|
|
110
|
+
id :dtr_payer_v220_backend_services
|
|
111
|
+
description <<~DESCRIPTION
|
|
112
|
+
The Backend Services group verifies that a server supports SMART
|
|
113
|
+
backend services authorization and allows Inferno to obtain
|
|
114
|
+
authorization to perform the DTR interactions in the rest of the
|
|
115
|
+
suite.
|
|
116
|
+
DESCRIPTION
|
|
117
|
+
|
|
118
|
+
# TODO
|
|
119
|
+
# spec-120 [QUESTIONABLE]- payers require clients to use backend services
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
group do
|
|
123
|
+
id :dtr_payer_server_v220_questionnaire_operations
|
|
124
|
+
title 'Questionnaire Operations'
|
|
125
|
+
description <<~DESCRIPTION
|
|
126
|
+
The Questionnaire Operations group submits user-provided requests to
|
|
127
|
+
the server. Both the user-provided requests and the server's responses
|
|
128
|
+
are validated to ensure they conform to the appropriate profiles.
|
|
129
|
+
Responses across all requests are checked to verify that the server is
|
|
130
|
+
capable of populating all Must Support fields.
|
|
131
|
+
DESCRIPTION
|
|
132
|
+
|
|
133
|
+
run_as_group
|
|
134
|
+
|
|
135
|
+
input :backend_services_smart_auth_info,
|
|
136
|
+
title: 'Backend Services Credentials',
|
|
137
|
+
type: :auth_info
|
|
138
|
+
input :client_fhir_endpoint,
|
|
139
|
+
title: 'DTR Client FHIR Endpoint',
|
|
140
|
+
description: 'Base URL of the DTR client FHIR endpoint. Required to validate absolute ' \
|
|
141
|
+
'QuestionnaireResponse references.',
|
|
142
|
+
optional: true
|
|
143
|
+
|
|
144
|
+
group do
|
|
145
|
+
title 'Questionnaire Interactions'
|
|
146
|
+
id :dtr_payer_v220_questionnaire_interactions
|
|
147
|
+
description <<~DESCRIPTION
|
|
148
|
+
The Questionnaire Interactions group makes `$questionnaire-package`,
|
|
149
|
+
`$next-question`, and `ValueSet/$expand` requests to the server. The
|
|
150
|
+
user-provided `$questionnaire-package` and `$next-question` request
|
|
151
|
+
bodies are validated in this group, while the server responses are
|
|
152
|
+
validated in later groups.
|
|
153
|
+
|
|
154
|
+
`ValueSet/$expand` operations are automatically made for any
|
|
155
|
+
returned ValueSets which need to be expanded.
|
|
156
|
+
DESCRIPTION
|
|
157
|
+
|
|
158
|
+
group do
|
|
159
|
+
title 'Interactions'
|
|
160
|
+
id :dtr_payer_v220_interactions
|
|
161
|
+
description <<~DESCRIPTION
|
|
162
|
+
This group makes all `$questionnaire-package`, `$next-question`,
|
|
163
|
+
and `ValueSet/$expand` requests.
|
|
164
|
+
DESCRIPTION
|
|
165
|
+
|
|
166
|
+
test from: :dtr_v220_payer_interaction
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
group do
|
|
170
|
+
title 'Request Validation'
|
|
171
|
+
id :dtr_payer_v220_request_validation
|
|
172
|
+
description <<~DESCRIPTION
|
|
173
|
+
This group validates the user-provided `$questionnaire-package`
|
|
174
|
+
and `$next-question` request bodies against the appropriate
|
|
175
|
+
profiles, and verifies that all of the `$questionnaire-package`
|
|
176
|
+
input types have been provided so that the server can demonstrate
|
|
177
|
+
that it supports them all.
|
|
178
|
+
DESCRIPTION
|
|
179
|
+
|
|
180
|
+
simulation_verification
|
|
181
|
+
|
|
182
|
+
test from: :dtr_v220_payer_questionnaire_package_request_validation
|
|
183
|
+
test from: :dtr_v220_payer_next_question_request_validation
|
|
184
|
+
test from: :dtr_v220_payer_questionnaire_package_input_type
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
group do
|
|
189
|
+
title 'Questionnaire/$questionnaire-package Support'
|
|
190
|
+
id :dtr_payer_v220_questionnaire_package_support
|
|
191
|
+
description <<~DESCRIPTION
|
|
192
|
+
This group verifies that the server's responses to
|
|
193
|
+
`$questionnaire-package` requests made in the "Questionnaire
|
|
194
|
+
Interactions" group are valid.
|
|
195
|
+
DESCRIPTION
|
|
196
|
+
|
|
197
|
+
test from: :dtr_v220_payer_questionnaire_response_validation
|
|
198
|
+
test from: :dtr_server_v220_payer_questionnaire_package_contents
|
|
199
|
+
test from: :dtr_v220_payer_initial_questionnaire_response
|
|
200
|
+
test from: :dtr_server_v220_no_custom_extension_test
|
|
201
|
+
test from: :dtr_v220_payer_value_set_validation
|
|
202
|
+
test from: :dtr_v220_payer_small_value_set_expansion
|
|
203
|
+
test from: :dtr_v220_payer_questionnaire_references_version_specific
|
|
204
|
+
|
|
205
|
+
test from: :dtr_v220_payer_adaptive_questionnaire_response_contained_questionnaire
|
|
206
|
+
test from: :dtr_v220_payer_questionnaire_response_questionnaire_canonical
|
|
207
|
+
test from: :dtr_v220_payer_questionnaire_response_references
|
|
208
|
+
test from: :dtr_v220_payer_contained_questionnaire_response_references
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
group do
|
|
212
|
+
title 'Questionnaire/$next-question Support'
|
|
213
|
+
id :dtr_payer_v220_next_question_support
|
|
214
|
+
description <<~DESCRIPTION
|
|
215
|
+
This group verifies that the server's responses to `$next-question`
|
|
216
|
+
requests made in the "Questionnaire Interactions" group are valid
|
|
217
|
+
and meet requirements specific to adaptive Questionnaires.
|
|
218
|
+
DESCRIPTION
|
|
219
|
+
|
|
220
|
+
test from: :dtr_v220_payer_next_question_response_validation
|
|
221
|
+
test from: :dtr_v220_payer_adaptive_questionnaire_response_validation
|
|
222
|
+
test from: :dtr_v220_payer_next_question_response_references
|
|
223
|
+
test from: :dtr_v220_payer_next_question_contained_response_references
|
|
224
|
+
test from: :dtr_v220_payer_adaptive_questionnaire_endpoint
|
|
225
|
+
|
|
226
|
+
# TODO
|
|
227
|
+
# spec-39 - [QUESTIONABLE] display item indicating Q completion included at end
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
group do
|
|
231
|
+
title 'Questionnaire Design'
|
|
232
|
+
id :dtr_payer_v220_questionnaire_design
|
|
233
|
+
description <<~DESCRIPTION
|
|
234
|
+
This group verifies that Questionnaires returned from
|
|
235
|
+
`$questionnaire-package` and `$next-question` requests made in the
|
|
236
|
+
"Questionnaire Interactions" meet common requirements from the DTR
|
|
237
|
+
IG.
|
|
238
|
+
DESCRIPTION
|
|
239
|
+
|
|
240
|
+
test from: :dtr_v220_payer_questionnaire_relevance_logic
|
|
241
|
+
test from: :dtr_v220_payer_questionnaire_expression_language
|
|
242
|
+
test from: :dtr_v220_payer_questionnaire_expression_elm
|
|
243
|
+
test from: :dtr_v220_payer_questionnaire_prepopulation
|
|
244
|
+
|
|
245
|
+
# TODO
|
|
246
|
+
# spec-93 - [NOT TESTED in 2.0] CQL has context of "Patient"
|
|
247
|
+
# spec-94 - [NOT TESTED in 2.0] CQL follows SDC rules for determining context
|
|
248
|
+
# spec-97 [QUESTIONABLE] - [NOT TESTED in 2.0] variables reference library if multiple libraries are used
|
|
249
|
+
|
|
250
|
+
# TODO
|
|
251
|
+
test from: :dtr_v220_payer_cql_library_validation
|
|
252
|
+
|
|
253
|
+
test from: :dtr_v220_payer_contained_binary
|
|
254
|
+
# spec-165 [QUESTIONABLE]- contained binary page reference validation
|
|
255
|
+
|
|
256
|
+
# TODO
|
|
257
|
+
# sec-4 - no hidden read-only questions
|
|
258
|
+
end
|
|
259
|
+
|
|
260
|
+
group do
|
|
261
|
+
title 'ValueSet/$expand Support'
|
|
262
|
+
id :dtr_payer_v220_valueset_expand_support
|
|
263
|
+
description <<~DESCRIPTION
|
|
264
|
+
This group verifies that the server's responses to
|
|
265
|
+
`ValueSet/$expand` requests made in the "Questionnaire Interactions"
|
|
266
|
+
group are valid.
|
|
267
|
+
DESCRIPTION
|
|
268
|
+
|
|
269
|
+
test from: :dtr_v220_payer_value_set_expansion
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
group do
|
|
273
|
+
title 'Error Handling'
|
|
274
|
+
id :dtr_payer_v220_error_handling
|
|
275
|
+
description <<~DESCRIPTION
|
|
276
|
+
This group makes requests which contain errors and verifies that the
|
|
277
|
+
server handles them in accordance with DTR IG requirements.
|
|
278
|
+
DESCRIPTION
|
|
279
|
+
|
|
280
|
+
test from: :dtr_server_v220_payer_questionnaire_not_found
|
|
281
|
+
|
|
282
|
+
test from: :dtr_v220_payer_source_data_error
|
|
283
|
+
|
|
284
|
+
test from: :dtr_v220_payer_invalid_questionnaire_response
|
|
285
|
+
end
|
|
286
|
+
|
|
287
|
+
group do
|
|
288
|
+
id :dtr_payer_server_v220_must_support
|
|
289
|
+
title 'Must Support'
|
|
290
|
+
description <<~DESCRIPTION
|
|
291
|
+
This group verifies that the server is capable of populating all
|
|
292
|
+
Must Support fields.
|
|
293
|
+
DESCRIPTION
|
|
294
|
+
|
|
295
|
+
test from: :dtr_v220_payer_questionnaire_package_output_parameters_must_support
|
|
296
|
+
test from: :dtr_v220_payer_questionnaire_package_bundle_must_support
|
|
297
|
+
test from: :dtr_v220_payer_questionnaire_base_must_support
|
|
298
|
+
test from: :dtr_v220_payer_questionnaire_standard_must_support
|
|
299
|
+
test from: :dtr_v220_payer_questionnaire_adaptive_must_support
|
|
300
|
+
test from: :dtr_v220_payer_questionnaire_adaptive_search_must_support
|
|
301
|
+
end
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
group do
|
|
305
|
+
title 'Log Questionnaire Error Support'
|
|
306
|
+
id :dtr_payer_v220_log_questionnaire_error_support
|
|
307
|
+
description <<~DESCRIPTION
|
|
308
|
+
This group performs a `$log-questionnaire-errors` operation and
|
|
309
|
+
verifies the server's response.
|
|
310
|
+
DESCRIPTION
|
|
311
|
+
|
|
312
|
+
run_as_group
|
|
313
|
+
|
|
314
|
+
input :backend_services_smart_auth_info,
|
|
315
|
+
title: 'Backend Services Credentials',
|
|
316
|
+
type: :auth_info
|
|
317
|
+
|
|
318
|
+
test from: :dtr_v220_payer_log_questionnaire_errors_support
|
|
319
|
+
end
|
|
320
|
+
end
|
|
321
|
+
end
|
|
322
|
+
end
|