canvas 0.58.0__py3-none-any.whl → 0.59.0__py3-none-any.whl

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.

@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: canvas
3
- Version: 0.58.0
3
+ Version: 0.59.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
@@ -71,18 +71,6 @@ canvas_cli/apps/plugin/__init__.py,sha256=GB6hBwbajm5cOs-DbJh3q6smPfAaIMa99tSbkv
71
71
  canvas_cli/apps/plugin/plugin.py,sha256=vlnd61nPt98NnYUPAeZMogcRPgv1pdDqBtey13H_Tug,20817
72
72
  canvas_cli/apps/run_plugins/__init__.py,sha256=iAMgX_6D3CdjQodGx_azwhSjouaxquOm8Z8QVXnlTFE,117
73
73
  canvas_cli/apps/run_plugins/run_plugins.py,sha256=5JbO0l4f2xtJbSTomJgKUqj416sT9GcDF0TrDg2JZYQ,3275
74
- canvas_cli/templates/plugins/application/cookiecutter.json,sha256=cI4Wpj68TkKeBP3P16PrjKacTHzsTIpl_rDdzyUpwz4,129
75
- canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/CANVAS_MANIFEST.json,sha256=-mfqhpljpF4eE8g05pIEnZMt_bDUdhgIBtuQd-devv8,945
76
- canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/README.md,sha256=3QKoJQq3YmdplGnDOBMsLCJ3Ya1_aKjoz-QiWc4QfjA,291
77
- canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/applications/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
78
- canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/applications/my_application.py,sha256=rTUUycVOZEj5B4CoBqWMl9T4xPIyTqxsWGzXfAd6huY,584
79
- canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/assets/python-logo.png,sha256=QAipNLQVwVK_pRO-PpsF3kISrkFUmifyxsjUGzokpNo,20637
80
- canvas_cli/templates/plugins/default/cookiecutter.json,sha256=LbcuMaWxrLats1BffuDkk2192qNTgA-NU6sAnsFyj8M,201
81
- canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/pyproject.toml,sha256=ogQ94GnE-Aj2KJbiTevwnomqKdZUeBZfIOTcU_KPPdI,422
82
- canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/{{ cookiecutter.__package_name }}/CANVAS_MANIFEST.json,sha256=1keK1aJ-rJu4hm5ypqJT82hooCUTUOQ10dhzQ-mab7c,638
83
- canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/{{ cookiecutter.__package_name }}/README.md,sha256=3QKoJQq3YmdplGnDOBMsLCJ3Ya1_aKjoz-QiWc4QfjA,291
84
- canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/{{ cookiecutter.__package_name }}/protocols/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
85
- canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/{{ cookiecutter.__package_name }}/protocols/my_protocol.py,sha256=fKLLcOIwvSWenW8-7tr8VqnF4Iox_5wU9V-Qw9UySsA,2381
86
74
  canvas_cli/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
87
75
  canvas_cli/utils/context/__init__.py,sha256=HhYvI-hydP0mV18nJiU7uo5gk0yN7EYNgouxieoGDOE,102
88
76
  canvas_cli/utils/context/context.py,sha256=wk4TxlslF52uD9nXcEZ1eY8L1rcEHk7k-6YBVwaWnVY,5191
@@ -236,7 +224,7 @@ canvas_sdk/utils/plugins.py,sha256=OPq9OiE1v1AF24HSdEEOlSJxRVc2NVksK0Gpf6OH1NE,1
236
224
  canvas_sdk/v1/__init__.py,sha256=YYXr5tEQlnwMgTXJbOG963tKSPiUOM4mUkX8wuiqp7U,17
237
225
  canvas_sdk/v1/apps.py,sha256=4MwQfQu78oX5bUVlyxYzbt4rZODi0ZesXe_3QOsEWO8,170
238
226
  canvas_sdk/v1/models.py,sha256=LqeHZ-Hz3EWyM9vYr9uZ9rBYdMXNuuvJqbmojV8EcEM,224
239
- canvas_sdk/v1/data/__init__.py,sha256=z2v3leRHvkPEjULJq2OxlTzURXI7-o9r1z2QokUUaP4,5281
227
+ canvas_sdk/v1/data/__init__.py,sha256=eW5hFb0LQmLzpvvULEnWX5TAsHZxwU4K7TK0fFxqUaE,5316
240
228
  canvas_sdk/v1/data/allergy_intolerance.py,sha256=KXfU7UqTdRfHUFrP8yncQGMvlRPEt2K6TrC_y7JYgiE,2453
241
229
  canvas_sdk/v1/data/appointment.py,sha256=UXvn6wYEgsphhTQaFbFg-UE7Bumy_UR-AQFnsSrL5Dk,2658
242
230
  canvas_sdk/v1/data/assessment.py,sha256=vnVoaKWoJGCfaYn6WilxpI5cTgkvM647hFIuTyi_AgY,1663
