canvas 0.64.0__tar.gz → 0.66.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 (354) hide show
  1. {canvas-0.64.0 → canvas-0.66.0}/PKG-INFO +1 -1
  2. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/commands/commands/adjust_prescription.py +4 -0
  3. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/commands/commands/prescribe.py +6 -7
  4. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/test_utils/factories/__init__.py +8 -0
  5. canvas-0.66.0/canvas_sdk/test_utils/factories/medication_history.py +75 -0
  6. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/__init__.py +10 -0
  7. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/compound_medication.py +0 -1
  8. canvas-0.66.0/canvas_sdk/v1/data/medication_history.py +152 -0
  9. {canvas-0.64.0 → canvas-0.66.0}/plugin_runner/allowed-module-imports.json +10 -0
  10. {canvas-0.64.0 → canvas-0.66.0}/plugin_runner/sandbox.py +5 -0
  11. {canvas-0.64.0 → canvas-0.66.0}/pyproject.toml +1 -1
  12. {canvas-0.64.0 → canvas-0.66.0}/.gitignore +0 -0
  13. {canvas-0.64.0 → canvas-0.66.0}/README.md +0 -0
  14. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/__init__.py +0 -0
  15. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/__init__.py +0 -0
  16. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/auth/__init__.py +0 -0
  17. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/auth/storage.py +0 -0
  18. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/auth/utils.py +0 -0
  19. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/__init__.py +0 -0
  20. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/emit.py +0 -0
  21. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/ALLERGY_INTOLERANCE_CREATED.ndjson +0 -0
  22. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/ALLERGY_INTOLERANCE_UPDATED.ndjson +0 -0
  23. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_CANCELED.ndjson +0 -0
  24. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_CHECKED_IN.ndjson +0 -0
  25. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_CREATED.ndjson +0 -0
  26. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_NO_SHOWED.ndjson +0 -0
  27. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_RESCHEDULED.ndjson +0 -0
  28. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_RESTORED.ndjson +0 -0
  29. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_UPDATED.ndjson +0 -0
  30. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__CONDITION_SELECTED.ndjson +0 -0
  31. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__POST_COMMIT.ndjson +0 -0
  32. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__POST_ORIGINATE.ndjson +0 -0
  33. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__POST_UPDATE.ndjson +0 -0
  34. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__PRE_COMMIT.ndjson +0 -0
  35. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__PRE_ORIGINATE.ndjson +0 -0
  36. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__PRE_UPDATE.ndjson +0 -0
  37. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/BILLING_LINE_ITEM_CREATED.ndjson +0 -0
  38. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/BILLING_LINE_ITEM_UPDATED.ndjson +0 -0
  39. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/CONDITION_ASSESSED.ndjson +0 -0
  40. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/CONDITION_CREATED.ndjson +0 -0
  41. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/CONDITION_UPDATED.ndjson +0 -0
  42. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/CRON.ndjson +0 -0
  43. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/ENCOUNTER_CREATED.ndjson +0 -0
  44. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/ENCOUNTER_UPDATED.ndjson +0 -0
  45. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/IMMUNIZATION_CREATED.ndjson +0 -0
  46. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/IMMUNIZATION_STATEMENT_CREATED.ndjson +0 -0
  47. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/IMMUNIZATION_STATEMENT_UPDATED.ndjson +0 -0
  48. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/IMMUNIZATION_UPDATED.ndjson +0 -0
  49. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/INTERVIEW_CREATED.ndjson +0 -0
  50. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/INTERVIEW_UPDATED.ndjson +0 -0
  51. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/LAB_ORDER_CREATED.ndjson +0 -0
  52. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/LAB_ORDER_UPDATED.ndjson +0 -0
  53. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/MEDICATION_LIST_ITEM_CREATED.ndjson +0 -0
  54. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/MEDICATION_LIST_ITEM_UPDATED.ndjson +0 -0
  55. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__POST_COMMIT.ndjson +0 -0
  56. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__POST_ORIGINATE.ndjson +0 -0
  57. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__POST_UPDATE.ndjson +0 -0
  58. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__PRE_COMMIT.ndjson +0 -0
  59. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__PRE_ORIGINATE.ndjson +0 -0
  60. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__PRE_UPDATE.ndjson +0 -0
  61. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT__MEDICATION__POST_SEARCH.ndjson +0 -0
  62. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/PATIENT_CREATED.ndjson +0 -0
  63. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/PATIENT_UPDATED.ndjson +0 -0
  64. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/PLAN_COMMAND__POST_ORIGINATE.ndjson +0 -0
  65. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/PLAN_COMMAND__PRE_ORIGINATE.ndjson +0 -0
  66. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__POST_COMMIT.ndjson +0 -0
  67. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__POST_ORIGINATE.ndjson +0 -0
  68. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__POST_UPDATE.ndjson +0 -0
  69. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__PRE_COMMIT.ndjson +0 -0
  70. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__PRE_ORIGINATE.ndjson +0 -0
  71. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__PRE_UPDATE.ndjson +0 -0
  72. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE__QUESTIONNAIRE__POST_SEARCH.ndjson +0 -0
  73. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/SIMPLE_API_REQUEST.ndjson +0 -0
  74. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/TASK_COMMENT_CREATED.ndjson +0 -0
  75. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/TASK_CREATED.ndjson +0 -0
  76. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/TASK_UPDATED.ndjson +0 -0
  77. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/VITAL_SIGN_CREATED.ndjson +0 -0
  78. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/emit/event_fixtures/VITAL_SIGN_UPDATED.ndjson +0 -0
  79. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/logs/__init__.py +0 -0
  80. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/logs/logs.py +0 -0
  81. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/plugin/__init__.py +0 -0
  82. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/plugin/plugin.py +0 -0
  83. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/run_plugins/__init__.py +0 -0
  84. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/apps/run_plugins/run_plugins.py +0 -0
  85. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/main.py +0 -0
  86. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/templates/plugins/application/cookiecutter.json +0 -0
  87. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/CANVAS_MANIFEST.json +0 -0
  88. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/README.md +0 -0
  89. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/applications/__init__.py +0 -0
  90. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/applications/my_application.py +0 -0
  91. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/assets/python-logo.png +0 -0
  92. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/templates/plugins/default/cookiecutter.json +0 -0
  93. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/pyproject.toml +0 -0
  94. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/tests/__init__.py +0 -0
  95. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/tests/test_models.py +0 -0
  96. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/{{ cookiecutter.__package_name }}/CANVAS_MANIFEST.json +0 -0
  97. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/{{ cookiecutter.__package_name }}/README.md +0 -0
  98. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/{{ cookiecutter.__package_name }}/protocols/__init__.py +0 -0
  99. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/{{ cookiecutter.__package_name }}/protocols/my_protocol.py +0 -0
  100. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/utils/__init__.py +0 -0
  101. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/utils/context/__init__.py +0 -0
  102. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/utils/context/context.py +0 -0
  103. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/utils/print/__init__.py +0 -0
  104. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/utils/print/print.py +0 -0
  105. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/utils/urls/__init__.py +0 -0
  106. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/utils/urls/urls.py +0 -0
  107. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/utils/validators/__init__.py +0 -0
  108. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/utils/validators/manifest_schema.py +0 -0
  109. {canvas-0.64.0 → canvas-0.66.0}/canvas_cli/utils/validators/validators.py +0 -0
  110. {canvas-0.64.0 → canvas-0.66.0}/canvas_generated/messages/effects_pb2.py +0 -0
  111. {canvas-0.64.0 → canvas-0.66.0}/canvas_generated/messages/effects_pb2.pyi +0 -0
  112. {canvas-0.64.0 → canvas-0.66.0}/canvas_generated/messages/effects_pb2_grpc.py +0 -0
  113. {canvas-0.64.0 → canvas-0.66.0}/canvas_generated/messages/events_pb2.py +0 -0
  114. {canvas-0.64.0 → canvas-0.66.0}/canvas_generated/messages/events_pb2.pyi +0 -0
  115. {canvas-0.64.0 → canvas-0.66.0}/canvas_generated/messages/events_pb2_grpc.py +0 -0
  116. {canvas-0.64.0 → canvas-0.66.0}/canvas_generated/messages/plugins_pb2.py +0 -0
  117. {canvas-0.64.0 → canvas-0.66.0}/canvas_generated/messages/plugins_pb2.pyi +0 -0
  118. {canvas-0.64.0 → canvas-0.66.0}/canvas_generated/messages/plugins_pb2_grpc.py +0 -0
  119. {canvas-0.64.0 → canvas-0.66.0}/canvas_generated/services/plugin_runner_pb2.py +0 -0
  120. {canvas-0.64.0 → canvas-0.66.0}/canvas_generated/services/plugin_runner_pb2.pyi +0 -0
  121. {canvas-0.64.0 → canvas-0.66.0}/canvas_generated/services/plugin_runner_pb2_grpc.py +0 -0
  122. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/__init__.py +0 -0
  123. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/base.py +0 -0
  124. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/caching/__init__.py +0 -0
  125. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/caching/base.py +0 -0
  126. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/caching/client.py +0 -0
  127. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/caching/exceptions.py +0 -0
  128. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/caching/plugins.py +0 -0
  129. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/caching/utils.py +0 -0
  130. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/commands/__init__.py +0 -0
  131. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/commands/base.py +0 -0
  132. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/commands/commands/__init__.py +0 -0
  133. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/commands/commands/allergy.py +0 -0
  134. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/commands/commands/assess.py +0 -0
  135. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/commands/commands/change_medication.py +0 -0
  136. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/commands/commands/chart_section_review.py +0 -0
  137. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/commands/commands/close_goal.py +0 -0
  138. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/commands/commands/diagnose.py +0 -0
  139. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/commands/commands/exam.py +0 -0
  140. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/commands/commands/family_history.py +0 -0
  141. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/commands/commands/follow_up.py +0 -0
  142. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/commands/commands/goal.py +0 -0
  143. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/commands/commands/history_present_illness.py +0 -0
  144. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/commands/commands/imaging_order.py +0 -0
  145. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/commands/commands/immunization_statement.py +0 -0
  146. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/commands/commands/instruct.py +0 -0
  147. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/commands/commands/lab_order.py +0 -0
  148. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/commands/commands/medical_history.py +0 -0
  149. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/commands/commands/medication_statement.py +0 -0
  150. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/commands/commands/past_surgical_history.py +0 -0
  151. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/commands/commands/perform.py +0 -0
  152. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/commands/commands/plan.py +0 -0
  153. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/commands/commands/questionnaire/__init__.py +0 -0
  154. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/commands/commands/questionnaire/question.py +0 -0
  155. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/commands/commands/questionnaire/toggle_questions.py +0 -0
  156. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/commands/commands/reason_for_visit.py +0 -0
  157. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/commands/commands/refer.py +0 -0
  158. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/commands/commands/refill.py +0 -0
  159. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/commands/commands/remove_allergy.py +0 -0
  160. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/commands/commands/resolve_condition.py +0 -0
  161. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/commands/commands/review_of_systems.py +0 -0
  162. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/commands/commands/stop_medication.py +0 -0
  163. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/commands/commands/structured_assessment.py +0 -0
  164. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/commands/commands/task.py +0 -0
  165. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/commands/commands/update_diagnosis.py +0 -0
  166. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/commands/commands/update_goal.py +0 -0
  167. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/commands/commands/vitals.py +0 -0
  168. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/commands/constants.py +0 -0
  169. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/__init__.py +0 -0
  170. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/appointments_metadata/__init__.py +0 -0
  171. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/appointments_metadata/appointments_metadata_create_form.py +0 -0
  172. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/appointments_metadata/base.py +0 -0
  173. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/banner_alert/__init__.py +0 -0
  174. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/banner_alert/add_banner_alert.py +0 -0
  175. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/banner_alert/remove_banner_alert.py +0 -0
  176. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/base.py +0 -0
  177. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/billing_line_item/__init__.py +0 -0
  178. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/billing_line_item/add_billing_line_item.py +0 -0
  179. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/billing_line_item/remove_billing_line_item.py +0 -0
  180. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/billing_line_item/update_billing_line_item.py +0 -0
  181. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/calendar/__init__.py +0 -0
  182. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/calendar/create_calendar.py +0 -0
  183. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/calendar/create_event.py +0 -0
  184. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/compound_medications/__init__.py +0 -0
  185. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/compound_medications/compound_medication.py +0 -0
  186. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/form.py +0 -0
  187. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/generate_full_chart_pdf.py +0 -0
  188. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/group.py +0 -0
  189. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/launch_modal.py +0 -0
  190. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/metadata.py +0 -0
  191. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/note/__init__.py +0 -0
  192. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/note/appointment.py +0 -0
  193. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/note/base.py +0 -0
  194. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/note/message.py +0 -0
  195. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/note/note.py +0 -0
  196. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/panel_configuration.py +0 -0
  197. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/patient/__init__.py +0 -0
  198. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/patient/base.py +0 -0
  199. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/patient/create_patient_external_identifier.py +0 -0
  200. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/patient/create_patient_preferred_pharmacies.py +0 -0
  201. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/patient_chart_group.py +0 -0
  202. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/patient_chart_summary_configuration.py +0 -0
  203. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/patient_metadata/__init__.py +0 -0
  204. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/patient_metadata/base.py +0 -0
  205. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/patient_metadata/patient_metadata_create_form.py +0 -0
  206. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/patient_portal/__init__.py +0 -0
  207. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/patient_portal/application_configuration.py +0 -0
  208. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/patient_portal/form_result.py +0 -0
  209. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/patient_portal_menu_configuration.py +0 -0
  210. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/patient_profile_configuration.py +0 -0
  211. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/payment_processor.py +0 -0
  212. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/protocol_card/__init__.py +0 -0
  213. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/protocol_card/protocol_card.py +0 -0
  214. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/questionnaire_result.py +0 -0
  215. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/send_invite.py +0 -0
  216. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/show_button.py +0 -0
  217. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/simple_api.py +0 -0
  218. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/surescripts/__init__.py +0 -0
  219. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/surescripts/surescripts_messages.py +0 -0
  220. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/task/__init__.py +0 -0
  221. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/task/task.py +0 -0
  222. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/update_user.py +0 -0
  223. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/widgets/__init__.py +0 -0
  224. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/effects/widgets/portal_widget.py +0 -0
  225. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/events/__init__.py +0 -0
  226. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/events/base.py +0 -0
  227. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/handlers/__init__.py +0 -0
  228. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/handlers/action_button.py +0 -0
  229. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/handlers/application.py +0 -0
  230. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/handlers/base.py +0 -0
  231. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/handlers/cron_task.py +0 -0
  232. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/handlers/payment_processors/__init__.py +0 -0
  233. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/handlers/payment_processors/base.py +0 -0
  234. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/handlers/payment_processors/card.py +0 -0
  235. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/handlers/simple_api/__init__.py +0 -0
  236. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/handlers/simple_api/api.py +0 -0
  237. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/handlers/simple_api/exceptions.py +0 -0
  238. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/handlers/simple_api/security.py +0 -0
  239. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/handlers/simple_api/tools.py +0 -0
  240. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/handlers/simple_api/websocket.py +0 -0
  241. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/protocols/__init__.py +0 -0
  242. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/protocols/base.py +0 -0
  243. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/protocols/clinical_quality_measure.py +0 -0
  244. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/protocols/timeframe.py +0 -0
  245. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/questionnaires/__init__.py +0 -0
  246. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/questionnaires/utils.py +0 -0
  247. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/templates/__init__.py +0 -0
  248. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/templates/utils.py +0 -0
  249. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/test_utils/__init__.py +0 -0
  250. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/test_utils/factories/claim_diagnosis_code.py +0 -0
  251. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/test_utils/factories/facility.py +0 -0
  252. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/test_utils/factories/patient.py +0 -0
  253. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/test_utils/factories/protocol_current.py +0 -0
  254. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/test_utils/factories/user.py +0 -0
  255. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/utils/__init__.py +0 -0
  256. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/utils/db.py +0 -0
  257. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/utils/http.py +0 -0
  258. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/utils/metrics.py +0 -0
  259. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/utils/plugins.py +0 -0
  260. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/__init__.py +0 -0
  261. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/apps.py +0 -0
  262. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/allergy_intolerance.py +0 -0
  263. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/appointment.py +0 -0
  264. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/assessment.py +0 -0
  265. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/banner_alert.py +0 -0
  266. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/base.py +0 -0
  267. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/billing.py +0 -0
  268. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/business_line.py +0 -0
  269. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/care_team.py +0 -0
  270. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/charge_description_master.py +0 -0
  271. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/claim.py +0 -0
  272. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/claim_diagnosis_code.py +0 -0
  273. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/claim_line_item.py +0 -0
  274. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/command.py +0 -0
  275. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/common.py +0 -0
  276. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/condition.py +0 -0
  277. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/coverage.py +0 -0
  278. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/detected_issue.py +0 -0
  279. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/device.py +0 -0
  280. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/discount.py +0 -0
  281. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/encounter.py +0 -0
  282. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/facility.py +0 -0
  283. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/fields.py +0 -0
  284. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/goal.py +0 -0
  285. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/imaging.py +0 -0
  286. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/immunization.py +0 -0
  287. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/invoice.py +0 -0
  288. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/lab.py +0 -0
  289. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/line_item_transaction.py +0 -0
  290. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/medication.py +0 -0
  291. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/medication_statement.py +0 -0
  292. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/message.py +0 -0
  293. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/note.py +0 -0
  294. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/observation.py +0 -0
  295. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/organization.py +0 -0
  296. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/patient.py +0 -0
  297. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/patient_consent.py +0 -0
  298. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/payment_collection.py +0 -0
  299. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/payor_specific_charge.py +0 -0
  300. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/posting.py +0 -0
  301. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/practicelocation.py +0 -0
  302. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/protocol_current.py +0 -0
  303. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/protocol_override.py +0 -0
  304. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/protocol_result.py +0 -0
  305. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/questionnaire.py +0 -0
  306. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/reason_for_visit.py +0 -0
  307. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/referral.py +0 -0
  308. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/service_provider.py +0 -0
  309. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/staff.py +0 -0
  310. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/stop_medication_event.py +0 -0
  311. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/task.py +0 -0
  312. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/team.py +0 -0
  313. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/user.py +0 -0
  314. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/data/utils.py +0 -0
  315. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/v1/models.py +0 -0
  316. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/value_set/__init__.py +0 -0
  317. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/value_set/custom.py +0 -0
  318. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/value_set/hcc2018.py +0 -0
  319. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/value_set/v2022/__init__.py +0 -0
  320. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/value_set/v2022/adverse_event.py +0 -0
  321. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/value_set/v2022/allergy.py +0 -0
  322. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/value_set/v2022/assessment.py +0 -0
  323. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/value_set/v2022/communication.py +0 -0
  324. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/value_set/v2022/condition.py +0 -0
  325. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/value_set/v2022/device.py +0 -0
  326. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/value_set/v2022/diagnostic_study.py +0 -0
  327. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/value_set/v2022/encounter.py +0 -0
  328. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/value_set/v2022/immunization.py +0 -0
  329. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/value_set/v2022/individual_characteristic.py +0 -0
  330. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/value_set/v2022/intervention.py +0 -0
  331. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/value_set/v2022/laboratory_test.py +0 -0
  332. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/value_set/v2022/medication.py +0 -0
  333. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/value_set/v2022/physical_exam.py +0 -0
  334. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/value_set/v2022/procedure.py +0 -0
  335. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/value_set/v2022/symptom.py +0 -0
  336. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/value_set/value_set.py +0 -0
  337. {canvas-0.64.0 → canvas-0.66.0}/canvas_sdk/views/__init__.py +0 -0
  338. {canvas-0.64.0 → canvas-0.66.0}/logger/__init__.py +0 -0
  339. {canvas-0.64.0 → canvas-0.66.0}/logger/logger.py +0 -0
  340. {canvas-0.64.0 → canvas-0.66.0}/plugin_runner/__init__.py +0 -0
  341. {canvas-0.64.0 → canvas-0.66.0}/plugin_runner/authentication.py +0 -0
  342. {canvas-0.64.0 → canvas-0.66.0}/plugin_runner/aws_headers.py +0 -0
  343. {canvas-0.64.0 → canvas-0.66.0}/plugin_runner/exceptions.py +0 -0
  344. {canvas-0.64.0 → canvas-0.66.0}/plugin_runner/generate_allowed_imports.py +0 -0
  345. {canvas-0.64.0 → canvas-0.66.0}/plugin_runner/installation.py +0 -0
  346. {canvas-0.64.0 → canvas-0.66.0}/plugin_runner/load_all_plugins.py +0 -0
  347. {canvas-0.64.0 → canvas-0.66.0}/plugin_runner/plugin_runner.py +0 -0
  348. {canvas-0.64.0 → canvas-0.66.0}/protobufs/canvas_generated/messages/effects.proto +0 -0
  349. {canvas-0.64.0 → canvas-0.66.0}/protobufs/canvas_generated/messages/events.proto +0 -0
  350. {canvas-0.64.0 → canvas-0.66.0}/protobufs/canvas_generated/messages/plugins.proto +0 -0
  351. {canvas-0.64.0 → canvas-0.66.0}/protobufs/canvas_generated/services/plugin_runner.proto +0 -0
  352. {canvas-0.64.0 → canvas-0.66.0}/pubsub/__init__.py +0 -0
  353. {canvas-0.64.0 → canvas-0.66.0}/pubsub/pubsub.py +0 -0
  354. {canvas-0.64.0 → canvas-0.66.0}/settings.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: canvas
