ipa_test_kit 0.2.0 → 0.3.1

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 (413) hide show
  1. checksums.yaml +4 -4
  2. data/lib/ipa_test_kit/custom_groups/v1.0.0/capability_statement/conformance_support_test.rb +43 -0
  3. data/lib/ipa_test_kit/custom_groups/v1.0.0/capability_statement/fhir_version_test.rb +17 -0
  4. data/lib/ipa_test_kit/custom_groups/v1.0.0/capability_statement/instantiates_ig_test.rb +22 -0
  5. data/lib/ipa_test_kit/custom_groups/v1.0.0/capability_statement/json_support_test.rb +41 -0
  6. data/lib/ipa_test_kit/custom_groups/v1.0.0/capability_statement/profile_support_test.rb +65 -0
  7. data/lib/ipa_test_kit/custom_groups/v1.0.0/capability_statement_group.rb +73 -0
  8. data/lib/ipa_test_kit/custom_groups/v1.0.0/ipa_smart_launch_group.rb +108 -0
  9. data/lib/ipa_test_kit/fhir_resource_navigation.rb +12 -3
  10. data/lib/ipa_test_kit/generated/v1.0.0/allergy_intolerance/allergy_intolerance_must_support_test.rb +46 -0
  11. data/lib/ipa_test_kit/generated/v1.0.0/allergy_intolerance/allergy_intolerance_patient_clinical_status_search_test.rb +50 -0
  12. data/lib/ipa_test_kit/generated/v1.0.0/allergy_intolerance/allergy_intolerance_patient_search_test.rb +63 -0
  13. data/lib/ipa_test_kit/generated/v1.0.0/allergy_intolerance/allergy_intolerance_provenance_revinclude_search_test.rb +51 -0
  14. data/lib/ipa_test_kit/generated/v1.0.0/allergy_intolerance/allergy_intolerance_read_test.rb +26 -0
  15. data/lib/ipa_test_kit/generated/v1.0.0/allergy_intolerance/allergy_intolerance_reference_resolution_test.rb +42 -0
  16. data/lib/ipa_test_kit/generated/v1.0.0/allergy_intolerance/allergy_intolerance_validation_test.rb +40 -0
  17. data/lib/ipa_test_kit/generated/{allergy_intolerance → v1.0.0/allergy_intolerance}/metadata.yml +88 -58
  18. data/lib/ipa_test_kit/generated/{allergy_intolerance_group.rb → v1.0.0/allergy_intolerance_group.rb} +31 -24
  19. data/lib/ipa_test_kit/generated/v1.0.0/condition/condition_must_support_test.rb +47 -0
  20. data/lib/ipa_test_kit/generated/v1.0.0/condition/condition_patient_category_clinical_status_search_test.rb +50 -0
  21. data/lib/ipa_test_kit/generated/v1.0.0/condition/condition_patient_category_search_test.rb +50 -0
  22. data/lib/ipa_test_kit/generated/v1.0.0/condition/condition_patient_clinical_status_search_test.rb +50 -0
  23. data/lib/ipa_test_kit/generated/v1.0.0/condition/condition_patient_code_search_test.rb +50 -0
  24. data/lib/ipa_test_kit/generated/v1.0.0/condition/condition_patient_onset_date_search_test.rb +49 -0
  25. data/lib/ipa_test_kit/generated/v1.0.0/condition/condition_patient_search_test.rb +63 -0
  26. data/lib/ipa_test_kit/generated/v1.0.0/condition/condition_provenance_revinclude_search_test.rb +51 -0
  27. data/lib/ipa_test_kit/generated/v1.0.0/condition/condition_read_test.rb +26 -0
  28. data/lib/ipa_test_kit/generated/v1.0.0/condition/condition_reference_resolution_test.rb +42 -0
  29. data/lib/ipa_test_kit/generated/v1.0.0/condition/condition_validation_test.rb +40 -0
  30. data/lib/ipa_test_kit/generated/v1.0.0/condition/metadata.yml +290 -0
  31. data/lib/ipa_test_kit/generated/{condition_group.rb → v1.0.0/condition_group.rb} +38 -29
  32. data/lib/ipa_test_kit/generated/v1.0.0/document_reference/document_reference_id_search_test.rb +43 -0
  33. data/lib/ipa_test_kit/generated/v1.0.0/document_reference/document_reference_must_support_test.rb +56 -0
  34. data/lib/ipa_test_kit/generated/v1.0.0/document_reference/document_reference_patient_category_date_search_test.rb +48 -0
  35. data/lib/ipa_test_kit/generated/v1.0.0/document_reference/document_reference_patient_category_search_test.rb +48 -0
  36. data/lib/ipa_test_kit/generated/v1.0.0/document_reference/document_reference_patient_contenttype_search_test.rb +49 -0
  37. data/lib/ipa_test_kit/generated/v1.0.0/document_reference/document_reference_patient_search_test.rb +64 -0
  38. data/lib/ipa_test_kit/generated/v1.0.0/document_reference/document_reference_patient_status_search_test.rb +49 -0
  39. data/lib/ipa_test_kit/generated/v1.0.0/document_reference/document_reference_patient_type_date_search_test.rb +50 -0
  40. data/lib/ipa_test_kit/generated/v1.0.0/document_reference/document_reference_patient_type_period_search_test.rb +50 -0
  41. data/lib/ipa_test_kit/generated/v1.0.0/document_reference/document_reference_patient_type_search_test.rb +48 -0
  42. data/lib/ipa_test_kit/generated/v1.0.0/document_reference/document_reference_provenance_revinclude_search_test.rb +51 -0
  43. data/lib/ipa_test_kit/generated/v1.0.0/document_reference/document_reference_read_test.rb +26 -0
  44. data/lib/ipa_test_kit/generated/v1.0.0/document_reference/document_reference_reference_resolution_test.rb +44 -0
  45. data/lib/ipa_test_kit/generated/v1.0.0/document_reference/document_reference_validation_test.rb +40 -0
  46. data/lib/ipa_test_kit/generated/{document_reference → v1.0.0/document_reference}/metadata.yml +197 -188
  47. data/lib/ipa_test_kit/generated/{document_reference_group.rb → v1.0.0/document_reference_group.rb} +45 -34
  48. data/lib/ipa_test_kit/generated/v1.0.0/immunization/immunization_must_support_test.rb +47 -0
  49. data/lib/ipa_test_kit/generated/v1.0.0/immunization/immunization_patient_date_search_test.rb +49 -0
  50. data/lib/ipa_test_kit/generated/v1.0.0/immunization/immunization_patient_search_test.rb +63 -0
  51. data/lib/ipa_test_kit/generated/v1.0.0/immunization/immunization_patient_status_search_test.rb +49 -0
  52. data/lib/ipa_test_kit/generated/v1.0.0/immunization/immunization_provenance_revinclude_search_test.rb +51 -0
  53. data/lib/ipa_test_kit/generated/v1.0.0/immunization/immunization_read_test.rb +26 -0
  54. data/lib/ipa_test_kit/generated/v1.0.0/immunization/immunization_reference_resolution_test.rb +42 -0
  55. data/lib/ipa_test_kit/generated/v1.0.0/immunization/immunization_validation_test.rb +40 -0
  56. data/lib/ipa_test_kit/generated/v1.0.0/immunization/metadata.yml +245 -0
  57. data/lib/ipa_test_kit/generated/{immunization_group.rb → v1.0.0/immunization_group.rb} +32 -25
  58. data/lib/ipa_test_kit/generated/v1.0.0/ipa_test_suite.rb +113 -0
  59. data/lib/ipa_test_kit/generated/v1.0.0/medication/medication_must_support_test.rb +43 -0
  60. data/lib/ipa_test_kit/generated/v1.0.0/medication/medication_read_test.rb +26 -0
  61. data/lib/ipa_test_kit/generated/v1.0.0/medication/medication_validation_test.rb +39 -0
  62. data/lib/ipa_test_kit/generated/v1.0.0/medication/metadata.yml +52 -0
  63. data/lib/ipa_test_kit/generated/v1.0.0/medication_group.rb +61 -0
  64. data/lib/ipa_test_kit/generated/v1.0.0/medication_request/medication_request_category_search_test.rb +51 -0
  65. data/lib/ipa_test_kit/generated/v1.0.0/medication_request/medication_request_code_search_test.rb +50 -0
  66. data/lib/ipa_test_kit/generated/v1.0.0/medication_request/medication_request_must_support_test.rb +52 -0
  67. data/lib/ipa_test_kit/generated/v1.0.0/medication_request/medication_request_patient_intent_authoredon_search_test.rb +54 -0
  68. data/lib/ipa_test_kit/generated/v1.0.0/medication_request/medication_request_patient_intent_search_test.rb +54 -0
  69. data/lib/ipa_test_kit/generated/v1.0.0/medication_request/medication_request_patient_intent_status_search_test.rb +54 -0
  70. data/lib/ipa_test_kit/generated/v1.0.0/medication_request/medication_request_patient_search_test.rb +69 -0
  71. data/lib/ipa_test_kit/generated/v1.0.0/medication_request/medication_request_provenance_revinclude_search_test.rb +51 -0
  72. data/lib/ipa_test_kit/generated/v1.0.0/medication_request/medication_request_read_test.rb +26 -0
  73. data/lib/ipa_test_kit/generated/v1.0.0/medication_request/medication_request_reference_resolution_test.rb +46 -0
  74. data/lib/ipa_test_kit/generated/v1.0.0/medication_request/medication_request_validation_test.rb +40 -0
  75. data/lib/ipa_test_kit/generated/v1.0.0/medication_request/medication_validation_test.rb +39 -0
  76. data/lib/ipa_test_kit/generated/v1.0.0/medication_request/metadata.yml +370 -0
  77. data/lib/ipa_test_kit/generated/{medication_request_group.rb → v1.0.0/medication_request_group.rb} +39 -31
  78. data/lib/ipa_test_kit/generated/v1.0.0/medication_statement/medication_statement_must_support_test.rb +51 -0
  79. data/lib/ipa_test_kit/generated/v1.0.0/medication_statement/medication_statement_patient_search_test.rb +64 -0
  80. data/lib/ipa_test_kit/generated/v1.0.0/medication_statement/medication_statement_patient_status_search_test.rb +49 -0
  81. data/lib/ipa_test_kit/generated/v1.0.0/medication_statement/medication_statement_provenance_revinclude_search_test.rb +51 -0
  82. data/lib/ipa_test_kit/generated/v1.0.0/medication_statement/medication_statement_read_test.rb +26 -0
  83. data/lib/ipa_test_kit/generated/v1.0.0/medication_statement/medication_statement_reference_resolution_test.rb +45 -0
  84. data/lib/ipa_test_kit/generated/v1.0.0/medication_statement/medication_statement_validation_test.rb +40 -0
  85. data/lib/ipa_test_kit/generated/v1.0.0/medication_statement/metadata.yml +222 -0
  86. data/lib/ipa_test_kit/generated/{medication_statement_group.rb → v1.0.0/medication_statement_group.rb} +31 -31
  87. data/lib/ipa_test_kit/generated/v1.0.0/metadata.yml +2845 -0
  88. data/lib/ipa_test_kit/generated/v1.0.0/observation/metadata.yml +341 -0
  89. data/lib/ipa_test_kit/generated/v1.0.0/observation/observation_must_support_test.rb +49 -0
  90. data/lib/ipa_test_kit/generated/v1.0.0/observation/observation_patient_category_date_search_test.rb +48 -0
  91. data/lib/ipa_test_kit/generated/v1.0.0/observation/observation_patient_category_search_test.rb +65 -0
  92. data/lib/ipa_test_kit/generated/v1.0.0/observation/observation_patient_category_status_search_test.rb +50 -0
  93. data/lib/ipa_test_kit/generated/v1.0.0/observation/observation_patient_code_date_search_test.rb +50 -0
  94. data/lib/ipa_test_kit/generated/v1.0.0/observation/observation_patient_code_search_test.rb +48 -0
  95. data/lib/ipa_test_kit/generated/v1.0.0/observation/observation_provenance_revinclude_search_test.rb +52 -0
  96. data/lib/ipa_test_kit/generated/v1.0.0/observation/observation_read_test.rb +26 -0
  97. data/lib/ipa_test_kit/generated/v1.0.0/observation/observation_reference_resolution_test.rb +42 -0
  98. data/lib/ipa_test_kit/generated/v1.0.0/observation/observation_validation_test.rb +40 -0
  99. data/lib/ipa_test_kit/generated/{observation_group.rb → v1.0.0/observation_group.rb} +40 -29
  100. data/lib/ipa_test_kit/generated/v1.0.0/patient/metadata.yml +259 -0
  101. data/lib/ipa_test_kit/generated/v1.0.0/patient/patient_birthdate_family_search_test.rb +45 -0
  102. data/lib/ipa_test_kit/generated/v1.0.0/patient/patient_birthdate_name_search_test.rb +45 -0
  103. data/lib/ipa_test_kit/generated/v1.0.0/patient/patient_birthdate_search_test.rb +45 -0
  104. data/lib/ipa_test_kit/generated/v1.0.0/patient/patient_family_gender_search_test.rb +45 -0
  105. data/lib/ipa_test_kit/generated/v1.0.0/patient/patient_family_search_test.rb +45 -0
  106. data/lib/ipa_test_kit/generated/v1.0.0/patient/patient_gender_name_search_test.rb +45 -0
  107. data/lib/ipa_test_kit/generated/v1.0.0/patient/patient_gender_search_test.rb +45 -0
  108. data/lib/ipa_test_kit/generated/v1.0.0/patient/patient_given_search_test.rb +45 -0
  109. data/lib/ipa_test_kit/generated/v1.0.0/patient/patient_id_search_test.rb +57 -0
  110. data/lib/ipa_test_kit/generated/v1.0.0/patient/patient_identifier_search_test.rb +44 -0
  111. data/lib/ipa_test_kit/generated/v1.0.0/patient/patient_must_support_test.rb +49 -0
  112. data/lib/ipa_test_kit/generated/v1.0.0/patient/patient_name_search_test.rb +45 -0
  113. data/lib/ipa_test_kit/generated/v1.0.0/patient/patient_provenance_revinclude_search_test.rb +51 -0
  114. data/lib/ipa_test_kit/generated/v1.0.0/patient/patient_read_test.rb +26 -0
  115. data/lib/ipa_test_kit/generated/v1.0.0/patient/patient_validation_test.rb +40 -0
  116. data/lib/ipa_test_kit/generated/{patient_group.rb → v1.0.0/patient_group.rb} +44 -34
  117. data/lib/ipa_test_kit/generated/v1.0.0/practitioner/metadata.yml +48 -0
  118. data/lib/ipa_test_kit/generated/v1.0.0/practitioner/practitioner_must_support_test.rb +43 -0
  119. data/lib/ipa_test_kit/generated/v1.0.0/practitioner/practitioner_provenance_revinclude_search_test.rb +0 -0
  120. data/lib/ipa_test_kit/generated/v1.0.0/practitioner/practitioner_read_test.rb +26 -0
  121. data/lib/ipa_test_kit/generated/v1.0.0/practitioner/practitioner_validation_test.rb +40 -0
  122. data/lib/ipa_test_kit/generated/v1.0.0/practitioner_group.rb +61 -0
  123. data/lib/ipa_test_kit/generated/v1.0.0/practitioner_role/metadata.yml +68 -0
  124. data/lib/ipa_test_kit/generated/v1.0.0/practitioner_role/practitioner_role_must_support_test.rb +43 -0
  125. data/lib/ipa_test_kit/generated/v1.0.0/practitioner_role/practitioner_role_read_test.rb +26 -0
  126. data/lib/ipa_test_kit/generated/v1.0.0/practitioner_role/practitioner_role_reference_resolution_test.rb +42 -0
  127. data/lib/ipa_test_kit/generated/v1.0.0/practitioner_role/practitioner_role_validation_test.rb +40 -0
  128. data/lib/ipa_test_kit/generated/v1.0.0/practitioner_role_group.rb +63 -0
  129. data/lib/ipa_test_kit/generated/v1.0.0/problem_list_item/metadata.yml +299 -0
  130. data/lib/ipa_test_kit/generated/v1.0.0/problem_list_item/problem_list_item_must_support_test.rb +48 -0
  131. data/lib/ipa_test_kit/generated/v1.0.0/problem_list_item/problem_list_item_patient_category_clinical_status_search_test.rb +50 -0
  132. data/lib/ipa_test_kit/generated/v1.0.0/problem_list_item/problem_list_item_patient_category_search_test.rb +50 -0
  133. data/lib/ipa_test_kit/generated/v1.0.0/problem_list_item/problem_list_item_patient_clinical_status_search_test.rb +50 -0
  134. data/lib/ipa_test_kit/generated/v1.0.0/problem_list_item/problem_list_item_patient_code_search_test.rb +50 -0
  135. data/lib/ipa_test_kit/generated/v1.0.0/problem_list_item/problem_list_item_patient_onset_date_search_test.rb +49 -0
  136. data/lib/ipa_test_kit/generated/v1.0.0/problem_list_item/problem_list_item_patient_search_test.rb +63 -0
  137. data/lib/ipa_test_kit/generated/v1.0.0/problem_list_item/problem_list_item_provenance_revinclude_search_test.rb +51 -0
  138. data/lib/ipa_test_kit/generated/v1.0.0/problem_list_item/problem_list_item_read_test.rb +26 -0
  139. data/lib/ipa_test_kit/generated/v1.0.0/problem_list_item/problem_list_item_reference_resolution_test.rb +42 -0
  140. data/lib/ipa_test_kit/generated/v1.0.0/problem_list_item/problem_list_item_validation_test.rb +40 -0
  141. data/lib/ipa_test_kit/generated/v1.0.0/problem_list_item_group.rb +100 -0
  142. data/lib/ipa_test_kit/generated/{resource_list.rb → v1.0.0/resource_list.rb} +7 -6
  143. data/lib/ipa_test_kit/generated/v1.0.0/vitalsigns/metadata.yml +370 -0
  144. data/lib/ipa_test_kit/generated/v1.0.0/vitalsigns/vitalsigns_must_support_test.rb +57 -0
  145. data/lib/ipa_test_kit/generated/v1.0.0/vitalsigns/vitalsigns_patient_category_date_search_test.rb +48 -0
  146. data/lib/ipa_test_kit/generated/v1.0.0/vitalsigns/vitalsigns_patient_category_search_test.rb +65 -0
  147. data/lib/ipa_test_kit/generated/v1.0.0/vitalsigns/vitalsigns_patient_category_status_search_test.rb +50 -0
  148. data/lib/ipa_test_kit/generated/v1.0.0/vitalsigns/vitalsigns_patient_code_date_search_test.rb +50 -0
  149. data/lib/ipa_test_kit/generated/v1.0.0/vitalsigns/vitalsigns_patient_code_search_test.rb +48 -0
  150. data/lib/ipa_test_kit/generated/v1.0.0/vitalsigns/vitalsigns_provenance_revinclude_search_test.rb +52 -0
  151. data/lib/ipa_test_kit/generated/v1.0.0/vitalsigns/vitalsigns_read_test.rb +26 -0
  152. data/lib/ipa_test_kit/generated/v1.0.0/vitalsigns/vitalsigns_reference_resolution_test.rb +42 -0
  153. data/lib/ipa_test_kit/generated/v1.0.0/vitalsigns/vitalsigns_validation_test.rb +40 -0
  154. data/lib/ipa_test_kit/generated/v1.0.0/vitalsigns_group.rb +100 -0
  155. data/lib/ipa_test_kit/generator/group_generator.rb +56 -14
  156. data/lib/ipa_test_kit/generator/group_metadata.rb +5 -17
  157. data/lib/ipa_test_kit/generator/group_metadata_extractor.rb +45 -31
  158. data/lib/ipa_test_kit/generator/ig_loader.rb +15 -2
  159. data/lib/ipa_test_kit/generator/ig_metadata.rb +2 -2
  160. data/lib/ipa_test_kit/generator/ig_metadata_extractor.rb +18 -15
  161. data/lib/ipa_test_kit/generator/ig_resources.rb +3 -2
  162. data/lib/ipa_test_kit/generator/must_support_metadata_extractor.rb +245 -35
  163. data/lib/ipa_test_kit/generator/must_support_test_generator.rb +32 -11
  164. data/lib/ipa_test_kit/generator/naming.rb +31 -17
  165. data/lib/ipa_test_kit/generator/provenance_revinclude_search_test_generator.rb +14 -12
  166. data/lib/ipa_test_kit/generator/read_test_generator.rb +12 -7
  167. data/lib/ipa_test_kit/generator/reference_resolution_test_generator.rb +27 -7
  168. data/lib/ipa_test_kit/generator/resource_list_generator.rb +8 -12
  169. data/lib/ipa_test_kit/generator/search_definition_metadata_extractor.rb +36 -74
  170. data/lib/ipa_test_kit/generator/search_metadata_extractor.rb +4 -3
  171. data/lib/ipa_test_kit/generator/search_test_generator.rb +33 -38
  172. data/lib/ipa_test_kit/generator/special_cases.rb +8 -4
  173. data/lib/ipa_test_kit/generator/suite_generator.rb +41 -8
  174. data/lib/ipa_test_kit/generator/terminology_binding_metadata_extractor.rb +18 -3
  175. data/lib/ipa_test_kit/generator/validation_test_generator.rb +29 -17
  176. data/lib/ipa_test_kit/generator/value_extractor.rb +101 -0
  177. data/lib/ipa_test_kit/generator.rb +48 -14
  178. data/lib/ipa_test_kit/igs/ipa_v100/search-parameters.json +65408 -0
  179. data/lib/ipa_test_kit/igs/ipa_v100/vitalsigns.profile.json +3122 -0
  180. data/lib/ipa_test_kit/igs/ipa_v100.tgz +0 -0
  181. data/lib/ipa_test_kit/must_support_test.rb +50 -1
  182. data/lib/ipa_test_kit/provenance_validator.rb +38 -0
  183. data/lib/ipa_test_kit/read_test.rb +1 -1
  184. data/lib/ipa_test_kit/reference_resolution_test.rb +139 -70
  185. data/lib/ipa_test_kit/search_test.rb +253 -224
  186. data/lib/ipa_test_kit/search_test_properties.rb +3 -13
  187. data/lib/ipa_test_kit/validation_test.rb +13 -5
  188. data/lib/ipa_test_kit/version.rb +1 -1
  189. data/lib/ipa_test_kit.rb +3 -2
  190. metadata +173 -236
  191. data/lib/ipa_test_kit/custom_groups/capability_statement/conformance_support_test.rb +0 -41
  192. data/lib/ipa_test_kit/custom_groups/capability_statement/fhir_version_test.rb +0 -15
  193. data/lib/ipa_test_kit/custom_groups/capability_statement/json_support_test.rb +0 -39
  194. data/lib/ipa_test_kit/custom_groups/capability_statement/profile_support_test.rb +0 -76
  195. data/lib/ipa_test_kit/custom_groups/capability_statement_group.rb +0 -64
  196. data/lib/ipa_test_kit/ext/fhir_models.rb +0 -59
  197. data/lib/ipa_test_kit/generated/allergy_intolerance/allergy_intolerance_must_support_test.rb +0 -40
  198. data/lib/ipa_test_kit/generated/allergy_intolerance/allergy_intolerance_patient_clinical_status_search_test.rb +0 -46
  199. data/lib/ipa_test_kit/generated/allergy_intolerance/allergy_intolerance_patient_search_test.rb +0 -60
  200. data/lib/ipa_test_kit/generated/allergy_intolerance/allergy_intolerance_provenance_revinclude_search_test.rb +0 -49
  201. data/lib/ipa_test_kit/generated/allergy_intolerance/allergy_intolerance_read_test.rb +0 -24
  202. data/lib/ipa_test_kit/generated/allergy_intolerance/allergy_intolerance_reference_resolution_test.rb +0 -28
  203. data/lib/ipa_test_kit/generated/allergy_intolerance/allergy_intolerance_validation_test.rb +0 -34
  204. data/lib/ipa_test_kit/generated/bmi/bmi_must_support_test.rb +0 -49
  205. data/lib/ipa_test_kit/generated/bmi/bmi_patient_category_date_search_test.rb +0 -46
  206. data/lib/ipa_test_kit/generated/bmi/bmi_patient_category_search_test.rb +0 -45
  207. data/lib/ipa_test_kit/generated/bmi/bmi_patient_category_status_search_test.rb +0 -47
  208. data/lib/ipa_test_kit/generated/bmi/bmi_patient_code_date_search_test.rb +0 -48
  209. data/lib/ipa_test_kit/generated/bmi/bmi_patient_code_search_test.rb +0 -62
  210. data/lib/ipa_test_kit/generated/bmi/bmi_provenance_revinclude_search_test.rb +0 -51
  211. data/lib/ipa_test_kit/generated/bmi/bmi_read_test.rb +0 -24
  212. data/lib/ipa_test_kit/generated/bmi/bmi_reference_resolution_test.rb +0 -28
  213. data/lib/ipa_test_kit/generated/bmi/bmi_validation_test.rb +0 -34
  214. data/lib/ipa_test_kit/generated/bmi/metadata.yml +0 -322
  215. data/lib/ipa_test_kit/generated/bmi_group.rb +0 -93
  216. data/lib/ipa_test_kit/generated/bodyheight/bodyheight_must_support_test.rb +0 -49
  217. data/lib/ipa_test_kit/generated/bodyheight/bodyheight_patient_category_date_search_test.rb +0 -46
  218. data/lib/ipa_test_kit/generated/bodyheight/bodyheight_patient_category_search_test.rb +0 -45
  219. data/lib/ipa_test_kit/generated/bodyheight/bodyheight_patient_category_status_search_test.rb +0 -47
  220. data/lib/ipa_test_kit/generated/bodyheight/bodyheight_patient_code_date_search_test.rb +0 -48
  221. data/lib/ipa_test_kit/generated/bodyheight/bodyheight_patient_code_search_test.rb +0 -62
  222. data/lib/ipa_test_kit/generated/bodyheight/bodyheight_provenance_revinclude_search_test.rb +0 -51
  223. data/lib/ipa_test_kit/generated/bodyheight/bodyheight_read_test.rb +0 -24
  224. data/lib/ipa_test_kit/generated/bodyheight/bodyheight_reference_resolution_test.rb +0 -28
  225. data/lib/ipa_test_kit/generated/bodyheight/bodyheight_validation_test.rb +0 -34
  226. data/lib/ipa_test_kit/generated/bodyheight/metadata.yml +0 -328
  227. data/lib/ipa_test_kit/generated/bodyheight_group.rb +0 -93
  228. data/lib/ipa_test_kit/generated/bodytemp/bodytemp_must_support_test.rb +0 -49
  229. data/lib/ipa_test_kit/generated/bodytemp/bodytemp_patient_category_date_search_test.rb +0 -46
  230. data/lib/ipa_test_kit/generated/bodytemp/bodytemp_patient_category_search_test.rb +0 -45
  231. data/lib/ipa_test_kit/generated/bodytemp/bodytemp_patient_category_status_search_test.rb +0 -47
  232. data/lib/ipa_test_kit/generated/bodytemp/bodytemp_patient_code_date_search_test.rb +0 -48
  233. data/lib/ipa_test_kit/generated/bodytemp/bodytemp_patient_code_search_test.rb +0 -62
  234. data/lib/ipa_test_kit/generated/bodytemp/bodytemp_provenance_revinclude_search_test.rb +0 -51
  235. data/lib/ipa_test_kit/generated/bodytemp/bodytemp_read_test.rb +0 -24
  236. data/lib/ipa_test_kit/generated/bodytemp/bodytemp_reference_resolution_test.rb +0 -28
  237. data/lib/ipa_test_kit/generated/bodytemp/bodytemp_validation_test.rb +0 -34
  238. data/lib/ipa_test_kit/generated/bodytemp/metadata.yml +0 -328
  239. data/lib/ipa_test_kit/generated/bodytemp_group.rb +0 -93
  240. data/lib/ipa_test_kit/generated/bodyweight/bodyweight_must_support_test.rb +0 -49
  241. data/lib/ipa_test_kit/generated/bodyweight/bodyweight_patient_category_date_search_test.rb +0 -46
  242. data/lib/ipa_test_kit/generated/bodyweight/bodyweight_patient_category_search_test.rb +0 -45
  243. data/lib/ipa_test_kit/generated/bodyweight/bodyweight_patient_category_status_search_test.rb +0 -47
  244. data/lib/ipa_test_kit/generated/bodyweight/bodyweight_patient_code_date_search_test.rb +0 -48
  245. data/lib/ipa_test_kit/generated/bodyweight/bodyweight_patient_code_search_test.rb +0 -62
  246. data/lib/ipa_test_kit/generated/bodyweight/bodyweight_provenance_revinclude_search_test.rb +0 -51
  247. data/lib/ipa_test_kit/generated/bodyweight/bodyweight_read_test.rb +0 -24
  248. data/lib/ipa_test_kit/generated/bodyweight/bodyweight_reference_resolution_test.rb +0 -28
  249. data/lib/ipa_test_kit/generated/bodyweight/bodyweight_validation_test.rb +0 -34
  250. data/lib/ipa_test_kit/generated/bodyweight/metadata.yml +0 -328
  251. data/lib/ipa_test_kit/generated/bodyweight_group.rb +0 -93
  252. data/lib/ipa_test_kit/generated/bp/bp_must_support_test.rb +0 -52
  253. data/lib/ipa_test_kit/generated/bp/bp_patient_category_date_search_test.rb +0 -46
  254. data/lib/ipa_test_kit/generated/bp/bp_patient_category_search_test.rb +0 -45
  255. data/lib/ipa_test_kit/generated/bp/bp_patient_category_status_search_test.rb +0 -47
  256. data/lib/ipa_test_kit/generated/bp/bp_patient_code_date_search_test.rb +0 -48
  257. data/lib/ipa_test_kit/generated/bp/bp_patient_code_search_test.rb +0 -62
  258. data/lib/ipa_test_kit/generated/bp/bp_provenance_revinclude_search_test.rb +0 -51
  259. data/lib/ipa_test_kit/generated/bp/bp_read_test.rb +0 -24
  260. data/lib/ipa_test_kit/generated/bp/bp_reference_resolution_test.rb +0 -28
  261. data/lib/ipa_test_kit/generated/bp/bp_validation_test.rb +0 -34
  262. data/lib/ipa_test_kit/generated/bp/metadata.yml +0 -379
  263. data/lib/ipa_test_kit/generated/bp_group.rb +0 -93
  264. data/lib/ipa_test_kit/generated/condition/condition_must_support_test.rb +0 -39
  265. data/lib/ipa_test_kit/generated/condition/condition_patient_category_search_test.rb +0 -47
  266. data/lib/ipa_test_kit/generated/condition/condition_patient_clinical_status_search_test.rb +0 -46
  267. data/lib/ipa_test_kit/generated/condition/condition_patient_code_search_test.rb +0 -47
  268. data/lib/ipa_test_kit/generated/condition/condition_patient_onset_date_search_test.rb +0 -47
  269. data/lib/ipa_test_kit/generated/condition/condition_patient_search_test.rb +0 -60
  270. data/lib/ipa_test_kit/generated/condition/condition_provenance_revinclude_search_test.rb +0 -49
  271. data/lib/ipa_test_kit/generated/condition/condition_read_test.rb +0 -24
  272. data/lib/ipa_test_kit/generated/condition/condition_reference_resolution_test.rb +0 -28
  273. data/lib/ipa_test_kit/generated/condition/condition_validation_test.rb +0 -34
  274. data/lib/ipa_test_kit/generated/condition/metadata.yml +0 -231
  275. data/lib/ipa_test_kit/generated/document_reference/document_reference_id_search_test.rb +0 -40
  276. data/lib/ipa_test_kit/generated/document_reference/document_reference_must_support_test.rb +0 -49
  277. data/lib/ipa_test_kit/generated/document_reference/document_reference_patient_category_date_search_test.rb +0 -46
  278. data/lib/ipa_test_kit/generated/document_reference/document_reference_patient_category_search_test.rb +0 -45
  279. data/lib/ipa_test_kit/generated/document_reference/document_reference_patient_search_test.rb +0 -61
  280. data/lib/ipa_test_kit/generated/document_reference/document_reference_patient_status_search_test.rb +0 -46
  281. data/lib/ipa_test_kit/generated/document_reference/document_reference_patient_type_period_search_test.rb +0 -48
  282. data/lib/ipa_test_kit/generated/document_reference/document_reference_patient_type_search_test.rb +0 -45
  283. data/lib/ipa_test_kit/generated/document_reference/document_reference_provenance_revinclude_search_test.rb +0 -50
  284. data/lib/ipa_test_kit/generated/document_reference/document_reference_read_test.rb +0 -24
  285. data/lib/ipa_test_kit/generated/document_reference/document_reference_reference_resolution_test.rb +0 -28
  286. data/lib/ipa_test_kit/generated/document_reference/document_reference_validation_test.rb +0 -34
  287. data/lib/ipa_test_kit/generated/head_circumference/head_circumference_must_support_test.rb +0 -49
  288. data/lib/ipa_test_kit/generated/head_circumference/head_circumference_patient_category_date_search_test.rb +0 -46
  289. data/lib/ipa_test_kit/generated/head_circumference/head_circumference_patient_category_search_test.rb +0 -45
  290. data/lib/ipa_test_kit/generated/head_circumference/head_circumference_patient_category_status_search_test.rb +0 -47
  291. data/lib/ipa_test_kit/generated/head_circumference/head_circumference_patient_code_date_search_test.rb +0 -48
  292. data/lib/ipa_test_kit/generated/head_circumference/head_circumference_patient_code_search_test.rb +0 -62
  293. data/lib/ipa_test_kit/generated/head_circumference/head_circumference_provenance_revinclude_search_test.rb +0 -51
  294. data/lib/ipa_test_kit/generated/head_circumference/head_circumference_read_test.rb +0 -24
  295. data/lib/ipa_test_kit/generated/head_circumference/head_circumference_reference_resolution_test.rb +0 -28
  296. data/lib/ipa_test_kit/generated/head_circumference/head_circumference_validation_test.rb +0 -34
  297. data/lib/ipa_test_kit/generated/head_circumference/metadata.yml +0 -324
  298. data/lib/ipa_test_kit/generated/head_circumference_group.rb +0 -93
  299. data/lib/ipa_test_kit/generated/heartrate/heartrate_must_support_test.rb +0 -49
  300. data/lib/ipa_test_kit/generated/heartrate/heartrate_patient_category_date_search_test.rb +0 -46
  301. data/lib/ipa_test_kit/generated/heartrate/heartrate_patient_category_search_test.rb +0 -45
  302. data/lib/ipa_test_kit/generated/heartrate/heartrate_patient_category_status_search_test.rb +0 -47
  303. data/lib/ipa_test_kit/generated/heartrate/heartrate_patient_code_date_search_test.rb +0 -48
  304. data/lib/ipa_test_kit/generated/heartrate/heartrate_patient_code_search_test.rb +0 -62
  305. data/lib/ipa_test_kit/generated/heartrate/heartrate_provenance_revinclude_search_test.rb +0 -51
  306. data/lib/ipa_test_kit/generated/heartrate/heartrate_read_test.rb +0 -24
  307. data/lib/ipa_test_kit/generated/heartrate/heartrate_reference_resolution_test.rb +0 -28
  308. data/lib/ipa_test_kit/generated/heartrate/heartrate_validation_test.rb +0 -34
  309. data/lib/ipa_test_kit/generated/heartrate/metadata.yml +0 -325
  310. data/lib/ipa_test_kit/generated/heartrate_group.rb +0 -93
  311. data/lib/ipa_test_kit/generated/immunization/immunization_must_support_test.rb +0 -40
  312. data/lib/ipa_test_kit/generated/immunization/immunization_patient_date_search_test.rb +0 -47
  313. data/lib/ipa_test_kit/generated/immunization/immunization_patient_search_test.rb +0 -60
  314. data/lib/ipa_test_kit/generated/immunization/immunization_patient_status_search_test.rb +0 -45
  315. data/lib/ipa_test_kit/generated/immunization/immunization_provenance_revinclude_search_test.rb +0 -50
  316. data/lib/ipa_test_kit/generated/immunization/immunization_read_test.rb +0 -24
  317. data/lib/ipa_test_kit/generated/immunization/immunization_reference_resolution_test.rb +0 -28
  318. data/lib/ipa_test_kit/generated/immunization/immunization_validation_test.rb +0 -34
  319. data/lib/ipa_test_kit/generated/immunization/metadata.yml +0 -210
  320. data/lib/ipa_test_kit/generated/ipa_test_suite.rb +0 -88
  321. data/lib/ipa_test_kit/generated/medication_request/medication_request_must_support_test.rb +0 -44
  322. data/lib/ipa_test_kit/generated/medication_request/medication_request_patient_intent_authoredon_search_test.rb +0 -53
  323. data/lib/ipa_test_kit/generated/medication_request/medication_request_patient_intent_encounter_search_test.rb +0 -52
  324. data/lib/ipa_test_kit/generated/medication_request/medication_request_patient_intent_search_test.rb +0 -68
  325. data/lib/ipa_test_kit/generated/medication_request/medication_request_patient_intent_status_search_test.rb +0 -49
  326. data/lib/ipa_test_kit/generated/medication_request/medication_request_provenance_revinclude_search_test.rb +0 -51
  327. data/lib/ipa_test_kit/generated/medication_request/medication_request_read_test.rb +0 -24
  328. data/lib/ipa_test_kit/generated/medication_request/medication_request_reference_resolution_test.rb +0 -28
  329. data/lib/ipa_test_kit/generated/medication_request/medication_request_validation_test.rb +0 -34
  330. data/lib/ipa_test_kit/generated/medication_request/medication_validation_test.rb +0 -34
  331. data/lib/ipa_test_kit/generated/medication_request/metadata.yml +0 -307
  332. data/lib/ipa_test_kit/generated/medication_statement/medication_statement_must_support_test.rb +0 -43
  333. data/lib/ipa_test_kit/generated/medication_statement/medication_statement_patient_context_search_test.rb +0 -51
  334. data/lib/ipa_test_kit/generated/medication_statement/medication_statement_patient_effective_search_test.rb +0 -52
  335. data/lib/ipa_test_kit/generated/medication_statement/medication_statement_patient_search_test.rb +0 -68
  336. data/lib/ipa_test_kit/generated/medication_statement/medication_statement_patient_status_search_test.rb +0 -49
  337. data/lib/ipa_test_kit/generated/medication_statement/medication_statement_provenance_revinclude_search_test.rb +0 -51
  338. data/lib/ipa_test_kit/generated/medication_statement/medication_statement_read_test.rb +0 -24
  339. data/lib/ipa_test_kit/generated/medication_statement/medication_statement_reference_resolution_test.rb +0 -28
  340. data/lib/ipa_test_kit/generated/medication_statement/medication_statement_validation_test.rb +0 -34
  341. data/lib/ipa_test_kit/generated/medication_statement/medication_validation_test.rb +0 -34
  342. data/lib/ipa_test_kit/generated/medication_statement/metadata.yml +0 -230
  343. data/lib/ipa_test_kit/generated/metadata.yml +0 -6230
  344. data/lib/ipa_test_kit/generated/observation/metadata.yml +0 -1280
  345. data/lib/ipa_test_kit/generated/observation/observation_must_support_test.rb +0 -41
  346. data/lib/ipa_test_kit/generated/observation/observation_patient_category_date_search_test.rb +0 -46
  347. data/lib/ipa_test_kit/generated/observation/observation_patient_category_search_test.rb +0 -62
  348. data/lib/ipa_test_kit/generated/observation/observation_patient_category_status_search_test.rb +0 -47
  349. data/lib/ipa_test_kit/generated/observation/observation_patient_code_date_search_test.rb +0 -48
  350. data/lib/ipa_test_kit/generated/observation/observation_patient_code_search_test.rb +0 -45
  351. data/lib/ipa_test_kit/generated/observation/observation_provenance_revinclude_search_test.rb +0 -51
  352. data/lib/ipa_test_kit/generated/observation/observation_read_test.rb +0 -24
  353. data/lib/ipa_test_kit/generated/observation/observation_reference_resolution_test.rb +0 -28
  354. data/lib/ipa_test_kit/generated/observation/observation_validation_test.rb +0 -34
  355. data/lib/ipa_test_kit/generated/oxygensat/metadata.yml +0 -366
  356. data/lib/ipa_test_kit/generated/oxygensat/oxygensat_must_support_test.rb +0 -65
  357. data/lib/ipa_test_kit/generated/oxygensat/oxygensat_patient_category_date_search_test.rb +0 -46
  358. data/lib/ipa_test_kit/generated/oxygensat/oxygensat_patient_category_search_test.rb +0 -45
  359. data/lib/ipa_test_kit/generated/oxygensat/oxygensat_patient_category_status_search_test.rb +0 -47
  360. data/lib/ipa_test_kit/generated/oxygensat/oxygensat_patient_code_date_search_test.rb +0 -48
  361. data/lib/ipa_test_kit/generated/oxygensat/oxygensat_patient_code_search_test.rb +0 -62
  362. data/lib/ipa_test_kit/generated/oxygensat/oxygensat_provenance_revinclude_search_test.rb +0 -51
  363. data/lib/ipa_test_kit/generated/oxygensat/oxygensat_read_test.rb +0 -24
  364. data/lib/ipa_test_kit/generated/oxygensat/oxygensat_reference_resolution_test.rb +0 -28
  365. data/lib/ipa_test_kit/generated/oxygensat/oxygensat_validation_test.rb +0 -34
  366. data/lib/ipa_test_kit/generated/oxygensat_group.rb +0 -93
  367. data/lib/ipa_test_kit/generated/patient/metadata.yml +0 -320
  368. data/lib/ipa_test_kit/generated/patient/patient_birthdate_family_search_test.rb +0 -41
  369. data/lib/ipa_test_kit/generated/patient/patient_birthdate_name_search_test.rb +0 -39
  370. data/lib/ipa_test_kit/generated/patient/patient_family_gender_search_test.rb +0 -41
  371. data/lib/ipa_test_kit/generated/patient/patient_gender_name_search_test.rb +0 -39
  372. data/lib/ipa_test_kit/generated/patient/patient_id_search_test.rb +0 -53
  373. data/lib/ipa_test_kit/generated/patient/patient_identifier_search_test.rb +0 -40
  374. data/lib/ipa_test_kit/generated/patient/patient_must_support_test.rb +0 -57
  375. data/lib/ipa_test_kit/generated/patient/patient_name_search_test.rb +0 -39
  376. data/lib/ipa_test_kit/generated/patient/patient_provenance_revinclude_search_test.rb +0 -49
  377. data/lib/ipa_test_kit/generated/patient/patient_read_test.rb +0 -24
  378. data/lib/ipa_test_kit/generated/patient/patient_reference_resolution_test.rb +0 -28
  379. data/lib/ipa_test_kit/generated/patient/patient_validation_test.rb +0 -34
  380. data/lib/ipa_test_kit/generated/practitioner/metadata.yml +0 -124
  381. data/lib/ipa_test_kit/generated/practitioner/practitioner_identifier_search_test.rb +0 -40
  382. data/lib/ipa_test_kit/generated/practitioner/practitioner_must_support_test.rb +0 -40
  383. data/lib/ipa_test_kit/generated/practitioner/practitioner_name_search_test.rb +0 -49
  384. data/lib/ipa_test_kit/generated/practitioner/practitioner_read_test.rb +0 -24
  385. data/lib/ipa_test_kit/generated/practitioner/practitioner_reference_resolution_test.rb +0 -28
  386. data/lib/ipa_test_kit/generated/practitioner/practitioner_validation_test.rb +0 -34
  387. data/lib/ipa_test_kit/generated/practitioner_group.rb +0 -84
  388. data/lib/ipa_test_kit/generated/practitioner_role/metadata.yml +0 -141
  389. data/lib/ipa_test_kit/generated/practitioner_role/practitioner_role_identifier_search_test.rb +0 -40
  390. data/lib/ipa_test_kit/generated/practitioner_role/practitioner_role_must_support_test.rb +0 -40
  391. data/lib/ipa_test_kit/generated/practitioner_role/practitioner_role_practitioner_search_test.rb +0 -51
  392. data/lib/ipa_test_kit/generated/practitioner_role/practitioner_role_read_test.rb +0 -24
  393. data/lib/ipa_test_kit/generated/practitioner_role/practitioner_role_reference_resolution_test.rb +0 -28
  394. data/lib/ipa_test_kit/generated/practitioner_role/practitioner_role_validation_test.rb +0 -34
  395. data/lib/ipa_test_kit/generated/practitioner_role_group.rb +0 -84
  396. data/lib/ipa_test_kit/generated/provenance/metadata.yml +0 -114
  397. data/lib/ipa_test_kit/generated/provenance/provenance_read_test.rb +0 -24
  398. data/lib/ipa_test_kit/generated/provenance/provenance_reference_resolution_test.rb +0 -28
  399. data/lib/ipa_test_kit/generated/provenance/provenance_validation_test.rb +0 -34
  400. data/lib/ipa_test_kit/generated/provenance_group.rb +0 -53
  401. data/lib/ipa_test_kit/generated/resprate/metadata.yml +0 -325
  402. data/lib/ipa_test_kit/generated/resprate/resprate_must_support_test.rb +0 -49
  403. data/lib/ipa_test_kit/generated/resprate/resprate_patient_category_date_search_test.rb +0 -46
  404. data/lib/ipa_test_kit/generated/resprate/resprate_patient_category_search_test.rb +0 -45
  405. data/lib/ipa_test_kit/generated/resprate/resprate_patient_category_status_search_test.rb +0 -47
  406. data/lib/ipa_test_kit/generated/resprate/resprate_patient_code_date_search_test.rb +0 -48
  407. data/lib/ipa_test_kit/generated/resprate/resprate_patient_code_search_test.rb +0 -62
  408. data/lib/ipa_test_kit/generated/resprate/resprate_provenance_revinclude_search_test.rb +0 -51
  409. data/lib/ipa_test_kit/generated/resprate/resprate_read_test.rb +0 -24
  410. data/lib/ipa_test_kit/generated/resprate/resprate_reference_resolution_test.rb +0 -28
  411. data/lib/ipa_test_kit/generated/resprate/resprate_validation_test.rb +0 -34
  412. data/lib/ipa_test_kit/generated/resprate_group.rb +0 -93
  413. data/lib/ipa_test_kit/igs/package.tgz +0 -0
