cna_charting/charts/models.py
2022-05-03 19:07:12 -06:00

334 lines
8.3 KiB
Python

from django.db import models
from django.urls import reverse
INDEPENDENT = 'IN'
ASSISTED = 'AS'
TOTALLY_DEPENDENT = 'DE'
ASSISTANCE_CHOICES = [
(INDEPENDENT, 'Independent'),
(ASSISTED, 'Assisted'),
(TOTALLY_DEPENDENT, 'Totally dependent'),
]
class Chart(models.Model):
class Meta:
ordering = ('-created_at',)
patient = models.CharField(max_length=250)
assignment = models.CharField(max_length=250)
student_name = models.CharField(max_length=250)
student_id = models.CharField(max_length=250)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def get_absolute_url(self):
return reverse('chart-detail', kwargs={'pk': self.pk})
def __str__(self):
return f"Chart {self.pk}, for {self.patient}"
class Entry(models.Model):
class Meta:
ordering = ('time',)
verbose_name_plural = 'entries'
time = models.TimeField()
chart = models.ForeignKey(Chart, on_delete=models.CASCADE)
notes = models.TextField(blank=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def get_absolute_url(self):
return reverse('chart-detail', kwargs={'pk': self.chart_id})
def __str__(self):
return f"{self.time}"
class OralCare(Entry):
class Meta:
verbose_name_plural = 'oral care'
assistance = models.CharField(
max_length=2,
choices=ASSISTANCE_CHOICES,
default=INDEPENDENT,
blank=True
)
dentures_upper = models.BooleanField(default=False)
dentures_lower = models.BooleanField(default=False)
class Bathing(Entry):
class Meta:
verbose_name_plural = 'bathing'
METHOD_CHOICES = [
('SH', 'Shower'),
('TU', 'Tub'),
('PA', 'Partial'),
('BB', 'Bed bath'),
('SP', 'Specialty'),
]
method = models.CharField(
max_length=2,
choices=METHOD_CHOICES,
blank=True
)
method_other = models.CharField(max_length=250, blank=True)
assistance = models.CharField(
max_length=2,
choices=ASSISTANCE_CHOICES,
default=INDEPENDENT,
blank=True
)
class Toileting(Entry):
assistance = models.CharField(
max_length=2,
choices=ASSISTANCE_CHOICES,
default=INDEPENDENT,
blank=True
)
TOILETING_METHOD_CHOICES = [
('CO', 'Commode'),
('BP', 'Bed pan'),
('CA', 'Catheter'),
]
method = models.CharField(
max_length=2,
choices=TOILETING_METHOD_CHOICES,
blank=True
)
brief_change = models.BooleanField(default=False)
perineal_care = models.BooleanField(default=False)
catheter_care = models.BooleanField(default=False)
class Dressing(Entry):
DRESSING_TIME_CHOICES = [
('AM', 'Morning'),
('PM', 'Evening'),
]
time_of_day = models.CharField(
max_length=2,
choices=DRESSING_TIME_CHOICES,
blank=True
)
assistance = models.CharField(
max_length=2,
choices=ASSISTANCE_CHOICES,
default=INDEPENDENT,
blank=True
)
class Meal(Entry):
KIND_CHOICES = [
('BR', 'Breakfast'),
('LU', 'Lunch'),
('DI', 'Dinner'),
('SN', 'Snack'),
]
kind = models.CharField(
max_length=2,
choices=KIND_CHOICES,
blank=True
)
amount_consumed = models.FloatField(blank=True, null=True)
class RangeOfMotion(Entry):
MOTION_KIND_CHOICES = [
('PA', 'Passive'),
('AC', 'Active'),
('CO', 'Combination'),
]
motion_kind = models.CharField(
max_length=2,
choices=MOTION_KIND_CHOICES,
blank=True
)
antiembolic_stockings = models.BooleanField(default=False)
turn_or_position_change = models.BooleanField(default=False)
class Ambulation(Entry):
METHOD_CHOICES = [
('CH', 'Chair'),
('RO', 'Up in room'),
('HA', 'Ambulate in hall'),
('PT', 'To PT'),
]
method = models.CharField(
max_length=2,
choices=METHOD_CHOICES,
blank=True
)
ASSISTANCE_CHOICES = [
('IN', 'Independent'),
('ON', 'One assist with gait belt'),
('TW', 'Two assist'),
('LI', 'Lift'),
]
assistance = models.CharField(
max_length=2,
choices=ASSISTANCE_CHOICES,
blank=True
)
DEVICES_USED_CHOICES = [
('WA', 'Walker'),
('CR', 'Crutches'),
('WH', 'Wheelchair'),
]
devices_used = models.CharField(
max_length=2,
choices=DEVICES_USED_CHOICES,
blank=True
)
class Vitals(Entry):
o2_saturation = models.PositiveIntegerField(blank=True, null=True)
temperature = models.FloatField(blank=True, null=True)
TEMPERATURE_UNITS_CHOICES = [
('CE', 'C'),
('FA', 'F'),
]
temperature_units = models.CharField(
max_length=2,
choices=TEMPERATURE_UNITS_CHOICES,
default='FA',
blank=True,
null=True
)
pulse = models.IntegerField(blank=True, null=True)
respirations = models.IntegerField(blank=True, null=True)
blood_pressure_systolic = models.IntegerField(blank=True, null=True)
blood_pressure_diastolic = models.IntegerField(blank=True, null=True)
weight = models.FloatField(blank=True, null=True)
WEIGHT_UNITS_CHOICES = [
('LB', 'LBS'),
('KG', 'KG'),
]
weight_units = models.CharField(
max_length=2,
choices=WEIGHT_UNITS_CHOICES,
default='LB',
blank=True,
null=True
)
class FluidIntake(Entry):
fluid_type = models.CharField(max_length=100)
intake_amount = models.PositiveIntegerField()
npo = models.BooleanField(default=False)
class Urine(Entry):
URINE_COLOR_CHOICES = [
('YE', 'Yellow'),
('DA', 'Dark yellow'),
('BR', 'Brown'),
]
assistance = models.CharField(
max_length=2,
choices=ASSISTANCE_CHOICES,
default=INDEPENDENT,
blank=True
)
color = models.CharField(
max_length=2,
choices=URINE_COLOR_CHOICES,
blank=True
)
amount = models.PositiveIntegerField()
class Emesis(Entry):
amount = models.PositiveIntegerField()
color = models.CharField(max_length=100, blank=True)
class BowelMovement(Entry):
assistance = models.CharField(
max_length=2,
choices=ASSISTANCE_CHOICES,
default=INDEPENDENT,
blank=True
)
AMOUNT_CHOICES = [
('SM', 'Small'),
('MD', 'Moderate'),
('LG', 'Large'),
]
amount = models.CharField(
max_length=2,
choices=AMOUNT_CHOICES,
blank=True
)
color = models.CharField(max_length=100, blank=True)
CONSISTENCY_CHOICES = [
('SO', 'Soft'),
('HD', 'Hard'),
('LQ', 'Liquid'),
('FM', 'Formed'),
('SF', 'Soft and formed'),
]
consistency = models.CharField(
max_length=2,
choices=CONSISTENCY_CHOICES,
blank=True
)
class PainLevel(Entry):
score = models.PositiveIntegerField(blank=True, null=True)
reported_to_nurse = models.BooleanField(default=False)
class OxygenLevel(Entry):
oxygen_level = models.FloatField(blank=True, null=True)
DELIVERY_METHOD_CHOICES = [
('NA', 'Per nasal cannula'),
('MA', 'Per mask'),
('RE', 'Refused to wear'),
]
delivery_method = models.CharField(
max_length=2,
choices=DELIVERY_METHOD_CHOICES,
blank=True
)
class Restraint(Entry):
RESTRAINTS_USED_CHOICES = [
('TW', 'Side rails x2'),
('FO', 'Side rails x4'),
('NO', 'None'),
]
restraints_used = models.CharField(
max_length=2,
choices=RESTRAINTS_USED_CHOICES,
blank=True
)
restraints_soft = models.BooleanField(default=False)
class Safety(Entry):
call_light_in_reach = models.BooleanField(default=False)
bed_low = models.BooleanField(default=False)
brakes_on = models.BooleanField(default=False)
falls = models.CharField(max_length=999, blank=True)
nausea = models.CharField(max_length=999, blank=True)
vomiting = models.CharField(max_length=999, blank=True)
confusion = models.CharField(max_length=999, blank=True)
combative = models.CharField(max_length=999, blank=True)