canvas 0.14.0__py3-none-any.whl → 0.16.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.

Files changed (88) hide show
  1. {canvas-0.14.0.dist-info → canvas-0.16.0.dist-info}/METADATA +2 -2
  2. {canvas-0.14.0.dist-info → canvas-0.16.0.dist-info}/RECORD +87 -52
  3. canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/CANVAS_MANIFEST.json +6 -3
  4. canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/applications/my_application.py +4 -1
  5. canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/protocols/my_protocol.py +1 -1
  6. canvas_cli/utils/validators/manifest_schema.py +9 -2
  7. canvas_generated/messages/effects_pb2.py +2 -2
  8. canvas_generated/messages/effects_pb2.pyi +18 -0
  9. canvas_generated/messages/events_pb2.py +2 -2
  10. canvas_generated/messages/events_pb2.pyi +48 -0
  11. canvas_sdk/commands/tests/protocol/tests.py +3 -1
  12. canvas_sdk/commands/tests/test_utils.py +76 -18
  13. canvas_sdk/effects/banner_alert/tests.py +41 -20
  14. canvas_sdk/effects/launch_modal.py +14 -3
  15. canvas_sdk/events/base.py +1 -3
  16. canvas_sdk/handlers/action_button.py +33 -13
  17. canvas_sdk/handlers/application.py +1 -1
  18. canvas_sdk/handlers/cron_task.py +1 -1
  19. canvas_sdk/protocols/clinical_quality_measure.py +1 -1
  20. canvas_sdk/templates/__init__.py +3 -0
  21. canvas_sdk/templates/tests/__init__.py +0 -0
  22. canvas_sdk/templates/tests/test_utils.py +43 -0
  23. canvas_sdk/templates/utils.py +44 -0
  24. canvas_sdk/v1/apps.py +7 -0
  25. canvas_sdk/v1/data/__init__.py +98 -5
  26. canvas_sdk/v1/data/allergy_intolerance.py +25 -9
  27. canvas_sdk/v1/data/appointment.py +56 -0
  28. canvas_sdk/v1/data/assessment.py +40 -0
  29. canvas_sdk/v1/data/base.py +35 -22
  30. canvas_sdk/v1/data/billing.py +4 -7
  31. canvas_sdk/v1/data/care_team.py +60 -0
  32. canvas_sdk/v1/data/command.py +8 -10
  33. canvas_sdk/v1/data/common.py +53 -0
  34. canvas_sdk/v1/data/condition.py +22 -10
  35. canvas_sdk/v1/data/coverage.py +294 -0
  36. canvas_sdk/v1/data/detected_issue.py +5 -9
  37. canvas_sdk/v1/data/device.py +4 -8
  38. canvas_sdk/v1/data/imaging.py +12 -17
  39. canvas_sdk/v1/data/lab.py +41 -31
  40. canvas_sdk/v1/data/medication.py +16 -10
  41. canvas_sdk/v1/data/note.py +11 -14
  42. canvas_sdk/v1/data/observation.py +19 -14
  43. canvas_sdk/v1/data/organization.py +1 -2
  44. canvas_sdk/v1/data/patient.py +140 -2
  45. canvas_sdk/v1/data/practicelocation.py +2 -4
  46. canvas_sdk/v1/data/protocol_override.py +21 -8
  47. canvas_sdk/v1/data/questionnaire.py +20 -17
  48. canvas_sdk/v1/data/staff.py +5 -7
  49. canvas_sdk/v1/data/task.py +5 -11
  50. canvas_sdk/v1/data/user.py +0 -1
  51. canvas_sdk/v1/models.py +4 -0
  52. canvas_sdk/value_set/hcc2018.py +55369 -0
  53. plugin_runner/plugin_installer.py +1 -1
  54. plugin_runner/plugin_runner.py +5 -25
  55. plugin_runner/sandbox.py +133 -9
  56. plugin_runner/tests/fixtures/plugins/test_implicit_imports_plugin/CANVAS_MANIFEST.json +38 -0
  57. plugin_runner/tests/fixtures/plugins/test_implicit_imports_plugin/README.md +11 -0
  58. plugin_runner/tests/fixtures/plugins/test_implicit_imports_plugin/protocols/__init__.py +0 -0
  59. plugin_runner/tests/fixtures/plugins/test_implicit_imports_plugin/protocols/my_protocol.py +33 -0
  60. plugin_runner/tests/fixtures/plugins/test_implicit_imports_plugin/templates/__init__.py +3 -0
  61. plugin_runner/tests/fixtures/plugins/test_implicit_imports_plugin/templates/base.py +6 -0
  62. plugin_runner/tests/fixtures/plugins/test_implicit_imports_plugin/utils/__init__.py +5 -0
  63. plugin_runner/tests/fixtures/plugins/test_implicit_imports_plugin/utils/base.py +4 -0
  64. plugin_runner/tests/fixtures/plugins/test_module_forbidden_imports_plugin/CANVAS_MANIFEST.json +29 -0
  65. plugin_runner/tests/fixtures/plugins/test_module_forbidden_imports_plugin/README.md +12 -0
  66. plugin_runner/tests/fixtures/plugins/test_module_forbidden_imports_plugin/other_module/__init__.py +0 -0
  67. plugin_runner/tests/fixtures/plugins/test_module_forbidden_imports_plugin/other_module/base.py +10 -0
  68. plugin_runner/tests/fixtures/plugins/test_module_forbidden_imports_plugin/protocols/__init__.py +0 -0
  69. plugin_runner/tests/fixtures/plugins/test_module_forbidden_imports_plugin/protocols/my_protocol.py +18 -0
  70. plugin_runner/tests/fixtures/plugins/test_module_forbidden_imports_runtime_plugin/CANVAS_MANIFEST.json +29 -0
  71. plugin_runner/tests/fixtures/plugins/test_module_forbidden_imports_runtime_plugin/README.md +12 -0
  72. plugin_runner/tests/fixtures/plugins/test_module_forbidden_imports_runtime_plugin/other_module/__init__.py +0 -0
  73. plugin_runner/tests/fixtures/plugins/test_module_forbidden_imports_runtime_plugin/other_module/base.py +10 -0
  74. plugin_runner/tests/fixtures/plugins/test_module_forbidden_imports_runtime_plugin/protocols/__init__.py +0 -0
  75. plugin_runner/tests/fixtures/plugins/test_module_forbidden_imports_runtime_plugin/protocols/my_protocol.py +18 -0
  76. plugin_runner/tests/fixtures/plugins/test_render_template/CANVAS_MANIFEST.json +47 -0
  77. plugin_runner/tests/fixtures/plugins/test_render_template/README.md +11 -0
  78. plugin_runner/tests/fixtures/plugins/test_render_template/protocols/__init__.py +0 -0
  79. plugin_runner/tests/fixtures/plugins/test_render_template/protocols/my_protocol.py +43 -0
  80. plugin_runner/tests/fixtures/plugins/test_render_template/templates/template.html +10 -0
  81. plugin_runner/tests/test_application.py +9 -9
  82. plugin_runner/tests/test_plugin_installer.py +12 -1
  83. plugin_runner/tests/test_plugin_runner.py +159 -66
  84. plugin_runner/tests/test_sandbox.py +26 -14
  85. settings.py +13 -1
  86. canvas_sdk/models/__init__.py +0 -8
  87. {canvas-0.14.0.dist-info → canvas-0.16.0.dist-info}/WHEEL +0 -0
  88. {canvas-0.14.0.dist-info → canvas-0.16.0.dist-info}/entry_points.txt +0 -0
