canvas 0.43.0__tar.gz → 0.44.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 (309) hide show
  1. {canvas-0.43.0 → canvas-0.44.0}/PKG-INFO +1 -2
  2. canvas-0.44.0/canvas_cli/apps/auth/storage.py +65 -0
  3. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/auth/utils.py +6 -42
  4. {canvas-0.43.0 → canvas-0.44.0}/canvas_generated/messages/effects_pb2.py +2 -2
  5. {canvas-0.43.0 → canvas-0.44.0}/canvas_generated/messages/effects_pb2.pyi +10 -0
  6. canvas-0.44.0/canvas_sdk/effects/note/appointment.py +233 -0
  7. canvas-0.44.0/canvas_sdk/effects/note/base.py +227 -0
  8. canvas-0.44.0/canvas_sdk/effects/note/note.py +138 -0
  9. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/v1/data/__init__.py +17 -1
  10. canvas-0.44.0/canvas_sdk/v1/data/business_line.py +35 -0
  11. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/v1/data/patient.py +17 -1
  12. canvas-0.44.0/canvas_sdk/v1/data/patient_consent.py +92 -0
  13. canvas-0.44.0/canvas_sdk/v1/data/payor_specific_charge.py +28 -0
  14. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/v1/data/user.py +2 -0
  15. {canvas-0.43.0 → canvas-0.44.0}/protobufs/canvas_generated/messages/effects.proto +6 -0
  16. {canvas-0.43.0 → canvas-0.44.0}/pyproject.toml +2 -2
  17. canvas-0.43.0/canvas_sdk/effects/note/appointment.py +0 -148
  18. canvas-0.43.0/canvas_sdk/effects/note/base.py +0 -129
  19. canvas-0.43.0/canvas_sdk/effects/note/note.py +0 -79
  20. {canvas-0.43.0 → canvas-0.44.0}/.gitignore +0 -0
  21. {canvas-0.43.0 → canvas-0.44.0}/README.md +0 -0
  22. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/__init__.py +0 -0
  23. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/__init__.py +0 -0
  24. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/auth/__init__.py +0 -0
  25. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/__init__.py +0 -0
  26. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/emit.py +0 -0
  27. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/ALLERGY_INTOLERANCE_CREATED.ndjson +0 -0
  28. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/ALLERGY_INTOLERANCE_UPDATED.ndjson +0 -0
  29. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_CANCELED.ndjson +0 -0
  30. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_CHECKED_IN.ndjson +0 -0
  31. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_CREATED.ndjson +0 -0
  32. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_NO_SHOWED.ndjson +0 -0
  33. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_RESCHEDULED.ndjson +0 -0
  34. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_RESTORED.ndjson +0 -0
  35. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_UPDATED.ndjson +0 -0
  36. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__CONDITION_SELECTED.ndjson +0 -0
  37. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__POST_COMMIT.ndjson +0 -0
  38. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__POST_ORIGINATE.ndjson +0 -0
  39. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__POST_UPDATE.ndjson +0 -0
  40. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__PRE_COMMIT.ndjson +0 -0
  41. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__PRE_ORIGINATE.ndjson +0 -0
  42. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__PRE_UPDATE.ndjson +0 -0
  43. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/BILLING_LINE_ITEM_CREATED.ndjson +0 -0
  44. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/BILLING_LINE_ITEM_UPDATED.ndjson +0 -0
  45. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/CONDITION_ASSESSED.ndjson +0 -0
  46. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/CONDITION_CREATED.ndjson +0 -0
  47. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/CONDITION_UPDATED.ndjson +0 -0
  48. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/CRON.ndjson +0 -0
  49. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/ENCOUNTER_CREATED.ndjson +0 -0
  50. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/ENCOUNTER_UPDATED.ndjson +0 -0
  51. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/IMMUNIZATION_CREATED.ndjson +0 -0
  52. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/IMMUNIZATION_STATEMENT_CREATED.ndjson +0 -0
  53. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/IMMUNIZATION_STATEMENT_UPDATED.ndjson +0 -0
  54. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/IMMUNIZATION_UPDATED.ndjson +0 -0
  55. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/INTERVIEW_CREATED.ndjson +0 -0
  56. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/INTERVIEW_UPDATED.ndjson +0 -0
  57. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/LAB_ORDER_CREATED.ndjson +0 -0
  58. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/LAB_ORDER_UPDATED.ndjson +0 -0
  59. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/MEDICATION_LIST_ITEM_CREATED.ndjson +0 -0
  60. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/MEDICATION_LIST_ITEM_UPDATED.ndjson +0 -0
  61. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__POST_COMMIT.ndjson +0 -0
  62. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__POST_ORIGINATE.ndjson +0 -0
  63. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__POST_UPDATE.ndjson +0 -0
  64. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__PRE_COMMIT.ndjson +0 -0
  65. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__PRE_ORIGINATE.ndjson +0 -0
  66. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__PRE_UPDATE.ndjson +0 -0
  67. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT__MEDICATION__POST_SEARCH.ndjson +0 -0
  68. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/PATIENT_CREATED.ndjson +0 -0
  69. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/PATIENT_UPDATED.ndjson +0 -0
  70. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/PLAN_COMMAND__POST_ORIGINATE.ndjson +0 -0
  71. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/PLAN_COMMAND__PRE_ORIGINATE.ndjson +0 -0
  72. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__POST_COMMIT.ndjson +0 -0
  73. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__POST_ORIGINATE.ndjson +0 -0
  74. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__POST_UPDATE.ndjson +0 -0
  75. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__PRE_COMMIT.ndjson +0 -0
  76. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__PRE_ORIGINATE.ndjson +0 -0
  77. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__PRE_UPDATE.ndjson +0 -0
  78. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE__QUESTIONNAIRE__POST_SEARCH.ndjson +0 -0
  79. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/SIMPLE_API_REQUEST.ndjson +0 -0
  80. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/TASK_COMMENT_CREATED.ndjson +0 -0
  81. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/TASK_CREATED.ndjson +0 -0
  82. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/TASK_UPDATED.ndjson +0 -0
  83. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/VITAL_SIGN_CREATED.ndjson +0 -0
  84. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/emit/event_fixtures/VITAL_SIGN_UPDATED.ndjson +0 -0
  85. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/logs/__init__.py +0 -0
  86. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/logs/logs.py +0 -0
  87. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/plugin/__init__.py +0 -0
  88. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/plugin/plugin.py +0 -0
  89. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/run_plugins/__init__.py +0 -0
  90. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/apps/run_plugins/run_plugins.py +0 -0
  91. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/main.py +0 -0
  92. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/templates/plugins/application/cookiecutter.json +0 -0
  93. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/CANVAS_MANIFEST.json +0 -0
  94. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/README.md +0 -0
  95. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/applications/__init__.py +0 -0
  96. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/applications/my_application.py +0 -0
  97. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/assets/python-logo.png +0 -0
  98. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/templates/plugins/default/cookiecutter.json +0 -0
  99. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/CANVAS_MANIFEST.json +0 -0
  100. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/README.md +0 -0
  101. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/protocols/__init__.py +0 -0
  102. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/protocols/my_protocol.py +0 -0
  103. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/utils/__init__.py +0 -0
  104. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/utils/context/__init__.py +0 -0
  105. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/utils/context/context.py +0 -0
  106. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/utils/print/__init__.py +0 -0
  107. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/utils/print/print.py +0 -0
  108. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/utils/urls/__init__.py +0 -0
  109. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/utils/urls/urls.py +0 -0
  110. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/utils/validators/__init__.py +0 -0
  111. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/utils/validators/manifest_schema.py +0 -0
  112. {canvas-0.43.0 → canvas-0.44.0}/canvas_cli/utils/validators/validators.py +0 -0
  113. {canvas-0.43.0 → canvas-0.44.0}/canvas_generated/messages/effects_pb2_grpc.py +0 -0
  114. {canvas-0.43.0 → canvas-0.44.0}/canvas_generated/messages/events_pb2.py +0 -0
  115. {canvas-0.43.0 → canvas-0.44.0}/canvas_generated/messages/events_pb2.pyi +0 -0
  116. {canvas-0.43.0 → canvas-0.44.0}/canvas_generated/messages/events_pb2_grpc.py +0 -0
  117. {canvas-0.43.0 → canvas-0.44.0}/canvas_generated/messages/plugins_pb2.py +0 -0
  118. {canvas-0.43.0 → canvas-0.44.0}/canvas_generated/messages/plugins_pb2.pyi +0 -0
  119. {canvas-0.43.0 → canvas-0.44.0}/canvas_generated/messages/plugins_pb2_grpc.py +0 -0
  120. {canvas-0.43.0 → canvas-0.44.0}/canvas_generated/services/plugin_runner_pb2.py +0 -0
  121. {canvas-0.43.0 → canvas-0.44.0}/canvas_generated/services/plugin_runner_pb2.pyi +0 -0
  122. {canvas-0.43.0 → canvas-0.44.0}/canvas_generated/services/plugin_runner_pb2_grpc.py +0 -0
  123. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/__init__.py +0 -0
  124. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/base.py +0 -0
  125. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/caching/__init__.py +0 -0
  126. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/caching/base.py +0 -0
  127. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/caching/client.py +0 -0
  128. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/caching/exceptions.py +0 -0
  129. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/caching/plugins.py +0 -0
  130. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/caching/utils.py +0 -0
  131. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/commands/__init__.py +0 -0
  132. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/commands/base.py +0 -0
  133. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/commands/commands/__init__.py +0 -0
  134. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/commands/commands/adjust_prescription.py +0 -0
  135. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/commands/commands/allergy.py +0 -0
  136. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/commands/commands/assess.py +0 -0
  137. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/commands/commands/change_medication.py +0 -0
  138. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/commands/commands/chart_section_review.py +0 -0
  139. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/commands/commands/close_goal.py +0 -0
  140. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/commands/commands/diagnose.py +0 -0
  141. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/commands/commands/exam.py +0 -0
  142. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/commands/commands/family_history.py +0 -0
  143. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/commands/commands/follow_up.py +0 -0
  144. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/commands/commands/goal.py +0 -0
  145. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/commands/commands/history_present_illness.py +0 -0
  146. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/commands/commands/imaging_order.py +0 -0
  147. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/commands/commands/instruct.py +0 -0
  148. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/commands/commands/lab_order.py +0 -0
  149. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/commands/commands/medical_history.py +0 -0
  150. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/commands/commands/medication_statement.py +0 -0
  151. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/commands/commands/past_surgical_history.py +0 -0
  152. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/commands/commands/perform.py +0 -0
  153. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/commands/commands/plan.py +0 -0
  154. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/commands/commands/prescribe.py +0 -0
  155. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/commands/commands/questionnaire/__init__.py +0 -0
  156. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/commands/commands/questionnaire/question.py +0 -0
  157. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/commands/commands/reason_for_visit.py +0 -0
  158. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/commands/commands/refer.py +0 -0
  159. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/commands/commands/refill.py +0 -0
  160. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/commands/commands/remove_allergy.py +0 -0
  161. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/commands/commands/resolve_condition.py +0 -0
  162. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/commands/commands/review_of_systems.py +0 -0
  163. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/commands/commands/stop_medication.py +0 -0
  164. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/commands/commands/structured_assessment.py +0 -0
  165. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/commands/commands/task.py +0 -0
  166. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/commands/commands/update_diagnosis.py +0 -0
  167. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/commands/commands/update_goal.py +0 -0
  168. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/commands/commands/vitals.py +0 -0
  169. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/commands/constants.py +0 -0
  170. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/effects/__init__.py +0 -0
  171. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/effects/banner_alert/__init__.py +0 -0
  172. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/effects/banner_alert/add_banner_alert.py +0 -0
  173. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/effects/banner_alert/remove_banner_alert.py +0 -0
  174. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/effects/base.py +0 -0
  175. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/effects/billing_line_item/__init__.py +0 -0
  176. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/effects/billing_line_item/add_billing_line_item.py +0 -0
  177. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/effects/billing_line_item/remove_billing_line_item.py +0 -0
  178. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/effects/billing_line_item/update_billing_line_item.py +0 -0
  179. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/effects/launch_modal.py +0 -0
  180. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/effects/note/__init__.py +0 -0
  181. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/effects/note/message.py +0 -0
  182. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/effects/patient/__init__.py +0 -0
  183. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/effects/patient/base.py +0 -0
  184. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/effects/patient/create_patient_external_identifier.py +0 -0
  185. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/effects/patient_chart_summary_configuration.py +0 -0
  186. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/effects/patient_metadata/__init__.py +0 -0
  187. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/effects/patient_metadata/base.py +0 -0
  188. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/effects/patient_metadata/patient_metadata_create_form.py +0 -0
  189. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/effects/patient_portal/__init__.py +0 -0
  190. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/effects/patient_portal/application_configuration.py +0 -0
  191. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/effects/patient_portal/form_result.py +0 -0
  192. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/effects/patient_portal_menu_configuration.py +0 -0
  193. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/effects/patient_profile_configuration.py +0 -0
  194. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/effects/protocol_card/__init__.py +0 -0
  195. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/effects/protocol_card/protocol_card.py +0 -0
  196. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/effects/questionnaire_result.py +0 -0
  197. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/effects/send_invite.py +0 -0
  198. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/effects/show_button.py +0 -0
  199. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/effects/simple_api.py +0 -0
  200. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/effects/surescripts/__init__.py +0 -0
  201. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/effects/surescripts/surescripts_messages.py +0 -0
  202. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/effects/task/__init__.py +0 -0
  203. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/effects/task/task.py +0 -0
  204. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/effects/update_user.py +0 -0
  205. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/effects/widgets/__init__.py +0 -0
  206. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/effects/widgets/portal_widget.py +0 -0
  207. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/events/__init__.py +0 -0
  208. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/events/base.py +0 -0
  209. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/handlers/__init__.py +0 -0
  210. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/handlers/action_button.py +0 -0
  211. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/handlers/application.py +0 -0
  212. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/handlers/base.py +0 -0
  213. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/handlers/cron_task.py +0 -0
  214. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/handlers/simple_api/__init__.py +0 -0
  215. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/handlers/simple_api/api.py +0 -0
  216. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/handlers/simple_api/exceptions.py +0 -0
  217. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/handlers/simple_api/security.py +0 -0
  218. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/handlers/simple_api/tools.py +0 -0
  219. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/handlers/simple_api/websocket.py +0 -0
  220. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/protocols/__init__.py +0 -0
  221. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/protocols/base.py +0 -0
  222. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/protocols/clinical_quality_measure.py +0 -0
  223. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/protocols/timeframe.py +0 -0
  224. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/questionnaires/__init__.py +0 -0
  225. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/questionnaires/utils.py +0 -0
  226. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/templates/__init__.py +0 -0
  227. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/templates/utils.py +0 -0
  228. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/utils/__init__.py +0 -0
  229. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/utils/db.py +0 -0
  230. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/utils/http.py +0 -0
  231. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/utils/metrics.py +0 -0
  232. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/utils/plugins.py +0 -0
  233. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/v1/__init__.py +0 -0
  234. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/v1/apps.py +0 -0
  235. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/v1/data/allergy_intolerance.py +0 -0
  236. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/v1/data/appointment.py +0 -0
  237. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/v1/data/assessment.py +0 -0
  238. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/v1/data/banner_alert.py +0 -0
  239. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/v1/data/base.py +0 -0
  240. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/v1/data/billing.py +0 -0
  241. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/v1/data/care_team.py +0 -0
  242. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/v1/data/claim.py +0 -0
  243. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/v1/data/claim_line_item.py +0 -0
  244. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/v1/data/command.py +0 -0
  245. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/v1/data/common.py +0 -0
  246. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/v1/data/condition.py +0 -0
  247. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/v1/data/coverage.py +0 -0
  248. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/v1/data/detected_issue.py +0 -0
  249. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/v1/data/device.py +0 -0
  250. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/v1/data/discount.py +0 -0
  251. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/v1/data/fields.py +0 -0
  252. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/v1/data/imaging.py +0 -0
  253. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/v1/data/invoice.py +0 -0
  254. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/v1/data/lab.py +0 -0
  255. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/v1/data/line_item_transaction.py +0 -0
  256. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/v1/data/medication.py +0 -0
  257. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/v1/data/message.py +0 -0
  258. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/v1/data/note.py +0 -0
  259. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/v1/data/observation.py +0 -0
  260. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/v1/data/organization.py +0 -0
  261. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/v1/data/payment_collection.py +0 -0
  262. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/v1/data/posting.py +0 -0
  263. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/v1/data/practicelocation.py +0 -0
  264. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/v1/data/protocol_override.py +0 -0
  265. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/v1/data/questionnaire.py +0 -0
  266. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/v1/data/reason_for_visit.py +0 -0
  267. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/v1/data/staff.py +0 -0
  268. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/v1/data/task.py +0 -0
  269. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/v1/data/team.py +0 -0
  270. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/v1/data/utils.py +0 -0
  271. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/v1/models.py +0 -0
  272. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/value_set/__init__.py +0 -0
  273. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/value_set/custom.py +0 -0
  274. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/value_set/hcc2018.py +0 -0
  275. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/value_set/v2022/__init__.py +0 -0
  276. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/value_set/v2022/adverse_event.py +0 -0
  277. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/value_set/v2022/allergy.py +0 -0
  278. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/value_set/v2022/assessment.py +0 -0
  279. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/value_set/v2022/communication.py +0 -0
  280. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/value_set/v2022/condition.py +0 -0
  281. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/value_set/v2022/device.py +0 -0
  282. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/value_set/v2022/diagnostic_study.py +0 -0
  283. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/value_set/v2022/encounter.py +0 -0
  284. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/value_set/v2022/immunization.py +0 -0
  285. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/value_set/v2022/individual_characteristic.py +0 -0
  286. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/value_set/v2022/intervention.py +0 -0
  287. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/value_set/v2022/laboratory_test.py +0 -0
  288. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/value_set/v2022/medication.py +0 -0
  289. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/value_set/v2022/physical_exam.py +0 -0
  290. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/value_set/v2022/procedure.py +0 -0
  291. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/value_set/v2022/symptom.py +0 -0
  292. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/value_set/value_set.py +0 -0
  293. {canvas-0.43.0 → canvas-0.44.0}/canvas_sdk/views/__init__.py +0 -0
  294. {canvas-0.43.0 → canvas-0.44.0}/logger/__init__.py +0 -0
  295. {canvas-0.43.0 → canvas-0.44.0}/logger/logger.py +0 -0
  296. {canvas-0.43.0 → canvas-0.44.0}/plugin_runner/__init__.py +0 -0
  297. {canvas-0.43.0 → canvas-0.44.0}/plugin_runner/authentication.py +0 -0
  298. {canvas-0.43.0 → canvas-0.44.0}/plugin_runner/aws_headers.py +0 -0
  299. {canvas-0.43.0 → canvas-0.44.0}/plugin_runner/exceptions.py +0 -0
  300. {canvas-0.43.0 → canvas-0.44.0}/plugin_runner/installation.py +0 -0
  301. {canvas-0.43.0 → canvas-0.44.0}/plugin_runner/load_all_plugins.py +0 -0
  302. {canvas-0.43.0 → canvas-0.44.0}/plugin_runner/plugin_runner.py +0 -0
  303. {canvas-0.43.0 → canvas-0.44.0}/plugin_runner/sandbox.py +0 -0
  304. {canvas-0.43.0 → canvas-0.44.0}/protobufs/canvas_generated/messages/events.proto +0 -0
  305. {canvas-0.43.0 → canvas-0.44.0}/protobufs/canvas_generated/messages/plugins.proto +0 -0
  306. {canvas-0.43.0 → canvas-0.44.0}/protobufs/canvas_generated/services/plugin_runner.proto +0 -0
  307. {canvas-0.43.0 → canvas-0.44.0}/pubsub/__init__.py +0 -0
  308. {canvas-0.43.0 → canvas-0.44.0}/pubsub/pubsub.py +0 -0
  309. {canvas-0.43.0 → canvas-0.44.0}/settings.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: canvas
