canvas 0.5.0__tar.gz → 0.7.0__tar.gz

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.

Potentially problematic release.


This version of canvas might be problematic. Click here for more details.

Files changed (266) hide show
  1. {canvas-0.5.0 → canvas-0.7.0}/PKG-INFO +4 -3
  2. canvas-0.7.0/canvas_generated/messages/events_pb2.py +31 -0
  3. {canvas-0.5.0 → canvas-0.7.0}/canvas_generated/messages/events_pb2.pyi +4 -0
  4. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/base.py +12 -9
  5. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/commands/base.py +2 -1
  6. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/effects/banner_alert/add_banner_alert.py +13 -2
  7. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/effects/banner_alert/remove_banner_alert.py +2 -2
  8. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/effects/banner_alert/tests.py +20 -4
  9. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/effects/base.py +2 -0
  10. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/effects/protocol_card/protocol_card.py +9 -2
  11. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/effects/protocol_card/tests.py +3 -3
  12. canvas-0.7.0/canvas_sdk/effects/task/task.py +99 -0
  13. canvas-0.7.0/canvas_sdk/protocols/base.py +11 -0
  14. canvas-0.7.0/canvas_sdk/protocols/clinical_quality_measure.py +99 -0
  15. canvas-0.7.0/canvas_sdk/protocols/timeframe.py +39 -0
  16. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/v1/data/__init__.py +3 -0
  17. canvas-0.7.0/canvas_sdk/v1/data/base.py +176 -0
  18. canvas-0.7.0/canvas_sdk/v1/data/billing.py +59 -0
  19. canvas-0.7.0/canvas_sdk/v1/data/common.py +104 -0
  20. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/v1/data/condition.py +18 -2
  21. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/v1/data/medication.py +11 -3
  22. canvas-0.7.0/canvas_sdk/v1/data/note.py +161 -0
  23. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/v1/data/patient.py +19 -1
  24. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/v1/data/protocol_override.py +1 -1
  25. canvas-0.7.0/canvas_sdk/v1/data/staff.py +65 -0
  26. canvas-0.7.0/canvas_sdk/v1/data/task.py +112 -0
  27. canvas-0.7.0/canvas_sdk/value_set/custom.py +984 -0
  28. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/value_set/value_set.py +4 -1
  29. {canvas-0.5.0 → canvas-0.7.0}/plugin_runner/sandbox.py +3 -0
  30. {canvas-0.5.0 → canvas-0.7.0}/pyproject.toml +5 -3
  31. canvas-0.5.0/canvas_generated/messages/events_pb2.py +0 -31
  32. canvas-0.5.0/canvas_sdk/data/__init__.py +0 -1
  33. canvas-0.5.0/canvas_sdk/data/base.py +0 -26
  34. canvas-0.5.0/canvas_sdk/data/client.py +0 -82
  35. canvas-0.5.0/canvas_sdk/data/patient.py +0 -8
  36. canvas-0.5.0/canvas_sdk/data/staff.py +0 -8
  37. canvas-0.5.0/canvas_sdk/data/task.py +0 -67
  38. canvas-0.5.0/canvas_sdk/protocols/base.py +0 -21
  39. canvas-0.5.0/canvas_sdk/protocols/clinical_quality_measure.py +0 -43
  40. canvas-0.5.0/canvas_sdk/v1/data/base.py +0 -93
  41. canvas-0.5.0/canvas_sdk/v1/data/common.py +0 -46
  42. {canvas-0.5.0 → canvas-0.7.0}/README.md +0 -0
  43. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/__init__.py +0 -0
  44. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/__init__.py +0 -0
  45. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/auth/__init__.py +0 -0
  46. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/auth/tests.py +0 -0
  47. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/auth/utils.py +0 -0
  48. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/__init__.py +0 -0
  49. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/emit.py +0 -0
  50. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/ALLERGY_INTOLERANCE_CREATED.ndjson +0 -0
  51. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/ALLERGY_INTOLERANCE_UPDATED.ndjson +0 -0
  52. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_CANCELED.ndjson +0 -0
  53. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_CHECKED_IN.ndjson +0 -0
  54. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_CREATED.ndjson +0 -0
  55. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_NO_SHOWED.ndjson +0 -0
  56. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_RESCHEDULED.ndjson +0 -0
  57. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_RESTORED.ndjson +0 -0
  58. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_UPDATED.ndjson +0 -0
  59. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__CONDITION_SELECTED.ndjson +0 -0
  60. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__POST_COMMIT.ndjson +0 -0
  61. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__POST_ORIGINATE.ndjson +0 -0
  62. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__POST_UPDATE.ndjson +0 -0
  63. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__PRE_COMMIT.ndjson +0 -0
  64. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__PRE_ORIGINATE.ndjson +0 -0
  65. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__PRE_UPDATE.ndjson +0 -0
  66. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/BILLING_LINE_ITEM_CREATED.ndjson +0 -0
  67. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/BILLING_LINE_ITEM_UPDATED.ndjson +0 -0
  68. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/CONDITION_ASSESSED.ndjson +0 -0
  69. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/CONDITION_CREATED.ndjson +0 -0
  70. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/CONDITION_UPDATED.ndjson +0 -0
  71. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/CRON.ndjson +0 -0
  72. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/ENCOUNTER_CREATED.ndjson +0 -0
  73. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/ENCOUNTER_UPDATED.ndjson +0 -0
  74. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/IMMUNIZATION_CREATED.ndjson +0 -0
  75. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/IMMUNIZATION_STATEMENT_CREATED.ndjson +0 -0
  76. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/IMMUNIZATION_STATEMENT_UPDATED.ndjson +0 -0
  77. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/IMMUNIZATION_UPDATED.ndjson +0 -0
  78. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/INTERVIEW_CREATED.ndjson +0 -0
  79. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/INTERVIEW_UPDATED.ndjson +0 -0
  80. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/LAB_ORDER_CREATED.ndjson +0 -0
  81. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/LAB_ORDER_UPDATED.ndjson +0 -0
  82. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/MEDICATION_LIST_ITEM_CREATED.ndjson +0 -0
  83. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/MEDICATION_LIST_ITEM_UPDATED.ndjson +0 -0
  84. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__POST_COMMIT.ndjson +0 -0
  85. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__POST_ORIGINATE.ndjson +0 -0
  86. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__POST_UPDATE.ndjson +0 -0
  87. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__PRE_COMMIT.ndjson +0 -0
  88. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__PRE_ORIGINATE.ndjson +0 -0
  89. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__PRE_UPDATE.ndjson +0 -0
  90. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT__MEDICATION__POST_SEARCH.ndjson +0 -0
  91. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/PATIENT_CREATED.ndjson +0 -0
  92. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/PATIENT_UPDATED.ndjson +0 -0
  93. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/PLAN_COMMAND__POST_ORIGINATE.ndjson +0 -0
  94. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/PLAN_COMMAND__PRE_ORIGINATE.ndjson +0 -0
  95. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__POST_COMMIT.ndjson +0 -0
  96. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__POST_ORIGINATE.ndjson +0 -0
  97. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__POST_UPDATE.ndjson +0 -0
  98. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__PRE_COMMIT.ndjson +0 -0
  99. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__PRE_ORIGINATE.ndjson +0 -0
  100. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__PRE_UPDATE.ndjson +0 -0
  101. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE__QUESTIONNAIRE__POST_SEARCH.ndjson +0 -0
  102. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/TASK_COMMENT_CREATED.ndjson +0 -0
  103. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/TASK_CREATED.ndjson +0 -0
  104. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/TASK_UPDATED.ndjson +0 -0
  105. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/VITAL_SIGN_CREATED.ndjson +0 -0
  106. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/emit/event_fixtures/VITAL_SIGN_UPDATED.ndjson +0 -0
  107. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/logs/__init__.py +0 -0
  108. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/logs/logs.py +0 -0
  109. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/plugin/__init__.py +0 -0
  110. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/plugin/plugin.py +0 -0
  111. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/plugin/tests.py +0 -0
  112. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/run_plugins/__init__.py +0 -0
  113. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/apps/run_plugins/run_plugins.py +0 -0
  114. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/conftest.py +0 -0
  115. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/main.py +0 -0
  116. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/templates/plugins/default/cookiecutter.json +0 -0
  117. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/CANVAS_MANIFEST.json +0 -0
  118. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/README.md +0 -0
  119. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/protocols/__init__.py +0 -0
  120. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/protocols/my_protocol.py +0 -0
  121. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/tests.py +0 -0
  122. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/utils/__init__.py +0 -0
  123. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/utils/context/__init__.py +0 -0
  124. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/utils/context/context.py +0 -0
  125. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/utils/context/tests.py +0 -0
  126. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/utils/print/__init__.py +0 -0
  127. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/utils/print/print.py +0 -0
  128. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/utils/print/tests.py +0 -0
  129. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/utils/urls/__init__.py +0 -0
  130. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/utils/urls/tests.py +0 -0
  131. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/utils/urls/urls.py +0 -0
  132. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/utils/validators/__init__.py +0 -0
  133. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/utils/validators/manifest_schema.py +0 -0
  134. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/utils/validators/tests.py +0 -0
  135. {canvas-0.5.0 → canvas-0.7.0}/canvas_cli/utils/validators/validators.py +0 -0
  136. {canvas-0.5.0 → canvas-0.7.0}/canvas_generated/messages/effects_pb2.py +0 -0
  137. {canvas-0.5.0 → canvas-0.7.0}/canvas_generated/messages/effects_pb2.pyi +0 -0
  138. {canvas-0.5.0 → canvas-0.7.0}/canvas_generated/messages/effects_pb2_grpc.py +0 -0
  139. {canvas-0.5.0 → canvas-0.7.0}/canvas_generated/messages/events_pb2_grpc.py +0 -0
  140. {canvas-0.5.0 → canvas-0.7.0}/canvas_generated/messages/plugins_pb2.py +0 -0
  141. {canvas-0.5.0 → canvas-0.7.0}/canvas_generated/messages/plugins_pb2.pyi +0 -0
  142. {canvas-0.5.0 → canvas-0.7.0}/canvas_generated/messages/plugins_pb2_grpc.py +0 -0
  143. {canvas-0.5.0 → canvas-0.7.0}/canvas_generated/services/plugin_runner_pb2.py +0 -0
  144. {canvas-0.5.0 → canvas-0.7.0}/canvas_generated/services/plugin_runner_pb2.pyi +0 -0
  145. {canvas-0.5.0 → canvas-0.7.0}/canvas_generated/services/plugin_runner_pb2_grpc.py +0 -0
  146. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/__init__.py +0 -0
  147. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/commands/__init__.py +0 -0
  148. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/commands/commands/allergy.py +0 -0
  149. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/commands/commands/assess.py +0 -0
  150. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/commands/commands/close_goal.py +0 -0
  151. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/commands/commands/diagnose.py +0 -0
  152. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/commands/commands/family_history.py +0 -0
  153. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/commands/commands/goal.py +0 -0
  154. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/commands/commands/history_present_illness.py +0 -0
  155. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/commands/commands/instruct.py +0 -0
  156. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/commands/commands/lab_order.py +0 -0
  157. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/commands/commands/medical_history.py +0 -0
  158. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/commands/commands/medication_statement.py +0 -0
  159. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/commands/commands/past_surgical_history.py +0 -0
  160. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/commands/commands/perform.py +0 -0
  161. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/commands/commands/plan.py +0 -0
  162. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/commands/commands/prescribe.py +0 -0
  163. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/commands/commands/questionnaire.py +0 -0
  164. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/commands/commands/reason_for_visit.py +0 -0
  165. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/commands/commands/refill.py +0 -0
  166. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/commands/commands/remove_allergy.py +0 -0
  167. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/commands/commands/stop_medication.py +0 -0
  168. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/commands/commands/task.py +0 -0
  169. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/commands/commands/update_diagnosis.py +0 -0
  170. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/commands/commands/update_goal.py +0 -0
  171. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/commands/commands/vitals.py +0 -0
  172. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/commands/constants.py +0 -0
  173. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/commands/tests/protocol/__init__.py +0 -0
  174. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/commands/tests/protocol/tests.py +0 -0
  175. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/commands/tests/schema/__init__.py +0 -0
  176. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/commands/tests/schema/tests.py +0 -0
  177. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/commands/tests/test_utils.py +0 -0
  178. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/commands/tests/unit/__init__.py +0 -0
  179. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/commands/tests/unit/tests.py +0 -0
  180. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/effects/__init__.py +0 -0
  181. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/effects/banner_alert/__init__.py +0 -0
  182. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/effects/patient_chart_summary_configuration.py +0 -0
  183. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/effects/protocol_card/__init__.py +0 -0
  184. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/events/__init__.py +0 -0
  185. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/handlers/__init__.py +0 -0
  186. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/handlers/base.py +0 -0
  187. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/handlers/cron_task.py +0 -0
  188. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/protocols/__init__.py +0 -0
  189. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/tests/__init__.py +0 -0
  190. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/utils/__init__.py +0 -0
  191. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/utils/db.py +0 -0
  192. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/utils/http.py +0 -0
  193. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/utils/stats.py +0 -0
  194. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/utils/tests.py +0 -0
  195. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/v1/__init__.py +0 -0
  196. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/v1/data/allergy_intolerance.py +0 -0
  197. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/v1/data/command.py +0 -0
  198. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/v1/data/detected_issue.py +0 -0
  199. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/v1/data/device.py +0 -0
  200. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/v1/data/imaging.py +0 -0
  201. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/v1/data/lab.py +0 -0
  202. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/v1/data/observation.py +0 -0
  203. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/v1/data/questionnaire.py +0 -0
  204. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/v1/data/user.py +0 -0
  205. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/value_set/__init__.py +0 -0
  206. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/value_set/tests/test_value_sets.py +0 -0
  207. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/value_set/v2022/__init__.py +0 -0
  208. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/value_set/v2022/adverse_event.py +0 -0
  209. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/value_set/v2022/allergy.py +0 -0
  210. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/value_set/v2022/assessment.py +0 -0
  211. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/value_set/v2022/communication.py +0 -0
  212. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/value_set/v2022/condition.py +0 -0
  213. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/value_set/v2022/device.py +0 -0
  214. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/value_set/v2022/diagnostic_study.py +0 -0
  215. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/value_set/v2022/encounter.py +0 -0
  216. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/value_set/v2022/immunization.py +0 -0
  217. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/value_set/v2022/individual_characteristic.py +0 -0
  218. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/value_set/v2022/intervention.py +0 -0
  219. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/value_set/v2022/laboratory_test.py +0 -0
  220. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/value_set/v2022/medication.py +0 -0
  221. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/value_set/v2022/physical_exam.py +0 -0
  222. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/value_set/v2022/procedure.py +0 -0
  223. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/value_set/v2022/symptom.py +0 -0
  224. {canvas-0.5.0 → canvas-0.7.0}/canvas_sdk/views/__init__.py +0 -0
  225. {canvas-0.5.0 → canvas-0.7.0}/logger/__init__.py +0 -0
  226. {canvas-0.5.0 → canvas-0.7.0}/logger/logger.py +0 -0
  227. {canvas-0.5.0 → canvas-0.7.0}/plugin_runner/__init__.py +0 -0
  228. {canvas-0.5.0 → canvas-0.7.0}/plugin_runner/authentication.py +0 -0
  229. {canvas-0.5.0 → canvas-0.7.0}/plugin_runner/plugin_runner.py +0 -0
  230. {canvas-0.5.0 → canvas-0.7.0}/plugin_runner/plugin_synchronizer.py +0 -0
  231. {canvas-0.5.0 → canvas-0.7.0}/plugin_runner/tests/__init__.py +0 -0
  232. {canvas-0.5.0 → canvas-0.7.0}/plugin_runner/tests/data/plugins/.gitkeep +0 -0
  233. {canvas-0.5.0 → canvas-0.7.0}/plugin_runner/tests/fixtures/plugins/example_plugin/CANVAS_MANIFEST.json +0 -0
  234. {canvas-0.5.0 → canvas-0.7.0}/plugin_runner/tests/fixtures/plugins/example_plugin/README.md +0 -0
  235. {canvas-0.5.0 → canvas-0.7.0}/plugin_runner/tests/fixtures/plugins/example_plugin/__init__.py +0 -0
  236. {canvas-0.5.0 → canvas-0.7.0}/plugin_runner/tests/fixtures/plugins/example_plugin/protocols/__init__.py +0 -0
  237. {canvas-0.5.0 → canvas-0.7.0}/plugin_runner/tests/fixtures/plugins/example_plugin/protocols/my_protocol.py +0 -0
  238. {canvas-0.5.0 → canvas-0.7.0}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v1/CANVAS_MANIFEST.json +0 -0
  239. {canvas-0.5.0 → canvas-0.7.0}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v1/README.md +0 -0
  240. {canvas-0.5.0 → canvas-0.7.0}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v1/other_module/__init__.py +0 -0
  241. {canvas-0.5.0 → canvas-0.7.0}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v1/other_module/base.py +0 -0
  242. {canvas-0.5.0 → canvas-0.7.0}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v1/protocols/__init__.py +0 -0
  243. {canvas-0.5.0 → canvas-0.7.0}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v1/protocols/my_protocol.py +0 -0
  244. {canvas-0.5.0 → canvas-0.7.0}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v2/CANVAS_MANIFEST.json +0 -0
  245. {canvas-0.5.0 → canvas-0.7.0}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v2/README.md +0 -0
  246. {canvas-0.5.0 → canvas-0.7.0}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v2/other_module/__init__.py +0 -0
  247. {canvas-0.5.0 → canvas-0.7.0}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v2/other_module/base.py +0 -0
  248. {canvas-0.5.0 → canvas-0.7.0}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v2/protocols/__init__.py +0 -0
  249. {canvas-0.5.0 → canvas-0.7.0}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v2/protocols/my_protocol.py +0 -0
  250. {canvas-0.5.0 → canvas-0.7.0}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v3/CANVAS_MANIFEST.json +0 -0
  251. {canvas-0.5.0 → canvas-0.7.0}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v3/README.md +0 -0
  252. {canvas-0.5.0 → canvas-0.7.0}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v3/other_module/__init__.py +0 -0
  253. {canvas-0.5.0 → canvas-0.7.0}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v3/other_module/base.py +0 -0
  254. {canvas-0.5.0 → canvas-0.7.0}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v3/protocols/__init__.py +0 -0
  255. {canvas-0.5.0 → canvas-0.7.0}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v3/protocols/my_protocol.py +0 -0
  256. {canvas-0.5.0 → canvas-0.7.0}/plugin_runner/tests/fixtures/plugins/test_module_imports_plugin/CANVAS_MANIFEST.json +0 -0
  257. {canvas-0.5.0 → canvas-0.7.0}/plugin_runner/tests/fixtures/plugins/test_module_imports_plugin/README.md +0 -0
  258. {canvas-0.5.0 → canvas-0.7.0}/plugin_runner/tests/fixtures/plugins/test_module_imports_plugin/other_module/__init__.py +0 -0
  259. {canvas-0.5.0 → canvas-0.7.0}/plugin_runner/tests/fixtures/plugins/test_module_imports_plugin/other_module/base.py +0 -0
  260. {canvas-0.5.0 → canvas-0.7.0}/plugin_runner/tests/fixtures/plugins/test_module_imports_plugin/protocols/__init__.py +0 -0
  261. {canvas-0.5.0 → canvas-0.7.0}/plugin_runner/tests/fixtures/plugins/test_module_imports_plugin/protocols/my_protocol.py +0 -0
  262. {canvas-0.5.0 → canvas-0.7.0}/plugin_runner/tests/test_plugin_runner.py +0 -0
  263. {canvas-0.5.0 → canvas-0.7.0}/plugin_runner/tests/test_sandbox.py +0 -0
  264. {canvas-0.5.0 → canvas-0.7.0}/pubsub/__init__.py +0 -0
  265. {canvas-0.5.0 → canvas-0.7.0}/pubsub/pubsub.py +0 -0
  266. {canvas-0.5.0 → canvas-0.7.0}/settings.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: canvas
