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)