canvas 0.44.3__py3-none-any.whl → 0.46.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.44.3.dist-info → canvas-0.46.0.dist-info}/METADATA +4 -2
- {canvas-0.44.3.dist-info → canvas-0.46.0.dist-info}/RECORD +64 -59
- canvas_cli/apps/plugin/plugin.py +21 -2
- canvas_generated/messages/effects_pb2.py +2 -2
- canvas_generated/messages/effects_pb2.pyi +10 -0
- canvas_generated/messages/events_pb2.py +2 -2
- canvas_generated/messages/events_pb2.pyi +18 -0
- canvas_sdk/commands/commands/exam.py +2 -1
- canvas_sdk/commands/commands/immunization_statement.py +32 -0
- canvas_sdk/commands/commands/questionnaire/__init__.py +18 -3
- canvas_sdk/commands/commands/questionnaire/question.py +3 -2
- canvas_sdk/commands/commands/questionnaire/toggle_questions.py +68 -0
- canvas_sdk/commands/commands/review_of_systems.py +2 -1
- canvas_sdk/utils/http.py +4 -1
- canvas_sdk/v1/data/__init__.py +17 -3
- canvas_sdk/v1/data/allergy_intolerance.py +16 -19
- canvas_sdk/v1/data/appointment.py +10 -14
- canvas_sdk/v1/data/assessment.py +9 -10
- canvas_sdk/v1/data/banner_alert.py +12 -12
- canvas_sdk/v1/data/base.py +45 -1
- canvas_sdk/v1/data/billing.py +13 -18
- canvas_sdk/v1/data/business_line.py +7 -8
- canvas_sdk/v1/data/care_team.py +14 -17
- canvas_sdk/v1/data/charge_description_master.py +29 -0
- canvas_sdk/v1/data/claim.py +87 -95
- canvas_sdk/v1/data/claim_line_item.py +17 -18
- canvas_sdk/v1/data/command.py +8 -9
- canvas_sdk/v1/data/condition.py +9 -12
- canvas_sdk/v1/data/coverage.py +47 -53
- canvas_sdk/v1/data/detected_issue.py +16 -20
- canvas_sdk/v1/data/device.py +20 -21
- canvas_sdk/v1/data/discount.py +8 -8
- canvas_sdk/v1/data/imaging.py +24 -30
- canvas_sdk/v1/data/invoice.py +3 -3
- canvas_sdk/v1/data/lab.py +65 -84
- canvas_sdk/v1/data/line_item_transaction.py +7 -9
- canvas_sdk/v1/data/medication.py +14 -17
- canvas_sdk/v1/data/message.py +10 -17
- canvas_sdk/v1/data/note.py +87 -24
- canvas_sdk/v1/data/observation.py +24 -33
- canvas_sdk/v1/data/organization.py +14 -15
- canvas_sdk/v1/data/patient.py +57 -68
- canvas_sdk/v1/data/patient_consent.py +14 -19
- canvas_sdk/v1/data/payment_collection.py +7 -8
- canvas_sdk/v1/data/payor_specific_charge.py +10 -12
- canvas_sdk/v1/data/posting.py +10 -18
- canvas_sdk/v1/data/practicelocation.py +17 -21
- canvas_sdk/v1/data/protocol_override.py +8 -10
- canvas_sdk/v1/data/questionnaire.py +56 -73
- canvas_sdk/v1/data/reason_for_visit.py +7 -9
- canvas_sdk/v1/data/staff.py +61 -57
- canvas_sdk/v1/data/task.py +21 -31
- canvas_sdk/v1/data/team.py +15 -18
- canvas_sdk/v1/data/user.py +3 -3
- canvas_sdk/v1/data/utils.py +6 -0
- plugin_runner/allowed-module-imports.json +1340 -0
- plugin_runner/generate_allowed_imports.py +97 -0
- plugin_runner/plugin_runner.py +9 -0
- plugin_runner/sandbox.py +55 -60
- protobufs/canvas_generated/messages/effects.proto +6 -0
- protobufs/canvas_generated/messages/events.proto +12 -1
- settings.py +56 -22
- {canvas-0.44.3.dist-info → canvas-0.46.0.dist-info}/WHEEL +0 -0
- {canvas-0.44.3.dist-info → canvas-0.46.0.dist-info}/entry_points.txt +0 -0
|
@@ -9,69 +9,64 @@ from canvas_sdk.v1.data.base import (
|
|
|
9
9
|
BaseQuerySet,
|
|
10
10
|
CommittableQuerySetMixin,
|
|
11
11
|
ForPatientQuerySetMixin,
|
|
12
|
+
IdentifiableModel,
|
|
13
|
+
Model,
|
|
12
14
|
ValueSetLookupByNameQuerySet,
|
|
13
15
|
)
|
|
14
16
|
|
|
15
17
|
|
|
16
|
-
class ResponseOptionSet(
|
|
18
|
+
class ResponseOptionSet(Model):
|
|
17
19
|
"""ResponseOptionSet."""
|
|
18
20
|
|
|
19
21
|
class Meta:
|
|
20
|
-
managed = False
|
|
21
22
|
db_table = "canvas_sdk_data_api_responseoptionset_001"
|
|
22
23
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
type = models.CharField()
|
|
24
|
+
created = models.DateTimeField(auto_now_add=True)
|
|
25
|
+
modified = models.DateTimeField(auto_now=True)
|
|
26
|
+
status = models.CharField(max_length=2)
|
|
27
|
+
name = models.CharField(max_length=255)
|
|
28
|
+
code_system = models.CharField(max_length=255)
|
|
29
|
+
code = models.CharField(max_length=100)
|
|
30
|
+
type = models.CharField(max_length=4)
|
|
31
31
|
use_in_shx = models.BooleanField()
|
|
32
32
|
|
|
33
33
|
|
|
34
|
-
class ResponseOption(
|
|
34
|
+
class ResponseOption(Model):
|
|
35
35
|
"""ResponseOption."""
|
|
36
36
|
|
|
37
37
|
class Meta:
|
|
38
|
-
managed = False
|
|
39
38
|
db_table = "canvas_sdk_data_api_responseoption_001"
|
|
40
39
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
value = models.CharField()
|
|
40
|
+
created = models.DateTimeField(auto_now_add=True)
|
|
41
|
+
modified = models.DateTimeField(auto_now=True)
|
|
42
|
+
status = models.CharField(max_length=2)
|
|
43
|
+
name = models.CharField(max_length=255)
|
|
44
|
+
code = models.CharField(max_length=100)
|
|
45
|
+
code_description = models.CharField(max_length=255)
|
|
46
|
+
value = models.CharField(max_length=1000)
|
|
49
47
|
response_option_set = models.ForeignKey(
|
|
50
48
|
ResponseOptionSet, on_delete=models.DO_NOTHING, related_name="options", null=True
|
|
51
49
|
)
|
|
52
50
|
ordering = models.IntegerField()
|
|
53
51
|
|
|
54
52
|
|
|
55
|
-
class Question(
|
|
53
|
+
class Question(IdentifiableModel):
|
|
56
54
|
"""Question."""
|
|
57
55
|
|
|
58
56
|
class Meta:
|
|
59
|
-
managed = False
|
|
60
57
|
db_table = "canvas_sdk_data_api_question_001"
|
|
61
58
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
status = models.CharField()
|
|
67
|
-
name = models.CharField()
|
|
59
|
+
created = models.DateTimeField(auto_now_add=True)
|
|
60
|
+
modified = models.DateTimeField(auto_now=True)
|
|
61
|
+
status = models.CharField(max_length=2)
|
|
62
|
+
name = models.CharField(max_length=255)
|
|
68
63
|
response_option_set = models.ForeignKey(
|
|
69
64
|
ResponseOptionSet, on_delete=models.DO_NOTHING, related_name="questions", null=True
|
|
70
65
|
)
|
|
71
66
|
acknowledge_only = models.BooleanField()
|
|
72
67
|
show_prologue = models.BooleanField()
|
|
73
|
-
code_system = models.CharField()
|
|
74
|
-
code = models.CharField()
|
|
68
|
+
code_system = models.CharField(max_length=255)
|
|
69
|
+
code = models.CharField(max_length=100)
|
|
75
70
|
|
|
76
71
|
|
|
77
72
|
class QuestionnaireValueSetLookupQuerySet(ValueSetLookupByNameQuerySet):
|
|
@@ -83,46 +78,41 @@ class QuestionnaireValueSetLookupQuerySet(ValueSetLookupByNameQuerySet):
|
|
|
83
78
|
return Q(code_system=system, code__in=codes)
|
|
84
79
|
|
|
85
80
|
|
|
86
|
-
class Questionnaire(
|
|
81
|
+
class Questionnaire(IdentifiableModel):
|
|
87
82
|
"""Questionnaire."""
|
|
88
83
|
|
|
89
84
|
class Meta:
|
|
90
|
-
managed = False
|
|
91
85
|
db_table = "canvas_sdk_data_api_questionnaire_001"
|
|
92
86
|
|
|
93
87
|
objects = models.Manager.from_queryset(QuestionnaireValueSetLookupQuerySet)()
|
|
94
88
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
status = models.CharField()
|
|
100
|
-
name = models.CharField()
|
|
89
|
+
created = models.DateTimeField(auto_now_add=True)
|
|
90
|
+
modified = models.DateTimeField(auto_now=True)
|
|
91
|
+
status = models.CharField(max_length=2)
|
|
92
|
+
name = models.CharField(max_length=255)
|
|
101
93
|
expected_completion_time = models.FloatField()
|
|
102
94
|
can_originate_in_charting = models.BooleanField()
|
|
103
|
-
use_case_in_charting = models.CharField()
|
|
95
|
+
use_case_in_charting = models.CharField(max_length=4)
|
|
104
96
|
scoring_function_name = models.TextField()
|
|
105
|
-
scoring_code_system = models.CharField()
|
|
106
|
-
scoring_code = models.CharField()
|
|
107
|
-
code_system = models.CharField()
|
|
108
|
-
code = models.CharField()
|
|
109
|
-
search_tags = models.CharField()
|
|
97
|
+
scoring_code_system = models.CharField(max_length=255)
|
|
98
|
+
scoring_code = models.CharField(max_length=100)
|
|
99
|
+
code_system = models.CharField(max_length=255)
|
|
100
|
+
code = models.CharField(max_length=100)
|
|
101
|
+
search_tags = models.CharField(max_length=500)
|
|
110
102
|
questions = models.ManyToManyField(Question, through="v1.QuestionnaireQuestionMap")
|
|
111
103
|
use_in_shx = models.BooleanField()
|
|
112
104
|
carry_forward = models.TextField()
|
|
113
105
|
|
|
114
106
|
|
|
115
|
-
class QuestionnaireQuestionMap(
|
|
107
|
+
class QuestionnaireQuestionMap(Model):
|
|
116
108
|
"""QuestionnaireQuestionMap."""
|
|
117
109
|
|
|
118
110
|
class Meta:
|
|
119
|
-
managed = False
|
|
120
111
|
db_table = "canvas_sdk_data_api_questionnairequestionmap_001"
|
|
121
112
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
status = models.CharField()
|
|
113
|
+
created = models.DateTimeField(auto_now_add=True)
|
|
114
|
+
modified = models.DateTimeField(auto_now=True)
|
|
115
|
+
status = models.CharField(max_length=2)
|
|
126
116
|
questionnaire = models.ForeignKey(Questionnaire, on_delete=models.DO_NOTHING, null=True)
|
|
127
117
|
question = models.ForeignKey(Question, on_delete=models.DO_NOTHING, null=True)
|
|
128
118
|
|
|
@@ -136,17 +126,14 @@ class InterviewQuerySet(BaseQuerySet, ForPatientQuerySetMixin, CommittableQueryS
|
|
|
136
126
|
InterviewManager = BaseModelManager.from_queryset(InterviewQuerySet)
|
|
137
127
|
|
|
138
128
|
|
|
139
|
-
class Interview(
|
|
129
|
+
class Interview(IdentifiableModel):
|
|
140
130
|
"""Interview."""
|
|
141
131
|
|
|
142
132
|
class Meta:
|
|
143
|
-
managed = False
|
|
144
133
|
db_table = "canvas_sdk_data_api_interview_001"
|
|
145
134
|
|
|
146
135
|
objects = cast(InterviewQuerySet, InterviewManager())
|
|
147
136
|
|
|
148
|
-
id = models.UUIDField()
|
|
149
|
-
dbid = models.BigIntegerField(primary_key=True)
|
|
150
137
|
deleted = models.BooleanField()
|
|
151
138
|
committer = models.ForeignKey(
|
|
152
139
|
"v1.CanvasUser", on_delete=models.DO_NOTHING, null=True, related_name="+"
|
|
@@ -154,10 +141,10 @@ class Interview(models.Model):
|
|
|
154
141
|
entered_in_error = models.ForeignKey(
|
|
155
142
|
"v1.CanvasUser", on_delete=models.DO_NOTHING, null=True, related_name="+"
|
|
156
143
|
)
|
|
157
|
-
status = models.CharField()
|
|
158
|
-
name = models.CharField()
|
|
144
|
+
status = models.CharField(max_length=2)
|
|
145
|
+
name = models.CharField(max_length=255)
|
|
159
146
|
language_id = models.BigIntegerField()
|
|
160
|
-
use_case_in_charting = models.CharField()
|
|
147
|
+
use_case_in_charting = models.CharField(max_length=4)
|
|
161
148
|
patient = models.ForeignKey(
|
|
162
149
|
"v1.Patient", on_delete=models.DO_NOTHING, related_name="interviews", null=True
|
|
163
150
|
)
|
|
@@ -167,37 +154,33 @@ class Interview(models.Model):
|
|
|
167
154
|
Questionnaire,
|
|
168
155
|
through="v1.InterviewQuestionnaireMap",
|
|
169
156
|
)
|
|
170
|
-
progress_status = models.CharField()
|
|
171
|
-
created = models.DateTimeField()
|
|
172
|
-
modified = models.DateTimeField()
|
|
157
|
+
progress_status = models.CharField(max_length=3)
|
|
158
|
+
created = models.DateTimeField(auto_now_add=True)
|
|
159
|
+
modified = models.DateTimeField(auto_now=True)
|
|
173
160
|
|
|
174
161
|
|
|
175
|
-
class InterviewQuestionnaireMap(
|
|
162
|
+
class InterviewQuestionnaireMap(Model):
|
|
176
163
|
"""InterviewQuestionnaireMap."""
|
|
177
164
|
|
|
178
165
|
class Meta:
|
|
179
|
-
managed = False
|
|
180
166
|
db_table = "canvas_sdk_data_api_interviewquestionnairemap_001"
|
|
181
167
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
status = models.CharField()
|
|
168
|
+
created = models.DateTimeField(auto_now_add=True)
|
|
169
|
+
modified = models.DateTimeField(auto_now=True)
|
|
170
|
+
status = models.CharField(max_length=2)
|
|
186
171
|
interview = models.ForeignKey(Interview, on_delete=models.DO_NOTHING, null=True)
|
|
187
172
|
questionnaire = models.ForeignKey(Questionnaire, on_delete=models.DO_NOTHING, null=True)
|
|
188
173
|
|
|
189
174
|
|
|
190
|
-
class InterviewQuestionResponse(
|
|
175
|
+
class InterviewQuestionResponse(Model):
|
|
191
176
|
"""InterviewQuestionResponse."""
|
|
192
177
|
|
|
193
178
|
class Meta:
|
|
194
|
-
managed = False
|
|
195
179
|
db_table = "canvas_sdk_data_api_interviewquestionresponse_001"
|
|
196
180
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
status = models.CharField()
|
|
181
|
+
created = models.DateTimeField(auto_now_add=True)
|
|
182
|
+
modified = models.DateTimeField(auto_now=True)
|
|
183
|
+
status = models.CharField(max_length=2)
|
|
201
184
|
interview = models.ForeignKey(
|
|
202
185
|
Interview, on_delete=models.DO_NOTHING, related_name="interview_responses", null=True
|
|
203
186
|
)
|
|
@@ -213,7 +196,7 @@ class InterviewQuestionResponse(models.Model):
|
|
|
213
196
|
response_option_value = models.TextField()
|
|
214
197
|
questionnaire_state = models.TextField()
|
|
215
198
|
interview_state = models.TextField()
|
|
216
|
-
comment = models.CharField()
|
|
199
|
+
comment = models.CharField(max_length=1024)
|
|
217
200
|
|
|
218
201
|
|
|
219
202
|
__exports__ = (
|
|
@@ -1,23 +1,21 @@
|
|
|
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
5
|
|
|
5
|
-
|
|
6
|
+
|
|
7
|
+
class ReasonForVisitSettingCoding(IdentifiableModel):
|
|
6
8
|
"""ReasonForVisitSettingCoding."""
|
|
7
9
|
|
|
8
10
|
class Meta:
|
|
9
|
-
managed = False
|
|
10
11
|
db_table = "canvas_sdk_data_api_reasonforvisitsettingcoding_001"
|
|
11
12
|
|
|
12
13
|
objects: models.Manager["ReasonForVisitSettingCoding"]
|
|
13
14
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
display = models.CharField()
|
|
19
|
-
system = models.CharField()
|
|
20
|
-
version = models.CharField()
|
|
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)
|
|
21
19
|
|
|
22
20
|
duration = ArrayField(models.DurationField())
|
|
23
21
|
|
canvas_sdk/v1/data/staff.py
CHANGED
|
@@ -2,6 +2,7 @@ from django.contrib.postgres.fields import ArrayField
|
|
|
2
2
|
from django.db import models
|
|
3
3
|
from timezone_utils.fields import TimeZoneField
|
|
4
4
|
|
|
5
|
+
from canvas_sdk.v1.data.base import IdentifiableModel, Model
|
|
5
6
|
from canvas_sdk.v1.data.common import (
|
|
6
7
|
AddressState,
|
|
7
8
|
AddressType,
|
|
@@ -12,53 +13,58 @@ from canvas_sdk.v1.data.common import (
|
|
|
12
13
|
PersonSex,
|
|
13
14
|
TaxIDType,
|
|
14
15
|
)
|
|
16
|
+
from canvas_sdk.v1.data.utils import create_key
|
|
15
17
|
|
|
16
18
|
|
|
17
|
-
class Staff(
|
|
19
|
+
class Staff(Model):
|
|
18
20
|
"""Staff."""
|
|
19
21
|
|
|
20
22
|
class Meta:
|
|
21
|
-
managed = False
|
|
22
23
|
db_table = "canvas_sdk_data_api_staff_001"
|
|
23
24
|
|
|
24
25
|
def __str__(self) -> str:
|
|
25
26
|
return f"{self.first_name} {self.last_name}"
|
|
26
27
|
|
|
27
|
-
id = models.CharField(
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
28
|
+
id = models.CharField(
|
|
29
|
+
max_length=32,
|
|
30
|
+
db_column="key",
|
|
31
|
+
unique=True,
|
|
32
|
+
editable=False,
|
|
33
|
+
default=create_key,
|
|
34
|
+
)
|
|
35
|
+
created = models.DateTimeField(auto_now_add=True)
|
|
36
|
+
modified = models.DateTimeField(auto_now=True)
|
|
37
|
+
prefix = models.CharField(max_length=100)
|
|
38
|
+
suffix = models.CharField(max_length=100)
|
|
39
|
+
first_name = models.CharField(max_length=255)
|
|
40
|
+
middle_name = models.CharField(max_length=255)
|
|
41
|
+
last_name = models.CharField(max_length=255)
|
|
42
|
+
maiden_name = models.CharField(max_length=255)
|
|
43
|
+
nickname = models.CharField(max_length=255)
|
|
38
44
|
previous_names = models.JSONField()
|
|
39
45
|
birth_date = models.DateField(null=True)
|
|
40
|
-
sex_at_birth = models.CharField(choices=PersonSex.choices)
|
|
41
|
-
sexual_orientation_term = models.CharField()
|
|
42
|
-
sexual_orientation_code = models.CharField()
|
|
43
|
-
gender_identity_term = models.CharField()
|
|
44
|
-
gender_identity_code = models.CharField()
|
|
45
|
-
preferred_pronouns = models.CharField()
|
|
46
|
-
biological_race_codes = ArrayField(models.CharField())
|
|
47
|
-
biological_race_terms = ArrayField(models.CharField())
|
|
48
|
-
cultural_ethnicity_codes = ArrayField(models.CharField())
|
|
49
|
-
cultural_ethnicity_terms = ArrayField(models.CharField())
|
|
46
|
+
sex_at_birth = models.CharField(choices=PersonSex.choices, max_length=3)
|
|
47
|
+
sexual_orientation_term = models.CharField(max_length=255)
|
|
48
|
+
sexual_orientation_code = models.CharField(max_length=255)
|
|
49
|
+
gender_identity_term = models.CharField(max_length=255)
|
|
50
|
+
gender_identity_code = models.CharField(max_length=255)
|
|
51
|
+
preferred_pronouns = models.CharField(max_length=255)
|
|
52
|
+
biological_race_codes = ArrayField(models.CharField(max_length=100))
|
|
53
|
+
biological_race_terms = ArrayField(models.CharField(max_length=255))
|
|
54
|
+
cultural_ethnicity_codes = ArrayField(models.CharField(max_length=100))
|
|
55
|
+
cultural_ethnicity_terms = ArrayField(models.CharField(max_length=255))
|
|
50
56
|
last_known_timezone = TimeZoneField(null=True)
|
|
51
57
|
active = models.BooleanField()
|
|
52
58
|
primary_practice_location = models.ForeignKey(
|
|
53
59
|
"v1.PracticeLocation", on_delete=models.DO_NOTHING, null=True
|
|
54
60
|
)
|
|
55
|
-
npi_number = models.CharField()
|
|
56
|
-
nadean_number = models.CharField()
|
|
57
|
-
group_npi_number = models.CharField()
|
|
61
|
+
npi_number = models.CharField(max_length=10)
|
|
62
|
+
nadean_number = models.CharField(max_length=20)
|
|
63
|
+
group_npi_number = models.CharField(max_length=10)
|
|
58
64
|
bill_through_organization = models.BooleanField()
|
|
59
|
-
tax_id = models.CharField()
|
|
60
|
-
tax_id_type = models.CharField(choices=TaxIDType.choices)
|
|
61
|
-
spi_number = models.CharField()
|
|
65
|
+
tax_id = models.CharField(max_length=25)
|
|
66
|
+
tax_id_type = models.CharField(choices=TaxIDType.choices, max_length=1)
|
|
67
|
+
spi_number = models.CharField(max_length=50)
|
|
62
68
|
# TODO - uncomment when Language is developed
|
|
63
69
|
# language = models.ForeignKey('v1.Language', on_delete=models.DO_NOTHING, related_name="staff_speakers", null=True)
|
|
64
70
|
# language_secondary = models.ForeignKey('v1.Language', on_delete=models.DO_NOTHING, related_name="staff_secondary_speakers", null=True)
|
|
@@ -70,61 +76,59 @@ class Staff(models.Model):
|
|
|
70
76
|
"v1.Staff", on_delete=models.DO_NOTHING, related_name="supervising_team", null=True
|
|
71
77
|
)
|
|
72
78
|
|
|
79
|
+
@property
|
|
80
|
+
def photo_url(self) -> str:
|
|
81
|
+
"""Return the URL of the staff's first photo."""
|
|
82
|
+
photo = self.photos.first()
|
|
83
|
+
return photo.url if photo else "https://d3hn0m4rbsz438.cloudfront.net/avatar1.png"
|
|
84
|
+
|
|
73
85
|
|
|
74
|
-
class StaffContactPoint(
|
|
86
|
+
class StaffContactPoint(IdentifiableModel):
|
|
75
87
|
"""StaffContactPoint."""
|
|
76
88
|
|
|
77
89
|
class Meta:
|
|
78
|
-
managed = False
|
|
79
90
|
db_table = "canvas_sdk_data_api_staffcontactpoint_001"
|
|
80
91
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
use = models.CharField(choices=ContactPointUse.choices)
|
|
86
|
-
use_notes = models.CharField()
|
|
92
|
+
system = models.CharField(choices=ContactPointSystem.choices, max_length=20)
|
|
93
|
+
value = models.CharField(max_length=100)
|
|
94
|
+
use = models.CharField(choices=ContactPointUse.choices, max_length=20)
|
|
95
|
+
use_notes = models.CharField(max_length=255)
|
|
87
96
|
rank = models.IntegerField()
|
|
88
|
-
state = models.CharField(choices=ContactPointState.choices)
|
|
97
|
+
state = models.CharField(choices=ContactPointState.choices, max_length=20)
|
|
89
98
|
staff = models.ForeignKey(Staff, on_delete=models.DO_NOTHING, related_name="telecom")
|
|
90
99
|
|
|
91
100
|
|
|
92
|
-
class StaffAddress(
|
|
101
|
+
class StaffAddress(IdentifiableModel):
|
|
93
102
|
"""StaffAddress."""
|
|
94
103
|
|
|
95
104
|
class Meta:
|
|
96
|
-
managed = False
|
|
97
105
|
db_table = "canvas_sdk_data_api_staffaddress_001"
|
|
98
106
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
use = models.CharField(choices=AddressUse.choices)
|
|
108
|
-
type = models.CharField(choices=AddressType.choices)
|
|
107
|
+
line1 = models.CharField(max_length=255)
|
|
108
|
+
line2 = models.CharField(max_length=255)
|
|
109
|
+
city = models.CharField(max_length=255)
|
|
110
|
+
district = models.CharField(max_length=255)
|
|
111
|
+
state_code = models.CharField(max_length=2)
|
|
112
|
+
postal_code = models.CharField(max_length=255)
|
|
113
|
+
use = models.CharField(choices=AddressUse.choices, max_length=10)
|
|
114
|
+
type = models.CharField(choices=AddressType.choices, max_length=10)
|
|
109
115
|
longitude = models.FloatField()
|
|
110
116
|
latitude = models.FloatField()
|
|
111
117
|
start = models.DateField()
|
|
112
118
|
end = models.DateField()
|
|
113
|
-
country = models.CharField()
|
|
114
|
-
state = models.CharField(choices=AddressState.choices)
|
|
119
|
+
country = models.CharField(max_length=255)
|
|
120
|
+
state = models.CharField(choices=AddressState.choices, max_length=20)
|
|
115
121
|
staff = models.ForeignKey(Staff, on_delete=models.DO_NOTHING, related_name="addresses")
|
|
116
122
|
|
|
117
123
|
|
|
118
|
-
class StaffPhoto(
|
|
124
|
+
class StaffPhoto(Model):
|
|
119
125
|
"""StaffPhoto."""
|
|
120
126
|
|
|
121
127
|
class Meta:
|
|
122
|
-
managed = False
|
|
123
128
|
db_table = "canvas_sdk_data_api_staffphoto_001"
|
|
124
129
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
modified = models.DateTimeField()
|
|
130
|
+
created = models.DateTimeField(auto_now_add=True)
|
|
131
|
+
modified = models.DateTimeField(auto_now=True)
|
|
128
132
|
staff = models.ForeignKey(Staff, on_delete=models.CASCADE, related_name="photos")
|
|
129
133
|
url = models.CharField(
|
|
130
134
|
default="https://d3hn0m4rbsz438.cloudfront.net/avatar1.png", max_length=512
|
canvas_sdk/v1/data/task.py
CHANGED
|
@@ -1,20 +1,21 @@
|
|
|
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
5
|
from canvas_sdk.v1.data.common import ColorEnum, Origin
|
|
5
6
|
|
|
6
7
|
|
|
7
8
|
class TaskType(models.TextChoices):
|
|
8
9
|
"""Choices for task types."""
|
|
9
10
|
|
|
10
|
-
TASK = "
|
|
11
|
-
REMINDER = "
|
|
11
|
+
TASK = "T", "Task"
|
|
12
|
+
REMINDER = "R", "Reminder"
|
|
12
13
|
|
|
13
14
|
|
|
14
15
|
class EventType(models.TextChoices):
|
|
15
16
|
"""Choices for event types."""
|
|
16
17
|
|
|
17
|
-
EVENT_CHART_OPEN = "
|
|
18
|
+
EVENT_CHART_OPEN = "CHART_OPEN", "Chart Open"
|
|
18
19
|
|
|
19
20
|
|
|
20
21
|
class TaskStatus(models.TextChoices):
|
|
@@ -32,17 +33,14 @@ class TaskLabelModule(models.TextChoices):
|
|
|
32
33
|
TASKS = "tasks", "Tasks"
|
|
33
34
|
|
|
34
35
|
|
|
35
|
-
class Task(
|
|
36
|
+
class Task(IdentifiableModel):
|
|
36
37
|
"""Task."""
|
|
37
38
|
|
|
38
39
|
class Meta:
|
|
39
|
-
managed = False
|
|
40
40
|
db_table = "canvas_sdk_data_api_task_001"
|
|
41
41
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
created = models.DateTimeField()
|
|
45
|
-
modified = models.DateTimeField()
|
|
42
|
+
created = models.DateTimeField(auto_now_add=True)
|
|
43
|
+
modified = models.DateTimeField(auto_now=True)
|
|
46
44
|
creator = models.ForeignKey(
|
|
47
45
|
"v1.Staff", on_delete=models.DO_NOTHING, related_name="creator_tasks", null=True
|
|
48
46
|
)
|
|
@@ -54,25 +52,22 @@ class Task(models.Model):
|
|
|
54
52
|
patient = models.ForeignKey(
|
|
55
53
|
"v1.Patient", on_delete=models.DO_NOTHING, blank=True, related_name="tasks", null=True
|
|
56
54
|
)
|
|
57
|
-
task_type = models.CharField(choices=TaskType.choices)
|
|
58
|
-
tag = models.CharField()
|
|
59
|
-
title = models.
|
|
55
|
+
task_type = models.CharField(choices=TaskType.choices, max_length=1)
|
|
56
|
+
tag = models.CharField(max_length=64)
|
|
57
|
+
title = models.TextField()
|
|
60
58
|
due = models.DateTimeField(null=True)
|
|
61
|
-
due_event = models.CharField(choices=EventType.choices, blank=True)
|
|
62
|
-
status = models.CharField(choices=TaskStatus.choices)
|
|
59
|
+
due_event = models.CharField(choices=EventType.choices, blank=True, max_length=16)
|
|
60
|
+
status = models.CharField(choices=TaskStatus.choices, max_length=9)
|
|
63
61
|
|
|
64
62
|
|
|
65
|
-
class TaskComment(
|
|
63
|
+
class TaskComment(IdentifiableModel):
|
|
66
64
|
"""TaskComment."""
|
|
67
65
|
|
|
68
66
|
class Meta:
|
|
69
|
-
managed = False
|
|
70
67
|
db_table = "canvas_sdk_data_api_taskcomment_001"
|
|
71
68
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
created = models.DateTimeField()
|
|
75
|
-
modified = models.DateTimeField()
|
|
69
|
+
created = models.DateTimeField(auto_now_add=True)
|
|
70
|
+
modified = models.DateTimeField(auto_now=True)
|
|
76
71
|
creator = models.ForeignKey(
|
|
77
72
|
"v1.Staff", on_delete=models.DO_NOTHING, related_name="comments", null=True
|
|
78
73
|
)
|
|
@@ -80,32 +75,27 @@ class TaskComment(models.Model):
|
|
|
80
75
|
body = models.TextField()
|
|
81
76
|
|
|
82
77
|
|
|
83
|
-
class TaskLabel(
|
|
78
|
+
class TaskLabel(IdentifiableModel):
|
|
84
79
|
"""TaskLabel."""
|
|
85
80
|
|
|
86
81
|
class Meta:
|
|
87
|
-
managed = False
|
|
88
82
|
db_table = "canvas_sdk_data_api_tasklabel_001"
|
|
89
83
|
|
|
90
|
-
id = models.UUIDField()
|
|
91
|
-
dbid = models.BigIntegerField(primary_key=True)
|
|
92
84
|
tasks = models.ManyToManyField(Task, related_name="labels", through="TaskTaskLabel") # type: ignore[var-annotated]
|
|
93
85
|
position = models.IntegerField()
|
|
94
|
-
color = models.CharField(choices=ColorEnum.choices)
|
|
95
|
-
task_association = ArrayField(models.CharField(choices=Origin.choices))
|
|
96
|
-
name = models.CharField()
|
|
86
|
+
color = models.CharField(choices=ColorEnum.choices, max_length=50)
|
|
87
|
+
task_association = ArrayField(models.CharField(choices=Origin.choices, max_length=32))
|
|
88
|
+
name = models.CharField(max_length=255)
|
|
97
89
|
active = models.BooleanField()
|
|
98
|
-
modules = ArrayField(models.CharField(choices=TaskLabelModule.choices))
|
|
90
|
+
modules = ArrayField(models.CharField(choices=TaskLabelModule.choices, max_length=32))
|
|
99
91
|
|
|
100
92
|
|
|
101
|
-
class TaskTaskLabel(
|
|
93
|
+
class TaskTaskLabel(Model):
|
|
102
94
|
"""M2M for Task -> TaskLabels."""
|
|
103
95
|
|
|
104
96
|
class Meta:
|
|
105
|
-
managed = False
|
|
106
97
|
db_table = "canvas_sdk_data_api_tasktasklabel_001"
|
|
107
98
|
|
|
108
|
-
dbid = models.BigIntegerField(primary_key=True)
|
|
109
99
|
task_label = models.ForeignKey(TaskLabel, on_delete=models.DO_NOTHING, null=True)
|
|
110
100
|
task = models.ForeignKey(Task, on_delete=models.DO_NOTHING, null=True)
|
|
111
101
|
|
canvas_sdk/v1/data/team.py
CHANGED
|
@@ -1,6 +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
5
|
from canvas_sdk.v1.data.common import ContactPointState, ContactPointSystem, ContactPointUse
|
|
5
6
|
|
|
6
7
|
|
|
@@ -38,41 +39,37 @@ class TeamResponsibility(models.TextChoices):
|
|
|
38
39
|
REVIEW_COVERAGES = "REVIEW_COVERAGES", "Review incomplete patient coverages"
|
|
39
40
|
|
|
40
41
|
|
|
41
|
-
class Team(
|
|
42
|
+
class Team(IdentifiableModel):
|
|
42
43
|
"""Team."""
|
|
43
44
|
|
|
44
45
|
class Meta:
|
|
45
|
-
managed = False
|
|
46
46
|
db_table = "canvas_sdk_data_api_team_001"
|
|
47
47
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
members = models.ManyToManyField(
|
|
48
|
+
created = models.DateTimeField(auto_now_add=True)
|
|
49
|
+
modified = models.DateTimeField(auto_now=True)
|
|
50
|
+
name = models.CharField(max_length=200)
|
|
51
|
+
responsibilities = ArrayField(
|
|
52
|
+
models.CharField(choices=TeamResponsibility.choices, max_length=64)
|
|
53
|
+
)
|
|
54
|
+
members = models.ManyToManyField(
|
|
55
55
|
"v1.Staff",
|
|
56
56
|
related_name="teams",
|
|
57
57
|
db_table="canvas_sdk_data_api_team_members_001",
|
|
58
58
|
)
|
|
59
59
|
|
|
60
60
|
|
|
61
|
-
class TeamContactPoint(
|
|
61
|
+
class TeamContactPoint(IdentifiableModel):
|
|
62
62
|
"""TeamContactPoint."""
|
|
63
63
|
|
|
64
64
|
class Meta:
|
|
65
|
-
managed = False
|
|
66
65
|
db_table = "canvas_sdk_data_api_teamcontactpoint_001"
|
|
67
66
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
use = models.CharField(choices=ContactPointUse.choices)
|
|
73
|
-
use_notes = models.CharField()
|
|
67
|
+
system = models.CharField(choices=ContactPointSystem.choices, max_length=20)
|
|
68
|
+
value = models.CharField(max_length=100)
|
|
69
|
+
use = models.CharField(choices=ContactPointUse.choices, max_length=20)
|
|
70
|
+
use_notes = models.CharField(max_length=255)
|
|
74
71
|
rank = models.IntegerField()
|
|
75
|
-
state = models.CharField(choices=ContactPointState.choices)
|
|
72
|
+
state = models.CharField(choices=ContactPointState.choices, max_length=20)
|
|
76
73
|
team = models.ForeignKey(Team, on_delete=models.DO_NOTHING, related_name="telecom")
|
|
77
74
|
|
|
78
75
|
|
canvas_sdk/v1/data/user.py
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
from django.db import models
|
|
2
2
|
|
|
3
|
+
from canvas_sdk.v1.data.base import Model
|
|
3
4
|
|
|
4
|
-
|
|
5
|
+
|
|
6
|
+
class CanvasUser(Model):
|
|
5
7
|
"""A class representing a Canvas User."""
|
|
6
8
|
|
|
7
9
|
class Meta:
|
|
8
|
-
managed = False
|
|
9
10
|
db_table = "canvas_sdk_data_api_auth_user_001"
|
|
10
11
|
|
|
11
|
-
dbid = models.BigIntegerField(db_column="dbid", primary_key=True)
|
|
12
12
|
email = models.EmailField(db_column="email")
|
|
13
13
|
phone_number = models.CharField(db_column="phone_number", max_length=255)
|
|
14
14
|
last_invite_date_time = models.DateTimeField()
|