@@ -257,13 +245,14 @@ canvas_sdk/v1/data/detected_issue.py,sha256=k-tOX6fpzfRf9WmG7neHPEeWrpZUdTiTEqYz
257
245
  canvas_sdk/v1/data/device.py,sha256=5YnCApQR3ZprGO9zCsSP-4spwo4HVRDSTY3QCNwqYlo,1932
258
246
  canvas_sdk/v1/data/discount.py,sha256=Bqa0PcytSdqZ0MJor9EShtRUmNWGcBKtivGCmjk9Pbw,618
259
247
  canvas_sdk/v1/data/fields.py,sha256=bI7mPI_3B36ntyoVQ6vuDq8eGLoUIkwZZr14lTC-4To,1104
248
+ canvas_sdk/v1/data/goal.py,sha256=dOI0rakLBnnYSkdMt5W2uh7_W5Pp21G6s1z70PzU3TY,2465
260
249
  canvas_sdk/v1/data/imaging.py,sha256=N0OkJjmHI3jtv1w8RBhqGZGDGidNpf1ZwT0ypm1o60M,5246
261
250
  canvas_sdk/v1/data/invoice.py,sha256=F5j_Hvu-YwqhHFkp6FDui8vx6GumCAgj14YgDvfyeYU,1877
262
251
  canvas_sdk/v1/data/lab.py,sha256=8FPnApgcEfZ5f62387EgY6RZd8za2wps5LMzCB0_x6U,12969
263
252
  canvas_sdk/v1/data/line_item_transaction.py,sha256=OJA_3DLA1RF0v8jCgQ8SHaoqij_Z97Iatfi5i6CVEis,2406
264
253
  canvas_sdk/v1/data/medication.py,sha256=QMAUqqldJeQK9IuaoO5mWFp3IEjbqcqrxkzIgFZ4O0U,2333
265
254
  canvas_sdk/v1/data/message.py,sha256=EKc2kkWGuzrgBH3sDUa9jiNpRP7J1ZdWE6BnPhY2gvs,2268
266
- canvas_sdk/v1/data/note.py,sha256=ZZN0CoQbXmXxzo1cb7bpiXBcy7kLpTzZueGgdd6H95Q,9301
255
+ canvas_sdk/v1/data/note.py,sha256=Eq0JgDRzwK84BAT6Y51f47Gke2rseC3vvcjoqhzAsVE,9335
267
256
  canvas_sdk/v1/data/observation.py,sha256=l1EXGQ8FBBInxQthsmY1Oms9v73ni_J7SAP5M8Hmkvg,3881
268
257
  canvas_sdk/v1/data/organization.py,sha256=gt0KZC1hklwWf57vCxs2K0qPnLpMyyNFWNL7-WZ6AqI,1159
269
258
  canvas_sdk/v1/data/patient.py,sha256=7D_bxeCAoA_I8-2ZLzAMkCrV9ziZ_-IND9uOq0Wp83I,10515
@@ -307,7 +296,7 @@ canvas_sdk/views/__init__.py,sha256=YYXr5tEQlnwMgTXJbOG963tKSPiUOM4mUkX8wuiqp7U,
307
296
  logger/__init__.py,sha256=uMIOf1CDdKSmBKxKwO4CmDpvnJITci76IMXENOwSHEo,85
308
297
  logger/logger.py,sha256=l5W5jn3vGQt6TM7OxOpoMy-vC7RNNA2pGnQJJgHeXWA,2068
309
298
  plugin_runner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
310
- plugin_runner/allowed-module-imports.json,sha256=pFydies3GLrUmloVwuPgULHTR2ZEao_qbam7D97Fx8Q,35931
299
+ plugin_runner/allowed-module-imports.json,sha256=cGmKEtU3lzLzWZ0isxNGlsT-HKSPO5K5jz3KSfUsWAA,36066
311
300
  plugin_runner/authentication.py,sha256=UyyhXajokVFH866dpDhoTlXS9Cg7y0sQltn0_LcwXrY,1131
312
301
  plugin_runner/aws_headers.py,sha256=wZ8584E1fTW0CdGxOCnLSF8alH27z-URcUyoc6y6ohg,2782
313
302
  plugin_runner/exceptions.py,sha256=ltqn56SMTg-T5miSh5hux4ojwx0hZGSWaB7BxyAmcAo,545
@@ -322,7 +311,21 @@ protobufs/canvas_generated/messages/plugins.proto,sha256=xJyEeTwM6wWja3vGECLsIzf
322
311
  protobufs/canvas_generated/services/plugin_runner.proto,sha256=PZ0Ts11b9tdA5Gkg2M05JVEKAm0R4LFEwrGRS-TQ16E,466
323
312
  pubsub/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