@@ -1,10 +1,22 @@
1
- from typing import Self
1
+ from typing import TYPE_CHECKING, Any, Self
2
2
 
3
3
  import arrow
4
4
  from django.contrib.postgres.fields import ArrayField
5
5
  from django.db import models
6
6
  from django.db.models import TextChoices
7
7
 
8
+ from canvas_sdk.v1.data.common import (
9
+ AddressState,
10
+ AddressType,
11
+ AddressUse,
12
+ ContactPointState,
13
+ ContactPointSystem,
14
+ ContactPointUse,
15
+ )
16
+
17
+ if TYPE_CHECKING:
18
+ from django_stubs_ext.db.models.manager import RelatedManager
19
+
8
20
 
9
21
  class SexAtBirth(TextChoices):
10
22
  """SexAtBirth."""
@@ -16,12 +28,21 @@ class SexAtBirth(TextChoices):
16
28
  BLANK = "", ""
17
29
 
18
30
 
31
+ class PatientSettingConstants:
32
+ """PatientSettingConstants."""
33
+
34
+ LAB = "lab"
35
+ PHARMACY = "pharmacy"
36
+ IMAGING_CENTER = "imagingCenter"
37
+ CONTACT_METHOD = "contactMethod"
38
+ PREFERRED_SCHEDULING_TIMEZONE = "preferredSchedulingTimezone"
39
+
40
+
19
41
  class Patient(models.Model):