@@ -15,9 +15,7 @@ module IpaTestKit
15
15
  :saves_delayed_references?,
16
16
  :first_search?,
17
17
  :fixed_value_search?,
18
- :possible_status_search?,
19
- :test_medication_inclusion_mr?,
20
- :test_medication_inclusion_ms?,
18
+ :test_medication_inclusion?,
21
19
  :test_post_search?,
22
20
  :token_search_params,
23
21
  :test_reference_variants?,
@@ -32,7 +30,7 @@ module IpaTestKit
32
30
  if fixed_value_search?
33
31
  fixed_value_search_param_values.map { |value| fixed_value_search_params(value, patient_id) }
34
32
  else
35
- [search_params_with_values(patient_id)]
33
+ [search_params_with_values(search_param_names, patient_id)]
36
34
  end
37
35
  new_params.reject! do |params|
38
36
  params.any? { |_key, value| value.blank? }
@@ -62,8 +60,6 @@ module IpaTestKit
62
60
  params_list.flat_map do |params|
63
61
  fhir_search resource_type, params: params
64
62
 
65
- perform_search_with_status(params, patient_id) if response[:status] == 400 && possible_status_search?
66
-
67
63
  check_search_response
68
64
 
69
65
  fetch_all_bundled_resources(additional_resource_types: ['Provenance'])
