davinci_crd_test_kit 0.12.2 → 0.14.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 (341) hide show
  1. checksums.yaml +4 -4
  2. data/config/presets/inferno_crd_client_suite.json.erb +20 -14
  3. data/config/presets/inferno_crd_client_suite_prefetch_subset_v221.json.erb +125 -0
  4. data/config/presets/inferno_crd_client_suite_v221.json.erb +124 -0
  5. data/config/presets/inferno_crd_server_suite.json.erb +59 -2
  6. data/config/presets/inferno_crd_server_suite_v221.json.erb +94 -0
  7. data/config/presets/ri_crd_request_generator.json_v221.json.erb +13 -0
  8. data/config/presets/ri_crd_server.json.erb +19 -19
  9. data/lib/davinci_crd_test_kit/client/client_base_urls.rb +80 -0
  10. data/lib/davinci_crd_test_kit/{client_hook_request_validation.rb → client/client_hook_request_validation.rb} +1 -1
  11. data/lib/davinci_crd_test_kit/client/crd_client_options.rb +30 -0
  12. data/lib/davinci_crd_test_kit/client/endpoints/cds_services_discovery_handler.rb +34 -0
  13. data/lib/davinci_crd_test_kit/client/endpoints/custom_service_response.rb +342 -0
  14. data/lib/davinci_crd_test_kit/client/endpoints/gather_response_generation_data.rb +410 -0
  15. data/lib/davinci_crd_test_kit/client/endpoints/hook_request_endpoint.rb +233 -0
  16. data/lib/davinci_crd_test_kit/{mock_service_response.rb → client/endpoints/mock_service_response.rb} +165 -59
  17. data/lib/davinci_crd_test_kit/{card_responses → client/endpoints/mocked_card_responses}/companions_prerequisites.json +1 -0
  18. data/lib/davinci_crd_test_kit/{card_responses → client/endpoints/mocked_card_responses}/create_update_coverage_information.json +3 -2
  19. data/lib/davinci_crd_test_kit/{card_responses → client/endpoints/mocked_card_responses}/launch_smart_app.json +8 -1
  20. data/lib/davinci_crd_test_kit/{card_responses → client/endpoints/mocked_card_responses}/propose_alternate_request.json +1 -0
  21. data/lib/davinci_crd_test_kit/{card_responses → client/endpoints/mocked_card_responses}/request_form_completion.json +17 -16
  22. data/lib/davinci_crd_test_kit/client/multi_request_message_helper.rb +35 -0
  23. data/lib/davinci_crd_test_kit/client/tagged_request_load_helper.rb +38 -0
  24. data/lib/davinci_crd_test_kit/client/v2.0.1/api/client_fhir_api_create_test.rb +43 -0
  25. data/lib/davinci_crd_test_kit/client/v2.0.1/api/client_fhir_api_read_test.rb +43 -0
  26. data/lib/davinci_crd_test_kit/client/v2.0.1/api/client_fhir_api_search_test.rb +234 -0
  27. data/lib/davinci_crd_test_kit/client/v2.0.1/api/client_fhir_api_update_test.rb +43 -0
  28. data/lib/davinci_crd_test_kit/client/v2.0.1/api/client_fhir_api_validation_test.rb +63 -0
  29. data/lib/davinci_crd_test_kit/client/v2.0.1/auth/decode_auth_token_test.rb +65 -0
  30. data/lib/davinci_crd_test_kit/client/v2.0.1/auth/retrieve_jwks_test.rb +109 -0
  31. data/lib/davinci_crd_test_kit/client/v2.0.1/auth/token_header_test.rb +70 -0
  32. data/lib/davinci_crd_test_kit/client/v2.0.1/auth/token_payload_test.rb +85 -0
  33. data/lib/davinci_crd_test_kit/{routes/cds-services.json → client/v2.0.1/cds-services-v201.json} +1 -1
  34. data/lib/davinci_crd_test_kit/client/v2.0.1/client_appointment_book_group.rb +108 -0
  35. data/lib/davinci_crd_test_kit/client/v2.0.1/client_card_must_support_group.rb +31 -0
  36. data/lib/davinci_crd_test_kit/client/v2.0.1/client_encounter_discharge_group.rb +105 -0
  37. data/lib/davinci_crd_test_kit/client/v2.0.1/client_encounter_start_group.rb +105 -0
  38. data/lib/davinci_crd_test_kit/client/v2.0.1/client_fhir_api_group.rb +790 -0
  39. data/lib/davinci_crd_test_kit/client/v2.0.1/client_hooks_group.rb +74 -0
  40. data/lib/davinci_crd_test_kit/client/v2.0.1/client_order_dispatch_group.rb +111 -0
  41. data/lib/davinci_crd_test_kit/client/v2.0.1/client_order_select_group.rb +116 -0
  42. data/lib/davinci_crd_test_kit/client/v2.0.1/client_order_sign_group.rb +113 -0
  43. data/lib/davinci_crd_test_kit/{client_registration_group.rb → client/v2.0.1/client_registration_group.rb} +12 -8
  44. data/lib/davinci_crd_test_kit/client/v2.0.1/client_urls.rb +13 -0
  45. data/lib/davinci_crd_test_kit/client/v2.0.1/crd_client_suite.rb +134 -0
  46. data/lib/davinci_crd_test_kit/client/v2.0.1/invocation/appointment_book_receive_request_test.rb +129 -0
  47. data/lib/davinci_crd_test_kit/client/v2.0.1/invocation/encounter_discharge_receive_request_test.rb +126 -0
  48. data/lib/davinci_crd_test_kit/client/v2.0.1/invocation/encounter_start_receive_request_test.rb +126 -0
  49. data/lib/davinci_crd_test_kit/client/v2.0.1/invocation/order_dispatch_receive_request_test.rb +138 -0
  50. data/lib/davinci_crd_test_kit/client/v2.0.1/invocation/order_select_receive_request_test.rb +134 -0
  51. data/lib/davinci_crd_test_kit/client/v2.0.1/invocation/order_sign_receive_request_test.rb +136 -0
  52. data/lib/davinci_crd_test_kit/client/v2.0.1/must_support/client_card_must_support_coverage_information.rb +93 -0
  53. data/lib/davinci_crd_test_kit/client/v2.0.1/must_support/client_card_must_support_external_reference.rb +62 -0
  54. data/lib/davinci_crd_test_kit/client/v2.0.1/must_support/client_card_must_support_instructions.rb +62 -0
  55. data/lib/davinci_crd_test_kit/client/v2.0.1/registration/client_registration_verification_test.rb +94 -0
  56. data/lib/davinci_crd_test_kit/client/v2.0.1/registration/client_service_registration_attestation_test.rb +40 -0
  57. data/lib/davinci_crd_test_kit/client/v2.0.1/verify_request/hook_request_fetched_data_test.rb +86 -0
  58. data/lib/davinci_crd_test_kit/client/v2.0.1/verify_request/hook_request_optional_fields_test.rb +63 -0
  59. data/lib/davinci_crd_test_kit/client/v2.0.1/verify_request/hook_request_prefetch_equals_queried_test.rb +96 -0
  60. data/lib/davinci_crd_test_kit/client/v2.0.1/verify_request/hook_request_required_fields_test.rb +55 -0
  61. data/lib/davinci_crd_test_kit/client/v2.0.1/verify_request/hook_request_valid_context_test.rb +70 -0
  62. data/lib/davinci_crd_test_kit/client/v2.0.1/verify_request/hook_request_valid_prefetch_test.rb +62 -0
  63. data/lib/davinci_crd_test_kit/client/v2.0.1/verify_response/client_display_cards_attest.rb +83 -0
  64. data/lib/davinci_crd_test_kit/client/v2.0.1/verify_response/inferno_response_validation.rb +79 -0
  65. data/lib/davinci_crd_test_kit/client/v2.2.1/api/client_coverage_info_update_test.rb +212 -0
  66. data/lib/davinci_crd_test_kit/client/v2.2.1/api/client_crd_update_verification_group.rb +18 -0
  67. data/lib/davinci_crd_test_kit/client/v2.2.1/auth/decode_auth_token_test.rb +69 -0
  68. data/lib/davinci_crd_test_kit/client/v2.2.1/auth/retrieve_jwks_test.rb +120 -0
  69. data/lib/davinci_crd_test_kit/client/v2.2.1/auth/token_header_test.rb +92 -0
  70. data/lib/davinci_crd_test_kit/client/v2.2.1/auth/token_payload_test.rb +93 -0
  71. data/lib/davinci_crd_test_kit/client/v2.2.1/cds-services-prefetch-subset-v221.json +198 -0
  72. data/lib/davinci_crd_test_kit/client/v2.2.1/cds-services-v221.json +202 -0
  73. data/lib/davinci_crd_test_kit/client/v2.2.1/client_appointment_book_group.rb +102 -0
  74. data/lib/davinci_crd_test_kit/client/v2.2.1/client_cross_hook_group.rb +28 -0
  75. data/lib/davinci_crd_test_kit/client/v2.2.1/client_encounter_discharge_group.rb +96 -0
  76. data/lib/davinci_crd_test_kit/client/v2.2.1/client_encounter_start_group.rb +95 -0
  77. data/lib/davinci_crd_test_kit/client/v2.2.1/client_fhir_api_group.rb +88 -0
  78. data/lib/davinci_crd_test_kit/client/v2.2.1/client_hooks_group.rb +64 -0
  79. data/lib/davinci_crd_test_kit/client/v2.2.1/client_long_running_hook_group.rb +32 -0
  80. data/lib/davinci_crd_test_kit/client/v2.2.1/client_order_dispatch_group.rb +101 -0
  81. data/lib/davinci_crd_test_kit/client/v2.2.1/client_order_select_group.rb +102 -0
  82. data/lib/davinci_crd_test_kit/client/v2.2.1/client_order_sign_group.rb +107 -0
  83. data/lib/davinci_crd_test_kit/client/v2.2.1/client_registration_group.rb +27 -0
  84. data/lib/davinci_crd_test_kit/client/v2.2.1/client_urls.rb +27 -0
  85. data/lib/davinci_crd_test_kit/client/v2.2.1/crd_client_suite.rb +229 -0
  86. data/lib/davinci_crd_test_kit/client/v2.2.1/cross_hook/client_card_must_support_coverage_information_test.rb +63 -0
  87. data/lib/davinci_crd_test_kit/client/v2.2.1/cross_hook/client_fhirpath_collection_as_comma_delimited_string_test.rb +60 -0
  88. data/lib/davinci_crd_test_kit/client/v2.2.1/cross_hook/client_hook_instances_unique_test.rb +45 -0
  89. data/lib/davinci_crd_test_kit/client/v2.2.1/cross_hook/client_location_address_propagation_test.rb +135 -0
  90. data/lib/davinci_crd_test_kit/client/v2.2.1/cross_hook/client_prefetch_complete_and_subset_test.rb +103 -0
  91. data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/appointment_book_receive_request_test.rb +156 -0
  92. data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/encounter_discharge_receive_request_test.rb +157 -0
  93. data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/encounter_start_receive_request_test.rb +157 -0
  94. data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/order_dispatch_receive_request_test.rb +165 -0
  95. data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/order_select_receive_request_test.rb +165 -0
  96. data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/order_sign_receive_request_test.rb +165 -0
  97. data/lib/davinci_crd_test_kit/client/v2.2.1/long_running/client_long_running_receive_request_test.rb +64 -0
  98. data/lib/davinci_crd_test_kit/client/v2.2.1/long_running/client_skip_long_running_attestation_test.rb +49 -0
  99. data/lib/davinci_crd_test_kit/client/v2.2.1/registration/client_registration_verification_test.rb +161 -0
  100. data/lib/davinci_crd_test_kit/client/v2.2.1/registration/client_service_registration_attestation_test.rb +107 -0
  101. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_conformance_test.rb +47 -0
  102. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_coverage_verification_test.rb +152 -0
  103. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_data_fetch_verification_test.rb +55 -0
  104. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_granted_scopes_test.rb +123 -0
  105. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_prefetch_complete_test.rb +127 -0
  106. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_prefetch_profiles_test.rb +55 -0
  107. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_requested_version_test.rb +54 -0
  108. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_secured_transport_test.rb +48 -0
  109. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_response/client_display_cards_attest.rb +74 -0
  110. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_response/hook_response_support_coverage_information_test.rb +30 -0
  111. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_response/inferno_response_validation.rb +77 -0
  112. data/lib/davinci_crd_test_kit/cross_suite/base_urls.rb +20 -0
  113. data/lib/davinci_crd_test_kit/cross_suite/cards_identification.rb +312 -0
  114. data/lib/davinci_crd_test_kit/{cards_validation.rb → cross_suite/cards_validation.rb} +104 -47
  115. data/lib/davinci_crd_test_kit/cross_suite/coverage-information_stu201_metadata.yml +27 -0
  116. data/lib/davinci_crd_test_kit/cross_suite/coverage-information_stu221_metadata.yml +60 -0
  117. data/lib/davinci_crd_test_kit/cross_suite/fhirpath_on_cds_request.rb +177 -0
  118. data/lib/davinci_crd_test_kit/{hook_request_field_validation.rb → cross_suite/hook_request_field_validation.rb} +282 -203
  119. data/lib/davinci_crd_test_kit/cross_suite/logical_models_override_helper.rb +220 -0
  120. data/lib/davinci_crd_test_kit/cross_suite/prefetch_completeness_checker.rb +462 -0
  121. data/lib/davinci_crd_test_kit/cross_suite/prefetch_contents_validation.rb +81 -0
  122. data/lib/davinci_crd_test_kit/cross_suite/prefetch_profile_validation.rb +48 -0
  123. data/lib/davinci_crd_test_kit/cross_suite/profiles_and_resource_types.rb +63 -0
  124. data/lib/davinci_crd_test_kit/cross_suite/replace_tokens.rb +38 -0
  125. data/lib/davinci_crd_test_kit/cross_suite/requests_logical_model_validation.rb +202 -0
  126. data/lib/davinci_crd_test_kit/cross_suite/response_logical_model_validation.rb +274 -0
  127. data/lib/davinci_crd_test_kit/{suggestion_actions_validation.rb → cross_suite/suggestion_actions_validation.rb} +70 -50
  128. data/lib/davinci_crd_test_kit/cross_suite/tags.rb +42 -0
  129. data/lib/davinci_crd_test_kit/metadata.rb +10 -44
  130. data/lib/davinci_crd_test_kit/requirements/cds-hooks-library_1.0.1_requirements.xlsx +0 -0
  131. data/lib/davinci_crd_test_kit/requirements/cds-hooks_2.0_requirements.xlsx +0 -0
  132. data/lib/davinci_crd_test_kit/requirements/cds-hooks_3.0.0-ballot_requirements.xlsx +0 -0
  133. data/lib/davinci_crd_test_kit/requirements/davinci_crd_test_kit_requirements.csv +742 -65
  134. data/lib/davinci_crd_test_kit/requirements/generated/crd_client_requirements_coverage.csv +279 -54
  135. data/lib/davinci_crd_test_kit/requirements/generated/crd_client_v221_requirements_coverage.csv +1430 -0
  136. data/lib/davinci_crd_test_kit/requirements/generated/crd_server_requirements_coverage.csv +36 -45
  137. data/lib/davinci_crd_test_kit/requirements/generated/crd_server_v221_requirements_coverage.csv +143 -0
  138. data/lib/davinci_crd_test_kit/requirements/hl7.fhir.us.davinci-crd_2.0.1_requirements.xlsx +0 -0
  139. data/lib/davinci_crd_test_kit/requirements/hl7.fhir.us.davinci-crd_2.2.1_requirements.xlsx +0 -0
  140. data/lib/davinci_crd_test_kit/server/endpoints/jwk_set_endpoint_handler.rb +13 -0
  141. data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_create_endpoint.rb +23 -0
  142. data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_delete_endpoint.rb +30 -0
  143. data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_metadata_endpoint.rb +112 -0
  144. data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_read_endpoint.rb +21 -0
  145. data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_request_handler.rb +261 -0
  146. data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_search_endpoint.rb +561 -0
  147. data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_update_endpoint.rb +24 -0
  148. data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/stress-test-Bundle.json +54687 -0
  149. data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr_endpoints.rb +95 -0
  150. data/lib/davinci_crd_test_kit/server/jobs/invoke_hook.rb +225 -0
  151. data/lib/davinci_crd_test_kit/{jwt_helper.rb → server/jwt_helper.rb} +1 -12
  152. data/lib/davinci_crd_test_kit/server/resource_extractor.rb +68 -0
  153. data/lib/davinci_crd_test_kit/server/server_abstract_invoke_hook_test.rb +165 -0
  154. data/lib/davinci_crd_test_kit/server/server_base_urls.rb +30 -0
  155. data/lib/davinci_crd_test_kit/{server_hook_helper.rb → server/server_hook_helper.rb} +1 -1
  156. data/lib/davinci_crd_test_kit/{server_hook_request_validation.rb → server/server_hook_request_validation.rb} +1 -1
  157. data/lib/davinci_crd_test_kit/{test_helper.rb → server/server_test_helper.rb} +7 -3
  158. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Appointment.yml +5 -0
  159. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/ClaimResponse.yml +5 -0
  160. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/CommunicationRequest.yml +5 -0
  161. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Coverage.yml +21 -0
  162. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Device.yml +5 -0
  163. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/DeviceRequest.yml +5 -0
  164. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Encounter.yml +7 -0
  165. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Location.yml +5 -0
  166. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/MedicationRequest.yml +5 -0
  167. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/NutritionOrder.yml +5 -0
  168. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Organization.yml +5 -0
  169. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Patient.yml +5 -0
  170. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Practitioner.yml +5 -0
  171. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/PractitionerRole.yml +40 -0
  172. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/ServiceRequest.yml +5 -0
  173. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Task.yml +5 -0
  174. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/VisionPrescription.yml +5 -0
  175. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_server_suite.rb +99 -0
  176. data/lib/davinci_crd_test_kit/server/v2.0.1/discovery/discovery_endpoint_test.rb +90 -0
  177. data/lib/davinci_crd_test_kit/server/v2.0.1/discovery/discovery_services_validation_test.rb +67 -0
  178. data/lib/davinci_crd_test_kit/server/v2.0.1/interaction/server_invoke_hook_test.rb +12 -0
  179. data/lib/davinci_crd_test_kit/server/v2.0.1/must_support/coverage_information_system_action_across_hooks_validation_test.rb +34 -0
  180. data/lib/davinci_crd_test_kit/server/v2.0.1/must_support/external_reference_card_across_hooks_validation_test.rb +30 -0
  181. data/lib/davinci_crd_test_kit/server/v2.0.1/must_support/instructions_card_received_across_hooks_test.rb +27 -0
  182. data/lib/davinci_crd_test_kit/server/v2.0.1/server_appointment_book_group.rb +191 -0
  183. data/lib/davinci_crd_test_kit/server/v2.0.1/server_demonstrate_hook_response_group.rb +93 -0
  184. data/lib/davinci_crd_test_kit/server/v2.0.1/server_discovery_group.rb +62 -0
  185. data/lib/davinci_crd_test_kit/server/v2.0.1/server_encounter_discharge_group.rb +186 -0
  186. data/lib/davinci_crd_test_kit/server/v2.0.1/server_encounter_start_group.rb +186 -0
  187. data/lib/davinci_crd_test_kit/server/v2.0.1/server_hooks_group.rb +73 -0
  188. data/lib/davinci_crd_test_kit/server/v2.0.1/server_order_dispatch_group.rb +191 -0
  189. data/lib/davinci_crd_test_kit/server/v2.0.1/server_order_select_group.rb +211 -0
  190. data/lib/davinci_crd_test_kit/server/v2.0.1/server_order_sign_group.rb +216 -0
  191. data/lib/davinci_crd_test_kit/server/v2.0.1/server_required_card_response_validation_group.rb +28 -0
  192. data/lib/davinci_crd_test_kit/server/v2.0.1/server_urls.rb +13 -0
  193. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_request/service_request_context_validation_test.rb +30 -0
  194. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_request/service_request_optional_fields_validation_test.rb +39 -0
  195. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_request/service_request_required_fields_validation_test.rb +40 -0
  196. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/additional_orders_validation_test.rb +59 -0
  197. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/card_optional_fields_validation_test.rb +51 -0
  198. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/coverage_information_system_action_received_test.rb +65 -0
  199. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/coverage_information_system_action_validation_test.rb +120 -0
  200. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/create_or_update_coverage_info_response_validation_test.rb +70 -0
  201. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/external_reference_card_validation_test.rb +37 -0
  202. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/form_completion_response_validation_test.rb +67 -0
  203. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/instructions_card_received_test.rb +30 -0
  204. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/launch_smart_app_card_validation_test.rb +39 -0
  205. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/propose_alternate_request_card_validation_test.rb +46 -0
  206. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/service_response_validation_test.rb +83 -0
  207. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Appointment_withorder.yml +5 -0
  208. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Appointment_withoutorder.yml +5 -0
  209. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/CommunicationRequest.yml +5 -0
  210. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Coverage.yml +5 -0
  211. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Device.yml +5 -0
  212. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/DeviceRequest.yml +5 -0
  213. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Encounter.yml +5 -0
  214. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Location.yml +5 -0
  215. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/MedicationRequest.yml +5 -0
  216. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/NutritionOrder.yml +5 -0
  217. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Organization.yml +5 -0
  218. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Patient.yml +5 -0
  219. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/PractitionerRole.yml +5 -0
  220. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/ServiceRequest.yml +5 -0
  221. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/VisionPrescription.yml +5 -0
  222. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_server_suite.rb +115 -0
  223. data/lib/davinci_crd_test_kit/server/v2.2.1/discovery/discovery_configuration_test.rb +159 -0
  224. data/lib/davinci_crd_test_kit/server/v2.2.1/discovery/discovery_endpoint_test.rb +90 -0
  225. data/lib/davinci_crd_test_kit/server/v2.2.1/discovery/discovery_prefetch_support_test.rb +43 -0
  226. data/lib/davinci_crd_test_kit/server/v2.2.1/discovery/discovery_services_validation_test.rb +121 -0
  227. data/lib/davinci_crd_test_kit/server/v2.2.1/interaction/server_invoke_hook_test.rb +17 -0
  228. data/lib/davinci_crd_test_kit/server/v2.2.1/must_support/coverage_information_must_support_test.rb +71 -0
  229. data/lib/davinci_crd_test_kit/server/v2.2.1/must_support/coverage_information_system_action_across_hooks_validation_test.rb +36 -0
  230. data/lib/davinci_crd_test_kit/server/v2.2.1/must_support/supported_us_core_versions_test.rb +118 -0
  231. data/lib/davinci_crd_test_kit/server/v2.2.1/server_appointment_book_group.rb +213 -0
  232. data/lib/davinci_crd_test_kit/server/v2.2.1/server_demonstrate_hook_response_group.rb +93 -0
  233. data/lib/davinci_crd_test_kit/server/v2.2.1/server_discovery_group.rb +69 -0
  234. data/lib/davinci_crd_test_kit/server/v2.2.1/server_encounter_discharge_group.rb +194 -0
  235. data/lib/davinci_crd_test_kit/server/v2.2.1/server_encounter_start_group.rb +194 -0
  236. data/lib/davinci_crd_test_kit/server/v2.2.1/server_hooks_group.rb +73 -0
  237. data/lib/davinci_crd_test_kit/server/v2.2.1/server_order_dispatch_group.rb +214 -0
  238. data/lib/davinci_crd_test_kit/server/v2.2.1/server_order_select_group.rb +219 -0
  239. data/lib/davinci_crd_test_kit/server/v2.2.1/server_order_sign_group.rb +241 -0
  240. data/lib/davinci_crd_test_kit/server/v2.2.1/server_required_card_response_validation_group.rb +30 -0
  241. data/lib/davinci_crd_test_kit/server/v2.2.1/server_urls.rb +13 -0
  242. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_request/service_request_context_validation_test.rb +30 -0
  243. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_request/service_request_no_custom_extensions_test.rb +120 -0
  244. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_request/service_request_optional_fields_validation_test.rb +39 -0
  245. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_request/service_request_required_fields_validation_test.rb +40 -0
  246. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/additional_orders_validation_test.rb +66 -0
  247. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/all_responses_include_coverage_information_test.rb +123 -0
  248. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/card_optional_fields_validation_test.rb +57 -0
  249. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/coverage_info_configuration_test.rb +83 -0
  250. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/coverage_information_system_action_received_test.rb +65 -0
  251. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/coverage_information_system_action_validation_test.rb +184 -0
  252. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/create_or_update_coverage_info_response_validation_test.rb +75 -0
  253. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/external_reference_card_validation_test.rb +47 -0
  254. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/form_completion_response_validation_test.rb +91 -0
  255. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/hook_request_resource_resolution.rb +137 -0
  256. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/instructions_card_received_test.rb +32 -0
  257. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/launch_smart_app_card_validation_test.rb +49 -0
  258. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/order_dispatch_coverage_information_test.rb +38 -0
  259. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/propose_alternate_request_card_validation_test.rb +54 -0
  260. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/service_response_validation_test.rb +97 -0
  261. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/unknown_cds_hooks_elements_test.rb +78 -0
  262. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/unknown_configuration_test.rb +78 -0
  263. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/unknown_context_test.rb +78 -0
  264. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/verify_response_without_billing_options_test.rb +43 -0
  265. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/verify_response_without_configuration_test.rb +44 -0
  266. data/lib/davinci_crd_test_kit/version.rb +2 -2
  267. data/lib/davinci_crd_test_kit.rb +4 -2
  268. metadata +308 -101
  269. data/lib/davinci_crd_test_kit/client_fhir_api_group.rb +0 -785
  270. data/lib/davinci_crd_test_kit/client_hooks_group.rb +0 -75
  271. data/lib/davinci_crd_test_kit/client_tests/appointment_book_receive_request_test.rb +0 -93
  272. data/lib/davinci_crd_test_kit/client_tests/client_appointment_book_group.rb +0 -75
  273. data/lib/davinci_crd_test_kit/client_tests/client_display_cards_attest.rb +0 -48
  274. data/lib/davinci_crd_test_kit/client_tests/client_encounter_discharge_group.rb +0 -73
  275. data/lib/davinci_crd_test_kit/client_tests/client_encounter_start_group.rb +0 -73
  276. data/lib/davinci_crd_test_kit/client_tests/client_fhir_api_create_test.rb +0 -41
  277. data/lib/davinci_crd_test_kit/client_tests/client_fhir_api_read_test.rb +0 -39
  278. data/lib/davinci_crd_test_kit/client_tests/client_fhir_api_search_test.rb +0 -232
  279. data/lib/davinci_crd_test_kit/client_tests/client_fhir_api_update_test.rb +0 -41
  280. data/lib/davinci_crd_test_kit/client_tests/client_fhir_api_validation_test.rb +0 -60
  281. data/lib/davinci_crd_test_kit/client_tests/client_order_dispatch_group.rb +0 -79
  282. data/lib/davinci_crd_test_kit/client_tests/client_order_select_group.rb +0 -82
  283. data/lib/davinci_crd_test_kit/client_tests/client_order_sign_group.rb +0 -81
  284. data/lib/davinci_crd_test_kit/client_tests/client_registration_verification_test.rb +0 -88
  285. data/lib/davinci_crd_test_kit/client_tests/decode_auth_token_test.rb +0 -60
  286. data/lib/davinci_crd_test_kit/client_tests/encounter_discharge_receive_request_test.rb +0 -90
  287. data/lib/davinci_crd_test_kit/client_tests/encounter_start_receive_request_test.rb +0 -90
  288. data/lib/davinci_crd_test_kit/client_tests/hook_request_optional_fields_test.rb +0 -57
  289. data/lib/davinci_crd_test_kit/client_tests/hook_request_required_fields_test.rb +0 -49
  290. data/lib/davinci_crd_test_kit/client_tests/hook_request_valid_context_test.rb +0 -68
  291. data/lib/davinci_crd_test_kit/client_tests/hook_request_valid_prefetch_test.rb +0 -69
  292. data/lib/davinci_crd_test_kit/client_tests/order_dispatch_receive_request_test.rb +0 -102
  293. data/lib/davinci_crd_test_kit/client_tests/order_select_receive_request_test.rb +0 -98
  294. data/lib/davinci_crd_test_kit/client_tests/order_sign_receive_request_test.rb +0 -101
  295. data/lib/davinci_crd_test_kit/client_tests/retrieve_jwks_test.rb +0 -105
  296. data/lib/davinci_crd_test_kit/client_tests/submitted_response_validation.rb +0 -44
  297. data/lib/davinci_crd_test_kit/client_tests/token_header_test.rb +0 -65
  298. data/lib/davinci_crd_test_kit/client_tests/token_payload_test.rb +0 -78
  299. data/lib/davinci_crd_test_kit/crd_client_suite.rb +0 -185
  300. data/lib/davinci_crd_test_kit/crd_options.rb +0 -9
  301. data/lib/davinci_crd_test_kit/crd_server_suite.rb +0 -125
  302. data/lib/davinci_crd_test_kit/igs/davinci-crd-2.0.1.tgz +0 -0
  303. data/lib/davinci_crd_test_kit/routes/cds_services_discovery_handler.rb +0 -18
  304. data/lib/davinci_crd_test_kit/routes/hook_request_endpoint.rb +0 -77
  305. data/lib/davinci_crd_test_kit/routes/jwk_set_endpoint_handler.rb +0 -15
  306. data/lib/davinci_crd_test_kit/server_appointment_book_group.rb +0 -176
  307. data/lib/davinci_crd_test_kit/server_demonstrate_hook_response_group.rb +0 -77
  308. data/lib/davinci_crd_test_kit/server_discovery_group.rb +0 -60
  309. data/lib/davinci_crd_test_kit/server_encounter_discharge_group.rb +0 -170
  310. data/lib/davinci_crd_test_kit/server_encounter_start_group.rb +0 -170
  311. data/lib/davinci_crd_test_kit/server_hooks_group.rb +0 -71
  312. data/lib/davinci_crd_test_kit/server_order_dispatch_group.rb +0 -176
  313. data/lib/davinci_crd_test_kit/server_order_select_group.rb +0 -195
  314. data/lib/davinci_crd_test_kit/server_order_sign_group.rb +0 -201
  315. data/lib/davinci_crd_test_kit/server_required_card_response_validation_group.rb +0 -26
  316. data/lib/davinci_crd_test_kit/server_tests/additional_orders_validation_test.rb +0 -68
  317. data/lib/davinci_crd_test_kit/server_tests/card_optional_fields_validation_test.rb +0 -47
  318. data/lib/davinci_crd_test_kit/server_tests/coverage_information_system_action_across_hooks_validation_test.rb +0 -32
  319. data/lib/davinci_crd_test_kit/server_tests/coverage_information_system_action_received_test.rb +0 -63
  320. data/lib/davinci_crd_test_kit/server_tests/coverage_information_system_action_validation_test.rb +0 -118
  321. data/lib/davinci_crd_test_kit/server_tests/create_or_update_coverage_info_response_validation_test.rb +0 -71
  322. data/lib/davinci_crd_test_kit/server_tests/discovery_endpoint_test.rb +0 -88
  323. data/lib/davinci_crd_test_kit/server_tests/discovery_services_validation_test.rb +0 -65
  324. data/lib/davinci_crd_test_kit/server_tests/external_reference_card_across_hooks_validation_test.rb +0 -28
  325. data/lib/davinci_crd_test_kit/server_tests/external_reference_card_validation_test.rb +0 -36
  326. data/lib/davinci_crd_test_kit/server_tests/form_completion_response_validation_test.rb +0 -78
  327. data/lib/davinci_crd_test_kit/server_tests/instructions_card_received_across_hooks_test.rb +0 -25
  328. data/lib/davinci_crd_test_kit/server_tests/instructions_card_received_test.rb +0 -26
  329. data/lib/davinci_crd_test_kit/server_tests/launch_smart_app_card_validation_test.rb +0 -38
  330. data/lib/davinci_crd_test_kit/server_tests/propose_alternate_request_card_validation_test.rb +0 -63
  331. data/lib/davinci_crd_test_kit/server_tests/service_call_test.rb +0 -101
  332. data/lib/davinci_crd_test_kit/server_tests/service_request_context_validation_test.rb +0 -28
  333. data/lib/davinci_crd_test_kit/server_tests/service_request_optional_fields_validation_test.rb +0 -37
  334. data/lib/davinci_crd_test_kit/server_tests/service_request_required_fields_validation_test.rb +0 -38
  335. data/lib/davinci_crd_test_kit/server_tests/service_response_validation_test.rb +0 -81
  336. data/lib/davinci_crd_test_kit/tags.rb +0 -10
  337. data/lib/davinci_crd_test_kit/urls.rb +0 -52
  338. /data/lib/davinci_crd_test_kit/{card_responses → client/endpoints/mocked_card_responses}/external_reference.json +0 -0
  339. /data/lib/davinci_crd_test_kit/{card_responses → client/endpoints/mocked_card_responses}/instructions.json +0 -0
  340. /data/lib/davinci_crd_test_kit/{crd_jwks.json → server/endpoints/crd_jwks.json} +0 -0
  341. /data/lib/davinci_crd_test_kit/{jwks.rb → server/endpoints/jwks.rb} +0 -0