20
42
  """A class representing a patient."""
21
43
 
22
44
  class Meta:
23
45
  managed = False
24
- app_label = "canvas_sdk"
25
46
  db_table = "canvas_sdk_data_api_patient_001"
26
47
 
27
48
  id = models.CharField(max_length=32, db_column="key")
@@ -60,6 +81,8 @@ class Patient(models.Model):
60
81
  default_location_id = models.BigIntegerField()
61
82
  default_provider_id = models.BigIntegerField()
62
83
 
84
+ settings: "RelatedManager[PatientSetting]"
85
+
63
86
  @classmethod
64
87
  def find(cls, id: str) -> Self:
65
88
  """Find a patient by id."""
@@ -84,3 +107,118 @@ class Patient(models.Model):
84
107
  next_year = birth_date.shift(years=age + 1)
85
108
  age += (time.date() - current_year.date()) / (next_year.date() - current_year.date())
86
109
  return age
110
+
111
+ def get_setting(self, name: str) -> Any:
112
+ """Returns a patient setting value by name."""
113
+ try:
114
+ return self.settings.get(name=name).value
115
+ except PatientSetting.DoesNotExist:
116
+ return None
117
+
118
+ @property
119
+ def preferred_pharmacy(self) -> dict[str, str] | None:
120
+ """Returns the patient's preferred pharmacy."""
121
+ pharmacy_setting = self.get_setting(PatientSettingConstants.PHARMACY) or {}
122
+ if isinstance(pharmacy_setting, list):
123
+ for pharmacy in pharmacy_setting:
124
+ if pharmacy.get("default", False):
125
+ return pharmacy
126
+ return None
127
+ return pharmacy_setting
128
+
129
+
130
+ class PatientContactPoint(models.Model):
131
+ """A class representing a patient contact point."""
132
+
133
+ class Meta:
134
+ managed = False
135
+ db_table = "canvas_sdk_data_api_patientcontactpoint_001"
136
+
137
+ id = models.UUIDField()
138
+ dbid = models.BigIntegerField(primary_key=True)
139
+ system = models.CharField(choices=ContactPointSystem.choices)
140
+ value = models.CharField()
141
+ use = models.CharField(choices=ContactPointUse.choices)
142
+ use_notes = models.CharField()
143
+ rank = models.IntegerField()
144
+ state = models.CharField(choices=ContactPointState.choices)
145
+ patient = models.ForeignKey(
146
+ "v1.Patient", on_delete=models.DO_NOTHING, related_name="telecom", null=True
147
+ )
148
+ has_consent = models.BooleanField()
149
+ last_verified = models.DateTimeField
150
+ verification_token = models.CharField()
151
+ opted_out = models.BooleanField()
152
+
153
+
154
+ class PatientAddress(models.Model):
155
+ """A class representing a patient address."""
156
+
157
+ class Meta:
158
+ managed = False
159
+ db_table = "canvas_sdk_data_api_patientaddress_001"
160
+
161
+ id = models.UUIDField()
162
+ dbid = models.BigIntegerField(primary_key=True)
163
+ line1 = models.CharField()
164
+ line2 = models.CharField()
165
+ city = models.CharField()
166
+ district = models.CharField()
167
+ state_code = models.CharField()
168
+ postal_code = models.CharField()
169
+ use = models.CharField(choices=AddressUse.choices)
170
+ type = models.CharField(choices=AddressType.choices)
171
+ longitude = models.FloatField()
172
+ latitude = models.FloatField()
173
+ start = models.DateField()
174
+ end = models.DateField()
175
+ country = models.CharField()
176
+ state = models.CharField(choices=AddressState.choices)
177
+ patient = models.ForeignKey(
178
+ "v1.Patient", on_delete=models.DO_NOTHING, related_name="addresses", null=True
179
+ )
180
+
181
+ def __str__(self) -> str:
182
+ return f"id={self.id}"
183
+
184
+
185
+ class PatientExternalIdentifier(models.Model):
186
+ """A class representing a patient external identifier."""
187
+
188
+ class Meta:
189
+ managed = False
190
+ db_table = "canvas_sdk_data_api_patientexternalidentifier_001"
191
+
192
+ id = models.UUIDField()
193
+ dbid = models.BigIntegerField(primary_key=True)
194
+ created = models.DateTimeField()
195
+ modified = models.DateTimeField()
196
+ patient = models.ForeignKey(
197
+ "v1.Patient", related_name="external_identifiers", on_delete=models.DO_NOTHING, null=True
198
+ )
199
+ use = models.CharField()
200
+ identifier_type = models.CharField()
201
+ system = models.CharField()
202
+ value = models.CharField()
203
+ issued_date = models.DateField()
204
+ expiration_date = models.DateField()
205
+
206
+ def __str__(self) -> str:
207
+ return f"id={self.id}"
208
+
209
+
210
+ class PatientSetting(models.Model):
211
+ """PatientSetting."""
212
+
213
+ class Meta:
214
+ managed = False
215
+ db_table = "canvas_sdk_data_api_patientsetting_001"
216
+
217
+ dbid = models.BigIntegerField(primary_key=True)
218
+ created = models.DateTimeField()
219
+ modified = models.DateTimeField()
220
+ patient = models.ForeignKey(
221
+ "v1.Patient", on_delete=models.DO_NOTHING, related_name="settings", null=True
222
+ )
223
+ name = models.CharField()
224
+ value = models.JSONField()
@@ -57,7 +57,6 @@ class PracticeLocation(models.Model):
57
57
 