3
- Version: 0.43.0
3
+ Version: 0.44.0
4
4
  Summary: SDK to customize event-driven actions in your Canvas instance
5
5
  Author-email: Canvas Team <engineering@canvasmedical.com>
6
6
  License-Expression: MIT
@@ -16,7 +16,6 @@ Requires-Dist: frozendict>=2.4.6
16
16
  Requires-Dist: grpcio<2,>=1.60.1
17
17
  Requires-Dist: ipython<9,>=8.21.0
18
18
  Requires-Dist: jsonschema<5,>=4.21.1
19
- Requires-Dist: keyring
20
19
  Requires-Dist: protobuf<5,>=4.25.3
21
20
  Requires-Dist: psycopg[binary,pool]<4,>=3.2.2
22
21
  Requires-Dist: pydantic<3,>=2.6.1
@@ -0,0 +1,65 @@
1
+ import json
2
+ from datetime import datetime
3
+ from pathlib import Path
4
+ from typing import Any
5
+
6
+ TOKENS_PATH = Path.home() / ".canvas" / "tokens.json"
7
+ TOKENS_PATH.parent.mkdir(parents=True, exist_ok=True)
8
+
9
+
10
+ def _load_tokens() -> dict:
11
+ if not TOKENS_PATH.exists():
12
+ return {}
13
+ with TOKENS_PATH.open("r") as f:
14
+ return json.load(f)
15
+
16
+
17
+ def _save_tokens(tokens: dict) -> None:
18
+ with TOKENS_PATH.open("w") as f:
19
+ json.dump(tokens, f, indent=2)
20
+
21
+
22
+ def _set_value(key: str, value: Any) -> None:
23
+ """Set a value in the token storage."""
24
+ tokens = _load_tokens()
25
+ tokens[key] = value
26
+ _save_tokens(tokens)
27
+
28
+
29
+ def _get_value(key: str) -> Any | None:
30
+ """Get value from the token storage."""
31
+ tokens = _load_tokens()
32
+ return tokens.get(key)
33
+
34
+
35
+ def _delete_value(key: str) -> None:
36
+ """Delete a value from the token storage."""
37
+ tokens = _load_tokens()
38
+ tokens.pop(key, None)
39
+ _save_tokens(tokens)
40
+
41
+
42
+ def set_token(host_token_key: str, token: str, exp: datetime) -> None:
43
+ """Set a token with an expiry date in the token storage."""
44
+ _set_value(host_token_key, {"token": token, "exp_date": exp.isoformat()})
45
+
46
+
47
+ def get_token(host_token_key: str) -> str | None:
48
+ """Get a token from the token storage."""
49
+ value = _get_value(host_token_key)
50
+
51
+ if not value:
52
+ return None
53
+ try:
54
+ exp = value["exp_date"]
55
+ if datetime.fromisoformat(exp) <= datetime.now():
56
+ return None
57
+ except ValueError:
58
+ return None
59
+
60
+ return value["token"]
61
+
62
+
63
+ def delete_token(host_token_key: str) -> None:
64
+ """Delete a token from the token storage."""
65
+ _delete_value(host_token_key)
@@ -3,34 +3,16 @@ from datetime import datetime, timedelta
3
3
  from pathlib import Path