3
- Version: 0.5.0
3
+ Version: 0.7.0
4
4
  Summary: SDK to customize event-driven actions in your Canvas instance
5
5
  License: MIT
6
6
  Author: Canvas Team
@@ -14,8 +14,8 @@ Requires-Dist: cookiecutter
14
14
  Requires-Dist: cron-converter (>=1.2.1,<2.0.0)
15
15
  Requires-Dist: django (>=5.1.1,<6.0.0)
16
16
  Requires-Dist: django-stubs[compatible-mypy] (>=5.1.1,<6.0.0)
17
- Requires-Dist: env-tools (>=2.2.0,<3.0.0)
18
- Requires-Dist: gql[all] (>=3.5.0,<4.0.0)
17
+ Requires-Dist: django-timezone-utils (>=0.15.0,<0.16.0)
18
+ Requires-Dist: env-tools (>=2.3.0,<3.0.0)
19
19
  Requires-Dist: grpcio (>=1.60.1,<2.0.0)
20
20
  Requires-Dist: ipython (>=8.21.0,<9.0.0)
21
21
  Requires-Dist: jsonschema (>=4.21.1,<5.0.0)
@@ -25,6 +25,7 @@ Requires-Dist: psycopg[binary] (>=3.2.2,<4.0.0)
25
25
  Requires-Dist: pydantic (>=2.6.1,<3.0.0)
26
26
  Requires-Dist: pyjwt (==2.10.0)
27
27
  Requires-Dist: python-dotenv (>=1.0.1,<2.0.0)
28
+ Requires-Dist: rapidfuzz (>=3.10.1,<4.0.0)
28
29
  Requires-Dist: redis (>=5.0.4,<6.0.0)
29
30
  Requires-Dist: requests
30
31
  Requires-Dist: restrictedpython (>=7.1,<8.0)