@@ -96,8 +92,6 @@ module IpaTestKit
96
92
  def perform_search(params, patient_id)
97
93
  fhir_search resource_type, params: params
98
94
 
99
- perform_search_with_status(params, patient_id) if response[:status] == 400 && possible_status_search?
100
-
101
95
  check_search_response
102
96
 
103
97
  resources_returned =
@@ -107,6 +101,7 @@ module IpaTestKit
107
101
 
108
102
  perform_comparator_searches(params, patient_id) if params_with_comparators.present?
109
103
 
104
+ filter_conditions(resources_returned) if resource_type == 'Condition' && metadata.name == 'ipa_problem_list_item'
110
105
  filter_devices(resources_returned) if resource_type == 'Device'
111
106
 
112
107
  if first_search?
@@ -122,9 +117,7 @@ module IpaTestKit
122
117
 
123
118
  return resources_returned if all_search_variants_tested?
124
119
 
125
- perform_post_search(resources_returned, params) if test_post_search?
126
- test_medication_inclusion_mr(resources_returned, params, patient_id) if test_medication_inclusion_mr?
127
- test_medication_inclusion_ms(resources_returned, params, patient_id) if test_medication_inclusion_ms?
120
+ test_medication_inclusion(resources_returned, params, patient_id) if test_medication_inclusion?
128
121
  perform_reference_with_type_search(params, resources_returned.count) if test_reference_variants?