4
4
  from urllib.parse import urlparse
5
5
 
6
- import keyring
7
6
  import requests
8
7
 
8
+ from canvas_cli.apps.auth.storage import get_token, set_token
9
9
  from canvas_sdk.utils import Http
10
10
 
11
- # Keyring namespace we'll use
12
- KEYRING_SERVICE = __name__
13
-
14
11
  CONFIG_PATH = Path.home() / ".canvas" / "credentials.ini"
15
12
 
16
13
  LOCALHOST = "http://localhost:8000"
17
14
 
18
15
 
19
- def get_password(username: str) -> str | None:
20
- """Return the stored password for username, or None."""
21
- return keyring.get_password(KEYRING_SERVICE, username)
22
-
23
-
24
- def set_password(username: str, password: str) -> None:
25
- """Set the password for the given username."""
26
- keyring.set_password(KEYRING_SERVICE, username=username, password=password)
27
-
28
-
29
- def delete_password(username: str) -> None:
30
- """Delete the password for the given username."""
31
- keyring.delete_password(KEYRING_SERVICE, username=username)
32
-
33
-
34
16
  def get_config() -> configparser.ConfigParser:
35
17
  """Reads the config file and returns a ConfigParser object."""
36
18
  config = configparser.ConfigParser()
@@ -64,7 +46,7 @@ def read_config(host: str, property: str) -> str:
64
46
 
65
47
 
66
48
  def get_api_client_credentials(host: str) -> str:
67
- """Either return the given api_key, or fetch it from the keyring."""
49
+ """Either return the given api_key, or fetch it from the token storage."""
68
50
  hostname = urlparse(host).hostname
69
51
 
70
52
  if not hostname:
@@ -119,23 +101,6 @@ def request_api_token(host: str, api_client_credentials: str) -> dict:
119
101
  return token_response.json()
120
102
 
121
103
 
122
- def is_token_valid(host_token_key: str, expiration_date: datetime | None = None) -> bool:
123
- """True if the token has not expired yet."""
124
- token_exp_date_key = f"{host_token_key}|exp_date"
125
-
126
- if expiration_date:
127
- if expiration_date <= datetime.now():
128
- return False
129
- set_password(token_exp_date_key, expiration_date.isoformat())
130
- return True
131
-
132
- stored_expiration_date = get_password(token_exp_date_key)
133
- return (
134
- stored_expiration_date is not None
135
- and datetime.fromisoformat(stored_expiration_date) > datetime.now()
136
- )
137
-
138
-
139
104
  def get_or_request_api_token(host: str | None = None) -> str:
140
105
  """Returns an existing stored token if it has not expired, or requests a new one."""
141
106
  if not (host := get_default_host(host)):
@@ -143,10 +108,9 @@ def get_or_request_api_token(host: str | None = None) -> str:
143
108
  f"Please specify a host or add one to the configuration file at '{CONFIG_PATH}'"
144
109
  )
145
110
 
146
- host_token_key = f"{host}|token"
147
- token = get_password(host_token_key)
111
+ token = get_token(host)
148
112
 
149
- if token and is_token_valid(host_token_key):
113
+ if token:
150
114
  return token
151
115
 
152
116
  api_client_credentials = get_api_client_credentials(host)
@@ -155,9 +119,9 @@ def get_or_request_api_token(host: str | None = None) -> str:
155
119
  raise Exception(f"A token could not be acquired from the given host '{host}'")
156
120
 
157
121
  token_expiration_date = datetime.now() + timedelta(seconds=token_response["expires_in"])
158
- if not is_token_valid(host_token_key, token_expiration_date):
122
+ if token_expiration_date <= datetime.now():
159
123
  raise Exception(f"A valid token could not be acquired from the given host '{host}'")
160
124
 
161
125
  new_token = token_response["access_token"]
162
- set_password(host_token_key, new_token)
126
+ set_token(host, new_token, token_expiration_date)
163
127
  return new_token
@@ -14,7 +14,7 @@ _sym_db = _symbol_database.Default()
14
14
 
15
15
 
16
16
 
