plan_executor 1.0.2

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 (337) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +44 -0
  3. data/.simplecov +16 -0
  4. data/.travis.yml +13 -0
  5. data/Gemfile +26 -0
  6. data/Gemfile.lock +197 -0
  7. data/LICENSE +201 -0
  8. data/README.md +126 -0
  9. data/Rakefile +25 -0
  10. data/fixtures/daf/conformance-daf-query-responder.xml +1471 -0
  11. data/fixtures/diagnostic_order/do-100.xml +64 -0
  12. data/fixtures/diagnostic_order/do-200.xml +121 -0
  13. data/fixtures/diagnostic_order/do-300.xml +91 -0
  14. data/fixtures/diagnostic_order/do-400.xml +88 -0
  15. data/fixtures/diagnostic_report/dr-100.xml +96 -0
  16. data/fixtures/diagnostic_report/dr-200.xml +125 -0
  17. data/fixtures/diagnostic_report/dr-300.xml +132 -0
  18. data/fixtures/diagnostic_report/dr-400.xml +121 -0
  19. data/fixtures/financial/claim-example-average.xml +168 -0
  20. data/fixtures/financial/claim-example-simple.xml +67 -0
  21. data/fixtures/observation/obs-100.xml +58 -0
  22. data/fixtures/observation/obs-101.xml +58 -0
  23. data/fixtures/observation/obs-200.xml +125 -0
  24. data/fixtures/observation/obs-300.xml +106 -0
  25. data/fixtures/observation/obs-301.xml +106 -0
  26. data/fixtures/observation/obs-302.xml +106 -0
  27. data/fixtures/observation/obs-303.xml +106 -0
  28. data/fixtures/observation/obs-304.xml +106 -0
  29. data/fixtures/observation/obs-400.xml +87 -0
  30. data/fixtures/observation/obs-401.xml +95 -0
  31. data/fixtures/observation/obs-402.xml +95 -0
  32. data/fixtures/observation/obs-403.xml +84 -0
  33. data/fixtures/observation/obs-404.xml +84 -0
  34. data/fixtures/observation/obs-405.xml +83 -0
  35. data/fixtures/observation/obs-406.xml +83 -0
  36. data/fixtures/observation/obs-407.xml +70 -0
  37. data/fixtures/observation/obs-408.xml +84 -0
  38. data/fixtures/observation/obs-uslab-example5.xml +102 -0
  39. data/fixtures/order/order-100.xml +61 -0
  40. data/fixtures/order/order-200.xml +61 -0
  41. data/fixtures/order/order-300.xml +61 -0
  42. data/fixtures/order/order-400.xml +61 -0
  43. data/fixtures/order_response/ordresp-100.xml +79 -0
  44. data/fixtures/order_response/ordresp-110.xml +79 -0
  45. data/fixtures/order_response/ordresp-200.xml +79 -0
  46. data/fixtures/order_response/ordresp-210.xml +79 -0
  47. data/fixtures/order_response/ordresp-300.xml +79 -0
  48. data/fixtures/order_response/ordresp-310.xml +79 -0
  49. data/fixtures/order_response/ordresp-400.xml +79 -0
  50. data/fixtures/order_response/ordresp-410.xml +79 -0
  51. data/fixtures/organization/org-uslab-example3.xml +49 -0
  52. data/fixtures/patient/patient-example-updated.xml +140 -0
  53. data/fixtures/patient/patient-example-us-extensions(us01).xml +81 -0
  54. data/fixtures/patient/patient-example.xml +132 -0
  55. data/fixtures/patient/patient-format-example.xml +101 -0
  56. data/fixtures/patient/patient-minimal.xml +9 -0
  57. data/fixtures/patient/patient-uslab-example1.xml +44 -0
  58. data/fixtures/practitioner/pract-uslab-example1.xml +18 -0
  59. data/fixtures/practitioner/pract-uslab-example3.xml +36 -0
  60. data/fixtures/record/condition-example-f201-fever.xml +63 -0
  61. data/fixtures/record/condition-example-f205-infection.xml +20 -0
  62. data/fixtures/record/diagnosticreport-example-f201-brainct.xml +18 -0
  63. data/fixtures/record/encounter-example-f201-20130404.xml +17 -0
  64. data/fixtures/record/encounter-example-f202-20130128.xml +17 -0
  65. data/fixtures/record/observation-example-f202-temperature.xml +60 -0
  66. data/fixtures/record/organization-example-f201-aumc.xml +5 -0
  67. data/fixtures/record/organization-example-f203-bumc.xml +5 -0
  68. data/fixtures/record/patient-example-f201-roel.xml +16 -0
  69. data/fixtures/record/practitioner-example-f201-ab.xml +14 -0
  70. data/fixtures/record/procedure-example-f201-tpf.xml +23 -0
  71. data/fixtures/scheduling/appointment-simple.xml +24 -0
  72. data/fixtures/scheduling/appointmentresponse-patient-simple.xml +12 -0
  73. data/fixtures/scheduling/appointmentresponse-practitioner-simple.xml +12 -0
  74. data/fixtures/scheduling/practitioner-simple.xml +10 -0
  75. data/fixtures/scheduling/schedule-simple.xml +12 -0
  76. data/fixtures/scheduling/slot-simple.xml +10 -0
  77. data/fixtures/specimen/spec-100.xml +65 -0
  78. data/fixtures/specimen/spec-400.xml +70 -0
  79. data/fixtures/specimen/spec-uslab-example1.xml +82 -0
  80. data/fixtures/validation/observation.profile.xml +2045 -0
  81. data/fixtures/validation/observations/observation-example(example).xml +50 -0
  82. data/lib/FHIR_structure.json +529 -0
  83. data/lib/daf_resource_generator.rb +94 -0
  84. data/lib/data/fhir_structure.rb +8 -0
  85. data/lib/data/resources.rb +138 -0
  86. data/lib/executor.rb +56 -0
  87. data/lib/ext/client.rb +27 -0
  88. data/lib/ext/client_reply.rb +19 -0
  89. data/lib/plan_executor.rb +31 -0
  90. data/lib/resource_generator.rb +656 -0
  91. data/lib/tasks/tasks.rake +329 -0
  92. data/lib/tasks/templates/summary.html.erb +163 -0
  93. data/lib/test_result.rb +69 -0
  94. data/lib/tests/assertions.rb +261 -0
  95. data/lib/tests/base_test.rb +117 -0
  96. data/lib/tests/suites/argonaut_resprint_1_test.rb +260 -0
  97. data/lib/tests/suites/argonaut_resprint_2_test.rb +369 -0
  98. data/lib/tests/suites/argonaut_resprint_3_test.rb +309 -0
  99. data/lib/tests/suites/argonaut_sprint_1_test.rb +187 -0
  100. data/lib/tests/suites/argonaut_sprint_2_test.rb +115 -0
  101. data/lib/tests/suites/argonaut_sprint_3_test.rb +208 -0
  102. data/lib/tests/suites/argonaut_sprint_4_test.rb +335 -0
  103. data/lib/tests/suites/argonaut_sprint_5_test.rb +196 -0
  104. data/lib/tests/suites/argonaut_sprint_6_test.rb +243 -0
  105. data/lib/tests/suites/argonaut_sprint_7_test.rb +161 -0
  106. data/lib/tests/suites/base_suite.rb +116 -0
  107. data/lib/tests/suites/connectathon_audit_track.rb +354 -0
  108. data/lib/tests/suites/connectathon_fetch_patient_record.rb +443 -0
  109. data/lib/tests/suites/connectathon_financial_track.rb +380 -0
  110. data/lib/tests/suites/connectathon_lab_order_track.rb +239 -0
  111. data/lib/tests/suites/connectathon_patient_track.rb +364 -0
  112. data/lib/tests/suites/connectathon_profile_validation.rb +101 -0
  113. data/lib/tests/suites/connectathon_scheduling_track.rb +266 -0
  114. data/lib/tests/suites/connectathon_terminology_track.rb +242 -0
  115. data/lib/tests/suites/daf_profiles_test.rb +431 -0
  116. data/lib/tests/suites/format_test.rb +453 -0
  117. data/lib/tests/suites/history_test.rb +311 -0
  118. data/lib/tests/suites/read_test.rb +104 -0
  119. data/lib/tests/suites/resource_test.rb +553 -0
  120. data/lib/tests/suites/search_test.rb +219 -0
  121. data/lib/tests/suites/search_test_robust.rb +172 -0
  122. data/lib/tests/suites/sprinkler_search_test.rb +660 -0
  123. data/lib/tests/suites/suite_engine.rb +114 -0
  124. data/lib/tests/suites/transaction_test.rb +571 -0
  125. data/lib/tests/testscripts/base_testscript.rb +480 -0
  126. data/lib/tests/testscripts/testscript_engine.rb +81 -0
  127. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/Client Assigned Id/track1-patient-base-client-id-json.xml +348 -0
  128. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/Client Assigned Id/track1-patient-base-client-id-xml.xml +348 -0
  129. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/Client Assigned Id/track1-patient-bonus-client-id-json.xml +420 -0
  130. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/Client Assigned Id/track1-patient-bonus-client-id-xml.xml +420 -0
  131. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/README.html +68 -0
  132. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/Server Assigned Id/track1-patient-base-server-id-json.xml +352 -0
  133. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/Server Assigned Id/track1-patient-base-server-id-xml.xml +352 -0
  134. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/Server Assigned Id/track1-patient-bonus-server-id-json.xml +421 -0
  135. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/Server Assigned Id/track1-patient-bonus-server-id-xml.xml +421 -0
  136. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/conformance/PatientConformance.xml +34 -0
  137. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-create-PeterChalmers-min.json +45 -0
  138. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-create-PeterChalmers-min.xml +26 -0
  139. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-create-PeterChalmers.json +100 -0
  140. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-create-PeterChalmers.xml +102 -0
  141. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-create-bonus-PeterChalmers-min.json +53 -0
  142. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-create-bonus-PeterChalmers-min.xml +30 -0
  143. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-create-bonus-PeterChalmers.json +108 -0
  144. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-create-bonus-PeterChalmers.xml +108 -0
  145. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-update-PeterChalmers-min.json +45 -0
  146. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-update-PeterChalmers-min.xml +26 -0
  147. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-update-PeterChalmers.json +100 -0
  148. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-update-PeterChalmers.xml +102 -0
  149. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-update-bonus1-PeterChalmers-min.json +53 -0
  150. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-update-bonus1-PeterChalmers-min.xml +30 -0
  151. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-update-bonus1-PeterChalmers.json +108 -0
  152. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-update-bonus1-PeterChalmers.xml +107 -0
  153. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-update-bonus2-PeterChalmers-min.json +53 -0
  154. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-update-bonus2-PeterChalmers-min.xml +31 -0
  155. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-update-bonus2-PeterChalmers.json +108 -0
  156. data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-update-bonus2-PeterChalmers.xml +106 -0
  157. data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/C-CDA_R2-1_CCD-ussg.xml +3414 -0
  158. data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/parameters-A1-empty-on-instance.xml +9 -0
  159. data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/parameters-A2-empty-by-ref.xml +15 -0
  160. data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/parameters-A3-empty-by-identifier.xml +13 -0
  161. data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/parameters-A4-empty-by-contained.xml +15 -0
  162. data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/parameters-B1-CCDA-on-instance.xml +15 -0
  163. data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/parameters-B2-CCDA-by-ref.xml +21 -0
  164. data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/parameters-B3-CCDA-by-identifier.xml +19 -0
  165. data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/parameters-B4-CCDA-by-contained.xml +21 -0
  166. data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/questionnaire-sdc-profile-example-ussg-fht.xml +3905 -0
  167. data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/questionnaireresponse-expected-ussg-fht-CCDA.xml +190 -0
  168. data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/questionnaireresponse-expected-ussg-fht-empty.xml +177 -0
  169. data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/track11-sdc-prepop-xml.xml +142 -0
  170. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Expand/Client Assigned Id/track2-ts-suite1-expand-client-id.xml +925 -0
  171. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Expand/Client Assigned Id/track2-ts-suite2-expand-filter-client-id.xml +930 -0
  172. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Expand/Server Assigned Id/track2-ts-suite1-expand-server-id.xml +953 -0
  173. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Expand/Server Assigned Id/track2-ts-suite2-expand-filter-server-id.xml +958 -0
  174. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Lookup/track2-ts-suite5-loinc-lookup-xml.xml +224 -0
  175. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Lookup/track2-ts-suite5-snomed-lookup-xml.xml +224 -0
  176. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/README.html +85 -0
  177. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Translate/track2-ts-suite6-translate-xml.xml +224 -0
  178. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Validate-code/Client Assigned Id/track2-ts-suite3-validate-code-client-id.xml +1807 -0
  179. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Validate-code/Client Assigned Id/track2-ts-suite4-validate-code-client-id.xml +714 -0
  180. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Validate-code/Server Assigned Id/track2-ts-suite3-validate-code-server-id.xml +1835 -0
  181. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Validate-code/Server Assigned Id/track2-ts-suite4-validate-code-server-id.xml +742 -0
  182. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/conformance/ConceptMapSuite6Conformance.xml +11 -0
  183. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/conformance/ValueSetSuite1Conformance.xml +17 -0
  184. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/conformance/ValueSetSuite2Conformance.xml +17 -0
  185. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/conformance/ValueSetSuite3Conformance.xml +14 -0
  186. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/conformance/ValueSetSuite4Conformance.xml +14 -0
  187. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/conformance/ValueSetSuite5Conformance.xml +11 -0
  188. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/extensional-case-1-input-4-2-a.xml +11 -0
  189. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/extensional-case-1-input-4-2-b.xml +11 -0
  190. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/extensional-case-1-input-4-3-a.xml +13 -0
  191. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/extensional-case-1-input-4-3-b.xml +13 -0
  192. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/extensional-case-1-input-4-4-a.xml +15 -0
  193. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/extensional-case-1-input-4-4-b.xml +15 -0
  194. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/lookup-loinc-input-5-2.xml +10 -0
  195. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/lookup-loinc-input-5-3.xml +11 -0
  196. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/lookup-snomed-input-5-2.xml +10 -0
  197. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/lookup-snomed-input-5-3.xml +11 -0
  198. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/translate-conceptmap-input-6-2.xml +14 -0
  199. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/translate-conceptmap-input-6-3.xml +15 -0
  200. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/extensional-case-1-expand-min.xml +47 -0
  201. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/extensional-case-1-filter-min.xml +23 -0
  202. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/extensional-case-2-expand-min.xml +132 -0
  203. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/extensional-case-2-filter-min.xml +38 -0
  204. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/extensional-case-3-expand-min.xml +252 -0
  205. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/extensional-case-3-filter-min.xml +58 -0
  206. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/extensional-case-4-expand-min.xml +57 -0
  207. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/extensional-case-4-filter-min.xml +28 -0
  208. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/intensional-case-1-expand-min.xml +347 -0
  209. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/intensional-case-1-filter-min.xml +33 -0
  210. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/intensional-case-2-expand-min.xml +637 -0
  211. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/intensional-case-2-filter-min.xml +33 -0
  212. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/intensional-case-3-filter-min.xml +58 -0
  213. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/lookup-loinc-min.xml +11 -0
  214. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/lookup-snomed-min.xml +11 -0
  215. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/suite3-invalid-min.xml +10 -0
  216. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/suite3-valid-min.xml +7 -0
  217. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/suite4-invalid-min.xml +10 -0
  218. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/suite4-valid-min.xml +7 -0
  219. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/translate-conceptmap-min.xml +17 -0
  220. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/resources/extensional-case-1.xml +55 -0
  221. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/resources/extensional-case-2.xml +122 -0
  222. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/resources/extensional-case-3.xml +222 -0
  223. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/resources/extensional-case-4.xml +65 -0
  224. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/resources/intensional-case-1.xml +31 -0
  225. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/resources/intensional-case-2.xml +31 -0
  226. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/resources/intensional-case-3.xml +31 -0
  227. data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/resources/translate-conceptmap-case-1.xml +145 -0
  228. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/conformance/DecisionSupportServiceModule-Evaluate.xml +17 -0
  229. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-incomplete-request-payload.xml +26 -0
  230. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-incomplete-response-min-payload.xml +7 -0
  231. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-incomplete-response-payload.xml +332 -0
  232. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-malformed-request-payload.xml +28 -0
  233. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-malformed-response-min-payload.xml +7 -0
  234. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-malformed-response-payload.xml +20 -0
  235. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-request-payload.xml +28 -0
  236. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-response-min-payload.xml +7 -0
  237. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-response-payload.xml +332 -0
  238. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-unauthorized-request-payload.xml +28 -0
  239. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-unauthorized-response-min-payload.xml +7 -0
  240. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-unauthorized-response-payload.xml +8 -0
  241. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/gao-assessment-request-payload.xml +176 -0
  242. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/gao-assessment-response-payload-min.xml +32 -0
  243. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/gao-assessment-response-payload.xml +80 -0
  244. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/track3-cds-evaluate-cdc-immunization.xml +290 -0
  245. data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/track3-cds-evaluate-gao-profile.xml +110 -0
  246. data/lib/tests/testscripts/xml/Connectathon11/Track6-FHIR-Genomics/Client_Assigned_Id/TestScript_FHIR-Genomics.xml +170 -0
  247. data/lib/tests/testscripts/xml/Connectathon11/Track6-FHIR-Genomics/_reference/resources/sequence-example-1.xml +31 -0
  248. data/lib/tests/testscripts/xml/Connectathon11/Track6-FHIR-Genomics/_reference/resources/sequence-example-2.xml +31 -0
  249. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/Actors.png +0 -0
  250. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/Client_Assigned_Id/track7-laborder100-xml.xml +590 -0
  251. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/Client_Assigned_Id/track7-laborder200-xml.xml +587 -0
  252. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/Client_Assigned_Id/track7-laborder300-xml.xml +612 -0
  253. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/Client_Assigned_Id/track7-laborder400-xml.xml +635 -0
  254. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/Peer-to-Peer/track7-laborder100-peer2peer-xml.xml +752 -0
  255. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/Thumbs.db +0 -0
  256. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/conformance/LabOrderLabReport-CreateDeleteReadUpdate.xml +187 -0
  257. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/conformance/html.xslt +45 -0
  258. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticOrder/do-100-update.xml +64 -0
  259. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticOrder/do-100.xml +64 -0
  260. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticOrder/do-200-update.xml +121 -0
  261. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticOrder/do-200.xml +121 -0
  262. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticOrder/do-300-update.xml +91 -0
  263. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticOrder/do-300.xml +91 -0
  264. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticOrder/do-400-update.xml +88 -0
  265. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticOrder/do-400.xml +88 -0
  266. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticReport/dr-100.xml +96 -0
  267. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticReport/dr-200.xml +125 -0
  268. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticReport/dr-300.xml +132 -0
  269. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticReport/dr-400.xml +121 -0
  270. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-100.xml +58 -0
  271. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-101.xml +58 -0
  272. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-200.xml +125 -0
  273. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-300.xml +106 -0
  274. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-301.xml +106 -0
  275. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-302.xml +106 -0
  276. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-303.xml +106 -0
  277. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-304.xml +106 -0
  278. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-400.xml +87 -0
  279. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-401.xml +95 -0
  280. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-402.xml +95 -0
  281. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-403.xml +84 -0
  282. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-404.xml +84 -0
  283. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-405.xml +83 -0
  284. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-406.xml +83 -0
  285. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-407.xml +70 -0
  286. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-408.xml +84 -0
  287. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-uslab-example5.xml +102 -0
  288. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Order/order-100.xml +61 -0
  289. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Order/order-200.xml +61 -0
  290. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Order/order-300.xml +61 -0
  291. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Order/order-400.xml +61 -0
  292. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/OrderResponse/ordresp-100.xml +79 -0
  293. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/OrderResponse/ordresp-110.xml +79 -0
  294. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/OrderResponse/ordresp-200.xml +79 -0
  295. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/OrderResponse/ordresp-210.xml +79 -0
  296. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/OrderResponse/ordresp-300.xml +79 -0
  297. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/OrderResponse/ordresp-310.xml +79 -0
  298. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/OrderResponse/ordresp-400.xml +79 -0
  299. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/OrderResponse/ordresp-410.xml +79 -0
  300. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Organization/org-uslab-example3.xml +49 -0
  301. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Patient/patient-uslab-example1.xml +44 -0
  302. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Practitioner/pract-uslab-example1.xml +18 -0
  303. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Practitioner/pract-uslab-example3.xml +36 -0
  304. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Specimen/Thumbs.db +0 -0
  305. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Specimen/spec-100.xml +65 -0
  306. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Specimen/spec-400.xml +70 -0
  307. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Specimen/spec-uslab-example1.xml +82 -0
  308. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Testscript 1 Document.txt +122 -0
  309. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Testscript 2 Document.txt +103 -0
  310. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Testscript 3 Document.txt +201 -0
  311. data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Testscript 4 Document.txt +310 -0
  312. data/lib/tests/testscripts/xml/Connectathon11/Track9-Patch/_reference/conformance/MedicationStatementCreate.xml +11 -0
  313. data/lib/tests/testscripts/xml/Connectathon11/Track9-Patch/_reference/conformance/PatientSearchType.xml +15 -0
  314. data/lib/tests/testscripts/xml/Connectathon11/Track9-Patch/_reference/resources/medicationstatement-create.json +39 -0
  315. data/lib/tests/testscripts/xml/Connectathon11/Track9-Patch/_reference/resources/medicationstatement-patch.json +3 -0
  316. data/lib/tests/testscripts/xml/Connectathon11/Track9-Patch/track9-patch-medicationstatement-json-if-match.xml +321 -0
  317. data/lib/tests/testscripts/xml/Connectathon11/Track9-Patch/track9-patch-medicationstatement-json.xml +303 -0
  318. data/lib/tests/testscripts/xml/Connectathon11/Track9-Patch/track9-patch-peer2peer-patient-json.xml +235 -0
  319. data/plan_executor.gemspec +14 -0
  320. data/test/fixtures/diagnostic_bundle.xml +51 -0
  321. data/test/fixtures/lab_results_bundle.xml +49 -0
  322. data/test/fixtures/observation_bundle.json +61 -0
  323. data/test/fixtures/testscript-example.xml +202 -0
  324. data/test/fixtures/testscript-history.xml +143 -0
  325. data/test/fixtures/testscript-readtest.xml +272 -0
  326. data/test/fixtures/testscript-search.xml +282 -0
  327. data/test/fixtures/testscript-update.xml +147 -0
  328. data/test/fixtures/vital_signs_bundle.xml +117 -0
  329. data/test/test_helper.rb +8 -0
  330. data/test/unit/argonaut_sprint6_test.rb +31 -0
  331. data/test/unit/argonaut_sprint7_test.rb +21 -0
  332. data/test/unit/basic_test.rb +27 -0
  333. data/test/unit/fetch_patient_record_test.rb +357 -0
  334. data/test/unit/financial_test.rb +41 -0
  335. data/test/unit/fixtures_test.rb +45 -0
  336. data/test/unit/metadata_test.rb +33 -0
  337. metadata +394 -0