@@ -0,0 +1,31 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: canvas_generated/messages/events.proto
4
+ # Protobuf Python Version: 4.25.1
5
+ """Generated protocol buffer code."""
6
+ from google.protobuf import descriptor as _descriptor
7
+ from google.protobuf import descriptor_pool as _descriptor_pool
8
+ from google.protobuf import symbol_database as _symbol_database
9
+ from google.protobuf.internal import builder as _builder
10
+ # @@protoc_insertion_point(imports)
11
+
12
+ _sym_db = _symbol_database.Default()
13
+
14
+
15
+ from canvas_generated.messages import effects_pb2 as canvas__generated_dot_messages_dot_effects__pb2
16
+
17
+
18
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n&canvas_generated/messages/events.proto\x12\x06\x63\x61nvas\x1a\'canvas_generated/messages/effects.proto\"I\n\x05\x45vent\x12\x1f\n\x04type\x18\x01 \x01(\x0e\x32\x11.canvas.EventType\x12\x0e\n\x06target\x18\x02 \x01(\t\x12\x0f\n\x07\x63ontext\x18\x03 \x01(\t\"A\n\rEventResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x1f\n\x07\x65\x66\x66\x65\x63ts\x18\x02 \x03(\x0b\x32\x0e.canvas.Effect*\xe1\xc3\x01\n\tEventType\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x1f\n\x1b\x41LLERGY_INTOLERANCE_CREATED\x10\x01\x12\x1f\n\x1b\x41LLERGY_INTOLERANCE_UPDATED\x10\x02\x12\x18\n\x14\x41PPOINTMENT_CANCELED\x10\x04\x12\x1a\n\x16\x41PPOINTMENT_CHECKED_IN\x10\x05\x12\x17\n\x13\x41PPOINTMENT_CREATED\x10\x06\x12\x19\n\x15\x41PPOINTMENT_NO_SHOWED\x10\x07\x12\x1b\n\x17\x41PPOINTMENT_RESCHEDULED\x10\x08\x12\x18\n\x14\x41PPOINTMENT_RESTORED\x10\t\x12\x17\n\x13\x41PPOINTMENT_UPDATED\x10\n\x12\x1d\n\x19\x42ILLING_LINE_ITEM_CREATED\x10\x0b\x12\x1d\n\x19\x42ILLING_LINE_ITEM_UPDATED\x10\x0c\x12\x16\n\x12\x43ONDITION_ASSESSED\x10\r\x12\x15\n\x11\x43ONDITION_CREATED\x10\x0e\x12\x16\n\x12\x43ONDITION_RESOLVED\x10\x0f\x12\x15\n\x11\x43ONDITION_UPDATED\x10\x10\x12\x13\n\x0f\x43ONSENT_CREATED\x10\x11\x12\x13\n\x0f\x43ONSENT_DELETED\x10\x12\x12\x13\n\x0f\x43ONSENT_UPDATED\x10\x13\x12\x14\n\x10\x43OVERAGE_CREATED\x10\x14\x12\x14\n\x10\x43OVERAGE_UPDATED\x10\x15\x12\x15\n\x11\x45NCOUNTER_CREATED\x10\x16\x12\x15\n\x11\x45NCOUNTER_UPDATED\x10\x17\x12\x1a\n\x16IMAGING_REPORT_CREATED\x10\x1a\x12\x1a\n\x16IMAGING_REPORT_UPDATED\x10\x1b\x12\x18\n\x14IMMUNIZATION_CREATED\x10\x1c\x12\"\n\x1eIMMUNIZATION_STATEMENT_CREATED\x10\x1d\x12\"\n\x1eIMMUNIZATION_STATEMENT_UPDATED\x10\x1e\x12\x18\n\x14IMMUNIZATION_UPDATED\x10\x1f\x12\x17\n\x13INSTRUCTION_CREATED\x10 \x12\x17\n\x13INSTRUCTION_UPDATED\x10!\x12\x15\n\x11INTERVIEW_CREATED\x10\"\x12\x15\n\x11INTERVIEW_UPDATED\x10#\x12\x15\n\x11LAB_ORDER_CREATED\x10$\x12\x15\n\x11LAB_ORDER_UPDATED\x10%\x12\x16\n\x12LAB_REPORT_CREATED\x10&\x12\x16\n\x12LAB_REPORT_UPDATED\x10\'\x12 \n\x1cMEDICATION_LIST_ITEM_CREATED\x10(\x12 \n\x1cMEDICATION_LIST_ITEM_UPDATED\x10)\x12\x13\n\x0fMESSAGE_CREATED\x10*\x12\x13\n\x0fPATIENT_CREATED\x10+\x12\x13\n\x0fPATIENT_UPDATED\x10,\x12\x18\n\x14PRESCRIPTION_CREATED\x10-\x12\x18\n\x14PRESCRIPTION_UPDATED\x10.\x12\x1b\n\x17REFERRAL_REPORT_CREATED\x10/\x12\x1b\n\x17REFERRAL_REPORT_UPDATED\x10\x30\x12\x18\n\x14TASK_COMMENT_CREATED\x10\x33\x12\x10\n\x0cTASK_CREATED\x10\x36\x12\x18\n\x14TASK_LABELS_ADJUSTED\x10\x37\x12\x10\n\x0cTASK_UPDATED\x10\x39\x12\x16\n\x12VITAL_SIGN_CREATED\x10:\x12\x16\n\x12VITAL_SIGN_UPDATED\x10;\x12\x08\n\x04\x43RON\x10<\x12 \n\x1c\x43\x41RE_TEAM_MEMBERSHIP_CREATED\x10=\x12 \n\x1c\x43\x41RE_TEAM_MEMBERSHIP_UPDATED\x10>\x12 \n\x1c\x43\x41RE_TEAM_MEMBERSHIP_DELETED\x10?\x12#\n\x1fNOTE_STATE_CHANGE_EVENT_CREATED\x10@\x12#\n\x1fNOTE_STATE_CHANGE_EVENT_UPDATED\x10\x41\x12\x1b\n\x17PATIENT_ADDRESS_CREATED\x10\x42\x12\x1b\n\x17PATIENT_ADDRESS_UPDATED\x10\x43\x12\x1b\n\x17PATIENT_ADDRESS_DELETED\x10\x44\x12\"\n\x1ePATIENT_CONTACT_PERSON_CREATED\x10\x45\x12\"\n\x1ePATIENT_CONTACT_PERSON_UPDATED\x10\x46\x12\"\n\x1ePATIENT_CONTACT_PERSON_DELETED\x10G\x12!\n\x1dPATIENT_CONTACT_POINT_CREATED\x10H\x12!\n\x1dPATIENT_CONTACT_POINT_UPDATED\x10I\x12!\n\x1dPATIENT_CONTACT_POINT_DELETED\x10J\x12\x1d\n\x19PROTOCOL_OVERRIDE_CREATED\x10K\x12\x1d\n\x19PROTOCOL_OVERRIDE_UPDATED\x10L\x12\x1d\n\x19PROTOCOL_OVERRIDE_DELETED\x10M\x12\x18\n\x14TASK_COMMENT_UPDATED\x10N\x12\x18\n\x14TASK_COMMENT_DELETED\x10O\x12\x12\n\x0e\x44\x45VICE_CREATED\x10P\x12\x12\n\x0e\x44\x45VICE_UPDATED\x10Q\x12\x17\n\x13OBSERVATION_CREATED\x10R\x12\x17\n\x13OBSERVATION_UPDATED\x10S\x12\x1a\n\x16\x44\x45TECTED_ISSUE_CREATED\x10T\x12\x1a\n\x16\x44\x45TECTED_ISSUE_UPDATED\x10U\x12\x0f\n\x0bTASK_CLOSED\x10V\x12\x12\n\x0eTASK_COMPLETED\x10W\x12\x19\n\x15PRE_COMMAND_ORIGINATE\x10\x64\x12\x1a\n\x16POST_COMMAND_ORIGINATE\x10\x65\x12\x16\n\x12PRE_COMMAND_UPDATE\x10\x66\x12\x17\n\x13POST_COMMAND_UPDATE\x10g\x12\x16\n\x12PRE_COMMAND_COMMIT\x10h\x12\x17\n\x13POST_COMMAND_COMMIT\x10i\x12\x16\n\x12PRE_COMMAND_DELETE\x10j\x12\x17\n\x13POST_COMMAND_DELETE\x10k\x12\x1e\n\x1aPRE_COMMAND_ENTER_IN_ERROR\x10l\x12\x1f\n\x1bPOST_COMMAND_ENTER_IN_ERROR\x10m\x12\x1e\n\x1aPRE_COMMAND_EXECUTE_ACTION\x10n\x12\x1f\n\x1bPOST_COMMAND_EXECUTE_ACTION\x10o\x12\'\n\"ASSESS_COMMAND__CONDITION_SELECTED\x10\xc8\x01\x12\x31\n,MEDICATION_STATEMENT__MEDICATION__PRE_SEARCH\x10\xc9\x01\x12\x32\n-MEDICATION_STATEMENT__MEDICATION__POST_SEARCH\x10\xca\x01\x12/\n*MEDICATION_STATEMENT__MEDICATION__SELECTED\x10\xcb\x01\x12#\n\x1e\x41LLERGY_COMMAND__PRE_ORIGINATE\x10\xa0\x1f\x12$\n\x1f\x41LLERGY_COMMAND__POST_ORIGINATE\x10\xa1\x1f\x12 \n\x1b\x41LLERGY_COMMAND__PRE_UPDATE\x10\xa2\x1f\x12!\n\x1c\x41LLERGY_COMMAND__POST_UPDATE\x10\xa3\x1f\x12 \n\x1b\x41LLERGY_COMMAND__PRE_COMMIT\x10\xa4\x1f\x12!\n\x1c\x41LLERGY_COMMAND__POST_COMMIT\x10\xa5\x1f\x12 \n\x1b\x41LLERGY_COMMAND__PRE_DELETE\x10\xa6\x1f\x12!\n\x1c\x41LLERGY_COMMAND__POST_DELETE\x10\xa7\x1f\x12(\n#ALLERGY_COMMAND__PRE_ENTER_IN_ERROR\x10\xa8\x1f\x12)\n$ALLERGY_COMMAND__POST_ENTER_IN_ERROR\x10\xa9\x1f\x12(\n#ALLERGY_COMMAND__PRE_EXECUTE_ACTION\x10\xaa\x1f\x12)\n$ALLERGY_COMMAND__POST_EXECUTE_ACTION\x10\xab\x1f\x12!\n\x1c\x41LLERGY__ALLERGY__PRE_SEARCH\x10\xac\x1f\x12\"\n\x1d\x41LLERGY__ALLERGY__POST_SEARCH\x10\xad\x1f\x12\"\n\x1d\x41SSESS_COMMAND__PRE_ORIGINATE\x10\xd8\x36\x12#\n\x1e\x41SSESS_COMMAND__POST_ORIGINATE\x10\xd9\x36\x12\x1f\n\x1a\x41SSESS_COMMAND__PRE_UPDATE\x10\xda\x36\x12 \n\x1b\x41SSESS_COMMAND__POST_UPDATE\x10\xdb\x36\x12\x1f\n\x1a\x41SSESS_COMMAND__PRE_COMMIT\x10\xdc\x36\x12 \n\x1b\x41SSESS_COMMAND__POST_COMMIT\x10\xdd\x36\x12\x1f\n\x1a\x41SSESS_COMMAND__PRE_DELETE\x10\xde\x36\x12 \n\x1b\x41SSESS_COMMAND__POST_DELETE\x10\xdf\x36\x12\'\n\"ASSESS_COMMAND__PRE_ENTER_IN_ERROR\x10\xe0\x36\x12(\n#ASSESS_COMMAND__POST_ENTER_IN_ERROR\x10\xe1\x36\x12\'\n\"ASSESS_COMMAND__PRE_EXECUTE_ACTION\x10\xe2\x36\x12(\n#ASSESS_COMMAND__POST_EXECUTE_ACTION\x10\xe3\x36\x12#\n\x1e\x41SSESS__CONDITION__POST_SEARCH\x10\xe4\x36\x12\"\n\x1d\x41SSESS__CONDITION__PRE_SEARCH\x10\xe5\x36\x12&\n CLIPBOARD_COMMAND__PRE_ORIGINATE\x10\x88\x9e\x03\x12\'\n!CLIPBOARD_COMMAND__POST_ORIGINATE\x10\x89\x9e\x03\x12#\n\x1d\x43LIPBOARD_COMMAND__PRE_UPDATE\x10\x8a\x9e\x03\x12$\n\x1e\x43LIPBOARD_COMMAND__POST_UPDATE\x10\x8b\x9e\x03\x12#\n\x1d\x43LIPBOARD_COMMAND__PRE_COMMIT\x10\x8c\x9e\x03\x12$\n\x1e\x43LIPBOARD_COMMAND__POST_COMMIT\x10\x8d\x9e\x03\x12#\n\x1d\x43LIPBOARD_COMMAND__PRE_DELETE\x10\x8e\x9e\x03\x12$\n\x1e\x43LIPBOARD_COMMAND__POST_DELETE\x10\x8f\x9e\x03\x12+\n%CLIPBOARD_COMMAND__PRE_ENTER_IN_ERROR\x10\x90\x9e\x03\x12,\n&CLIPBOARD_COMMAND__POST_ENTER_IN_ERROR\x10\xf9\xa5\x03\x12+\n%CLIPBOARD_COMMAND__PRE_EXECUTE_ACTION\x10\xe2\xad\x03\x12,\n&CLIPBOARD_COMMAND__POST_EXECUTE_ACTION\x10\xcb\xb5\x03\x12&\n!CLOSE_GOAL_COMMAND__PRE_ORIGINATE\x10\x90N\x12\'\n\"CLOSE_GOAL_COMMAND__POST_ORIGINATE\x10\x91N\x12#\n\x1e\x43LOSE_GOAL_COMMAND__PRE_UPDATE\x10\x92N\x12$\n\x1f\x43LOSE_GOAL_COMMAND__POST_UPDATE\x10\x93N\x12#\n\x1e\x43LOSE_GOAL_COMMAND__PRE_COMMIT\x10\x94N\x12$\n\x1f\x43LOSE_GOAL_COMMAND__POST_COMMIT\x10\x95N\x12#\n\x1e\x43LOSE_GOAL_COMMAND__PRE_DELETE\x10\x96N\x12$\n\x1f\x43LOSE_GOAL_COMMAND__POST_DELETE\x10\x97N\x12+\n&CLOSE_GOAL_COMMAND__PRE_ENTER_IN_ERROR\x10\x98N\x12,\n\'CLOSE_GOAL_COMMAND__POST_ENTER_IN_ERROR\x10\x99N\x12+\n&CLOSE_GOAL_COMMAND__PRE_EXECUTE_ACTION\x10\x9aN\x12,\n\'CLOSE_GOAL_COMMAND__POST_EXECUTE_ACTION\x10\x9bN\x12$\n\x1f\x43LOSE_GOAL__GOAL_ID__PRE_SEARCH\x10\x9cN\x12%\n CLOSE_GOAL__GOAL_ID__POST_SEARCH\x10\x9dN\x12$\n\x1f\x44IAGNOSE_COMMAND__PRE_ORIGINATE\x10\xb0m\x12%\n DIAGNOSE_COMMAND__POST_ORIGINATE\x10\xb1m\x12!\n\x1c\x44IAGNOSE_COMMAND__PRE_UPDATE\x10\xb2m\x12\"\n\x1d\x44IAGNOSE_COMMAND__POST_UPDATE\x10\xb3m\x12!\n\x1c\x44IAGNOSE_COMMAND__PRE_COMMIT\x10\xb4m\x12\"\n\x1d\x44IAGNOSE_COMMAND__POST_COMMIT\x10\xb5m\x12!\n\x1c\x44IAGNOSE_COMMAND__PRE_DELETE\x10\xb6m\x12\"\n\x1d\x44IAGNOSE_COMMAND__POST_DELETE\x10\xb7m\x12)\n$DIAGNOSE_COMMAND__PRE_ENTER_IN_ERROR\x10\xb8m\x12*\n%DIAGNOSE_COMMAND__POST_ENTER_IN_ERROR\x10\xb9m\x12)\n$DIAGNOSE_COMMAND__PRE_EXECUTE_ACTION\x10\xbam\x12*\n%DIAGNOSE_COMMAND__POST_EXECUTE_ACTION\x10\xbbm\x12$\n\x1f\x44IAGNOSE__DIAGNOSE__POST_SEARCH\x10\xbcm\x12#\n\x1e\x44IAGNOSE__DIAGNOSE__PRE_SEARCH\x10\xbdm\x12\x30\n+EDUCATIONAL_MATERIAL_COMMAND__PRE_ORIGINATE\x10\x98u\x12\x31\n,EDUCATIONAL_MATERIAL_COMMAND__POST_ORIGINATE\x10\x99u\x12-\n(EDUCATIONAL_MATERIAL_COMMAND__PRE_UPDATE\x10\x9au\x12.\n)EDUCATIONAL_MATERIAL_COMMAND__POST_UPDATE\x10\x9bu\x12-\n(EDUCATIONAL_MATERIAL_COMMAND__PRE_COMMIT\x10\x9cu\x12.\n)EDUCATIONAL_MATERIAL_COMMAND__POST_COMMIT\x10\x9du\x12-\n(EDUCATIONAL_MATERIAL_COMMAND__PRE_DELETE\x10\x9eu\x12.\n)EDUCATIONAL_MATERIAL_COMMAND__POST_DELETE\x10\x9fu\x12\x35\n0EDUCATIONAL_MATERIAL_COMMAND__PRE_ENTER_IN_ERROR\x10\xa0u\x12\x36\n1EDUCATIONAL_MATERIAL_COMMAND__POST_ENTER_IN_ERROR\x10\xa1u\x12\x35\n0EDUCATIONAL_MATERIAL_COMMAND__PRE_EXECUTE_ACTION\x10\xa2u\x12\x36\n1EDUCATIONAL_MATERIAL_COMMAND__POST_EXECUTE_ACTION\x10\xa3u\x12,\n\'EDUCATIONAL_MATERIAL__TITLE__PRE_SEARCH\x10\xa4u\x12-\n(EDUCATIONAL_MATERIAL__TITLE__POST_SEARCH\x10\xa5u\x12/\n*EDUCATIONAL_MATERIAL__LANGUAGE__PRE_SEARCH\x10\xa6u\x12\x30\n+EDUCATIONAL_MATERIAL__LANGUAGE__POST_SEARCH\x10\xa7u\x12*\n%FAMILY_HISTORY_COMMAND__PRE_ORIGINATE\x10\x80}\x12+\n&FAMILY_HISTORY_COMMAND__POST_ORIGINATE\x10\x81}\x12\'\n\"FAMILY_HISTORY_COMMAND__PRE_UPDATE\x10\x82}\x12(\n#FAMILY_HISTORY_COMMAND__POST_UPDATE\x10\x83}\x12\'\n\"FAMILY_HISTORY_COMMAND__PRE_COMMIT\x10\x84}\x12(\n#FAMILY_HISTORY_COMMAND__POST_COMMIT\x10\x85}\x12\'\n\"FAMILY_HISTORY_COMMAND__PRE_DELETE\x10\x86}\x12(\n#FAMILY_HISTORY_COMMAND__POST_DELETE\x10\x87}\x12/\n*FAMILY_HISTORY_COMMAND__PRE_ENTER_IN_ERROR\x10\x88}\x12\x30\n+FAMILY_HISTORY_COMMAND__POST_ENTER_IN_ERROR\x10\x89}\x12/\n*FAMILY_HISTORY_COMMAND__PRE_EXECUTE_ACTION\x10\x8a}\x12\x30\n+FAMILY_HISTORY_COMMAND__POST_EXECUTE_ACTION\x10\x8b}\x12/\n*FAMILY_HISTORY__FAMILY_HISTORY__PRE_SEARCH\x10\x8c}\x12\x30\n+FAMILY_HISTORY__FAMILY_HISTORY__POST_SEARCH\x10\x8d}\x12)\n$FAMILY_HISTORY__RELATIVE__PRE_SEARCH\x10\x8e}\x12*\n%FAMILY_HISTORY__RELATIVE__POST_SEARCH\x10\x8f}\x12!\n\x1bGOAL_COMMAND__PRE_ORIGINATE\x10\xd0\x8c\x01\x12\"\n\x1cGOAL_COMMAND__POST_ORIGINATE\x10\xd1\x8c\x01\x12\x1e\n\x18GOAL_COMMAND__PRE_UPDATE\x10\xd2\x8c\x01\x12\x1f\n\x19GOAL_COMMAND__POST_UPDATE\x10\xd3\x8c\x01\x12\x1e\n\x18GOAL_COMMAND__PRE_COMMIT\x10\xd4\x8c\x01\x12\x1f\n\x19GOAL_COMMAND__POST_COMMIT\x10\xd5\x8c\x01\x12\x1e\n\x18GOAL_COMMAND__PRE_DELETE\x10\xd6\x8c\x01\x12\x1f\n\x19GOAL_COMMAND__POST_DELETE\x10\xd7\x8c\x01\x12&\n GOAL_COMMAND__PRE_ENTER_IN_ERROR\x10\xd8\x8c\x01\x12\'\n!GOAL_COMMAND__POST_ENTER_IN_ERROR\x10\xd9\x8c\x01\x12&\n GOAL_COMMAND__PRE_EXECUTE_ACTION\x10\xda\x8c\x01\x12\'\n!GOAL_COMMAND__POST_EXECUTE_ACTION\x10\xdb\x8c\x01\x12\x37\n1HISTORY_OF_PRESENT_ILLNESS_COMMAND__PRE_ORIGINATE\x10\xb8\x94\x01\x12\x38\n2HISTORY_OF_PRESENT_ILLNESS_COMMAND__POST_ORIGINATE\x10\xb9\x94\x01\x12\x34\n.HISTORY_OF_PRESENT_ILLNESS_COMMAND__PRE_UPDATE\x10\xba\x94\x01\x12\x35\n/HISTORY_OF_PRESENT_ILLNESS_COMMAND__POST_UPDATE\x10\xbb\x94\x01\x12\x34\n.HISTORY_OF_PRESENT_ILLNESS_COMMAND__PRE_COMMIT\x10\xbc\x94\x01\x12\x35\n/HISTORY_OF_PRESENT_ILLNESS_COMMAND__POST_COMMIT\x10\xbd\x94\x01\x12\x34\n.HISTORY_OF_PRESENT_ILLNESS_COMMAND__PRE_DELETE\x10\xbe\x94\x01\x12\x35\n/HISTORY_OF_PRESENT_ILLNESS_COMMAND__POST_DELETE\x10\xbf\x94\x01\x12<\n6HISTORY_OF_PRESENT_ILLNESS_COMMAND__PRE_ENTER_IN_ERROR\x10\xc0\x94\x01\x12=\n7HISTORY_OF_PRESENT_ILLNESS_COMMAND__POST_ENTER_IN_ERROR\x10\xc1\x94\x01\x12<\n6HISTORY_OF_PRESENT_ILLNESS_COMMAND__PRE_EXECUTE_ACTION\x10\xc2\x94\x01\x12=\n7HISTORY_OF_PRESENT_ILLNESS_COMMAND__POST_EXECUTE_ACTION\x10\xc3\x94\x01\x12*\n$IMAGING_ORDER_COMMAND__PRE_ORIGINATE\x10\xa0\x9c\x01\x12+\n%IMAGING_ORDER_COMMAND__POST_ORIGINATE\x10\xa1\x9c\x01\x12\'\n!IMAGING_ORDER_COMMAND__PRE_UPDATE\x10\xa2\x9c\x01\x12(\n\"IMAGING_ORDER_COMMAND__POST_UPDATE\x10\xa3\x9c\x01\x12\'\n!IMAGING_ORDER_COMMAND__PRE_COMMIT\x10\xa4\x9c\x01\x12(\n\"IMAGING_ORDER_COMMAND__POST_COMMIT\x10\xa5\x9c\x01\x12\'\n!IMAGING_ORDER_COMMAND__PRE_DELETE\x10\xa6\x9c\x01\x12(\n\"IMAGING_ORDER_COMMAND__POST_DELETE\x10\xa7\x9c\x01\x12/\n)IMAGING_ORDER_COMMAND__PRE_ENTER_IN_ERROR\x10\xa8\x9c\x01\x12\x30\n*IMAGING_ORDER_COMMAND__POST_ENTER_IN_ERROR\x10\xa9\x9c\x01\x12/\n)IMAGING_ORDER_COMMAND__PRE_EXECUTE_ACTION\x10\xaa\x9c\x01\x12\x30\n*IMAGING_ORDER_COMMAND__POST_EXECUTE_ACTION\x10\xab\x9c\x01\x12&\n IMAGING_ORDER__IMAGE__PRE_SEARCH\x10\xac\x9c\x01\x12\'\n!IMAGING_ORDER__IMAGE__POST_SEARCH\x10\xad\x9c\x01\x12,\n&IMAGING_ORDER__INDICATIONS__PRE_SEARCH\x10\xae\x9c\x01\x12-\n\'IMAGING_ORDER__INDICATIONS__POST_SEARCH\x10\xaf\x9c\x01\x12/\n)IMAGING_ORDER__IMAGING_CENTER__PRE_SEARCH\x10\xb0\x9c\x01\x12\x30\n*IMAGING_ORDER__IMAGING_CENTER__POST_SEARCH\x10\xb1\x9c\x01\x12\x32\n,IMAGING_ORDER__ORDERING_PROVIDER__PRE_SEARCH\x10\xb2\x9c\x01\x12\x33\n-IMAGING_ORDER__ORDERING_PROVIDER__POST_SEARCH\x10\xb3\x9c\x01\x12\x33\n-IMMUNIZATION_STATEMENT_COMMAND__PRE_ORIGINATE\x10\xf0\xab\x01\x12\x34\n.IMMUNIZATION_STATEMENT_COMMAND__POST_ORIGINATE\x10\xf1\xab\x01\x12\x30\n*IMMUNIZATION_STATEMENT_COMMAND__PRE_UPDATE\x10\xf2\xab\x01\x12\x31\n+IMMUNIZATION_STATEMENT_COMMAND__POST_UPDATE\x10\xf3\xab\x01\x12\x30\n*IMMUNIZATION_STATEMENT_COMMAND__PRE_COMMIT\x10\xf4\xab\x01\x12\x31\n+IMMUNIZATION_STATEMENT_COMMAND__POST_COMMIT\x10\xf5\xab\x01\x12\x30\n*IMMUNIZATION_STATEMENT_COMMAND__PRE_DELETE\x10\xf6\xab\x01\x12\x31\n+IMMUNIZATION_STATEMENT_COMMAND__POST_DELETE\x10\xf7\xab\x01\x12\x38\n2IMMUNIZATION_STATEMENT_COMMAND__PRE_ENTER_IN_ERROR\x10\xf8\xab\x01\x12\x39\n3IMMUNIZATION_STATEMENT_COMMAND__POST_ENTER_IN_ERROR\x10\xf9\xab\x01\x12\x38\n2IMMUNIZATION_STATEMENT_COMMAND__PRE_EXECUTE_ACTION\x10\xfa\xab\x01\x12\x39\n3IMMUNIZATION_STATEMENT_COMMAND__POST_EXECUTE_ACTION\x10\xfb\xab\x01\x12\x33\n-IMMUNIZATION_STATEMENT__STATEMENT__PRE_SEARCH\x10\xfc\xab\x01\x12\x34\n.IMMUNIZATION_STATEMENT__STATEMENT__POST_SEARCH\x10\xfd\xab\x01\x12%\n\x1fIMMUNIZE_COMMAND__PRE_ORIGINATE\x10\xd8\xb3\x01\x12&\n IMMUNIZE_COMMAND__POST_ORIGINATE\x10\xd9\xb3\x01\x12\"\n\x1cIMMUNIZE_COMMAND__PRE_UPDATE\x10\xda\xb3\x01\x12#\n\x1dIMMUNIZE_COMMAND__POST_UPDATE\x10\xdb\xb3\x01\x12\"\n\x1cIMMUNIZE_COMMAND__PRE_COMMIT\x10\xdc\xb3\x01\x12#\n\x1dIMMUNIZE_COMMAND__POST_COMMIT\x10\xdd\xb3\x01\x12\"\n\x1cIMMUNIZE_COMMAND__PRE_DELETE\x10\xde\xb3\x01\x12#\n\x1dIMMUNIZE_COMMAND__POST_DELETE\x10\xdf\xb3\x01\x12*\n$IMMUNIZE_COMMAND__PRE_ENTER_IN_ERROR\x10\xe0\xb3\x01\x12+\n%IMMUNIZE_COMMAND__POST_ENTER_IN_ERROR\x10\xe1\xb3\x01\x12*\n$IMMUNIZE_COMMAND__PRE_EXECUTE_ACTION\x10\xe2\xb3\x01\x12+\n%IMMUNIZE_COMMAND__POST_EXECUTE_ACTION\x10\xe3\xb3\x01\x12\"\n\x1cIMMUNIZE__CODING__PRE_SEARCH\x10\xe4\xb3\x01\x12#\n\x1dIMMUNIZE__CODING__POST_SEARCH\x10\xe5\xb3\x01\x12&\n IMMUNIZE__LOT_NUMBER__PRE_SEARCH\x10\xe6\xb3\x01\x12\'\n!IMMUNIZE__LOT_NUMBER__POST_SEARCH\x10\xe7\xb3\x01\x12$\n\x1eIMMUNIZE__GIVEN_BY__PRE_SEARCH\x10\xe8\xb3\x01\x12%\n\x1fIMMUNIZE__GIVEN_BY__POST_SEARCH\x10\xe9\xb3\x01\x12%\n\x1fINSTRUCT_COMMAND__PRE_ORIGINATE\x10\xc0\xbb\x01\x12&\n INSTRUCT_COMMAND__POST_ORIGINATE\x10\xc1\xbb\x01\x12\"\n\x1cINSTRUCT_COMMAND__PRE_UPDATE\x10\xc2\xbb\x01\x12#\n\x1dINSTRUCT_COMMAND__POST_UPDATE\x10\xc3\xbb\x01\x12\"\n\x1cINSTRUCT_COMMAND__PRE_COMMIT\x10\xc4\xbb\x01\x12#\n\x1dINSTRUCT_COMMAND__POST_COMMIT\x10\xc5\xbb\x01\x12\"\n\x1cINSTRUCT_COMMAND__PRE_DELETE\x10\xc6\xbb\x01\x12#\n\x1dINSTRUCT_COMMAND__POST_DELETE\x10\xc7\xbb\x01\x12*\n$INSTRUCT_COMMAND__PRE_ENTER_IN_ERROR\x10\xc8\xbb\x01\x12+\n%INSTRUCT_COMMAND__POST_ENTER_IN_ERROR\x10\xc9\xbb\x01\x12*\n$INSTRUCT_COMMAND__PRE_EXECUTE_ACTION\x10\xca\xbb\x01\x12+\n%INSTRUCT_COMMAND__POST_EXECUTE_ACTION\x10\xcb\xbb\x01\x12$\n\x1eINSTRUCT__INSTRUCT__PRE_SEARCH\x10\xcc\xbb\x01\x12%\n\x1fINSTRUCT__INSTRUCT__POST_SEARCH\x10\xcd\xbb\x01\x12&\n LAB_ORDER_COMMAND__PRE_ORIGINATE\x10\xa8\xc3\x01\x12\'\n!LAB_ORDER_COMMAND__POST_ORIGINATE\x10\xa9\xc3\x01\x12#\n\x1dLAB_ORDER_COMMAND__PRE_UPDATE\x10\xaa\xc3\x01\x12$\n\x1eLAB_ORDER_COMMAND__POST_UPDATE\x10\xab\xc3\x01\x12#\n\x1dLAB_ORDER_COMMAND__PRE_COMMIT\x10\xac\xc3\x01\x12$\n\x1eLAB_ORDER_COMMAND__POST_COMMIT\x10\xad\xc3\x01\x12#\n\x1dLAB_ORDER_COMMAND__PRE_DELETE\x10\xae\xc3\x01\x12$\n\x1eLAB_ORDER_COMMAND__POST_DELETE\x10\xaf\xc3\x01\x12+\n%LAB_ORDER_COMMAND__PRE_ENTER_IN_ERROR\x10\xb0\xc3\x01\x12,\n&LAB_ORDER_COMMAND__POST_ENTER_IN_ERROR\x10\xb1\xc3\x01\x12+\n%LAB_ORDER_COMMAND__PRE_EXECUTE_ACTION\x10\xb2\xc3\x01\x12,\n&LAB_ORDER_COMMAND__POST_EXECUTE_ACTION\x10\xb3\xc3\x01\x12(\n\"LAB_ORDER__LAB_PARTNER__PRE_SEARCH\x10\xb4\xc3\x01\x12)\n#LAB_ORDER__LAB_PARTNER__POST_SEARCH\x10\xb5\xc3\x01\x12\"\n\x1cLAB_ORDER__TESTS__PRE_SEARCH\x10\xb6\xc3\x01\x12#\n\x1dLAB_ORDER__TESTS__POST_SEARCH\x10\xb7\xc3\x01\x12.\n(LAB_ORDER__ORDERING_PROVIDER__PRE_SEARCH\x10\xb8\xc3\x01\x12/\n)LAB_ORDER__ORDERING_PROVIDER__POST_SEARCH\x10\xb9\xc3\x01\x12&\n LAB_ORDER__DIAGNOSIS__PRE_SEARCH\x10\xba\xc3\x01\x12\'\n!LAB_ORDER__DIAGNOSIS__POST_SEARCH\x10\xbb\xc3\x01\x12,\n&MEDICAL_HISTORY_COMMAND__PRE_ORIGINATE\x10\xf8\xd2\x01\x12-\n\'MEDICAL_HISTORY_COMMAND__POST_ORIGINATE\x10\xf9\xd2\x01\x12)\n#MEDICAL_HISTORY_COMMAND__PRE_UPDATE\x10\xfa\xd2\x01\x12*\n$MEDICAL_HISTORY_COMMAND__POST_UPDATE\x10\xfb\xd2\x01\x12)\n#MEDICAL_HISTORY_COMMAND__PRE_COMMIT\x10\xfc\xd2\x01\x12*\n$MEDICAL_HISTORY_COMMAND__POST_COMMIT\x10\xfd\xd2\x01\x12)\n#MEDICAL_HISTORY_COMMAND__PRE_DELETE\x10\xfe\xd2\x01\x12*\n$MEDICAL_HISTORY_COMMAND__POST_DELETE\x10\xff\xd2\x01\x12\x31\n+MEDICAL_HISTORY_COMMAND__PRE_ENTER_IN_ERROR\x10\x80\xd3\x01\x12\x32\n,MEDICAL_HISTORY_COMMAND__POST_ENTER_IN_ERROR\x10\x81\xd3\x01\x12\x31\n+MEDICAL_HISTORY_COMMAND__PRE_EXECUTE_ACTION\x10\x82\xd3\x01\x12\x32\n,MEDICAL_HISTORY_COMMAND__POST_EXECUTE_ACTION\x10\x83\xd3\x01\x12\x37\n1MEDICAL_HISTORY__PAST_MEDICAL_HISTORY__PRE_SEARCH\x10\x84\xd3\x01\x12\x38\n2MEDICAL_HISTORY__PAST_MEDICAL_HISTORY__POST_SEARCH\x10\x85\xd3\x01\x12\x39\n3MEDICAL_HISTORY__APPROXIMATE_START_DATE__PRE_SEARCH\x10\x86\xd3\x01\x12:\n4MEDICAL_HISTORY__APPROXIMATE_START_DATE__POST_SEARCH\x10\x87\xd3\x01\x12\x37\n1MEDICAL_HISTORY__APPROXIMATE_END_DATE__PRE_SEARCH\x10\x88\xd3\x01\x12\x38\n2MEDICAL_HISTORY__APPROXIMATE_END_DATE__POST_SEARCH\x10\x89\xd3\x01\x12\x31\n+MEDICATION_STATEMENT_COMMAND__PRE_ORIGINATE\x10\xe0\xda\x01\x12\x32\n,MEDICATION_STATEMENT_COMMAND__POST_ORIGINATE\x10\xe1\xda\x01\x12.\n(MEDICATION_STATEMENT_COMMAND__PRE_UPDATE\x10\xe2\xda\x01\x12/\n)MEDICATION_STATEMENT_COMMAND__POST_UPDATE\x10\xe3\xda\x01\x12.\n(MEDICATION_STATEMENT_COMMAND__PRE_COMMIT\x10\xe4\xda\x01\x12/\n)MEDICATION_STATEMENT_COMMAND__POST_COMMIT\x10\xe5\xda\x01\x12.\n(MEDICATION_STATEMENT_COMMAND__PRE_DELETE\x10\xe6\xda\x01\x12/\n)MEDICATION_STATEMENT_COMMAND__POST_DELETE\x10\xe7\xda\x01\x12\x36\n0MEDICATION_STATEMENT_COMMAND__PRE_ENTER_IN_ERROR\x10\xe8\xda\x01\x12\x37\n1MEDICATION_STATEMENT_COMMAND__POST_ENTER_IN_ERROR\x10\xe9\xda\x01\x12\x36\n0MEDICATION_STATEMENT_COMMAND__PRE_EXECUTE_ACTION\x10\xea\xda\x01\x12\x37\n1MEDICATION_STATEMENT_COMMAND__POST_EXECUTE_ACTION\x10\xeb\xda\x01\x12$\n\x1ePERFORM_COMMAND__PRE_ORIGINATE\x10\xc8\xe2\x01\x12%\n\x1fPERFORM_COMMAND__POST_ORIGINATE\x10\xc9\xe2\x01\x12!\n\x1bPERFORM_COMMAND__PRE_UPDATE\x10\xca\xe2\x01\x12\"\n\x1cPERFORM_COMMAND__POST_UPDATE\x10\xcb\xe2\x01\x12!\n\x1bPERFORM_COMMAND__PRE_COMMIT\x10\xcc\xe2\x01\x12\"\n\x1cPERFORM_COMMAND__POST_COMMIT\x10\xcd\xe2\x01\x12!\n\x1bPERFORM_COMMAND__PRE_DELETE\x10\xce\xe2\x01\x12\"\n\x1cPERFORM_COMMAND__POST_DELETE\x10\xcf\xe2\x01\x12)\n#PERFORM_COMMAND__PRE_ENTER_IN_ERROR\x10\xd0\xe2\x01\x12*\n$PERFORM_COMMAND__POST_ENTER_IN_ERROR\x10\xd1\xe2\x01\x12)\n#PERFORM_COMMAND__PRE_EXECUTE_ACTION\x10\xd2\xe2\x01\x12*\n$PERFORM_COMMAND__POST_EXECUTE_ACTION\x10\xd3\xe2\x01\x12\"\n\x1cPERFORM__PERFORM__PRE_SEARCH\x10\xd4\xe2\x01\x12#\n\x1dPERFORM__PERFORM__POST_SEARCH\x10\xd5\xe2\x01\x12*\n$PHYSICAL_EXAM_COMMAND__PRE_ORIGINATE\x10\xb0\xea\x01\x12+\n%PHYSICAL_EXAM_COMMAND__POST_ORIGINATE\x10\xb1\xea\x01\x12\'\n!PHYSICAL_EXAM_COMMAND__PRE_UPDATE\x10\xb2\xea\x01\x12(\n\"PHYSICAL_EXAM_COMMAND__POST_UPDATE\x10\xb3\xea\x01\x12\'\n!PHYSICAL_EXAM_COMMAND__PRE_COMMIT\x10\xb4\xea\x01\x12(\n\"PHYSICAL_EXAM_COMMAND__POST_COMMIT\x10\xb5\xea\x01\x12\'\n!PHYSICAL_EXAM_COMMAND__PRE_DELETE\x10\xb6\xea\x01\x12(\n\"PHYSICAL_EXAM_COMMAND__POST_DELETE\x10\xb7\xea\x01\x12/\n)PHYSICAL_EXAM_COMMAND__PRE_ENTER_IN_ERROR\x10\xb8\xea\x01\x12\x30\n*PHYSICAL_EXAM_COMMAND__POST_ENTER_IN_ERROR\x10\xb9\xea\x01\x12/\n)PHYSICAL_EXAM_COMMAND__PRE_EXECUTE_ACTION\x10\xba\xea\x01\x12\x30\n*PHYSICAL_EXAM_COMMAND__POST_EXECUTE_ACTION\x10\xbb\xea\x01\x12.\n(PHYSICAL_EXAM__QUESTIONNAIRE__PRE_SEARCH\x10\xbc\xea\x01\x12/\n)PHYSICAL_EXAM__QUESTIONNAIRE__POST_SEARCH\x10\xbd\xea\x01\x12!\n\x1bPLAN_COMMAND__PRE_ORIGINATE\x10\x98\xf2\x01\x12\"\n\x1cPLAN_COMMAND__POST_ORIGINATE\x10\x99\xf2\x01\x12\x1e\n\x18PLAN_COMMAND__PRE_UPDATE\x10\x9a\xf2\x01\x12\x1f\n\x19PLAN_COMMAND__POST_UPDATE\x10\x9b\xf2\x01\x12\x1e\n\x18PLAN_COMMAND__PRE_COMMIT\x10\x9c\xf2\x01\x12\x1f\n\x19PLAN_COMMAND__POST_COMMIT\x10\x9d\xf2\x01\x12\x1e\n\x18PLAN_COMMAND__PRE_DELETE\x10\x9e\xf2\x01\x12\x1f\n\x19PLAN_COMMAND__POST_DELETE\x10\x9f\xf2\x01\x12&\n PLAN_COMMAND__PRE_ENTER_IN_ERROR\x10\xa0\xf2\x01\x12\'\n!PLAN_COMMAND__POST_ENTER_IN_ERROR\x10\xa1\xf2\x01\x12&\n PLAN_COMMAND__PRE_EXECUTE_ACTION\x10\xa2\xf2\x01\x12\'\n!PLAN_COMMAND__POST_EXECUTE_ACTION\x10\xa3\xf2\x01\x12&\n PRESCRIBE_COMMAND__PRE_ORIGINATE\x10\xe8\x81\x02\x12\'\n!PRESCRIBE_COMMAND__POST_ORIGINATE\x10\xe9\x81\x02\x12#\n\x1dPRESCRIBE_COMMAND__PRE_UPDATE\x10\xea\x81\x02\x12$\n\x1ePRESCRIBE_COMMAND__POST_UPDATE\x10\xeb\x81\x02\x12#\n\x1dPRESCRIBE_COMMAND__PRE_COMMIT\x10\xec\x81\x02\x12$\n\x1ePRESCRIBE_COMMAND__POST_COMMIT\x10\xed\x81\x02\x12#\n\x1dPRESCRIBE_COMMAND__PRE_DELETE\x10\xee\x81\x02\x12$\n\x1ePRESCRIBE_COMMAND__POST_DELETE\x10\xef\x81\x02\x12+\n%PRESCRIBE_COMMAND__PRE_ENTER_IN_ERROR\x10\xf0\x81\x02\x12,\n&PRESCRIBE_COMMAND__POST_ENTER_IN_ERROR\x10\xf1\x81\x02\x12+\n%PRESCRIBE_COMMAND__PRE_EXECUTE_ACTION\x10\xf2\x81\x02\x12,\n&PRESCRIBE_COMMAND__POST_EXECUTE_ACTION\x10\xf3\x81\x02\x12\'\n!PRESCRIBE__PRESCRIBE__POST_SEARCH\x10\xf4\x81\x02\x12&\n PRESCRIBE__PRESCRIBE__PRE_SEARCH\x10\xf5\x81\x02\x12(\n\"PRESCRIBE__INDICATIONS__PRE_SEARCH\x10\xf6\x81\x02\x12)\n#PRESCRIBE__INDICATIONS__POST_SEARCH\x10\xf7\x81\x02\x12%\n\x1fPRESCRIBE__PHARMACY__PRE_SEARCH\x10\xf8\x81\x02\x12&\n PRESCRIBE__PHARMACY__POST_SEARCH\x10\xf9\x81\x02\x12*\n$QUESTIONNAIRE_COMMAND__PRE_ORIGINATE\x10\xd0\x89\x02\x12+\n%QUESTIONNAIRE_COMMAND__POST_ORIGINATE\x10\xd1\x89\x02\x12\'\n!QUESTIONNAIRE_COMMAND__PRE_UPDATE\x10\xd2\x89\x02\x12(\n\"QUESTIONNAIRE_COMMAND__POST_UPDATE\x10\xd3\x89\x02\x12\'\n!QUESTIONNAIRE_COMMAND__PRE_COMMIT\x10\xd4\x89\x02\x12(\n\"QUESTIONNAIRE_COMMAND__POST_COMMIT\x10\xd5\x89\x02\x12\'\n!QUESTIONNAIRE_COMMAND__PRE_DELETE\x10\xd6\x89\x02\x12(\n\"QUESTIONNAIRE_COMMAND__POST_DELETE\x10\xd7\x89\x02\x12/\n)QUESTIONNAIRE_COMMAND__PRE_ENTER_IN_ERROR\x10\xd8\x89\x02\x12\x30\n*QUESTIONNAIRE_COMMAND__POST_ENTER_IN_ERROR\x10\xd9\x89\x02\x12/\n)QUESTIONNAIRE_COMMAND__PRE_EXECUTE_ACTION\x10\xda\x89\x02\x12\x30\n*QUESTIONNAIRE_COMMAND__POST_EXECUTE_ACTION\x10\xdb\x89\x02\x12/\n)QUESTIONNAIRE__QUESTIONNAIRE__POST_SEARCH\x10\xdc\x89\x02\x12.\n(QUESTIONNAIRE__QUESTIONNAIRE__PRE_SEARCH\x10\xdd\x89\x02\x12-\n\'REASON_FOR_VISIT_COMMAND__PRE_ORIGINATE\x10\xb8\x91\x02\x12.\n(REASON_FOR_VISIT_COMMAND__POST_ORIGINATE\x10\xb9\x91\x02\x12*\n$REASON_FOR_VISIT_COMMAND__PRE_UPDATE\x10\xba\x91\x02\x12+\n%REASON_FOR_VISIT_COMMAND__POST_UPDATE\x10\xbb\x91\x02\x12*\n$REASON_FOR_VISIT_COMMAND__PRE_COMMIT\x10\xbc\x91\x02\x12+\n%REASON_FOR_VISIT_COMMAND__POST_COMMIT\x10\xbd\x91\x02\x12*\n$REASON_FOR_VISIT_COMMAND__PRE_DELETE\x10\xbe\x91\x02\x12+\n%REASON_FOR_VISIT_COMMAND__POST_DELETE\x10\xbf\x91\x02\x12\x32\n,REASON_FOR_VISIT_COMMAND__PRE_ENTER_IN_ERROR\x10\xc0\x91\x02\x12\x33\n-REASON_FOR_VISIT_COMMAND__POST_ENTER_IN_ERROR\x10\xc1\x91\x02\x12\x32\n,REASON_FOR_VISIT_COMMAND__PRE_EXECUTE_ACTION\x10\xc2\x91\x02\x12\x33\n-REASON_FOR_VISIT_COMMAND__POST_EXECUTE_ACTION\x10\xc3\x91\x02\x12+\n%REASON_FOR_VISIT__CODING__POST_SEARCH\x10\xc4\x91\x02\x12*\n$REASON_FOR_VISIT__CODING__PRE_SEARCH\x10\xc5\x91\x02\x12#\n\x1dREFILL_COMMAND__PRE_ORIGINATE\x10\xd8\xb0\x02\x12$\n\x1eREFILL_COMMAND__POST_ORIGINATE\x10\xd9\xb0\x02\x12 \n\x1aREFILL_COMMAND__PRE_UPDATE\x10\xda\xb0\x02\x12!\n\x1bREFILL_COMMAND__POST_UPDATE\x10\xdb\xb0\x02\x12 \n\x1aREFILL_COMMAND__PRE_COMMIT\x10\xdc\xb0\x02\x12!\n\x1bREFILL_COMMAND__POST_COMMIT\x10\xdd\xb0\x02\x12 \n\x1aREFILL_COMMAND__PRE_DELETE\x10\xde\xb0\x02\x12!\n\x1bREFILL_COMMAND__POST_DELETE\x10\xdf\xb0\x02\x12(\n\"REFILL_COMMAND__PRE_ENTER_IN_ERROR\x10\xe0\xb0\x02\x12)\n#REFILL_COMMAND__POST_ENTER_IN_ERROR\x10\xe1\xb0\x02\x12(\n\"REFILL_COMMAND__PRE_EXECUTE_ACTION\x10\xe2\xb0\x02\x12)\n#REFILL_COMMAND__POST_EXECUTE_ACTION\x10\xe3\xb0\x02\x12#\n\x1dREFILL__PRESCRIBE__PRE_SEARCH\x10\xe4\xb0\x02\x12$\n\x1eREFILL__PRESCRIBE__POST_SEARCH\x10\xe5\xb0\x02\x12%\n\x1fREFILL__INDICATIONS__PRE_SEARCH\x10\xe6\xb0\x02\x12&\n REFILL__INDICATIONS__POST_SEARCH\x10\xe7\xb0\x02\x12\"\n\x1cREFILL__PHARMACY__PRE_SEARCH\x10\xe8\xb0\x02\x12#\n\x1dREFILL__PHARMACY__POST_SEARCH\x10\xe9\xb0\x02\x12+\n%REMOVE_ALLERGY_COMMAND__PRE_ORIGINATE\x10\xc0\xb8\x02\x12,\n&REMOVE_ALLERGY_COMMAND__POST_ORIGINATE\x10\xc1\xb8\x02\x12(\n\"REMOVE_ALLERGY_COMMAND__PRE_UPDATE\x10\xc2\xb8\x02\x12)\n#REMOVE_ALLERGY_COMMAND__POST_UPDATE\x10\xc3\xb8\x02\x12(\n\"REMOVE_ALLERGY_COMMAND__PRE_COMMIT\x10\xc4\xb8\x02\x12)\n#REMOVE_ALLERGY_COMMAND__POST_COMMIT\x10\xc5\xb8\x02\x12(\n\"REMOVE_ALLERGY_COMMAND__PRE_DELETE\x10\xc6\xb8\x02\x12)\n#REMOVE_ALLERGY_COMMAND__POST_DELETE\x10\xc7\xb8\x02\x12\x30\n*REMOVE_ALLERGY_COMMAND__PRE_ENTER_IN_ERROR\x10\xc8\xb8\x02\x12\x31\n+REMOVE_ALLERGY_COMMAND__POST_ENTER_IN_ERROR\x10\xc9\xb8\x02\x12\x30\n*REMOVE_ALLERGY_COMMAND__PRE_EXECUTE_ACTION\x10\xca\xb8\x02\x12\x31\n+REMOVE_ALLERGY_COMMAND__POST_EXECUTE_ACTION\x10\xcb\xb8\x02\x12)\n#REMOVE_ALLERGY__ALLERGY__PRE_SEARCH\x10\xcc\xb8\x02\x12*\n$REMOVE_ALLERGY__ALLERGY__POST_SEARCH\x10\xcd\xb8\x02\x12 \n\x1aROS_COMMAND__PRE_ORIGINATE\x10\x90\xc8\x02\x12!\n\x1bROS_COMMAND__POST_ORIGINATE\x10\x91\xc8\x02\x12\x1d\n\x17ROS_COMMAND__PRE_UPDATE\x10\x92\xc8\x02\x12\x1e\n\x18ROS_COMMAND__POST_UPDATE\x10\x93\xc8\x02\x12\x1d\n\x17ROS_COMMAND__PRE_COMMIT\x10\x94\xc8\x02\x12\x1e\n\x18ROS_COMMAND__POST_COMMIT\x10\x95\xc8\x02\x12\x1d\n\x17ROS_COMMAND__PRE_DELETE\x10\x96\xc8\x02\x12\x1e\n\x18ROS_COMMAND__POST_DELETE\x10\x97\xc8\x02\x12%\n\x1fROS_COMMAND__PRE_ENTER_IN_ERROR\x10\x98\xc8\x02\x12&\n ROS_COMMAND__POST_ENTER_IN_ERROR\x10\x99\xc8\x02\x12%\n\x1fROS_COMMAND__PRE_EXECUTE_ACTION\x10\x9a\xc8\x02\x12&\n ROS_COMMAND__POST_EXECUTE_ACTION\x10\x9b\xc8\x02\x12$\n\x1eROS__QUESTIONNAIRE__PRE_SEARCH\x10\x9c\xc8\x02\x12%\n\x1fROS__QUESTIONNAIRE__POST_SEARCH\x10\x9d\xc8\x02\x12,\n&STOP_MEDICATION_COMMAND__PRE_ORIGINATE\x10\xe0\xd7\x02\x12-\n\'STOP_MEDICATION_COMMAND__POST_ORIGINATE\x10\xe1\xd7\x02\x12)\n#STOP_MEDICATION_COMMAND__PRE_UPDATE\x10\xe2\xd7\x02\x12*\n$STOP_MEDICATION_COMMAND__POST_UPDATE\x10\xe3\xd7\x02\x12)\n#STOP_MEDICATION_COMMAND__PRE_COMMIT\x10\xe4\xd7\x02\x12*\n$STOP_MEDICATION_COMMAND__POST_COMMIT\x10\xe5\xd7\x02\x12)\n#STOP_MEDICATION_COMMAND__PRE_DELETE\x10\xe6\xd7\x02\x12*\n$STOP_MEDICATION_COMMAND__POST_DELETE\x10\xe7\xd7\x02\x12\x31\n+STOP_MEDICATION_COMMAND__PRE_ENTER_IN_ERROR\x10\xe8\xd7\x02\x12\x32\n,STOP_MEDICATION_COMMAND__POST_ENTER_IN_ERROR\x10\xe9\xd7\x02\x12\x31\n+STOP_MEDICATION_COMMAND__PRE_EXECUTE_ACTION\x10\xea\xd7\x02\x12\x32\n,STOP_MEDICATION_COMMAND__POST_EXECUTE_ACTION\x10\xeb\xd7\x02\x12-\n\'STOP_MEDICATION__MEDICATION__PRE_SEARCH\x10\xed\xd7\x02\x12.\n(STOP_MEDICATION__MEDICATION__POST_SEARCH\x10\xee\xd7\x02\x12\x32\n,STRUCTURED_ASSESSMENT_COMMAND__PRE_ORIGINATE\x10\xc8\xdf\x02\x12\x33\n-STRUCTURED_ASSESSMENT_COMMAND__POST_ORIGINATE\x10\xc9\xdf\x02\x12/\n)STRUCTURED_ASSESSMENT_COMMAND__PRE_UPDATE\x10\xca\xdf\x02\x12\x30\n*STRUCTURED_ASSESSMENT_COMMAND__POST_UPDATE\x10\xcb\xdf\x02\x12/\n)STRUCTURED_ASSESSMENT_COMMAND__PRE_COMMIT\x10\xcc\xdf\x02\x12\x30\n*STRUCTURED_ASSESSMENT_COMMAND__POST_COMMIT\x10\xcd\xdf\x02\x12/\n)STRUCTURED_ASSESSMENT_COMMAND__PRE_DELETE\x10\xce\xdf\x02\x12\x30\n*STRUCTURED_ASSESSMENT_COMMAND__POST_DELETE\x10\xcf\xdf\x02\x12\x37\n1STRUCTURED_ASSESSMENT_COMMAND__PRE_ENTER_IN_ERROR\x10\xd0\xdf\x02\x12\x38\n2STRUCTURED_ASSESSMENT_COMMAND__POST_ENTER_IN_ERROR\x10\xd1\xdf\x02\x12\x37\n1STRUCTURED_ASSESSMENT_COMMAND__PRE_EXECUTE_ACTION\x10\xd2\xdf\x02\x12\x38\n2STRUCTURED_ASSESSMENT_COMMAND__POST_EXECUTE_ACTION\x10\xd3\xdf\x02\x12\x36\n0STRUCTURED_ASSESSMENT__QUESTIONNAIRE__PRE_SEARCH\x10\xd4\xdf\x02\x12\x37\n1STRUCTURED_ASSESSMENT__QUESTIONNAIRE__POST_SEARCH\x10\xd5\xdf\x02\x12-\n\'SURGICAL_HISTORY_COMMAND__PRE_ORIGINATE\x10\xb0\xe7\x02\x12.\n(SURGICAL_HISTORY_COMMAND__POST_ORIGINATE\x10\xb1\xe7\x02\x12*\n$SURGICAL_HISTORY_COMMAND__PRE_UPDATE\x10\xb2\xe7\x02\x12+\n%SURGICAL_HISTORY_COMMAND__POST_UPDATE\x10\xb3\xe7\x02\x12*\n$SURGICAL_HISTORY_COMMAND__PRE_COMMIT\x10\xb4\xe7\x02\x12+\n%SURGICAL_HISTORY_COMMAND__POST_COMMIT\x10\xb5\xe7\x02\x12*\n$SURGICAL_HISTORY_COMMAND__PRE_DELETE\x10\xb6\xe7\x02\x12+\n%SURGICAL_HISTORY_COMMAND__POST_DELETE\x10\xb7\xe7\x02\x12\x32\n,SURGICAL_HISTORY_COMMAND__PRE_ENTER_IN_ERROR\x10\xb8\xe7\x02\x12\x33\n-SURGICAL_HISTORY_COMMAND__POST_ENTER_IN_ERROR\x10\xb9\xe7\x02\x12\x32\n,SURGICAL_HISTORY_COMMAND__PRE_EXECUTE_ACTION\x10\xba\xe7\x02\x12\x33\n-SURGICAL_HISTORY_COMMAND__POST_EXECUTE_ACTION\x10\xbb\xe7\x02\x12\x39\n3SURGICAL_HISTORY__PAST_SURGICAL_HISTORY__PRE_SEARCH\x10\xbc\xe7\x02\x12:\n4SURGICAL_HISTORY__PAST_SURGICAL_HISTORY__POST_SEARCH\x10\xbd\xe7\x02\x12!\n\x1bTASK_COMMAND__PRE_ORIGINATE\x10\x98\xef\x02\x12\"\n\x1cTASK_COMMAND__POST_ORIGINATE\x10\x99\xef\x02\x12\x1e\n\x18TASK_COMMAND__PRE_UPDATE\x10\x9a\xef\x02\x12\x1f\n\x19TASK_COMMAND__POST_UPDATE\x10\x9b\xef\x02\x12\x1e\n\x18TASK_COMMAND__PRE_COMMIT\x10\x9c\xef\x02\x12\x1f\n\x19TASK_COMMAND__POST_COMMIT\x10\x9d\xef\x02\x12\x1e\n\x18TASK_COMMAND__PRE_DELETE\x10\x9e\xef\x02\x12\x1f\n\x19TASK_COMMAND__POST_DELETE\x10\x9f\xef\x02\x12&\n TASK_COMMAND__PRE_ENTER_IN_ERROR\x10\xa0\xef\x02\x12\'\n!TASK_COMMAND__POST_ENTER_IN_ERROR\x10\xa1\xef\x02\x12&\n TASK_COMMAND__PRE_EXECUTE_ACTION\x10\xa2\xef\x02\x12\'\n!TASK_COMMAND__POST_EXECUTE_ACTION\x10\xa3\xef\x02\x12!\n\x1bTASK__ASSIGN_TO__PRE_SEARCH\x10\xa4\xef\x02\x12\"\n\x1cTASK__ASSIGN_TO__POST_SEARCH\x10\xa5\xef\x02\x12\x1e\n\x18TASK__LABELS__PRE_SEARCH\x10\xa6\xef\x02\x12\x1f\n\x19TASK__LABELS__POST_SEARCH\x10\xa7\xef\x02\x12(\n\"UPDATE_GOAL_COMMAND__PRE_ORIGINATE\x10\xd0\x86\x03\x12)\n#UPDATE_GOAL_COMMAND__POST_ORIGINATE\x10\xd1\x86\x03\x12%\n\x1fUPDATE_GOAL_COMMAND__PRE_UPDATE\x10\xd2\x86\x03\x12&\n UPDATE_GOAL_COMMAND__POST_UPDATE\x10\xd3\x86\x03\x12%\n\x1fUPDATE_GOAL_COMMAND__PRE_COMMIT\x10\xd4\x86\x03\x12&\n UPDATE_GOAL_COMMAND__POST_COMMIT\x10\xd5\x86\x03\x12%\n\x1fUPDATE_GOAL_COMMAND__PRE_DELETE\x10\xd6\x86\x03\x12&\n UPDATE_GOAL_COMMAND__POST_DELETE\x10\xd7\x86\x03\x12-\n\'UPDATE_GOAL_COMMAND__PRE_ENTER_IN_ERROR\x10\xd8\x86\x03\x12.\n(UPDATE_GOAL_COMMAND__POST_ENTER_IN_ERROR\x10\xd9\x86\x03\x12-\n\'UPDATE_GOAL_COMMAND__PRE_EXECUTE_ACTION\x10\xda\x86\x03\x12.\n(UPDATE_GOAL_COMMAND__POST_EXECUTE_ACTION\x10\xdb\x86\x03\x12-\n\'UPDATE_GOAL__GOAL_STATEMENT__PRE_SEARCH\x10\xdd\x86\x03\x12.\n(UPDATE_GOAL__GOAL_STATEMENT__POST_SEARCH\x10\xde\x86\x03\x12#\n\x1dVITALS_COMMAND__PRE_ORIGINATE\x10\xa0\x96\x03\x12$\n\x1eVITALS_COMMAND__POST_ORIGINATE\x10\xa1\x96\x03\x12 \n\x1aVITALS_COMMAND__PRE_UPDATE\x10\xa2\x96\x03\x12!\n\x1bVITALS_COMMAND__POST_UPDATE\x10\xa3\x96\x03\x12 \n\x1aVITALS_COMMAND__PRE_COMMIT\x10\xa4\x96\x03\x12!\n\x1bVITALS_COMMAND__POST_COMMIT\x10\xa5\x96\x03\x12 \n\x1aVITALS_COMMAND__PRE_DELETE\x10\xa6\x96\x03\x12!\n\x1bVITALS_COMMAND__POST_DELETE\x10\xa7\x96\x03\x12(\n\"VITALS_COMMAND__PRE_ENTER_IN_ERROR\x10\xa8\x96\x03\x12)\n#VITALS_COMMAND__POST_ENTER_IN_ERROR\x10\xa9\x96\x03\x12(\n\"VITALS_COMMAND__PRE_EXECUTE_ACTION\x10\xaa\x96\x03\x12)\n#VITALS_COMMAND__POST_EXECUTE_ACTION\x10\xab\x96\x03\x12.\n(ASSESS_CODING_GAP_COMMAND__PRE_ORIGINATE\x10\xa8\xbd\x03\x12/\n)ASSESS_CODING_GAP_COMMAND__POST_ORIGINATE\x10\xa9\xbd\x03\x12+\n%ASSESS_CODING_GAP_COMMAND__PRE_UPDATE\x10\xaa\xbd\x03\x12,\n&ASSESS_CODING_GAP_COMMAND__POST_UPDATE\x10\xab\xbd\x03\x12+\n%ASSESS_CODING_GAP_COMMAND__PRE_COMMIT\x10\xac\xbd\x03\x12,\n&ASSESS_CODING_GAP_COMMAND__POST_COMMIT\x10\xad\xbd\x03\x12+\n%ASSESS_CODING_GAP_COMMAND__PRE_DELETE\x10\xae\xbd\x03\x12,\n&ASSESS_CODING_GAP_COMMAND__POST_DELETE\x10\xaf\xbd\x03\x12\x33\n-ASSESS_CODING_GAP_COMMAND__PRE_ENTER_IN_ERROR\x10\xb0\xbd\x03\x12\x34\n.ASSESS_CODING_GAP_COMMAND__POST_ENTER_IN_ERROR\x10\xb1\xbd\x03\x12\x33\n-ASSESS_CODING_GAP_COMMAND__PRE_EXECUTE_ACTION\x10\xb2\xbd\x03\x12\x34\n.ASSESS_CODING_GAP_COMMAND__POST_EXECUTE_ACTION\x10\xb3\xbd\x03\x12-\n\'ASSESS_CODING_GAP__DIAGNOSE__PRE_SEARCH\x10\xb4\xbd\x03\x12.\n(ASSESS_CODING_GAP__DIAGNOSE__POST_SEARCH\x10\xb5\xbd\x03\x12.\n(CREATE_CODING_GAP_COMMAND__PRE_ORIGINATE\x10\x90\xc5\x03\x12/\n)CREATE_CODING_GAP_COMMAND__POST_ORIGINATE\x10\x91\xc5\x03\x12+\n%CREATE_CODING_GAP_COMMAND__PRE_UPDATE\x10\x92\xc5\x03\x12,\n&CREATE_CODING_GAP_COMMAND__POST_UPDATE\x10\x93\xc5\x03\x12+\n%CREATE_CODING_GAP_COMMAND__PRE_COMMIT\x10\x94\xc5\x03\x12,\n&CREATE_CODING_GAP_COMMAND__POST_COMMIT\x10\x95\xc5\x03\x12+\n%CREATE_CODING_GAP_COMMAND__PRE_DELETE\x10\x96\xc5\x03\x12,\n&CREATE_CODING_GAP_COMMAND__POST_DELETE\x10\x97\xc5\x03\x12\x33\n-CREATE_CODING_GAP_COMMAND__PRE_ENTER_IN_ERROR\x10\x98\xc5\x03\x12\x34\n.CREATE_CODING_GAP_COMMAND__POST_ENTER_IN_ERROR\x10\x99\xc5\x03\x12\x33\n-CREATE_CODING_GAP_COMMAND__PRE_EXECUTE_ACTION\x10\x9a\xc5\x03\x12\x34\n.CREATE_CODING_GAP_COMMAND__POST_EXECUTE_ACTION\x10\x9b\xc5\x03\x12-\n\'CREATE_CODING_GAP__DIAGNOSE__PRE_SEARCH\x10\x9c\xc5\x03\x12.\n(CREATE_CODING_GAP__DIAGNOSE__POST_SEARCH\x10\x9d\xc5\x03\x12\x30\n*VALIDATE_CODING_GAP_COMMAND__PRE_ORIGINATE\x10\xf8\xcc\x03\x12\x31\n+VALIDATE_CODING_GAP_COMMAND__POST_ORIGINATE\x10\xf9\xcc\x03\x12-\n\'VALIDATE_CODING_GAP_COMMAND__PRE_UPDATE\x10\xfa\xcc\x03\x12.\n(VALIDATE_CODING_GAP_COMMAND__POST_UPDATE\x10\xfb\xcc\x03\x12-\n\'VALIDATE_CODING_GAP_COMMAND__PRE_COMMIT\x10\xfc\xcc\x03\x12.\n(VALIDATE_CODING_GAP_COMMAND__POST_COMMIT\x10\xfd\xcc\x03\x12-\n\'VALIDATE_CODING_GAP_COMMAND__PRE_DELETE\x10\xfe\xcc\x03\x12.\n(VALIDATE_CODING_GAP_COMMAND__POST_DELETE\x10\xff\xcc\x03\x12\x35\n/VALIDATE_CODING_GAP_COMMAND__PRE_ENTER_IN_ERROR\x10\x80\xcd\x03\x12\x36\n0VALIDATE_CODING_GAP_COMMAND__POST_ENTER_IN_ERROR\x10\x81\xcd\x03\x12\x35\n/VALIDATE_CODING_GAP_COMMAND__PRE_EXECUTE_ACTION\x10\x82\xcd\x03\x12\x36\n0VALIDATE_CODING_GAP_COMMAND__POST_EXECUTE_ACTION\x10\x83\xcd\x03\x12-\n\'DEFER_CODING_GAP_COMMAND__PRE_ORIGINATE\x10\xe0\xd4\x03\x12.\n(DEFER_CODING_GAP_COMMAND__POST_ORIGINATE\x10\xe1\xd4\x03\x12*\n$DEFER_CODING_GAP_COMMAND__PRE_UPDATE\x10\xe2\xd4\x03\x12+\n%DEFER_CODING_GAP_COMMAND__POST_UPDATE\x10\xe3\xd4\x03\x12*\n$DEFER_CODING_GAP_COMMAND__PRE_COMMIT\x10\xe4\xd4\x03\x12+\n%DEFER_CODING_GAP_COMMAND__POST_COMMIT\x10\xe5\xd4\x03\x12*\n$DEFER_CODING_GAP_COMMAND__PRE_DELETE\x10\xe6\xd4\x03\x12+\n%DEFER_CODING_GAP_COMMAND__POST_DELETE\x10\xe7\xd4\x03\x12\x32\n,DEFER_CODING_GAP_COMMAND__PRE_ENTER_IN_ERROR\x10\xe8\xd4\x03\x12\x33\n-DEFER_CODING_GAP_COMMAND__POST_ENTER_IN_ERROR\x10\xe9\xd4\x03\x12\x32\n,DEFER_CODING_GAP_COMMAND__PRE_EXECUTE_ACTION\x10\xea\xd4\x03\x12\x33\n-DEFER_CODING_GAP_COMMAND__POST_EXECUTE_ACTION\x10\xeb\xd4\x03\x12\x1f\n\x19PATIENT_CHART__CONDITIONS\x10\xa0\x8d\x06\x12\x32\n,PATIENT_CHART_SUMMARY__SECTION_CONFIGURATION\x10\xa1\x8d\x06\x12\x17\n\x11\x43LAIM__CONDITIONS\x10\x88\x95\x06\x12\x14\n\x0ePLUGIN_CREATED\x10\xf0\x9c\x06\x12\x14\n\x0ePLUGIN_UPDATED\x10\xf1\x9c\x06\x62\x06proto3')
19
+
20
+ _globals = globals()
21
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
22
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'canvas_generated.messages.events_pb2', _globals)
23
+ if _descriptor._USE_C_DESCRIPTORS == False:
24
+ DESCRIPTOR._options = None
25
+ _globals['_EVENTTYPE']._serialized_start=235
26
+ _globals['_EVENTTYPE']._serialized_end=25292
27
+ _globals['_EVENT']._serialized_start=91
28
+ _globals['_EVENT']._serialized_end=164
29
+ _globals['_EVENTRESPONSE']._serialized_start=166
30
+ _globals['_EVENTRESPONSE']._serialized_end=231
31
+ # @@protoc_insertion_point(module_scope)
@@ -87,6 +87,8 @@ class EventType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
87
87
  OBSERVATION_UPDATED: _ClassVar[EventType]
