davinci_dtr_test_kit 0.17.0 → 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/{cql_test.rb → cross_suite/v2.0.1/cql_test.rb} +3 -3
  15. data/lib/davinci_dtr_test_kit/cross_suite/v2.2.0/dtr_conformance_verification.rb +21 -0
  16. data/lib/davinci_dtr_test_kit/cross_suite/v2.2.0/multi_request_message_helper.rb +35 -0
  17. data/lib/davinci_dtr_test_kit/cross_suite/v2.2.0/questionnaire_helper.rb +162 -0
  18. data/lib/davinci_dtr_test_kit/{dtr_client_options.rb → full_ehr/dtr_full_ehr_options.rb} +1 -1
  19. data/lib/davinci_dtr_test_kit/{endpoints → full_ehr/endpoints}/mock_payer.rb +9 -3
  20. data/lib/davinci_dtr_test_kit/{endpoints → full_ehr/endpoints}/mock_udap_smart_server/token_endpoint.rb +2 -2
  21. data/lib/davinci_dtr_test_kit/full_ehr/fixture_loader.rb +37 -0
  22. data/lib/davinci_dtr_test_kit/full_ehr/fixtures/dinner_adaptive/dinner_order_adaptive_next_question_template.json +243 -0
  23. data/lib/davinci_dtr_test_kit/full_ehr/fixtures/dinner_adaptive/parameters_questionnaire_dinner_order_adaptive.json +104 -0
  24. data/lib/davinci_dtr_test_kit/full_ehr/fixtures/dinner_static/parameters_questionnaire_dinner_order_static.json +291 -0
  25. data/lib/davinci_dtr_test_kit/full_ehr/fixtures/empty_templates/next_question_template_empty.json +1 -0
  26. data/lib/davinci_dtr_test_kit/full_ehr/fixtures/empty_templates/parameters_questionnaire_package_empty.json +9 -0
  27. data/lib/davinci_dtr_test_kit/full_ehr/short_circuit_interaction_verification.rb +73 -0
  28. 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 +2 -1
  29. 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
  30. 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
  31. 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
  32. 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
  33. 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
  34. 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
  35. 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
  36. data/lib/davinci_dtr_test_kit/{client_groups/adaptive_questionnaire/custom → full_ehr/v2.0.1}/dtr_full_ehr_custom_adaptive_workflow_group.rb +18 -16
  37. 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
  38. data/lib/davinci_dtr_test_kit/{client_groups/must_support → full_ehr/v2.0.1}/dtr_full_ehr_questionnaire_must_support_group.rb +8 -7
  39. 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
  40. data/lib/davinci_dtr_test_kit/{dtr_full_ehr_suite.rb → full_ehr/v2.0.1/dtr_full_ehr_suite.rb} +23 -20
  41. 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
  42. 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
  43. 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
  44. 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
  45. data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/must_support/dtr_must_support_attestation_test.rb +2 -1
  46. data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/must_support/dtr_questionnaire_must_support_test.rb +3 -2
  47. data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/payer_registration/configuration_display_smart_test.rb +1 -1
  48. data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/payer_registration/configuration_display_udap_test.rb +1 -1
  49. data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_custom_questionnaire_expressions_test.rb +3 -2
  50. data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_custom_questionnaire_extensions_test.rb +3 -2
  51. data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_custom_questionnaire_libraries_test.rb +3 -2
  52. data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_custom_questionnaire_package_validation_test.rb +3 -2
  53. 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
  54. 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
  55. 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
  56. 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
  57. 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
  58. 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
  59. 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
  60. 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
  61. data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_prepopulation_attestation_test.rb +1 -1
  62. data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_prepopulation_override_attestation_test.rb +1 -1
  63. data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_questionnaire_package_request_validation_test.rb +1 -1
  64. data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_questionnaire_response_basic_conformance_test.rb +2 -2
  65. data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_questionnaire_response_prepopulation_test.rb +1 -1
  66. data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_rendering_attestation_test.rb +1 -1
  67. 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
  68. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/dtr_full_ehr_abstract_adaptive_group.rb +87 -0
  69. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/dtr_full_ehr_abstract_standard_group.rb +59 -0
  70. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/dtr_full_ehr_suite.rb +145 -0
  71. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/dtr_full_ehr_suite_description_v220.md +254 -0
  72. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/full_ehr_next_question_endpoint.rb +391 -0
  73. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/full_ehr_questionnaire_package_endpoint.rb +206 -0
  74. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/interaction/adaptive_questionnaires_completed_test.rb +108 -0
  75. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/interaction/interaction_wait_test.rb +177 -0
  76. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/interaction/ui_display_and_interaction_attestation_test.rb +132 -0
  77. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/must_support/dtr_additional_questionnaires_interaction_group.rb +74 -0
  78. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/must_support/dtr_questionnaire_adaptive_must_support_test.rb +45 -0
  79. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/must_support/dtr_questionnaire_base_must_support_test.rb +43 -0
  80. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/must_support/dtr_questionnaire_standard_must_support_test.rb +45 -0
  81. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/next_question_template_questionnaires.rb +21 -0
  82. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/request/dtr_next_question_request_validation_test.rb +85 -0
  83. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/request/dtr_questionnaire_package_request_validation_test.rb +89 -0
  84. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/response/dtr_next_question_response_validation_test.rb +85 -0
  85. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/response/dtr_questionnaire_package_response_validation_test.rb +77 -0
  86. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/workflows/dtr_full_ehr_workflow_adaptive_group.rb +24 -0
  87. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/workflows/dtr_full_ehr_workflow_standard_group.rb +21 -0
  88. data/lib/davinci_dtr_test_kit/generator/ig_metadata.rb +21 -0
  89. data/lib/davinci_dtr_test_kit/generator/profile_metadata_extractor.rb +57 -0
  90. data/lib/davinci_dtr_test_kit/generator.rb +117 -0
  91. data/lib/davinci_dtr_test_kit/igs/davinci_dtr_2.2.0.tgz +0 -0
  92. data/lib/davinci_dtr_test_kit/{dtr_options.rb → light_ehr/dtr_light_ehr_options.rb} +1 -1
  93. data/lib/davinci_dtr_test_kit/{dtr_light_ehr_suite.rb → light_ehr/v2.0.1/dtr_light_ehr_suite.rb} +21 -10
  94. data/lib/davinci_dtr_test_kit/{client_groups/light_ehr → light_ehr/v2.0.1}/dtr_light_ehr_supported_endpoints_group.rb +5 -5
  95. data/lib/davinci_dtr_test_kit/{client_groups/light_ehr → light_ehr/v2.0.1}/dtr_smart_ehr_launch.rb +3 -3
  96. data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/communication_request/communication_request_read.rb +1 -1
  97. data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/coverage/coverage_read.rb +1 -1
  98. data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/device_request/device_request_read.rb +1 -1
  99. data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/encounter/encounter_read.rb +1 -1
  100. data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/medication_request/medication_request_read.rb +1 -1
  101. data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/nutrition_order/nutrition_order_read.rb +1 -1
  102. data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/questionnaire_response/questionnaire_response_create.rb +1 -1
  103. data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/questionnaire_response/questionnaire_response_update.rb +1 -1
  104. data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/service_request/service_request_read.rb +1 -1
  105. data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/task/task_create.rb +1 -1
  106. data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/task/task_read.rb +1 -1
  107. data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/task/task_update.rb +1 -1
  108. data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/vision_prescription/vision_prescription_read.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_accept_header_test.rb +3 -2
  110. 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 +2 -1
  111. 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 +2 -1
  112. 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 +2 -1
  113. 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 +5 -3
  114. data/lib/davinci_dtr_test_kit/metadata.rb +13 -68
  115. data/lib/davinci_dtr_test_kit/requirements/davinci_dtr_test_kit_requirements.csv +216 -0
  116. data/lib/davinci_dtr_test_kit/requirements/generated/dtr_full_ehr_requirements_coverage.csv +1 -1
  117. data/lib/davinci_dtr_test_kit/requirements/generated/dtr_full_ehr_v220_requirements_coverage.csv +1 -0
  118. data/lib/davinci_dtr_test_kit/requirements/generated/dtr_light_ehr_requirements_coverage.csv +1 -1
  119. data/lib/davinci_dtr_test_kit/requirements/generated/dtr_payer_server_requirements_coverage.csv +1 -1
  120. data/lib/davinci_dtr_test_kit/requirements/generated/dtr_payer_server_v220_requirements_coverage.csv +114 -0
  121. data/lib/davinci_dtr_test_kit/requirements/generated/dtr_smart_app_requirements_coverage.csv +1 -1
  122. data/lib/davinci_dtr_test_kit/requirements/hl7.fhir.us.davinci-dtr_2.2.0_requirements.xlsx +0 -0
  123. data/lib/davinci_dtr_test_kit/{endpoints/mock_payer → server/endpoints}/next_question_proxy_endpoint.rb +2 -0
  124. data/lib/davinci_dtr_test_kit/{endpoints/mock_payer → server/endpoints}/questionnaire_package_proxy_endpoint.rb +2 -0
  125. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/adaptive_form_libraries_test.rb +2 -1
  126. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/adaptive_form_questionnaire_expressions_test.rb +2 -1
  127. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/adaptive_form_questionnaire_extensions_test.rb +2 -1
  128. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/adaptive_next_questionnaire_expressions_test.rb +2 -1
  129. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/adaptive_next_questionnaire_extensions_test.rb +2 -1
  130. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/payer_server_adaptive_request_test.rb +2 -1
  131. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/payer_server_adaptive_request_validation_test.rb +3 -1
  132. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/payer_server_adaptive_response_bundles_validation_test.rb +3 -1
  133. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/payer_server_adaptive_response_search_validation_test.rb +3 -1
  134. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/payer_server_adaptive_response_validation_test.rb +4 -2
  135. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/payer_server_next_request_validation_test.rb +3 -1
  136. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/payer_server_next_response_validation_test.rb +3 -1
  137. data/lib/davinci_dtr_test_kit/{dtr_payer_server_suite.rb → server/v2.0.1/dtr_payer_server_suite.rb} +13 -10
  138. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1}/payer_server_adaptive_group.rb +13 -13
  139. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1}/payer_server_static_group.rb +6 -6
  140. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/static_forms}/static_form_libraries_test.rb +2 -1
  141. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/static_forms}/static_form_questionnaire_expressions_test.rb +2 -1
  142. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/static_forms}/static_form_questionnaire_extensions_test.rb +2 -1
  143. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/static_forms}/static_form_request_test.rb +4 -2
  144. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/static_forms}/static_form_request_validation_test.rb +3 -2
  145. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/static_forms}/static_form_response_validation_test.rb +5 -3
  146. data/lib/davinci_dtr_test_kit/server/v2.2.0/client_simulation.rb +297 -0
  147. data/lib/davinci_dtr_test_kit/server/v2.2.0/dtr_payer_server_capability_statement_test.rb +73 -0
  148. data/lib/davinci_dtr_test_kit/server/v2.2.0/dtr_payer_server_suite.rb +322 -0
  149. data/lib/davinci_dtr_test_kit/server/v2.2.0/dtr_payer_server_suite_description_v220.md +37 -0
  150. data/lib/davinci_dtr_test_kit/server/v2.2.0/interaction_test.rb +97 -0
  151. data/lib/davinci_dtr_test_kit/server/v2.2.0/log_questionnaire_errors_support_test.rb +57 -0
  152. data/lib/davinci_dtr_test_kit/server/v2.2.0/must_support/questionnaire_adaptive_must_support_test.rb +47 -0
  153. data/lib/davinci_dtr_test_kit/server/v2.2.0/must_support/questionnaire_adaptive_search_must_support_test.rb +40 -0
  154. data/lib/davinci_dtr_test_kit/server/v2.2.0/must_support/questionnaire_base_must_support_test.rb +40 -0
  155. data/lib/davinci_dtr_test_kit/server/v2.2.0/must_support/questionnaire_package_bundle_must_support_test.rb +38 -0
  156. data/lib/davinci_dtr_test_kit/server/v2.2.0/must_support/questionnaire_package_output_parameters_must_support_test.rb +37 -0
  157. data/lib/davinci_dtr_test_kit/server/v2.2.0/must_support/questionnaire_standard_must_support_test.rb +39 -0
  158. data/lib/davinci_dtr_test_kit/server/v2.2.0/next_question_request_validation_test.rb +45 -0
  159. data/lib/davinci_dtr_test_kit/server/v2.2.0/next_question_support/adaptive_questionnaire_endpoint_test.rb +98 -0
  160. data/lib/davinci_dtr_test_kit/server/v2.2.0/next_question_support/invalid_questionnaire_response_test.rb +43 -0
  161. data/lib/davinci_dtr_test_kit/server/v2.2.0/next_question_support/next_contained_questionnaire_response_references_test.rb +46 -0
  162. data/lib/davinci_dtr_test_kit/server/v2.2.0/next_question_support/next_question_response_references_test.rb +56 -0
  163. data/lib/davinci_dtr_test_kit/server/v2.2.0/next_question_support/next_question_response_validation_test.rb +67 -0
  164. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_design/contained_binary_test.rb +58 -0
  165. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_design/contained_binary_validation.rb +128 -0
  166. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_design/cql_library_validation_test.rb +58 -0
  167. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_design/questionnaire_design_support.rb +65 -0
  168. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_design/questionnaire_expression_elm_test.rb +81 -0
  169. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_design/questionnaire_expression_language_test.rb +63 -0
  170. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_design/questionnaire_prepopulation_test.rb +42 -0
  171. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_design/questionnaire_relevance_logic_test.rb +40 -0
  172. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_operation_validation.rb +440 -0
  173. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_request_validation_test.rb +42 -0
  174. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/adaptive_questionnaire_response_contained_questionnaire_test.rb +127 -0
  175. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/adaptive_questionnaire_response_validation_test.rb +61 -0
  176. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/contained_questionnaire_response_references_test.rb +42 -0
  177. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/dtr_server_no_custom_extension_test.rb +184 -0
  178. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/dtr_server_questionnaire_not_found_test.rb +76 -0
  179. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/dtr_server_questionnaire_package_contents_test.rb +89 -0
  180. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/initial_questionnaire_response_test.rb +132 -0
  181. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/questionnaire_package_input_type_test.rb +110 -0
  182. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/questionnaire_references_version_specific_test.rb +79 -0
  183. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/questionnaire_response_questionnaire_canonical_test.rb +89 -0
  184. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/questionnaire_response_references_test.rb +51 -0
  185. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/questionnaire_response_validation_test.rb +63 -0
  186. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/source_data_error_test.rb +43 -0
  187. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/value_set_validation_test.rb +90 -0
  188. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_response_reference_validation.rb +133 -0
  189. data/lib/davinci_dtr_test_kit/server/v2.2.0/value_set_expand_support/small_value_set_expansion_test.rb +120 -0
  190. data/lib/davinci_dtr_test_kit/server/v2.2.0/value_set_expand_support/value_set_expansion_test.rb +51 -0
  191. data/lib/davinci_dtr_test_kit/server/v2.2.0/value_set_expand_support/value_set_expansion_validation.rb +58 -0
  192. data/lib/davinci_dtr_test_kit/{endpoints → smart_app/endpoints}/mock_authorization/token_endpoint.rb +1 -1
  193. data/lib/davinci_dtr_test_kit/{endpoints → smart_app/endpoints}/mock_ehr/fhir_get_endpoint.rb +1 -1
  194. data/lib/davinci_dtr_test_kit/smart_app/endpoints/mock_payer/smart_app_next_question_endpoint.rb +12 -0
  195. data/lib/davinci_dtr_test_kit/smart_app/endpoints/mock_payer/smart_app_questionnaire_package_endpoint.rb +12 -0
  196. 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 +17 -15
  197. 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
  198. 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
  199. data/lib/davinci_dtr_test_kit/{auth_groups → smart_app/v2.0.1/auth}/token_request_test.rb +1 -1
  200. 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
  201. data/lib/davinci_dtr_test_kit/{client_groups/must_support → smart_app/v2.0.1}/dtr_smart_app_questionnaire_must_support_group.rb +8 -7
  202. data/lib/davinci_dtr_test_kit/{client_groups/respiratory → smart_app/v2.0.1}/dtr_smart_app_respiratory_workflow_group.rb +3 -3
  203. 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
  204. data/lib/davinci_dtr_test_kit/{dtr_smart_app_suite.rb → smart_app/v2.0.1/dtr_smart_app_suite.rb} +25 -21
  205. data/lib/davinci_dtr_test_kit/{docs → smart_app/v2.0.1}/dtr_smart_app_suite_description_v201.md +8 -0
  206. 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
  207. data/lib/davinci_dtr_test_kit/{auth_groups → smart_app/v2.0.1}/oauth2_authentication_group.rb +2 -2
  208. data/lib/davinci_dtr_test_kit/{client_groups/respiratory → smart_app/v2.0.1/static_respiratory}/dtr_respiratory_questionnaire_package_group.rb +1 -1
  209. 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
  210. data/lib/davinci_dtr_test_kit/{client_groups/respiratory → smart_app/v2.0.1/static_respiratory}/dtr_respiratory_questionnaire_response_group.rb +2 -2
  211. 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
  212. data/lib/davinci_dtr_test_kit/{client_groups/respiratory → smart_app/v2.0.1/static_respiratory}/dtr_respiratory_rendering_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_adaptive_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_prepopulation_attestation_test.rb +1 -1
  215. 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
  216. 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
  217. 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
  218. 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
  219. 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
  220. data/lib/davinci_dtr_test_kit/tags.rb +2 -0
  221. data/lib/davinci_dtr_test_kit/version.rb +2 -2
  222. data/lib/davinci_dtr_test_kit.rb +6 -4
  223. metadata +329 -215
  224. data/lib/davinci_dtr_test_kit/certs/InfernoCA.key +0 -52
  225. data/lib/davinci_dtr_test_kit/certs/InfernoCA.pem +0 -35
  226. data/lib/davinci_dtr_test_kit/certs/TestKit.pem +0 -32
  227. data/lib/davinci_dtr_test_kit/certs/TestKitPrivateKey.key +0 -28
  228. data/lib/davinci_dtr_test_kit/endpoints/mock_payer/full_ehr_next_question_endpoint.rb +0 -30
  229. data/lib/davinci_dtr_test_kit/endpoints/mock_payer/full_ehr_questionnaire_package_endpoint.rb +0 -31
  230. data/lib/davinci_dtr_test_kit/fixture_loader.rb +0 -21
  231. /data/lib/davinci_dtr_test_kit/{endpoints → cross_suite}/cors.rb +0 -0
  232. /data/lib/davinci_dtr_test_kit/{dtr_questionnaire_response_validation.rb → cross_suite/v2.0.1/dtr_questionnaire_response_validation.rb} +0 -0
  233. /data/lib/davinci_dtr_test_kit/{descriptions.rb → full_ehr/descriptions.rb} +0 -0
  234. /data/lib/davinci_dtr_test_kit/{fixtures → full_ehr/fixtures}/dinner_adaptive/dinner_order_adaptive_next_question_burrito.json +0 -0
  235. /data/lib/davinci_dtr_test_kit/{fixtures → full_ehr/fixtures}/dinner_adaptive/dinner_order_adaptive_next_question_hamburger.json +0 -0
  236. /data/lib/davinci_dtr_test_kit/{fixtures → full_ehr/fixtures}/dinner_adaptive/dinner_order_adaptive_next_question_initial.json +0 -0
  237. /data/lib/davinci_dtr_test_kit/{fixtures → full_ehr/fixtures}/dinner_adaptive/questionnaire_dinner_order_adaptive.json +0 -0
  238. /data/lib/davinci_dtr_test_kit/{fixtures → full_ehr/fixtures}/dinner_static/questionnaire_dinner_order_static.json +0 -0
  239. /data/lib/davinci_dtr_test_kit/{fixtures → full_ehr/fixtures}/dinner_static/questionnaire_response_dinner_order_static.json +0 -0
  240. /data/lib/davinci_dtr_test_kit/{fixtures → full_ehr/fixtures}/respiratory_assist_device/pre_populated_questionnaire_response.json +0 -0
  241. /data/lib/davinci_dtr_test_kit/{fixtures → full_ehr/fixtures}/respiratory_assist_device/questionnaire_package.json +0 -0
  242. /data/lib/davinci_dtr_test_kit/{fixtures.rb → full_ehr/fixtures.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_completion_group.rb +0 -0
  244. /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
  245. /data/lib/davinci_dtr_test_kit/{client_groups/auth → full_ehr/v2.0.1}/dtr_client_payer_auth_smart_group.rb +0 -0
  246. /data/lib/davinci_dtr_test_kit/{client_groups/auth → full_ehr/v2.0.1}/dtr_client_payer_auth_udap_group.rb +0 -0
  247. /data/lib/davinci_dtr_test_kit/{docs → full_ehr/v2.0.1}/dtr_full_ehr_suite_description_v201.md +0 -0
  248. /data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/must_support/questionnaire_must_support_elements.rb +0 -0
  249. /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
  250. /data/lib/davinci_dtr_test_kit/{create_test.rb → light_ehr/create_test.rb} +0 -0
  251. /data/lib/davinci_dtr_test_kit/{endpoints/mock_payer → light_ehr/endpoints}/light_ehr_supported_payer_endpoint.rb +0 -0
  252. /data/lib/davinci_dtr_test_kit/{read_test.rb → light_ehr/read_test.rb} +0 -0
  253. /data/lib/davinci_dtr_test_kit/{update_test.rb → light_ehr/update_test.rb} +0 -0
  254. /data/lib/davinci_dtr_test_kit/{docs → light_ehr/v2.0.1}/dtr_light_ehr_suite_description_v201.md +0 -0
  255. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/communication_request/communication_request_must_support_test.rb +0 -0
  256. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/communication_request/communication_request_validation.rb +0 -0
  257. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/communication_request/metadata.yml +0 -0
  258. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/communication_request_group.rb +0 -0
  259. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/coverage/coverage_must_support_test.rb +0 -0
  260. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/coverage/coverage_validation.rb +0 -0
  261. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/coverage/metadata.yml +0 -0
  262. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/coverage_group.rb +0 -0
  263. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/device_request/device_request_must_support_test.rb +0 -0
  264. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/device_request/device_request_validation.rb +0 -0
  265. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/device_request/metadata.yml +0 -0
  266. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/device_request_group.rb +0 -0
  267. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/encounter/encounter_must_support_test.rb +0 -0
  268. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/encounter/encounter_validation.rb +0 -0
  269. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/encounter/metadata.yml +0 -0
  270. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/encounter_group.rb +0 -0
  271. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/medication_request/medication_request_must_support_test.rb +0 -0
  272. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/medication_request/medication_request_validation.rb +0 -0
  273. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/medication_request/metadata.yml +0 -0
  274. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/medication_request_group.rb +0 -0
  275. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/nutrition_order/metadata.yml +0 -0
  276. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/nutrition_order/nutrition_order_must_support_test.rb +0 -0
  277. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/nutrition_order/nutrition_order_validation.rb +0 -0
  278. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/nutrition_order_group.rb +0 -0
  279. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/questionnaire_response/metadata.yml +0 -0
  280. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/questionnaire_response/questionnaire_response_context_search.rb +0 -0
  281. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/questionnaire_response/questionnaire_response_must_support_test.rb +0 -0
  282. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/questionnaire_response/questionnaire_response_patient_search.rb +0 -0
  283. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/questionnaire_response/questionnaire_response_read.rb +0 -0
  284. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/questionnaire_response/questionnaire_response_validation.rb +0 -0
  285. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/questionnaire_response_group.rb +0 -0
  286. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/service_request/metadata.yml +0 -0
  287. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/service_request/service_request_must_support_test.rb +0 -0
  288. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/service_request/service_request_validation.rb +0 -0
  289. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/service_request_group.rb +0 -0
  290. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/task/metadata.yml +0 -0
  291. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/task/task_must_support_test.rb +0 -0
  292. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/task/task_validation.rb +0 -0
  293. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/task_group.rb +0 -0
  294. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/vision_prescription/metadata.yml +0 -0
  295. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/vision_prescription/vision_prescription_must_support_test.rb +0 -0
  296. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/vision_prescription/vision_prescription_validation.rb +0 -0
  297. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/vision_prescription_group.rb +0 -0
  298. /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
  299. /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
  300. /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
  301. /data/lib/davinci_dtr_test_kit/{endpoints/mock_authorization → server/endpoints}/simple_token_endpoint.rb +0 -0
  302. /data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/payer_server_next_response_complete_test.rb +0 -0
  303. /data/lib/davinci_dtr_test_kit/{docs → server/v2.0.1}/dtr_payer_server_suite_description_v201.md +0 -0
  304. /data/lib/davinci_dtr_test_kit/{validation_test.rb → server/validation_test.rb} +0 -0
  305. /data/lib/davinci_dtr_test_kit/{endpoints → smart_app/endpoints}/mock_authorization/authorize_endpoint.rb +0 -0
  306. /data/lib/davinci_dtr_test_kit/{endpoints → smart_app/endpoints}/mock_authorization.rb +0 -0
  307. /data/lib/davinci_dtr_test_kit/{endpoints → smart_app/endpoints}/mock_ehr/questionnaire_response_endpoint.rb +0 -0
  308. /data/lib/davinci_dtr_test_kit/{endpoints → smart_app/endpoints}/mock_ehr.rb +0 -0
  309. /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
  310. /data/lib/davinci_dtr_test_kit/{auth_groups → smart_app/v2.0.1/auth}/token_validation_test.rb +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,403 @@
1
+ ---
2
+ :ig_version: v2.2.0
3
+ :profiles:
4
+ - :resource: Bundle
5
+ :profile_url: http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/DTR-QPackageBundle
6
+ :profile_name: DTR Questionnaire Package Bundle
7
+ :profile_version: 2.2.0
8
+ :must_supports:
9
+ :extensions: []
10
+ :slices:
11
+ - :slice_id: Bundle.entry:questionnaire
12
+ :slice_name: questionnaire
13
+ :path: entry
14
+ :discriminator:
15
+ :type: type
16
+ :code: Questionnaire
17
+ :path: resource
18
+ - :slice_id: Bundle.entry:questionnaireResponse
19
+ :slice_name: questionnaireResponse
20
+ :path: entry
21
+ :discriminator:
22
+ :type: type
23
+ :code: QuestionnaireResponse
24
+ :path: resource
25
+ - :slice_id: Bundle.entry:valueSet
26
+ :slice_name: valueSet
27
+ :path: entry
28
+ :discriminator:
29
+ :type: type
30
+ :code: ValueSet
31
+ :path: resource
32
+ - :slice_id: Bundle.entry:library
33
+ :slice_name: library
34
+ :path: entry
35
+ :discriminator:
36
+ :type: type
37
+ :code: Library
38
+ :path: resource
39
+ :elements: []
40
+ :recursive_elements:
41
+ - link
42
+ - :resource: Questionnaire
43
+ :profile_url: http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-base-questionnaire
44
+ :profile_name: DTR Base Questionnaire
45
+ :profile_version: 2.2.0
46
+ :must_supports:
47
+ :extensions:
48
+ - :id: Questionnaire.extension:terminologyServer
49
+ :slice_name: terminologyServer
50
+ :path: extension
51
+ :url: http://hl7.org/fhir/StructureDefinition/preferredTerminologyServer
52
+ :modifier_extension: false
53
+ - :id: Questionnaire.extension:versionAlgorithm
54
+ :slice_name: versionAlgorithm
55
+ :path: extension
56
+ :url: http://hl7.org/fhir/StructureDefinition/artifact-versionAlgorithm
57
+ :modifier_extension: false
58
+ - :id: Questionnaire.extension:performerType
59
+ :slice_name: performerType
60
+ :path: extension
61
+ :url: http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-performerType
62
+ :modifier_extension: false
63
+ - :id: Questionnaire.extension:assemble-expectation
64
+ :slice_name: assemble-expectation
65
+ :path: extension
66
+ :url: http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-assemble-expectation
67
+ :modifier_extension: false
68
+ - :id: Questionnaire.extension:estimatedCompletionTime
69
+ :slice_name: estimatedCompletionTime
70
+ :path: extension
71
+ :url: http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/estimated-completion-time
72
+ :modifier_extension: false
73
+ - :id: Questionnaire.extension:audience
74
+ :slice_name: audience
75
+ :path: extension
76
+ :url: http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/questionnaireAudience
77
+ :modifier_extension: false
78
+ - :id: Questionnaire.extension:RequestSpecific
79
+ :slice_name: RequestSpecific
80
+ :path: extension
81
+ :url: http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/request-specific
82
+ :modifier_extension: false
83
+ - :id: Questionnaire.extension:signatureRequired
84
+ :slice_name: signatureRequired
85
+ :path: extension
86
+ :url: http://hl7.org/fhir/StructureDefinition/questionnaire-signatureRequired
87
+ :modifier_extension: false
88
+ - :id: Questionnaire.extension:variable
89
+ :slice_name: variable
90
+ :path: extension
91
+ :url: http://hl7.org/fhir/StructureDefinition/variable
92
+ :modifier_extension: false
93
+ - :id: Questionnaire.extension:cqf-library
94
+ :slice_name: cqf-library
95
+ :path: extension
96
+ :url: http://hl7.org/fhir/StructureDefinition/cqf-library
97
+ :modifier_extension: false
98
+ - :id: Questionnaire.extension:launchContext
99
+ :slice_name: launchContext
100
+ :path: extension
101
+ :url: http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-launchContext
102
+ :modifier_extension: false
103
+ - :id: Questionnaire.extension:itemPopulationContext
104
+ :slice_name: itemPopulationContext
105
+ :path: extension
106
+ :url: http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-itemPopulationContext
107
+ :modifier_extension: false
108
+ - :id: Questionnaire.extension:entryMode
109
+ :slice_name: entryMode
110
+ :path: extension
111
+ :url: http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-entryMode
112
+ :modifier_extension: false
113
+ - :id: Questionnaire.item.extension:hidden
114
+ :slice_name: hidden
115
+ :path: item.extension
116
+ :url: http://hl7.org/fhir/StructureDefinition/questionnaire-hidden
117
+ :modifier_extension: false
118
+ - :id: Questionnaire.item.extension:itemControl
119
+ :slice_name: itemControl
120
+ :path: item.extension
121
+ :url: http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl
122
+ :modifier_extension: false
123
+ - :id: Questionnaire.item.extension:supportHyperlink
124
+ :slice_name: supportHyperlink
125
+ :path: item.extension
126
+ :url: http://hl7.org/fhir/StructureDefinition/questionnaire-supportHyperlink
127
+ :modifier_extension: false
128
+ - :id: Questionnaire.item.extension:mimeType
129
+ :slice_name: mimeType
130
+ :path: item.extension
131
+ :url: http://hl7.org/fhir/StructureDefinition/mimeType
132
+ :modifier_extension: false
133
+ - :id: Questionnaire.item.extension:unitOption
134
+ :slice_name: unitOption
135
+ :path: item.extension
136
+ :url: http://hl7.org/fhir/StructureDefinition/questionnaire-unitOption
137
+ :modifier_extension: false
138
+ - :id: Questionnaire.item.extension:referenceResource
139
+ :slice_name: referenceResource
140
+ :path: item.extension
141
+ :url: http://hl7.org/fhir/StructureDefinition/questionnaire-referenceResource
142
+ :modifier_extension: false
143
+ - :id: Questionnaire.item.extension:referenceProfile
144
+ :slice_name: referenceProfile
145
+ :path: item.extension
146
+ :url: http://hl7.org/fhir/StructureDefinition/questionnaire-referenceProfile
147
+ :modifier_extension: false
148
+ - :id: Questionnaire.item.extension:unitValueSet
149
+ :slice_name: unitValueSet
150
+ :path: item.extension
151
+ :url: http://hl7.org/fhir/StructureDefinition/questionnaire-unitValueSet
152
+ :modifier_extension: false
153
+ - :id: Questionnaire.item.extension:lookupQuestionnaire
154
+ :slice_name: lookupQuestionnaire
155
+ :path: item.extension
156
+ :url: http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-lookupQuestionnaire
157
+ :modifier_extension: false
158
+ - :id: Questionnaire.item.extension:candidateExpression
159
+ :slice_name: candidateExpression
160
+ :path: item.extension
161
+ :url: http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-candidateExpression
162
+ :modifier_extension: false
163
+ - :id: Questionnaire.item.extension:candidateExpression.value[x].extension:alternativeExpression
164
+ :slice_name: alternativeExpression
165
+ :path: item.extension.value[x].extension
166
+ :url: http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/alternativeExpression
167
+ :modifier_extension: false
168
+ - :id: Questionnaire.item.extension:initialExpression
169
+ :slice_name: initialExpression
170
+ :path: item.extension
171
+ :url: http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression
172
+ :modifier_extension: false
173
+ - :id: Questionnaire.item.extension:initialExpression.value[x].extension:alternativeExpression
174
+ :slice_name: alternativeExpression
175
+ :path: item.extension.value[x].extension
176
+ :url: http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/alternativeExpression
177
+ :modifier_extension: false
178
+ - :id: Questionnaire.item.extension:calculatedExpression
179
+ :slice_name: calculatedExpression
180
+ :path: item.extension
181
+ :url: http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-calculatedExpression
182
+ :modifier_extension: false
183
+ - :id: Questionnaire.item.extension:calculatedExpression.value[x].extension:alternativeExpression
184
+ :slice_name: alternativeExpression
185
+ :path: item.extension.value[x].extension
186
+ :url: http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/alternativeExpression
187
+ :modifier_extension: false
188
+ - :id: Questionnaire.item.extension:contextExpression
189
+ :slice_name: contextExpression
190
+ :path: item.extension
191
+ :url: http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-contextExpression
192
+ :modifier_extension: false
193
+ - :id: Questionnaire.item.extension:contextExpression.extension:expression.value[x].extension:alternativeExpression
194
+ :slice_name: alternativeExpression
195
+ :path: item.extension.extension.value[x].extension
196
+ :url: http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/alternativeExpression
197
+ :modifier_extension: false
198
+ - :id: Questionnaire.item.text.extension:itemTextRenderingXhtml
199
+ :slice_name: itemTextRenderingXhtml
200
+ :path: item.text.extension
201
+ :url: http://hl7.org/fhir/StructureDefinition/rendering-xhtml
202
+ :modifier_extension: false
203
+ - :id: Questionnaire.item.answerOption.extension:optionExclusive
204
+ :slice_name: optionExclusive
205
+ :path: item.answerOption.extension
206
+ :url: http://hl7.org/fhir/StructureDefinition/questionnaire-optionExclusive
207
+ :modifier_extension: false
208
+ - :id: Questionnaire.item.answerOption.value[x].extension:answerOptionRenderingXhtml
209
+ :slice_name: answerOptionRenderingXhtml
210
+ :path: item.answerOption.value[x].extension
211
+ :url: http://hl7.org/fhir/StructureDefinition/rendering-xhtml
212
+ :modifier_extension: false
213
+ :slices:
214
+ - :slice_id: Questionnaire.item.answerOption.value[x]:valueCoding
215
+ :slice_name: valueCoding
216
+ :path: item.answerOption.value[x]
217
+ :discriminator:
218
+ :type: type
219
+ :code: Coding
220
+ - :slice_id: Questionnaire.item.answerOption.value[x]:valueReference
221
+ :slice_name: valueReference
222
+ :path: item.answerOption.value[x]
223
+ :discriminator:
224
+ :type: type
225
+ :code: Reference
226
+ :elements:
227
+ - :path: url
228
+ - :path: version
229
+ - :path: title
230
+ - :path: status
231
+ - :path: subjectType
232
+ - :path: effectivePeriod
233
+ - :path: item
234
+ - :path: item.linkId
235
+ - :path: item.prefix
236
+ - :path: item.type
237
+ - :path: item.enableBehavior
238
+ - :path: item.required
239
+ - :path: item.repeats
240
+ - :path: item.readOnly
241
+ - :path: item.answerValueSet
242
+ - :path: item.answerOption
243
+ - :path: item.answerOption.value[x]
244
+ :types:
245
+ - Reference
246
+ - :path: item.initial
247
+ - :path: item.initial.value[x]
248
+ :types:
249
+ - Reference
250
+ - :path: item.item
251
+ :recursive_elements:
252
+ - item
253
+ - :resource: Parameters
254
+ :profile_url: http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-qpackage-output-parameters
255
+ :profile_name: DTR Questionnaire Package Output Parameters
256
+ :profile_version: 2.2.0
257
+ :must_supports:
258
+ :extensions: []
259
+ :slices:
260
+ - :slice_id: Parameters.parameter:packagebundle
261
+ :slice_name: packagebundle
262
+ :path: parameter
263
+ :discriminator:
264
+ :type: value
265
+ :values:
266
+ - :path: name
267
+ :value: packagebundle
268
+ - :slice_id: Parameters.parameter:outcome
269
+ :slice_name: outcome
270
+ :path: parameter
271
+ :discriminator:
272
+ :type: value
273
+ :values:
274
+ - :path: name
275
+ :value: outcome
276
+ :elements:
277
+ - :path: parameter
278
+ - :path: parameter:packagebundle.resource
279
+ - :path: parameter:outcome.resource
280
+ :recursive_elements:
281
+ - part
282
+ - :resource: Questionnaire
283
+ :profile_url: http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-adapt-search
284
+ :profile_name: DTR Questionnaire for adaptive form Search
285
+ :profile_version: 2.2.0
286
+ :must_supports:
287
+ :extensions:
288
+ - :id: Questionnaire.extension:terminologyServer
289
+ :slice_name: terminologyServer
290
+ :path: extension
291
+ :url: http://hl7.org/fhir/StructureDefinition/preferredTerminologyServer
292
+ :modifier_extension: false
293
+ - :id: Questionnaire.extension:versionAlgorithm
294
+ :slice_name: versionAlgorithm
295
+ :path: extension
296
+ :url: http://hl7.org/fhir/StructureDefinition/artifact-versionAlgorithm
297
+ :modifier_extension: false
298
+ - :id: Questionnaire.extension:performerType
299
+ :slice_name: performerType
300
+ :path: extension
301
+ :url: http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-performerType
302
+ :modifier_extension: false
303
+ - :id: Questionnaire.extension:assemble-expectation
304
+ :slice_name: assemble-expectation
305
+ :path: extension
306
+ :url: http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-assemble-expectation
307
+ :modifier_extension: false
308
+ - :id: Questionnaire.extension:questionnaireAdaptive
309
+ :slice_name: questionnaireAdaptive
310
+ :path: extension
311
+ :url: http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-questionnaireAdaptive
312
+ :modifier_extension: false
313
+ - :id: Questionnaire.extension:entryMode
314
+ :slice_name: entryMode
315
+ :path: extension
316
+ :url: http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-entryMode
317
+ :modifier_extension: false
318
+ - :id: Questionnaire.extension:signatureRequired
319
+ :slice_name: signatureRequired
320
+ :path: extension
321
+ :url: http://hl7.org/fhir/StructureDefinition/questionnaire-signatureRequired
322
+ :modifier_extension: false
323
+ - :id: Questionnaire.extension:cqf-library
324
+ :slice_name: cqf-library
325
+ :path: extension
326
+ :url: http://hl7.org/fhir/StructureDefinition/cqf-library
327
+ :modifier_extension: false
328
+ - :id: Questionnaire.item.extension:hidden
329
+ :slice_name: hidden
330
+ :path: item.extension
331
+ :url: http://hl7.org/fhir/StructureDefinition/questionnaire-hidden
332
+ :modifier_extension: false
333
+ :slices:
334
+ - :slice_id: Questionnaire.item.answerOption.value[x]:valueCoding
335
+ :slice_name: valueCoding
336
+ :path: item.answerOption.value[x]
337
+ :discriminator:
338
+ :type: type
339
+ :code: Coding
340
+ - :slice_id: Questionnaire.item.answerOption.value[x]:valueReference
341
+ :slice_name: valueReference
342
+ :path: item.answerOption.value[x]
343
+ :discriminator:
344
+ :type: type
345
+ :code: Reference
346
+ :elements:
347
+ - :path: url
348
+ - :path: version
349
+ - :path: title
350
+ - :path: status
351
+ - :path: subjectType
352
+ - :path: effectivePeriod
353
+ - :path: item
354
+ - :path: item.linkId
355
+ - :path: item.prefix
356
+ - :path: item.type
357
+ - :path: item.required
358
+ - :path: item.repeats
359
+ - :path: item.readOnly
360
+ - :path: item.answerValueSet
361
+ - :path: item.answerOption
362
+ - :path: item.answerOption.value[x]
363
+ :types:
364
+ - Reference
365
+ - :path: item.initial
366
+ - :path: item.initial.value[x]
367
+ :types:
368
+ - Reference
369
+ - :path: item.item
370
+ :recursive_elements:
371
+ - item
372
+ - :resource: Questionnaire
373
+ :profile_url: http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-adapt
374
+ :profile_name: DTR Questionnaire for adaptive form
375
+ :profile_version: 2.2.0
376
+ :must_supports:
377
+ :extensions:
378
+ - :id: Questionnaire.extension:questionnaireAdaptive
379
+ :slice_name: questionnaireAdaptive
380
+ :path: extension
381
+ :url: http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-questionnaireAdaptive
382
+ :modifier_extension: false
383
+ :slices: []
384
+ :elements:
385
+ - :path: item.enableWhen
386
+ :recursive_elements:
387
+ - item
388
+ - :resource: Questionnaire
389
+ :profile_url: http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-std-questionnaire
390
+ :profile_name: DTR Standard Questionnaire
391
+ :profile_version: 2.2.0
392
+ :must_supports:
393
+ :extensions:
394
+ - :id: Questionnaire.item.extension:enableWhenExpression
395
+ :slice_name: enableWhenExpression
396
+ :path: item.extension
397
+ :url: http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-enableWhenExpression
398
+ :modifier_extension: false
399
+ :slices: []
400
+ :elements:
401
+ - :path: item.enableWhen
402
+ :recursive_elements:
403
+ - item
@@ -0,0 +1,22 @@
1
+ require 'inferno/dsl/profile_metadata'
2
+
3
+ module DaVinciDTRTestKit
4
+ # Loads and memoizes the Inferno::DSL::ProfileMetadata generated by Generator into
5
+ # cross_suite/generated/<version>/<profile>/metadata.yml, so test classes don't each
6
+ # need to hand-roll their own file path and loading/memoization boilerplate.
7
+ module GeneratedProfileMetadata
8
+ GENERATED_DIR = File.join(__dir__, 'generated').freeze
9
+
10
+ # @param version [String] eg 'v2.2.0'
11
+ # @param profile [String] the generated metadata directory name, eg 'dtr_base_questionnaire'
12
+ # @return [Inferno::DSL::ProfileMetadata]
13
+ def self.for(version, profile)
14
+ cache[[version, profile]] ||=
15
+ Inferno::DSL::ProfileMetadata.from_file(File.join(GENERATED_DIR, version, profile, 'metadata.yml'))
16
+ end
17
+
18
+ def self.cache
19
+ @cache ||= {}
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,85 @@
1
+ module DaVinciDTRTestKit
2
+ module ResponseSelectionUtils
3
+ INFERNO_CONTROL_EXTENSION_URLS = [
4
+ 'urn:inferno:dtr:inclusion-criteria',
5
+ 'urn:inferno:dtr:request-range'
6
+ ].freeze
7
+
8
+ # ***********************************************************************
9
+ # Selection of entries from the Template
10
+ # ***********************************************************************
11
+
12
+ def include_entity?(entity, parsed_request_body, operation)
13
+ return false if entity_has_request_range_criteria?(entity) &&
14
+ !request_meets_request_range_criteria?(entity, operation)
15
+ return false if entity_has_inclusion_criteria?(entity) &&
16
+ !request_meets_inclusion_criteria?(entity, parsed_request_body)
17
+
18
+ true
19
+ end
20
+
21
+ def strip_inferno_extensions(entity)
22
+ entity.extension.reject! { |ext| INFERNO_CONTROL_EXTENSION_URLS.include?(ext.url) }
23
+ entity
24
+ end
25
+
26
+ # ***********************************************************************
27
+ # FHIRPath-based selection criteria
28
+ # ***********************************************************************
29
+
30
+ def entity_has_inclusion_criteria?(entity)
31
+ entity.extension.any? { |ext| ext.url == 'urn:inferno:dtr:inclusion-criteria' }
32
+ end
33
+
34
+ def request_meets_inclusion_criteria?(entity, parsed_request_body)
35
+ criteria = entity.extension.find do |ext|
36
+ ext.url == 'urn:inferno:dtr:inclusion-criteria'
37
+ end&.valueExpression&.expression
38
+ return false unless criteria.present?
39
+
40
+ fhirpath_result = execute_fhirpath(parsed_request_body, criteria)
41
+ interpret_fhirpath_result_as_boolean(fhirpath_result)
42
+ end
43
+
44
+ # ***********************************************************************
45
+ # request index-based selection criteria
46
+ # ***********************************************************************
47
+
48
+ def entity_has_request_range_criteria?(entity)
49
+ entity.extension.any? { |ext| ext.url == 'urn:inferno:dtr:request-range' }
50
+ end
51
+
52
+ def request_meets_request_range_criteria?(entity, operation)
53
+ criteria = entity.extension.find { |ext| ext.url == 'urn:inferno:dtr:request-range' }&.valueString
54
+ return false unless criteria.present?
55
+
56
+ ranges_cover_value?(count_previous_successful_requests(operation) + 1, criteria)
57
+ end
58
+
59
+ def count_previous_successful_requests(operation)
60
+ requests_repo = Inferno::Repositories::Requests.new
61
+ previous_requests = requests_repo.requests_for_result(result.id)
62
+ previous_requests.select { |req| req.url.include?(operation) && req.status == 200 }.count
63
+ end
64
+
65
+ def ranges_cover_value?(value, ranges_string)
66
+ unless /\A(\d+(-\d+)?,)*\d+(-\d+)?\z/.match?(ranges_string)
67
+ raise ArgumentError,
68
+ "Invalid range string: #{ranges_string.inspect}"
69
+ end
70
+
71
+ ranges_string.split(',').any? do |part|
72
+ if part.include?('-')
73
+ a, b = part.split('-').map(&:to_i)
74
+ raise ArgumentError, "Inverted range in: #{part.inspect}" if a > b
75
+
76
+ (a..b).cover?(value)
77
+ else
78
+ part.to_i == value
79
+ end
80
+ end
81
+ rescue ArgumentError => e
82
+ raise Inferno::Exceptions::TestSuiteImplementationException.new('dtr response range criteria', e.message)
83
+ end
84
+ end
85
+ end
@@ -63,7 +63,7 @@ module DaVinciDTRTestKit
63
63
  end
64
64
 
65
65
  def verify_questionnaire_extensions(questionnaires)
66
- assert questionnaires&.any? && questionnaires.all? { |q| q.is_a? FHIR::Questionnaire }, 'No questionnaires found.'
66
+ assert questionnaires&.any? && questionnaires.all?(FHIR::Questionnaire), 'No questionnaires found.'
67
67
  questionnaires.each_with_index { |q, q_index| check_questionnaire_extensions(q, q_index) }
68
68
  check_library_references
69
69
  assert extension_presence.value?(true), 'No extensions found. Questionnaire must demonstrate prepopulation.'
@@ -112,7 +112,7 @@ module DaVinciDTRTestKit
112
112
  end
113
113
 
114
114
  def verify_questionnaire_items(questionnaires, final_cql_test: false)
115
- assert questionnaires&.any? && questionnaires.all? { |q| q.is_a? FHIR::Questionnaire }, 'No questionnaires found.'
115
+ assert questionnaires&.any? && questionnaires.all?(FHIR::Questionnaire), 'No questionnaires found.'
116
116
  questionnaires.each_with_index { |q, q_index| check_questionnaire_items(q, q_index) }
117
117
 
118
118
  begin
@@ -324,7 +324,7 @@ module DaVinciDTRTestKit
324
324
 
325
325
  def extract_contained_questionnaires(questionnaire_responses)
326
326
  questionnaire_responses&.filter_map do |qr|
327
- qr.contained&.filter { |resource| resource.is_a?(FHIR::Questionnaire) }
327
+ qr.contained&.grep(FHIR::Questionnaire)
328
328
  end&.flatten&.compact
329
329
  end
330
330
 
@@ -0,0 +1,21 @@
1
+ require_relative 'multi_request_message_helper'
2
+
3
+ module DaVinciDTRTestKit
4
+ module DTRConformanceVerification
5
+ include MultiRequestMessageHelper
6
+
7
+ def check_questionnaire_response_conformance(questionnaire_response_json, message_index,
8
+ target_profile_with_version)
9
+ questionnaire_response = parse_fhir_request_entity(questionnaire_response_json, 'QuestionnaireResponse',
10
+ message_index)
11
+ return unless questionnaire_response.present?
12
+
13
+ unless questionnaire_response.is_a?(FHIR::QuestionnaireResponse)
14
+ add_request_message('error',
15
+ "Expected a QuestionnaireResponse, found a #{questionnaire_response.resourceType}.")
16
+ end
17
+
18
+ resource_is_valid?(resource: questionnaire_response, profile_url: target_profile_with_version)
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,35 @@
1
+ module DaVinciDTRTestKit
2
+ module MultiRequestMessageHelper
3
+ def request_prefix(request_index)
4
+ "(Request #{request_index + 1}) "
5
+ end
6
+
7
+ def add_request_message(type, message, request_index)
8
+ add_message(type, "#{request_prefix(request_index)}#{message}")
9
+ end
10
+
11
+ def parse_fhir_request_entity(body, entity, request_index)
12
+ FHIR.from_contents(body)
13
+ rescue JSON::ParserError
14
+ add_request_message('error', "#{entity} contains invalid JSON.", request_index)
15
+ nil
16
+ end
17
+
18
+ def requests_with_errors_prefix
19
+ request_numbers = error_request_numbers
20
+ return '' if request_numbers.empty?
21
+
22
+ noun = request_numbers.size == 1 ? 'Request' : 'Requests'
23
+ "#{noun} #{request_numbers.to_sentence}: "
24
+ end
25
+
26
+ private
27
+
28
+ def error_request_numbers
29
+ messages
30
+ .select { |m| m[:type] == 'error' }
31
+ .filter_map { |m| m[:message].match(/\A\(Request (\d+)\)/) { |md| md[1].to_i } } # md[1] = first capture group
32
+ .sort.uniq
33
+ end
34
+ end
35
+ end