canvas 0.66.0__py3-none-any.whl → 0.68.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.
- {canvas-0.66.0.dist-info → canvas-0.68.0.dist-info}/METADATA +1 -1
- {canvas-0.66.0.dist-info → canvas-0.68.0.dist-info}/RECORD +72 -64
- canvas_generated/messages/effects_pb2.py +2 -2
- canvas_generated/messages/effects_pb2.pyi +8 -0
- canvas_generated/messages/events_pb2.py +2 -2
- canvas_generated/messages/events_pb2.pyi +2 -0
- canvas_sdk/effects/metadata.py +15 -1
- canvas_sdk/effects/note/base.py +17 -0
- canvas_sdk/effects/patient/__init__.py +2 -0
- canvas_sdk/effects/patient/base.py +8 -0
- canvas_sdk/effects/send_contact_verification.py +42 -0
- canvas_sdk/handlers/application.py +7 -7
- canvas_sdk/handlers/utils.py +14 -0
- canvas_sdk/test_utils/factories/__init__.py +25 -0
- canvas_sdk/test_utils/factories/claim.py +24 -0
- canvas_sdk/test_utils/factories/claim_diagnosis_code.py +1 -0
- canvas_sdk/test_utils/factories/note.py +37 -0
- canvas_sdk/test_utils/factories/organization.py +20 -0
- canvas_sdk/test_utils/factories/practicelocation.py +34 -0
- canvas_sdk/test_utils/factories/staff.py +111 -0
- canvas_sdk/v1/data/__init__.py +2 -1
- canvas_sdk/v1/data/allergy_intolerance.py +4 -10
- canvas_sdk/v1/data/appointment.py +2 -4
- canvas_sdk/v1/data/assessment.py +2 -12
- canvas_sdk/v1/data/banner_alert.py +2 -4
- canvas_sdk/v1/data/base.py +28 -0
- canvas_sdk/v1/data/billing.py +8 -11
- canvas_sdk/v1/data/care_team.py +4 -10
- canvas_sdk/v1/data/claim.py +15 -29
- canvas_sdk/v1/data/claim_diagnosis_code.py +2 -5
- canvas_sdk/v1/data/claim_line_item.py +2 -5
- canvas_sdk/v1/data/coding.py +19 -0
- canvas_sdk/v1/data/command.py +2 -4
- canvas_sdk/v1/data/compound_medication.py +3 -3
- canvas_sdk/v1/data/condition.py +2 -7
- canvas_sdk/v1/data/coverage.py +18 -10
- canvas_sdk/v1/data/detected_issue.py +4 -20
- canvas_sdk/v1/data/device.py +2 -14
- canvas_sdk/v1/data/discount.py +2 -5
- canvas_sdk/v1/data/encounter.py +2 -4
- canvas_sdk/v1/data/goal.py +2 -14
- canvas_sdk/v1/data/imaging.py +4 -30
- canvas_sdk/v1/data/immunization.py +3 -13
- canvas_sdk/v1/data/lab.py +9 -62
- canvas_sdk/v1/data/line_item_transaction.py +2 -5
- canvas_sdk/v1/data/medication.py +2 -7
- canvas_sdk/v1/data/medication_history.py +5 -15
- canvas_sdk/v1/data/medication_statement.py +2 -11
- canvas_sdk/v1/data/message.py +3 -7
- canvas_sdk/v1/data/note.py +11 -19
- canvas_sdk/v1/data/observation.py +8 -35
- canvas_sdk/v1/data/organization.py +5 -7
- canvas_sdk/v1/data/patient.py +4 -11
- canvas_sdk/v1/data/patient_consent.py +4 -14
- canvas_sdk/v1/data/payment_collection.py +2 -5
- canvas_sdk/v1/data/posting.py +3 -9
- canvas_sdk/v1/data/practicelocation.py +4 -6
- canvas_sdk/v1/data/protocol_override.py +2 -3
- canvas_sdk/v1/data/protocol_result.py +3 -3
- canvas_sdk/v1/data/questionnaire.py +9 -25
- canvas_sdk/v1/data/reason_for_visit.py +2 -6
- canvas_sdk/v1/data/referral.py +3 -17
- canvas_sdk/v1/data/staff.py +33 -25
- canvas_sdk/v1/data/stop_medication_event.py +2 -11
- canvas_sdk/v1/data/task.py +3 -7
- canvas_sdk/v1/data/team.py +2 -4
- canvas_sdk/v1/data/utils.py +5 -0
- plugin_runner/allowed-module-imports.json +10 -0
- protobufs/canvas_generated/messages/effects.proto +5 -0
- protobufs/canvas_generated/messages/events.proto +2 -0
- {canvas-0.66.0.dist-info → canvas-0.68.0.dist-info}/WHEEL +0 -0
- {canvas-0.66.0.dist-info → canvas-0.68.0.dist-info}/entry_points.txt +0 -0
|
@@ -10,19 +10,17 @@ from canvas_sdk.v1.data.base import (
|
|
|
10
10
|
CommittableQuerySetMixin,
|
|
11
11
|
ForPatientQuerySetMixin,
|
|
12
12
|
IdentifiableModel,
|
|
13
|
-
|
|
13
|
+
TimestampedModel,
|
|
14
14
|
ValueSetLookupByNameQuerySet,
|
|
15
15
|
)
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
class ResponseOptionSet(
|
|
18
|
+
class ResponseOptionSet(TimestampedModel):
|
|
19
19
|
"""ResponseOptionSet."""
|
|
20
20
|
|
|
21
21
|
class Meta:
|
|
22
22
|
db_table = "canvas_sdk_data_api_responseoptionset_001"
|
|
23
23
|
|
|
24
|
-
created = models.DateTimeField(auto_now_add=True)
|
|
25
|
-
modified = models.DateTimeField(auto_now=True)
|
|
26
24
|
status = models.CharField(max_length=2)
|
|
27
25
|
name = models.CharField(max_length=255)
|
|
28
26
|
code_system = models.CharField(max_length=255)
|
|
@@ -31,14 +29,12 @@ class ResponseOptionSet(Model):
|
|
|
31
29
|
use_in_shx = models.BooleanField()
|
|
32
30
|
|
|
33
31
|
|
|
34
|
-
class ResponseOption(
|
|
32
|
+
class ResponseOption(TimestampedModel):
|
|
35
33
|
"""ResponseOption."""
|
|
36
34
|
|
|
37
35
|
class Meta:
|
|
38
36
|
db_table = "canvas_sdk_data_api_responseoption_001"
|
|
39
37
|
|
|
40
|
-
created = models.DateTimeField(auto_now_add=True)
|
|
41
|
-
modified = models.DateTimeField(auto_now=True)
|
|
42
38
|
status = models.CharField(max_length=2)
|
|
43
39
|
name = models.CharField(max_length=255)
|
|
44
40
|
code = models.CharField(max_length=100)
|
|
@@ -50,14 +46,12 @@ class ResponseOption(Model):
|
|
|
50
46
|
ordering = models.IntegerField()
|
|
51
47
|
|
|
52
48
|
|
|
53
|
-
class Question(IdentifiableModel):
|
|
49
|
+
class Question(TimestampedModel, IdentifiableModel):
|
|
54
50
|
"""Question."""
|
|
55
51
|
|
|
56
52
|
class Meta:
|
|
57
53
|
db_table = "canvas_sdk_data_api_question_001"
|
|
58
54
|
|
|
59
|
-
created = models.DateTimeField(auto_now_add=True)
|
|
60
|
-
modified = models.DateTimeField(auto_now=True)
|
|
61
55
|
status = models.CharField(max_length=2)
|
|
62
56
|
name = models.CharField(max_length=255)
|
|
63
57
|
response_option_set = models.ForeignKey(
|
|
@@ -78,7 +72,7 @@ class QuestionnaireValueSetLookupQuerySet(ValueSetLookupByNameQuerySet):
|
|
|
78
72
|
return Q(code_system=system, code__in=codes)
|
|
79
73
|
|
|
80
74
|
|
|
81
|
-
class Questionnaire(IdentifiableModel):
|
|
75
|
+
class Questionnaire(TimestampedModel, IdentifiableModel):
|
|
82
76
|
"""Questionnaire."""
|
|
83
77
|
|
|
84
78
|
class Meta:
|
|
@@ -86,8 +80,6 @@ class Questionnaire(IdentifiableModel):
|
|
|
86
80
|
|
|
87
81
|
objects = models.Manager.from_queryset(QuestionnaireValueSetLookupQuerySet)()
|
|
88
82
|
|
|
89
|
-
created = models.DateTimeField(auto_now_add=True)
|
|
90
|
-
modified = models.DateTimeField(auto_now=True)
|
|
91
83
|
status = models.CharField(max_length=2)
|
|
92
84
|
name = models.CharField(max_length=255)
|
|
93
85
|
expected_completion_time = models.FloatField()
|
|
@@ -104,14 +96,12 @@ class Questionnaire(IdentifiableModel):
|
|
|
104
96
|
carry_forward = models.TextField()
|
|
105
97
|
|
|
106
98
|
|
|
107
|
-
class QuestionnaireQuestionMap(
|
|
99
|
+
class QuestionnaireQuestionMap(TimestampedModel):
|
|
108
100
|
"""QuestionnaireQuestionMap."""
|
|
109
101
|
|
|
110
102
|
class Meta:
|
|
111
103
|
db_table = "canvas_sdk_data_api_questionnairequestionmap_001"
|
|
112
104
|
|
|
113
|
-
created = models.DateTimeField(auto_now_add=True)
|
|
114
|
-
modified = models.DateTimeField(auto_now=True)
|
|
115
105
|
status = models.CharField(max_length=2)
|
|
116
106
|
questionnaire = models.ForeignKey(Questionnaire, on_delete=models.DO_NOTHING, null=True)
|
|
117
107
|
question = models.ForeignKey(Question, on_delete=models.DO_NOTHING, null=True)
|
|
@@ -126,7 +116,7 @@ class InterviewQuerySet(BaseQuerySet, ForPatientQuerySetMixin, CommittableQueryS
|
|
|
126
116
|
InterviewManager = BaseModelManager.from_queryset(InterviewQuerySet)
|
|
127
117
|
|
|
128
118
|
|
|
129
|
-
class Interview(IdentifiableModel):
|
|
119
|
+
class Interview(TimestampedModel, IdentifiableModel):
|
|
130
120
|
"""Interview."""
|
|
131
121
|
|
|
132
122
|
class Meta:
|
|
@@ -155,31 +145,25 @@ class Interview(IdentifiableModel):
|
|
|
155
145
|
through="v1.InterviewQuestionnaireMap",
|
|
156
146
|
)
|
|
157
147
|
progress_status = models.CharField(max_length=3)
|
|
158
|
-
created = models.DateTimeField(auto_now_add=True)
|
|
159
|
-
modified = models.DateTimeField(auto_now=True)
|
|
160
148
|
|
|
161
149
|
|
|
162
|
-
class InterviewQuestionnaireMap(
|
|
150
|
+
class InterviewQuestionnaireMap(TimestampedModel):
|
|
163
151
|
"""InterviewQuestionnaireMap."""
|
|
164
152
|
|
|
165
153
|
class Meta:
|
|
166
154
|
db_table = "canvas_sdk_data_api_interviewquestionnairemap_001"
|
|
167
155
|
|
|
168
|
-
created = models.DateTimeField(auto_now_add=True)
|
|
169
|
-
modified = models.DateTimeField(auto_now=True)
|
|
170
156
|
status = models.CharField(max_length=2)
|
|
171
157
|
interview = models.ForeignKey(Interview, on_delete=models.DO_NOTHING, null=True)
|
|
172
158
|
questionnaire = models.ForeignKey(Questionnaire, on_delete=models.DO_NOTHING, null=True)
|
|
173
159
|
|
|
174
160
|
|
|
175
|
-
class InterviewQuestionResponse(
|
|
161
|
+
class InterviewQuestionResponse(TimestampedModel):
|
|
176
162
|
"""InterviewQuestionResponse."""
|
|
177
163
|
|
|
178
164
|
class Meta:
|
|
179
165
|
db_table = "canvas_sdk_data_api_interviewquestionresponse_001"
|
|
180
166
|
|
|
181
|
-
created = models.DateTimeField(auto_now_add=True)
|
|
182
|
-
modified = models.DateTimeField(auto_now=True)
|
|
183
167
|
status = models.CharField(max_length=2)
|
|
184
168
|
interview = models.ForeignKey(
|
|
185
169
|
Interview, on_delete=models.DO_NOTHING, related_name="interview_responses", null=True
|
|
@@ -2,9 +2,10 @@ from django.contrib.postgres.fields import ArrayField
|
|
|
2
2
|
from django.db import models
|
|
3
3
|
|
|
4
4
|
from canvas_sdk.v1.data.base import IdentifiableModel
|
|
5
|
+
from canvas_sdk.v1.data.coding import Coding
|
|
5
6
|
|
|
6
7
|
|
|
7
|
-
class ReasonForVisitSettingCoding(IdentifiableModel):
|
|
8
|
+
class ReasonForVisitSettingCoding(IdentifiableModel, Coding):
|
|
8
9
|
"""ReasonForVisitSettingCoding."""
|
|
9
10
|
|
|
10
11
|
class Meta:
|
|
@@ -12,11 +13,6 @@ class ReasonForVisitSettingCoding(IdentifiableModel):
|
|
|
12
13
|
|
|
13
14
|
objects: models.Manager["ReasonForVisitSettingCoding"]
|
|
14
15
|
|
|
15
|
-
code = models.CharField(max_length=255)
|
|
16
|
-
display = models.CharField(max_length=1000)
|
|
17
|
-
system = models.CharField(max_length=255)
|
|
18
|
-
version = models.CharField(max_length=255)
|
|
19
|
-
|
|
20
16
|
duration = ArrayField(models.DurationField())
|
|
21
17
|
|
|
22
18
|
|
canvas_sdk/v1/data/referral.py
CHANGED
|
@@ -2,28 +2,16 @@ import json
|
|
|
2
2
|
|
|
3
3
|
from django.db import models
|
|
4
4
|
|
|
5
|
-
from canvas_sdk.v1.data.base import IdentifiableModel
|
|
5
|
+
from canvas_sdk.v1.data.base import AuditedModel, IdentifiableModel, TimestampedModel
|
|
6
6
|
from canvas_sdk.v1.data.task import Task
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
class Referral(IdentifiableModel):
|
|
9
|
+
class Referral(AuditedModel, IdentifiableModel):
|
|
10
10
|
"""Referral."""
|
|
11
11
|
|
|
12
12
|
class Meta:
|
|
13
13
|
db_table = "canvas_sdk_data_api_referral_001"
|
|
14
14
|
|
|
15
|
-
created = models.DateTimeField()
|
|
16
|
-
modified = models.DateTimeField()
|
|
17
|
-
originator = models.ForeignKey(
|
|
18
|
-
"v1.CanvasUser", on_delete=models.DO_NOTHING, null=True, related_name="+"
|
|
19
|
-
)
|
|
20
|
-
deleted = models.BooleanField()
|
|
21
|
-
committer = models.ForeignKey(
|
|
22
|
-
"v1.CanvasUser", on_delete=models.DO_NOTHING, null=True, related_name="+"
|
|
23
|
-
)
|
|
24
|
-
entered_in_error = models.ForeignKey(
|
|
25
|
-
"v1.CanvasUser", on_delete=models.DO_NOTHING, null=True, related_name="+"
|
|
26
|
-
)
|
|
27
15
|
patient = models.ForeignKey("v1.Patient", on_delete=models.DO_NOTHING)
|
|
28
16
|
note = models.ForeignKey("v1.Note", on_delete=models.DO_NOTHING)
|
|
29
17
|
service_provider = models.ForeignKey(
|
|
@@ -66,14 +54,12 @@ class Referral(IdentifiableModel):
|
|
|
66
54
|
return f"Referral {self.id}"
|
|
67
55
|
|
|
68
56
|
|
|
69
|
-
class ReferralReport(IdentifiableModel):
|
|
57
|
+
class ReferralReport(TimestampedModel, IdentifiableModel):
|
|
70
58
|
"""ReferralReport."""
|
|
71
59
|
|
|
72
60
|
class Meta:
|
|
73
61
|
db_table = "canvas_sdk_data_api_referralreport_001"
|
|
74
62
|
|
|
75
|
-
created = models.DateTimeField(auto_now_add=True)
|
|
76
|
-
modified = models.DateTimeField(auto_now=True)
|
|
77
63
|
originator = models.ForeignKey(
|
|
78
64
|
"v1.CanvasUser", on_delete=models.DO_NOTHING, null=True, related_name="+"
|
|
79
65
|
)
|
canvas_sdk/v1/data/staff.py
CHANGED
|
@@ -5,7 +5,7 @@ from django.db import models
|
|
|
5
5
|
from django.db.models.enums import TextChoices
|
|
6
6
|
from timezone_utils.fields import TimeZoneField
|
|
7
7
|
|
|
8
|
-
from canvas_sdk.v1.data.base import IdentifiableModel, Model
|
|
8
|
+
from canvas_sdk.v1.data.base import IdentifiableModel, Model, TimestampedModel
|
|
9
9
|
from canvas_sdk.v1.data.common import (
|
|
10
10
|
AddressState,
|
|
11
11
|
AddressType,
|
|
@@ -19,7 +19,7 @@ from canvas_sdk.v1.data.common import (
|
|
|
19
19
|
from canvas_sdk.v1.data.utils import create_key
|
|
20
20
|
|
|
21
21
|
|
|
22
|
-
class Staff(
|
|
22
|
+
class Staff(TimestampedModel):
|
|
23
23
|
"""Staff."""
|
|
24
24
|
|
|
25
25
|
class Meta:
|
|
@@ -35,8 +35,6 @@ class Staff(Model):
|
|
|
35
35
|
editable=False,
|
|
36
36
|
default=create_key,
|
|
37
37
|
)
|
|
38
|
-
created = models.DateTimeField(auto_now_add=True)
|
|
39
|
-
modified = models.DateTimeField(auto_now=True)
|
|
40
38
|
prefix = models.CharField(max_length=100)
|
|
41
39
|
suffix = models.CharField(max_length=100)
|
|
42
40
|
first_name = models.CharField(max_length=255)
|
|
@@ -44,7 +42,7 @@ class Staff(Model):
|
|
|
44
42
|
last_name = models.CharField(max_length=255)
|
|
45
43
|
maiden_name = models.CharField(max_length=255)
|
|
46
44
|
nickname = models.CharField(max_length=255)
|
|
47
|
-
previous_names = models.JSONField()
|
|
45
|
+
previous_names = models.JSONField(default=list)
|
|
48
46
|
birth_date = models.DateField(null=True)
|
|
49
47
|
sex_at_birth = models.CharField(choices=PersonSex.choices, max_length=3)
|
|
50
48
|
sexual_orientation_term = models.CharField(max_length=255)
|
|
@@ -57,14 +55,14 @@ class Staff(Model):
|
|
|
57
55
|
cultural_ethnicity_codes = ArrayField(models.CharField(max_length=100))
|
|
58
56
|
cultural_ethnicity_terms = ArrayField(models.CharField(max_length=255))
|
|
59
57
|
last_known_timezone = TimeZoneField(null=True)
|
|
60
|
-
active = models.BooleanField()
|
|
58
|
+
active = models.BooleanField(default=True)
|
|
61
59
|
primary_practice_location = models.ForeignKey(
|
|
62
60
|
"v1.PracticeLocation", on_delete=models.DO_NOTHING, null=True
|
|
63
61
|
)
|
|
64
62
|
npi_number = models.CharField(max_length=10)
|
|
65
63
|
nadean_number = models.CharField(max_length=20)
|
|
66
64
|
group_npi_number = models.CharField(max_length=10)
|
|
67
|
-
bill_through_organization = models.BooleanField()
|
|
65
|
+
bill_through_organization = models.BooleanField(default=True)
|
|
68
66
|
tax_id = models.CharField(max_length=25)
|
|
69
67
|
tax_id_type = models.CharField(choices=TaxIDType.choices, max_length=1)
|
|
70
68
|
spi_number = models.CharField(max_length=50)
|
|
@@ -72,9 +70,9 @@ class Staff(Model):
|
|
|
72
70
|
# language = models.ForeignKey('v1.Language', on_delete=models.DO_NOTHING, related_name="staff_speakers", null=True)
|
|
73
71
|
# language_secondary = models.ForeignKey('v1.Language', on_delete=models.DO_NOTHING, related_name="staff_secondary_speakers", null=True)
|
|
74
72
|
personal_meeting_room_link = models.URLField(null=True)
|
|
75
|
-
state = models.JSONField()
|
|
73
|
+
state = models.JSONField(default=dict, blank=True)
|
|
76
74
|
user = models.ForeignKey("v1.CanvasUser", on_delete=models.DO_NOTHING, null=True)
|
|
77
|
-
schedule_column_ordering = models.IntegerField()
|
|
75
|
+
schedule_column_ordering = models.IntegerField(default=999)
|
|
78
76
|
default_supervising_provider = models.ForeignKey(
|
|
79
77
|
"v1.Staff", on_delete=models.DO_NOTHING, related_name="supervising_team", null=True
|
|
80
78
|
)
|
|
@@ -135,10 +133,14 @@ class StaffContactPoint(IdentifiableModel):
|
|
|
135
133
|
|
|
136
134
|
system = models.CharField(choices=ContactPointSystem.choices, max_length=20)
|
|
137
135
|
value = models.CharField(max_length=100)
|
|
138
|
-
use = models.CharField(
|
|
136
|
+
use = models.CharField(
|
|
137
|
+
choices=ContactPointUse.choices, max_length=20, default=ContactPointUse.HOME
|
|
138
|
+
)
|
|
139
139
|
use_notes = models.CharField(max_length=255)
|
|
140
|
-
rank = models.IntegerField()
|
|
141
|
-
state = models.CharField(
|
|
140
|
+
rank = models.IntegerField(default=1)
|
|
141
|
+
state = models.CharField(
|
|
142
|
+
choices=ContactPointState.choices, max_length=20, default=ContactPointState.ACTIVE
|
|
143
|
+
)
|
|
142
144
|
staff = models.ForeignKey(Staff, on_delete=models.DO_NOTHING, related_name="telecom")
|
|
143
145
|
|
|
144
146
|
|
|
@@ -148,31 +150,31 @@ class StaffAddress(IdentifiableModel):
|
|
|
148
150
|
class Meta:
|
|
149
151
|
db_table = "canvas_sdk_data_api_staffaddress_001"
|
|
150
152
|
|
|
151
|
-
line1 = models.CharField(max_length=255)
|
|
152
|
-
line2 = models.CharField(max_length=255)
|
|
153
|
+
line1 = models.CharField(max_length=255, default="", blank=True)
|
|
154
|
+
line2 = models.CharField(max_length=255, default="", blank=True)
|
|
153
155
|
city = models.CharField(max_length=255)
|
|
154
|
-
district = models.CharField(max_length=255)
|
|
156
|
+
district = models.CharField(max_length=255, blank=True, default="")
|
|
155
157
|
state_code = models.CharField(max_length=2)
|
|
156
158
|
postal_code = models.CharField(max_length=255)
|
|
157
|
-
use = models.CharField(choices=AddressUse.choices, max_length=10)
|
|
158
|
-
type = models.CharField(choices=AddressType.choices, max_length=10)
|
|
159
|
-
longitude = models.FloatField()
|
|
160
|
-
latitude = models.FloatField()
|
|
161
|
-
start = models.DateField()
|
|
162
|
-
end = models.DateField()
|
|
159
|
+
use = models.CharField(choices=AddressUse.choices, max_length=10, default=AddressUse.HOME)
|
|
160
|
+
type = models.CharField(choices=AddressType.choices, max_length=10, default=AddressType.BOTH)
|
|
161
|
+
longitude = models.FloatField(null=True, default=None, blank=True)
|
|
162
|
+
latitude = models.FloatField(null=True, default=None, blank=True)
|
|
163
|
+
start = models.DateField(null=True, blank=True)
|
|
164
|
+
end = models.DateField(null=True, blank=True)
|
|
163
165
|
country = models.CharField(max_length=255)
|
|
164
|
-
state = models.CharField(
|
|
166
|
+
state = models.CharField(
|
|
167
|
+
choices=AddressState.choices, max_length=20, default=AddressState.ACTIVE
|
|
168
|
+
)
|
|
165
169
|
staff = models.ForeignKey(Staff, on_delete=models.DO_NOTHING, related_name="addresses")
|
|
166
170
|
|
|
167
171
|
|
|
168
|
-
class StaffPhoto(
|
|
172
|
+
class StaffPhoto(TimestampedModel):
|
|
169
173
|
"""StaffPhoto."""
|
|
170
174
|
|
|
171
175
|
class Meta:
|
|
172
176
|
db_table = "canvas_sdk_data_api_staffphoto_001"
|
|
173
177
|
|
|
174
|
-
created = models.DateTimeField(auto_now_add=True)
|
|
175
|
-
modified = models.DateTimeField(auto_now=True)
|
|
176
178
|
staff = models.ForeignKey(Staff, on_delete=models.CASCADE, related_name="photos")
|
|
177
179
|
url = models.CharField(
|
|
178
180
|
default="https://d3hn0m4rbsz438.cloudfront.net/avatar1.png", max_length=512
|
|
@@ -185,6 +187,12 @@ class StaffRole(Model):
|
|
|
185
187
|
|
|
186
188
|
class Meta:
|
|
187
189
|
db_table = "canvas_sdk_data_api_staffrole_001"
|
|
190
|
+
constraints = [
|
|
191
|
+
models.UniqueConstraint(
|
|
192
|
+
fields=["staff", "internal_code"],
|
|
193
|
+
name="staff_internal_code_unique",
|
|
194
|
+
)
|
|
195
|
+
]
|
|
188
196
|
|
|
189
197
|
class RoleDomain(TextChoices):
|
|
190
198
|
CLINICAL = "CLI", "Clinical"
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
from django.db import models
|
|
2
2
|
|
|
3
|
-
from canvas_sdk.v1.data.base import IdentifiableModel
|
|
3
|
+
from canvas_sdk.v1.data.base import AuditedModel, IdentifiableModel
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
class StopMedicationEvent(IdentifiableModel):
|
|
6
|
+
class StopMedicationEvent(AuditedModel, IdentifiableModel):
|
|
7
7
|
"""StopMedicationEvent."""
|
|
8
8
|
|
|
9
9
|
class Meta:
|
|
@@ -21,15 +21,6 @@ class StopMedicationEvent(IdentifiableModel):
|
|
|
21
21
|
related_name="stopmedicationevent_set",
|
|
22
22
|
null=True,
|
|
23
23
|
)
|
|
24
|
-
entered_in_error = models.ForeignKey(
|
|
25
|
-
"v1.CanvasUser", on_delete=models.DO_NOTHING, related_name="+", null=True
|
|
26
|
-
)
|
|
27
|
-
committer = models.ForeignKey(
|
|
28
|
-
"v1.CanvasUser", on_delete=models.DO_NOTHING, related_name="+", null=True
|
|
29
|
-
)
|
|
30
|
-
originator = models.ForeignKey("v1.CanvasUser", on_delete=models.DO_NOTHING, related_name="+")
|
|
31
|
-
created = models.DateTimeField(auto_now_add=True)
|
|
32
|
-
modified = models.DateTimeField(auto_now=True)
|
|
33
24
|
rationale = models.CharField(max_length=1024, default="")
|
|
34
25
|
|
|
35
26
|
|
canvas_sdk/v1/data/task.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from django.contrib.postgres.fields import ArrayField
|
|
2
2
|
from django.db import models
|
|
3
3
|
|
|
4
|
-
from canvas_sdk.v1.data.base import IdentifiableModel, Model
|
|
4
|
+
from canvas_sdk.v1.data.base import IdentifiableModel, Model, TimestampedModel
|
|
5
5
|
from canvas_sdk.v1.data.common import ColorEnum, Origin
|
|
6
6
|
|
|
7
7
|
|
|
@@ -33,14 +33,12 @@ class TaskLabelModule(models.TextChoices):
|
|
|
33
33
|
TASKS = "tasks", "Tasks"
|
|
34
34
|
|
|
35
35
|
|
|
36
|
-
class Task(IdentifiableModel):
|
|
36
|
+
class Task(TimestampedModel, IdentifiableModel):
|
|
37
37
|
"""Task."""
|
|
38
38
|
|
|
39
39
|
class Meta:
|
|
40
40
|
db_table = "canvas_sdk_data_api_task_001"
|
|
41
41
|
|
|
42
|
-
created = models.DateTimeField(auto_now_add=True)
|
|
43
|
-
modified = models.DateTimeField(auto_now=True)
|
|
44
42
|
creator = models.ForeignKey(
|
|
45
43
|
"v1.Staff", on_delete=models.DO_NOTHING, related_name="creator_tasks", null=True
|
|
46
44
|
)
|
|
@@ -60,14 +58,12 @@ class Task(IdentifiableModel):
|
|
|
60
58
|
status = models.CharField(choices=TaskStatus.choices, max_length=9)
|
|
61
59
|
|
|
62
60
|
|
|
63
|
-
class TaskComment(IdentifiableModel):
|
|
61
|
+
class TaskComment(TimestampedModel, IdentifiableModel):
|
|
64
62
|
"""TaskComment."""
|
|
65
63
|
|
|
66
64
|
class Meta:
|
|
67
65
|
db_table = "canvas_sdk_data_api_taskcomment_001"
|
|
68
66
|
|
|
69
|
-
created = models.DateTimeField(auto_now_add=True)
|
|
70
|
-
modified = models.DateTimeField(auto_now=True)
|
|
71
67
|
creator = models.ForeignKey(
|
|
72
68
|
"v1.Staff", on_delete=models.DO_NOTHING, related_name="comments", null=True
|
|
73
69
|
)
|
canvas_sdk/v1/data/team.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from django.contrib.postgres.fields import ArrayField
|
|
2
2
|
from django.db import models
|
|
3
3
|
|
|
4
|
-
from canvas_sdk.v1.data.base import IdentifiableModel
|
|
4
|
+
from canvas_sdk.v1.data.base import IdentifiableModel, TimestampedModel
|
|
5
5
|
from canvas_sdk.v1.data.common import ContactPointState, ContactPointSystem, ContactPointUse
|
|
6
6
|
|
|
7
7
|
|
|
@@ -39,14 +39,12 @@ class TeamResponsibility(models.TextChoices):
|
|
|
39
39
|
REVIEW_COVERAGES = "REVIEW_COVERAGES", "Review incomplete patient coverages"
|
|
40
40
|
|
|
41
41
|
|
|
42
|
-
class Team(IdentifiableModel):
|
|
42
|
+
class Team(TimestampedModel, IdentifiableModel):
|
|
43
43
|
"""Team."""
|
|
44
44
|
|
|
45
45
|
class Meta:
|
|
46
46
|
db_table = "canvas_sdk_data_api_team_001"
|
|
47
47
|
|
|
48
|
-
created = models.DateTimeField(auto_now_add=True)
|
|
49
|
-
modified = models.DateTimeField(auto_now=True)
|
|
50
48
|
name = models.CharField(max_length=200)
|
|
51
49
|
responsibilities = ArrayField(
|
|
52
50
|
models.CharField(choices=TeamResponsibility.choices, max_length=64)
|
canvas_sdk/v1/data/utils.py
CHANGED
|
@@ -29,4 +29,9 @@ def generate_mrn(length: int = 9, max_attempts: int = 100) -> str:
|
|
|
29
29
|
raise RuntimeError(f"Unable to generate a unique MRN after {max_attempts} attempts")
|
|
30
30
|
|
|
31
31
|
|
|
32
|
+
def empty_note_body() -> list[dict[str, str]]:
|
|
33
|
+
"""Generates an empty note body with 15 empty text elements."""
|
|
34
|
+
return [{"type": "text", "value": ""}] * 15
|
|
35
|
+
|
|
36
|
+
|
|
32
37
|
__exports__ = ()
|
|
@@ -249,6 +249,9 @@
|
|
|
249
249
|
"canvas_sdk.effects.launch_modal": [
|
|
250
250
|
"LaunchModalEffect"
|
|
251
251
|
],
|
|
252
|
+
"canvas_sdk.effects.metadata": [
|
|
253
|
+
"Metadata"
|
|
254
|
+
],
|
|
252
255
|
"canvas_sdk.effects.note": [
|
|
253
256
|
"Appointment",
|
|
254
257
|
"AppointmentIdentifier",
|
|
@@ -280,6 +283,7 @@
|
|
|
280
283
|
"PatientAddress",
|
|
281
284
|
"PatientContactPoint",
|
|
282
285
|
"PatientExternalIdentifier",
|
|
286
|
+
"PatientMetadata",
|
|
283
287
|
"PatientPreferredPharmacy"
|
|
284
288
|
],
|
|
285
289
|
"canvas_sdk.effects.patient.base": [
|
|
@@ -287,6 +291,7 @@
|
|
|
287
291
|
"PatientAddress",
|
|
288
292
|
"PatientContactPoint",
|
|
289
293
|
"PatientExternalIdentifier",
|
|
294
|
+
"PatientMetadata",
|
|
290
295
|
"PatientPreferredPharmacy"
|
|
291
296
|
],
|
|
292
297
|
"canvas_sdk.effects.patient.create_patient_external_identifier": [
|
|
@@ -346,6 +351,9 @@
|
|
|
346
351
|
"canvas_sdk.effects.questionnaire_result": [
|
|
347
352
|
"CreateQuestionnaireResult"
|
|
348
353
|
],
|
|
354
|
+
"canvas_sdk.effects.send_contact_verification": [
|
|
355
|
+
"SendContactVerificationEffect"
|
|
356
|
+
],
|
|
349
357
|
"canvas_sdk.effects.send_invite": [
|
|
350
358
|
"SendInviteEffect"
|
|
351
359
|
],
|
|
@@ -574,6 +582,7 @@
|
|
|
574
582
|
"DetectedIssueEvidence",
|
|
575
583
|
"Device",
|
|
576
584
|
"Discount",
|
|
585
|
+
"EligibilitySummary",
|
|
577
586
|
"Encounter",
|
|
578
587
|
"Facility",
|
|
579
588
|
"Goal",
|
|
@@ -752,6 +761,7 @@
|
|
|
752
761
|
"CoverageStack",
|
|
753
762
|
"CoverageState",
|
|
754
763
|
"CoverageType",
|
|
764
|
+
"EligibilitySummary",
|
|
755
765
|
"Transactor",
|
|
756
766
|
"TransactorAddress",
|
|
757
767
|
"TransactorCoverageType",
|
|
@@ -254,6 +254,7 @@ enum EffectType {
|
|
|
254
254
|
PATIENT_PORTAL__APPOINTMENT_IS_RESCHEDULABLE = 2002;
|
|
255
255
|
PATIENT_PORTAL__APPOINTMENT_SHOW_MEETING_LINK = 2003;
|
|
256
256
|
PATIENT_PORTAL__SEND_INVITE = 2004;
|
|
257
|
+
PATIENT_PORTAL__SEND_CONTACT_VERIFICATION = 2013;
|
|
257
258
|
|
|
258
259
|
PATIENT_PORTAL__APPOINTMENTS__SLOTS__POST_SEARCH_RESULTS = 2005;
|
|
259
260
|
PATIENT_PORTAL__APPOINTMENTS__FORM_APPOINTMENT_TYPES__PRE_SEARCH_RESULTS = 2006;
|
|
@@ -285,10 +286,12 @@ enum EffectType {
|
|
|
285
286
|
|
|
286
287
|
CREATE_APPOINTMENT = 6001;
|
|
287
288
|
UPDATE_APPOINTMENT = 6014;
|
|
289
|
+
RESCHEDULE_APPOINTMENT = 6022;
|
|
288
290
|
CANCEL_APPOINTMENT = 6015;
|
|
289
291
|
CREATE_SCHEDULE_EVENT = 6002;
|
|
290
292
|
UPDATE_SCHEDULE_EVENT = 6016;
|
|
291
293
|
DELETE_SCHEDULE_EVENT = 6017;
|
|
294
|
+
RESCHEDULE_SCHEDULE_EVENT = 6023;
|
|
292
295
|
|
|
293
296
|
CREATE_PATIENT = 6003;
|
|
294
297
|
UPDATE_PATIENT = 6008;
|
|
@@ -323,6 +326,8 @@ enum EffectType {
|
|
|
323
326
|
|
|
324
327
|
UPSERT_APPOINTMENT_METADATA = 6052;
|
|
325
328
|
|
|
329
|
+
APPOINTMENT__SLOTS__POST_SEARCH_RESULTS = 6053;
|
|
330
|
+
|
|
326
331
|
SHOW_PANEL_SECTIONS = 6100;
|
|
327
332
|
|
|
328
333
|
REDIRECT_CONTEXT = 6200;
|
|
File without changes
|
|
File without changes
|