69 lines
3.7 KiB
Python
69 lines
3.7 KiB
Python
from django.db import models
|
|
from django.contrib.auth.models import User
|
|
|
|
from . import validators
|
|
|
|
|
|
class Profile(models.Model):
|
|
SEX_FEMALE = "F"
|
|
SEX_MALE = "M"
|
|
SEX_CHOICES = [
|
|
(SEX_FEMALE, "Female"),
|
|
(SEX_MALE, "Male")
|
|
]
|
|
|
|
user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
|
|
date_of_birth = models.DateField(validators=[validators.PersonValidator.date_of_birth], verbose_name="Date of birth")
|
|
sex = models.CharField(max_length=1, choices=SEX_CHOICES, verbose_name="Sex assigned at birth")
|
|
|
|
|
|
class BloodPressureRecord(models.Model):
|
|
user = models.ForeignKey(User, on_delete=models.CASCADE)
|
|
recorded = models.DateTimeField(validators=[validators.BloodPressureRecordValidator.recorded], verbose_name="Time at which measurement was taken")
|
|
value_systolic_mmhg = models.PositiveIntegerField(validators=[validators.BloodPressureRecordValidator.value_systolic_mmhg], verbose_name="Systolic Blood Pressure (mmhg)")
|
|
value_diastolic_mmhg = models.PositiveIntegerField(validators=[validators.BloodPressureRecordValidator.value_diastolic_mmhg], verbose_name="Diastolic Blood Pressure (mmhg)")
|
|
|
|
|
|
class BodyTempRecord(models.Model):
|
|
user = models.ForeignKey(User, on_delete=models.CASCADE)
|
|
recorded = models.DateTimeField(validators=[validators.BodyTempRecordValidator.recorded], verbose_name="Time at which measurement was taken")
|
|
value_celsius = models.PositiveIntegerField(validators=[validators.BodyTempRecordValidator.value_celsius], verbose_name="Body Temperature (\u00B0C)")
|
|
|
|
|
|
class HeartRateRecord(models.Model):
|
|
user = models.ForeignKey(User, on_delete=models.CASCADE)
|
|
recorded = models.DateTimeField(validators=[validators.HeartRateRecordValidator.recorded], verbose_name="Time at which measurement was taken")
|
|
value_bpm = models.PositiveIntegerField(validators=[validators.HeartRateRecordValidator.value_bpm], verbose_name="Heart Rate (bpm)")
|
|
|
|
|
|
class RespirationScoreRecord(models.Model):
|
|
SEVERITY_NONE = 0
|
|
SEVERITY_LOW = 1
|
|
SEVERITY_HIGH = 2
|
|
SEVERITY_CHOICES = [
|
|
(SEVERITY_NONE, "No shortness of breath"),
|
|
(SEVERITY_LOW, "A little shortness of breath"),
|
|
(SEVERITY_HIGH, "Severe shortness of breath"),
|
|
]
|
|
|
|
user = models.ForeignKey(User, on_delete=models.CASCADE)
|
|
recorded = models.DateTimeField(validators=[validators.RespirationScoreRecordValidator.recorded], verbose_name="Time at which measurement was taken")
|
|
value_severity = models.PositiveIntegerField(choices=SEVERITY_CHOICES, validators=[validators.RespirationScoreRecordValidator.value_severity], verbose_name="Shortness Of Breath Severity")
|
|
|
|
|
|
class Spo2LevelRecord(models.Model):
|
|
user = models.ForeignKey(User, on_delete=models.CASCADE)
|
|
recorded = models.DateTimeField(validators=[validators.Spo2LevelRecordValidator.recorded], verbose_name="Time at which measurement was taken")
|
|
value_percent = models.PositiveIntegerField(validators=[validators.Spo2LevelRecordValidator.value_percent], verbose_name="SPO2 (\u0025)")
|
|
|
|
|
|
class MewsRecord(models.Model):
|
|
user = models.ForeignKey(User, on_delete=models.CASCADE)
|
|
recorded = models.DateTimeField(validators=[validators.MewsRecordValidator.recorded], verbose_name="Time at which measurement was calculated")
|
|
value_n = models.PositiveIntegerField(validators=[validators.MewsRecordValidator.value_n], verbose_name="Modified Early Warning Score")
|
|
|
|
blood_pressure_record = models.ForeignKey(BloodPressureRecord, on_delete=models.CASCADE)
|
|
body_temp_record = models.ForeignKey(BodyTempRecord, on_delete=models.CASCADE)
|
|
heart_rate_record = models.ForeignKey(HeartRateRecord, on_delete=models.CASCADE)
|
|
respiration_score_record = models.ForeignKey(Spo2LevelRecord, on_delete=models.CASCADE)
|