88
88
  DETECTED_ISSUE_CREATED: _ClassVar[EventType]
89
89
  DETECTED_ISSUE_UPDATED: _ClassVar[EventType]
90
+ TASK_CLOSED: _ClassVar[EventType]
91
+ TASK_COMPLETED: _ClassVar[EventType]
90
92
  PRE_COMMAND_ORIGINATE: _ClassVar[EventType]
91
93
  POST_COMMAND_ORIGINATE: _ClassVar[EventType]
92
94
  PRE_COMMAND_UPDATE: _ClassVar[EventType]
@@ -694,6 +696,8 @@ OBSERVATION_CREATED: EventType
694
696
  OBSERVATION_UPDATED: EventType
695
697
  DETECTED_ISSUE_CREATED: EventType
696
698
  DETECTED_ISSUE_UPDATED: EventType
699
+ TASK_CLOSED: EventType
700
+ TASK_COMPLETED: EventType
697
701
  PRE_COMMAND_ORIGINATE: EventType
698
702
  POST_COMMAND_ORIGINATE: EventType
699
703
  PRE_COMMAND_UPDATE: EventType
@@ -34,15 +34,18 @@ class Model(BaseModel):
34
34
  class_name = self.__repr_name__() # type: ignore[misc]
35
35
 
36
36
  class_name_article = "an" if class_name.startswith(("A", "E", "I", "O", "U")) else "a"