3
- Version: 0.64.0
3
+ Version: 0.66.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
@@ -13,5 +13,9 @@ class AdjustPrescriptionCommand(RefillCommand):
13
13
  default=None, json_schema_extra={"commands_api_name": "change_medication_to"}
14
14
  )
15
15
 
16
+ def _has_fdb_code(self) -> bool:
17
+ """Check if new_fdb_code is provided and non-empty."""
18
+ return self.new_fdb_code is not None and self.new_fdb_code.strip() != ""
19
+
16
20
 
17
21
  __exports__ = ("AdjustPrescriptionCommand",)
@@ -74,12 +74,16 @@ class PrescribeCommand(_SendableCommandMixin, _BaseCommand):
74
74
  default=None, json_schema_extra={"commands_api_name": "compound_medication_data"}
75
75
  )
76
76
 
77
+ def _has_fdb_code(self) -> bool:
78
+ """Check if fdb_code is provided and non-empty."""
79
+ return self.fdb_code is not None and self.fdb_code.strip() != ""
80
+
77
81
  def _get_error_details(self, method: str) -> list[InitErrorDetails]:
78
82
  """Add compound medication validation to the base validation."""
79
83
  errors = super()._get_error_details(method)
80
84
 
81
85
  # Validate that exactly one medication type is provided
