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
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
from django.db import models
|
|
2
2
|
from django.db.models import QuerySet
|
|
3
3
|
|
|
4
|
+
from canvas_sdk.v1.data.base import Model
|
|
5
|
+
|
|
4
6
|
|
|
5
7
|
class AbstractLineItemQuerySet(models.QuerySet):
|
|
6
8
|
"""AbstractLineItemQuerySet."""
|
|
@@ -10,7 +12,7 @@ class AbstractLineItemQuerySet(models.QuerySet):
|
|
|
10
12
|
return self.filter(entered_in_error__isnull=True)
|
|
11
13
|
|
|
12
14
|
|
|
13
|
-
class AbstractLineItemTransaction(
|
|
15
|
+
class AbstractLineItemTransaction(Model):
|
|
14
16
|
"""Abstract class with common properties for both payments and adjustments."""
|
|
15
17
|
|
|
16
18
|
class Meta:
|
|
@@ -18,7 +20,6 @@ class AbstractLineItemTransaction(models.Model):
|
|
|
18
20
|
|
|
19
21
|
objects = AbstractLineItemQuerySet.as_manager()
|
|
20
22
|
|
|
21
|
-
dbid = models.BigIntegerField(primary_key=True)
|
|
22
23
|
posting = models.ForeignKey(
|
|
23
24
|
"v1.BasePosting", related_name="%(class)ss", on_delete=models.PROTECT
|
|
24
25
|
)
|
|
@@ -27,15 +28,14 @@ class AbstractLineItemTransaction(models.Model):
|
|
|
27
28
|
)
|
|
28
29
|
amount = models.DecimalField(max_digits=8, decimal_places=2)
|
|
29
30
|
|
|
30
|
-
created = models.DateTimeField()
|
|
31
|
-
modified = models.DateTimeField()
|
|
31
|
+
created = models.DateTimeField(auto_now_add=True)
|
|
32
|
+
modified = models.DateTimeField(auto_now=True)
|
|
32
33
|
|
|
33
34
|
|
|
34
35
|
class NewLineItemPayment(AbstractLineItemTransaction):
|
|
35
36
|
"""Subclass that represents a payment on a billing line item."""
|
|
36
37
|
|
|
37
38
|
class Meta:
|
|
38
|
-
managed = False
|
|
39
39
|
db_table = "canvas_sdk_data_quality_and_revenue_newlineitempayment_001"
|
|
40
40
|
|
|
41
41
|
charged = models.DecimalField(max_digits=8, decimal_places=2)
|
|
@@ -47,8 +47,8 @@ class AbstractLineItemAdjustment(AbstractLineItemTransaction):
|
|
|
47
47
|
class Meta:
|
|
48
48
|
abstract = True
|
|
49
49
|
|
|
50
|
-
code = models.CharField()
|
|
51
|
-
group = models.CharField()
|
|
50
|
+
code = models.CharField(max_length=8)
|
|
51
|
+
group = models.CharField(max_length=8)
|
|
52
52
|
|
|
53
53
|
deviated_from_posting_ruleset = models.BooleanField()
|
|
54
54
|
|
|
@@ -57,7 +57,6 @@ class NewLineItemAdjustment(AbstractLineItemAdjustment):
|
|
|
57
57
|
"""Subclass for billing line item adjustments."""
|
|
58
58
|
|
|
59
59
|
class Meta:
|
|
60
|
-
managed = False
|
|
61
60
|
db_table = "canvas_sdk_data_quality_and_revenue_newlineitemadjustment_001"
|
|
62
61
|
|
|
63
62
|
write_off = models.BooleanField()
|
|
@@ -67,7 +66,6 @@ class LineItemTransfer(AbstractLineItemAdjustment):
|
|
|
67
66
|
"""Subclass for billing line item balance transfer to other coverages or patient."""
|
|
68
67
|
|
|
69
68
|
class Meta:
|
|
70
|
-
managed = False
|
|
71
69
|
db_table = "canvas_sdk_data_quality_and_revenue_lineitemtransfer_001"
|
|
72
70
|
|
|
73
71
|
transfer_to = models.ForeignKey(
|
canvas_sdk/v1/data/medication.py
CHANGED
|
@@ -7,6 +7,8 @@ from canvas_sdk.v1.data.base import (
|
|
|
7
7
|
BaseModelManager,
|
|
8
8
|
CommittableQuerySetMixin,
|
|
9
9
|
ForPatientQuerySetMixin,
|
|
10
|
+
IdentifiableModel,
|
|
11
|
+
Model,
|
|
10
12
|
ValueSetLookupQuerySet,
|
|
11
13
|
)
|
|
12
14
|
|
|
@@ -29,17 +31,14 @@ class MedicationQuerySet(ValueSetLookupQuerySet, CommittableQuerySetMixin, ForPa
|
|
|
29
31
|
MedicationManager = BaseModelManager.from_queryset(MedicationQuerySet)
|
|
30
32
|
|
|
31
33
|
|
|
32
|
-
class Medication(
|
|
34
|
+
class Medication(IdentifiableModel):
|
|
33
35
|
"""Medication."""
|
|
34
36
|
|
|
35
37
|
class Meta:
|
|
36
|
-
managed = False
|
|
37
38
|
db_table = "canvas_sdk_data_api_medication_001"
|
|
38
39
|
|
|
39
40
|
objects = cast(MedicationQuerySet, MedicationManager())
|
|
40
41
|
|
|
41
|
-
id = models.UUIDField()
|
|
42
|
-
dbid = models.BigIntegerField(primary_key=True)
|
|
43
42
|
patient = models.ForeignKey(
|
|
44
43
|
"v1.Patient", on_delete=models.DO_NOTHING, related_name="medications", null=True
|
|
45
44
|
)
|
|
@@ -50,28 +49,26 @@ class Medication(models.Model):
|
|
|
50
49
|
committer = models.ForeignKey(
|
|
51
50
|
"v1.CanvasUser", on_delete=models.DO_NOTHING, null=True, related_name="+"
|
|
52
51
|
)
|
|
53
|
-
status = models.CharField(choices=Status.choices)
|
|
52
|
+
status = models.CharField(choices=Status.choices, max_length=20)
|
|
54
53
|
start_date = models.DateTimeField()
|
|
55
54
|
end_date = models.DateTimeField()
|
|
56
|
-
quantity_qualifier_description = models.
|
|
57
|
-
clinical_quantity_description = models.
|
|
58
|
-
potency_unit_code = models.CharField()
|
|
59
|
-
national_drug_code = models.CharField()
|
|
60
|
-
erx_quantity = models.
|
|
55
|
+
quantity_qualifier_description = models.TextField()
|
|
56
|
+
clinical_quantity_description = models.TextField()
|
|
57
|
+
potency_unit_code = models.CharField(max_length=20)
|
|
58
|
+
national_drug_code = models.CharField(max_length=20)
|
|
59
|
+
erx_quantity = models.FloatField()
|
|
61
60
|
|
|
62
61
|
|
|
63
|
-
class MedicationCoding(
|
|
62
|
+
class MedicationCoding(Model):
|
|
64
63
|
"""MedicationCoding."""
|
|
65
64
|
|
|
66
65
|
class Meta:
|
|
67
|
-
managed = False
|
|
68
66
|
db_table = "canvas_sdk_data_api_medicationcoding_001"
|
|
69
67
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
display = models.CharField()
|
|
68
|
+
system = models.CharField(max_length=255)
|
|
69
|
+
version = models.CharField(max_length=255)
|
|
70
|
+
code = models.CharField(max_length=255)
|
|
71
|
+
display = models.CharField(max_length=1000)
|
|
75
72
|
user_selected = models.BooleanField()
|
|
76
73
|
medication = models.ForeignKey(
|
|
77
74
|
Medication, on_delete=models.DO_NOTHING, related_name="codings", null=True
|
canvas_sdk/v1/data/message.py
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
from django.db import models
|
|
2
2
|
|
|
3
|
+
from canvas_sdk.v1.data.base import IdentifiableModel
|
|
4
|
+
|
|
3
5
|
|
|
4
6
|
class TransmissionChannel(models.TextChoices):
|
|
5
7
|
"""Transmission channel."""
|
|
@@ -10,17 +12,14 @@ class TransmissionChannel(models.TextChoices):
|
|
|
10
12
|
NOOP = "noop", "No-op"
|
|
11
13
|
|
|
12
14
|
|
|
13
|
-
class Message(
|
|
15
|
+
class Message(IdentifiableModel):
|
|
14
16
|
"""Message."""
|
|
15
17
|
|
|
16
18
|
class Meta:
|
|
17
|
-
managed = False
|
|
18
19
|
db_table = "canvas_sdk_data_api_message_001"
|
|
19
20
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
created = models.DateTimeField()
|
|
23
|
-
modified = models.DateTimeField()
|
|
21
|
+
created = models.DateTimeField(auto_now_add=True)
|
|
22
|
+
modified = models.DateTimeField(auto_now=True)
|
|
24
23
|
content = models.TextField()
|
|
25
24
|
sender = models.ForeignKey(
|
|
26
25
|
"v1.CanvasUser", on_delete=models.DO_NOTHING, related_name="sent_messages", null=True
|
|
@@ -34,15 +33,12 @@ class Message(models.Model):
|
|
|
34
33
|
read = models.BooleanField()
|
|
35
34
|
|
|
36
35
|
|
|
37
|
-
class MessageAttachment(
|
|
36
|
+
class MessageAttachment(IdentifiableModel):
|
|
38
37
|
"""Message attachment."""
|
|
39
38
|
|
|
40
39
|
class Meta:
|
|
41
|
-
managed = False
|
|
42
40
|
db_table = "canvas_sdk_data_api_messageattachment_001"
|
|
43
41
|
|
|
44
|
-
id = models.UUIDField()
|
|
45
|
-
dbid = models.BigIntegerField(primary_key=True)
|
|
46
42
|
file = models.TextField()
|
|
47
43
|
content_type = models.CharField(max_length=255)
|
|
48
44
|
message = models.ForeignKey(
|
|
@@ -50,24 +46,21 @@ class MessageAttachment(models.Model):
|
|
|
50
46
|
)
|
|
51
47
|
|
|
52
48
|
|
|
53
|
-
class MessageTransmission(
|
|
49
|
+
class MessageTransmission(IdentifiableModel):
|
|
54
50
|
"""Message Transmission."""
|
|
55
51
|
|
|
56
52
|
class Meta:
|
|
57
|
-
managed = False
|
|
58
53
|
db_table = "canvas_sdk_data_api_messagetransmission_001"
|
|
59
54
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
created = models.DateTimeField()
|
|
63
|
-
modified = models.DateTimeField()
|
|
55
|
+
created = models.DateTimeField(auto_now_add=True)
|
|
56
|
+
modified = models.DateTimeField(auto_now=True)
|
|
64
57
|
message = models.ForeignKey(
|
|
65
58
|
"v1.Message", on_delete=models.DO_NOTHING, related_name="transmissions", null=True
|
|
66
59
|
)
|
|
67
60
|
delivered = models.BooleanField()
|
|
68
61
|
failed = models.BooleanField()
|
|
69
62
|
|
|
70
|
-
contact_point_system = models.CharField(choices=TransmissionChannel.choices)
|
|
63
|
+
contact_point_system = models.CharField(choices=TransmissionChannel.choices, max_length=20)
|
|
71
64
|
contact_point_value = models.CharField(max_length=255)
|
|
72
65
|
|
|
73
66
|
comment = models.TextField()
|
canvas_sdk/v1/data/note.py
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
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
|
|
5
|
+
|
|
4
6
|
|
|
5
7
|
class NoteTypeCategories(models.TextChoices):
|
|
6
8
|
"""Note type categories."""
|
|
@@ -87,35 +89,58 @@ class NoteTypes(models.TextChoices):
|
|
|
87
89
|
CCDA = "ccda", "C-CDA Import"
|
|
88
90
|
|
|
89
91
|
|
|
90
|
-
class
|
|
92
|
+
class NoteStates(models.TextChoices):
|
|
93
|
+
"""Note states."""
|
|
94
|
+
|
|
95
|
+
NEW = "NEW", "Created"
|
|
96
|
+
PUSHED = "PSH", "Pushed the charges for"
|
|
97
|
+
LOCKED = "LKD", "Locked"
|
|
98
|
+
UNLOCKED = "ULK", "Unlocked"
|
|
99
|
+
DELETED = "DLT", "Deleted"
|
|
100
|
+
RELOCKED = "RLK", "Relocked"
|
|
101
|
+
RESTORED = "RST", "Restored"
|
|
102
|
+
RECALLED = "RCL", "Recalled"
|
|
103
|
+
UNDELETED = "UND", "Undeleted"
|
|
104
|
+
DISCHARGED = "DSC", "Discharged"
|
|
105
|
+
# Appointment note
|
|
106
|
+
SCHEDULING = "SCH", "Scheduling"
|
|
107
|
+
BOOKED = "BKD", "Booked"
|
|
108
|
+
CONVERTED = "CVD", "Checked in"
|
|
109
|
+
CANCELLED = "CLD", "Canceled"
|
|
110
|
+
NOSHOW = "NSW", "No show"
|
|
111
|
+
REVERTED = "RVT", "Reverted"
|
|
112
|
+
# C-CDA Import note
|
|
113
|
+
CONFIRM_IMPORT = "CNF", "Confirmed"
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
class NoteType(IdentifiableModel):
|
|
91
117
|
"""NoteType."""
|
|
92
118
|
|
|
93
119
|
objects: models.Manager["NoteType"]
|
|
94
120
|
|
|
95
121
|
class Meta:
|
|
96
|
-
managed = False
|
|
97
122
|
db_table = "canvas_sdk_data_api_notetype_001"
|
|
98
123
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
code = models.CharField()
|
|
106
|
-
display = models.CharField()
|
|
124
|
+
created = models.DateTimeField(auto_now_add=True)
|
|
125
|
+
modified = models.DateTimeField(auto_now=True)
|
|
126
|
+
system = models.CharField(max_length=255)
|
|
127
|
+
version = models.CharField(max_length=255)
|
|
128
|
+
code = models.CharField(max_length=255)
|
|
129
|
+
display = models.CharField(max_length=1000)
|
|
107
130
|
user_selected = models.BooleanField()
|
|
108
|
-
name = models.CharField()
|
|
109
|
-
icon = models.CharField()
|
|
110
|
-
category = models.CharField(choices=NoteTypeCategories.choices)
|
|
131
|
+
name = models.CharField(max_length=250)
|
|
132
|
+
icon = models.CharField(max_length=250)
|
|
133
|
+
category = models.CharField(choices=NoteTypeCategories.choices, max_length=50)
|
|
111
134
|
rank = models.PositiveIntegerField()
|
|
112
135
|
is_default_appointment_type = models.BooleanField()
|
|
113
136
|
is_scheduleable = models.BooleanField()
|
|
114
137
|
is_telehealth = models.BooleanField()
|
|
115
138
|
is_billable = models.BooleanField()
|
|
116
139
|
defer_place_of_service_to_practice_location = models.BooleanField()
|
|
117
|
-
available_places_of_service = ArrayField(
|
|
118
|
-
|
|
140
|
+
available_places_of_service = ArrayField(
|
|
141
|
+
models.CharField(choices=PracticeLocationPOS.choices, max_length=5)
|
|
142
|
+
)
|
|
143
|
+
default_place_of_service = models.CharField(choices=PracticeLocationPOS.choices, max_length=5)
|
|
119
144
|
is_system_managed = models.BooleanField()
|
|
120
145
|
is_visible = models.BooleanField()
|
|
121
146
|
is_active = models.BooleanField()
|
|
@@ -127,24 +152,21 @@ class NoteType(models.Model):
|
|
|
127
152
|
online_duration = models.IntegerField()
|
|
128
153
|
|
|
129
154
|
|
|
130
|
-
class Note(
|
|
155
|
+
class Note(IdentifiableModel):
|
|
131
156
|
"""Note."""
|
|
132
157
|
|
|
133
158
|
class Meta:
|
|
134
|
-
managed = False
|
|
135
159
|
db_table = "canvas_sdk_data_api_note_001"
|
|
136
160
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
created = models.DateTimeField()
|
|
140
|
-
modified = models.DateTimeField()
|
|
161
|
+
created = models.DateTimeField(auto_now_add=True)
|
|
162
|
+
modified = models.DateTimeField(auto_now=True)
|
|
141
163
|
patient = models.ForeignKey(
|
|
142
164
|
"v1.Patient", on_delete=models.DO_NOTHING, related_name="notes", null=True
|
|
143
165
|
)
|
|
144
166
|
provider = models.ForeignKey(
|
|
145
167
|
"v1.Staff", on_delete=models.DO_NOTHING, related_name="notes", null=True
|
|
146
168
|
)
|
|
147
|
-
note_type = models.CharField(choices=NoteTypes.choices, null=True)
|
|
169
|
+
note_type = models.CharField(choices=NoteTypes.choices, null=True, max_length=50)
|
|
148
170
|
note_type_version = models.ForeignKey(
|
|
149
171
|
"v1.NoteType", on_delete=models.DO_NOTHING, related_name="notes", null=True
|
|
150
172
|
)
|
|
@@ -152,14 +174,52 @@ class Note(models.Model):
|
|
|
152
174
|
body = models.JSONField()
|
|
153
175
|
originator = models.ForeignKey("v1.CanvasUser", on_delete=models.DO_NOTHING, null=True)
|
|
154
176
|
last_modified_by_staff = models.ForeignKey("v1.Staff", on_delete=models.DO_NOTHING, null=True)
|
|
155
|
-
checksum = models.CharField()
|
|
177
|
+
checksum = models.CharField(max_length=32)
|
|
156
178
|
billing_note = models.TextField()
|
|
157
179
|
# TODO -implement InpatientStay model
|
|
158
180
|
# inpatient_stay = models.ForeignKey("v1.InpatientStay", on_delete=models.DO_NOTHING, null=True)
|
|
159
181
|
related_data = models.JSONField()
|
|
160
182
|
location = models.ForeignKey("v1.PracticeLocation", on_delete=models.DO_NOTHING, null=True)
|
|
161
183
|
datetime_of_service = models.DateTimeField()
|
|
162
|
-
place_of_service = models.CharField()
|
|
184
|
+
place_of_service = models.CharField(max_length=255)
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
class NoteStateChangeEvent(IdentifiableModel):
|
|
188
|
+
"""NoteStateChangeEvent."""
|
|
189
|
+
|
|
190
|
+
class Meta:
|
|
191
|
+
db_table = "canvas_sdk_data_api_notestatechangeevent_001"
|
|
192
|
+
|
|
193
|
+
created = models.DateTimeField()
|
|
194
|
+
modified = models.DateTimeField()
|
|
195
|
+
note = models.ForeignKey("v1.Note", on_delete=models.DO_NOTHING, related_name="state_history")
|
|
196
|
+
originator = models.ForeignKey("v1.CanvasUser", on_delete=models.DO_NOTHING, null=True)
|
|
197
|
+
state = models.CharField(choices=NoteStates.choices, max_length=3)
|
|
198
|
+
note_state_document = models.CharField(max_length=100, null=True)
|
|
199
|
+
note_state_html = models.TextField()
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
class CurrentNoteStateEvent(IdentifiableModel):
|
|
203
|
+
"""
|
|
204
|
+
CurrentNoteStateEvent is a special model backed by a view which only includes the latest
|
|
205
|
+
NoteStateChangeEvent for any given note_id.
|
|
206
|
+
"""
|
|
207
|
+
|
|
208
|
+
class Meta:
|
|
209
|
+
db_table = "canvas_sdk_data_current_note_state_001"
|
|
210
|
+
|
|
211
|
+
state = models.CharField(choices=NoteStates.choices, max_length=3)
|
|
212
|
+
note = models.ForeignKey("v1.Note", on_delete=models.DO_NOTHING, related_name="+")
|
|
213
|
+
|
|
214
|
+
def editable(self) -> bool:
|
|
215
|
+
"""Returns a boolean to indicate if the related note can be edited."""
|
|
216
|
+
return self.state in [
|
|
217
|
+
NoteStates.NEW,
|
|
218
|
+
NoteStates.PUSHED,
|
|
219
|
+
NoteStates.UNLOCKED,
|
|
220
|
+
NoteStates.RESTORED,
|
|
221
|
+
NoteStates.UNDELETED,
|
|
222
|
+
]
|
|
163
223
|
|
|
164
224
|
|
|
165
225
|
__exports__ = (
|
|
@@ -168,4 +228,7 @@ __exports__ = (
|
|
|
168
228
|
"NoteTypes",
|
|
169
229
|
"NoteType",
|
|
170
230
|
"Note",
|
|
231
|
+
"NoteStates",
|
|
232
|
+
"NoteStateChangeEvent",
|
|
233
|
+
"CurrentNoteStateEvent",
|
|
171
234
|
)
|
|
@@ -6,6 +6,8 @@ from canvas_sdk.v1.data.base import (
|
|
|
6
6
|
BaseModelManager,
|
|
7
7
|
CommittableQuerySetMixin,
|
|
8
8
|
ForPatientQuerySetMixin,
|
|
9
|
+
IdentifiableModel,
|
|
10
|
+
Model,
|
|
9
11
|
ValueSetLookupQuerySet,
|
|
10
12
|
)
|
|
11
13
|
|
|
@@ -21,19 +23,16 @@ class ObservationQuerySet(
|
|
|
21
23
|
ObservationManager = BaseModelManager.from_queryset(ObservationQuerySet)
|
|
22
24
|
|
|
23
25
|
|
|
24
|
-
class Observation(
|
|
26
|
+
class Observation(IdentifiableModel):
|
|
25
27
|
"""Observation."""
|
|
26
28
|
|
|
27
29
|
class Meta:
|
|
28
|
-
managed = False
|
|
29
30
|
db_table = "canvas_sdk_data_api_observation_001"
|
|
30
31
|
|
|
31
32
|
objects = cast(ObservationQuerySet, ObservationManager())
|
|
32
33
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
created = models.DateTimeField()
|
|
36
|
-
modified = models.DateTimeField()
|
|
34
|
+
created = models.DateTimeField(auto_now_add=True)
|
|
35
|
+
modified = models.DateTimeField(auto_now=True)
|
|
37
36
|
originator = models.ForeignKey(
|
|
38
37
|
"v1.CanvasUser", on_delete=models.DO_NOTHING, null=True, related_name="+"
|
|
39
38
|
)
|
|
@@ -50,7 +49,7 @@ class Observation(models.Model):
|
|
|
50
49
|
is_member_of = models.ForeignKey(
|
|
51
50
|
"self", on_delete=models.DO_NOTHING, related_name="members", null=True
|
|
52
51
|
)
|
|
53
|
-
category = models.CharField()
|
|
52
|
+
category = models.CharField(max_length=14)
|
|
54
53
|
units = models.TextField()
|
|
55
54
|
value = models.TextField()
|
|
56
55
|
note_id = models.BigIntegerField()
|
|
@@ -58,34 +57,30 @@ class Observation(models.Model):
|
|
|
58
57
|
effective_datetime = models.DateTimeField()
|
|
59
58
|
|
|
60
59
|
|
|
61
|
-
class ObservationCoding(
|
|
60
|
+
class ObservationCoding(Model):
|
|
62
61
|
"""ObservationCoding."""
|
|
63
62
|
|
|
64
63
|
class Meta:
|
|
65
|
-
managed = False
|
|
66
64
|
db_table = "canvas_sdk_data_api_observationcoding_001"
|
|
67
65
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
display = models.CharField()
|
|
66
|
+
system = models.CharField(max_length=255)
|
|
67
|
+
version = models.CharField(max_length=255)
|
|
68
|
+
code = models.CharField(max_length=255)
|
|
69
|
+
display = models.CharField(max_length=1000)
|
|
73
70
|
user_selected = models.BooleanField()
|
|
74
71
|
observation = models.ForeignKey(
|
|
75
72
|
Observation, on_delete=models.DO_NOTHING, related_name="codings", null=True
|
|
76
73
|
)
|
|
77
74
|
|
|
78
75
|
|
|
79
|
-
class ObservationComponent(
|
|
76
|
+
class ObservationComponent(Model):
|
|
80
77
|
"""ObservationComponent."""
|
|
81
78
|
|
|
82
79
|
class Meta:
|
|
83
|
-
managed = False
|
|
84
80
|
db_table = "canvas_sdk_data_api_observationcomponent_001"
|
|
85
81
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
modified = models.DateTimeField()
|
|
82
|
+
created = models.DateTimeField(auto_now_add=True)
|
|
83
|
+
modified = models.DateTimeField(auto_now=True)
|
|
89
84
|
observation = models.ForeignKey(
|
|
90
85
|
Observation, on_delete=models.DO_NOTHING, related_name="components", null=True
|
|
91
86
|
)
|
|
@@ -94,36 +89,32 @@ class ObservationComponent(models.Model):
|
|
|
94
89
|
name = models.TextField()
|
|
95
90
|
|
|
96
91
|
|
|
97
|
-
class ObservationComponentCoding(
|
|
92
|
+
class ObservationComponentCoding(Model):
|
|
98
93
|
"""ObservationComponentCoding."""
|
|
99
94
|
|
|
100
95
|
class Meta:
|
|
101
|
-
managed = False
|
|
102
96
|
db_table = "canvas_sdk_data_api_observationcomponentcoding_001"
|
|
103
97
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
display = models.CharField()
|
|
98
|
+
system = models.CharField(max_length=255)
|
|
99
|
+
version = models.CharField(max_length=255)
|
|
100
|
+
code = models.CharField(max_length=255)
|
|
101
|
+
display = models.CharField(max_length=1000)
|
|
109
102
|
user_selected = models.BooleanField()
|
|
110
103
|
observation_component = models.ForeignKey(
|
|
111
104
|
ObservationComponent, on_delete=models.DO_NOTHING, related_name="codings", null=True
|
|
112
105
|
)
|
|
113
106
|
|
|
114
107
|
|
|
115
|
-
class ObservationValueCoding(
|
|
108
|
+
class ObservationValueCoding(Model):
|
|
116
109
|
"""ObservationValueCoding."""
|
|
117
110
|
|
|
118
111
|
class Meta:
|
|
119
|
-
managed = False
|
|
120
112
|
db_table = "canvas_sdk_data_api_observationvaluecoding_001"
|
|
121
113
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
display = models.CharField()
|
|
114
|
+
system = models.CharField(max_length=255)
|
|
115
|
+
version = models.CharField(max_length=255)
|
|
116
|
+
code = models.CharField(max_length=255)
|
|
117
|
+
display = models.CharField(max_length=1000)
|
|
127
118
|
user_selected = models.BooleanField()
|
|
128
119
|
observation = models.ForeignKey(
|
|
129
120
|
Observation, on_delete=models.DO_NOTHING, related_name="value_codings", null=True
|
|
@@ -1,29 +1,28 @@
|
|
|
1
1
|
from django.db import models
|
|
2
2
|
|
|
3
|
+
from canvas_sdk.v1.data.base import Model
|
|
3
4
|
from canvas_sdk.v1.data.common import TaxIDType
|
|
4
5
|
|
|
5
6
|
|
|
6
|
-
class Organization(
|
|
7
|
+
class Organization(Model):
|
|
7
8
|
"""Organization."""
|
|
8
9
|
|
|
9
10
|
class Meta:
|
|
10
|
-
managed = False
|
|
11
11
|
db_table = "canvas_sdk_data_api_organization_001"
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
background_gradient = models.CharField()
|
|
13
|
+
created = models.DateTimeField(auto_now_add=True)
|
|
14
|
+
modified = models.DateTimeField(auto_now=True)
|
|
15
|
+
full_name = models.CharField(max_length=255)
|
|
16
|
+
short_name = models.CharField(max_length=255)
|
|
17
|
+
subdomain = models.CharField(max_length=100)
|
|
18
|
+
logo_url = models.CharField(max_length=255)
|
|
19
|
+
background_image_url = models.CharField(max_length=255)
|
|
20
|
+
background_gradient = models.CharField(max_length=255)
|
|
22
21
|
active = models.BooleanField()
|
|
23
|
-
tax_id = models.CharField(null=True)
|
|
24
|
-
tax_id_type = models.CharField(choices=TaxIDType.choices)
|
|
25
|
-
group_npi_number = models.CharField()
|
|
26
|
-
group_taxonomy_number = models.CharField()
|
|
22
|
+
tax_id = models.CharField(null=True, max_length=25)
|
|
23
|
+
tax_id_type = models.CharField(choices=TaxIDType.choices, max_length=1)
|
|
24
|
+
group_npi_number = models.CharField(max_length=10)
|
|
25
|
+
group_taxonomy_number = models.CharField(max_length=10)
|
|
27
26
|
include_zz_qualifier = models.BooleanField()
|
|
28
27
|
main_location = models.OneToOneField(
|
|
29
28
|
"v1.PracticeLocation", on_delete=models.DO_NOTHING, related_name="+"
|