17
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\'canvas_generated/messages/effects.proto\x12\x06\x63\x61nvas\"y\n\x06\x45\x66\x66\x65\x63t\x12 \n\x04type\x18\x01 \x01(\x0e\x32\x12.canvas.EffectType\x12\x0f\n\x07payload\x18\x02 \x01(\t\x12\x13\n\x0bplugin_name\x18\x03 \x01(\t\x12\x11\n\tclassname\x18\x04 \x01(\t\x12\x14\n\x0chandler_name\x18\x05 \x01(\t*\xdc;\n\nEffectType\x12\x12\n\x0eUNKNOWN_EFFECT\x10\x00\x12\x07\n\x03LOG\x10\x01\x12\x14\n\x10\x41\x44\x44_PLAN_COMMAND\x10\x02\x12\x1f\n\x1b\x41UTOCOMPLETE_SEARCH_RESULTS\x10\x03\x12\x14\n\x10\x41\x44\x44_BANNER_ALERT\x10\x04\x12\x17\n\x13REMOVE_BANNER_ALERT\x10\x05\x12\x1c\n\x18ORIGINATE_ASSESS_COMMAND\x10\x06\x12\x17\n\x13\x45\x44IT_ASSESS_COMMAND\x10\x07\x12\x19\n\x15\x44\x45LETE_ASSESS_COMMAND\x10\x08\x12\x19\n\x15\x43OMMIT_ASSESS_COMMAND\x10\t\x12!\n\x1d\x45NTER_IN_ERROR_ASSESS_COMMAND\x10\n\x12\x1e\n\x1aORIGINATE_DIAGNOSE_COMMAND\x10\x0b\x12\x19\n\x15\x45\x44IT_DIAGNOSE_COMMAND\x10\x0c\x12\x1b\n\x17\x44\x45LETE_DIAGNOSE_COMMAND\x10\r\x12\x1b\n\x17\x43OMMIT_DIAGNOSE_COMMAND\x10\x0e\x12#\n\x1f\x45NTER_IN_ERROR_DIAGNOSE_COMMAND\x10\x0f\x12\x1a\n\x16ORIGINATE_GOAL_COMMAND\x10\x10\x12\x15\n\x11\x45\x44IT_GOAL_COMMAND\x10\x11\x12\x17\n\x13\x44\x45LETE_GOAL_COMMAND\x10\x12\x12\x17\n\x13\x43OMMIT_GOAL_COMMAND\x10\x13\x12\x1f\n\x1b\x45NTER_IN_ERROR_GOAL_COMMAND\x10\x14\x12\x19\n\x15ORIGINATE_HPI_COMMAND\x10\x15\x12\x14\n\x10\x45\x44IT_HPI_COMMAND\x10\x16\x12\x16\n\x12\x44\x45LETE_HPI_COMMAND\x10\x17\x12\x16\n\x12\x43OMMIT_HPI_COMMAND\x10\x18\x12\x1e\n\x1a\x45NTER_IN_ERROR_HPI_COMMAND\x10\x19\x12*\n&ORIGINATE_MEDICATION_STATEMENT_COMMAND\x10\x1a\x12%\n!EDIT_MEDICATION_STATEMENT_COMMAND\x10\x1b\x12\'\n#DELETE_MEDICATION_STATEMENT_COMMAND\x10\x1c\x12\'\n#COMMIT_MEDICATION_STATEMENT_COMMAND\x10\x1d\x12/\n+ENTER_IN_ERROR_MEDICATION_STATEMENT_COMMAND\x10\x1e\x12\x1a\n\x16ORIGINATE_PLAN_COMMAND\x10\x1f\x12\x15\n\x11\x45\x44IT_PLAN_COMMAND\x10 \x12\x17\n\x13\x44\x45LETE_PLAN_COMMAND\x10!\x12\x17\n\x13\x43OMMIT_PLAN_COMMAND\x10\"\x12\x1f\n\x1b\x45NTER_IN_ERROR_PLAN_COMMAND\x10#\x12\x1f\n\x1bORIGINATE_PRESCRIBE_COMMAND\x10$\x12\x1a\n\x16\x45\x44IT_PRESCRIBE_COMMAND\x10%\x12\x1c\n\x18\x44\x45LETE_PRESCRIBE_COMMAND\x10&\x12\x1c\n\x18\x43OMMIT_PRESCRIBE_COMMAND\x10\'\x12$\n ENTER_IN_ERROR_PRESCRIBE_COMMAND\x10(\x12#\n\x1fORIGINATE_QUESTIONNAIRE_COMMAND\x10)\x12\x1e\n\x1a\x45\x44IT_QUESTIONNAIRE_COMMAND\x10*\x12 \n\x1c\x44\x45LETE_QUESTIONNAIRE_COMMAND\x10+\x12 \n\x1c\x43OMMIT_QUESTIONNAIRE_COMMAND\x10,\x12(\n$ENTER_IN_ERROR_QUESTIONNAIRE_COMMAND\x10-\x12&\n\"ORIGINATE_REASON_FOR_VISIT_COMMAND\x10.\x12!\n\x1d\x45\x44IT_REASON_FOR_VISIT_COMMAND\x10/\x12#\n\x1f\x44\x45LETE_REASON_FOR_VISIT_COMMAND\x10\x30\x12#\n\x1f\x43OMMIT_REASON_FOR_VISIT_COMMAND\x10\x31\x12+\n\'ENTER_IN_ERROR_REASON_FOR_VISIT_COMMAND\x10\x32\x12%\n!ORIGINATE_STOP_MEDICATION_COMMAND\x10\x33\x12 \n\x1c\x45\x44IT_STOP_MEDICATION_COMMAND\x10\x34\x12\"\n\x1e\x44\x45LETE_STOP_MEDICATION_COMMAND\x10\x35\x12\"\n\x1e\x43OMMIT_STOP_MEDICATION_COMMAND\x10\x36\x12*\n&ENTER_IN_ERROR_STOP_MEDICATION_COMMAND\x10\x37\x12!\n\x1dORIGINATE_UPDATE_GOAL_COMMAND\x10\x38\x12\x1c\n\x18\x45\x44IT_UPDATE_GOAL_COMMAND\x10\x39\x12\x1e\n\x1a\x44\x45LETE_UPDATE_GOAL_COMMAND\x10:\x12\x1e\n\x1a\x43OMMIT_UPDATE_GOAL_COMMAND\x10;\x12&\n\"ENTER_IN_ERROR_UPDATE_GOAL_COMMAND\x10<\x12\x1d\n\x19ORIGINATE_PERFORM_COMMAND\x10=\x12\x18\n\x14\x45\x44IT_PERFORM_COMMAND\x10>\x12\x1a\n\x16\x44\x45LETE_PERFORM_COMMAND\x10?\x12\x1a\n\x16\x43OMMIT_PERFORM_COMMAND\x10@\x12\"\n\x1e\x45NTER_IN_ERROR_PERFORM_COMMAND\x10\x41\x12\x1e\n\x1aORIGINATE_INSTRUCT_COMMAND\x10\x42\x12\x19\n\x15\x45\x44IT_INSTRUCT_COMMAND\x10\x43\x12\x1b\n\x17\x44\x45LETE_INSTRUCT_COMMAND\x10\x44\x12\x1b\n\x17\x43OMMIT_INSTRUCT_COMMAND\x10\x45\x12#\n\x1f\x45NTER_IN_ERROR_INSTRUCT_COMMAND\x10\x46\x12\x1f\n\x1bORIGINATE_LAB_ORDER_COMMAND\x10G\x12\x1a\n\x16\x45\x44IT_LAB_ORDER_COMMAND\x10H\x12\x1c\n\x18\x44\x45LETE_LAB_ORDER_COMMAND\x10I\x12\x1c\n\x18\x43OMMIT_LAB_ORDER_COMMAND\x10J\x12$\n ENTER_IN_ERROR_LAB_ORDER_COMMAND\x10K\x12$\n ORIGINATE_FAMILY_HISTORY_COMMAND\x10L\x12\x1f\n\x1b\x45\x44IT_FAMILY_HISTORY_COMMAND\x10M\x12!\n\x1d\x44\x45LETE_FAMILY_HISTORY_COMMAND\x10N\x12!\n\x1d\x43OMMIT_FAMILY_HISTORY_COMMAND\x10O\x12)\n%ENTER_IN_ERROR_FAMILY_HISTORY_COMMAND\x10P\x12\x1d\n\x19ORIGINATE_ALLERGY_COMMAND\x10Q\x12\x18\n\x14\x45\x44IT_ALLERGY_COMMAND\x10R\x12\x1a\n\x16\x44\x45LETE_ALLERGY_COMMAND\x10S\x12\x1a\n\x16\x43OMMIT_ALLERGY_COMMAND\x10T\x12\"\n\x1e\x45NTER_IN_ERROR_ALLERGY_COMMAND\x10U\x12$\n ORIGINATE_REMOVE_ALLERGY_COMMAND\x10V\x12\x1f\n\x1b\x45\x44IT_REMOVE_ALLERGY_COMMAND\x10W\x12!\n\x1d\x44\x45LETE_REMOVE_ALLERGY_COMMAND\x10X\x12!\n\x1d\x43OMMIT_REMOVE_ALLERGY_COMMAND\x10Y\x12)\n%ENTER_IN_ERROR_REMOVE_ALLERGY_COMMAND\x10Z\x12&\n\"ORIGINATE_SURGICAL_HISTORY_COMMAND\x10[\x12!\n\x1d\x45\x44IT_SURGICAL_HISTORY_COMMAND\x10\\\x12#\n\x1f\x44\x45LETE_SURGICAL_HISTORY_COMMAND\x10]\x12#\n\x1f\x43OMMIT_SURGICAL_HISTORY_COMMAND\x10^\x12+\n\'ENTER_IN_ERROR_SURGICAL_HISTORY_COMMAND\x10_\x12\x0f\n\x0b\x43REATE_TASK\x10\x64\x12\x0f\n\x0bUPDATE_TASK\x10\x65\x12\x17\n\x13\x43REATE_TASK_COMMENT\x10\x66\x12%\n!ORIGINATE_MEDICAL_HISTORY_COMMAND\x10g\x12 \n\x1c\x45\x44IT_MEDICAL_HISTORY_COMMAND\x10h\x12\"\n\x1e\x44\x45LETE_MEDICAL_HISTORY_COMMAND\x10i\x12\"\n\x1e\x43OMMIT_MEDICAL_HISTORY_COMMAND\x10j\x12*\n&ENTER_IN_ERROR_MEDICAL_HISTORY_COMMAND\x10k\x12\x1f\n\x1b\x41\x44\x44_OR_UPDATE_PROTOCOL_CARD\x10n\x12\x1b\n\x16ORIGINATE_TASK_COMMAND\x10\x85\x01\x12\x16\n\x11\x45\x44IT_TASK_COMMAND\x10\x86\x01\x12\x18\n\x13\x44\x45LETE_TASK_COMMAND\x10\x87\x01\x12\x18\n\x13\x43OMMIT_TASK_COMMAND\x10\x88\x01\x12 \n\x1b\x45NTER_IN_ERROR_TASK_COMMAND\x10\x89\x01\x12\x1c\n\x18ORIGINATE_REFILL_COMMAND\x10q\x12\x17\n\x13\x45\x44IT_REFILL_COMMAND\x10r\x12\x19\n\x15\x44\x45LETE_REFILL_COMMAND\x10s\x12\x19\n\x15\x43OMMIT_REFILL_COMMAND\x10t\x12!\n\x1d\x45NTER_IN_ERROR_REFILL_COMMAND\x10u\x12\x1c\n\x18ORIGINATE_VITALS_COMMAND\x10v\x12\x17\n\x13\x45\x44IT_VITALS_COMMAND\x10w\x12\x19\n\x15\x44\x45LETE_VITALS_COMMAND\x10x\x12\x19\n\x15\x43OMMIT_VITALS_COMMAND\x10y\x12!\n\x1d\x45NTER_IN_ERROR_VITALS_COMMAND\x10z\x12&\n\"ORIGINATE_UPDATE_DIAGNOSIS_COMMAND\x10{\x12!\n\x1d\x45\x44IT_UPDATE_DIAGNOSIS_COMMAND\x10|\x12#\n\x1f\x44\x45LETE_UPDATE_DIAGNOSIS_COMMAND\x10}\x12#\n\x1f\x43OMMIT_UPDATE_DIAGNOSIS_COMMAND\x10~\x12+\n\'ENTER_IN_ERROR_UPDATE_DIAGNOSIS_COMMAND\x10\x7f\x12!\n\x1cORIGINATE_CLOSE_GOAL_COMMAND\x10\x80\x01\x12\x1c\n\x17\x45\x44IT_CLOSE_GOAL_COMMAND\x10\x81\x01\x12\x1e\n\x19\x44\x45LETE_CLOSE_GOAL_COMMAND\x10\x82\x01\x12\x1e\n\x19\x43OMMIT_CLOSE_GOAL_COMMAND\x10\x83\x01\x12&\n!ENTER_IN_ERROR_CLOSE_GOAL_COMMAND\x10\x84\x01\x12\x1c\n\x17ORIGINATE_REFER_COMMAND\x10\x8b\x01\x12\x17\n\x12\x45\x44IT_REFER_COMMAND\x10\x8c\x01\x12\x19\n\x14\x44\x45LETE_REFER_COMMAND\x10\x8d\x01\x12\x19\n\x14\x43OMMIT_REFER_COMMAND\x10\x8e\x01\x12!\n\x1c\x45NTER_IN_ERROR_REFER_COMMAND\x10\x8f\x01\x12(\n#ORIGINATE_CHANGE_MEDICATION_COMMAND\x10\x96\x01\x12#\n\x1e\x45\x44IT_CHANGE_MEDICATION_COMMAND\x10\x97\x01\x12%\n DELETE_CHANGE_MEDICATION_COMMAND\x10\x98\x01\x12%\n COMMIT_CHANGE_MEDICATION_COMMAND\x10\x99\x01\x12-\n(ENTER_IN_ERROR_CHANGE_MEDICATION_COMMAND\x10\x9a\x01\x12 \n\x1b\x43REATE_QUESTIONNAIRE_RESULT\x10\x8a\x01\x12-\n(ANNOTATE_PATIENT_CHART_CONDITION_RESULTS\x10\xc8\x01\x12%\n ANNOTATE_CLAIM_CONDITION_RESULTS\x10\xac\x02\x12(\n#SHOW_PATIENT_CHART_SUMMARY_SECTIONS\x10\x90\x03\x12\"\n\x1dSHOW_PATIENT_PROFILE_SECTIONS\x10\xf4\x03\x12\x37\n2PATIENT_PROFILE__ADD_PHARMACY__POST_SEARCH_RESULTS\x10\xf5\x03\x12)\n$SEND_SURESCRIPTS_ELIGIBILITY_REQUEST\x10\xd8\x04\x12\x30\n+SEND_SURESCRIPTS_MEDICATION_HISTORY_REQUEST\x10\xd9\x04\x12&\n!SEND_SURESCRIPTS_BENEFITS_REQUEST\x10\xda\x04\x12\x1b\n\x16ORIGINATE_EXAM_COMMAND\x10\xbc\x05\x12\x16\n\x11\x45\x44IT_EXAM_COMMAND\x10\xbd\x05\x12\x18\n\x13\x44\x45LETE_EXAM_COMMAND\x10\xbe\x05\x12\x18\n\x13\x43OMMIT_EXAM_COMMAND\x10\xbf\x05\x12 \n\x1b\x45NTER_IN_ERROR_EXAM_COMMAND\x10\xc0\x05\x12\x1a\n\x15ORIGINATE_ROS_COMMAND\x10\xa0\x06\x12\x15\n\x10\x45\x44IT_ROS_COMMAND\x10\xa1\x06\x12\x17\n\x12\x44\x45LETE_ROS_COMMAND\x10\xa2\x06\x12\x17\n\x12\x43OMMIT_ROS_COMMAND\x10\xa3\x06\x12\x1f\n\x1a\x45NTER_IN_ERROR_ROS_COMMAND\x10\xa4\x06\x12,\n\'ORIGINATE_STRUCTURED_ASSESSMENT_COMMAND\x10\x84\x07\x12\'\n\"EDIT_STRUCTURED_ASSESSMENT_COMMAND\x10\x85\x07\x12)\n$DELETE_STRUCTURED_ASSESSMENT_COMMAND\x10\x86\x07\x12)\n$COMMIT_STRUCTURED_ASSESSMENT_COMMAND\x10\x87\x07\x12\x31\n,ENTER_IN_ERROR_STRUCTURED_ASSESSMENT_COMMAND\x10\x88\x07\x12 \n\x1bORIGINATE_FOLLOW_UP_COMMAND\x10\x89\x07\x12\x1b\n\x16\x45\x44IT_FOLLOW_UP_COMMAND\x10\x8a\x07\x12\x1d\n\x18\x44\x45LETE_FOLLOW_UP_COMMAND\x10\x8b\x07\x12\x1d\n\x18\x43OMMIT_FOLLOW_UP_COMMAND\x10\x8c\x07\x12%\n ENTER_IN_ERROR_FOLLOW_UP_COMMAND\x10\x8d\x07\x12$\n\x1fORIGINATE_IMAGING_ORDER_COMMAND\x10\xcc\x08\x12\x1f\n\x1a\x45\x44IT_IMAGING_ORDER_COMMAND\x10\xcd\x08\x12!\n\x1c\x44\x45LETE_IMAGING_ORDER_COMMAND\x10\xce\x08\x12!\n\x1c\x43OMMIT_IMAGING_ORDER_COMMAND\x10\xcf\x08\x12)\n$ENTER_IN_ERROR_IMAGING_ORDER_COMMAND\x10\xd0\x08\x12(\n#ORIGINATE_RESOLVE_CONDITION_COMMAND\x10\xb0\t\x12#\n\x1e\x45\x44IT_RESOLVE_CONDITION_COMMAND\x10\xb1\t\x12%\n DELETE_RESOLVE_CONDITION_COMMAND\x10\xb2\t\x12%\n COMMIT_RESOLVE_CONDITION_COMMAND\x10\xb3\t\x12-\n(ENTER_IN_ERROR_RESOLVE_CONDITION_COMMAND\x10\xb4\t\x12*\n%ORIGINATE_ADJUST_PRESCRIPTION_COMMAND\x10\x94\n\x12%\n EDIT_ADJUST_PRESCRIPTION_COMMAND\x10\x95\n\x12\'\n\"DELETE_ADJUST_PRESCRIPTION_COMMAND\x10\x96\n\x12\'\n\"COMMIT_ADJUST_PRESCRIPTION_COMMAND\x10\x97\n\x12/\n*ENTER_IN_ERROR_ADJUST_PRESCRIPTION_COMMAND\x10\x98\n\x12+\n&ORIGINATE_CHART_SECTION_REVIEW_COMMAND\x10\xf8\n\x12\x17\n\x12SHOW_ACTION_BUTTON\x10\xe8\x07\x12 \n\x1bPATIENT_PORTAL__FORM_RESULT\x10\xd0\x0f\x12.\n)PATIENT_PORTAL__APPOINTMENT_IS_CANCELABLE\x10\xd1\x0f\x12\x31\n,PATIENT_PORTAL__APPOINTMENT_IS_RESCHEDULABLE\x10\xd2\x0f\x12\x32\n-PATIENT_PORTAL__APPOINTMENT_SHOW_MEETING_LINK\x10\xd3\x0f\x12 \n\x1bPATIENT_PORTAL__SEND_INVITE\x10\xd4\x0f\x12=\n8PATIENT_PORTAL__APPOINTMENTS__SLOTS__POST_SEARCH_RESULTS\x10\xd5\x0f\x12M\nHPATIENT_PORTAL__APPOINTMENTS__FORM_APPOINTMENT_TYPES__PRE_SEARCH_RESULTS\x10\xd6\x0f\x12N\nIPATIENT_PORTAL__APPOINTMENTS__FORM_APPOINTMENT_TYPES__POST_SEARCH_RESULTS\x10\xd7\x0f\x12\x45\n@PATIENT_PORTAL__APPOINTMENTS__FORM_LOCATIONS__PRE_SEARCH_RESULTS\x10\xd8\x0f\x12\x46\nAPATIENT_PORTAL__APPOINTMENTS__FORM_LOCATIONS__POST_SEARCH_RESULTS\x10\xd9\x0f\x12\x45\n@PATIENT_PORTAL__APPOINTMENTS__FORM_PROVIDERS__PRE_SEARCH_RESULTS\x10\xda\x0f\x12\x46\nAPATIENT_PORTAL__APPOINTMENTS__FORM_PROVIDERS__POST_SEARCH_RESULTS\x10\xdb\x0f\x12.\n)PATIENT_PORTAL__APPLICATION_CONFIGURATION\x10\xdc\x0f\x12\x1a\n\x15\x41\x44\x44_BILLING_LINE_ITEM\x10\xee\x0f\x12\x1d\n\x18UPDATE_BILLING_LINE_ITEM\x10\xef\x0f\x12\x1d\n\x18REMOVE_BILLING_LINE_ITEM\x10\xf0\x0f\x12#\n\x1eSHOW_PATIENT_PORTAL_MENU_ITEMS\x10\xb4\x10\x12\x12\n\rPORTAL_WIDGET\x10\xb5\x10\x12\x11\n\x0cLAUNCH_MODAL\x10\xb8\x17\x12\x18\n\x13SIMPLE_API_RESPONSE\x10\xa0\x1f\x12 \n\x1bSIMPLE_API_WEBSOCKET_ACCEPT\x10\xa1\x1f\x12\x1e\n\x19SIMPLE_API_WEBSOCKET_DENY\x10\xa2\x1f\x12#\n\x1eSIMPLE_API_WEBSOCKET_BROADCAST\x10\xa3\x1f\x12\x10\n\x0bUPDATE_USER\x10\x88\'\x12\x10\n\x0b\x43REATE_NOTE\x10\xf0.\x12\x17\n\x12\x43REATE_APPOINTMENT\x10\xf1.\x12\x1a\n\x15\x43REATE_SCHEDULE_EVENT\x10\xf2.\x12\x13\n\x0e\x43REATE_PATIENT\x10\xf3.\x12\x13\n\x0e\x43REATE_MESSAGE\x10\xf4.\x12\x11\n\x0cSEND_MESSAGE\x10\xf5.\x12\x1c\n\x17\x43REATE_AND_SEND_MESSAGE\x10\xf6.\x12\x11\n\x0c\x45\x44IT_MESSAGE\x10\xf7.\x12/\n*PATIENT_METADATA__CREATE_ADDITIONAL_FIELDS\x10\xfa.\x12\x1c\n\x17UPSERT_PATIENT_METADATA\x10\xfb.\x12\'\n\"CREATE_PATIENT_EXTERNAL_IDENTIFIER\x10\xfc.b\x06proto3')
17
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\'canvas_generated/messages/effects.proto\x12\x06\x63\x61nvas\"y\n\x06\x45\x66\x66\x65\x63t\x12 \n\x04type\x18\x01 \x01(\x0e\x32\x12.canvas.EffectType\x12\x0f\n\x07payload\x18\x02 \x01(\t\x12\x13\n\x0bplugin_name\x18\x03 \x01(\t\x12\x11\n\tclassname\x18\x04 \x01(\t\x12\x14\n\x0chandler_name\x18\x05 \x01(\t*\xd8<\n\nEffectType\x12\x12\n\x0eUNKNOWN_EFFECT\x10\x00\x12\x07\n\x03LOG\x10\x01\x12\x14\n\x10\x41\x44\x44_PLAN_COMMAND\x10\x02\x12\x1f\n\x1b\x41UTOCOMPLETE_SEARCH_RESULTS\x10\x03\x12\x14\n\x10\x41\x44\x44_BANNER_ALERT\x10\x04\x12\x17\n\x13REMOVE_BANNER_ALERT\x10\x05\x12\x1c\n\x18ORIGINATE_ASSESS_COMMAND\x10\x06\x12\x17\n\x13\x45\x44IT_ASSESS_COMMAND\x10\x07\x12\x19\n\x15\x44\x45LETE_ASSESS_COMMAND\x10\x08\x12\x19\n\x15\x43OMMIT_ASSESS_COMMAND\x10\t\x12!\n\x1d\x45NTER_IN_ERROR_ASSESS_COMMAND\x10\n\x12\x1e\n\x1aORIGINATE_DIAGNOSE_COMMAND\x10\x0b\x12\x19\n\x15\x45\x44IT_DIAGNOSE_COMMAND\x10\x0c\x12\x1b\n\x17\x44\x45LETE_DIAGNOSE_COMMAND\x10\r\x12\x1b\n\x17\x43OMMIT_DIAGNOSE_COMMAND\x10\x0e\x12#\n\x1f\x45NTER_IN_ERROR_DIAGNOSE_COMMAND\x10\x0f\x12\x1a\n\x16ORIGINATE_GOAL_COMMAND\x10\x10\x12\x15\n\x11\x45\x44IT_GOAL_COMMAND\x10\x11\x12\x17\n\x13\x44\x45LETE_GOAL_COMMAND\x10\x12\x12\x17\n\x13\x43OMMIT_GOAL_COMMAND\x10\x13\x12\x1f\n\x1b\x45NTER_IN_ERROR_GOAL_COMMAND\x10\x14\x12\x19\n\x15ORIGINATE_HPI_COMMAND\x10\x15\x12\x14\n\x10\x45\x44IT_HPI_COMMAND\x10\x16\x12\x16\n\x12\x44\x45LETE_HPI_COMMAND\x10\x17\x12\x16\n\x12\x43OMMIT_HPI_COMMAND\x10\x18\x12\x1e\n\x1a\x45NTER_IN_ERROR_HPI_COMMAND\x10\x19\x12*\n&ORIGINATE_MEDICATION_STATEMENT_COMMAND\x10\x1a\x12%\n!EDIT_MEDICATION_STATEMENT_COMMAND\x10\x1b\x12\'\n#DELETE_MEDICATION_STATEMENT_COMMAND\x10\x1c\x12\'\n#COMMIT_MEDICATION_STATEMENT_COMMAND\x10\x1d\x12/\n+ENTER_IN_ERROR_MEDICATION_STATEMENT_COMMAND\x10\x1e\x12\x1a\n\x16ORIGINATE_PLAN_COMMAND\x10\x1f\x12\x15\n\x11\x45\x44IT_PLAN_COMMAND\x10 \x12\x17\n\x13\x44\x45LETE_PLAN_COMMAND\x10!\x12\x17\n\x13\x43OMMIT_PLAN_COMMAND\x10\"\x12\x1f\n\x1b\x45NTER_IN_ERROR_PLAN_COMMAND\x10#\x12\x1f\n\x1bORIGINATE_PRESCRIBE_COMMAND\x10$\x12\x1a\n\x16\x45\x44IT_PRESCRIBE_COMMAND\x10%\x12\x1c\n\x18\x44\x45LETE_PRESCRIBE_COMMAND\x10&\x12\x1c\n\x18\x43OMMIT_PRESCRIBE_COMMAND\x10\'\x12$\n ENTER_IN_ERROR_PRESCRIBE_COMMAND\x10(\x12#\n\x1fORIGINATE_QUESTIONNAIRE_COMMAND\x10)\x12\x1e\n\x1a\x45\x44IT_QUESTIONNAIRE_COMMAND\x10*\x12 \n\x1c\x44\x45LETE_QUESTIONNAIRE_COMMAND\x10+\x12 \n\x1c\x43OMMIT_QUESTIONNAIRE_COMMAND\x10,\x12(\n$ENTER_IN_ERROR_QUESTIONNAIRE_COMMAND\x10-\x12&\n\"ORIGINATE_REASON_FOR_VISIT_COMMAND\x10.\x12!\n\x1d\x45\x44IT_REASON_FOR_VISIT_COMMAND\x10/\x12#\n\x1f\x44\x45LETE_REASON_FOR_VISIT_COMMAND\x10\x30\x12#\n\x1f\x43OMMIT_REASON_FOR_VISIT_COMMAND\x10\x31\x12+\n\'ENTER_IN_ERROR_REASON_FOR_VISIT_COMMAND\x10\x32\x12%\n!ORIGINATE_STOP_MEDICATION_COMMAND\x10\x33\x12 \n\x1c\x45\x44IT_STOP_MEDICATION_COMMAND\x10\x34\x12\"\n\x1e\x44\x45LETE_STOP_MEDICATION_COMMAND\x10\x35\x12\"\n\x1e\x43OMMIT_STOP_MEDICATION_COMMAND\x10\x36\x12*\n&ENTER_IN_ERROR_STOP_MEDICATION_COMMAND\x10\x37\x12!\n\x1dORIGINATE_UPDATE_GOAL_COMMAND\x10\x38\x12\x1c\n\x18\x45\x44IT_UPDATE_GOAL_COMMAND\x10\x39\x12\x1e\n\x1a\x44\x45LETE_UPDATE_GOAL_COMMAND\x10:\x12\x1e\n\x1a\x43OMMIT_UPDATE_GOAL_COMMAND\x10;\x12&\n\"ENTER_IN_ERROR_UPDATE_GOAL_COMMAND\x10<\x12\x1d\n\x19ORIGINATE_PERFORM_COMMAND\x10=\x12\x18\n\x14\x45\x44IT_PERFORM_COMMAND\x10>\x12\x1a\n\x16\x44\x45LETE_PERFORM_COMMAND\x10?\x12\x1a\n\x16\x43OMMIT_PERFORM_COMMAND\x10@\x12\"\n\x1e\x45NTER_IN_ERROR_PERFORM_COMMAND\x10\x41\x12\x1e\n\x1aORIGINATE_INSTRUCT_COMMAND\x10\x42\x12\x19\n\x15\x45\x44IT_INSTRUCT_COMMAND\x10\x43\x12\x1b\n\x17\x44\x45LETE_INSTRUCT_COMMAND\x10\x44\x12\x1b\n\x17\x43OMMIT_INSTRUCT_COMMAND\x10\x45\x12#\n\x1f\x45NTER_IN_ERROR_INSTRUCT_COMMAND\x10\x46\x12\x1f\n\x1bORIGINATE_LAB_ORDER_COMMAND\x10G\x12\x1a\n\x16\x45\x44IT_LAB_ORDER_COMMAND\x10H\x12\x1c\n\x18\x44\x45LETE_LAB_ORDER_COMMAND\x10I\x12\x1c\n\x18\x43OMMIT_LAB_ORDER_COMMAND\x10J\x12$\n ENTER_IN_ERROR_LAB_ORDER_COMMAND\x10K\x12$\n ORIGINATE_FAMILY_HISTORY_COMMAND\x10L\x12\x1f\n\x1b\x45\x44IT_FAMILY_HISTORY_COMMAND\x10M\x12!\n\x1d\x44\x45LETE_FAMILY_HISTORY_COMMAND\x10N\x12!\n\x1d\x43OMMIT_FAMILY_HISTORY_COMMAND\x10O\x12)\n%ENTER_IN_ERROR_FAMILY_HISTORY_COMMAND\x10P\x12\x1d\n\x19ORIGINATE_ALLERGY_COMMAND\x10Q\x12\x18\n\x14\x45\x44IT_ALLERGY_COMMAND\x10R\x12\x1a\n\x16\x44\x45LETE_ALLERGY_COMMAND\x10S\x12\x1a\n\x16\x43OMMIT_ALLERGY_COMMAND\x10T\x12\"\n\x1e\x45NTER_IN_ERROR_ALLERGY_COMMAND\x10U\x12$\n ORIGINATE_REMOVE_ALLERGY_COMMAND\x10V\x12\x1f\n\x1b\x45\x44IT_REMOVE_ALLERGY_COMMAND\x10W\x12!\n\x1d\x44\x45LETE_REMOVE_ALLERGY_COMMAND\x10X\x12!\n\x1d\x43OMMIT_REMOVE_ALLERGY_COMMAND\x10Y\x12)\n%ENTER_IN_ERROR_REMOVE_ALLERGY_COMMAND\x10Z\x12&\n\"ORIGINATE_SURGICAL_HISTORY_COMMAND\x10[\x12!\n\x1d\x45\x44IT_SURGICAL_HISTORY_COMMAND\x10\\\x12#\n\x1f\x44\x45LETE_SURGICAL_HISTORY_COMMAND\x10]\x12#\n\x1f\x43OMMIT_SURGICAL_HISTORY_COMMAND\x10^\x12+\n\'ENTER_IN_ERROR_SURGICAL_HISTORY_COMMAND\x10_\x12\x0f\n\x0b\x43REATE_TASK\x10\x64\x12\x0f\n\x0bUPDATE_TASK\x10\x65\x12\x17\n\x13\x43REATE_TASK_COMMENT\x10\x66\x12%\n!ORIGINATE_MEDICAL_HISTORY_COMMAND\x10g\x12 \n\x1c\x45\x44IT_MEDICAL_HISTORY_COMMAND\x10h\x12\"\n\x1e\x44\x45LETE_MEDICAL_HISTORY_COMMAND\x10i\x12\"\n\x1e\x43OMMIT_MEDICAL_HISTORY_COMMAND\x10j\x12*\n&ENTER_IN_ERROR_MEDICAL_HISTORY_COMMAND\x10k\x12\x1f\n\x1b\x41\x44\x44_OR_UPDATE_PROTOCOL_CARD\x10n\x12\x1b\n\x16ORIGINATE_TASK_COMMAND\x10\x85\x01\x12\x16\n\x11\x45\x44IT_TASK_COMMAND\x10\x86\x01\x12\x18\n\x13\x44\x45LETE_TASK_COMMAND\x10\x87\x01\x12\x18\n\x13\x43OMMIT_TASK_COMMAND\x10\x88\x01\x12 \n\x1b\x45NTER_IN_ERROR_TASK_COMMAND\x10\x89\x01\x12\x1c\n\x18ORIGINATE_REFILL_COMMAND\x10q\x12\x17\n\x13\x45\x44IT_REFILL_COMMAND\x10r\x12\x19\n\x15\x44\x45LETE_REFILL_COMMAND\x10s\x12\x19\n\x15\x43OMMIT_REFILL_COMMAND\x10t\x12!\n\x1d\x45NTER_IN_ERROR_REFILL_COMMAND\x10u\x12\x1c\n\x18ORIGINATE_VITALS_COMMAND\x10v\x12\x17\n\x13\x45\x44IT_VITALS_COMMAND\x10w\x12\x19\n\x15\x44\x45LETE_VITALS_COMMAND\x10x\x12\x19\n\x15\x43OMMIT_VITALS_COMMAND\x10y\x12!\n\x1d\x45NTER_IN_ERROR_VITALS_COMMAND\x10z\x12&\n\"ORIGINATE_UPDATE_DIAGNOSIS_COMMAND\x10{\x12!\n\x1d\x45\x44IT_UPDATE_DIAGNOSIS_COMMAND\x10|\x12#\n\x1f\x44\x45LETE_UPDATE_DIAGNOSIS_COMMAND\x10}\x12#\n\x1f\x43OMMIT_UPDATE_DIAGNOSIS_COMMAND\x10~\x12+\n\'ENTER_IN_ERROR_UPDATE_DIAGNOSIS_COMMAND\x10\x7f\x12!\n\x1cORIGINATE_CLOSE_GOAL_COMMAND\x10\x80\x01\x12\x1c\n\x17\x45\x44IT_CLOSE_GOAL_COMMAND\x10\x81\x01\x12\x1e\n\x19\x44\x45LETE_CLOSE_GOAL_COMMAND\x10\x82\x01\x12\x1e\n\x19\x43OMMIT_CLOSE_GOAL_COMMAND\x10\x83\x01\x12&\n!ENTER_IN_ERROR_CLOSE_GOAL_COMMAND\x10\x84\x01\x12\x1c\n\x17ORIGINATE_REFER_COMMAND\x10\x8b\x01\x12\x17\n\x12\x45\x44IT_REFER_COMMAND\x10\x8c\x01\x12\x19\n\x14\x44\x45LETE_REFER_COMMAND\x10\x8d\x01\x12\x19\n\x14\x43OMMIT_REFER_COMMAND\x10\x8e\x01\x12!\n\x1c\x45NTER_IN_ERROR_REFER_COMMAND\x10\x8f\x01\x12(\n#ORIGINATE_CHANGE_MEDICATION_COMMAND\x10\x96\x01\x12#\n\x1e\x45\x44IT_CHANGE_MEDICATION_COMMAND\x10\x97\x01\x12%\n DELETE_CHANGE_MEDICATION_COMMAND\x10\x98\x01\x12%\n COMMIT_CHANGE_MEDICATION_COMMAND\x10\x99\x01\x12-\n(ENTER_IN_ERROR_CHANGE_MEDICATION_COMMAND\x10\x9a\x01\x12 \n\x1b\x43REATE_QUESTIONNAIRE_RESULT\x10\x8a\x01\x12-\n(ANNOTATE_PATIENT_CHART_CONDITION_RESULTS\x10\xc8\x01\x12%\n ANNOTATE_CLAIM_CONDITION_RESULTS\x10\xac\x02\x12(\n#SHOW_PATIENT_CHART_SUMMARY_SECTIONS\x10\x90\x03\x12\"\n\x1dSHOW_PATIENT_PROFILE_SECTIONS\x10\xf4\x03\x12\x37\n2PATIENT_PROFILE__ADD_PHARMACY__POST_SEARCH_RESULTS\x10\xf5\x03\x12)\n$SEND_SURESCRIPTS_ELIGIBILITY_REQUEST\x10\xd8\x04\x12\x30\n+SEND_SURESCRIPTS_MEDICATION_HISTORY_REQUEST\x10\xd9\x04\x12&\n!SEND_SURESCRIPTS_BENEFITS_REQUEST\x10\xda\x04\x12\x1b\n\x16ORIGINATE_EXAM_COMMAND\x10\xbc\x05\x12\x16\n\x11\x45\x44IT_EXAM_COMMAND\x10\xbd\x05\x12\x18\n\x13\x44\x45LETE_EXAM_COMMAND\x10\xbe\x05\x12\x18\n\x13\x43OMMIT_EXAM_COMMAND\x10\xbf\x05\x12 \n\x1b\x45NTER_IN_ERROR_EXAM_COMMAND\x10\xc0\x05\x12\x1a\n\x15ORIGINATE_ROS_COMMAND\x10\xa0\x06\x12\x15\n\x10\x45\x44IT_ROS_COMMAND\x10\xa1\x06\x12\x17\n\x12\x44\x45LETE_ROS_COMMAND\x10\xa2\x06\x12\x17\n\x12\x43OMMIT_ROS_COMMAND\x10\xa3\x06\x12\x1f\n\x1a\x45NTER_IN_ERROR_ROS_COMMAND\x10\xa4\x06\x12,\n\'ORIGINATE_STRUCTURED_ASSESSMENT_COMMAND\x10\x84\x07\x12\'\n\"EDIT_STRUCTURED_ASSESSMENT_COMMAND\x10\x85\x07\x12)\n$DELETE_STRUCTURED_ASSESSMENT_COMMAND\x10\x86\x07\x12)\n$COMMIT_STRUCTURED_ASSESSMENT_COMMAND\x10\x87\x07\x12\x31\n,ENTER_IN_ERROR_STRUCTURED_ASSESSMENT_COMMAND\x10\x88\x07\x12 \n\x1bORIGINATE_FOLLOW_UP_COMMAND\x10\x89\x07\x12\x1b\n\x16\x45\x44IT_FOLLOW_UP_COMMAND\x10\x8a\x07\x12\x1d\n\x18\x44\x45LETE_FOLLOW_UP_COMMAND\x10\x8b\x07\x12\x1d\n\x18\x43OMMIT_FOLLOW_UP_COMMAND\x10\x8c\x07\x12%\n ENTER_IN_ERROR_FOLLOW_UP_COMMAND\x10\x8d\x07\x12$\n\x1fORIGINATE_IMAGING_ORDER_COMMAND\x10\xcc\x08\x12\x1f\n\x1a\x45\x44IT_IMAGING_ORDER_COMMAND\x10\xcd\x08\x12!\n\x1c\x44\x45LETE_IMAGING_ORDER_COMMAND\x10\xce\x08\x12!\n\x1c\x43OMMIT_IMAGING_ORDER_COMMAND\x10\xcf\x08\x12)\n$ENTER_IN_ERROR_IMAGING_ORDER_COMMAND\x10\xd0\x08\x12(\n#ORIGINATE_RESOLVE_CONDITION_COMMAND\x10\xb0\t\x12#\n\x1e\x45\x44IT_RESOLVE_CONDITION_COMMAND\x10\xb1\t\x12%\n DELETE_RESOLVE_CONDITION_COMMAND\x10\xb2\t\x12%\n COMMIT_RESOLVE_CONDITION_COMMAND\x10\xb3\t\x12-\n(ENTER_IN_ERROR_RESOLVE_CONDITION_COMMAND\x10\xb4\t\x12*\n%ORIGINATE_ADJUST_PRESCRIPTION_COMMAND\x10\x94\n\x12%\n EDIT_ADJUST_PRESCRIPTION_COMMAND\x10\x95\n\x12\'\n\"DELETE_ADJUST_PRESCRIPTION_COMMAND\x10\x96\n\x12\'\n\"COMMIT_ADJUST_PRESCRIPTION_COMMAND\x10\x97\n\x12/\n*ENTER_IN_ERROR_ADJUST_PRESCRIPTION_COMMAND\x10\x98\n\x12+\n&ORIGINATE_CHART_SECTION_REVIEW_COMMAND\x10\xf8\n\x12\x17\n\x12SHOW_ACTION_BUTTON\x10\xe8\x07\x12 \n\x1bPATIENT_PORTAL__FORM_RESULT\x10\xd0\x0f\x12.\n)PATIENT_PORTAL__APPOINTMENT_IS_CANCELABLE\x10\xd1\x0f\x12\x31\n,PATIENT_PORTAL__APPOINTMENT_IS_RESCHEDULABLE\x10\xd2\x0f\x12\x32\n-PATIENT_PORTAL__APPOINTMENT_SHOW_MEETING_LINK\x10\xd3\x0f\x12 \n\x1bPATIENT_PORTAL__SEND_INVITE\x10\xd4\x0f\x12=\n8PATIENT_PORTAL__APPOINTMENTS__SLOTS__POST_SEARCH_RESULTS\x10\xd5\x0f\x12M\nHPATIENT_PORTAL__APPOINTMENTS__FORM_APPOINTMENT_TYPES__PRE_SEARCH_RESULTS\x10\xd6\x0f\x12N\nIPATIENT_PORTAL__APPOINTMENTS__FORM_APPOINTMENT_TYPES__POST_SEARCH_RESULTS\x10\xd7\x0f\x12\x45\n@PATIENT_PORTAL__APPOINTMENTS__FORM_LOCATIONS__PRE_SEARCH_RESULTS\x10\xd8\x0f\x12\x46\nAPATIENT_PORTAL__APPOINTMENTS__FORM_LOCATIONS__POST_SEARCH_RESULTS\x10\xd9\x0f\x12\x45\n@PATIENT_PORTAL__APPOINTMENTS__FORM_PROVIDERS__PRE_SEARCH_RESULTS\x10\xda\x0f\x12\x46\nAPATIENT_PORTAL__APPOINTMENTS__FORM_PROVIDERS__POST_SEARCH_RESULTS\x10\xdb\x0f\x12.\n)PATIENT_PORTAL__APPLICATION_CONFIGURATION\x10\xdc\x0f\x12\x1a\n\x15\x41\x44\x44_BILLING_LINE_ITEM\x10\xee\x0f\x12\x1d\n\x18UPDATE_BILLING_LINE_ITEM\x10\xef\x0f\x12\x1d\n\x18REMOVE_BILLING_LINE_ITEM\x10\xf0\x0f\x12#\n\x1eSHOW_PATIENT_PORTAL_MENU_ITEMS\x10\xb4\x10\x12\x12\n\rPORTAL_WIDGET\x10\xb5\x10\x12\x11\n\x0cLAUNCH_MODAL\x10\xb8\x17\x12\x18\n\x13SIMPLE_API_RESPONSE\x10\xa0\x1f\x12 \n\x1bSIMPLE_API_WEBSOCKET_ACCEPT\x10\xa1\x1f\x12\x1e\n\x19SIMPLE_API_WEBSOCKET_DENY\x10\xa2\x1f\x12#\n\x1eSIMPLE_API_WEBSOCKET_BROADCAST\x10\xa3\x1f\x12\x10\n\x0bUPDATE_USER\x10\x88\'\x12\x10\n\x0b\x43REATE_NOTE\x10\xf0.\x12\x10\n\x0bUPDATE_NOTE\x10\xfd.\x12\x17\n\x12\x43REATE_APPOINTMENT\x10\xf1.\x12\x17\n\x12UPDATE_APPOINTMENT\x10\xfe.\x12\x17\n\x12\x43\x41NCEL_APPOINTMENT\x10\xff.\x12\x1a\n\x15\x43REATE_SCHEDULE_EVENT\x10\xf2.\x12\x1a\n\x15UPDATE_SCHEDULE_EVENT\x10\x80/\x12\x1a\n\x15\x44\x45LETE_SCHEDULE_EVENT\x10\x81/\x12\x13\n\x0e\x43REATE_PATIENT\x10\xf3.\x12\x13\n\x0e\x43REATE_MESSAGE\x10\xf4.\x12\x11\n\x0cSEND_MESSAGE\x10\xf5.\x12\x1c\n\x17\x43REATE_AND_SEND_MESSAGE\x10\xf6.\x12\x11\n\x0c\x45\x44IT_MESSAGE\x10\xf7.\x12/\n*PATIENT_METADATA__CREATE_ADDITIONAL_FIELDS\x10\xfa.\x12\x1c\n\x17UPSERT_PATIENT_METADATA\x10\xfb.\x12\'\n\"CREATE_PATIENT_EXTERNAL_IDENTIFIER\x10\xfc.b\x06proto3')
18
18
 