@@ -0,0 +1,443 @@
1
+ module Crucible
2
+ module Tests
3
+ class ConnectathonFetchPatientRecordTest < BaseSuite
4
+
5
+ def id
6
+ 'ConnectathonFetchPatientRecordTest'
7
+ end
8
+
9
+ def description
10
+ 'Connectathon Fetch Patient Record Tests focusing on the $everything operation.'
11
+ end
12
+
13
+ def initialize(client1, client2=nil)
14
+ super(client1, client2)
15
+ @category = {id: 'connectathon', title: 'Connectathon'}
16
+ end
17
+
18
+ def setup
19
+ @resources = Crucible::Generator::Resources.new
20
+ @patient = @resources.example_patient_record_201
21
+ @condition_1 = @resources.example_patient_record_condition_201
22
+ @condition_2 = @resources.example_patient_record_condition_205
23
+ @diagnosticreport = @resources.example_patient_record_diagnosticreport_201
24
+ @encounter_1 = @resources.example_patient_record_encounter_201
25
+ @encounter_2 = @resources.example_patient_record_encounter_202
26
+ @observation = @resources.example_patient_record_observation_202
27
+ @organization_1 = @resources.example_patient_record_organization_201
28
+ @organization_2 = @resources.example_patient_record_organization_203
29
+ @practitioner = @resources.example_patient_record_practitioner_201
30
+ @procedure = @resources.example_patient_record_procedure_201
31
+ @patient_ids = []
32
+ @created_patient_record = false
33
+ begin
34
+ create_patient_record
35
+ @created_patient_record = true
36
+ rescue Exception => e
37
+ @created_patient_record = false
38
+ end
39
+ end
40
+
41
+ def teardown
42
+ @client.destroy(FHIR::Condition, @cond1_reply.id) if !@cond1_id.nil?
43
+ @client.destroy(FHIR::Procedure, @prc_reply.id) if !@prc_id.nil?
44
+ @client.destroy(FHIR::Encounter, @enc2_reply.id) if !@enc2_id.nil?
45
+ @client.destroy(FHIR::Encounter, @enc1_reply.id) if !@enc1_id.nil?
46
+ @client.destroy(FHIR::DiagnosticReport, @dr_reply.id) if !@dr_id.nil?
47
+ @client.destroy(FHIR::Observation, @obs_reply.id) if !@obs_id.nil?
48
+ @client.destroy(FHIR::Condition, @cond2_reply.id) if !@cond2_id.nil?
49
+ @client.destroy(FHIR::Patient, @pat_reply.id) if !@patient_id.nil?
50
+ @patient_ids.each do |id|
51
+ @client.destroy(FHIR::Patient, id)
52
+ end
53
+ @client.destroy(FHIR::Practitioner, @prac_reply.id) if !@prac_id.nil?
54
+ @client.destroy(FHIR::Organization, @org2_reply.id) if !@org2_id.nil?
55
+ @client.destroy(FHIR::Organization, @org1_reply.id) if !@org1_id.nil?
56
+ end
57
+
58
+ ['GET','POST'].each do |how|
59
+
60
+ #
61
+ # Test if the general Fetch Patient Record operation is supported
62
+ #
63
+ test "C8T2_1_#{how[0]}", "Fetch all patient records (#{how})" do
64
+ metadata {
65
+ links "#{BASE_SPEC_LINK}/patient-operations.html#everything"
66
+ links 'http://wiki.hl7.org/index.php?title=FHIR_Connectathon_8#2._Expose_the_.27Fetch_Patient_Record.27_operation_.28Server.29'
67
+ requires resource: 'Patient', methods: ['$everything']
68
+ validates resource: 'Patient', methods: ['$everything']
69
+ }
70
+
71
+ reply = @client.fetch_patient_record(nil,nil,nil,how)
72
+
73
+ assert( (reply.code>=400 && reply.code<500), "If there is no nominated patient (e.g. the operation is invoked at the system level) and the context is not associated with a single patient record, then the server should return an error.", reply.body)
74
+ warning { assert_resource_type(reply,FHIR::OperationOutcome) }
75
+ end
76
+
77
+ #
78
+ # Test if the general Fetch Patient Record operation and start/end parameters are supported
79
+ #
80
+ test "C8T2_2_#{how[0]}", "Fetch all patient records with start/end (#{how})" do
81
+ metadata {
82
+ links "#{BASE_SPEC_LINK}/patient-operations.html#everything"
83
+ links 'http://wiki.hl7.org/index.php?title=FHIR_Connectathon_8#2._Expose_the_.27Fetch_Patient_Record.27_operation_.28Server.29'
84
+ requires resource: 'Patient', methods: ['$everything']
85
+ validates resource: 'Patient', methods: ['$everything']
86
+ }
87
+
88
+ start = (DateTime.now - (6*30)).strftime("%Y-%m-%d")
89
+ stop = DateTime.now.strftime("%Y-%m-%d")
90
+ reply = @client.fetch_patient_record(nil, start, stop, how)
91
+
92
+ assert( (reply.code>=400 && reply.code<500), "If there is no nominated patient (e.g. the operation is invoked at the system level) and the context is not associated with a single patient record, then the server should return an error.", reply.body)
93
+ warning { assert_resource_type(reply,FHIR::OperationOutcome) }
94
+ end
95
+
96
+ #
97
+ # Test if the specific Fetch Patient Record operation is supported
98
+ #
99
+ test "C8T2_3_#{how[0]}", "Fetch specific patient record (#{how})" do
100
+ metadata {
101
+ links "#{BASE_SPEC_LINK}/patient-operations.html#everything"
102
+ links 'http://wiki.hl7.org/index.php?title=FHIR_Connectathon_8#2._Expose_the_.27Fetch_Patient_Record.27_operation_.28Server.29'
103
+ requires resource: 'Patient', methods: ['create', '$everything']
104
+ validates resource: 'Patient', methods: ['create', '$everything']
105
+ }
106
+
107
+ skip unless @created_patient_record
108
+ record = @client.fetch_patient_record(@patient_id, nil, nil, how)
109
+
110
+ assert_response_ok(record)
111
+ assert_bundle_response(record)
112
+
113
+ patient = @patient
114
+ patient.xmlId = @patient_id
115
+
116
+ returned_patient = nil
117
+ record.resource.entry.each do |entry|
118
+ returned_patient = entry.resource if entry.resource.class == FHIR::Patient
119
+ end
120
+
121
+ assert patient.equals?(returned_patient), "Returned patient doesn't match original patient."
122
+ end
123
+
124
+ #
125
+ # Test if the specific Fetch Patient Record operation and start/end parameters are supported
126
+ #
127
+ test "C8T2_4_#{how[0]}", "Fetch specific patient record with start/end (#{how})" do
128
+ metadata {
129
+ links "#{BASE_SPEC_LINK}/patient-operations.html#everything"
130
+ links 'http://wiki.hl7.org/index.php?title=FHIR_Connectathon_8#2._Expose_the_.27Fetch_Patient_Record.27_operation_.28Server.29'
131
+ requires resource: 'Patient', methods: ['create', '$everything']
132
+ validates resource: 'Patient', methods: ['create', '$everything']
133
+ }
134
+
135
+ skip unless @created_patient_record
136
+
137
+ start = (DateTime.now - (6*30)).strftime("%Y-%m-%d")
138
+ stop = DateTime.now.strftime("%Y-%m-%d")
139
+ record = @client.fetch_patient_record(@patient_id, start, stop, how)
140
+
141
+ assert_response_ok(record)
142
+ assert_bundle_response(record)
143
+
144
+ patient = @patient
145
+ patient.xmlId = @patient_id
146
+
147
+ returned_patient = nil
148
+ record.resource.entry.each do |entry|
149
+ returned_patient = entry.resource if entry.resource.class == FHIR::Patient
150
+ end
151
+
152
+ assert patient.equals?(returned_patient), "Returned patient doesn't match original patient."
153
+
154
+ # TODO: Determine how start/end scope specific patient records (e.g., birthdate?)
155
+ end
156
+
157
+ #
158
+ # Test if we can update parts of a specific Fetch Patient Record operation result
159
+ #
160
+ test "C8T2_5_#{how[0]}", "Fetch specific patient record - After Update (#{how})" do
161
+ metadata {
162
+ links "#{BASE_SPEC_LINK}/patient-operations.html#everything"
163
+ links 'http://wiki.hl7.org/index.php?title=FHIR_Connectathon_8#2._Expose_the_.27Fetch_Patient_Record.27_operation_.28Server.29'
164
+ requires resource: 'Patient', methods: ['create', 'update', '$everything']
165
+ validates resource: 'Patient', methods: ['create', 'update', '$everything']
166
+ }
167
+
168
+ skip unless @created_patient_record
169
+ record = @client.fetch_patient_record(@patient_id,nil,nil,how)
170
+
171
+ assert_response_ok(record)
172
+ assert_bundle_response(record)
173
+
174
+ @patient.telecom = [ FHIR::ContactPoint.new ]
175
+ @patient.telecom[0].system = 'phone'
176
+ @patient.telecom[0].value='1-234-567-8901'
177
+ @patient.telecom[0].use = 'mobile'
178
+ @patient.name[0].given = ['Not', 'Given']
179
+ @patient['telecom'] = @patient.telecom # some weirdness with attributes
180
+
181
+ reply = @client.update @patient, @patient_id
182
+ assert_response_ok(reply)
183
+
184
+ record = @client.fetch_patient_record(@patient_id)
185
+ assert_response_ok(record)
186
+ assert_bundle_response(record)
187
+
188
+ returned_patient = nil
189
+ record.resource.entry.each do |entry|
190
+ returned_patient = entry.resource if entry.resource.class == FHIR::Patient
191
+ end
192
+ assert !returned_patient.nil?, 'The response bundle did not include the Patient.', record.body
193
+ assert returned_patient.telecom[0].try(:value) == '1-234-567-8901'
194
+ assert returned_patient.name[0].try(:given) == ['Not', 'Given']
195
+ end
196
+
197
+ #
198
+ # Test if we can write and read an entire patient record - almost
199
+ #
200
+ test "C8T2_6_#{how[0]}", "Fetch an entire patient record - accuracy, ignoring meta & text (#{how})" do
201
+ metadata {
202
+ links "#{BASE_SPEC_LINK}/patient-operations.html#everything"
203
+ links "#{BASE_SPEC_LINK}/argonauts.html"
204
+ requires resource: 'Organization', methods: ['create']
205
+ requires resource: 'Practitioner', methods: ['create']
206
+ requires resource: 'Patient', methods: ['create','$everything']
207
+ requires resource: 'Condition', methods: ['create']
208
+ requires resource: 'Observation', methods: ['create']
209
+ requires resource: 'DiagnosticReport', methods: ['create']
210
+ requires resource: 'Encounter', methods: ['create']
211
+ requires resource: 'Procedure', methods: ['create']
212
+ validates resource: 'Patient', methods: ['create', '$everything']
213
+ validates resource: 'Organization', methods: ['create']
214
+ validates resource: 'Practitioner', methods: ['create']
215
+ validates resource: 'Condition', methods: ['create']
216
+ validates resource: 'Observation', methods: ['create']
217
+ validates resource: 'DiagnosticReport', methods: ['create']
218
+ validates resource: 'Encounter', methods: ['create']
219
+ validates resource: 'Procedure', methods: ['create']
220
+ }
221
+
222
+ skip unless @created_patient_record
223
+ record = @client.fetch_patient_record(@pat_reply.id)
224
+ assert_response_ok(record)
225
+ assert_bundle_response(record)
226
+
227
+ mismatches = []
228
+ record.resource.entry.each do |bundle_entry|
229
+ case bundle_entry.resource.class
230
+ when FHIR::Organization
231
+ case bundle_entry.resource.xmlId
232
+ when @org1_id
233
+ mismatches << bundle_entry.resource.mismatch(@organization_1, ['_id', 'meta', 'text']) unless bundle_entry.resource.equals?(@organization_1)
234
+ when @org2_id
235
+ mismatches << bundle_entry.resource.mismatch(@organization_2, ['_id', 'meta', 'text']) unless bundle_entry.resource.equals?(@organization_2)
236
+ end
237
+ when FHIR::Practitioner
238
+ mismatches << bundle_entry.resource.mismatch(@practitioner, ['_id', 'meta', 'text']) unless bundle_entry.resource.equals?(@practitioner)
239
+ when FHIR::Patient
240
+ mismatches << bundle_entry.resource.mismatch(@patient, ['_id', 'meta', 'text']) unless bundle_entry.resource.equals?(@patient)
241
+ when FHIR::Condition
242
+ case bundle_entry.resource.xmlId
243
+ when @cond1_id
244
+ mismatches << bundle_entry.resource.mismatch(@condition_1, ['_id', 'meta', 'text']) unless bundle_entry.resource.equals?(@condition_1)
245
+ when @cond2_id
246
+ mismatches << bundle_entry.resource.mismatch(@condition_2, ['_id', 'meta', 'text']) unless bundle_entry.resource.equals?(@condition_2)
247
+ end
248
+ when FHIR::Observation
249
+ mismatches << bundle_entry.resource.mismatch(@observation, ['_id', 'meta', 'text']) unless bundle_entry.resource.equals?(@observation)
250
+ when FHIR::DiagnosticReport
251
+ mismatches << bundle_entry.resource.mismatch(@diagnosticreport, ['_id', 'meta', 'text', 'issued']) unless bundle_entry.resource.equals?(@diagnosticreport)
252
+ # account for instant format on DiagnosticReport.issued
253
+ t0 = Time.iso8601(@diagnosticreport.issued)
254
+ t1 = Time.iso8601(bundle_entry.resource.issued)
255
+ mismatches << 'FHIR::DiagnosticReport::issued' unless t0==t1
256
+ when FHIR::Encounter
257
+ case bundle_entry.resource.xmlId
258
+ when @enc1_id
259
+ mismatches << bundle_entry.resource.mismatch(@encounter_1, ['_id', 'meta', 'text']) unless bundle_entry.resource.equals?(@encounter_1)
260
+ when @enc2_id
261
+ mismatches << bundle_entry.resource.mismatch(@encounter_2, ['_id', 'meta', 'text']) unless bundle_entry.resource.equals?(@encounter_2)
262
+ end
263
+ when FHIR::Procedure
264
+ mismatches << bundle_entry.resource.mismatch(@procedure, ['_id', 'meta', 'text']) unless bundle_entry.resource.equals?(@procedure)
265
+ end
266
+ end
267
+
268
+ assert mismatches.flatten.empty?, "Data returned from the server did not match source data: #{mismatches.flatten}"
269
+ end
270
+
271
+ #
272
+ # Test if we can write and read an entire patient record - count
273
+ #
274
+ test "C8T2_7_#{how[0]}", "Fetch an entire patient record - completeness (#{how})" do
275
+ metadata {
276
+ links "#{BASE_SPEC_LINK}/patient-operations.html#everything"
277
+ links "#{BASE_SPEC_LINK}/argonauts.html"
278
+ requires resource: 'Organization', methods: ['create']
279
+ requires resource: 'Practitioner', methods: ['create']
280
+ requires resource: 'Patient', methods: ['create','$everything']
281
+ requires resource: 'Condition', methods: ['create']
282
+ requires resource: 'Observation', methods: ['create']
283
+ requires resource: 'DiagnosticReport', methods: ['create']
284
+ requires resource: 'Encounter', methods: ['create']
285
+ requires resource: 'Procedure', methods: ['create']
286
+ validates resource: 'Patient', methods: ['create', '$everything']
287
+ validates resource: 'Organization', methods: ['create']
288
+ validates resource: 'Practitioner', methods: ['create']
289
+ validates resource: 'Condition', methods: ['create']
290
+ validates resource: 'Observation', methods: ['create']
291
+ validates resource: 'DiagnosticReport', methods: ['create']
292
+ validates resource: 'Encounter', methods: ['create']
293
+ validates resource: 'Procedure', methods: ['create']
294
+ }
295
+
296
+ skip unless @created_patient_record
297
+ record = @client.fetch_patient_record(@pat_reply.id)
298
+ assert_response_ok(record)
299
+ assert_bundle_response(record)
300
+
301
+ record.resource.entry.each do |bundle_entry|
302
+ if @ids_count.keys.include?(bundle_entry.resource.class.to_s)
303
+ @ids_count[bundle_entry.resource.class.to_s].delete bundle_entry.resource.xmlId
304
+ else
305
+ warning { assert @ids_count.keys.include?(bundle_entry.resource.class.to_s),
306
+ "Found additional resource(s) in $everything Bundle: #{bundle_entry.resource.class}#{ "-#{bundle_entry.resource.code.text}" if bundle_entry.resource.class == FHIR::List}" }
307
+ end
308
+ end
309
+
310
+ @ids_count.each {|klass,ids| @ids_count.delete(klass) if ids.blank?}
311
+ assert @ids_count.flatten.empty?, "Returned Bundle is missing resources: #{@ids_count}"
312
+ end
313
+
314
+ end # ['GET','POST']
315
+
316
+ def create_patient_record
317
+ @ids_count = {
318
+ 'FHIR::Organization' => [],
319
+ 'FHIR::Practitioner' => [],
320
+ 'FHIR::Patient' => [],
321
+ 'FHIR::Condition' => [],
322
+ 'FHIR::Observation' => [],
323
+ 'FHIR::DiagnosticReport' => [],
324
+ 'FHIR::Encounter' => [],
325
+ 'FHIR::Procedure' => []
326
+ }
327
+
328
+ @organization_1.xmlId = nil
329
+ @org1_reply = @client.create @organization_1
330
+ @org1_id = @org1_reply.id
331
+ @organization_1.xmlId = @org1_id
332
+ @ids_count[FHIR::Organization.to_s] << @org1_id
333
+ assert_response_ok(@org1_reply)
334
+
335
+ @organization_2.xmlId = nil
336
+ @org2_reply = @client.create @organization_2
337
+ @org2_id = @org2_reply.id
338
+ @organization_2.xmlId = @org2_id
339
+ @ids_count[FHIR::Organization.to_s] << @org2_id
340
+ assert_response_ok(@org2_reply)
341
+
342
+ @practitioner.xmlId = nil
343
+ @practitioner.practitionerRole[0].managingOrganization.reference = "Organization/#{@org1_id}"
344
+ @prac_reply = @client.create @practitioner
345
+ @prac_id = @prac_reply.id
346
+ @practitioner.xmlId = @prac_id
347
+ @ids_count[FHIR::Practitioner.to_s] << @prac_id
348
+ assert_response_ok(@prac_reply)
349
+
350
+ @patient.xmlId = nil
351
+ @patient.careProvider[0].reference= "Practitioner/#{@prac_id}"
352
+ @patient.managingOrganization.reference = "Organization/#{@org1_id}"
353
+ @pat_reply = @client.create @patient
354
+ @patient_id = @pat_reply.id
355
+ @patient.xmlId = @patient_id
356
+ @ids_count[FHIR::Patient.to_s] << @patient_id
357
+ assert_response_ok(@pat_reply)
358
+
359
+ @condition_2.xmlId = nil
360
+ @condition_2.patient.reference = "Patient/#{@patient_id}"
361
+ @condition_2.asserter.reference = "Practitioner/#{@prac_id}"
362
+ @cond2_reply = @client.create @condition_2
363
+ @cond2_id = @cond2_reply.id
364
+ @condition_2.xmlId = @cond2_id
365
+ @ids_count[FHIR::Condition.to_s] << @cond2_id
366
+ assert_response_ok(@cond2_reply)
367
+
368
+ @observation.xmlId = nil
369
+ @observation.subject.reference = "Patient/#{@patient_id}"
370
+ @observation.performer[0].reference = "Practitioner/#{@prac_id}"
371
+ @obs_reply = @client.create @observation
372
+ @obs_id = @obs_reply.id
373
+ @observation.xmlId = @obs_id
374
+ @ids_count[FHIR::Observation.to_s] << @obs_id
375
+ assert_response_ok(@obs_reply)
376
+
377
+ @diagnosticreport.xmlId = nil
378
+ @diagnosticreport.subject.reference = "Patient/#{@patient_id}"
379
+ @diagnosticreport.performer.reference = "Organization/#{@org2_id}"
380
+ @dr_reply = @client.create @diagnosticreport
381
+ @dr_id = @dr_reply.id
382
+ @diagnosticreport.xmlId = @dr_id
383
+ @ids_count[FHIR::DiagnosticReport.to_s] << @dr_id
384
+ assert_response_ok(@dr_reply)
385
+
386
+ @encounter_1.xmlId = nil
387
+ @encounter_1.patient.reference = "Patient/#{@patient_id}"
388
+ @encounter_1.participant[0].individual.reference = "Practitioner/#{@prac_id}"
389
+ @encounter_1.serviceProvider.reference = "Organization/#{@org1_id}"
390
+ @enc1_reply = @client.create @encounter_1
391
+ @enc1_id = @enc1_reply.id
392
+ @encounter_1.xmlId = @enc1_id
393
+ @ids_count[FHIR::Encounter.to_s] << @enc1_id
394
+ assert_response_ok(@enc1_reply)
395
+
396
+ @encounter_2.xmlId = nil
397
+ @encounter_2.patient.reference = "Patient/#{@patient_id}"
398
+ @encounter_2.participant[0].individual.reference = "Practitioner/#{@prac_id}"
399
+ @encounter_2.serviceProvider.reference = "Organization/#{@org1_id}"
400
+ @enc2_reply = @client.create @encounter_2
401
+ @enc2_id = @enc2_reply.id
402
+ @encounter_2.xmlId = @enc2_id
403
+ @ids_count[FHIR::Encounter.to_s] << @enc2_id
404
+ assert_response_ok(@enc2_reply)
405
+
406
+ @procedure.xmlId = nil
407
+ @procedure.subject.reference = "Patient/#{@patient_id}"
408
+ # @procedure.report[0].reference = "DiagnosticReport/#{@dr_id}"
409
+ @procedure.performer[0].actor.reference = "Practitioner/#{@prac_id}"
410
+ @procedure.encounter.reference = "Encounter/#{@enc2_id}"
411
+ @prc_reply = @client.create @procedure
412
+ @prc_id = @prc_reply.id
413
+ @procedure.xmlId = @prc_id
414
+ @ids_count[FHIR::Procedure.to_s] << @prc_id
415
+ assert_response_ok(@prc_reply)
416
+
417
+ @encounter_2.indication = [ FHIR::Reference.new ]
418
+ @encounter_2.indication[0].reference = "Procedure/#{@prc_id}"
419
+ @encounter_2['indication'] = @encounter_2.indication
420
+ @enc2_reply = @client.update @encounter_2, @enc2_id
421
+ assert_response_ok(@enc2_reply)
422
+
423
+ @condition_1.xmlId = nil
424
+ @condition_1.patient.reference = "Patient/#{@patient_id}"
425
+ @condition_1.encounter.reference = "Encounter/#{@enc1_id}"
426
+ @condition_1.asserter.reference = "Practitioner/#{@prac_id}"
427
+ @condition_1.evidence[0].detail[0].reference = "Observation/#{@obs_id}"
428
+ ref = FHIR::Reference.new
429
+ ref.reference = "Procedure/#{@prc_id}"
430
+ @condition_1.evidence[0].detail << ref
431
+ ref = FHIR::Reference.new
432
+ ref.reference = "Condition/#{@cond2_id}"
433
+ @condition_1.evidence[0].detail << ref
434
+ @cond1_reply = @client.create @condition_1
435
+ @cond1_id = @cond1_reply.id
436
+ @condition_1.xmlId = @cond1_id
437
+ @ids_count[FHIR::Condition.to_s] << @cond1_id
438
+ assert_response_ok(@cond1_reply)
439
+ end
440
+
441
+ end
442
+ end
443
+ end