37
- return [
38
- self._create_error_detail(
39
- "missing",
40
- f"Field '{field}' is required to {method.replace('_', ' ')} {class_name_article} {class_name}",
41
- v,
42
- )
43
- for field in required_fields
44
- if (v := getattr(self, field)) is None
45
- ]
37
+
38
+ error_details = []
39
+ for field in required_fields:
40
+ fields = field.split("|")
41
+ if not all(getattr(self, f) is None for f in fields):
42
+ continue
43
+ field_description = " or ".join([f"'{f}'" for f in fields])
44
+ message = f"Field {field_description} is required to {method.replace('_', ' ')} {class_name_article} {class_name}"
45
+ error = self._create_error_detail("missing", message, None)
46
+ error_details.append(error)
47
+
48
+ return error_details
46
49
 
47
50
  def _validate_before_effect(self, method: str) -> None:
48
51
  self.model_validate(self)
@@ -83,7 +83,7 @@ class _BaseCommand(Model):
83
83
  if name not in base_properties
84
84
  }
85
85
 
86
- def originate(self) -> Effect:
86
+ def originate(self, line_number: int = -1) -> Effect:
87
87
  """Originate a new command in the note body."""
88
88
  self._validate_before_effect("originate")
89
89
  return Effect(
@@ -92,6 +92,7 @@ class _BaseCommand(Model):
92
92
  {
93
93
  "note": self.note_uuid,
94
94
  "data": self.values,
95
+ "line_number": line_number,
95
96
  }
96
97
  ),
