canvas 0.72.1__py3-none-any.whl → 0.74.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.

@@ -0,0 +1,66 @@
1
+ import factory
2
+
3
+ from canvas_sdk.v1.data import Task, TaskComment, TaskLabel, TaskMetadata, TaskTaskLabel
4
+ from canvas_sdk.v1.data.common import ColorEnum, Origin
5
+ from canvas_sdk.v1.data.task import TaskLabelModule, TaskStatus, TaskType
6
+
7
+
8
+ class TaskFactory(factory.django.DjangoModelFactory[Task]):
9
+ """Factory for creating Task."""
10
+
11
+ class Meta:
12
+ model = Task
13
+
14
+ patient = factory.SubFactory("canvas_sdk.test_utils.factories.PatientFactory")
15
+ creator = factory.SubFactory("canvas_sdk.test_utils.factories.StaffFactory")
16
+ assignee = factory.SubFactory("canvas_sdk.test_utils.factories.StaffFactory")
17
+ task_type = TaskType.TASK
18
+ tag = factory.Faker("word")
19
+ title = factory.Faker("sentence", nb_words=4)
20
+ status = TaskStatus.OPEN
21
+
22
+
23
+ class TaskMetadataFactory(factory.django.DjangoModelFactory[TaskMetadata]):
24
+ """Factory for creating TaskMetadata."""
25
+
26
+ class Meta:
27
+ model = TaskMetadata
28
+
29
+ task = factory.SubFactory(TaskFactory)
30
+ key = factory.Faker("word")
31
+ value = factory.Faker("word")
32
+
33
+
34
+ class TaskCommentFactory(factory.django.DjangoModelFactory[TaskComment]):
35
+ """Factory for creating TaskComment."""
36
+
37
+ class Meta:
38
+ model = TaskComment
39
+
40
+ creator = factory.SubFactory("canvas_sdk.test_utils.factories.StaffFactory")
41
+ task = factory.SubFactory(TaskFactory)
42
+ body = factory.Faker("sentence", nb_words=10)
43
+
44
+
45
+ class TaskLabelFactory(factory.django.DjangoModelFactory[TaskLabel]):
46
+ """Factory for creating TaskLabel."""
47
+
48
+ class Meta:
49
+ model = TaskLabel
50
+
51
+ position = factory.Sequence(lambda n: n)
52
+ color = ColorEnum.BLUE
53
+ task_association = [Origin.REFERAL]
54
+ name = factory.Faker("word")
55
+ active = True
56
+ modules = [TaskLabelModule.TASKS]
57
+
58
+
59
+ class TaskTaskLabelFactory(factory.django.DjangoModelFactory[TaskTaskLabel]):
60
+ """Factory for creating TaskTaskLabel."""
61
+
62
+ class Meta:
63
+ model = TaskTaskLabel
64
+
65
+ task = factory.SubFactory(TaskFactory)
66
+ task_label = factory.SubFactory(TaskLabelFactory)
@@ -1,5 +1,10 @@
1
1
  from .allergy_intolerance import AllergyIntolerance, AllergyIntoleranceCoding
2
- from .appointment import Appointment, AppointmentExternalIdentifier, AppointmentMetadata
2
+ from .appointment import (
3
+ Appointment,
4
+ AppointmentExternalIdentifier,
5
+ AppointmentLabel,
6
+ AppointmentMetadata,
7
+ )
3
8
  from .assessment import Assessment
4
9
  from .banner_alert import BannerAlert
5
10
  from .billing import BillingLineItem, BillingLineItemModifier
@@ -103,7 +108,7 @@ from .referral import Referral, ReferralReport
103
108
  from .service_provider import ServiceProvider
104
109
  from .staff import Staff, StaffAddress, StaffContactPoint, StaffLicense, StaffPhoto, StaffRole
105
110
  from .stop_medication_event import StopMedicationEvent
106
- from .task import Task, TaskComment, TaskLabel, TaskTaskLabel
111
+ from .task import Task, TaskComment, TaskLabel, TaskMetadata, TaskTaskLabel
107
112
  from .team import Team, TeamContactPoint
108
113
  from .user import CanvasUser
109
114
 