@@ -0,0 +1,790 @@
1
+ require 'tls_test_kit'
2
+ require_relative '../crd_client_options'
3
+ require_relative 'api/client_fhir_api_read_test'
4
+ require_relative 'api/client_fhir_api_search_test'
5
+ require_relative 'api/client_fhir_api_create_test'
6
+ require_relative 'api/client_fhir_api_update_test'
7
+ require_relative 'api/client_fhir_api_validation_test'
8
+ require 'smart_app_launch/smart_stu1_suite'
9
+ require 'smart_app_launch/smart_stu2_suite'
10
+
11
+ module DaVinciCRDTestKit
12
+ module V201
13
+ class ClientFHIRAPIGroup < Inferno::TestGroup
14
+ title 'FHIR API'
15
+ description <<~DESCRIPTION
16
+ Systems wishing to conform to the [CRD client](https://hl7.org/fhir/us/davinci-crd/STU2/CapabilityStatement-crd-client.html)
17
+ role are responsible for returning data requested by the CRD server needed to provide decision support. The Da
18
+ Vinci CRD client FHIR API Test Group contains tests that test the ['server' capabilities](https://hl7.org/fhir/us/davinci-crd/CapabilityStatement-crd-client.html#resourcesSummary1)
19
+ of the CRD client and ensures that the CRD client can respond to CRD server queriers. These 'server' capabilities
20
+ are based on [US Core](https://hl7.org/fhir/us/core/STU3.1.1/). This test kit does not test the base US Core
21
+ capabilities. In addition to the U.S. Core expectations, the CRD client SHALL support all 'SHOULD' `read` and
22
+ `search` capabilities listed for resources referenced in supported hooks and order types if it does not support
23
+ returning the associated resources as part of CDS Hooks pre-fetch. The CRD client SHALL also support `update`
24
+ functionality for all resources listed where the client allows invoking hooks based on the resource.
25
+
26
+ This test group contains two main groups of tests:
27
+ * SMART App Launch Authorization: A group of tests that perform FHIR API authorization using [SMART on FHIR](https://hl7.org/fhir/smart-app-launch/index.html)
28
+ EHR Launch Sequence
29
+ * CRD FHIR RESTful Capabilities: A group of tests that test each CRD resource profile and ensure the CRD client
30
+ supports the appropriate FHIR operations required on each resource
31
+ DESCRIPTION
32
+ id :crd_v201_client_fhir_api
33
+
34
+ input :url,
35
+ title: 'FHIR Endpoint',
36
+ description: 'URL of the CRD FHIR server'
37
+
38
+ group do
39
+ title 'Authorization'
40
+ description %(
41
+ Perform an EHR [SMART App Launch](https://www.hl7.org/fhir/smart-app-launch/) to Authorize the client FHIR
42
+ server with Inferno so that Inferno may access resources on the FHIR server in order to perform the
43
+ FHIR RESTful Capabilities tests.
44
+ )
45
+ verifies_requirements 'hl7.fhir.us.davinci-crd_2.0.1@64', 'hl7.fhir.us.davinci-crd_2.0.1@65',
46
+ 'hl7.fhir.us.davinci-crd_2.0.1@66', 'hl7.fhir.us.davinci-crd_2.0.1@89',
47
+ 'hl7.fhir.us.davinci-crd_2.0.1@92', 'cds-hooks_2.0@174'
48
+
49
+ config(
50
+ inputs: {
51
+ smart_auth_info: {
52
+ name: :smart_auth_info,
53
+ title: 'EHR Launch Credentials',
54
+ options: {
55
+ mode: 'auth',
56
+ components: [
57
+ Inferno::DSL::AuthInfo.default_auth_type_component_without_backend_services
58
+ ]
59
+ }
60
+ }
61
+ },
62
+ outputs: {
63
+ smart_auth_info: { name: :smart_auth_info }
64
+ }
65
+ )
66
+
67
+ group from: :smart_discovery do
68
+ required_suite_options CRDClientOptions::SMART_1_REQUIREMENT
69
+ run_as_group
70
+
71
+ test from: :tls_version_test do
72
+ title 'CRD FHIR Server is secured by transport layer security'
73
+ description <<~DESCRIPTION
74
+ Under [Privacy, Security, and Safety](https://hl7.org/fhir/us/davinci-crd/STU2/security.html),
75
+ the CRD Implementation Guide imposes the following rule about TLS:
76
+
77
+ As per the [CDS Hook specification](https://cds-hooks.hl7.org/2.0/#security-and-safety),
78
+ communications between CRD clients and CRD servers SHALL
79
+ use TLS. Mutual TLS is not required by this specification but is permitted. CRD servers and
80
+ CRD clients SHOULD enforce a minimum version and other TLS configuration requirements based
81
+ on HRex rules for PHI exchange.
82
+
83
+ This test verifies that the FHIR server is using TLS 1.2 or higher.
84
+ DESCRIPTION
85
+ id :crd_v201_server_tls_version_stu1
86
+
87
+ config(
88
+ options: { minimum_allowed_version: OpenSSL::SSL::TLS1_2_VERSION }
89
+ )
90
+ end
91
+ end
92
+
93
+ group from: :smart_ehr_launch,
94
+ required_suite_options: CRDClientOptions::SMART_1_REQUIREMENT,
95
+ run_as_group: true
96
+
97
+ group from: :smart_discovery_stu2 do
98
+ required_suite_options CRDClientOptions::SMART_2_REQUIREMENT
99
+ run_as_group
100
+
101
+ test from: :tls_version_test do
102
+ title 'CRD FHIR Server is secured by transport layer security'
103
+ description <<~DESCRIPTION
104
+ Under [Privacy, Security, and Safety](https://hl7.org/fhir/us/davinci-crd/STU2/security.html),
105
+ the CRD Implementation Guide imposes the following rule about TLS:
106
+
107
+ As per the [CDS Hook specification](https://cds-hooks.hl7.org/2.0/#security-and-safety),
108
+ communications between CRD clients and CRD servers SHALL
109
+ use TLS. Mutual TLS is not required by this specification but is permitted. CRD servers and
110
+ CRD clients SHOULD enforce a minimum version and other TLS configuration requirements based
111
+ on HRex rules for PHI exchange.
112
+
113
+ This test verifies that the FHIR server is using TLS 1.2 or higher.
114
+ DESCRIPTION
115
+ id :crd_v201_server_tls_version_stu2
116
+
117
+ config(
118
+ options: { minimum_allowed_version: OpenSSL::SSL::TLS1_2_VERSION }
119
+ )
120
+ end
121
+ end
122
+
123
+ group from: :smart_ehr_launch_stu2,
124
+ required_suite_options: CRDClientOptions::SMART_2_REQUIREMENT,
125
+ run_as_group: true
126
+
127
+ group from: :smart_openid_connect do
128
+ run_as_group
129
+ optional
130
+ config(
131
+ inputs: {
132
+ id_token: { name: :ehr_id_token }
133
+ }
134
+ )
135
+ end
136
+
137
+ group from: :smart_token_refresh do
138
+ run_as_group
139
+ optional
140
+ config(
141
+ inputs: {
142
+ received_scopes: { name: :ehr_received_scopes }
143
+ }
144
+ )
145
+ end
146
+ end
147
+
148
+ group do
149
+ title 'FHIR RESTful Capabilities'
150
+ description %(
151
+ This test group contains groups of tests for each CRD resource profile and ensures the
152
+ [CRD client](https://hl7.org/fhir/us/davinci-crd/STU2/CapabilityStatement-crd-client.html)
153
+ supports the appropriate FHIR operations required on each resource. For each resource, Inferno will
154
+ perform the required FHIR operations, and then it will validate any resources that are returned as a result of
155
+ these FHIR operations.
156
+
157
+ The resources that are a part of the CRD IG configuration include:
158
+ * [Appointment](https://hl7.org/fhir/us/davinci-crd/STU2/CapabilityStatement-crd-client.html#Appointment1-1)
159
+ * [CommunicationRequest](https://hl7.org/fhir/us/davinci-crd/STU2/CapabilityStatement-crd-client.html#CommunicationRequest1-2)
160
+ * [Coverage](https://hl7.org/fhir/us/davinci-crd/STU2/CapabilityStatement-crd-client.html#Coverage1-3)
161
+ * [Device](https://hl7.org/fhir/us/davinci-crd/STU2/CapabilityStatement-crd-client.html#Device1-4)
162
+ * [DeviceRequest](https://hl7.org/fhir/us/davinci-crd/STU2/CapabilityStatement-crd-client.html#DeviceRequest1-5)
163
+ * [Encounter](https://hl7.org/fhir/us/davinci-crd/STU2/CapabilityStatement-crd-client.html#Encounter1-6)
164
+ * [Patient](https://hl7.org/fhir/us/davinci-crd/STU2/CapabilityStatement-crd-client.html#Patient1-7)
165
+ * [Practitioner](https://hl7.org/fhir/us/davinci-crd/STU2/CapabilityStatement-crd-client.html#Practitioner1-8)
166
+ * [PractitionerRole](https://hl7.org/fhir/us/davinci-crd/STU2/CapabilityStatement-crd-client.html#PractitionerRole1-9)
167
+ * [Location](https://hl7.org/fhir/us/davinci-crd/STU2/CapabilityStatement-crd-client.html#Location1-10)
168
+ * [MedicationRequest](https://hl7.org/fhir/us/davinci-crd/STU2/CapabilityStatement-crd-client.html#MedicationRequest1-11)
169
+ * [NutritionOrder](https://hl7.org/fhir/us/davinci-crd/STU2/CapabilityStatement-crd-client.html#NutritionOrder1-12)
170
+ * [Organization](https://hl7.org/fhir/us/davinci-crd/STU2/CapabilityStatement-crd-client.html#Organization1-13)
171
+ * [ServiceRequest](https://hl7.org/fhir/us/davinci-crd/STU2/CapabilityStatement-crd-client.html#ServiceRequest1-14)
172
+ * [ClaimResponse](https://hl7.org/fhir/us/davinci-crd/STU2/CapabilityStatement-crd-client.html#ClaimResponse1-15)
173
+ * [Task](https://hl7.org/fhir/us/davinci-crd/STU2/CapabilityStatement-crd-client.html#Task1-16)
174
+ * [VisionPrescription](https://hl7.org/fhir/us/davinci-crd/STU2/CapabilityStatement-crd-client.html#VisionPrescription1-17)
175
+ )
176
+ verifies_requirements 'hl7.fhir.us.davinci-crd_2.0.1@43'
177
+
178
+ input :url
179
+ input :smart_auth_info,
180
+ type: :auth_info,
181
+ title: 'OAuth Credentials',
182
+ options: { mode: 'access' },
183
+ optional: true
184
+
185
+ fhir_client do
186
+ url :url
187
+ auth_info :smart_auth_info
188
+ end
189
+
190
+ group do
191
+ title 'Appointment'
192
+ description %(
193
+ Verify the CRD client can perform the required FHIR interactions on the Appointment resource, and
194
+ validate any returned resources against the [CRD Appointment profile](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-profile-appointment.html)
195
+
196
+ Required Appointment resource FHIR interactions:
197
+ * SHOULD support `update`
198
+
199
+ Resource Conformance: SHOULD
200
+ )
201
+ optional
202
+
203
+ test from: :crd_v201_client_fhir_api_update_test,
204
+ optional: true,
205
+ config: {
206
+ options: { resource_type: 'Appointment' },
207
+ inputs: {
208
+ update_resources: {
209
+ name: :appointment_update_resources,
210
+ title: 'Appointment Resources'
211
+ }
212
+ }
213
+ }
214
+ end
215
+
216
+ group do
217
+ title 'CommunicationRequest'
218
+ description %(
219
+ Verify the CRD client can perform the required FHIR interactions on the CommunicationRequest resource, and
220
+ validate any returned resources against the [CRD CommunicationRequest profile](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-profile-communicationrequest.html)
221
+
222
+ Required CommunicationRequest resource FHIR interactions:
223
+ * SHOULD support `update`
224
+
225
+ Resource Conformance: SHOULD
226
+ )
227
+ optional
228
+ verifies_requirements 'hl7.fhir.us.davinci-crd_2.0.1@150'
229
+
230
+ test from: :crd_v201_client_fhir_api_update_test,
231
+ optional: true,
232
+ config: {
233
+ options: { resource_type: 'CommunicationRequest' },
234
+ inputs: {
235
+ update_resources: {
236
+ name: :communication_request_update_resources,
237
+ title: 'CommunicationRequest Resources'
238
+ }
239
+ }
240
+ }
241
+ end
242
+
243
+ group do
244
+ title 'Coverage'
245
+ description %(
246
+ Verify the CRD client can perform the required FHIR interactions on the Coverage resource, and
247
+ validate any returned resources against the [CRD Coverage profile](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-profile-coverage.html)
248
+
249
+ Required Coverage resource FHIR interactions:
250
+ * SHALL support search by [`patient`](http://hl7.org/fhir/R4/coverage.html#search)
251
+ * SHALL support search by [`status`](http://hl7.org/fhir/R4/coverage.html#search)
252
+
253
+ Resource Conformance: SHALL
254
+ )
255
+
256
+ test from: :crd_v201_client_fhir_api_search_test,
257
+ id: :crd_v201_client_coverage_patient_search_test,
258
+ title: 'Search by patient',
259
+ config: {
260
+ options: { resource_type: 'Coverage', search_type: 'patient' },
261
+ inputs: { search_param_values: {
262
+ name: :patient_ids,
263
+ title: 'Patient IDs',
264
+ description: 'Comma separated list of Patient IDs that in sum contain all MUST SUPPORT elements'
265
+ } }
266
+ }
267
+
268
+ test from: :crd_v201_client_fhir_api_search_test,
269
+ id: :crd_v201_client_coverage_status_search_test,
270
+ title: 'Search by status',
271
+ config: {
272
+ options: { resource_type: 'Coverage', search_type: 'status' },
273
+ inputs: { search_param_values: {
274
+ name: :patient_ids
275
+ } }
276
+ }
277
+
278
+ test from: :crd_v201_client_fhir_api_validation_test,
279
+ config: {
280
+ options: { resource_type: 'Coverage' }
281
+ }
282
+ end
283
+
284
+ group do
285
+ title 'Device'
286
+ description %(
287
+ Verify the CRD client can perform the required FHIR interactions on the Device resource, and
288
+ validate any returned resources against the [CRD Device profile](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-profile-device.html)
289
+
290
+ Required Device resource FHIR interactions:
291
+ * SHOULD support `read`
292
+
293
+ Resource Conformance: SHOULD
294
+ )
295
+ optional
296
+
297
+ test from: :crd_v201_client_fhir_api_read_test,
298
+ optional: true,
299
+ config: {
300
+ options: { resource_type: 'Device' },
301
+ inputs: {
302
+ resource_ids: {
303
+ name: :device_ids,
304
+ title: 'Device IDs',
305
+ description: 'Comma separated list of Device IDs that in sum contain all MUST SUPPORT elements'
306
+ }
307
+ }
308
+ }
309
+
310
+ test from: :crd_v201_client_fhir_api_validation_test,
311
+ config: {
312
+ options: { resource_type: 'Device' }
313
+ }
314
+ end
315
+
316
+ group do
317
+ title 'DeviceRequest'
318
+ description %(
319
+ Verify the CRD client can perform the required FHIR interactions on the DeviceRequest resource, and
320
+ validate any returned resources against the [CRD DeviceRequest profile](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-profile-devicerequest.html)
321
+
322
+ Required DeviceRequest resource FHIR interactions:
323
+ * SHOULD support `update`
324
+
325
+ Resource Conformance: SHOULD
326
+ )
327
+ optional
328
+ verifies_requirements 'hl7.fhir.us.davinci-crd_2.0.1@150'
329
+
330
+ test from: :crd_v201_client_fhir_api_update_test,
331
+ optional: true,
332
+ config: {
333
+ options: { resource_type: 'DeviceRequest' },
334
+ inputs: {
335
+ update_resources: {
336
+ name: :device_request_update_resources,
337
+ title: 'DeviceRequest Resources'
338
+ }
339
+ }
340
+ }
341
+ end
342
+
343
+ group do
344
+ title 'Encounter'
345
+ description %(
346
+ Verify the CRD client can perform the required FHIR interactions on the Encounter resource, and
347
+ validate any returned resources against the [CRD Encounter profile](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-profile-encounter.html)
348
+
349
+ Required Encounter resource FHIR interactions:
350
+ * SHOULD support `update`
351
+ * SHALL support search by [`_id`](http://hl7.org/fhir/R4/encounter.html#search)
352
+ * SHALL support search by [`organization`](http://hl7.org/fhir/R4/encounter.html#search) and
353
+ performing an `_include` on Location
354
+
355
+ Resource Conformance: SHALL
356
+ )
357
+
358
+ test from: :crd_v201_client_fhir_api_update_test,
359
+ optional: true,
360
+ config: {
361
+ options: { resource_type: 'Encounter' },
362
+ inputs: {
363
+ update_resources: {
364
+ name: :encounter_update_resources,
365
+ title: 'Encounter Resources'
366
+ }
367
+ }
368
+ }
369
+
370
+ test from: :crd_v201_client_fhir_api_search_test,
371
+ id: :crd_v201_client_encounter_id_search_test,
372
+ title: 'Search by _id',
373
+ config: {
374
+ options: { resource_type: 'Encounter', search_type: '_id' },
375
+ inputs: { search_param_values: {
376
+ name: :encounter_ids,
377
+ title: 'Encounter IDs',
378
+ description: 'Comma separated list of Encounter IDs that in sum contain all MUST SUPPORT elements'
379
+ } }
380
+ }
381
+
382
+ test from: :crd_v201_client_fhir_api_search_test,
383
+ id: :crd_v201_client_encounter_organization_search_test,
384
+ title: 'Search by organization',
385
+ config: {
386
+ options: { resource_type: 'Encounter', search_type: 'organization' },
387
+ inputs: { search_param_values: {
388
+ name: :organization_ids,
389
+ title: 'Organization IDs',
390
+ description: 'Comma separated list of Organization IDs that in sum contain all MUST SUPPORT elements'
391
+ } }
392
+ }
393
+
394
+ test from: :crd_v201_client_fhir_api_search_test,
395
+ id: :crd_v201_client_encounter_location_include_test,
396
+ title: 'Search by _id and _include location',
397
+ config: {
398
+ options: { resource_type: 'Encounter', search_type: 'location_include' },
399
+ inputs: { search_param_values: {
400
+ name: :encounter_ids,
401
+ title: 'Encounter IDs',
402
+ description: 'Comma separated list of Encounter IDs that in sum contain all MUST SUPPORT elements'
403
+ } }
404
+ }
405
+
406
+ test from: :crd_v201_client_fhir_api_validation_test,
407
+ config: {
408
+ options: { resource_type: 'Encounter' }
409
+ }
410
+ end
411
+
412
+ group do
413
+ title 'Patient'
414
+ description %(
415
+ Verify the CRD client can perform the required FHIR interactions on the Patient resource, and
416
+ validate any returned resources against the [CRD Patient profile](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-profile-patient.html)
417
+
418
+ Required Patient resource FHIR interactions:
419
+ * SHOULD support `read`
420
+
421
+ Resource Conformance: SHOULD
422
+ )
423
+ optional
424
+
425
+ test from: :crd_v201_client_fhir_api_read_test,
426
+ optional: true,
427
+ config: {
428
+ options: { resource_type: 'Patient' },
429
+ inputs: {
430
+ resource_ids: {
431
+ name: :patient_ids,
432
+ title: 'Patient IDs',
433
+ description: 'Comma separated list of Patient IDs that in sum contain all MUST SUPPORT elements'
434
+ }
435
+ }
436
+ }
437
+
438
+ test from: :crd_v201_client_fhir_api_validation_test,
439
+ config: {
440
+ options: { resource_type: 'Patient' }
441
+ }
442
+ end
443
+
444
+ group do
445
+ title 'Practitioner'
446
+ description %(
447
+ Verify the CRD client can perform the required FHIR interactions on the Practitioner resource, and
448
+ validate any returned resources against the [CRD Practitioner profile](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-profile-practitioner.html)
449
+
450
+ Required Practitioner resource FHIR interactions:
451
+ * SHOULD support `read`
452
+
453
+ Resource Conformance: SHOULD
454
+ )
455
+ optional
456
+
457
+ test from: :crd_v201_client_fhir_api_read_test,
458
+ optional: true,
459
+ config: {
460
+ options: { resource_type: 'Practitioner' },
461
+ inputs: {
462
+ resource_ids: {
463
+ name: :practitioner_ids,
464
+ title: 'Practitioner IDs',
465
+ description: 'Comma separated list of Practitioner IDs that in sum contain all MUST SUPPORT ' \
466
+ 'elements'
467
+ }
468
+ }
469
+ }
470
+
471
+ test from: :crd_v201_client_fhir_api_validation_test,
472
+ config: {
473
+ options: { resource_type: 'Practitioner' }
474
+ }
475
+ end
476
+
477
+ group do
478
+ title 'PractitionerRole'
479
+ description %(
480
+ Verify the CRD client can perform the required FHIR interactions on the PractitionerRole resource, and
481
+ validate any returned resources against the [US Core PractitionerRole profile](https://hl7.org/fhir/us/core/STU3.1.1/StructureDefinition-us-core-practitionerrole.html)
482
+
483
+ Required PractitionerRole resource FHIR interactions:
484
+ * SHALL support search by [`_id`](http://hl7.org/fhir/R4/practitionerrole.html#search)
485
+ * SHALL support search by [`organization`](http://hl7.org/fhir/R4/practitionerrole.html#search) and
486
+ performing an `_include` on Organization
487
+ * SHALL support search by [`practitioner`](http://hl7.org/fhir/R4/practitionerrole.html#search) and
488
+ performing an `_include` on Practitioner
489
+
490
+ Resource Conformance: SHALL
491
+ )
492
+
493
+ test from: :crd_v201_client_fhir_api_search_test,
494
+ id: :crd_v201_client_practitioner_role_id_search_test,
495
+ title: 'Search by _id',
496
+ config: {
497
+ options: { resource_type: 'PractitionerRole', search_type: '_id' },
498
+ inputs: { search_param_values: {
499
+ name: :practitioner_role_ids,
500
+ title: 'PractitionerRole IDs',
501
+ description: 'Comma separated list of Practitioner IDs that in sum contain all MUST SUPPORT elements'
502
+ } }
503
+ }
504
+
505
+ test from: :crd_v201_client_fhir_api_search_test,
506
+ id: :crd_v201_client_practitioner_role_organization_search_test,
507
+ title: 'Search by organization',
508
+ config: {
509
+ options: { resource_type: 'PractitionerRole', search_type: 'organization' },
510
+ inputs: { search_param_values: {
511
+ name: :organization_ids,
512
+ title: 'Organization IDs',
513
+ description: 'Comma separated list of Organization IDs that in sum contain all MUST SUPPORT elements'
514
+ } }
515
+ }
516
+
517
+ test from: :crd_v201_client_fhir_api_search_test,
518
+ id: :crd_v201_client_practitioner_role_practitioner_search_test,
519
+ title: 'Search by practitioner',
520
+ config: {
521
+ options: { resource_type: 'PractitionerRole', search_type: 'practitioner' },
522
+ inputs: { search_param_values: {
523
+ name: :practitioner_ids,
524
+ title: 'Practitioner IDs',
525
+ description: 'Comma separated list of Practitioner IDs that in sum contain all MUST SUPPORT elements'
526
+ } }
527
+ }
528
+
529
+ test from: :crd_v201_client_fhir_api_search_test,
530
+ id: :crd_v201_client_practitioner_role_organization_include_test,
531
+ title: 'Search by _id and _include organization',
532
+ config: {
533
+ options: { resource_type: 'PractitionerRole', search_type: 'organization_include' },
534
+ inputs: { search_param_values: {
535
+ name: :practitioner_role_ids,
536
+ title: 'PractitionerRole IDs',
537
+ description: %(
538
+ Comma separated list of PractitionerRole IDs that in sum contain all MUST SUPPORT elements
539
+ )
540
+ } }
541
+ }
542
+
543
+ test from: :crd_v201_client_fhir_api_search_test,
544
+ id: :crd_v201_client_practitioner_role_practitioner_include_test,
545
+ title: 'Search by _id and _include practitioner',
546
+ config: {
547
+ options: { resource_type: 'PractitionerRole', search_type: 'practitioner_include' },
548
+ inputs: { search_param_values: {
549
+ name: :practitioner_role_ids,
550
+ title: 'PractitionerRole IDs',
551
+ description: %(
552
+ Comma separated list of PractitionerRole IDs that in sum contain all MUST SUPPORT elements
553
+ )
554
+ } }
555
+ }
556
+
557
+ test from: :crd_v201_client_fhir_api_validation_test,
558
+ config: {
559
+ options: { resource_type: 'PractitionerRole' }
560
+ }
561
+ end
562
+
563
+ group do
564
+ title 'Location'
565
+ description %(
566
+ Verify the CRD client can perform the required FHIR interactions on the Location resource, and
567
+ validate any returned resources against the [CRD Location profile](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-profile-location.html)
568
+
569
+ Required Location resource FHIR interactions:
570
+ * SHOULD support `read`
571
+
572
+ Resource Conformance: SHOULD
573
+ )
574
+ optional
575
+
576
+ test from: :crd_v201_client_fhir_api_read_test,
577
+ optional: true,
578
+ config: {
579
+ options: { resource_type: 'Location' },
580
+ inputs: {
581
+ resource_ids: {
582
+ name: :location_ids,
583
+ title: 'Location IDs',
584
+ description: 'Comma separated list of Location IDs that in sum contain all MUST SUPPORT elements'
585
+ }
586
+ }
587
+ }
588
+
589
+ test from: :crd_v201_client_fhir_api_validation_test,
590
+ config: {
591
+ options: { resource_type: 'Location' }
592
+ }
593
+ end
594
+
595
+ group do
596
+ title 'MedicationRequest'
597
+ description %(
598
+ Verify the CRD client can perform the required FHIR interactions on the MedicationRequest resource, and
599
+ validate any returned resources against the [CRD MedicationRequest profile](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-profile-medicationrequest.html)
600
+
601
+ Required MedicationRequest resource FHIR interactions:
602
+ * SHOULD support `update`
603
+
604
+ Resource Conformance: SHOULD
605
+ )
606
+ optional
607
+ verifies_requirements 'hl7.fhir.us.davinci-crd_2.0.1@150'
608
+
609
+ test from: :crd_v201_client_fhir_api_update_test,
610
+ optional: true,
611
+ config: {
612
+ options: { resource_type: 'MedicationRequest' },
613
+ inputs: {
614
+ update_resources: {
615
+ name: :medication_request_update_resources,
616
+ title: 'MedicationRequest Resources'
617
+ }
618
+ }
619
+ }
620
+ end
621
+
622
+ group do
623
+ title 'NutritionOrder'
624
+ description %(
625
+ Verify the CRD client can perform the required FHIR interactions on the NutritionOrder resource, and
626
+ validate any returned resources against the [CRD NutritionOrder profile](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-profile-nutritionorder.html)
627
+
628
+ Required NutritionOrder resource FHIR interactions:
629
+ * SHOULD support `update`
630
+
631
+ Resource Conformance: SHOULD
632
+ )
633
+ optional
634
+ verifies_requirements 'hl7.fhir.us.davinci-crd_2.0.1@150'
635
+
636
+ test from: :crd_v201_client_fhir_api_update_test,
637
+ optional: true,
638
+ config: {
639
+ options: { resource_type: 'NutritionOrder' },
640
+ inputs: {
641
+ update_resources: {
642
+ name: :nutrition_order_update_resources,
643
+ title: 'NutritionOrder Resources'
644
+ }
645
+ }
646
+ }
647
+ end
648
+
649
+ group do
650
+ title 'Organization'
651
+ description %(
652
+ Verify the CRD client can perform the required FHIR interactions on the Organization resource, and
653
+ validate any returned resources against the [CRD Organization profile](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-profile-organization.html)
654
+
655
+ Required Organization resource FHIR interactions:
656
+ * SHOULD support `read`
657
+
658
+ Resource Conformance: SHOULD
659
+ )
660
+ optional
661
+
662
+ test from: :crd_v201_client_fhir_api_read_test,
663
+ optional: true,
664
+ config: {
665
+ options: { resource_type: 'Organization' },
666
+ inputs: {
667
+ resource_ids: {
668
+ name: :organization_ids,
669
+ title: 'Organization IDs',
670
+ description: 'Comma separated list of Organization IDs that in sum contain all MUST SUPPORT ' \
671
+ 'elements'
672
+ }
673
+ }
674
+ }
675
+
676
+ test from: :crd_v201_client_fhir_api_validation_test,
677
+ config: {
678
+ options: { resource_type: 'Organization' }
679
+ }
680
+ end
681
+
682
+ group do
683
+ title 'ServiceRequest'
684
+ description %(
685
+ Verify the CRD client can perform the required FHIR interactions on the ServiceRequest resource, and
686
+ validate any returned resources against the [CRD ServiceRequest profile](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-profile-servicerequest.html)
687
+
688
+ Required ServiceRequest resource FHIR interactions:
689
+ * SHOULD support `update`
690
+
691
+ Resource Conformance: SHOULD
692
+ )
693
+ optional
694
+ verifies_requirements 'hl7.fhir.us.davinci-crd_2.0.1@150'
695
+
696
+ test from: :crd_v201_client_fhir_api_update_test,
697
+ optional: true,
698
+ config: {
699
+ options: { resource_type: 'ServiceRequest' },
700
+ inputs: {
701
+ update_resources: {
702
+ name: :service_request_update_resources,
703
+ title: 'ServiceRequest Resources'
704
+ }
705
+ }
706
+ }
707
+ end
708
+
709
+ group do
710
+ title 'ClaimResponse'
711
+ description %(
712
+ Verify the CRD client can perform the required FHIR interactions on the ClaimResponse resource, and
713
+ validate any returned resources against the [CRD ClaimResponse profile](https://hl7.org/fhir/us/davinci-hrex/STU1/StructureDefinition-hrex-claimresponse.html)
714
+
715
+ Required ClaimResponse resource FHIR interactions:
716
+ * SHOULD support `create`
717
+
718
+ Resource Conformance: SHOULD
719
+ )
720
+ optional
721
+
722
+ test from: :crd_v201_client_fhir_api_create_test,
723
+ optional: true,
724
+ config: {
725
+ options: { resource_type: 'ClaimResponse' },
726
+ inputs: {
727
+ create_resources: {
728
+ name: :claim_response_create_resources,
729
+ title: 'ClaimResponse Resources'
730
+ }
731
+ }
732
+ }
733
+ end
734
+
735
+ group do
736
+ title 'Task'
737
+ description %(
738
+ Verify the CRD client can perform the required FHIR interactions on the Task resource, and
739
+ validate any returned resources against the [CRD Task profile](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-profile-taskquestionnaire.html)
740
+
741
+ Required Task resource FHIR interactions:
742
+ * SHOULD support `create`
743
+
744
+ Resource Conformance: SHOULD
745
+ )
746
+ optional
747
+
748
+ test from: :crd_v201_client_fhir_api_create_test,
749
+ optional: true,
750
+ config: {
751
+ options: { resource_type: 'Task' },
752
+ inputs: {
753
+ create_resources: {
754
+ name: :task_create_resources,
755
+ title: 'Task Resources'
756
+ }
757
+ }
758
+ }
759
+ end
760
+
761
+ group do
762
+ title 'VisionPrescription'
763
+ description %(
764
+ Verify the CRD client can perform the required FHIR interactions on the VisionPrescription resource, and
765
+ validate any returned resources against the [CRD VisionPrescription profile](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-profile-visionprescription.html)
766
+
767
+ Required VisionPrescription resource FHIR interactions:
768
+ * SHOULD support `update`
769
+
770
+ Resource Conformance: SHOULD
771
+ )
772
+ optional
773
+ verifies_requirements 'hl7.fhir.us.davinci-crd_2.0.1@150'
774
+
775
+ test from: :crd_v201_client_fhir_api_update_test,
776
+ optional: true,
777
+ config: {
778
+ options: { resource_type: 'VisionPrescription' },
779
+ inputs: {
780
+ update_resources: {
781
+ name: :vision_prescription_update_resources,
782
+ title: 'VisionPrescription Resources'
783
+ }
784
+ }
785
+ }
786
+ end
787
+ end
788
+ end
789
+ end
790
+ end