324
313
  pubsub/pubsub.py,sha256=PHIvJ5SD3M-jQSYeGGSj1FuG6CvP6BQffAoGax9Uudk,1423
325
- canvas-0.58.0.dist-info/METADATA,sha256=QsN4_J0x0w2_4Hg8lQLY6tl2CwWLPgv-8NJzffQH-jg,4758
326
- canvas-0.58.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
327
- canvas-0.58.0.dist-info/entry_points.txt,sha256=0Vs_9GmTVUNniH6eDBlRPgofmADMV4BES6Ao26M4AbM,47
328
- canvas-0.58.0.dist-info/RECORD,,
314
+ canvas_cli/templates/plugins/application/cookiecutter.json,sha256=cI4Wpj68TkKeBP3P16PrjKacTHzsTIpl_rDdzyUpwz4,129
315
+ canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/CANVAS_MANIFEST.json,sha256=-mfqhpljpF4eE8g05pIEnZMt_bDUdhgIBtuQd-devv8,945
316
+ canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/README.md,sha256=3QKoJQq3YmdplGnDOBMsLCJ3Ya1_aKjoz-QiWc4QfjA,291
317
+ canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/applications/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
318
+ canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/applications/my_application.py,sha256=rTUUycVOZEj5B4CoBqWMl9T4xPIyTqxsWGzXfAd6huY,584
319
+ canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/assets/python-logo.png,sha256=QAipNLQVwVK_pRO-PpsF3kISrkFUmifyxsjUGzokpNo,20637
320
+ canvas_cli/templates/plugins/default/cookiecutter.json,sha256=LbcuMaWxrLats1BffuDkk2192qNTgA-NU6sAnsFyj8M,201
321
+ canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/pyproject.toml,sha256=ogQ94GnE-Aj2KJbiTevwnomqKdZUeBZfIOTcU_KPPdI,422
322
+ canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
323
+ canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/tests/test_models.py,sha256=IWe3IarNQuS350owh87X1qi-PcpaxzBBNCStr8LC3Co,980
324
+ canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/{{ cookiecutter.__package_name }}/CANVAS_MANIFEST.json,sha256=1keK1aJ-rJu4hm5ypqJT82hooCUTUOQ10dhzQ-mab7c,638
325
+ canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/{{ cookiecutter.__package_name }}/README.md,sha256=3QKoJQq3YmdplGnDOBMsLCJ3Ya1_aKjoz-QiWc4QfjA,291
326
+ canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/{{ cookiecutter.__package_name }}/protocols/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
327
+ canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/{{ cookiecutter.__package_name }}/protocols/my_protocol.py,sha256=fKLLcOIwvSWenW8-7tr8VqnF4Iox_5wU9V-Qw9UySsA,2381
328
+ canvas-0.59.0.dist-info/METADATA,sha256=wX9YSrF81yvm0F5QUd0_A4SXBRCPi0FY-7xhUWuId1E,4758
329
+ canvas-0.59.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
330
+ canvas-0.59.0.dist-info/entry_points.txt,sha256=0Vs_9GmTVUNniH6eDBlRPgofmADMV4BES6Ao26M4AbM,47
331
+ canvas-0.59.0.dist-info/RECORD,,
@@ -0,0 +1,21 @@
1
+ # To run the tests, use the command `pytest` in the terminal or uv run pytest.
2
+ # Each test is wrapped inside a transaction that is rolled back at the end of the test.
3
+ # If you want to modify which files are used for testing, check the [tool.pytest.ini_options] section in pyproject.toml.
4
+
5
+
6
+ from canvas_sdk.test_utils.factories import PatientFactory
7
+ from canvas_sdk.v1.data.discount import Discount
8
+
9
+
10
+ # You can use a factory to create a patient instance for testing purposes.
11
+ def test_factory() -> None:
12
+ """Test that a patient can be created using the PatientFactory."""
13
+ patient = PatientFactory.create()
14
+ assert patient.id is not None
15
+
16
+
17
+ # if a factory is not available, you can create an instance manually with the data model directly.
18
+ def test_model() -> None:
19
+ """Test that a Discount instance can be created."""
20
+ Discount.objects.create(name="10%", adjustment_group="30", adjustment_code="CO", discount=0.10)
21
+ assert Discount.objects.first().pk is not None
@@ -15,6 +15,7 @@ from .coverage import Coverage, Transactor, TransactorAddress, TransactorPhone
15
15
  from .detected_issue import DetectedIssue, DetectedIssueEvidence
16
16
  from .device import Device
17
17
  from .discount import Discount
18
+ from .goal import Goal
18
19
  from .imaging import ImagingOrder, ImagingReport, ImagingReview
19
20
  from .invoice import Invoice