129
122
  perform_search_with_system(params, patient_id) if token_search_params.present?
130
123
 
@@ -137,6 +130,10 @@ module IpaTestKit
137
130
  check_search_response
138
131
 
139
132
  post_search_resources = fetch_all_bundled_resources.select { |resource| resource.resourceType == resource_type }
133
+
134
+ filter_conditions(post_search_resources) if resource_type == 'Condition' && metadata.name == 'ipa_problem_list_item'
135
+ filter_devices(post_search_resources) if resource_type == 'Device'
136
+
140
137
  get_resource_count = get_search_resources.length
141
138
  post_resource_count = post_search_resources.length
142
139
 
@@ -157,6 +154,19 @@ module IpaTestKit
157
154
  end
158
155
  end
159
156
 
157
+ def filter_conditions(resources)
158
+ # HL7 JIRA FHIR-37917. US Core v5.0.1 does not required patient+category.
159
+ # In order to distinguish which resources matches the current profile, Inferno has to manually filter
160
+ # the result of first search, which is searching by patient.
161
+ resources.select! do |resource|
162
+ resource.category.any? do |category|
163
+ category.coding.any? do |coding|
164
+ metadata.search_definitions[:category][:values].include? coding.code
165
+ end
166
+ end
167
+ end
168
+ end
169
+
160
170
  def search_and_check_response(params, resource_type = self.resource_type)
