canvas 0.67.0__py3-none-any.whl → 0.69.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.67.0.dist-info → canvas-0.69.0.dist-info}/METADATA +1 -1
- {canvas-0.67.0.dist-info → canvas-0.69.0.dist-info}/RECORD +69 -62
- canvas_generated/messages/effects_pb2.py +2 -2
- canvas_generated/messages/effects_pb2.pyi +6 -0
- canvas_generated/messages/events_pb2.py +2 -2
- canvas_generated/messages/events_pb2.pyi +2 -0
- canvas_sdk/effects/note/base.py +17 -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/utils/metrics.py +4 -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 +5 -13
- 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
- logger/logger.py +1 -1
- protobufs/canvas_generated/messages/effects.proto +4 -0
- protobufs/canvas_generated/messages/events.proto +2 -0
- settings.py +2 -0
- {canvas-0.67.0.dist-info → canvas-0.69.0.dist-info}/WHEEL +0 -0
- {canvas-0.67.0.dist-info → canvas-0.69.0.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import datetime
|
|
2
|
+
|
|
3
|
+
import factory
|
|
4
|
+
from dateutil.relativedelta import relativedelta
|
|
5
|
+
|
|
6
|
+
from canvas_sdk.v1.data import (
|
|
7
|
+
Staff,
|
|
8
|
+
StaffAddress,
|
|
9
|
+
StaffContactPoint,
|
|
10
|
+
StaffLicense,
|
|
11
|
+
StaffPhoto,
|
|
12
|
+
StaffRole,
|
|
13
|
+
)
|
|
14
|
+
from canvas_sdk.v1.data.common import ContactPointSystem, ContactPointUse
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class StaffAddressFactory(factory.django.DjangoModelFactory[StaffAddress]):
|
|
18
|
+
"""Factory for creating StaffAddress."""
|
|
19
|
+
|
|
20
|
+
class Meta:
|
|
21
|
+
model = StaffAddress
|
|
22
|
+
|
|
23
|
+
line1 = "1234 Main Street"
|
|
24
|
+
line2 = "Apt 3"
|
|
25
|
+
city = "San Francisco"
|
|
26
|
+
district = "Sunset"
|
|
27
|
+
state_code = "CA"
|
|
28
|
+
postal_code = "94112"
|
|
29
|
+
country = "USA"
|
|
30
|
+
staff = factory.SubFactory("canvas_sdk.test_utils.factories.StaffFactory")
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class StaffPhotoFactory(factory.django.DjangoModelFactory[StaffPhoto]):
|
|
34
|
+
"""Factory for creating StaffPhoto."""
|
|
35
|
+
|
|
36
|
+
class Meta:
|
|
37
|
+
model = StaffPhoto
|
|
38
|
+
|
|
39
|
+
url = ""
|
|
40
|
+
staff = factory.SubFactory("canvas_sdk.test_utils.factories.StaffFactory")
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class StaffRoleFactory(factory.django.DjangoModelFactory[StaffRole]):
|
|
44
|
+
"""Factory for creating StaffRole."""
|
|
45
|
+
|
|
46
|
+
class Meta:
|
|
47
|
+
model = StaffRole
|
|
48
|
+
django_get_or_create = ("internal_code", "staff")
|
|
49
|
+
|
|
50
|
+
internal_code = "MD"
|
|
51
|
+
name = "Physician"
|
|
52
|
+
public_abbreviation = "MD"
|
|
53
|
+
domain = StaffRole.RoleDomain.CLINICAL
|
|
54
|
+
domain_privilege_level = 100000
|
|
55
|
+
permissions = factory.LazyFunction(lambda: {})
|
|
56
|
+
staff = factory.SubFactory("canvas_sdk.test_utils.factories.StaffFactory")
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
class StaffLicenseFactory(factory.django.DjangoModelFactory[StaffLicense]):
|
|
60
|
+
"""Factory for creating StaffLicense."""
|
|
61
|
+
|
|
62
|
+
class Meta:
|
|
63
|
+
model = StaffLicense
|
|
64
|
+
|
|
65
|
+
issuing_authority_long_name = "MEDICAL BOARD OF CALIFORNIA"
|
|
66
|
+
issuing_authority_url = "http://www.mbc.ca.gov/"
|
|
67
|
+
license_or_certification_identifier = "A60695"
|
|
68
|
+
issuance_date = factory.LazyFunction(datetime.date.today)
|
|
69
|
+
expiration_date = factory.LazyFunction(lambda: datetime.date.today() + relativedelta(years=2))
|
|
70
|
+
staff = factory.SubFactory("canvas_sdk.test_utils.factories.StaffFactory")
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
class StaffContactPointFactory(factory.django.DjangoModelFactory[StaffContactPoint]):
|
|
74
|
+
"""Factory for creating StaffContactPoint."""
|
|
75
|
+
|
|
76
|
+
class Meta:
|
|
77
|
+
model = StaffContactPoint
|
|
78
|
+
|
|
79
|
+
value = "8883331212"
|
|
80
|
+
system = ContactPointSystem.PHONE
|
|
81
|
+
use = ContactPointUse.HOME
|
|
82
|
+
staff = factory.SubFactory("canvas_sdk.test_utils.factories.StaffFactory")
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
class StaffFactory(factory.django.DjangoModelFactory[Staff]):
|
|
86
|
+
"""Factory for creating Staff."""
|
|
87
|
+
|
|
88
|
+
class Meta:
|
|
89
|
+
model = Staff
|
|
90
|
+
django_get_or_create = ("user",)
|
|
91
|
+
|
|
92
|
+
first_name = factory.Faker("first_name")
|
|
93
|
+
middle_name = factory.Faker("first_name")
|
|
94
|
+
last_name = factory.Faker("last_name")
|
|
95
|
+
npi_number = "1111155556"
|
|
96
|
+
group_npi_number = "123456789"
|
|
97
|
+
tax_id = "98711111"
|
|
98
|
+
spi_number = 5630156655001
|
|
99
|
+
address = factory.RelatedFactory(StaffAddressFactory, "staff")
|
|
100
|
+
telecom = factory.RelatedFactory(StaffContactPointFactory, "staff")
|
|
101
|
+
primary_practice_location = factory.SubFactory(
|
|
102
|
+
"canvas_sdk.test_utils.factories.PracticeLocationFactory"
|
|
103
|
+
)
|
|
104
|
+
photos = factory.RelatedFactory(StaffPhotoFactory, "staff")
|
|
105
|
+
role = factory.RelatedFactory(StaffRoleFactory, "staff")
|
|
106
|
+
license = factory.RelatedFactory(StaffLicenseFactory, "staff")
|
|
107
|
+
birth_date = factory.Faker("date_object")
|
|
108
|
+
|
|
109
|
+
user = factory.SubFactory(
|
|
110
|
+
"canvas_sdk.test_utils.factories.user.CanvasUserFactory",
|
|
111
|
+
)
|
canvas_sdk/utils/metrics.py
CHANGED
|
@@ -137,7 +137,10 @@ def measure(
|
|
|
137
137
|
extra_tags["plugin"] = caller.split(".")[0]
|
|
138
138
|
extra_tags["handler"] = caller
|
|
139
139
|
|
|
140
|
-
tags = {
|
|
140
|
+
tags = {
|
|
141
|
+
"name": name,
|
|
142
|
+
**(extra_tags or {}),
|
|
143
|
+
}
|
|
141
144
|
|
|
142
145
|
pipeline = client.pipeline()
|
|
143
146
|
timing_start = time.perf_counter_ns()
|
|
@@ -7,9 +7,10 @@ from canvas_sdk.v1.data.base import (
|
|
|
7
7
|
CommittableQuerySetMixin,
|
|
8
8
|
ForPatientQuerySetMixin,
|
|
9
9
|
IdentifiableModel,
|
|
10
|
-
|
|
10
|
+
TimestampedModel,
|
|
11
11
|
ValueSetLookupQuerySet,
|
|
12
12
|
)
|
|
13
|
+
from canvas_sdk.v1.data.coding import Coding
|
|
13
14
|
|
|
14
15
|
|
|
15
16
|
class AllergyIntoleranceQuerySet(
|
|
@@ -25,7 +26,7 @@ class AllergyIntoleranceQuerySet(
|
|
|
25
26
|
AllergyIntoleranceManager = BaseModelManager.from_queryset(AllergyIntoleranceQuerySet)
|
|
26
27
|
|
|
27
28
|
|
|
28
|
-
class AllergyIntolerance(IdentifiableModel):
|
|
29
|
+
class AllergyIntolerance(TimestampedModel, IdentifiableModel):
|
|
29
30
|
"""AllergyIntolerance."""
|
|
30
31
|
|
|
31
32
|
class Meta:
|
|
@@ -33,8 +34,6 @@ class AllergyIntolerance(IdentifiableModel):
|
|
|
33
34
|
|
|
34
35
|
objects = cast(AllergyIntoleranceQuerySet, AllergyIntoleranceManager())
|
|
35
36
|
|
|
36
|
-
created = models.DateTimeField(auto_now_add=True)
|
|
37
|
-
modified = models.DateTimeField(auto_now=True)
|
|
38
37
|
deleted = models.BooleanField()
|
|
39
38
|
committer = models.ForeignKey(
|
|
40
39
|
"v1.CanvasUser", on_delete=models.DO_NOTHING, null=True, related_name="+"
|
|
@@ -61,17 +60,12 @@ class AllergyIntolerance(IdentifiableModel):
|
|
|
61
60
|
narrative = models.CharField(max_length=512)
|
|
62
61
|
|
|
63
62
|
|
|
64
|
-
class AllergyIntoleranceCoding(
|
|
63
|
+
class AllergyIntoleranceCoding(Coding):
|
|
65
64
|
"""AllergyIntoleranceCoding."""
|
|
66
65
|
|
|
67
66
|
class Meta:
|
|
68
67
|
db_table = "canvas_sdk_data_api_allergyintolerancecoding_001"
|
|
69
68
|
|
|
70
|
-
system = models.CharField(max_length=255)
|
|
71
|
-
version = models.CharField(max_length=255)
|
|
72
|
-
code = models.CharField(max_length=255)
|
|
73
|
-
display = models.CharField(max_length=1000)
|
|
74
|
-
user_selected = models.BooleanField()
|
|
75
69
|
allergy_intolerance = models.ForeignKey(
|
|
76
70
|
AllergyIntolerance,
|
|
77
71
|
on_delete=models.DO_NOTHING,
|
|
@@ -1,6 +1,6 @@
|
|
|
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 IdentifiableModel, TimestampedModel
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
class AppointmentProgressStatus(models.TextChoices):
|
|
@@ -60,14 +60,12 @@ class Appointment(IdentifiableModel):
|
|
|
60
60
|
description = models.TextField(null=True, blank=True)
|
|
61
61
|
|
|
62
62
|
|
|
63
|
-
class AppointmentExternalIdentifier(IdentifiableModel):
|
|
63
|
+
class AppointmentExternalIdentifier(TimestampedModel, IdentifiableModel):
|
|
64
64
|
"""AppointmentExternalIdentifier."""
|
|
65
65
|
|
|
66
66
|
class Meta:
|
|
67
67
|
db_table = "canvas_sdk_data_api_appointmentexternalidentifier_001"
|
|
68
68
|
|
|
69
|
-
created = models.DateTimeField(auto_now_add=True)
|
|
70
|
-
modified = models.DateTimeField(auto_now=True)
|
|
71
69
|
use = models.CharField(max_length=255)
|
|
72
70
|
identifier_type = models.CharField(max_length=255)
|
|
73
71
|
system = models.CharField(max_length=255)
|
canvas_sdk/v1/data/assessment.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
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
6
|
class AssessmentStatus(models.TextChoices):
|
|
@@ -11,22 +11,12 @@ class AssessmentStatus(models.TextChoices):
|
|
|
11
11
|
STATUS_DETERIORATING = "deteriorated", "Deteriorated"
|
|
12
12
|
|
|
13
13
|
|
|
14
|
-
class Assessment(IdentifiableModel):
|
|
14
|
+
class Assessment(AuditedModel, IdentifiableModel):
|
|
15
15
|
"""Assessment."""
|
|
16
16
|
|
|
17
17
|
class Meta:
|
|
18
18
|
db_table = "canvas_sdk_data_api_assessment_001"
|
|
19
19
|
|
|
20
|
-
created = models.DateTimeField(auto_now_add=True)
|
|
21
|
-
modified = models.DateTimeField(auto_now=True)
|
|
22
|
-
originator = models.ForeignKey("v1.CanvasUser", on_delete=models.DO_NOTHING, related_name="+")
|
|
23
|
-
committer = models.ForeignKey(
|
|
24
|
-
"v1.CanvasUser", on_delete=models.DO_NOTHING, null=True, related_name="+"
|
|
25
|
-
)
|
|
26
|
-
deleted = models.BooleanField()
|
|
27
|
-
entered_in_error = models.ForeignKey(
|
|
28
|
-
"v1.CanvasUser", on_delete=models.DO_NOTHING, null=True, related_name="+"
|
|
29
|
-
)
|
|
30
20
|
patient = models.ForeignKey(
|
|
31
21
|
"v1.Patient",
|
|
32
22
|
on_delete=models.DO_NOTHING,
|
|
@@ -1,17 +1,15 @@
|
|
|
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
|
|
4
|
+
from canvas_sdk.v1.data.base import TimestampedModel
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
class BannerAlert(
|
|
7
|
+
class BannerAlert(TimestampedModel):
|
|
8
8
|
"""BannerAlert."""
|
|
9
9
|
|
|
10
10
|
class Meta:
|
|
11
11
|
db_table = "canvas_sdk_data_api_banneralert_001"
|
|
12
12
|
|
|
13
|
-
created = models.DateTimeField(auto_now_add=True)
|
|
14
|
-
modified = models.DateTimeField(auto_now=True)
|
|
15
13
|
patient = models.ForeignKey(
|
|
16
14
|
"v1.Patient",
|
|
17
15
|
on_delete=models.DO_NOTHING,
|
canvas_sdk/v1/data/base.py
CHANGED
|
@@ -54,6 +54,34 @@ class IdentifiableModel(Model):
|
|
|
54
54
|
id = models.UUIDField(default=uuid.uuid4, editable=False, unique=True)
|
|
55
55
|
|
|
56
56
|
|
|
57
|
+
class TimestampedModel(Model):
|
|
58
|
+
"""A model that includes created and modified timestamps."""
|
|
59
|
+
|
|
60
|
+
class Meta:
|
|
61
|
+
abstract = True
|
|
62
|
+
|
|
63
|
+
created = models.DateTimeField(auto_now_add=True)
|
|
64
|
+
modified = models.DateTimeField(auto_now=True)
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
class AuditedModel(TimestampedModel):
|
|
68
|
+
"""A model that includes auditing fields."""
|
|
69
|
+
|
|
70
|
+
class Meta:
|
|
71
|
+
abstract = True
|
|
72
|
+
|
|
73
|
+
originator = models.ForeignKey(
|
|
74
|
+
"v1.CanvasUser", on_delete=models.DO_NOTHING, null=True, related_name="+"
|
|
75
|
+
)
|
|
76
|
+
committer = models.ForeignKey(
|
|
77
|
+
"v1.CanvasUser", on_delete=models.DO_NOTHING, null=True, related_name="+"
|
|
78
|
+
)
|
|
79
|
+
entered_in_error = models.ForeignKey(
|
|
80
|
+
"v1.CanvasUser", on_delete=models.DO_NOTHING, null=True, related_name="+"
|
|
81
|
+
)
|
|
82
|
+
deleted = models.BooleanField(default=False)
|
|
83
|
+
|
|
84
|
+
|
|
57
85
|
class BaseModelManager(models.Manager):
|
|
58
86
|
"""A base manager for models."""
|
|
59
87
|
|
canvas_sdk/v1/data/billing.py
CHANGED
|
@@ -2,7 +2,12 @@ from typing import TYPE_CHECKING, Self
|
|
|
2
2
|
|
|
3
3
|
from django.db import models
|
|
4
4
|
|
|
5
|
-
from canvas_sdk.v1.data.base import
|
|
5
|
+
from canvas_sdk.v1.data.base import (
|
|
6
|
+
IdentifiableModel,
|
|
7
|
+
TimestampedModel,
|
|
8
|
+
ValueSetTimeframeLookupQuerySet,
|
|
9
|
+
)
|
|
10
|
+
from canvas_sdk.v1.data.coding import Coding
|
|
6
11
|
from canvas_sdk.value_set.value_set import CodeConstants
|
|
7
12
|
|
|
8
13
|
if TYPE_CHECKING:
|
|
@@ -29,17 +34,14 @@ class BillingLineItemStatus(models.TextChoices):
|
|
|
29
34
|
REMOVED = "removed", "Removed"
|
|
30
35
|
|
|
31
36
|
|
|
32
|
-
class BillingLineItem(IdentifiableModel):
|
|
37
|
+
class BillingLineItem(TimestampedModel, IdentifiableModel):
|
|
33
38
|
"""BillingLineItem."""
|
|
34
39
|
|
|
35
40
|
class Meta:
|
|
36
41
|
db_table = "canvas_sdk_data_api_billinglineitem_001"
|
|
37
42
|
|
|
38
|
-
# objects = BillingLineItemQuerySet.as_manager()
|
|
39
43
|
objects = models.Manager().from_queryset(BillingLineItemQuerySet)()
|
|
40
44
|
|
|
41
|
-
created = models.DateTimeField(auto_now_add=True)
|
|
42
|
-
modified = models.DateTimeField(auto_now=True)
|
|
43
45
|
note = models.ForeignKey(
|
|
44
46
|
"v1.Note",
|
|
45
47
|
on_delete=models.DO_NOTHING,
|
|
@@ -61,17 +63,12 @@ class BillingLineItem(IdentifiableModel):
|
|
|
61
63
|
status = models.CharField(choices=BillingLineItemStatus.choices, max_length=20)
|
|
62
64
|
|
|
63
65
|
|
|
64
|
-
class BillingLineItemModifier(
|
|
66
|
+
class BillingLineItemModifier(Coding):
|
|
65
67
|
"""BillingLineItemModifier."""
|
|
66
68
|
|
|
67
69
|
class Meta:
|
|
68
70
|
db_table = "canvas_sdk_data_api_billinglineitemmodifier_001"
|
|
69
71
|
|
|
70
|
-
system = models.CharField(max_length=255)
|
|
71
|
-
version = models.CharField(max_length=255)
|
|
72
|
-
code = models.CharField(max_length=255)
|
|
73
|
-
display = models.CharField(max_length=1000)
|
|
74
|
-
user_selected = models.BooleanField()
|
|
75
72
|
line_item = models.ForeignKey(
|
|
76
73
|
"v1.BillingLineItem",
|
|
77
74
|
on_delete=models.DO_NOTHING,
|
canvas_sdk/v1/data/care_team.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
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 IdentifiableModel, TimestampedModel
|
|
4
|
+
from canvas_sdk.v1.data.coding import Coding
|
|
4
5
|
|
|
5
6
|
|
|
6
7
|
class CareTeamMembershipStatus(models.TextChoices):
|
|
@@ -13,31 +14,24 @@ class CareTeamMembershipStatus(models.TextChoices):
|
|
|
13
14
|
ENTERED_IN_ERROR = "entered-in-error", "Entered in Error"
|
|
14
15
|
|
|
15
16
|
|
|
16
|
-
class CareTeamRole(
|
|
17
|
+
class CareTeamRole(Coding):
|
|
17
18
|
"""CareTeamRole."""
|
|
18
19
|
|
|
19
20
|
class Meta:
|
|
20
21
|
db_table = "canvas_sdk_data_api_careteamrole_001"
|
|
21
22
|
|
|
22
|
-
system = models.CharField(max_length=255)
|
|
23
|
-
version = models.CharField(max_length=255)
|
|
24
|
-
code = models.CharField(max_length=255)
|
|
25
|
-
display = models.CharField(max_length=1000)
|
|
26
|
-
user_selected = models.BooleanField()
|
|
27
23
|
active = models.BooleanField()
|
|
28
24
|
|
|
29
25
|
def __str__(self) -> str:
|
|
30
26
|
return self.display
|
|
31
27
|
|
|
32
28
|
|
|
33
|
-
class CareTeamMembership(IdentifiableModel):
|
|
29
|
+
class CareTeamMembership(TimestampedModel, IdentifiableModel):
|
|
34
30
|
"""CareTeamMembership."""
|
|
35
31
|
|
|
36
32
|
class Meta:
|
|
37
33
|
db_table = "canvas_sdk_data_api_careteammembership_001"
|
|
38
34
|
|
|
39
|
-
created = models.DateTimeField(auto_now_add=True)
|
|
40
|
-
modified = models.DateTimeField(auto_now=True)
|
|
41
35
|
patient = models.ForeignKey(
|
|
42
36
|
"v1.Patient", on_delete=models.DO_NOTHING, related_name="care_team_memberships", null=True
|
|
43
37
|
)
|
canvas_sdk/v1/data/claim.py
CHANGED
|
@@ -3,7 +3,7 @@ from typing import TYPE_CHECKING, Self
|
|
|
3
3
|
|
|
4
4
|
from django.db import models
|
|
5
5
|
|
|
6
|
-
from canvas_sdk.v1.data.base import IdentifiableModel,
|
|
6
|
+
from canvas_sdk.v1.data.base import IdentifiableModel, TimestampedModel
|
|
7
7
|
from canvas_sdk.v1.data.common import PersonSex
|
|
8
8
|
from canvas_sdk.v1.data.coverage import CoverageRelationshipCode, CoverageType
|
|
9
9
|
from canvas_sdk.v1.data.fields import ChoiceArrayField
|
|
@@ -21,7 +21,7 @@ class InstallmentPlanStatus(models.TextChoices):
|
|
|
21
21
|
CANCELLED = "cancelled", "Cancelled"
|
|
22
22
|
|
|
23
23
|
|
|
24
|
-
class InstallmentPlan(
|
|
24
|
+
class InstallmentPlan(TimestampedModel):
|
|
25
25
|
"""InstallmentPlan."""
|
|
26
26
|
|
|
27
27
|
class Meta:
|
|
@@ -35,9 +35,6 @@ class InstallmentPlan(Model):
|
|
|
35
35
|
status = models.CharField(choices=InstallmentPlanStatus.choices, max_length=10)
|
|
36
36
|
expected_payoff_date = models.DateField()
|
|
37
37
|
|
|
38
|
-
created = models.DateTimeField(auto_now_add=True)
|
|
39
|
-
modified = models.DateTimeField(auto_now=True)
|
|
40
|
-
|
|
41
38
|
|
|
42
39
|
class ClaimQueueColumns(models.TextChoices):
|
|
43
40
|
"""ClaimQueueColumns."""
|
|
@@ -73,7 +70,7 @@ class ClaimQueues(models.IntegerChoices):
|
|
|
73
70
|
TRASH = 10, "Trash"
|
|
74
71
|
|
|
75
72
|
|
|
76
|
-
class ClaimQueue(
|
|
73
|
+
class ClaimQueue(TimestampedModel):
|
|
77
74
|
"""ClaimQueue."""
|
|
78
75
|
|
|
79
76
|
class Meta:
|
|
@@ -83,14 +80,11 @@ class ClaimQueue(Model):
|
|
|
83
80
|
name = models.CharField(max_length=100)
|
|
84
81
|
display_name = models.CharField(max_length=100)
|
|
85
82
|
description = models.CharField(max_length=500)
|
|
86
|
-
show_in_revenue = models.BooleanField()
|
|
83
|
+
show_in_revenue = models.BooleanField(default=True)
|
|
87
84
|
visible_columns = ChoiceArrayField(
|
|
88
85
|
models.CharField(choices=ClaimQueueColumns.choices, max_length=64)
|
|
89
86
|
)
|
|
90
87
|
|
|
91
|
-
created = models.DateTimeField(auto_now_add=True)
|
|
92
|
-
modified = models.DateTimeField(auto_now=True)
|
|
93
|
-
|
|
94
88
|
|
|
95
89
|
class ClaimPayerOrder(models.TextChoices):
|
|
96
90
|
"""ClaimPayerOrder."""
|
|
@@ -124,7 +118,7 @@ class ClaimCoverageQuerySet(models.QuerySet):
|
|
|
124
118
|
return self.filter(active=True)
|
|
125
119
|
|
|
126
120
|
|
|
127
|
-
class ClaimCoverage(
|
|
121
|
+
class ClaimCoverage(TimestampedModel):
|
|
128
122
|
"""A model that represents the link between a claim and a specific insurance coverage."""
|
|
129
123
|
|
|
130
124
|
class Meta:
|
|
@@ -180,11 +174,8 @@ class ClaimCoverage(Model):
|
|
|
180
174
|
resubmission_code = models.CharField(max_length=1)
|
|
181
175
|
payer_icn = models.CharField(max_length=250)
|
|
182
176
|
|
|
183
|
-
created = models.DateTimeField(auto_now_add=True)
|
|
184
|
-
modified = models.DateTimeField(auto_now=True)
|
|
185
177
|
|
|
186
|
-
|
|
187
|
-
class ClaimPatient(Model):
|
|
178
|
+
class ClaimPatient(TimestampedModel):
|
|
188
179
|
"""ClaimPatient."""
|
|
189
180
|
|
|
190
181
|
class Meta:
|
|
@@ -206,9 +197,6 @@ class ClaimPatient(Model):
|
|
|
206
197
|
zip = models.CharField(max_length=255)
|
|
207
198
|
country = models.CharField(max_length=50)
|
|
208
199
|
|
|
209
|
-
created = models.DateTimeField(auto_now_add=True)
|
|
210
|
-
modified = models.DateTimeField(auto_now=True)
|
|
211
|
-
|
|
212
200
|
|
|
213
201
|
class ClaimQueryset(models.QuerySet):
|
|
214
202
|
"""ClaimQueryset."""
|
|
@@ -218,7 +206,7 @@ class ClaimQueryset(models.QuerySet):
|
|
|
218
206
|
return self.exclude(current_queue__queue_sort_ordering=ClaimQueues.TRASH)
|
|
219
207
|
|
|
220
208
|
|
|
221
|
-
class Claim(IdentifiableModel):
|
|
209
|
+
class Claim(TimestampedModel, IdentifiableModel):
|
|
222
210
|
"""Claim."""
|
|
223
211
|
|
|
224
212
|
class Meta:
|
|
@@ -236,25 +224,23 @@ class Claim(IdentifiableModel):
|
|
|
236
224
|
ClaimCoverage, related_name="claims", on_delete=models.SET_NULL, null=True
|
|
237
225
|
)
|
|
238
226
|
|
|
239
|
-
accept_assign = models.BooleanField()
|
|
240
|
-
auto_accident = models.BooleanField()
|
|
227
|
+
accept_assign = models.BooleanField(default=True)
|
|
228
|
+
auto_accident = models.BooleanField(default=False)
|
|
241
229
|
auto_accident_state = models.CharField(max_length=2)
|
|
242
|
-
employment_related = models.BooleanField()
|
|
243
|
-
other_accident = models.BooleanField()
|
|
230
|
+
employment_related = models.BooleanField(default=False)
|
|
231
|
+
other_accident = models.BooleanField(default=False)
|
|
244
232
|
accident_code = models.CharField(max_length=10)
|
|
245
|
-
illness_date = models.DateField()
|
|
233
|
+
illness_date = models.DateField(blank=True, null=True)
|
|
246
234
|
remote_batch_id = models.CharField(max_length=100)
|
|
247
235
|
remote_file_id = models.CharField(max_length=100)
|
|
248
236
|
prior_auth = models.CharField(max_length=100)
|
|
249
237
|
|
|
250
238
|
narrative = models.CharField(max_length=2500)
|
|
251
239
|
account_number = models.CharField(max_length=255)
|
|
252
|
-
snoozed_until = models.DateField()
|
|
240
|
+
snoozed_until = models.DateField(null=True)
|
|
253
241
|
|
|
254
|
-
patient_balance = models.DecimalField(max_digits=8, decimal_places=2)
|
|
255
|
-
aggregate_coverage_balance = models.DecimalField(max_digits=8, decimal_places=2)
|
|
256
|
-
created = models.DateTimeField(auto_now_add=True)
|
|
257
|
-
modified = models.DateTimeField(auto_now=True)
|
|
242
|
+
patient_balance = models.DecimalField(max_digits=8, decimal_places=2, default=0.00)
|
|
243
|
+
aggregate_coverage_balance = models.DecimalField(max_digits=8, decimal_places=2, default=0.00)
|
|
258
244
|
|
|
259
245
|
@property
|
|
260
246
|
def total_charges(self) -> Decimal:
|
|
@@ -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 IdentifiableModel, TimestampedModel
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
class ClaimDiagnosisCode(IdentifiableModel):
|
|
6
|
+
class ClaimDiagnosisCode(TimestampedModel, IdentifiableModel):
|
|
7
7
|
"""ClaimDiagnosisCode model for claim diagnosis codes."""
|
|
8
8
|
|
|
9
9
|
class Meta:
|
|
@@ -15,8 +15,5 @@ class ClaimDiagnosisCode(IdentifiableModel):
|
|
|
15
15
|
code = models.CharField(max_length=20, blank=True)
|
|
16
16
|
display = models.CharField(max_length=1000, blank=True)
|
|
17
17
|
|
|
18
|
-
created = models.DateTimeField(auto_now_add=True)
|
|
19
|
-
modified = models.DateTimeField(auto_now=True)
|
|
20
|
-
|
|
21
18
|
|
|
22
19
|
__exports__ = ("ClaimDiagnosisCode",)
|
|
@@ -5,7 +5,7 @@ from django.db import models
|
|
|
5
5
|
from django.db.models import Q, Sum
|
|
6
6
|
from django.db.models.functions import Coalesce
|
|
7
7
|
|
|
8
|
-
from canvas_sdk.v1.data.base import
|
|
8
|
+
from canvas_sdk.v1.data.base import TimestampedModel
|
|
9
9
|
from canvas_sdk.v1.data.note import PracticeLocationPOS
|
|
10
10
|
|
|
11
11
|
|
|
@@ -106,7 +106,7 @@ class ClaimLineItemQuerySet(models.QuerySet):
|
|
|
106
106
|
return self.exclude(proc_code=LineItemCodes.UNLINKED.value).apply_ordering()
|
|
107
107
|
|
|
108
108
|
|
|
109
|
-
class ClaimLineItem(
|
|
109
|
+
class ClaimLineItem(TimestampedModel):
|
|
110
110
|
"""ClaimLineItem."""
|
|
111
111
|
|
|
112
112
|
class Meta:
|
|
@@ -132,8 +132,5 @@ class ClaimLineItem(Model):
|
|
|
132
132
|
epsdt = models.CharField(max_length=2)
|
|
133
133
|
family_planning = models.CharField(choices=FamilyPlanningOptions.choices, max_length=1)
|
|
134
134
|
|
|
135
|
-
created = models.DateTimeField(auto_now_add=True)
|
|
136
|
-
modified = models.DateTimeField(auto_now=True)
|
|
137
|
-
|
|
138
135
|
|
|
139
136
|
__exports__ = ("ClaimLineItem", "ClaimLineItemStatus", "LineItemCodes", "FamilyPlanningOptions")
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
from django.db import models
|
|
2
|
+
|
|
3
|
+
from canvas_sdk.v1.data.base import Model
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class Coding(Model):
|
|
7
|
+
"""A representation of a coding from a terminology system."""
|
|
8
|
+
|
|
9
|
+
class Meta:
|
|
10
|
+
abstract = True
|
|
11
|
+
|
|
12
|
+
code = models.CharField(max_length=255, blank=True, default="")
|
|
13
|
+
display = models.CharField(max_length=1000)
|
|
14
|
+
system = models.CharField(max_length=255)
|
|
15
|
+
version = models.CharField(max_length=255, blank=True, default="")
|
|
16
|
+
user_selected = models.BooleanField(default=False)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
__exports__ = ()
|
canvas_sdk/v1/data/command.py
CHANGED
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
from django.apps import apps
|
|
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
|
|
|
6
6
|
|
|
7
|
-
class Command(IdentifiableModel):
|
|
7
|
+
class Command(TimestampedModel, IdentifiableModel):
|
|
8
8
|
"""Command."""
|
|
9
9
|
|
|
10
10
|
class Meta:
|
|
11
11
|
db_table = "canvas_sdk_data_commands_command_001"
|
|
12
12
|
|
|
13
|
-
created = models.DateTimeField(auto_now_add=True)
|
|
14
|
-
modified = models.DateTimeField(auto_now=True)
|
|
15
13
|
originator = models.ForeignKey(
|
|
16
14
|
"v1.CanvasUser", on_delete=models.DO_NOTHING, null=True, related_name="commands_originated"
|
|
17
15
|
)
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
from django.db import models
|
|
2
2
|
from django.db.models import TextChoices
|
|
3
3
|
|
|
4
|
+
from canvas_sdk.v1.data.base import IdentifiableModel
|
|
4
5
|
|
|
5
|
-
|
|
6
|
+
|
|
7
|
+
class CompoundMedication(IdentifiableModel):
|
|
6
8
|
"""CompoundMedication."""
|
|
7
9
|
|
|
8
10
|
class Meta:
|
|
@@ -49,8 +51,6 @@ class CompoundMedication(models.Model):
|
|
|
49
51
|
SCHEDULE_IV = "IV", "Schedule IV"
|
|
50
52
|
SCHEDULE_V = "V", "Schedule V"
|
|
51
53
|
|
|
52
|
-
id = models.UUIDField()
|
|
53
|
-
dbid = models.BigIntegerField(primary_key=True)
|
|
54
54
|
active = models.BooleanField(default=True)
|
|
55
55
|
formulation = models.CharField(max_length=105)
|
|
56
56
|
potency_unit_code = models.CharField(max_length=20, choices=PotencyUnits.choices)
|
canvas_sdk/v1/data/condition.py
CHANGED
|
@@ -9,9 +9,9 @@ from canvas_sdk.v1.data.base import (
|
|
|
9
9
|
CommittableQuerySetMixin,
|
|
10
10
|
ForPatientQuerySetMixin,
|
|
11
11
|
IdentifiableModel,
|
|
12
|
-
Model,
|
|
13
12
|
ValueSetLookupQuerySetMixin,
|
|
14
13
|
)
|
|
14
|
+
from canvas_sdk.v1.data.coding import Coding
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
class ClinicalStatus(TextChoices):
|
|
@@ -64,17 +64,12 @@ class Condition(IdentifiableModel):
|
|
|
64
64
|
surgical = models.BooleanField()
|
|
65
65
|
|
|
66
66
|
|
|
67
|
-
class ConditionCoding(
|
|
67
|
+
class ConditionCoding(Coding):
|
|
68
68
|
"""ConditionCoding."""
|
|
69
69
|
|
|
70
70
|
class Meta:
|
|
71
71
|
db_table = "canvas_sdk_data_api_conditioncoding_001"
|
|
72
72
|
|
|
73
|
-
system = models.CharField(max_length=255)
|
|
74
|
-
version = models.CharField(max_length=255)
|
|
75
|
-
code = models.CharField(max_length=255)
|
|
76
|
-
display = models.CharField(max_length=1000)
|
|
77
|
-
user_selected = models.BooleanField()
|
|
78
73
|
condition = models.ForeignKey(
|
|
79
74
|
Condition, on_delete=models.DO_NOTHING, related_name="codings", null=True
|
|
80
75
|
)
|