82
- has_fdb_code = self.fdb_code is not None and self.fdb_code.strip() != ""
86
+ has_fdb_code = self._has_fdb_code()
83
87
  has_compound_medication_id = (
84
88
  self.compound_medication_id is not None and self.compound_medication_id.strip() != ""
85
89
  )
@@ -156,10 +160,8 @@ class PrescribeCommand(_SendableCommandMixin, _BaseCommand):
156
160
  str(Decimal(self.quantity_to_dispense)) if self.quantity_to_dispense else None
157
161
  )
158
162
 
159
- values["compound_medication_values"] = {}
160
-
161
163
  if self.is_dirty("compound_medication_id") and self.compound_medication_id:
162
- values["compound_medication_values"]["id"] = values.pop("compound_medication_id")
164
+ values["compound_medication_values"] = {"id": values.pop("compound_medication_id")}
163
165
 
164
166
  # Handle compound medication data
165
167
  elif (
@@ -170,9 +172,6 @@ class PrescribeCommand(_SendableCommandMixin, _BaseCommand):
170
172
  if isinstance(compound_data, CompoundMedicationData):
171
173
  values["compound_medication_values"] = compound_data.to_dict()
172
174
 
173
- if values.get("fdb_code") is not None and values.get("compound_medication_values") == {}:
174
- del values["compound_medication_values"]
175
-
176
175
  return values
177
176
 
178
177
  def originate(self, line_number: int = -1) -> Effect:
@@ -1,5 +1,10 @@
1
1
  from .claim_diagnosis_code import ClaimDiagnosisCodeFactory
2
2
  from .facility import FacilityFactory
3
+ from .medication_history import (
4
+ MedicationHistoryMedicationCodingFactory,
5
+ MedicationHistoryMedicationFactory,
6
+ MedicationHistoryResponseFactory,
7
+ )
3
8
  from .patient import PatientAddressFactory, PatientFacilityAddressFactory, PatientFactory
4
9
  from .protocol_current import ProtocolCurrentFactory
5
10
  from .user import CanvasUserFactory
@@ -8,6 +13,9 @@ __all__ = (
8
13
  "CanvasUserFactory",
9
14
  "ClaimDiagnosisCodeFactory",
10
15
  "FacilityFactory",
16
+ "MedicationHistoryMedicationFactory",
17
+ "MedicationHistoryMedicationCodingFactory",
18
+ "MedicationHistoryResponseFactory",
11
19
  "PatientAddressFactory",
12
20
  "PatientFacilityAddressFactory",
13
21
  "PatientFactory",
@@ -0,0 +1,75 @@
1
+ import datetime
2
+
3
+ import factory
4
+ from django.utils import timezone
5
+ from factory.fuzzy import FuzzyDate, FuzzyDateTime
6
+
7
+ from canvas_sdk.test_utils.factories.patient import PatientFactory
8
+ from canvas_sdk.v1.data.medication_history import (
9
+ MedicationHistoryMedication,
10
+ MedicationHistoryMedicationCoding,
11
+ MedicationHistoryResponse,
12
+ MedicationHistoryResponseStatus,
13
+ )
14
+
15
+
16
+ class MedicationHistoryMedicationFactory(
17
+ factory.django.DjangoModelFactory[MedicationHistoryMedication]
18
+ ):
19
+ """Factory for creating a MedicationHistoryMedication."""
20
+
21
+ class Meta:
22
+ model = MedicationHistoryMedication
23
+
24
+ patient = factory.SubFactory(PatientFactory)
25
+ last_fill_date = FuzzyDateTime(
26
+ start_dt=timezone.now() - datetime.timedelta(days=365), end_dt=timezone.now()
27
+ )
28
+
29
+ drug_description = factory.Faker("word")
30
+ strength_value = "10"
31
+ strength_form = "tablet"
32
+ strength_unit_of_measure = "mg"
33
+ quantity = 30.0
34
+ quantity_unit_of_measure = "tablets"
35
+ days_supply = 30
36
+ sig = factory.Faker("sentence", nb_words=4)
37
+
38
+
39
+ class MedicationHistoryMedicationCodingFactory(
40
+ factory.django.DjangoModelFactory[MedicationHistoryMedicationCoding]
41
+ ):
42
+ """Factory for creating a MedicationHistoryMedicationCoding."""
43
+
44
+ class Meta:
45
+ model = MedicationHistoryMedicationCoding
46
+
47
+ medication = factory.SubFactory(MedicationHistoryMedicationFactory)
48
+
49
+ system = "http://www.nlm.nih.gov/research/umls/rxnorm"
50
+ version = "1.0"
51
+ code = factory.Faker("numerify", text="######")
52
+ display = factory.Faker("word")
53
+ user_selected = False
54
+
55
+
56
+ class MedicationHistoryResponseFactory(
57
+ factory.django.DjangoModelFactory[MedicationHistoryResponse]
58
+ ):
59
+ """Factory for creating a MedicationHistoryResponse."""
60
+
61
+ class Meta:
62
+ model = MedicationHistoryResponse
63
+
64
+ patient = factory.SubFactory(PatientFactory)
65
+ status = MedicationHistoryResponseStatus.STATUS_APPROVED
66
+ start_date = FuzzyDate(
67
+ start_date=datetime.date.today() - datetime.timedelta(days=365),
68
+ end_date=datetime.date.today(),
69
+ )
70
+ end_date = FuzzyDate(
71
+ start_date=datetime.date.today(),
72
+ end_date=datetime.date.today() + datetime.timedelta(days=365),
73
+ )
74
+ message_id = factory.Faker("uuid4")
75
+ related_to_message_id = factory.Faker("uuid4")
@@ -45,6 +45,12 @@ from .line_item_transaction import (
45
45
  NewLineItemPayment,
46
46
  )
47
47
  from .medication import Medication, MedicationCoding
48
+ from .medication_history import (
49
+ MedicationHistoryMedication,
50
+ MedicationHistoryMedicationCoding,
51
+ MedicationHistoryResponse,
52
+ MedicationHistoryResponseStatus,
53
+ )
48
54
  from .medication_statement import MedicationStatement
49
55
  from .message import Message, MessageAttachment, MessageTransmission
50
56
  from .note import CurrentNoteStateEvent, Note, NoteStateChangeEvent, NoteType
@@ -164,6 +170,10 @@ __all__ = __exports__ = (
164
170
  "LineItemTransfer",
165
171
  "Medication",
166
172
  "MedicationCoding",
173
+ "MedicationHistoryMedication",
174
+ "MedicationHistoryMedicationCoding",
175
+ "MedicationHistoryResponseStatus",
176
+ "MedicationHistoryResponse",
167
177
  "MedicationStatement",
168
178
  "Message",
169
179
  "MessageAttachment",
@@ -6,7 +6,6 @@ class CompoundMedication(models.Model):
6
6
  """CompoundMedication."""
7
7
 
8
8
  class Meta:
9
- managed = False
10
9
  db_table = "canvas_sdk_data_api_compoundmedication_001"
11
10
 
12
11
  class PotencyUnits(TextChoices):
@@ -0,0 +1,152 @@
1
+ from django.contrib.postgres.fields import ArrayField
2
+ from django.db import models
3
+ from django.db.models import TextChoices
4
+
5
+ from canvas_sdk.v1.data.base import (
6
+ IdentifiableModel,
7
+ Model,
8
+ )
9
+
10
+
11
+ class MedicationHistoryMedication(IdentifiableModel):
12
+ """MedicationHistoryMedication."""
13
+
14
+ class Meta:
15
+ db_table = "canvas_sdk_data_api_medicationhistorymedication_001"
16
+
17
+ created = models.DateTimeField(auto_now_add=True)
18
+ modified = models.DateTimeField(auto_now=True)
19
+
20
+ patient = models.ForeignKey(
21
+ "v1.Patient",
22
+ on_delete=models.DO_NOTHING,
23
+ related_name="medication_history_medications",
24
+ null=True,
25
+ )
26
+
27
+ drug_description = models.TextField(blank=True, default="")
28
+
29
+ strength_value = models.CharField(max_length=255, blank=True, default="")
30
+ strength_form = models.CharField(max_length=255, blank=True, default="")
31
+ strength_unit_of_measure = models.CharField(max_length=255, blank=True, default="")
32
+
33
+ quantity = models.FloatField(null=True)
34
+ quantity_unit_of_measure = models.CharField(max_length=255, blank=True, default="")
35
+ quantity_code_list_qualifier = models.CharField(max_length=255, blank=True, default="")
36
+
37
+ days_supply = models.IntegerField(null=True)
38
+
39
+ last_fill_date = models.DateTimeField(db_index=True)
40
+ written_date = models.DateTimeField(blank=True, null=True)
41
+
42
+ other_date = models.DateTimeField(blank=True, null=True)
43
+ other_date_qualifier = models.CharField(max_length=255, blank=True, default="")
44
+
45
+ substitutions = models.BooleanField(null=True)
46
+
47
+ refills_remaining = models.IntegerField(null=True)
48
+
49
+ diagnosis_code = models.CharField(max_length=255, blank=True, default="")
50
+ diagnosis_qualifier = models.CharField(max_length=255, blank=True, default="")
51
+ diagnosis_description = models.CharField(max_length=255, blank=True, default="")
52
+
53
+ secondary_diagnosis_code = models.CharField(max_length=255, blank=True, default="")
54
+ secondary_diagnosis_qualifier = models.CharField(max_length=255, blank=True, default="")
55
+ secondary_diagnosis_description = models.CharField(max_length=255, blank=True, default="")
56
+
57
+ dea_schedule = models.CharField(max_length=255, blank=True, default="")
58
+
59
+ potency_unit_code = models.CharField(max_length=20, blank=True, default="")
60
+ etc_path_id = ArrayField(base_field=models.IntegerField(), null=True)
61
+ etc_path_name = ArrayField(base_field=models.CharField(max_length=255), null=True)
62
+
63
+ fill_number = models.IntegerField(blank=True, null=True)
64
+
65
+ prescriber_order_number = models.CharField(max_length=255, blank=True, default="")
66
+
67
+ source_description = models.CharField(max_length=255, blank=True, default="")
68
+ source_qualifier = models.CharField(max_length=255, blank=True, default="")
69
+ source_payer_id = models.CharField(max_length=255, blank=True, default="")
70
+ source_type = models.CharField(max_length=255, blank=True, default="")
71
+
72
+ note = models.TextField(blank=True, default="")
73
+ sig = models.TextField(blank=True, default="")
74
+
75
+ prior_authorization_status = models.CharField(max_length=255, blank=True, default="")
76
+ prior_authorization = models.CharField(max_length=255, blank=True, default="")
77
+
78
+ pharmacy_name = models.CharField(max_length=255, blank=True, default="")
79
+ pharmacy_ncpdp_id = models.CharField(max_length=255, blank=True, default="")
80
+ pharmacy_npi = models.CharField(max_length=255, blank=True, default="")
81
+
82
+ prescriber_business_name = models.CharField(max_length=255, blank=True, default="")
83
+ prescriber_first_name = models.CharField(max_length=255, blank=True, default="")
84
+ prescriber_last_name = models.CharField(max_length=255, blank=True, default="")
85
+ prescriber_npi = models.CharField(max_length=255, blank=True, default="")
86
+ prescriber_dea_number = models.CharField(max_length=255, blank=True, default="")
87
+
88
+
89
+ class MedicationHistoryMedicationCoding(Model):
90
+ """MedicationHistoryMedicationCoding."""
91
+
92
+ class Meta:
93
+ db_table = "canvas_sdk_data_api_medicationhistorymedicationcoding_001"
94
+
95
+ system = models.CharField(max_length=255)
96
+ version = models.CharField(max_length=255)
97
+ code = models.CharField(max_length=255)
98
+ display = models.CharField(max_length=1000)
99
+ user_selected = models.BooleanField(default=False)
100
+ medication = models.ForeignKey(
101
+ MedicationHistoryMedication, on_delete=models.CASCADE, related_name="codings"
102
+ )
103
+
104
+
105
+ class MedicationHistoryResponseStatus(TextChoices):
106
+ """MedicationHistoryResponseStatus."""
107
+
108
+ STATUS_APPROVED = "approved"
109
+ STATUS_DENIED = "denied"
110
+
111
+
112
+ class MedicationHistoryResponse(IdentifiableModel):
113
+ """MedicationHistoryResponse."""
114
+
115
+ class Meta:
116
+ db_table = "canvas_sdk_data_api_medicationhistoryresponse_001"
117
+
118
+ created = models.DateTimeField(auto_now_add=True)
119
+ modified = models.DateTimeField(auto_now=True)
120
+
121
+ patient = models.ForeignKey(
122
+ "v1.Patient",
123
+ on_delete=models.CASCADE,
124
+ related_name="medication_history_responses",
125
+ )
126
+ staff = models.ForeignKey(
127
+ "v1.Staff",
128
+ on_delete=models.CASCADE,
129
+ related_name="medication_history_responses",
130
+ null=True,
131
+ )
132
+
133
+ message_id = models.CharField(max_length=35, blank=True, default="", db_index=True)
134
+ related_to_message_id = models.CharField(max_length=35, blank=True, default="", db_index=True)
135
+
136
+ status = models.CharField(choices=MedicationHistoryResponseStatus.choices, max_length=20)
137
+
138
+ reason = models.TextField(blank=True, default="")
139
+ reason_code = models.CharField(max_length=2, blank=True, default="")
140
+
141
+ note = models.TextField(blank=True, default="")
142
+
143
+ start_date = models.DateField()
144
+ end_date = models.DateField()
145
+
146
+
147
+ __exports__ = (
148
+ "MedicationHistoryMedication",
149
+ "MedicationHistoryMedicationCoding",
150
+ "MedicationHistoryResponseStatus",
151
+ "MedicationHistoryResponse",
152
+ )
@@ -602,6 +602,10 @@
602
602
  "LineItemTransfer",
603
603
  "Medication",
604
604
  "MedicationCoding",
605
+ "MedicationHistoryMedication",
606
+ "MedicationHistoryMedicationCoding",
607
+ "MedicationHistoryResponse",
608
+ "MedicationHistoryResponseStatus",
605
609
  "MedicationStatement",
606
610
  "Message",
607
611
  "MessageAttachment",
@@ -822,6 +826,12 @@
822
826
  "MedicationCoding",
823
827
  "Status"
824
828
  ],
829
+ "canvas_sdk.v1.data.medication_history": [
830
+ "MedicationHistoryMedication",
831
+ "MedicationHistoryMedicationCoding",
832
+ "MedicationHistoryResponse",
833
+ "MedicationHistoryResponseStatus"
834
+ ],
825
835
  "canvas_sdk.v1.data.medication_statement": [
826
836
  "MedicationStatement"
827
837
  ],
@@ -168,6 +168,7 @@ STANDARD_LIBRARY_MODULES = {
168
168
  "Tuple",
169
169
  "Type",
170
170
  "TypedDict",
171
+ "TypeGuard",
171
172
  "Union",
172
173
  },
173
174
  "urllib": {
@@ -210,6 +211,10 @@ THIRD_PARTY_MODULES = {
210
211
  "Value",
211
212
  "When",
212
213
  },
214
+ "django.db.models.functions": {
215
+ "Coalesce",
216
+ "Trim",
217
+ },
213
218
  "django.db.models.query": {
214
219
  "QuerySet",
215
220
  },
@@ -58,7 +58,7 @@ license = "MIT"
58
58
  name = "canvas"
59
59
  readme = "README.md"
60
60
  requires-python = ">=3.11,<3.13"
61
- version = "0.64.0"
61
+ version = "0.66.0"
62
62
 
63
63
  [project.optional-dependencies]
64
64
  test-utils = [
File without changes
File without changes
File without changes
File without changes