161
171
  fhir_search resource_type, params: params
162
172
 
@@ -176,7 +186,7 @@ module IpaTestKit
176
186
  def initial_search_variant_test_records
177
187
  {}.tap do |records|
178
188
  records[:post_variant] = false if test_post_search?
179
- records[:medication_inclusion] = false if (test_medication_inclusion_mr? && test_medication_inclusion_ms?)
189
+ records[:medication_inclusion] = false# if test_medication_inclusion?
180
190
  records[:reference_variants] = false if test_reference_variants?
181
191
  records[:token_variants] = false if token_search_params.present?
182
192
  records[:comparator_searches] = Set.new if params_with_comparators.present?
@@ -221,14 +231,15 @@ module IpaTestKit
221
231
  next if search_variant_test_records[:comparator_searches].include? name
222
232
 
223
233
  required_comparators(name).each do |comparator|
224
- path = search_param_path(name)
225
- date_element = find_a_value_at(scratch_resources_for_patient(patient_id), path)
234
+ paths = search_param_paths(name).first
235
+ date_element = find_a_value_at(scratch_resources_for_patient(patient_id), paths)
226
236
  params_with_comparator = params.merge(name => date_comparator_value(comparator, date_element))
227
237
 
228
238
  search_and_check_response(params_with_comparator)
