ba-thesis/app/medwings/models.py

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)