ipa_test_kit 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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 +2846 -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 +260 -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" \