229
239
 
230
- fetch_all_bundled_resources
231
- .each { |resource| check_resource_against_params(resource, params_with_comparator) }
240
+ fetch_all_bundled_resources.each do |resource|
241
+ check_resource_against_params(resource, params_with_comparator) if resource.resourceType == resource_type
242
+ end
232
243
  end
233
244
 
234
245
  search_variant_test_records[:comparator_searches] << name
@@ -242,10 +253,12 @@ module IpaTestKit
242
253
  new_search_params = params.merge('patient' => "Patient/#{params['patient']}")
243
254
  search_and_check_response(new_search_params)
244
255
 
245
- new_resource_count =
246
- fetch_all_bundled_resources
247
- .select { |resource| resource.resourceType == resource_type }
248
- .count
256
+ reference_with_type_resources = fetch_all_bundled_resources.select { |resource| resource.resourceType == resource_type }
257
+
258
+ filter_conditions(reference_with_type_resources) if resource_type == 'Condition' && metadata.name == 'ipa_problem_list_item'
259
+ filter_devices(reference_with_type_resources) if resource_type == 'Device'
260
+
261
+ new_resource_count = reference_with_type_resources.count
249
262
 
250
263
  assert new_resource_count == resource_count,
251
264
  "Expected search by `#{params['patient']}` to to return the same results as searching " \
@@ -258,9 +271,7 @@ module IpaTestKit
258
271
  def perform_search_with_system(params, patient_id)
259
272
  return if search_variant_test_records[:token_variants]
260
273
 
261
- new_search_params = token_search_params.each_with_object({}) do |name, search_params|
262
- search_params[name] = search_param_value(name, patient_id, include_system: true)
263
- end
274
+ new_search_params = search_params_with_values(token_search_params, patient_id, include_system: true)
264
275
  return if new_search_params.any? { |_name, value| value.blank? }
265
276
 
266
277
  search_params = params.merge(new_search_params)
@@ -275,28 +286,6 @@ module IpaTestKit
275
286
  search_variant_test_records[:token_variants] = true
276
287
  end
277
288
 
278
- def perform_search_with_status(
279
- original_params,
280
- patient_id,
281
- status_search_values: self.status_search_values,
282
- resource_type: self.resource_type
283
- )
284
- assert resource.is_a?(FHIR::OperationOutcome), "Server returned a status of 400 without an OperationOutcome"
285
- # TODO: warn about documenting status requirements
286
- status_search_values.flat_map do |status_value|
287
- search_params = original_params.merge("#{status_search_param_name}": status_value)
288
-
289
- search_and_check_response(search_params)
290
-
291
- entries = resource.entry.select { |entry| entry.resource.resourceType == resource_type }
292
-
293
- if entries.present?
294
- original_params.merge!("#{status_search_param_name}": status_value)
295
- break
296
- end
297
- end
298
- end
299
-
300
289
  def status_search_param_name
301
290
  @status_search_param_name ||=
302
291
  metadata.search_definitions.keys.find { |key| key.to_s.include? 'status' }
@@ -310,7 +299,7 @@ module IpaTestKit
310
299
  definition = metadata.search_definitions[param_name]
311
300
  return [] if definition.blank?
312
301
 
313
- definition[:multiple_or] == 'SHALL' ? [definition[:values].join(',')] : [definition[:values]]
302
+ definition[:multiple_or] == 'SHALL' ? [definition[:values].join(',')] : Array.wrap(definition[:values])
314
303
  end
315
304
 
316
305
 
@@ -319,7 +308,7 @@ module IpaTestKit
319
308
 
320
309
  all_search_params.each do |patient_id, params_list|
321
310
  next unless params_list.present?
322
-
311
+
323
312
  search_params = params_list.first
324
313
  existing_values = {}
325
314
  missing_values = {}
@@ -356,7 +345,7 @@ module IpaTestKit
356
345
  end
357
346
  end
358
347
 
359
- def test_medication_inclusion_mr(medication_requests, params, patient_id)
348
+ def test_medication_inclusion(medication_requests, params, patient_id)
360
349
  return if search_variant_test_records[:medication_inclusion]
361
350
 
362
351
  scratch[:medication_resources] ||= {}
@@ -396,46 +385,6 @@ module IpaTestKit
396
385
  search_variant_test_records[:medication_inclusion] = true
397
386
  end
398
387
 
399
- def test_medication_inclusion_ms(medication_requests, params, patient_id)
400
- return if search_variant_test_records[:medication_inclusion]
401
-
402
- scratch[:medication_resources] ||= {}
403
- scratch[:medication_resources][:all] ||= []
404
- scratch[:medication_resources][patient_id] ||= []
405
- scratch[:medication_resources][:contained] ||= []
406
-
407
- requests_with_external_references =
408
- medication_requests
409
- .select { |request| request&.medicationReference&.present? }
410
- .reject { |request| request&.medicationReference&.reference&.start_with? '#' }
411
-
412
- contained_medications =
413
- medication_requests
414
- .select { |request| request&.medicationReference&.reference&.start_with? '#' }
415
- .flat_map(&:contained)
416
- .select { |resource| resource.resourceType == 'Medication' }
417
-
418
- scratch[:medication_resources][:all] += contained_medications
419
- scratch[:medication_resources][patient_id] += contained_medications
420
- scratch[:medication_resources][:contained] += contained_medications
421
-
422
- return if requests_with_external_references.blank?
423
-
424
- search_params = params.merge(_include: 'MedicationStatement:medication')
425
-
426
- search_and_check_response(search_params)
427
-
428
- medications = fetch_all_bundled_resources.select { |resource| resource.resourceType == 'Medication' }
429
- assert medications.present?, 'No Medications were included in the search results'
430
-
431
- medications.uniq!(&:id)
432
-
433
- scratch[:medication_resources][:all] += medications
434
- scratch[:medication_resources][patient_id] += medications
435
-
436
- search_variant_test_records[:medication_inclusion] = true
437
- end
438
-
439
388
  def all_scratch_resources