20
21
  from .lab import (
@@ -120,6 +121,7 @@ __all__ = __exports__ = (
120
121
  "DetectedIssueEvidence",
121
122
  "Device",
122
123
  "Discount",
124
+ "Goal",
123
125
  "ImagingOrder",
124
126
  "ImagingReport",
125
127
  "ImagingReview",
@@ -0,0 +1,70 @@
1
+ from django.db import models
2
+
3
+ from canvas_sdk.v1.data.base import IdentifiableModel
4
+
5
+
6
+ class GoalLifecycleStatus(models.TextChoices):
7
+ """GoalLifecycleStatus choices."""
8
+
9
+ PROPOSED = "proposed", "Proposed"
10
+ PLANNED = "planned", "Planned"
11
+ ACCEPTED = "accepted", "Accepted"
12
+ ACTIVE = "active", "Active"
13
+ ON_HOLD = "on-hold", "On Hold"
14
+ COMPLETED = "completed", "Completed"
15
+ CANCELLED = "cancelled", "Cancelled"
16
+ REJECTED = "rejected", "Rejected"
17
+
18
+
19
+ class GoalAchievementStatus(models.TextChoices):
20
+ """GoalAchievementStatus choices."""
21
+
22
+ IN_PROGRESS = "in-progress", "In Progress"
23
+ IMPROVING = "improving", "Improving"
24
+ WORSENING = "worsening", "Worsening"
25
+ NO_CHANGE = "no-change", "No Change"
26
+ ACHIEVED = "achieved", "Achieved"
27
+ SUSTAINING = "sustaining", "Sustaining"
28
+ NOT_ACHIEVED = "not-achieved", "Not Achieved"
29
+ NO_PROGRESS = "no-progress", "No Progress"
30
+ NOT_ATTAINABLE = "not-attainable", "Not Attainable"
31
+
32
+
33
+ class GoalPriority(models.TextChoices):
34
+ """GoalPriority choices."""
35
+
36
+ HIGH = "high-priority", "High Priority"
37
+ MEDIUM = "medium-priority", "Medium Priority"
38
+ LOW = "low-priority", "Low Priority"
39
+
40
+
41
+ class Goal(IdentifiableModel):
42
+ """Goal."""
43
+
44
+ class Meta:
45
+ db_table = "canvas_sdk_data_api_goal_001"
46
+
47
+ created = models.DateTimeField(auto_now_add=True)
48
+ modified = models.DateTimeField(auto_now=True)
49
+ originator = models.ForeignKey(
50
+ "v1.CanvasUser", on_delete=models.DO_NOTHING, null=True, related_name="+"
51
+ )
52
+ committer = models.ForeignKey(
53
+ "v1.CanvasUser", on_delete=models.DO_NOTHING, null=True, related_name="+"
54
+ )
55
+ entered_in_error = models.ForeignKey(
56
+ "v1.CanvasUser", on_delete=models.DO_NOTHING, null=True, related_name="+"
57
+ )
58
+
59
+ patient = models.ForeignKey("v1.Patient", on_delete=models.DO_NOTHING, related_name="goals")
60
+ note = models.ForeignKey("v1.Note", on_delete=models.DO_NOTHING, related_name="goals")
61
+ lifecycle_status = models.CharField(max_length=20, choices=GoalLifecycleStatus.choices)
62
+ achievement_status = models.CharField(max_length=20, choices=GoalAchievementStatus.choices)
63
+ priority = models.CharField(max_length=20, choices=GoalPriority.choices)
64
+ due_date = models.DateField()
65
+ progress = models.TextField()
66
+ goal_statement = models.TextField()
67
+ start_date = models.DateField()
68
+
69
+
70
+ __exports__ = ("Goal", "GoalLifecycleStatus", "GoalAchievementStatus", "GoalPriority")
@@ -223,6 +223,7 @@ class CurrentNoteStateEvent(IdentifiableModel):
223
223
  """Returns a boolean to indicate if the related note can be edited."""
224
224
  return self.state in [
225
225
  NoteStates.NEW,
226
+ NoteStates.CONVERTED,
226
227
  NoteStates.PUSHED,
227
228
  NoteStates.UNLOCKED,
228
229
  NoteStates.RESTORED,
@@ -532,6 +532,7 @@
532
532
  "DetectedIssueEvidence",
533
533
  "Device",
534
534
  "Discount",
535
+ "Goal",
535
536
  "ImagingOrder",
536
537
  "ImagingReport",
537
538
  "ImagingReview",
@@ -706,6 +707,12 @@
706
707
  "canvas_sdk.v1.data.discount": [
707
708
  "Discount"
708
709
  ],
710
+ "canvas_sdk.v1.data.goal": [
711
+ "Goal",
712
+ "GoalAchievementStatus",
713
+ "GoalLifecycleStatus",
714
+ "GoalPriority"
715
+ ],
709
716
  "canvas_sdk.v1.data.imaging": [
710
717
  "ImagingOrder",
711
718
  "ImagingReport",