97
98
  )
@@ -13,7 +13,13 @@ class AddBannerAlert(_BaseEffect):
13
13
 
14
14
  class Meta:
15
15
  effect_type = EffectType.ADD_BANNER_ALERT
16
- apply_required_fields = ("patient_id", "key", "narrative", "placement", "intent")
16
+ apply_required_fields = (
17
+ "patient_id|patient_filter",
18
+ "key",
19
+ "narrative",
20
+ "placement",
21
+ "intent",
22
+ )
17
23
 
18
24
  class Placement(Enum):
19
25
  CHART = "chart"
@@ -47,4 +53,9 @@ class AddBannerAlert(_BaseEffect):
47
53
  @property
48
54
  def effect_payload(self) -> dict[str, Any]:
49
55
  """The payload of the effect."""
50
- return {"patient": self.patient_id, "key": self.key, "data": self.values}
56
+ return {
57
+ "patient": self.patient_id,
58
+ "patient_filter": self.patient_filter,
59
+ "key": self.key,
60
+ "data": self.values,
61
+ }
@@ -10,7 +10,7 @@ class RemoveBannerAlert(_BaseEffect):
10
10
 
11
11
  class Meta:
12
12
  effect_type = EffectType.REMOVE_BANNER_ALERT
13
- apply_required_fields = ("patient_id", "key")
13
+ apply_required_fields = ("patient_id|patient_filter", "key")
14
14
 