440
389
  scratch_resources[:all] ||= []
441
390
  end
@@ -456,7 +405,9 @@ module IpaTestKit
456
405
  end
457
406
 
458
407
  def fixed_value_search_param_values
459
- metadata.search_definitions[fixed_value_search_param_name.to_sym][:values]
408
+ return metadata.search_definitions[fixed_value_search_param_name.to_sym][:values] unless respond_to? :observation_categories
409
+
410
+ observation_categories.split(',').map(&:strip)
460
411
  end
461
412
 
462
413
  def fixed_value_search_params(value, patient_id)
@@ -465,11 +416,29 @@ module IpaTestKit
465
416
  end
466
417
  end
467
418
 
468
- def search_params_with_values(patient_id)
469
- search_param_names.each_with_object({}) do |name, params|
470
- value = patient_id_param?(name) ? patient_id : search_param_value(name, patient_id)
471
- params[name] = value
419
+ def search_params_with_values(search_param_names, patient_id, include_system: false)
420
+ resources = scratch_resources_for_patient(patient_id)
421
+
422
+ if resources.empty?
423
+ return search_param_names.each_with_object({}) do |name, params|
424
+ value = patient_id_param?(name) ? patient_id : nil
425
+ params[name] = value
426
+ end
427
+ end
428
+
429
+ params_with_partial_value = resources.each_with_object({}) do |resource, outer_params|
430
+ results_from_one_resource = search_param_names.each_with_object({}) do |name, params|
431
+ value = patient_id_param?(name) ? patient_id : search_param_value(name, resource, include_system: include_system)
432
+ params[name] = value
433
+ end
434
+
435
+ outer_params.merge!(results_from_one_resource)
436
+
437
+ # stop if all parameter values are found
438
+ return outer_params if outer_params.all? { |_key, value| value.present? }
472
439
  end
440
+
441
+ params_with_partial_value
473
442
  end
474
443
 
475
444
  def patient_id_list
@@ -486,9 +455,13 @@ module IpaTestKit
486
455
  name == 'patient' || (name == '_id' && resource_type == 'Patient')
487
456
  end
488
457
 
489
- def search_param_path(name)
490
- path = metadata.search_definitions[name.to_sym][:path]
491
- path == 'class' ? 'local_class' : path
458
+ def search_param_paths(name)
459
+ paths = metadata.search_definitions[name.to_sym][:paths]
460
+ if paths.first =='class'
461
+ paths[0] = 'local_class'
462
+ end
463
+
464
+ paths
492
465
  end
493
466
 
494
467
  def all_search_params_present?(params)
@@ -508,8 +481,13 @@ module IpaTestKit
508
481
  end
509
482
 
510
483
  def no_resources_skip_message(resource_type = self.resource_type)
511
- "No #{resource_type} resources appear to be available. " \
512
- "Please use patients with more information"
484
+ msg = "No #{resource_type} resources appear to be available"
485
+
486
+ if (resource_type == 'Device' && implantable_device_codes.present?)
487
+ msg.concat(" with the following Device Type Code filter: #{implantable_device_codes}")
488
+ end
489
+
490
+ msg + ". Please use patients with more information"
513
491
  end
514
492
 