19
19
  _globals = globals()
20
20
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -22,7 +22,7 @@ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'canvas_generated.messages.e
22
22
  if _descriptor._USE_C_DESCRIPTORS == False:
23
23
  DESCRIPTOR._options = None
24
24
  _globals['_EFFECTTYPE']._serialized_start=175
25
- _globals['_EFFECTTYPE']._serialized_end=7819
25
+ _globals['_EFFECTTYPE']._serialized_end=7943
26
26
  _globals['_EFFECT']._serialized_start=51
27
27
  _globals['_EFFECT']._serialized_end=172
28
28
  # @@protoc_insertion_point(module_scope)
@@ -218,8 +218,13 @@ class EffectType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
218
218
  SIMPLE_API_WEBSOCKET_BROADCAST: _ClassVar[EffectType]
219
219
  UPDATE_USER: _ClassVar[EffectType]
220
220
  CREATE_NOTE: _ClassVar[EffectType]
221
+ UPDATE_NOTE: _ClassVar[EffectType]
221
222
  CREATE_APPOINTMENT: _ClassVar[EffectType]
223
+ UPDATE_APPOINTMENT: _ClassVar[EffectType]
224
+ CANCEL_APPOINTMENT: _ClassVar[EffectType]
222
225
  CREATE_SCHEDULE_EVENT: _ClassVar[EffectType]
