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
data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/request/dtr_next_question_request_validation_test.rb
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
require_relative '../../../urls'
|
|
2
|
+
require_relative '../../../cross_suite/v2.2.0/multi_request_message_helper'
|
|
3
|
+
require_relative '../../short_circuit_interaction_verification'
|
|
4
|
+
require_relative '../../../cross_suite/v2.2.0/questionnaire_helper'
|
|
5
|
+
|
|
6
|
+
module DaVinciDTRTestKit
|
|
7
|
+
class DTRFullEHRV220NextQuestionRequestValidationTest < Inferno::Test
|
|
8
|
+
include URLs
|
|
9
|
+
include MultiRequestMessageHelper
|
|
10
|
+
include ShortCircuitInteractionVerification
|
|
11
|
+
include QuestionnaireHelper
|
|
12
|
+
|
|
13
|
+
id :dtr_full_ehr_v220_nq_request_validation
|
|
14
|
+
title 'Next Question request is valid'
|
|
15
|
+
description %(
|
|
16
|
+
This test validates the conformance of the client's request to the
|
|
17
|
+
[DTR Next Question Input Parameters](https://hl7.org/fhir/us/davinci-dtr/2.2.0/en/StructureDefinition-dtr-next-question-input-parameters.html)
|
|
18
|
+
structure. Because there is only a single in parameter, the request is allowed to be just a
|
|
19
|
+
[DTR Questionnaire Response for adaptive form](https://hl7.org/fhir/us/davinci-dtr/2.2.0/en/StructureDefinition-dtr-questionnaireresponse-adapt.html)
|
|
20
|
+
per [FHIR's operation request requirements](https://www.hl7.org/fhir/R4/operations.html#request).
|
|
21
|
+
|
|
22
|
+
The test verifies the presence of mandatory elements and that elements with required bindings contain appropriate
|
|
23
|
+
values. CodeableConcept element bindings will fail if none of their codings have a code/system belonging
|
|
24
|
+
to the bound ValueSet. Quantity, Coding, and code element bindings will fail if their code/system are not found in
|
|
25
|
+
the valueset.
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
def target_tags
|
|
29
|
+
tags = [CLIENT_NEXT_TAG]
|
|
30
|
+
tags << config.options[:dtr_workflow_tag] if config.options[:dtr_workflow_tag].present?
|
|
31
|
+
|
|
32
|
+
tags
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
run do
|
|
36
|
+
check_for_short_circuit(ok_message: config.options[:short_circuit_pass_message])
|
|
37
|
+
check_for_adaptive_short_circuit
|
|
38
|
+
|
|
39
|
+
requests = load_tagged_requests(*target_tags)
|
|
40
|
+
skip_if requests.blank?, 'A $next-question request must be made prior to running this test'
|
|
41
|
+
|
|
42
|
+
requests.each_with_index do |qp_request, request_index|
|
|
43
|
+
unless qp_request.url == next_url
|
|
44
|
+
add_request_message(
|
|
45
|
+
'error',
|
|
46
|
+
"Request made to wrong URL: #{qp_request.url}. Should instead be to #{next_url}.",
|
|
47
|
+
request_index
|
|
48
|
+
)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
input_resource = parse_fhir_request_entity(qp_request.request_body, 'Request', request_index)
|
|
52
|
+
unless input_resource.present?
|
|
53
|
+
add_request_message(
|
|
54
|
+
'error',
|
|
55
|
+
'Request does not contain a recognized FHIR resource',
|
|
56
|
+
request_index
|
|
57
|
+
)
|
|
58
|
+
next
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
if input_resource.is_a?(FHIR::QuestionnaireResponse)
|
|
62
|
+
resource_is_valid?(resource: input_resource,
|
|
63
|
+
profile_url: 'http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaireresponse-adapt|2.2.0',
|
|
64
|
+
message_prefix: request_prefix(request_index))
|
|
65
|
+
|
|
66
|
+
elsif input_resource.is_a?(FHIR::Parameters)
|
|
67
|
+
resource_is_valid?(resource: input_resource,
|
|
68
|
+
profile_url: 'http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-next-question-input-parameters|2.2.0',
|
|
69
|
+
message_prefix: request_prefix(request_index))
|
|
70
|
+
else
|
|
71
|
+
add_request_message(
|
|
72
|
+
'error',
|
|
73
|
+
'Request body contains an unexpected resource type: ' \
|
|
74
|
+
"expected Parameters or QuestionnaireResponse, got '#{input_resource.class}'",
|
|
75
|
+
request_index
|
|
76
|
+
)
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
assert_no_error_messages(
|
|
81
|
+
"#{requests_with_errors_prefix}Non-conformant $next-question request(s). See Messages for details."
|
|
82
|
+
)
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
require_relative '../../../urls'
|
|
2
|
+
require_relative '../../../cross_suite/v2.2.0/multi_request_message_helper'
|
|
3
|
+
require_relative '../../short_circuit_interaction_verification'
|
|
4
|
+
|
|
5
|
+
module DaVinciDTRTestKit
|
|
6
|
+
class DTRFullEHRV220QuestionnairePackageRequestValidationTest < Inferno::Test
|
|
7
|
+
include URLs
|
|
8
|
+
include MultiRequestMessageHelper
|
|
9
|
+
include ShortCircuitInteractionVerification
|
|
10
|
+
|
|
11
|
+
id :dtr_full_ehr_v220_qp_request_validation
|
|
12
|
+
title 'Questionnaire Package request is valid'
|
|
13
|
+
description %(
|
|
14
|
+
This test validates the conformance of the client's request to the
|
|
15
|
+
[DTR Questionnaire Package Input Parameters](https://hl7.org/fhir/us/davinci-dtr/2.2.0/en/StructureDefinition-dtr-qpackage-input-parameters.html)
|
|
16
|
+
structure.
|
|
17
|
+
|
|
18
|
+
The test verifies the presence of mandatory elements and that elements with required bindings contain appropriate
|
|
19
|
+
values. CodeableConcept element bindings will fail if none of their codings have a code/system belonging
|
|
20
|
+
to the bound ValueSet. Quantity, Coding, and code element bindings will fail if their code/system are not found in
|
|
21
|
+
the valueset.
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
def target_tags
|
|
25
|
+
tags = [QUESTIONNAIRE_PACKAGE_TAG]
|
|
26
|
+
tags << config.options[:dtr_workflow_tag] if config.options[:dtr_workflow_tag].present?
|
|
27
|
+
|
|
28
|
+
tags
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
run do
|
|
32
|
+
check_for_short_circuit(ok_message: config.options[:short_circuit_pass_message])
|
|
33
|
+
|
|
34
|
+
requests = load_tagged_requests(*target_tags)
|
|
35
|
+
skip_if requests.blank?, 'A Questionnaire Package request must be made prior to running this test'
|
|
36
|
+
|
|
37
|
+
requests.each_with_index do |qp_request, request_index|
|
|
38
|
+
unless qp_request.url == questionnaire_package_url
|
|
39
|
+
add_request_message(
|
|
40
|
+
'error',
|
|
41
|
+
"Request made to wrong URL: #{qp_request.url}. Should instead be to #{questionnaire_package_url}.",
|
|
42
|
+
request_index
|
|
43
|
+
)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
input_params = parse_fhir_request_entity(qp_request.request_body, 'Request', request_index)
|
|
47
|
+
unless input_params.present?
|
|
48
|
+
add_request_message(
|
|
49
|
+
'error',
|
|
50
|
+
'Request does not contain a recognized FHIR resource',
|
|
51
|
+
request_index
|
|
52
|
+
)
|
|
53
|
+
next
|
|
54
|
+
end
|
|
55
|
+
unless input_params.is_a?(FHIR::Parameters)
|
|
56
|
+
add_request_message(
|
|
57
|
+
'error',
|
|
58
|
+
'Request is not FHIR Parameters resource',
|
|
59
|
+
request_index
|
|
60
|
+
)
|
|
61
|
+
next
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
resource_is_valid?(resource: input_params,
|
|
65
|
+
profile_url: 'http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-qpackage-input-parameters|2.2.0',
|
|
66
|
+
message_prefix: request_prefix(request_index))
|
|
67
|
+
|
|
68
|
+
check_for_required_invocation_details(input_params, request_index)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
assert_no_error_messages(
|
|
72
|
+
"#{requests_with_errors_prefix}Non-conformant $questionnaire-package request(s). See Messages for details."
|
|
73
|
+
)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# - Zero or more canonicals specifying the URL and, (optionally) the version of the Questionnaire(s) to retrieve;
|
|
77
|
+
# - A CRD/PAS context ID, and/or
|
|
78
|
+
# - One or more Request or Encounter resources
|
|
79
|
+
def check_for_required_invocation_details(params, request_index)
|
|
80
|
+
return if params.parameter.any? { |param| ['questionnaire', 'order', 'context'].include?(param.name) }
|
|
81
|
+
|
|
82
|
+
add_request_message(
|
|
83
|
+
'error',
|
|
84
|
+
'Request does not contain a Questionnaire canonical, a request resource, or context from CRD or PAS.',
|
|
85
|
+
request_index
|
|
86
|
+
)
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/response/dtr_next_question_response_validation_test.rb
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
require_relative '../../../urls'
|
|
2
|
+
require_relative '../../../tags'
|
|
3
|
+
require_relative '../../../cross_suite/v2.2.0/multi_request_message_helper'
|
|
4
|
+
require_relative '../../short_circuit_interaction_verification'
|
|
5
|
+
require_relative '../../../cross_suite/v2.2.0/questionnaire_helper'
|
|
6
|
+
|
|
7
|
+
module DaVinciDTRTestKit
|
|
8
|
+
class DTRFullEHRV220NextQuestionResponseValidationTest < Inferno::Test
|
|
9
|
+
include URLs
|
|
10
|
+
include MultiRequestMessageHelper
|
|
11
|
+
include ShortCircuitInteractionVerification
|
|
12
|
+
include QuestionnaireHelper
|
|
13
|
+
|
|
14
|
+
id :dtr_full_ehr_v220_nq_response_validation
|
|
15
|
+
title 'Next Question responses are valid'
|
|
16
|
+
description %(
|
|
17
|
+
This test validates the conformance of the Inferno's simulated response to the
|
|
18
|
+
output of the [DTR Next Question Operation](https://hl7.org/fhir/us/davinci-dtr/2.2.0/en/OperationDefinition-DTR-Questionnaire-next-question.html).
|
|
19
|
+
Because there is a single out parameter named "return" and its type is a FHIR QuestionnaireResponse resource,
|
|
20
|
+
the [Parameters format is not used](https://www.hl7.org/fhir/R4/operations.html#response)
|
|
21
|
+
and the response is expected to be a raw QuestionnaireResponse conforming to the
|
|
22
|
+
[DTR Questionnaire Response for adaptive form](https://hl7.org/fhir/us/davinci-dtr/2.2.0/en/StructureDefinition-dtr-questionnaireresponse-adapt.html)
|
|
23
|
+
profile.
|
|
24
|
+
|
|
25
|
+
The test verifies the presence of mandatory elements and that elements with required bindings contain appropriate
|
|
26
|
+
values. CodeableConcept element bindings will fail if none of their codings have a code/system belonging
|
|
27
|
+
to the bound ValueSet. Quantity, Coding, and code element bindings will fail if their code/system are not found in
|
|
28
|
+
the valueset.
|
|
29
|
+
)
|
|
30
|
+
simulation_verification
|
|
31
|
+
|
|
32
|
+
def target_tags
|
|
33
|
+
tags = [CLIENT_NEXT_TAG]
|
|
34
|
+
tags << config.options[:dtr_workflow_tag] if config.options[:dtr_workflow_tag].present?
|
|
35
|
+
|
|
36
|
+
tags
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
run do
|
|
40
|
+
check_for_short_circuit(ok_message: config.options[:short_circuit_pass_message])
|
|
41
|
+
check_for_adaptive_short_circuit
|
|
42
|
+
|
|
43
|
+
requests = load_tagged_requests(*target_tags)
|
|
44
|
+
skip_if requests.blank?, 'A Next Question request must be made prior to running this test'
|
|
45
|
+
|
|
46
|
+
requests.each_with_index do |nq_request, request_index|
|
|
47
|
+
unless nq_request.url == next_url
|
|
48
|
+
add_request_message(
|
|
49
|
+
'error',
|
|
50
|
+
"Request made to wrong URL: #{nq_request.url}. Should instead be to #{next_url}.",
|
|
51
|
+
request_index
|
|
52
|
+
)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
response_body = parse_fhir_request_entity(nq_request.response_body, 'Response', request_index)
|
|
56
|
+
unless response_body.present?
|
|
57
|
+
add_request_message(
|
|
58
|
+
'error',
|
|
59
|
+
'Response does not contain a recognized FHIR resource',
|
|
60
|
+
request_index
|
|
61
|
+
)
|
|
62
|
+
next
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
questionnaire_response = questionnaire_response_from_next_question_response(response_body)
|
|
66
|
+
if questionnaire_response.present?
|
|
67
|
+
resource_is_valid?(validator: :no_unknown_extensions,
|
|
68
|
+
resource: questionnaire_response,
|
|
69
|
+
profile_url: 'http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaireresponse-adapt|2.2.0',
|
|
70
|
+
message_prefix: request_prefix(request_index))
|
|
71
|
+
else
|
|
72
|
+
add_request_message(
|
|
73
|
+
'error',
|
|
74
|
+
'Response does not contain a QuestionnaireResponse',
|
|
75
|
+
request_index
|
|
76
|
+
)
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
assert_no_error_messages(
|
|
81
|
+
"#{requests_with_errors_prefix}Non-conformant $next-question response(s). See Messages for details."
|
|
82
|
+
)
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
require_relative '../../../urls'
|
|
2
|
+
require_relative '../../../tags'
|
|
3
|
+
require_relative '../../../cross_suite/v2.2.0/multi_request_message_helper'
|
|
4
|
+
require_relative '../../short_circuit_interaction_verification'
|
|
5
|
+
|
|
6
|
+
module DaVinciDTRTestKit
|
|
7
|
+
class DTRFullEHRV220QuestionnairePackageResponseValidationTest < Inferno::Test
|
|
8
|
+
include URLs
|
|
9
|
+
include MultiRequestMessageHelper
|
|
10
|
+
include ShortCircuitInteractionVerification
|
|
11
|
+
|
|
12
|
+
id :dtr_full_ehr_v220_qp_response_validation
|
|
13
|
+
title 'Questionnaire Package response is valid'
|
|
14
|
+
description %(
|
|
15
|
+
This test validates the conformance of the Inferno's simulated response to the
|
|
16
|
+
[DTR Questionnaire Package Output Parameters](https://hl7.org/fhir/us/davinci-dtr/2.2.0/en/StructureDefinition-dtr-qpackage-output-parameters.html)
|
|
17
|
+
structure.
|
|
18
|
+
|
|
19
|
+
The test verifies the presence of mandatory elements and that elements with required bindings contain appropriate
|
|
20
|
+
values. CodeableConcept element bindings will fail if none of their codings have a code/system belonging
|
|
21
|
+
to the bound ValueSet. Quantity, Coding, and code element bindings will fail if their code/system are not found in
|
|
22
|
+
the valueset.
|
|
23
|
+
)
|
|
24
|
+
simulation_verification
|
|
25
|
+
|
|
26
|
+
def target_tags
|
|
27
|
+
tags = [QUESTIONNAIRE_PACKAGE_TAG]
|
|
28
|
+
tags << config.options[:dtr_workflow_tag] if config.options[:dtr_workflow_tag].present?
|
|
29
|
+
|
|
30
|
+
tags
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
run do
|
|
34
|
+
check_for_short_circuit(ok_message: config.options[:short_circuit_pass_message])
|
|
35
|
+
|
|
36
|
+
requests = load_tagged_requests(*target_tags)
|
|
37
|
+
skip_if requests.blank?, 'A Questionnaire Package request must be made prior to running this test'
|
|
38
|
+
|
|
39
|
+
requests.each_with_index do |qp_request, request_index|
|
|
40
|
+
unless qp_request.url == questionnaire_package_url
|
|
41
|
+
add_request_message(
|
|
42
|
+
'error',
|
|
43
|
+
"Request made to wrong URL: #{qp_request.url}. Should instead be to #{questionnaire_package_url}.",
|
|
44
|
+
request_index
|
|
45
|
+
)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
output_params = parse_fhir_request_entity(qp_request.response_body, 'Response', request_index)
|
|
49
|
+
unless output_params.present?
|
|
50
|
+
add_request_message(
|
|
51
|
+
'error',
|
|
52
|
+
'Response does not contain a recognized FHIR resource',
|
|
53
|
+
request_index
|
|
54
|
+
)
|
|
55
|
+
next
|
|
56
|
+
end
|
|
57
|
+
unless output_params.is_a?(FHIR::Parameters)
|
|
58
|
+
add_request_message(
|
|
59
|
+
'error',
|
|
60
|
+
'Response is not FHIR Parameters resource',
|
|
61
|
+
request_index
|
|
62
|
+
)
|
|
63
|
+
next
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
resource_is_valid?(validator: :no_unknown_extensions,
|
|
67
|
+
resource: output_params,
|
|
68
|
+
profile_url: 'http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-qpackage-output-parameters|2.2.0',
|
|
69
|
+
message_prefix: request_prefix(request_index))
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
assert_no_error_messages(
|
|
73
|
+
"#{requests_with_errors_prefix}Non-conformant $questionnaire-package response(s). See Messages for details."
|
|
74
|
+
)
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/workflows/dtr_full_ehr_workflow_adaptive_group.rb
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
require_relative '../dtr_full_ehr_abstract_adaptive_group'
|
|
2
|
+
|
|
3
|
+
module DaVinciDTRTestKit
|
|
4
|
+
class DTRFullEHRV220WorkflowAdaptive < DTRFullEHRV220AbstractAdaptive
|
|
5
|
+
title 'Adaptive Questionnaire'
|
|
6
|
+
id :dtr_full_ehr_v220_workflow_adaptive
|
|
7
|
+
description <<~DESCRIPTION
|
|
8
|
+
During this group, the DTR Full EHR will demonstrate its ability to complete
|
|
9
|
+
an adaptive Questionnaire.
|
|
10
|
+
DESCRIPTION
|
|
11
|
+
run_as_group
|
|
12
|
+
|
|
13
|
+
config(
|
|
14
|
+
options: {
|
|
15
|
+
qp_single_use: true,
|
|
16
|
+
dtr_workflow_tag: 'adaptive',
|
|
17
|
+
qp_response_template_fixture: File.join('dinner_adaptive',
|
|
18
|
+
'parameters_questionnaire_dinner_order_adaptive.json'),
|
|
19
|
+
nq_questionnaire_template_fixture: File.join('dinner_adaptive',
|
|
20
|
+
'dinner_order_adaptive_next_question_template.json')
|
|
21
|
+
}
|
|
22
|
+
)
|
|
23
|
+
end
|
|
24
|
+
end
|
data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/workflows/dtr_full_ehr_workflow_standard_group.rb
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
require_relative '../dtr_full_ehr_abstract_standard_group'
|
|
2
|
+
|
|
3
|
+
module DaVinciDTRTestKit
|
|
4
|
+
class DTRFullEHRV220WorkflowStandard < DTRFullEHRV220AbstractStandard
|
|
5
|
+
title 'Standard Questionnaire'
|
|
6
|
+
id :dtr_full_ehr_v220_workflow_standard
|
|
7
|
+
description <<~DESCRIPTION
|
|
8
|
+
During this group, the DTR Full EHR will demonstrate its ability to complete
|
|
9
|
+
a standard Questionnaire.
|
|
10
|
+
DESCRIPTION
|
|
11
|
+
run_as_group
|
|
12
|
+
|
|
13
|
+
config(
|
|
14
|
+
options: {
|
|
15
|
+
qp_single_use: true,
|
|
16
|
+
dtr_workflow_tag: 'static',
|
|
17
|
+
qp_response_template_fixture: File.join('dinner_static', 'parameters_questionnaire_dinner_order_static.json')
|
|
18
|
+
}
|
|
19
|
+
)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module DaVinciDTRTestKit
|
|
2
|
+
class Generator
|
|
3
|
+
class IGMetadata
|
|
4
|
+
attr_accessor :ig_version, :profiles
|
|
5
|
+
|
|
6
|
+
def to_hash
|
|
7
|
+
{
|
|
8
|
+
ig_version:,
|
|
9
|
+
profiles: profiles.map(&:to_hash)
|
|
10
|
+
}
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# Directory/file-safe identifier for a profile. DTR profile ids are already
|
|
14
|
+
# unique per resource type (eg dtr-questionnaireresponse vs
|
|
15
|
+
# dtr-questionnaireresponse-adapt), so the profile url's own id segment is sufficient.
|
|
16
|
+
def snake_case_for_profile(profile_metadata)
|
|
17
|
+
profile_metadata.profile_url.split('StructureDefinition/').last.underscore
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
require 'inferno/dsl/must_support_metadata_extractor'
|
|
2
|
+
require 'inferno/dsl/profile_metadata'
|
|
3
|
+
|
|
4
|
+
module DaVinciDTRTestKit
|
|
5
|
+
class Generator
|
|
6
|
+
class ProfileMetadataExtractor
|
|
7
|
+
attr_accessor :profile_url, :ig_resources, :element_scope
|
|
8
|
+
|
|
9
|
+
def initialize(profile_url, ig_resources, element_scope = 'snapshot')
|
|
10
|
+
self.profile_url = profile_url
|
|
11
|
+
self.ig_resources = ig_resources
|
|
12
|
+
self.element_scope = element_scope
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def profile_metadata
|
|
16
|
+
@profile_metadata ||=
|
|
17
|
+
Inferno::DSL::ProfileMetadata.new(
|
|
18
|
+
resource:,
|
|
19
|
+
profile_url:,
|
|
20
|
+
profile_name:,
|
|
21
|
+
profile_version:,
|
|
22
|
+
must_supports:
|
|
23
|
+
)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def profile
|
|
27
|
+
@profile ||= ig_resources.profile_by_url(profile_url)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def profile_elements
|
|
31
|
+
@profile_elements ||= element_scope == 'snapshot' ? profile.snapshot.element : profile.differential.element
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def resource
|
|
35
|
+
profile.type
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def profile_name
|
|
39
|
+
profile.title.gsub(' ', ' ')
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def profile_version
|
|
43
|
+
profile.version
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def must_support_metadata_extractor
|
|
47
|
+
@must_support_metadata_extractor ||=
|
|
48
|
+
Inferno::DSL::MustSupportMetadataExtractor.new(profile_elements, profile, resource, ig_resources)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def must_supports
|
|
52
|
+
@must_supports ||=
|
|
53
|
+
must_support_metadata_extractor.must_supports
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
require 'active_support/all'
|
|
2
|
+
require 'inferno/ext/fhir_models'
|
|
3
|
+
require 'inferno/entities/entity'
|
|
4
|
+
require 'inferno/entities/attributes'
|
|
5
|
+
require 'inferno/entities/ig'
|
|
6
|
+
|
|
7
|
+
require_relative 'generator/ig_metadata'
|
|
8
|
+
require_relative 'generator/profile_metadata_extractor'
|
|
9
|
+
|
|
10
|
+
module DaVinciDTRTestKit
|
|
11
|
+
# Generates profile metadata files (used by the test kit's must support tests)
|
|
12
|
+
# from a DTR IG package into cross_suite/generated/<ig_version>.
|
|
13
|
+
class Generator
|
|
14
|
+
TARGET_IG_VERSIONS = ['2.2.0'].freeze
|
|
15
|
+
|
|
16
|
+
# Must support checks are scoped to only differential for standard and adaptive
|
|
17
|
+
TARGET_PROFILES_AND_ELEMENT_SCOPE = {
|
|
18
|
+
'http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/DTR-QPackageBundle' => 'snapshot',
|
|
19
|
+
'http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-qpackage-output-parameters' => 'snapshot',
|
|
20
|
+
'http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-base-questionnaire' => 'snapshot',
|
|
21
|
+
'http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-adapt' => 'differential',
|
|
22
|
+
'http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-adapt-search' => 'snapshot',
|
|
23
|
+
'http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-std-questionnaire' => 'differential'
|
|
24
|
+
}.freeze
|
|
25
|
+
|
|
26
|
+
def self.generate
|
|
27
|
+
ig_packages = Dir.glob(File.join(Dir.pwd, 'lib', 'davinci_dtr_test_kit', 'igs', '*.tgz'))
|
|
28
|
+
|
|
29
|
+
ig_packages.each do |ig_package|
|
|
30
|
+
generator = new(ig_package)
|
|
31
|
+
next unless TARGET_IG_VERSIONS.include?(generator.ig_version_from_file_name)
|
|
32
|
+
|
|
33
|
+
generator.generate
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
attr_accessor :ig_resources, :ig_metadata, :ig_file_name
|
|
38
|
+
|
|
39
|
+
def initialize(ig_file_name)
|
|
40
|
+
self.ig_file_name = ig_file_name
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def ig_version_from_file_name
|
|
44
|
+
File.basename(ig_file_name, '.tgz').split('_').last
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def generate
|
|
48
|
+
puts "Generating profile metadata for IG #{File.basename(ig_file_name)}"
|
|
49
|
+
load_ig_package
|
|
50
|
+
extract_metadata
|
|
51
|
+
write_profile_metadata
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def load_ig_package
|
|
55
|
+
self.ig_resources = Inferno::Entities::IG.from_file(
|
|
56
|
+
ig_file_name,
|
|
57
|
+
standalone_resources_directory: ig_file_name.chomp('.tgz')
|
|
58
|
+
)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# DTR profiles analyzed include the Questionnaires
|
|
62
|
+
def target_profiles
|
|
63
|
+
ig_resources.resources_by_type['StructureDefinition'].select do |structure_definition|
|
|
64
|
+
TARGET_PROFILES_AND_ELEMENT_SCOPE.key?(structure_definition.url)
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def extract_metadata
|
|
69
|
+
self.ig_metadata = IGMetadata.new
|
|
70
|
+
ig_metadata.ig_version = "v#{ig_resources.ig_resource.version}"
|
|
71
|
+
ig_metadata.profiles = target_profiles.map do |profile|
|
|
72
|
+
element_scope = TARGET_PROFILES_AND_ELEMENT_SCOPE[profile.url]
|
|
73
|
+
profile_metadata = ProfileMetadataExtractor.new(profile.url, ig_resources, element_scope).profile_metadata
|
|
74
|
+
|
|
75
|
+
# handle gap when looking at differential
|
|
76
|
+
profile_metadata.must_supports[:recursive_elements] << 'item' if element_scope == 'differential'
|
|
77
|
+
add_parameters_slice_discriminators(profile_metadata) if questionnaire_package_output_parameters?(profile)
|
|
78
|
+
|
|
79
|
+
profile_metadata
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
FileUtils.mkdir_p(base_output_dir)
|
|
83
|
+
File.write(File.join(base_output_dir, 'metadata.yml'), YAML.dump(ig_metadata.to_hash))
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def base_output_dir
|
|
87
|
+
File.join(__dir__, 'cross_suite', 'generated', ig_metadata.ig_version)
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def write_profile_metadata
|
|
91
|
+
ig_metadata.profiles.each do |profile_metadata|
|
|
92
|
+
metadata_file_dir = File.join(base_output_dir, ig_metadata.snake_case_for_profile(profile_metadata))
|
|
93
|
+
FileUtils.mkdir_p(metadata_file_dir)
|
|
94
|
+
File.write(File.join(metadata_file_dir, 'metadata.yml'), YAML.dump(profile_metadata.to_hash))
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def questionnaire_package_output_parameters?(profile)
|
|
99
|
+
profile.url == 'http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-qpackage-output-parameters'
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
# This is a workaround for Inferno Core treating slice discriminators defined with `patternString` as unsupported.
|
|
103
|
+
# The QuestionnairePackage Output Parameters profile slices `Parameters.parameter` by `name` (`packagebundle`
|
|
104
|
+
# and `outcome`), so replace only unsupported discriminators with equivalent value metadata. If Core gets updated
|
|
105
|
+
# to support `patternString`, this method becomes a no-op and can be removed.
|
|
106
|
+
def add_parameters_slice_discriminators(profile_metadata)
|
|
107
|
+
profile_metadata.must_supports[:slices].each do |slice|
|
|
108
|
+
next unless slice.dig(:discriminator, :type) == 'unsupported'
|
|
109
|
+
|
|
110
|
+
slice[:discriminator] = {
|
|
111
|
+
type: 'value',
|
|
112
|
+
values: [{ path: 'name', value: slice[:slice_name] }]
|
|
113
|
+
}
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
end
|
|
Binary file
|
data/lib/davinci_dtr_test_kit/{dtr_light_ehr_suite.rb → light_ehr/v2.0.1/dtr_light_ehr_suite.rb}
RENAMED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
require 'us_core_test_kit'
|
|
2
2
|
require 'tls_test_kit'
|
|
3
|
-
require_relative '
|
|
4
|
-
require_relative 'dtr_options'
|
|
3
|
+
require_relative '../dtr_light_ehr_options'
|
|
5
4
|
require_relative 'profiles/questionnaire_response_group'
|
|
6
5
|
require_relative 'profiles/coverage_group'
|
|
7
6
|
require_relative 'profiles/communication_request_group'
|
|
@@ -12,9 +11,9 @@ require_relative 'profiles/nutrition_order_group'
|
|
|
12
11
|
require_relative 'profiles/service_request_group'
|
|
13
12
|
require_relative 'profiles/task_group'
|
|
14
13
|
require_relative 'profiles/vision_prescription_group'
|
|
15
|
-
require_relative '
|
|
16
|
-
require_relative 'endpoints/
|
|
17
|
-
require_relative '
|
|
14
|
+
require_relative 'dtr_smart_ehr_launch'
|
|
15
|
+
require_relative '../endpoints/light_ehr_supported_payer_endpoint'
|
|
16
|
+
require_relative 'dtr_light_ehr_supported_endpoints_group'
|
|
18
17
|
require 'smart_app_launch/smart_stu1_suite'
|
|
19
18
|
require 'smart_app_launch/smart_stu2_suite'
|
|
20
19
|
require 'us_core_test_kit/generated/v3.1.1/us_core_test_suite'
|
|
@@ -22,8 +21,8 @@ require 'us_core_test_kit/generated/v3.1.1/us_core_test_suite'
|
|
|
22
21
|
module DaVinciDTRTestKit
|
|
23
22
|
class DTRLightEHRSuite < Inferno::TestSuite
|
|
24
23
|
id :dtr_light_ehr
|
|
25
|
-
title 'Da Vinci DTR Light EHR Test Suite'
|
|
26
|
-
description File.read(File.join(__dir__, '
|
|
24
|
+
title 'Da Vinci DTR Light EHR Test Suite v2.0.1'
|
|
25
|
+
description File.read(File.join(__dir__, 'dtr_light_ehr_suite_description_v201.md'))
|
|
27
26
|
|
|
28
27
|
links [
|
|
29
28
|
{
|
|
@@ -104,7 +103,7 @@ module DaVinciDTRTestKit
|
|
|
104
103
|
)
|
|
105
104
|
|
|
106
105
|
group from: :smart_discovery_stu2 do
|
|
107
|
-
required_suite_options
|
|
106
|
+
required_suite_options DTRLightEHROptions::SMART_2_REQUIREMENT
|
|
108
107
|
run_as_group
|
|
109
108
|
|
|
110
109
|
test from: :tls_version_test do
|
|
@@ -129,7 +128,7 @@ module DaVinciDTRTestKit
|
|
|
129
128
|
end
|
|
130
129
|
|
|
131
130
|
group from: :dtr_smart_ehr_launch,
|
|
132
|
-
required_suite_options:
|
|
131
|
+
required_suite_options: DTRLightEHROptions::SMART_2_REQUIREMENT,
|
|
133
132
|
run_as_group: true,
|
|
134
133
|
config: {
|
|
135
134
|
outputs: {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
require_relative 'dtr_light_ehr_supported_payers_config_test'
|
|
2
|
-
require_relative 'dtr_light_ehr_supported_payers_accept_header_test'
|
|
3
|
-
require_relative 'dtr_light_ehr_supported_payers_endpoint_test'
|
|
4
|
-
require_relative 'dtr_light_ehr_supported_payers_user_response_test'
|
|
5
|
-
require_relative 'dtr_light_ehr_supported_payers_use_test'
|
|
1
|
+
require_relative 'supported_endpoints/dtr_light_ehr_supported_payers_config_test'
|
|
2
|
+
require_relative 'supported_endpoints/dtr_light_ehr_supported_payers_accept_header_test'
|
|
3
|
+
require_relative 'supported_endpoints/dtr_light_ehr_supported_payers_endpoint_test'
|
|
4
|
+
require_relative 'supported_endpoints/dtr_light_ehr_supported_payers_user_response_test'
|
|
5
|
+
require_relative 'supported_endpoints/dtr_light_ehr_supported_payers_use_test'
|
|
6
6
|
|
|
7
7
|
module DaVinciDTRTestKit
|
|
8
8
|
class DTRLightEHRSupportedEndpointsGroup < Inferno::TestGroup
|
data/lib/davinci_dtr_test_kit/{client_groups/light_ehr → light_ehr/v2.0.1}/dtr_smart_ehr_launch.rb
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
require_relative 'fhir_launch_context_test'
|
|
2
|
-
require_relative 'fhir_context_coverage_test'
|
|
3
|
-
require_relative 'fhir_context_references_test'
|
|
1
|
+
require_relative 'smart_ehr_launch/fhir_launch_context_test'
|
|
2
|
+
require_relative 'smart_ehr_launch/fhir_context_coverage_test'
|
|
3
|
+
require_relative 'smart_ehr_launch/fhir_context_references_test'
|
|
4
4
|
require 'smart_app_launch/ehr_launch_group_stu2'
|
|
5
5
|
|
|
6
6
|
module DaVinciDTRTestKit
|