@@ -111,6 +116,7 @@ __all__ = __exports__ = (
111
116
  "Appointment",
112
117
  "AppointmentMetadata",
113
118
  "AppointmentExternalIdentifier",
119
+ "AppointmentLabel",
114
120
  "AllergyIntolerance",
115
121
  "AllergyIntoleranceCoding",
116
122
  "Assessment",
@@ -227,6 +233,7 @@ __all__ = __exports__ = (
227
233
  "TaskComment",
228
234
  "TaskLabel",
229
235
  "TaskTaskLabel",
236
+ "TaskMetadata",
230
237
  "Team",
231
238
  "TeamContactPoint",
232
239
  "Transactor",
@@ -1,6 +1,6 @@
1
1
  from django.db import models
2
2
 
3
- from canvas_sdk.v1.data.base import IdentifiableModel, TimestampedModel
3
+ from canvas_sdk.v1.data.base import IdentifiableModel, Model, TimestampedModel
4
4
 
5
5
 
6
6
  class AppointmentProgressStatus(models.TextChoices):
@@ -77,6 +77,21 @@ class AppointmentExternalIdentifier(TimestampedModel, IdentifiableModel):
77
77
  )
78
78
 
79
79
 
80
+ class AppointmentLabel(Model):
81
+ """M2M for Appointment -> TaskLabels."""
82
+
83
+ class Meta:
84
+ db_table = "canvas_sdk_data_api_appointment_labels_001"
85
+
86
+ appointment = models.ForeignKey(Appointment, on_delete=models.DO_NOTHING, null=True)
87
+ task_label = models.ForeignKey(
88
+ "v1.TaskLabel",
89
+ on_delete=models.DO_NOTHING,
90
+ null=True,
91
+ db_column="userselectedtasklabel_id",
92
+ )
93
+
94
+
80
95
  class AppointmentMetadata(IdentifiableModel):
81
96
  """A class representing Appointment Metadata."""
82
97
 
@@ -95,4 +110,5 @@ __exports__ = (
95
110
  "Appointment",
96
111
  "AppointmentMetadata",
97
112
  "AppointmentExternalIdentifier",
113
+ "AppointmentLabel",
98
114
  )
@@ -5,7 +5,7 @@ from django.db import models
5
5
  from django.db.models import Q, Sum
6
6
  from django.db.models.functions import Coalesce
7
7
 
8
- from canvas_sdk.v1.data.base import TimestampedModel
8
+ from canvas_sdk.v1.data.base import IdentifiableModel, TimestampedModel
9
9
  from canvas_sdk.v1.data.note import PracticeLocationPOS
10
10
 
11
11
 
@@ -106,7 +106,7 @@ class ClaimLineItemQuerySet(models.QuerySet):
106
106
  return self.exclude(proc_code=LineItemCodes.UNLINKED.value).apply_ordering()
107
107
 
108
108
 
109
- class ClaimLineItem(TimestampedModel):
109
+ class ClaimLineItem(TimestampedModel, IdentifiableModel):
110
110
  """ClaimLineItem."""
111
111
 
112
112
  class Meta:
@@ -12,6 +12,7 @@ class Facility(IdentifiableModel):
12
12
  name = models.CharField(max_length=255)
13
13
  npi_number = models.CharField(verbose_name="NPI number", max_length=10, blank=True)
14
14
  phone_number = models.CharField(max_length=10, blank=True, default="")
15
+ fax_number = models.CharField(max_length=10, blank=True, default="")
15
16
  active = models.BooleanField(default=True)
16
17
  line1 = models.CharField(max_length=255, default="", blank=True)
17
18
  line2 = models.CharField(max_length=255, default="", blank=True)
@@ -31,6 +31,7 @@ class TaskLabelModule(models.TextChoices):
31
31
 
32
32
  CLAIMS = "claims", "Claims"
33
33
  TASKS = "tasks", "Tasks"
34
+ APPOINTMENTS = "appointments", "Appointments"
34
35
 
35
36
 
36
37
  class Task(TimestampedModel, IdentifiableModel):
@@ -78,6 +79,9 @@ class TaskLabel(IdentifiableModel):
78
79
  db_table = "canvas_sdk_data_api_tasklabel_001"
79
80
 
80
81
  tasks = models.ManyToManyField(Task, related_name="labels", through="TaskTaskLabel") # type: ignore[var-annotated]
82
+ appointments = models.ManyToManyField(
83
+ "v1.Appointment", related_name="labels", through="v1.AppointmentLabel"
84
+ )
81
85
  position = models.IntegerField()
82
86
  color = models.CharField(choices=ColorEnum.choices, max_length=50)
83
87
  task_association = ArrayField(models.CharField(choices=Origin.choices, max_length=32))
@@ -96,6 +100,17 @@ class TaskTaskLabel(Model):
96
100
  task = models.ForeignKey(Task, on_delete=models.DO_NOTHING, null=True)
97
101
 
98
102
 
103
+ class TaskMetadata(IdentifiableModel):
104
+ """TaskMetadata."""
105
+
106
+ class Meta:
107
+ db_table = "canvas_sdk_data_api_taskmetadata_001"
108
+
109
+ task = models.ForeignKey(Task, on_delete=models.CASCADE, related_name="metadata")
110
+ key = models.CharField(max_length=32)
111
+ value = models.CharField(max_length=255)
112
+
113
+
99
114
  __exports__ = (
100
115
  "TaskType",
101
116
  "EventType",
@@ -105,4 +120,5 @@ __exports__ = (
105
120
  "TaskComment",
106
121
  "TaskLabel",
107
122
  "TaskTaskLabel",
123
+ "TaskMetadata",
108
124
  )
@@ -234,12 +234,23 @@
234
234
  "CreateEvent",
235
235
  "EventRecurrence"
236
236
  ],
237
+ "canvas_sdk.effects.claim_label": [
238
+ "AddClaimLabel",
239
+ "Label",
240
+ "RemoveClaimLabel"
241
+ ],
242
+ "canvas_sdk.effects.claim_line_item": [
243
+ "UpdateClaimLineItem"
244
+ ],
237
245
  "canvas_sdk.effects.compound_medications": [
238
246
  "CompoundMedication"
239
247
  ],
240
248
  "canvas_sdk.effects.compound_medications.compound_medication": [
241
249
  "CompoundMedication"
242
250
  ],
251
+ "canvas_sdk.effects.fax": [
252
+ "FaxNoteEffect"
253
+ ],
243
254
  "canvas_sdk.effects.generate_full_chart_pdf": [
244
255
  "GenerateFullChartPDFEffect"
245
256
  ],
@@ -253,13 +264,17 @@
253
264
  "Metadata"
254
265
  ],