226
+ UPDATE_SCHEDULE_EVENT: _ClassVar[EffectType]
227
+ DELETE_SCHEDULE_EVENT: _ClassVar[EffectType]
223
228
  CREATE_PATIENT: _ClassVar[EffectType]
224
229
  CREATE_MESSAGE: _ClassVar[EffectType]
225
230
  SEND_MESSAGE: _ClassVar[EffectType]
@@ -439,8 +444,13 @@ SIMPLE_API_WEBSOCKET_DENY: EffectType
439
444
  SIMPLE_API_WEBSOCKET_BROADCAST: EffectType
440
445
  UPDATE_USER: EffectType
441
446
  CREATE_NOTE: EffectType
447
+ UPDATE_NOTE: EffectType
442
448
  CREATE_APPOINTMENT: EffectType
449
+ UPDATE_APPOINTMENT: EffectType
450
+ CANCEL_APPOINTMENT: EffectType
443
451
  CREATE_SCHEDULE_EVENT: EffectType
452
+ UPDATE_SCHEDULE_EVENT: EffectType
453
+ DELETE_SCHEDULE_EVENT: EffectType
444
454
  CREATE_PATIENT: EffectType
445
455
  CREATE_MESSAGE: EffectType
446
456
  SEND_MESSAGE: EffectType