58
58
  class Meta:
59
59
  managed = False
60
- app_label = "canvas_sdk"
61
60
  db_table = "canvas_sdk_data_api_practicelocation_001"
62
61
 
63
62
  id = models.UUIDField()
@@ -65,7 +64,7 @@ class PracticeLocation(models.Model):
65
64
  created = models.DateTimeField()
66
65
  modified = models.DateTimeField()
67
66
  organization = models.ForeignKey(
68
- "Organization", on_delete=models.DO_NOTHING, related_name="practice_locations", null=True
67
+ "v1.Organization", on_delete=models.DO_NOTHING, related_name="practice_locations", null=True
69
68
  )
70
69
  place_of_service_code = models.CharField(choices=PracticeLocationPOS.choices)
71
70
  full_name = models.CharField()
@@ -91,12 +90,11 @@ class PracticeLocationSetting(models.Model):
91
90
 
92
91
  class Meta:
93
92
  managed = False
94
- app_label = "canvas_sdk"
95
93
  db_table = "canvas_sdk_data_api_practicelocationsetting_001"
96
94
 
97
95
  dbid = models.BigIntegerField(primary_key=True)
98
96
  practice_location = models.ForeignKey(
99
- PracticeLocation, on_delete=models.DO_NOTHING, related_name="settings", null=True
97
+ "v1.PracticeLocation", on_delete=models.DO_NOTHING, related_name="settings", null=True
100
98
  )
101
99
  name = models.CharField()
