canvas 0.67.0__py3-none-any.whl → 0.68.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of canvas might be problematic. Click here for more details.

Files changed (66) hide show
  1. {canvas-0.67.0.dist-info → canvas-0.68.0.dist-info}/METADATA +1 -1
  2. {canvas-0.67.0.dist-info → canvas-0.68.0.dist-info}/RECORD +66 -59
  3. canvas_generated/messages/effects_pb2.py +2 -2
  4. canvas_generated/messages/effects_pb2.pyi +6 -0
  5. canvas_generated/messages/events_pb2.py +2 -2
  6. canvas_generated/messages/events_pb2.pyi +2 -0
  7. canvas_sdk/effects/note/base.py +17 -0
  8. canvas_sdk/handlers/application.py +7 -7
  9. canvas_sdk/handlers/utils.py +14 -0
  10. canvas_sdk/test_utils/factories/__init__.py +25 -0
  11. canvas_sdk/test_utils/factories/claim.py +24 -0
  12. canvas_sdk/test_utils/factories/claim_diagnosis_code.py +1 -0
  13. canvas_sdk/test_utils/factories/note.py +37 -0
  14. canvas_sdk/test_utils/factories/organization.py +20 -0
  15. canvas_sdk/test_utils/factories/practicelocation.py +34 -0
  16. canvas_sdk/test_utils/factories/staff.py +111 -0
  17. canvas_sdk/v1/data/allergy_intolerance.py +4 -10
  18. canvas_sdk/v1/data/appointment.py +2 -4
  19. canvas_sdk/v1/data/assessment.py +2 -12
  20. canvas_sdk/v1/data/banner_alert.py +2 -4
  21. canvas_sdk/v1/data/base.py +28 -0
  22. canvas_sdk/v1/data/billing.py +8 -11
  23. canvas_sdk/v1/data/care_team.py +4 -10
  24. canvas_sdk/v1/data/claim.py +15 -29
  25. canvas_sdk/v1/data/claim_diagnosis_code.py +2 -5
  26. canvas_sdk/v1/data/claim_line_item.py +2 -5
  27. canvas_sdk/v1/data/coding.py +19 -0
  28. canvas_sdk/v1/data/command.py +2 -4
  29. canvas_sdk/v1/data/compound_medication.py +3 -3
  30. canvas_sdk/v1/data/condition.py +2 -7
  31. canvas_sdk/v1/data/coverage.py +5 -13
  32. canvas_sdk/v1/data/detected_issue.py +4 -20
  33. canvas_sdk/v1/data/device.py +2 -14
  34. canvas_sdk/v1/data/discount.py +2 -5
  35. canvas_sdk/v1/data/encounter.py +2 -4
  36. canvas_sdk/v1/data/goal.py +2 -14
  37. canvas_sdk/v1/data/imaging.py +4 -30
  38. canvas_sdk/v1/data/immunization.py +3 -13
  39. canvas_sdk/v1/data/lab.py +9 -62
  40. canvas_sdk/v1/data/line_item_transaction.py +2 -5
  41. canvas_sdk/v1/data/medication.py +2 -7
  42. canvas_sdk/v1/data/medication_history.py +5 -15
  43. canvas_sdk/v1/data/medication_statement.py +2 -11
  44. canvas_sdk/v1/data/message.py +3 -7
  45. canvas_sdk/v1/data/note.py +11 -19
  46. canvas_sdk/v1/data/observation.py +8 -35
  47. canvas_sdk/v1/data/organization.py +5 -7
  48. canvas_sdk/v1/data/patient.py +4 -11
  49. canvas_sdk/v1/data/patient_consent.py +4 -14
  50. canvas_sdk/v1/data/payment_collection.py +2 -5
  51. canvas_sdk/v1/data/posting.py +3 -9
  52. canvas_sdk/v1/data/practicelocation.py +4 -6
  53. canvas_sdk/v1/data/protocol_override.py +2 -3
  54. canvas_sdk/v1/data/protocol_result.py +3 -3
  55. canvas_sdk/v1/data/questionnaire.py +9 -25
  56. canvas_sdk/v1/data/reason_for_visit.py +2 -6
  57. canvas_sdk/v1/data/referral.py +3 -17
  58. canvas_sdk/v1/data/staff.py +33 -25
  59. canvas_sdk/v1/data/stop_medication_event.py +2 -11
  60. canvas_sdk/v1/data/task.py +3 -7
  61. canvas_sdk/v1/data/team.py +2 -4
  62. canvas_sdk/v1/data/utils.py +5 -0
  63. protobufs/canvas_generated/messages/effects.proto +4 -0
  64. protobufs/canvas_generated/messages/events.proto +2 -0
  65. {canvas-0.67.0.dist-info → canvas-0.68.0.dist-info}/WHEEL +0 -0
  66. {canvas-0.67.0.dist-info → canvas-0.68.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
+ )
@@ -7,9 +7,10 @@ from canvas_sdk.v1.data.base import (
7
7
  CommittableQuerySetMixin,
8
8
  ForPatientQuerySetMixin,
9
9
  IdentifiableModel,
10
- Model,
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(Model):
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)
@@ -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 Model
4
+ from canvas_sdk.v1.data.base import TimestampedModel
5
5
 
6
6
 
7
- class BannerAlert(Model):
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,
@@ -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
 
@@ -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 IdentifiableModel, Model, ValueSetTimeframeLookupQuerySet
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(Model):
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,
@@ -1,6 +1,7 @@
1
1
  from django.db import models
2
2
 
3
- from canvas_sdk.v1.data.base import IdentifiableModel, Model
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(Model):
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
  )
@@ -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, Model
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(Model):
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(Model):
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(Model):
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 Model
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(Model):
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__ = ()
@@ -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
- class CompoundMedication(models.Model):
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)
@@ -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(Model):
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
  )