@@ -0,0 +1,233 @@
1
+ import json
2
+ from typing import Any
3
+ from uuid import UUID
4
+
5
+ from pydantic_core import InitErrorDetails
6
+
7
+ from canvas_sdk.effects import Effect
8
+ from canvas_sdk.effects.note.base import AppointmentABC
9
+ from canvas_sdk.v1.data import NoteType, Patient
10
+ from canvas_sdk.v1.data.note import NoteTypeCategories
11
+
12
+
13
+ class ScheduleEvent(AppointmentABC):
14
+ """
15
+ Effect to create a schedule event.
16
+
17
+ Attributes:
18
+ note_type_id (UUID | str | None): The ID of the note type.
19
+ patient_id (str | None): The ID of the patient, if applicable.
20
+ description (str | None): The description of the schedule event, if applicable.
21
+ """
22
+
23
+ class Meta:
24
+ effect_type = "SCHEDULE_EVENT"
25
+
26
+ note_type_id: UUID | str | None = None
27
+ patient_id: str | None = None
28
+ description: str | None = None
29
+
30
+ def _get_error_details(self, method: Any) -> list[InitErrorDetails]:
31
+ """
32
+ Validates the schedule event note type and returns a list of error details if validation fails.
33
+
34
+ Args:
35
+ method (Any): The method being validated.
36
+
37
+ Returns:
38
+ list[InitErrorDetails]: A list of error details for invalid schedule event note types.
39
+ """
40
+ errors = super()._get_error_details(method)
41
+
42
+ # note_type_id is required for create
43
+ if method == "create" and not self.note_type_id:
44
+ errors.append(
45
+ self._create_error_detail(
46
+ "missing",
47
+ "Field 'note_type_id' is required to create a schedule event.",
48
+ None,
49
+ )
50
+ )
51
+ return errors
52
+
53
+ if self.note_type_id:
54
+ note_type = (
55
+ NoteType.objects.values("category", "is_patient_required", "allow_custom_title")
56
+ .filter(id=self.note_type_id)
57
+ .first()
58
+ )
59
+
60
+ if not note_type:
61
+ errors.append(
62
+ self._create_error_detail(
63
+ "value",
64
+ f"Note type with ID {self.note_type_id} does not exist.",
65
+ self.note_type_id,
66
+ )
67
+ )
68
+ return errors
69
+
70
+ if note_type["category"] != NoteTypeCategories.SCHEDULE_EVENT:
71
+ errors.append(
72
+ self._create_error_detail(
73
+ "value",
74
+ f"Schedule event note type must be of type: {NoteTypeCategories.SCHEDULE_EVENT}.",
75
+ self.note_type_id,
76
+ )
77
+ )
78
+
79
+ if note_type["is_patient_required"] and not self.patient_id:
80
+ errors.append(
81
+ self._create_error_detail(
82
+ "value",
83
+ "Patient ID is required for this note type.",
84
+ self.note_type_id,
85
+ )
86
+ )
87
+
88
+ if not note_type["allow_custom_title"] and self.description:
89
+ errors.append(
90
+ self._create_error_detail(
91
+ "value",
92
+ "Description is not allowed for this note type.",
93
+ self.note_type_id,
94
+ )
95
+ )
96
+
97
+ # Validate patient exists if provided
98
+ if self.patient_id and not Patient.objects.filter(id=self.patient_id).exists():
99
+ errors.append(
100
+ self._create_error_detail(
101
+ "value",
102
+ f"Patient with ID {self.patient_id} does not exist.",
103
+ self.patient_id,
104
+ )
105
+ )
106
+
107
+ return errors
108
+
109
+ def delete(self) -> Effect:
110
+ """Send a DELETE effect for the schedule event."""
111
+ self._validate_before_effect("delete")
112
+ return Effect(
113
+ type=f"DELETE_{self.Meta.effect_type}",
114
+ payload=json.dumps(
115
+ {
116
+ "data": self.values,
117
+ }
118
+ ),
119
+ )
120
+
121
+
122
+ class Appointment(AppointmentABC):
123
+ """
124
+ Effect to create or update an appointment.
125
+
126
+ Attributes:
127
+ appointment_note_type_id (UUID | str | None): The ID of the appointment note type.
128
+ meeting_link (str | None): The meeting link for the appointment, if any.
129
+ patient_id (str | None): The ID of the patient.
130
+ """
131
+
132
+ class Meta:
133
+ effect_type = "APPOINTMENT"
134
+
135
+ appointment_note_type_id: UUID | str | None = None
136
+ meeting_link: str | None = None
137
+ patient_id: str | None = None
138
+
139
+ def _get_error_details(self, method: Any) -> list[InitErrorDetails]:
140
+ """
141
+ Validates the appointment note type and returns a list of error details if validation fails.
142
+
143
+ Args:
144
+ method (Any): The method being validated.
145
+
146
+ Returns:
147
+ list[InitErrorDetails]: A list of error details for invalid appointment note types or missing patient IDs.
148
+ """
149
+ errors = super()._get_error_details(method)
150
+
151
+ if method == "create":
152
+ if not self.appointment_note_type_id:
153
+ errors.append(
154
+ self._create_error_detail(
155
+ "missing",
156
+ "Field 'appointment_note_type_id' is required to create an appointment.",
157
+ None,
158
+ )
159
+ )
160
+ if not self.patient_id:
161
+ errors.append(
162
+ self._create_error_detail(
163
+ "missing",
164
+ "Field 'patient_id' is required to create an appointment.",
165
+ None,
166
+ )
167
+ )
168
+
169
+ if method == "update" and self.patient_id:
170
+ errors.append(
171
+ self._create_error_detail(
172
+ "value",
173
+ "Field 'patient_id' cannot be updated for an existing appointment.",
174
+ None,
175
+ )
176
+ )
177
+
178
+ if self.patient_id and not Patient.objects.filter(id=self.patient_id).exists():
179
+ errors.append(
180
+ self._create_error_detail(
181
+ "value",
182
+ "Patient with ID {self.patient_id} does not exist.",
183
+ self.patient_id,
184
+ )
185
+ )
186
+
187
+ if self.appointment_note_type_id:
188
+ try:
189
+ category, is_scheduleable = NoteType.objects.values_list(
190
+ "category", "is_scheduleable"
191
+ ).get(id=self.appointment_note_type_id)
192
+ if category != NoteTypeCategories.ENCOUNTER:
193
+ errors.append(
194
+ self._create_error_detail(
195
+ "value",
196
+ f"Appointment note type must be of type, {NoteTypeCategories.ENCOUNTER} but got: {category}.",
197
+ self.appointment_note_type_id,
198
+ )
199
+ )
200
+
201
+ if not is_scheduleable:
202
+ errors.append(
203
+ self._create_error_detail(
204
+ "value",
205
+ "Appointment note type must be scheduleable.",
206
+ self.appointment_note_type_id,
207
+ )
208
+ )
209
+ except NoteType.DoesNotExist:
210
+ errors.append(
211
+ self._create_error_detail(
212
+ "value",
213
+ f"Note type with ID {self.appointment_note_type_id} does not exist.",
214
+ self.appointment_note_type_id,
215
+ )
216
+ )
217
+
218
+ return errors
219
+
220
+ def cancel(self) -> Effect:
221
+ """Send a CANCEL effect for the appointment."""
222
+ self._validate_before_effect("cancel")
223
+ return Effect(
224
+ type=f"CANCEL_{self.Meta.effect_type}",
225
+ payload=json.dumps(
226
+ {
227
+ "data": self.values,
228
+ }
229
+ ),
230
+ )
231
+
232
+
233
+ __exports__ = ("ScheduleEvent", "Appointment")