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.
Files changed (311) hide show
  1. checksums.yaml +4 -4
  2. data/config/presets/v220_full_ehr_suite_run_against_payer_suite.json.erb +19 -0
  3. data/config/presets/v220_payer_suite_run_against_full_ehr_suite.json.erb +76 -0
  4. data/lib/davinci_dtr_test_kit/cross_suite/fhirpath_utils.rb +52 -0
  5. data/lib/davinci_dtr_test_kit/cross_suite/generated/v2.2.0/dtr_base_questionnaire/metadata.yml +212 -0
  6. data/lib/davinci_dtr_test_kit/cross_suite/generated/v2.2.0/dtr_q_package_bundle/metadata.yml +39 -0
  7. data/lib/davinci_dtr_test_kit/cross_suite/generated/v2.2.0/dtr_qpackage_output_parameters/metadata.yml +30 -0
  8. data/lib/davinci_dtr_test_kit/cross_suite/generated/v2.2.0/dtr_questionnaire_adapt/metadata.yml +17 -0
  9. data/lib/davinci_dtr_test_kit/cross_suite/generated/v2.2.0/dtr_questionnaire_adapt_search/metadata.yml +91 -0
  10. data/lib/davinci_dtr_test_kit/cross_suite/generated/v2.2.0/dtr_std_questionnaire/metadata.yml +17 -0
  11. data/lib/davinci_dtr_test_kit/cross_suite/generated/v2.2.0/metadata.yml +403 -0
  12. data/lib/davinci_dtr_test_kit/cross_suite/generated_profile_metadata.rb +22 -0
  13. data/lib/davinci_dtr_test_kit/cross_suite/response_selection_utils.rb +85 -0
  14. data/lib/davinci_dtr_test_kit/cross_suite/v2.2.0/dtr_conformance_verification.rb +21 -0
  15. data/lib/davinci_dtr_test_kit/cross_suite/v2.2.0/multi_request_message_helper.rb +35 -0
  16. data/lib/davinci_dtr_test_kit/cross_suite/v2.2.0/questionnaire_helper.rb +162 -0
  17. data/lib/davinci_dtr_test_kit/{dtr_client_options.rb → full_ehr/dtr_full_ehr_options.rb} +1 -1
  18. data/lib/davinci_dtr_test_kit/{endpoints → full_ehr/endpoints}/mock_payer.rb +9 -3
  19. data/lib/davinci_dtr_test_kit/{endpoints → full_ehr/endpoints}/mock_udap_smart_server/token_endpoint.rb +2 -2
  20. data/lib/davinci_dtr_test_kit/full_ehr/fixture_loader.rb +37 -0
  21. data/lib/davinci_dtr_test_kit/full_ehr/fixtures/dinner_adaptive/dinner_order_adaptive_next_question_template.json +243 -0
  22. data/lib/davinci_dtr_test_kit/full_ehr/fixtures/dinner_adaptive/parameters_questionnaire_dinner_order_adaptive.json +104 -0
  23. data/lib/davinci_dtr_test_kit/full_ehr/fixtures/dinner_static/parameters_questionnaire_dinner_order_static.json +291 -0
  24. data/lib/davinci_dtr_test_kit/full_ehr/fixtures/empty_templates/next_question_template_empty.json +1 -0
  25. data/lib/davinci_dtr_test_kit/full_ehr/fixtures/empty_templates/parameters_questionnaire_package_empty.json +9 -0
  26. data/lib/davinci_dtr_test_kit/full_ehr/short_circuit_interaction_verification.rb +73 -0
  27. 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
  28. 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
  29. 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
  30. 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
  31. 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
  32. 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
  33. 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
  34. 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
  35. 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
  36. 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
  37. 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
  38. data/lib/davinci_dtr_test_kit/{dtr_full_ehr_suite.rb → full_ehr/v2.0.1/dtr_full_ehr_suite.rb} +19 -20
  39. 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
  40. 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
  41. 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
  42. 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
  43. data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/must_support/dtr_must_support_attestation_test.rb +1 -1
  44. data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/must_support/dtr_questionnaire_must_support_test.rb +1 -1
  45. data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/payer_registration/configuration_display_smart_test.rb +1 -1
  46. data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/payer_registration/configuration_display_udap_test.rb +1 -1
  47. data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_custom_questionnaire_expressions_test.rb +1 -1
  48. data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_custom_questionnaire_extensions_test.rb +1 -1
  49. data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_custom_questionnaire_libraries_test.rb +1 -1
  50. data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_custom_questionnaire_package_validation_test.rb +1 -1
  51. 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
  52. 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
  53. 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
  54. 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
  55. 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
  56. 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
  57. 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
  58. 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
  59. data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_prepopulation_attestation_test.rb +1 -1
  60. data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_prepopulation_override_attestation_test.rb +1 -1
  61. data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_questionnaire_package_request_validation_test.rb +1 -1
  62. data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_questionnaire_response_basic_conformance_test.rb +2 -2
  63. data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_questionnaire_response_prepopulation_test.rb +1 -1
  64. data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_rendering_attestation_test.rb +1 -1
  65. 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
  66. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/dtr_full_ehr_abstract_adaptive_group.rb +87 -0
  67. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/dtr_full_ehr_abstract_standard_group.rb +59 -0
  68. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/dtr_full_ehr_suite.rb +145 -0
  69. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/dtr_full_ehr_suite_description_v220.md +254 -0
  70. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/full_ehr_next_question_endpoint.rb +391 -0
  71. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/full_ehr_questionnaire_package_endpoint.rb +206 -0
  72. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/interaction/adaptive_questionnaires_completed_test.rb +108 -0
  73. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/interaction/interaction_wait_test.rb +177 -0
  74. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/interaction/ui_display_and_interaction_attestation_test.rb +132 -0
  75. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/must_support/dtr_additional_questionnaires_interaction_group.rb +74 -0
  76. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/must_support/dtr_questionnaire_adaptive_must_support_test.rb +45 -0
  77. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/must_support/dtr_questionnaire_base_must_support_test.rb +43 -0
  78. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/must_support/dtr_questionnaire_standard_must_support_test.rb +45 -0
  79. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/next_question_template_questionnaires.rb +21 -0
  80. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/request/dtr_next_question_request_validation_test.rb +85 -0
  81. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/request/dtr_questionnaire_package_request_validation_test.rb +89 -0
  82. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/response/dtr_next_question_response_validation_test.rb +85 -0
  83. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/response/dtr_questionnaire_package_response_validation_test.rb +77 -0
  84. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/workflows/dtr_full_ehr_workflow_adaptive_group.rb +24 -0
  85. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/workflows/dtr_full_ehr_workflow_standard_group.rb +21 -0
  86. data/lib/davinci_dtr_test_kit/generator/ig_metadata.rb +21 -0
  87. data/lib/davinci_dtr_test_kit/generator/profile_metadata_extractor.rb +57 -0
  88. data/lib/davinci_dtr_test_kit/generator.rb +117 -0
  89. data/lib/davinci_dtr_test_kit/igs/davinci_dtr_2.2.0.tgz +0 -0
  90. data/lib/davinci_dtr_test_kit/{dtr_options.rb → light_ehr/dtr_light_ehr_options.rb} +1 -1
  91. data/lib/davinci_dtr_test_kit/{dtr_light_ehr_suite.rb → light_ehr/v2.0.1/dtr_light_ehr_suite.rb} +8 -9
  92. data/lib/davinci_dtr_test_kit/{client_groups/light_ehr → light_ehr/v2.0.1}/dtr_light_ehr_supported_endpoints_group.rb +5 -5
  93. data/lib/davinci_dtr_test_kit/{client_groups/light_ehr → light_ehr/v2.0.1}/dtr_smart_ehr_launch.rb +3 -3
  94. data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/communication_request/communication_request_read.rb +1 -1
  95. data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/coverage/coverage_read.rb +1 -1
  96. data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/device_request/device_request_read.rb +1 -1
  97. data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/encounter/encounter_read.rb +1 -1
  98. data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/medication_request/medication_request_read.rb +1 -1
  99. data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/nutrition_order/nutrition_order_read.rb +1 -1
  100. data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/questionnaire_response/questionnaire_response_create.rb +1 -1
  101. data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/questionnaire_response/questionnaire_response_update.rb +1 -1
  102. data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/service_request/service_request_read.rb +1 -1
  103. data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/task/task_create.rb +1 -1
  104. data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/task/task_read.rb +1 -1
  105. data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/task/task_update.rb +1 -1
  106. data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/vision_prescription/vision_prescription_read.rb +1 -1
  107. 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
  108. 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
  109. 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
  110. 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
  111. 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
  112. data/lib/davinci_dtr_test_kit/metadata.rb +13 -68
  113. data/lib/davinci_dtr_test_kit/requirements/davinci_dtr_test_kit_requirements.csv +216 -0
  114. data/lib/davinci_dtr_test_kit/requirements/generated/dtr_full_ehr_requirements_coverage.csv +1 -1
  115. data/lib/davinci_dtr_test_kit/requirements/generated/dtr_full_ehr_v220_requirements_coverage.csv +1 -0
  116. data/lib/davinci_dtr_test_kit/requirements/generated/dtr_light_ehr_requirements_coverage.csv +1 -1
  117. data/lib/davinci_dtr_test_kit/requirements/generated/dtr_payer_server_requirements_coverage.csv +1 -1
  118. data/lib/davinci_dtr_test_kit/requirements/generated/dtr_payer_server_v220_requirements_coverage.csv +114 -0
  119. data/lib/davinci_dtr_test_kit/requirements/generated/dtr_smart_app_requirements_coverage.csv +1 -1
  120. data/lib/davinci_dtr_test_kit/requirements/hl7.fhir.us.davinci-dtr_2.2.0_requirements.xlsx +0 -0
  121. data/lib/davinci_dtr_test_kit/{endpoints/mock_payer → server/endpoints}/next_question_proxy_endpoint.rb +2 -0
  122. data/lib/davinci_dtr_test_kit/{endpoints/mock_payer → server/endpoints}/questionnaire_package_proxy_endpoint.rb +2 -0
  123. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/adaptive_form_libraries_test.rb +2 -1
  124. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/adaptive_form_questionnaire_expressions_test.rb +2 -1
  125. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/adaptive_form_questionnaire_extensions_test.rb +2 -1
  126. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/adaptive_next_questionnaire_expressions_test.rb +2 -1
  127. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/adaptive_next_questionnaire_extensions_test.rb +2 -1
  128. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/payer_server_adaptive_request_test.rb +1 -1
  129. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/payer_server_adaptive_request_validation_test.rb +2 -1
  130. 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
  131. 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
  132. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/payer_server_adaptive_response_validation_test.rb +3 -2
  133. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/payer_server_next_request_validation_test.rb +2 -1
  134. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/payer_server_next_response_validation_test.rb +2 -1
  135. data/lib/davinci_dtr_test_kit/{dtr_payer_server_suite.rb → server/v2.0.1/dtr_payer_server_suite.rb} +9 -10
  136. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1}/payer_server_adaptive_group.rb +13 -13
  137. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1}/payer_server_static_group.rb +6 -6
  138. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/static_forms}/static_form_libraries_test.rb +2 -1
  139. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/static_forms}/static_form_questionnaire_expressions_test.rb +2 -1
  140. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/static_forms}/static_form_questionnaire_extensions_test.rb +2 -1
  141. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/static_forms}/static_form_request_test.rb +3 -2
  142. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/static_forms}/static_form_request_validation_test.rb +3 -2
  143. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/static_forms}/static_form_response_validation_test.rb +4 -3
  144. data/lib/davinci_dtr_test_kit/server/v2.2.0/client_simulation.rb +297 -0
  145. data/lib/davinci_dtr_test_kit/server/v2.2.0/dtr_payer_server_capability_statement_test.rb +73 -0
  146. data/lib/davinci_dtr_test_kit/server/v2.2.0/dtr_payer_server_suite.rb +322 -0
  147. data/lib/davinci_dtr_test_kit/server/v2.2.0/dtr_payer_server_suite_description_v220.md +37 -0
  148. data/lib/davinci_dtr_test_kit/server/v2.2.0/interaction_test.rb +97 -0
  149. data/lib/davinci_dtr_test_kit/server/v2.2.0/log_questionnaire_errors_support_test.rb +57 -0
  150. data/lib/davinci_dtr_test_kit/server/v2.2.0/must_support/questionnaire_adaptive_must_support_test.rb +47 -0
  151. data/lib/davinci_dtr_test_kit/server/v2.2.0/must_support/questionnaire_adaptive_search_must_support_test.rb +40 -0
  152. data/lib/davinci_dtr_test_kit/server/v2.2.0/must_support/questionnaire_base_must_support_test.rb +40 -0
  153. data/lib/davinci_dtr_test_kit/server/v2.2.0/must_support/questionnaire_package_bundle_must_support_test.rb +38 -0
  154. data/lib/davinci_dtr_test_kit/server/v2.2.0/must_support/questionnaire_package_output_parameters_must_support_test.rb +37 -0
  155. data/lib/davinci_dtr_test_kit/server/v2.2.0/must_support/questionnaire_standard_must_support_test.rb +39 -0
  156. data/lib/davinci_dtr_test_kit/server/v2.2.0/next_question_request_validation_test.rb +45 -0
  157. data/lib/davinci_dtr_test_kit/server/v2.2.0/next_question_support/adaptive_questionnaire_endpoint_test.rb +98 -0
  158. data/lib/davinci_dtr_test_kit/server/v2.2.0/next_question_support/invalid_questionnaire_response_test.rb +43 -0
  159. data/lib/davinci_dtr_test_kit/server/v2.2.0/next_question_support/next_contained_questionnaire_response_references_test.rb +46 -0
  160. data/lib/davinci_dtr_test_kit/server/v2.2.0/next_question_support/next_question_response_references_test.rb +56 -0
  161. data/lib/davinci_dtr_test_kit/server/v2.2.0/next_question_support/next_question_response_validation_test.rb +67 -0
  162. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_design/contained_binary_test.rb +58 -0
  163. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_design/contained_binary_validation.rb +128 -0
  164. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_design/cql_library_validation_test.rb +58 -0
  165. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_design/questionnaire_design_support.rb +65 -0
  166. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_design/questionnaire_expression_elm_test.rb +81 -0
  167. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_design/questionnaire_expression_language_test.rb +63 -0
  168. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_design/questionnaire_prepopulation_test.rb +42 -0
  169. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_design/questionnaire_relevance_logic_test.rb +40 -0
  170. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_operation_validation.rb +440 -0
  171. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_request_validation_test.rb +42 -0
  172. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/adaptive_questionnaire_response_contained_questionnaire_test.rb +127 -0
  173. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/adaptive_questionnaire_response_validation_test.rb +61 -0
  174. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/contained_questionnaire_response_references_test.rb +42 -0
  175. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/dtr_server_no_custom_extension_test.rb +184 -0
  176. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/dtr_server_questionnaire_not_found_test.rb +76 -0
  177. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/dtr_server_questionnaire_package_contents_test.rb +89 -0
  178. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/initial_questionnaire_response_test.rb +132 -0
  179. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/questionnaire_package_input_type_test.rb +110 -0
  180. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/questionnaire_references_version_specific_test.rb +79 -0
  181. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/questionnaire_response_questionnaire_canonical_test.rb +89 -0
  182. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/questionnaire_response_references_test.rb +51 -0
  183. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/questionnaire_response_validation_test.rb +63 -0
  184. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/source_data_error_test.rb +43 -0
  185. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/value_set_validation_test.rb +90 -0
  186. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_response_reference_validation.rb +133 -0
  187. data/lib/davinci_dtr_test_kit/server/v2.2.0/value_set_expand_support/small_value_set_expansion_test.rb +120 -0
  188. data/lib/davinci_dtr_test_kit/server/v2.2.0/value_set_expand_support/value_set_expansion_test.rb +51 -0
  189. data/lib/davinci_dtr_test_kit/server/v2.2.0/value_set_expand_support/value_set_expansion_validation.rb +58 -0
  190. data/lib/davinci_dtr_test_kit/{endpoints → smart_app/endpoints}/mock_authorization/token_endpoint.rb +1 -1
  191. data/lib/davinci_dtr_test_kit/{endpoints → smart_app/endpoints}/mock_ehr/fhir_get_endpoint.rb +1 -1
  192. data/lib/davinci_dtr_test_kit/smart_app/endpoints/mock_payer/smart_app_next_question_endpoint.rb +12 -0
  193. data/lib/davinci_dtr_test_kit/smart_app/endpoints/mock_payer/smart_app_questionnaire_package_endpoint.rb +12 -0
  194. 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
  195. 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
  196. 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
  197. data/lib/davinci_dtr_test_kit/{auth_groups → smart_app/v2.0.1/auth}/token_request_test.rb +1 -1
  198. 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
  199. 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
  200. data/lib/davinci_dtr_test_kit/{client_groups/respiratory → smart_app/v2.0.1}/dtr_smart_app_respiratory_workflow_group.rb +3 -3
  201. 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
  202. data/lib/davinci_dtr_test_kit/{dtr_smart_app_suite.rb → smart_app/v2.0.1/dtr_smart_app_suite.rb} +21 -21
  203. 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
  204. data/lib/davinci_dtr_test_kit/{auth_groups → smart_app/v2.0.1}/oauth2_authentication_group.rb +2 -2
  205. data/lib/davinci_dtr_test_kit/{client_groups/respiratory → smart_app/v2.0.1/static_respiratory}/dtr_respiratory_questionnaire_package_group.rb +1 -1
  206. 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
  207. data/lib/davinci_dtr_test_kit/{client_groups/respiratory → smart_app/v2.0.1/static_respiratory}/dtr_respiratory_questionnaire_response_group.rb +2 -2
  208. 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
  209. data/lib/davinci_dtr_test_kit/{client_groups/respiratory → smart_app/v2.0.1/static_respiratory}/dtr_respiratory_rendering_attestation_test.rb +1 -1
  210. 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
  211. 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
  212. 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
  213. 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
  214. 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
  215. 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
  216. 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
  217. data/lib/davinci_dtr_test_kit/tags.rb +2 -0
  218. data/lib/davinci_dtr_test_kit/version.rb +2 -2
  219. data/lib/davinci_dtr_test_kit.rb +6 -4
  220. metadata +299 -209
  221. data/lib/davinci_dtr_test_kit/certs/InfernoCA.key +0 -52
  222. data/lib/davinci_dtr_test_kit/certs/InfernoCA.pem +0 -35
  223. data/lib/davinci_dtr_test_kit/certs/TestKit.pem +0 -32
  224. data/lib/davinci_dtr_test_kit/certs/TestKitPrivateKey.key +0 -28
  225. data/lib/davinci_dtr_test_kit/endpoints/mock_payer/full_ehr_next_question_endpoint.rb +0 -30
  226. data/lib/davinci_dtr_test_kit/endpoints/mock_payer/full_ehr_questionnaire_package_endpoint.rb +0 -31
  227. data/lib/davinci_dtr_test_kit/fixture_loader.rb +0 -21
  228. /data/lib/davinci_dtr_test_kit/{endpoints → cross_suite}/cors.rb +0 -0
  229. /data/lib/davinci_dtr_test_kit/{cql_test.rb → cross_suite/v2.0.1/cql_test.rb} +0 -0
  230. /data/lib/davinci_dtr_test_kit/{dtr_questionnaire_response_validation.rb → cross_suite/v2.0.1/dtr_questionnaire_response_validation.rb} +0 -0
  231. /data/lib/davinci_dtr_test_kit/{descriptions.rb → full_ehr/descriptions.rb} +0 -0
  232. /data/lib/davinci_dtr_test_kit/{fixtures → full_ehr/fixtures}/dinner_adaptive/dinner_order_adaptive_next_question_burrito.json +0 -0
  233. /data/lib/davinci_dtr_test_kit/{fixtures → full_ehr/fixtures}/dinner_adaptive/dinner_order_adaptive_next_question_hamburger.json +0 -0
  234. /data/lib/davinci_dtr_test_kit/{fixtures → full_ehr/fixtures}/dinner_adaptive/dinner_order_adaptive_next_question_initial.json +0 -0
  235. /data/lib/davinci_dtr_test_kit/{fixtures → full_ehr/fixtures}/dinner_adaptive/questionnaire_dinner_order_adaptive.json +0 -0
  236. /data/lib/davinci_dtr_test_kit/{fixtures → full_ehr/fixtures}/dinner_static/questionnaire_dinner_order_static.json +0 -0
  237. /data/lib/davinci_dtr_test_kit/{fixtures → full_ehr/fixtures}/dinner_static/questionnaire_response_dinner_order_static.json +0 -0
  238. /data/lib/davinci_dtr_test_kit/{fixtures → full_ehr/fixtures}/respiratory_assist_device/pre_populated_questionnaire_response.json +0 -0
  239. /data/lib/davinci_dtr_test_kit/{fixtures → full_ehr/fixtures}/respiratory_assist_device/questionnaire_package.json +0 -0
  240. /data/lib/davinci_dtr_test_kit/{fixtures.rb → full_ehr/fixtures.rb} +0 -0
  241. /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
  242. /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
  243. /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
  244. /data/lib/davinci_dtr_test_kit/{client_groups/auth → full_ehr/v2.0.1}/dtr_client_payer_auth_smart_group.rb +0 -0
  245. /data/lib/davinci_dtr_test_kit/{client_groups/auth → full_ehr/v2.0.1}/dtr_client_payer_auth_udap_group.rb +0 -0
  246. /data/lib/davinci_dtr_test_kit/{docs → full_ehr/v2.0.1}/dtr_full_ehr_suite_description_v201.md +0 -0
  247. /data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/must_support/questionnaire_must_support_elements.rb +0 -0
  248. /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
  249. /data/lib/davinci_dtr_test_kit/{create_test.rb → light_ehr/create_test.rb} +0 -0
  250. /data/lib/davinci_dtr_test_kit/{endpoints/mock_payer → light_ehr/endpoints}/light_ehr_supported_payer_endpoint.rb +0 -0
  251. /data/lib/davinci_dtr_test_kit/{read_test.rb → light_ehr/read_test.rb} +0 -0
  252. /data/lib/davinci_dtr_test_kit/{update_test.rb → light_ehr/update_test.rb} +0 -0
  253. /data/lib/davinci_dtr_test_kit/{docs → light_ehr/v2.0.1}/dtr_light_ehr_suite_description_v201.md +0 -0
  254. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/communication_request/communication_request_must_support_test.rb +0 -0
  255. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/communication_request/communication_request_validation.rb +0 -0
  256. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/communication_request/metadata.yml +0 -0
  257. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/communication_request_group.rb +0 -0
  258. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/coverage/coverage_must_support_test.rb +0 -0
  259. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/coverage/coverage_validation.rb +0 -0
  260. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/coverage/metadata.yml +0 -0
  261. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/coverage_group.rb +0 -0
  262. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/device_request/device_request_must_support_test.rb +0 -0
  263. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/device_request/device_request_validation.rb +0 -0
  264. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/device_request/metadata.yml +0 -0
  265. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/device_request_group.rb +0 -0
  266. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/encounter/encounter_must_support_test.rb +0 -0
  267. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/encounter/encounter_validation.rb +0 -0
  268. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/encounter/metadata.yml +0 -0
  269. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/encounter_group.rb +0 -0
  270. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/medication_request/medication_request_must_support_test.rb +0 -0
  271. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/medication_request/medication_request_validation.rb +0 -0
  272. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/medication_request/metadata.yml +0 -0
  273. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/medication_request_group.rb +0 -0
  274. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/nutrition_order/metadata.yml +0 -0
  275. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/nutrition_order/nutrition_order_must_support_test.rb +0 -0
  276. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/nutrition_order/nutrition_order_validation.rb +0 -0
  277. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/nutrition_order_group.rb +0 -0
  278. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/questionnaire_response/metadata.yml +0 -0
  279. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/questionnaire_response/questionnaire_response_context_search.rb +0 -0
  280. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/questionnaire_response/questionnaire_response_must_support_test.rb +0 -0
  281. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/questionnaire_response/questionnaire_response_patient_search.rb +0 -0
  282. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/questionnaire_response/questionnaire_response_read.rb +0 -0
  283. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/questionnaire_response/questionnaire_response_validation.rb +0 -0
  284. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/questionnaire_response_group.rb +0 -0
  285. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/service_request/metadata.yml +0 -0
  286. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/service_request/service_request_must_support_test.rb +0 -0
  287. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/service_request/service_request_validation.rb +0 -0
  288. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/service_request_group.rb +0 -0
  289. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/task/metadata.yml +0 -0
  290. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/task/task_must_support_test.rb +0 -0
  291. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/task/task_validation.rb +0 -0
  292. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/task_group.rb +0 -0
  293. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/vision_prescription/metadata.yml +0 -0
  294. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/vision_prescription/vision_prescription_must_support_test.rb +0 -0
  295. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/vision_prescription/vision_prescription_validation.rb +0 -0
  296. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/vision_prescription_group.rb +0 -0
  297. /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
  298. /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
  299. /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
  300. /data/lib/davinci_dtr_test_kit/{endpoints/mock_authorization → server/endpoints}/simple_token_endpoint.rb +0 -0
  301. /data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/payer_server_next_response_complete_test.rb +0 -0
  302. /data/lib/davinci_dtr_test_kit/{docs → server/v2.0.1}/dtr_payer_server_suite_description_v201.md +0 -0
  303. /data/lib/davinci_dtr_test_kit/{validation_test.rb → server/validation_test.rb} +0 -0
  304. /data/lib/davinci_dtr_test_kit/{endpoints → smart_app/endpoints}/mock_authorization/authorize_endpoint.rb +0 -0
  305. /data/lib/davinci_dtr_test_kit/{endpoints → smart_app/endpoints}/mock_authorization.rb +0 -0
  306. /data/lib/davinci_dtr_test_kit/{endpoints → smart_app/endpoints}/mock_ehr/questionnaire_response_endpoint.rb +0 -0
  307. /data/lib/davinci_dtr_test_kit/{endpoints → smart_app/endpoints}/mock_ehr.rb +0 -0
  308. /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
  309. /data/lib/davinci_dtr_test_kit/{auth_groups → smart_app/v2.0.1/auth}/token_validation_test.rb +0 -0
  310. /data/lib/davinci_dtr_test_kit/{docs → smart_app/v2.0.1}/dtr_smart_app_suite_description_v201.md +0 -0
  311. /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