102
100
  value = models.JSONField()
@@ -1,8 +1,13 @@
1
+ from typing import cast
2
+
1
3
  from django.db import models
2
4
 
3
- from canvas_sdk.v1.data.base import CommittableModelManager
4
- from canvas_sdk.v1.data.patient import Patient
5
- from canvas_sdk.v1.data.user import CanvasUser
5
+ from canvas_sdk.v1.data.base import (
6
+ BaseModelManager,
7
+ BaseQuerySet,
8
+ CommittableQuerySetMixin,
9
+ ForPatientQuerySetMixin,
10
+ )
6
11
 
7
12
 
8
13
  class IntervalUnit(models.TextChoices):
@@ -20,25 +25,33 @@ class Status(models.TextChoices):
20
25
  INACTIVE = "inactive", "inactive"
21
26
 
22
27
 
28
+ class ProtocolOverrideQuerySet(BaseQuerySet, ForPatientQuerySetMixin, CommittableQuerySetMixin):
29
+ """ProtocolOverrideQuerySet."""
30
+
31
+ pass
32
+
33
+
34
+ ProtocolOverrideManager = BaseModelManager.from_queryset(ProtocolOverrideQuerySet)
35
+
36
+
23
37
  class ProtocolOverride(models.Model):
24
38
  """ProtocolOverride."""
25
39
 
26
40
  class Meta:
27
41
  managed = False
28
- app_label = "canvas_sdk"
29
42
  db_table = "canvas_sdk_data_api_protocoloverride_001"
30
43
 
31
- objects = CommittableModelManager()
44
+ objects = cast(ProtocolOverrideQuerySet, ProtocolOverrideManager())
32
45
 
33
46
  id = models.UUIDField()
34
47
  dbid = models.BigIntegerField(primary_key=True)
35
48
  created = models.DateTimeField()
36
49
  modified = models.DateTimeField()
37
50
  deleted = models.BooleanField()
38
- committer = models.ForeignKey(CanvasUser, on_delete=models.DO_NOTHING, null=True)
39
- entered_in_error = models.ForeignKey(CanvasUser, on_delete=models.DO_NOTHING, null=True)
51
+ committer = models.ForeignKey("v1.CanvasUser", on_delete=models.DO_NOTHING, null=True)
52
+ entered_in_error = models.ForeignKey("v1.CanvasUser", on_delete=models.DO_NOTHING, null=True)
40
53
  patient = models.ForeignKey(
41
- Patient, on_delete=models.DO_NOTHING, related_name="protocol_overrides", null=True
54
+ "v1.Patient", on_delete=models.DO_NOTHING, related_name="protocol_overrides", null=True
42
55
  )
43
56
  protocol_key = models.CharField()
44
57
  is_adjustment = models.BooleanField()
@@ -1,14 +1,16 @@
1
1
  from collections.abc import Container
2
+ from typing import cast
2
3
 
3
4
  from django.db import models
4
5
  from django.db.models import Q
5
6
 
6
- from canvas_sdk.v1.data import Patient
7
7
  from canvas_sdk.v1.data.base import (
8
- CommittableModelManager,
8
+ BaseModelManager,
9
+ BaseQuerySet,
10
+ CommittableQuerySetMixin,
11
+ ForPatientQuerySetMixin,
9
12
  ValueSetLookupByNameQuerySet,
10
13
  )
11
- from canvas_sdk.v1.data.user import CanvasUser
12
14
 
13
15
 
14
16
  class ResponseOptionSet(models.Model):
@@ -16,7 +18,6 @@ class ResponseOptionSet(models.Model):
16
18
 
17
19
  class Meta:
18
20
  managed = False
19
- app_label = "canvas_sdk"
20
21
  db_table = "canvas_sdk_data_api_responseoptionset_001"
21
22
 
22
23
  dbid = models.BigIntegerField(primary_key=True)
@@ -35,7 +36,6 @@ class ResponseOption(models.Model):
35
36
 
36
37
  class Meta:
37
38
  managed = False