15
15
  patient_id: str | None = None
16
16
  key: str | None = None
@@ -18,4 +18,4 @@ class RemoveBannerAlert(_BaseEffect):
18
18
  @property
19
19
  def effect_payload(self) -> dict[str, Any]:
20
20
  """The payload of the effect."""
21
- return {"patient": self.patient_id, "key": self.key}
21
+ return {"patient": self.patient_id, "patient_filter": self.patient_filter, "key": self.key}
@@ -178,12 +178,28 @@ def test_protocol_that_adds_banner_alert(
178
178
  "placement": [AddBannerAlert.Placement.APPOINTMENT_CARD],
179
179
  "intent": AddBannerAlert.Intent.INFO,
180
180
  },
181
- '{"patient": "uuid", "key": "test-key", "data": {"narrative": "hellooo", "placement": ["appointment_card"], "intent": "info", "href": null}}',
181
+ '{"patient": "uuid", "patient_filter": null, "key": "test-key", "data": {"narrative": "hellooo", "placement": ["appointment_card"], "intent": "info", "href": null}}',
182
+ ),
183
+ (
184
+ AddBannerAlert,
185
+ {
186
+ "patient_filter": {"active": True},
187
+ "key": "test-key",
188
+ "narrative": "hellooo",
189
+ "placement": [AddBannerAlert.Placement.APPOINTMENT_CARD],
190
+ "intent": AddBannerAlert.Intent.INFO,
191
+ },
192
+ '{"patient": null, "patient_filter": {"active": true}, "key": "test-key", "data": {"narrative": "hellooo", "placement": ["appointment_card"], "intent": "info", "href": null}}',
182
193
  ),
183
194
  (
184
195
  RemoveBannerAlert,
185
196
  {"patient_id": "uuid", "key": "testeroo"},
186
- '{"patient": "uuid", "key": "testeroo"}',
197
+ '{"patient": "uuid", "patient_filter": null, "key": "testeroo"}',
198
+ ),
199
+ (
200
+ RemoveBannerAlert,
201
+ {"patient_filter": {"active": True}, "key": "testeroo"},
202
+ '{"patient": null, "patient_filter": {"active": true}, "key": "testeroo"}',
187
203
  ),