515
493
  def fetch_all_bundled_resources(
@@ -543,13 +521,18 @@ module IpaTestKit
543
521
  end
544
522
 
545
523
  valid_resource_types = [resource_type, 'OperationOutcome'].concat(additional_resource_types)
546
- valid_resource_types << 'Medication' if (resource_type == 'MedicationRequest' || resource_type == 'MedicationStatement')
524
+ valid_resource_types << 'Medication' if resource_type == 'MedicationRequest'
547
525
 
548
- all_valid_resource_types =
549
- resources.all? { |entry| valid_resource_types.include? entry.resourceType }
526
+ invalid_resource_types =
527
+ resources.reject { |entry| valid_resource_types.include? entry.resourceType }
528
+ .map(&:resourceType)
529
+ .uniq
550
530
 
551
- assert all_valid_resource_types,
552
- "All resources returned must be of the type: #{valid_resource_types.join(', ')}"
531
+ if invalid_resource_types.any?
532
+ info "Received resource type(s) #{invalid_resource_types.join(', ')} in search bundle, " \
533
+ "but only expected resource types #{valid_resource_types.join(', ')}. " + \
534
+ "This is unusual but allowed if the server believes additional resource types are relevant."
535
+ end
553
536
 
554
537
  resources
555
538
  end
@@ -558,57 +541,91 @@ module IpaTestKit
558
541
  "Could not resolve next bundle: #{link}"
559
542
  end
560
543
 
561
- def search_param_value(name, patient_id, include_system: false)
562
- path = search_param_path(name)
563
- element = find_a_value_at(scratch_resources_for_patient(patient_id), path)
564
- search_value =
565
- case element
566
- when FHIR::Period
567
- if element.start.present?
568
- 'gt' + (DateTime.xmlschema(element.start) - 1).xmlschema
569
- else
570
- end_datetime = get_fhir_datetime_range(element.end)[:end]
571
- 'lt' + (end_datetime + 1).xmlschema
572
- end
573
- when FHIR::Reference
574
- element.reference
575
- when FHIR::CodeableConcept
576
- if include_system
577
- coding =
578
- find_a_value_at(element, 'coding') { |coding| coding.code.present? && coding.system.present? }
579
- coding.present? ? "#{coding.system}|#{coding.code}" : nil
580
- else
581
- find_a_value_at(element, 'coding.code')
582
- end
583
- when FHIR::Identifier
584
- if include_system
585
- identifier = find_a_value_at(scratch_resources_for_patient(patient_id), path) do |identifier|
586
- identifier.value.present? && identifier.system.present?
544
+ def search_param_value(name, resource, include_system: false)
545
+ paths = search_param_paths(name)
546
+ search_value = nil
547
+ paths.each do |path|
548
+ element = find_a_value_at(resource, path) { |element| element_has_valid_value?(element, include_system) }
549
+
550
+ search_value =
551
+ case element
552
+ when FHIR::Period
553
+ if element.start.present?
554
+ 'gt' + (DateTime.xmlschema(element.start) - 1).xmlschema
555
+ else
556
+ end_datetime = get_fhir_datetime_range(element.end)[:end]
557
+ 'lt' + (end_datetime + 1).xmlschema
587
558
  end
588
- identifier.present? ? "#{identifier.system}|#{identifier.value}" : nil
589
- else
590
- element.value
591
- end
592
- when FHIR::Coding
593
- if include_system
594
- coding = find_a_value_at(scratch_resources_for_patient(patient_id), path) do |coding|
595
- coding.code.present? && coding.system.present?
559
+ when FHIR::Reference
560
+ element.reference
561
+ when FHIR::CodeableConcept
562
+ if include_system
563
+ coding =
564
+ find_a_value_at(element, 'coding') { |coding| coding.code.present? && coding.system.present? }
565
+ "#{coding.system}|#{coding.code}"
566
+ else
567
+ find_a_value_at(element, 'coding.code')
596
568
  end
597
- coding.present? ? "#{coding.system}|#{coding.code}" : nil
569
+ when FHIR::Identifier
570
+ include_system ? "#{element.system}|#{element.value}" : element.value
571
+ when FHIR::Coding
572
+ include_system ? "#{element.system}|#{element.code}" : element.code
573
+ when FHIR::HumanName
574
+ element.family || element.given&.first || element.text
575
+ when FHIR::Address
576
+ element.text || element.city || element.state || element.postalCode || element.country
598
577
  else
599
- element.code
578
+ if metadata.version != 'v3.1.1' &&
579
+ metadata.search_definitions[name.to_sym][:type] == 'date' &&
580
+ params_with_comparators&.include?(name)
581
+ # convert date search to greath-than comparator search with correct precision
582
+ # For all date search parameters:
583
+ # Patient.birthDate does not mandate comparators so cannot be converted
584
+ # Goal.target-date has day precision
585
+ # All others have second + time offset precision
586
+ if /^\d{4}(-\d{2})?$/.match?(element) || # YYYY or YYYY-MM
587
+ (/^\d{4}-\d{2}-\d{2}$/.match?(element) && resource_type != "Goal") # YYY-MM-DD AND Resource is NOT Goal
588
+ "gt#{(DateTime.xmlschema(element)-1).xmlschema}"
589
+ else
590
+ element
591
+ end
592
+ else
593
+ element
594
+ end
600
595
  end
601
- when FHIR::HumanName
602
- element.family || element.given&.first || element.text
603
- when FHIR::Address
604
- element.text || element.city || element.state || element.postalCode || element.country
605
- else
606
- element
607
- end
596
+
597
+ break if search_value.present?
598
+ end
599
+
608
600
  escaped_value = search_value&.gsub(',', '\\,')
609
601
  escaped_value
610
602
  end
611
603
 
604
+ def element_has_valid_value?(element, include_system)
605
+ case element
606
+ when FHIR::Reference
607
+ element.reference.present?
608
+ when FHIR::CodeableConcept
609
+ if include_system
610
+ coding =
611
+ find_a_value_at(element, 'coding') { |coding| coding.code.present? && coding.system.present? }
612
+ coding.present?
613
+ else
614
+ find_a_value_at(element, 'coding.code').present?
615
+ end
616
+ when FHIR::Identifier
617
+ include_system ? element.value.present? && element.system.present? : element.value.present?
618
+ when FHIR::Coding
619
+ include_system ? element.code.present? && element.system.present? : element.code.present?
620
+ when FHIR::HumanName
621
+ (element.family || element.given&.first || element.text).present?
622
+ when FHIR::Address
623
+ (element.text || element.city || element.state || element.postalCode || element.country).present?
624
+ else
625
+ true
626
+ end
627
+ end
628
+
612
629
  def save_resource_reference(resource_type, reference)
613
630
  scratch[:references] ||= {}
614
631
  scratch[:references][resource_type] ||= Set.new
@@ -616,6 +633,7 @@ module IpaTestKit
616
633
  end
617
634
 
618
635
  def save_delayed_references(resources, containing_resource_type = self.resource_type)
636
+ return if containing_resource_type == 'Provenance'
619
637
  resources.each do |resource|
620
638
  references_to_save(containing_resource_type).each do |reference_to_save|
621
639
  resolve_path(resource, reference_to_save[:path])
@@ -634,89 +652,100 @@ module IpaTestKit
634
652
  #### RESULT CHECKING ####
635
653
 
636
654
  def check_resource_against_params(resource, params)
637
- params.each do |name, search_value|
638
- path = search_param_path(name)
639
- type = metadata.search_definitions[name.to_sym][:type]
640
- values_found =
641
- resolve_path(resource, path)
642
- .map do |value|
643
- if value.is_a? FHIR::Reference
644
- value.reference
645
- else
646
- value
655
+
656
+ params.each do |name, escaped_search_value|
657
+ #unescape search value
658
+ search_value = escaped_search_value&.gsub('\\,', ',')
659
+ paths = search_param_paths(name)
660
+
661
+ match_found = false
662
+ values_found = []
663
+
664
+ paths.each do |path|
665
+ type = metadata.search_definitions[name.to_sym][:type]
666
+ values_found =
667
+ resolve_path(resource, path)
668
+ .map do |value|
669
+ if value.is_a? FHIR::Reference
670
+ value.reference
671
+ else
672
+ value
673
+ end
647
674
  end
648
- end
649
675
 
650
- match_found =
651
- case type
652
- when 'Period', 'date', 'instant', 'dateTime'
653
- values_found.any? { |date| validate_date_search(search_value, date) }
654
- when 'HumanName'
655
- # When a string search parameter refers to the types HumanName and Address,
656
- # the search covers the elements of type string, and does not cover elements such as use and period
657
- # https://www.hl7.org/fhir/search.html#string
658
- search_value_downcase = search_value.downcase
659
- values_found.any? do |name|
660
- name&.text&.downcase&.start_with?(search_value_downcase) ||
661
- name&.family&.downcase&.start_with?(search_value_downcase) ||
662
- name&.given&.any? { |given| given.downcase.start_with?(search_value_downcase) } ||
663
- name&.prefix&.any? { |prefix| prefix.downcase.start_with?(search_value_downcase) } ||
664
- name&.suffix&.any? { |suffix| suffix.downcase.start_with?(search_value_downcase) }
665
- end
666
- when 'Address'
667
- search_value_downcase = search_value.downcase
668
- values_found.any? do |address|
669
- address&.text&.downcase&.start_with?(search_value_downcase) ||
670
- address&.city&.downcase&.start_with?(search_value_downcase) ||
671
- address&.state&.downcase&.start_with?(search_value_downcase) ||
672
- address&.postalCode&.downcase&.start_with?(search_value_downcase) ||
673
- address&.country&.downcase&.start_with?(search_value_downcase)
674
- end
675
- when 'CodeableConcept'
676
- # FHIR token search (https://www.hl7.org/fhir/search.html#token): "When in doubt, servers SHOULD
677
- # treat tokens in a case-insensitive manner, on the grounds that including undesired data has
678
- # less safety implications than excluding desired behavior".
679
- codings = values_found.flat_map(&:coding)
680
- if search_value.include? '|'
681
- system = search_value.split('|').first
682
- code = search_value.split('|').last
683
- codings&.any? { |coding| coding.system == system && coding.code&.casecmp?(code) }
684
- else
685
- codings&.any? { |coding| coding.code&.casecmp?(search_value) }
686
- end
687
- when 'Coding'
688
- if search_value.include? '|'
689
- system = search_value.split('|').first
690
- code = search_value.split('|').last
691
- values_found.any? { |coding| coding.system == system && coding.code&.casecmp?(code) }
692
- else
693
- values_found.any? { |coding| coding.code&.casecmp?(search_value) }
694
- end
695
- when 'Identifier'
696
- if search_value.include? '|'
697
- values_found.any? { |identifier| "#{identifier.system}|#{identifier.value}" == search_value }
698
- else
699
- values_found.any? { |identifier| identifier.value == search_value }
700
- end
701
- when 'string'
702
- searched_values = search_value.downcase.split(/(?<!\\\\),/).map{ |string| string.gsub('\\,', ',') }
703
- values_found.any? do |value_found|
704
- searched_values.any? { |searched_value| value_found.downcase.starts_with? searched_value }
705
- end
706
- else
707
- # searching by patient requires special case because we are searching by a resource identifier
708
- # references can also be URL's, so we made need to resolve those url's
709
- if ['subject', 'patient'].include? name.to_s
710
- id = search_value.split('Patient/').last
711
- possible_values = [id, 'Patient/' + id, "#{url}/Patient/\#{id}"]
712
- values_found.any? do |reference|
713
- possible_values.include? reference
676
+ match_found =
677
+ case type
678
+ when 'Period', 'date', 'instant', 'dateTime'
679
+ values_found.any? { |date| validate_date_search(search_value, date) }
680
+ when 'HumanName'
681
+ # When a string search parameter refers to the types HumanName and Address,
682
+ # the search covers the elements of type string, and does not cover elements such as use and period
683
+ # https://www.hl7.org/fhir/search.html#string
684
+ search_value_downcase = search_value.downcase
685
+ values_found.any? do |name|
686
+ name&.text&.downcase&.start_with?(search_value_downcase) ||
687
+ name&.family&.downcase&.start_with?(search_value_downcase) ||
688
+ name&.given&.any? { |given| given.downcase.start_with?(search_value_downcase) } ||
689
+ name&.prefix&.any? { |prefix| prefix.downcase.start_with?(search_value_downcase) } ||
690
+ name&.suffix&.any? { |suffix| suffix.downcase.start_with?(search_value_downcase) }
691
+ end
692
+ when 'Address'
693
+ search_value_downcase = search_value.downcase
694
+ values_found.any? do |address|
695
+ address&.text&.downcase&.start_with?(search_value_downcase) ||
696
+ address&.city&.downcase&.start_with?(search_value_downcase) ||
697
+ address&.state&.downcase&.start_with?(search_value_downcase) ||
698
+ address&.postalCode&.downcase&.start_with?(search_value_downcase) ||
699
+ address&.country&.downcase&.start_with?(search_value_downcase)
700
+ end
701
+ when 'CodeableConcept'
702
+ # FHIR token search (https://www.hl7.org/fhir/search.html#token): "When in doubt, servers SHOULD
703
+ # treat tokens in a case-insensitive manner, on the grounds that including undesired data has
704
+ # less safety implications than excluding desired behavior".
705
+ codings = values_found.flat_map(&:coding)
706
+ if search_value.include? '|'
707
+ system = search_value.split('|').first
708
+ code = search_value.split('|').last
709
+ codings&.any? { |coding| coding.system == system && coding.code&.casecmp?(code) }
710
+ else
711
+ codings&.any? { |coding| coding.code&.casecmp?(search_value) }
712
+ end
713
+ when 'Coding'
714
+ if search_value.include? '|'
715
+ system = search_value.split('|').first
716
+ code = search_value.split('|').last
717
+ values_found.any? { |coding| coding.system == system && coding.code&.casecmp?(code) }
718
+ else
719
+ values_found.any? { |coding| coding.code&.casecmp?(search_value) }
720
+ end
721
+ when 'Identifier'
722
+ if search_value.include? '|'
723
+ values_found.any? { |identifier| "#{identifier.system}|#{identifier.value}" == search_value }
724
+ else
725
+ values_found.any? { |identifier| identifier.value == search_value }
726
+ end
727
+ when 'string'
728
+ searched_values = search_value.downcase.split(/(?<!\\\\),/).map{ |string| string.gsub('\\,', ',') }
729
+ values_found.any? do |value_found|
730
+ searched_values.any? { |searched_value| value_found.downcase.starts_with? searched_value }
714
731
  end
715
732
  else
716
- search_values = search_value.split(/(?<!\\\\),/).map { |string| string.gsub('\\,', ',') }
717
- values_found.any? { |value_found| search_values.include? value_found }
733
+ # searching by patient requires special case because we are searching by a resource identifier
734
+ # references can also be URLs, so we may need to resolve those URLs
735
+ if ['subject', 'patient'].include? name.to_s
736
+ id = search_value.split('Patient/').last
737
+ possible_values = [id, "Patient/#{id}", "#{url}/Patient/#{id}"]
738
+ values_found.any? do |reference|
739
+ possible_values.include? reference
740
+ end
741
+ else
742
+ search_values = search_value.split(/(?<!\\\\),/).map { |string| string.gsub('\\,', ',') }
743
+ values_found.any? { |value_found| search_values.include? value_found }
744
+ end
718
745
  end
719
- end
746
+
747
+ break if match_found
748
+ end
720
749
 
721
750
  assert match_found,
722
751
  "#{resource_type}/#{resource.id} did not match the search parameters:\n" \