38
- app_label = "canvas_sdk"
39
39
  db_table = "canvas_sdk_data_api_responseoption_001"
40
40
 
41
41
  dbid = models.BigIntegerField(primary_key=True)
@@ -57,7 +57,6 @@ class Question(models.Model):
57
57
 
58
58
  class Meta:
59
59
  managed = False
60
- app_label = "canvas_sdk"
61
60
  db_table = "canvas_sdk_data_api_question_001"
62
61
 
63
62
  id = models.UUIDField()
@@ -89,7 +88,6 @@ class Questionnaire(models.Model):
89
88
 
90
89
  class Meta:
91
90
  managed = False
92
- app_label = "canvas_sdk"
93
91
  db_table = "canvas_sdk_data_api_questionnaire_001"
94
92
 
95
93
  objects = models.Manager.from_queryset(QuestionnaireValueSetLookupQuerySet)()
@@ -109,7 +107,7 @@ class Questionnaire(models.Model):
109
107
  code_system = models.CharField()
110
108
  code = models.CharField()
111
109
  search_tags = models.CharField()
112
- questions = models.ManyToManyField(Question, through="canvas_sdk.QuestionnaireQuestionMap") # type: ignore[misc, var-annotated]
110
+ questions = models.ManyToManyField(Question, through="v1.QuestionnaireQuestionMap") # type: ignore[misc, var-annotated]
113
111
  use_in_shx = models.BooleanField()
114
112
  carry_forward = models.TextField()
115
113
 
@@ -119,7 +117,6 @@ class QuestionnaireQuestionMap(models.Model):
119
117
 
120
118
  class Meta:
121
119
  managed = False
122
- app_label = "canvas_sdk"
123
120
  db_table = "canvas_sdk_data_api_questionnairequestionmap_001"
124
121
 
125
122
  dbid = models.BigIntegerField(primary_key=True)
@@ -130,33 +127,41 @@ class QuestionnaireQuestionMap(models.Model):
130
127
  question = models.ForeignKey(Question, on_delete=models.DO_NOTHING, null=True)
131
128
 
132
129
 
130
+ class InterviewQuerySet(BaseQuerySet, ForPatientQuerySetMixin, CommittableQuerySetMixin):
131
+ """InterviewQuerySet."""
132
+
133
+ pass
134
+
135
+
136
+ InterviewManager = BaseModelManager.from_queryset(InterviewQuerySet)
137
+
138
+
133
139
  class Interview(models.Model):
134
140
  """Interview."""
135
141
 
136
142
  class Meta:
137
143
  managed = False
138
- app_label = "canvas_sdk"
139
144
  db_table = "canvas_sdk_data_api_interview_001"
140
145
 
141
- objects = CommittableModelManager()
146
+ objects = cast(InterviewQuerySet, InterviewManager())
142
147
 
143
148
  id = models.UUIDField()
144
149
  dbid = models.BigIntegerField(primary_key=True)
145
150
  deleted = models.BooleanField()
146
- committer = models.ForeignKey(CanvasUser, on_delete=models.DO_NOTHING, null=True)
147
- entered_in_error = models.ForeignKey(CanvasUser, on_delete=models.DO_NOTHING, null=True)
151
+ committer = models.ForeignKey("v1.CanvasUser", on_delete=models.DO_NOTHING, null=True)
152
+ entered_in_error = models.ForeignKey("v1.CanvasUser", on_delete=models.DO_NOTHING, null=True)
148
153
  status = models.CharField()
149
154
  name = models.CharField()
150
155
  language_id = models.BigIntegerField()
151
156
  use_case_in_charting = models.CharField()
152
157
  patient = models.ForeignKey(
153
- Patient, on_delete=models.DO_NOTHING, related_name="interviews", null=True
158
+ "v1.Patient", on_delete=models.DO_NOTHING, related_name="interviews", null=True
154
159
  )
155
160
  note_id = models.BigIntegerField()
156
161
  appointment_id = models.BigIntegerField()