188
204
  ],
189
205
  )
@@ -204,7 +220,7 @@ def test_banner_alert_apply_method_succeeds_with_all_required_fields(
204
220
  AddBannerAlert,
205
221
  [
206
222
  "5 validation errors for AddBannerAlert",
207
- "Field 'patient_id' is required to apply an AddBannerAlert [type=missing",
223
+ "Field 'patient_id' or 'patient_filter' is required to apply an AddBannerAlert [type=missing",
208
224
  "Field 'key' is required to apply an AddBannerAlert [type=missing",
209
225
  "Field 'narrative' is required to apply an AddBannerAlert [type=missing",
210
226
  "Field 'placement' is required to apply an AddBannerAlert [type=missing",
@@ -215,7 +231,7 @@ def test_banner_alert_apply_method_succeeds_with_all_required_fields(
215
231
  RemoveBannerAlert,
216
232
  [
217
233
  "2 validation errors for RemoveBannerAlert",
218
- "Field 'patient_id' is required to apply a RemoveBannerAlert [type=missing",
234
+ "Field 'patient_id' or 'patient_filter' is required to apply a RemoveBannerAlert [type=missing",
219
235
  "Field 'key' is required to apply a RemoveBannerAlert [type=missing",
220
236
  ],
221
237
  ),
@@ -10,6 +10,8 @@ class _BaseEffect(Model):
10
10
  A Canvas Effect that changes user behavior or autonomously performs activities on behalf of users.
11
11
  """
12
12
 
13
+ patient_filter: dict | None = None
14
+
13
15
  class Meta:
14
16
  effect_type = EffectType.UNKNOWN_EFFECT
15
17
 
@@ -42,7 +42,7 @@ class ProtocolCard(_BaseEffect):
42
42
 
43
43
  class Meta:
44
44
  effect_type = EffectType.ADD_OR_UPDATE_PROTOCOL_CARD
45
- apply_required_fields = ("patient_id", "key")
45
+ apply_required_fields = ("patient_id|patient_filter", "key")
46
46
 
47
47
  patient_id: str | None = None
48
48
  key: str | None = None
@@ -51,6 +51,7 @@ class ProtocolCard(_BaseEffect):
51
51
  recommendations: list[Recommendation] = []
52
52
  status: Status = Status.DUE
53
53
  feedback_enabled: bool = False
54
+ due_in: int = -1
54
55
 
55
56
  @property
56
57
  def values(self) -> dict[str, Any]:
@@ -63,12 +64,18 @@ class ProtocolCard(_BaseEffect):
63
64
  ],
64
65
  "status": self.status.value,
65
66
  "feedback_enabled": self.feedback_enabled,
67
+ "due_in": self.due_in,
66
68
  }
67
69
 
68
70
  @property
69
71
  def effect_payload(self) -> dict[str, Any]:
70
72
  """The payload of the effect."""
71
- return {"patient": self.patient_id, "key": self.key, "data": self.values}
73
+ return {
74
+ "patient": self.patient_id,
75
+ "patient_filter": self.patient_filter,
76
+ "key": self.key,
77
+ "data": self.values,
78
+ }
72
79
 
73
80
  def add_recommendation(
74
81
  self,
@@ -25,7 +25,7 @@ def test_apply_method_succeeds_with_patient_id_and_key() -> None:
25
25
  applied = p.apply()
26
26
  assert (
27
27
  applied.payload
28
- == '{"patient": "uuid", "key": "something-unique", "data": {"title": "", "narrative": "", "recommendations": [], "status": "due", "feedback_enabled": false}}'
28
+ == '{"patient": "uuid", "patient_filter": null, "key": "something-unique", "data": {"title": "", "narrative": "", "recommendations": [], "status": "due", "feedback_enabled": false, "due_in": -1}}'
29
29
  )
30
30
 
31
31
 
@@ -38,7 +38,7 @@ def test_apply_method_raises_error_without_patient_id_and_key() -> None:
38
38
 
39
39
  assert "2 validation errors for ProtocolCard" in err_msg
40
40
  assert (
41
- "Field 'patient_id' is required to apply a ProtocolCard [type=missing, input_value=None, input_type=NoneType]"
41
+ "Field 'patient_id' or 'patient_filter' is required to apply a ProtocolCard [type=missing, input_value=None, input_type=NoneType]"
42
42
  in err_msg
43
43
  )
44
44
  assert (
@@ -112,7 +112,6 @@ def test_add_recommendations(
112
112
  p = ProtocolCard(**init_params)
113
113
  p.add_recommendation(**rec1_params)
114
114
  p.recommendations.append(Recommendation(**rec2_params))
115
-
116
115
  assert p.values == {
117
116
  "title": init_params["title"],
118
117
  "narrative": init_params["narrative"],
@@ -135,6 +134,7 @@ def test_add_recommendations(
135
134
  },
136
135
  ],
137
136
  "status": "due",
137
+ "due_in": -1,
138
138
  "feedback_enabled": False,
139
139
  }
140
140
 
@@ -0,0 +1,99 @@
1
+ from datetime import datetime
2
+ from enum import Enum
3
+ from typing import Any, cast
4
+
5
+ from canvas_sdk.effects.base import EffectType, _BaseEffect
6
+
7
+
8
+ class TaskStatus(Enum):
9
+ """TaskStatus."""
10
+
11
+ COMPLETED = "COMPLETED"
12
+ CLOSED = "CLOSED"
13
+ OPEN = "OPEN"
14
+
15
+
16
+ class AddTask(_BaseEffect):
17
+ """
18
+ An Effect that will create a Task in Canvas.
19
+ """
20
+
21
+ class Meta:
22
+ effect_type = EffectType.CREATE_TASK
23
+ apply_required_fields = ("title",)
24
+
25
+ assignee_id: str | None = None
26
+ patient_id: str | None = None
27
+ title: str | None = None
28
+ due: datetime | None = None
29
+ status: TaskStatus = TaskStatus.OPEN
30
+ labels: list[str] = []
31
+
32
+ @property
33
+ def values(self) -> dict[str, Any]:
34
+ """The values for Task addition."""
35
+ return {
36
+ "patient": {"id": self.patient_id},
37
+ "due": self.due.isoformat() if self.due else None,
38
+ "assignee": {"id": self.assignee_id},
39
+ "title": self.title,
40
+ "status": self.status.value,
41
+ "labels": self.labels,
42
+ }
43
+
44
+
45
+ class AddTaskComment(_BaseEffect):
46
+ """
47
+ An Effect that will create a Task Comment on a Task.
48
+ """
49
+
50
+ class Meta:
51
+ effect_type = EffectType.CREATE_TASK_COMMENT
52
+ apply_required_fields = (
53
+ "body",
54
+ "task_id",
55
+ )
56
+
57
+ body: str | None = None
58
+ task_id: str | None = None
59
+
60
+ @property
61
+ def values(self) -> dict[str, Any]:
62
+ """The values for adding a task comment."""
63
+ return {"task": {"id": self.task_id}, "body": self.body}
64
+
65
+
66
+ class UpdateTask(_BaseEffect):
67
+ """
68
+ An Effect that will update a Task in Canvas.
69
+ """
70
+
71
+ class Meta:
72
+ effect_type = EffectType.UPDATE_TASK
73
+ apply_required_fields = ("id",)
74
+
75
+ id: str | None = None
76
+ assignee_id: str | None = None
77
+ patient_id: str | None = None
78
+ title: str | None = None
79
+ due: datetime | None = None
80
+ status: TaskStatus = TaskStatus.OPEN
81
+ labels: list[str] = []
82
+
83
+ @property
84
+ def values(self) -> dict[str, Any]:
85
+ """The values for adding a task comment."""
86
+ value_dict: dict[str, Any] = {}
87
+ # Only add the fields that have been explicitly set on the model (exclude_unset=True).
88
+ # Oherwise, the effect interpreter will set values to null based on their defaults.
89
+ set_fields = self.model_dump(exclude_unset=True)
90
+ for field, val in set_fields.items():
91
+ if field.endswith("_id"):
92
+ value_dict[field.split("_")[0]] = {"id": val}
93
+ elif field == "due" and val is not None:
94
+ value_dict[field] = cast(datetime, val).isoformat()
95
+ elif field == "status":
96
+ value_dict[field] = cast(TaskStatus, val).value
97
+ else:
98
+ value_dict[field] = getattr(self, field)
99
+ return value_dict
@@ -0,0 +1,11 @@
1
+ from typing import Any
2
+
3
+ from canvas_sdk.handlers.base import BaseHandler
4
+
5
+
6
+ class BaseProtocol(BaseHandler):
7
+ """
8
+ The class that protocols inherit from.
9
+ """
10
+
11
+ pass
@@ -0,0 +1,99 @@
1
+ from typing import Any, cast
2
+
3
+ import arrow
4
+ from django.db.models import Model
5
+
6
+ from canvas_sdk.events import EventType
7
+ from canvas_sdk.protocols.base import BaseProtocol
8
+ from canvas_sdk.protocols.timeframe import Timeframe
9
+ from canvas_sdk.v1.data.condition import Condition
10
+ from canvas_sdk.v1.data.medication import Medication
11
+
12
+
13
+ class ClinicalQualityMeasure(BaseProtocol):
14
+ """
15
+ The class that ClinicalQualityMeasure protocols inherit from.
16
+ """
17
+
18
+ class Meta:
19
+ title: str = ""
20
+ identifiers: list[str] = []
21
+ description: str = ""
22
+ information: str = ""
23
+ references: list[str] = []
24
+ source_attributes: dict[str, str]
25
+ types: list[str] = []
26
+ authors: list[str] = []
27
+ show_in_chart: bool = True
28
+ show_in_population: bool = True
29
+ can_be_snoozed: bool = True
30
+ is_abstract: bool = False
31
+ is_predictive: bool = False
32
+
33
+ def __init__(self, *args: Any, **kwargs: Any):
34
+ self._patient_id: str | None = None
35
+ self.now = arrow.utcnow()
36
+ super().__init__(*args, **kwargs)
37
+
38
+ @classmethod
39
+ def _meta(cls) -> dict[str, Any]:
40
+ """
41
+ Meta properties of the protocol in dictionary form.
42
+ """
43
+ base_meta = {
44
+ k: v for k, v in ClinicalQualityMeasure.Meta.__dict__.items() if not k.startswith("__")
45
+ }
46
+ class_meta = {k: v for k, v in cls.Meta.__dict__.items() if not k.startswith("__")}
47
+
48
+ return base_meta | class_meta
49
+
50
+ @classmethod
51
+ def protocol_key(cls) -> str:
52
+ """
53
+ External key used to identify the protocol.
54
+ """
55
+ return cls.__name__
56
+
57
+ @property
58
+ def timeframe(self) -> Timeframe:
59
+ """The default Timeframe (self.timeframe) for all protocols.
60
+ This defaults to have a start of 1 year ago and an end time of the current time.
61
+ Plugin authors can override this if a different timeframe is desired.
62
+ """
63
+ end = self.now
64
+ return Timeframe(start=end.shift(years=-1), end=end)
65
+
66
+ # TODO: This approach should be considered against the alternative of just including the patient
67
+ # ID in the event context, given that so many events will be patient-centric.
68
+ def patient_id_from_target(self) -> str:
69
+ """
70
+ Get and return the patient ID from an event target.
71
+
72
+ This method will attempt to obtain the patient ID from the event target for supported event
73
+ types. It stores the patient ID on a member variable so that it can be referenced without
74
+ incurring more SQL queries.
75
+ """
76
+
77
+ def patient_id(model: type[Model]) -> str:
78
+ return cast(
79
+ str,
80
+ model._default_manager.select_related("patient")
81
+ .values_list("patient__id")
82
+ .get(id=self.event.target)[0],
83
+ )
84
+
85
+ if not self._patient_id:
86
+ # TODO: Add cases for ProtocolOverride
87
+ match self.event.type:
88
+ case EventType.CONDITION_CREATED | EventType.CONDITION_UPDATED:
89
+ self._patient_id = patient_id(Condition)
90
+ case (
91
+ EventType.MEDICATION_LIST_ITEM_CREATED | EventType.MEDICATION_LIST_ITEM_UPDATED
92
+ ):
93
+ self._patient_id = patient_id(Medication)
94
+ case _:
95
+ raise AssertionError(
96
+ f"Event type {self.event.type} not supported by 'patient_id_from_event'"
97
+ )
98
+
99
+ return self._patient_id
@@ -0,0 +1,39 @@
1
+ import arrow
2
+
3
+
4
+ class Timeframe:
5
+ """A class representing a timeframe with a start and and end."""
6
+
7
+ def __init__(self, start: arrow.Arrow, end: arrow.Arrow):
8
+ self.start = start
9
+ self.end = end
10
+
11
+ def __str__(self) -> str:
12
+ return f"<Timeframe start={self.start}, end={self.end}>"
13
+
14
+ @property
15
+ def duration(self) -> int:
16
+ """Returns the number of days in the timeframe."""
17
+ return (self.end - self.start).days
18
+
19
+ def increased_by(self, years: int = 0, months: int = 0, days: int = 0) -> "Timeframe":
20
+ """Returns a new Timeframe object increased by the years, months, days in the arguments."""
21
+ start = self.start
22
+ end = self.end
23
+
24
+ if years > 0:
25
+ end = end.shift(years=years)
26
+ elif years < 0:
27
+ start = start.shift(years=years)
28
+
29
+ if months > 0:
30
+ end = end.shift(months=months)
31
+ elif months < 0:
32
+ start = start.shift(months=months)
33
+
34
+ if days > 0:
35
+ end = end.shift(days=days)
36
+ elif days < 0:
37
+ start = start.shift(days=days)
38
+
39
+ return Timeframe(start=start, end=end)
@@ -1,3 +1,6 @@
1
+ from .billing import BillingLineItem
1
2
  from .condition import Condition, ConditionCoding
2
3
  from .medication import Medication, MedicationCoding
3
4
  from .patient import Patient
5
+ from .staff import Staff
6
+ from .task import Task, TaskComment, TaskLabel