255
266
  "canvas_sdk.effects.note": [
267
+ "AddAppointmentLabel",
256
268
  "Appointment",
257
269
  "AppointmentIdentifier",
258
270
  "Note",
271
+ "RemoveAppointmentLabel",
259
272
  "ScheduleEvent"
260
273
  ],
261
274
  "canvas_sdk.effects.note.appointment": [
275
+ "AddAppointmentLabel",
262
276
  "Appointment",
277
+ "RemoveAppointmentLabel",
263
278
  "ScheduleEvent"
264
279
  ],
265
280
  "canvas_sdk.effects.note.base": [
@@ -383,12 +398,14 @@
383
398
  "canvas_sdk.effects.task": [
384
399
  "AddTask",
385
400
  "AddTaskComment",
401
+ "TaskMetadata",
386
402
  "TaskStatus",
387
403
  "UpdateTask"
388
404
  ],
389
405
  "canvas_sdk.effects.task.task": [
390
406
  "AddTask",
391
407
  "AddTaskComment",
408
+ "TaskMetadata",
392
409
  "TaskStatus",
393
410
  "UpdateTask"
394
411
  ],
@@ -552,6 +569,7 @@
552
569
  "AllergyIntoleranceCoding",
553
570
  "Appointment",
554
571
  "AppointmentExternalIdentifier",
572
+ "AppointmentLabel",
555
573
  "AppointmentMetadata",
556
574
  "Assessment",
557
575
  "BannerAlert",
@@ -666,6 +684,7 @@
666
684
  "Task",
667
685
  "TaskComment",
668
686
  "TaskLabel",
687
+ "TaskMetadata",
669
688
  "TaskTaskLabel",
670
689
  "Team",
671
690
  "TeamContactPoint",
@@ -680,6 +699,7 @@
680
699
  "canvas_sdk.v1.data.appointment": [
681
700
  "Appointment",
682
701
  "AppointmentExternalIdentifier",
702
+ "AppointmentLabel",
683
703
  "AppointmentMetadata",
684
704
  "AppointmentProgressStatus"
685
705
  ],
@@ -959,6 +979,7 @@
959
979
  "TaskComment",
960
980
  "TaskLabel",
961
981
  "TaskLabelModule",
982
+ "TaskMetadata",
962
983
  "TaskStatus",
963
984
  "TaskTaskLabel",
964
985
  "TaskType"
@@ -126,6 +126,7 @@ enum EffectType {
126
126
  CREATE_TASK = 100;
127
127
  UPDATE_TASK = 101;
128
128
  CREATE_TASK_COMMENT = 102;
129
+ UPSERT_TASK_METADATA = 111;
129
130
 
130
131
  ORIGINATE_MEDICAL_HISTORY_COMMAND = 103;
131
132
  EDIT_MEDICAL_HISTORY_COMMAND = 104;
@@ -266,10 +267,18 @@ enum EffectType {
266
267
  PATIENT_PORTAL__APPOINTMENTS__FORM_PROVIDERS__POST_SEARCH_RESULTS = 2011;
267
268
  PATIENT_PORTAL__APPLICATION_CONFIGURATION = 2012;
268
269
 
270
+ ADD_APPOINTMENT_LABEL = 2015;
271
+ REMOVE_APPOINTMENT_LABEL = 2016;
272
+
269
273
  ADD_BILLING_LINE_ITEM = 2030;
270
274
  UPDATE_BILLING_LINE_ITEM = 2031;
271
275
  REMOVE_BILLING_LINE_ITEM = 2032;
272
276
 
277
+ ADD_CLAIM_LABEL = 2050;
278
+ REMOVE_CLAIM_LABEL = 2051;
279
+
280
+ UPDATE_CLAIM_LINE_ITEM = 2080;
281
+
273
282
  SHOW_PATIENT_PORTAL_MENU_ITEMS = 2100;
274
283
  PORTAL_WIDGET = 2101;
275
284
 
@@ -284,6 +293,8 @@ enum EffectType {
284
293
 
285
294
  CREATE_NOTE = 6000;
286
295
  UPDATE_NOTE = 6013;
296
+ PUSH_NOTE_CHARGES = 5500;
297
+ FAX_NOTE = 6019;
287
298
 
288
299
  CREATE_APPOINTMENT = 6001;
289
300
  UPDATE_APPOINTMENT = 6014;
@@ -98,6 +98,8 @@ enum EventType {
98
98
 
99
99
  TASK_CLOSED = 86;
100
100
  TASK_COMPLETED = 87;
101
+ TASK_METADATA_CREATED = 96;
102
+ TASK_METADATA_UPDATED = 97;
101
103
 
102
104
  DETECTED_ISSUE_EVIDENCE_CREATED = 88;
103
105
  DETECTED_ISSUE_EVIDENCE_UPDATED = 89;
@@ -108,6 +110,9 @@ enum EventType {
108
110
  COMPOUND_MEDICATION_CREATED = 92;
109
111
  COMPOUND_MEDICATION_UPDATED = 93;
110
112
 
113
+ APPOINTMENT_LABEL_ADDED = 94;
114
+ APPOINTMENT_LABEL_REMOVED = 95;
115
+
111
116
  // General Command Events
112
117
 
113
118
  PRE_COMMAND_ORIGINATE = 100;
@@ -177,6 +182,8 @@ enum EventType {
177
182
  ADJUST_PRESCRIPTION__CHANGE_MEDICATION_TO__POST_SEARCH = 2019;
178
183
  ADJUST_PRESCRIPTION__SUPERVISING_PROVIDER__PRE_SEARCH = 2021;
179
184
  ADJUST_PRESCRIPTION__SUPERVISING_PROVIDER__POST_SEARCH = 2022;
185
+ ADJUST_PRESCRIPTION__PRESCRIBER__PRE_SEARCH = 2025;
186
+ ADJUST_PRESCRIPTION__PRESCRIBER__POST_SEARCH = 2026;
180
187
 
181
188
  // ADJUST_PROTOCOL_COMMAND__PRE_ORIGINATE = 3000;
182
189
  // ADJUST_PROTOCOL_COMMAND__POST_ORIGINATE = 3001;
@@ -703,6 +710,8 @@ enum EventType {
703
710
  PRESCRIBE__PHARMACY__POST_SEARCH = 33017;
704
711
  PRESCRIBE__SUPERVISING_PROVIDER__POST_SEARCH = 33019;
705
712
  PRESCRIBE__SUPERVISING_PROVIDER__PRE_SEARCH = 33020;
713
+ PRESCRIBE__PRESCRIBER__PRE_SEARCH = 33023;
714
+ PRESCRIBE__PRESCRIBER__POST_SEARCH = 33024;
706
715
 
707
716
  QUESTIONNAIRE_COMMAND__PRE_ORIGINATE = 34000;
708
717
  QUESTIONNAIRE_COMMAND__POST_ORIGINATE = 34001;
@@ -809,6 +818,8 @@ enum EventType {
809
818
  REFILL__PHARMACY__POST_SEARCH = 39017;
810
819
  REFILL__SUPERVISING_PROVIDER__PRE_SEARCH = 39019;
811
820
  REFILL__SUPERVISING_PROVIDER__POST_SEARCH = 39020;
821
+ REFILL__PRESCRIBER__PRE_SEARCH = 39023;
822
+ REFILL__PRESCRIBER__POST_SEARCH = 39024;
812
823
 
813
824
  REMOVE_ALLERGY_COMMAND__PRE_ORIGINATE = 40000;
814
825
  REMOVE_ALLERGY_COMMAND__POST_ORIGINATE = 40001;