157
162
  questionnaires = models.ManyToManyField( # type: ignore[var-annotated]
158
163
  Questionnaire,
159
- through="canvas_sdk.InterviewQuestionnaireMap", # type: ignore[misc]
164
+ through="v1.InterviewQuestionnaireMap", # type: ignore[misc]
160
165
  )
161
166
  progress_status = models.CharField()
162
167
  created = models.DateTimeField()
@@ -168,7 +173,6 @@ class InterviewQuestionnaireMap(models.Model):
168
173
 
169
174
  class Meta:
170
175
  managed = False
171
- app_label = "canvas_sdk"
172
176
  db_table = "canvas_sdk_data_api_interviewquestionnairemap_001"
173
177
 
174
178
  dbid = models.BigIntegerField(primary_key=True)
@@ -184,7 +188,6 @@ class InterviewQuestionResponse(models.Model):
184
188
 
185
189
  class Meta:
186
190
  managed = False
187
- app_label = "canvas_sdk"
188
191
  db_table = "canvas_sdk_data_api_interviewquestionresponse_001"
189
192
 
190
193
  dbid = models.BigIntegerField(primary_key=True)
@@ -3,7 +3,6 @@ from django.db import models
3
3
  from timezone_utils.fields import TimeZoneField
4
4
 
5
5
  from canvas_sdk.v1.data.common import PersonSex, TaxIDType
6
- from canvas_sdk.v1.data.user import CanvasUser
7
6
 
8
7
 
9
8
  class Staff(models.Model):
@@ -11,7 +10,6 @@ class Staff(models.Model):
11
10
 
12
11
  class Meta:
13
12
  managed = False
14
- app_label = "canvas_sdk"
15
13
  db_table = "canvas_sdk_data_api_staff_001"
16
14
 
17
15
  def __str__(self) -> str:
@@ -44,7 +42,7 @@ class Staff(models.Model):
44
42
  active = models.BooleanField()
45
43
  # TODO - uncomment when PracticeLocation field is developed
46
44
  # primary_practice_location = models.ForeignKey(
47
- # PracticeLocation, on_delete=models.DO_NOTHING, null=True
45
+ # 'v1.PracticeLocation', on_delete=models.DO_NOTHING, null=True
48
46
  # )
49
47
  npi_number = models.CharField()
50
48
  nadean_number = models.CharField()
@@ -54,12 +52,12 @@ class Staff(models.Model):
54
52
  tax_id_type = models.CharField(choices=TaxIDType.choices)
55
53
  spi_number = models.CharField()
56
54
  # TODO - uncomment when Language is developed
57
- # language = models.ForeignKey(Language, on_delete=models.DO_NOTHING, related_name="staff_speakers", null=True)
58
- # language_secondary = models.ForeignKey(Language, on_delete=models.DO_NOTHING, related_name="staff_secondary_speakers", null=True)
55
+ # language = models.ForeignKey('v1.Language', on_delete=models.DO_NOTHING, related_name="staff_speakers", null=True)
56
+ # language_secondary = models.ForeignKey('v1.Language', on_delete=models.DO_NOTHING, related_name="staff_secondary_speakers", null=True)
59
57
  personal_meeting_room_link = models.URLField(null=True)
60
58
  state = models.JSONField()
61
- user = models.ForeignKey(CanvasUser, on_delete=models.DO_NOTHING, null=True)
59
+ user = models.ForeignKey("v1.CanvasUser", on_delete=models.DO_NOTHING, null=True)
62
60
  schedule_column_ordering = models.IntegerField()
63
61
  default_supervising_provider = models.ForeignKey(
64
- "Staff", on_delete=models.DO_NOTHING, related_name="supervising_team", null=True
62
+ "v1.Staff", on_delete=models.DO_NOTHING, related_name="supervising_team", null=True
65
63
  )
@@ -2,8 +2,6 @@ from django.contrib.postgres.fields import ArrayField
2
2
  from django.db import models
3
3
 
4
4
  from canvas_sdk.v1.data.common import ColorEnum, Origin
5
- from canvas_sdk.v1.data.patient import Patient
6
- from canvas_sdk.v1.data.staff import Staff
7
5
 
8
6
 
9
7
  class TaskType(models.TextChoices):
@@ -39,7 +37,6 @@ class Task(models.Model):
39
37
 
40
38
  class Meta:
41
39
  managed = False
42
- app_label = "canvas_sdk"
43
40
  db_table = "canvas_sdk_data_api_task_001"
44
41
 
45
42
  id = models.UUIDField()
@@ -47,15 +44,15 @@ class Task(models.Model):
47
44
  created = models.DateTimeField()
48
45
  modified = models.DateTimeField()
49
46
  creator = models.ForeignKey(
50
- Staff, on_delete=models.DO_NOTHING, related_name="creator_tasks", null=True
47
+ "v1.Staff", on_delete=models.DO_NOTHING, related_name="creator_tasks", null=True
51
48
  )
52
49
  assignee = models.ForeignKey(
53
- Staff, on_delete=models.DO_NOTHING, related_name="assignee_tasks", null=True
50
+ "v1.Staff", on_delete=models.DO_NOTHING, related_name="assignee_tasks", null=True
54
51
  )
55
52
  # TODO - uncomment when Team model is created
56
- # team = models.ForeignKey(Team, on_delete=models.DO_NOTHING, related_name="tasks", null=True)
53
+ # team = models.ForeignKey('v1.Team', on_delete=models.DO_NOTHING, related_name="tasks", null=True)
57
54
  patient = models.ForeignKey(
58
- Patient, on_delete=models.DO_NOTHING, blank=True, related_name="tasks", null=True
55
+ "v1.Patient", on_delete=models.DO_NOTHING, blank=True, related_name="tasks", null=True
59
56
  )
60
57
  task_type = models.CharField(choices=TaskType.choices)
61
58
  tag = models.CharField()
@@ -70,7 +67,6 @@ class TaskComment(models.Model):
70
67
 
71
68
  class Meta:
72
69
  managed = False
73
- app_label = "canvas_sdk"
74
70
  db_table = "canvas_sdk_data_api_taskcomment_001"
75
71
 
76
72
  id = models.UUIDField()
@@ -78,7 +74,7 @@ class TaskComment(models.Model):
78
74
  created = models.DateTimeField()
79
75
  modified = models.DateTimeField()
80
76
  creator = models.ForeignKey(
81
- Staff, on_delete=models.DO_NOTHING, related_name="comments", null=True
77
+ "v1.Staff", on_delete=models.DO_NOTHING, related_name="comments", null=True
82
78
  )
83
79
  task = models.ForeignKey(Task, on_delete=models.DO_NOTHING, related_name="comments", null=True)
84
80
  body = models.TextField()
@@ -89,7 +85,6 @@ class TaskLabel(models.Model):
89
85
 
90
86
  class Meta:
91
87
  managed = False
92
- app_label = "canvas_sdk"
93
88
  db_table = "canvas_sdk_data_api_tasklabel_001"
94
89
 
95
90
  id = models.UUIDField()
@@ -108,7 +103,6 @@ class TaskTaskLabel(models.Model):
108
103
 
109
104
  class Meta:
110
105
  managed = False
111
- app_label = "canvas_sdk"
112
106
  db_table = "canvas_sdk_data_api_tasktasklabel_001"
113
107
 
114
108
  dbid = models.BigIntegerField(primary_key=True)
@@ -6,7 +6,6 @@ class CanvasUser(models.Model):
6
6
 
7
7
  class Meta:
8
8
  managed = False
9
- app_label = "canvas_sdk"
10
9
  db_table = "canvas_sdk_data_api_auth_user_001"
11
10
 
12
11
  dbid = models.BigIntegerField(db_column="dbid", primary_key=True)
@@ -0,0 +1,4 @@
1
+ # Normally we would register Django models in the models module, but they are in "data" for legacy
2
+ # reasons. For this reason, we import * from data to avoid duplication.
3
+
4
+ from .data import * # noqa: F403