diff --git a/app/medwings/models.py b/app/medwings/models.py index e7df6f9..b80c013 100644 --- a/app/medwings/models.py +++ b/app/medwings/models.py @@ -65,4 +65,57 @@ class MewsRecord(models.Model): 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) + spo2_level_record = models.ForeignKey(Spo2LevelRecord, on_delete=models.CASCADE) + respiration_score_record = models.ForeignKey(RespirationScoreRecord, on_delete=models.CASCADE) + + + @staticmethod + def calculate_mews_value( + blood_pressure_systolic_value_mmhg: int, + body_temp_value_celsius: float, + heart_rate_value_bpm: int, + spo2_level_value_percent: int, + respiration_score_value_severity: int, + ): + mews_value = 0 + + if blood_pressure_systolic_value_mmhg <= 70: + mews_value += 3 + elif blood_pressure_systolic_value_mmhg <= 80: + mews_value += 2 + elif blood_pressure_systolic_value_mmhg <= 100: + mews_value += 1 + elif blood_pressure_systolic_value_mmhg < 200: + mews_value += 0 + else: + mews_value += 2 + + if heart_rate_value_bpm < 40: + mews_value += 2 + elif heart_rate_value_bpm <= 50: + mews_value += 1 + elif heart_rate_value_bpm <= 100: + mews_value += 0 + elif heart_rate_value_bpm <= 110: + mews_value += 1 + elif heart_rate_value_bpm < 130: + mews_value += 2 + else: + mews_value += 3 + + if respiration_score_value_severity == 1: + mews_value += 1 + elif respiration_score_value_severity == 2: + mews_value += 2 + + if spo2_level_value_percent < 90: + mews_value += 2 + elif spo2_level_value_percent < 95: + mews_value += 1 + + if body_temp_value_celsius < 35: + mews_value += 2 + elif body_temp_value_celsius <= 38.4: + mews_value += 0 + else: + mews_value += 2 diff --git a/app/medwings/urls.py b/app/medwings/urls.py index fa7d7c4..bdea7cd 100644 --- a/app/medwings/urls.py +++ b/app/medwings/urls.py @@ -5,4 +5,5 @@ from . import views urlpatterns = [ path("", views.index, name="home"), path("dashboard/", views.dashboard, name="dashboard"), + path("mews/status/", views.mews_status, name="mews-status"), ] diff --git a/app/medwings/views.py b/app/medwings/views.py index 0b0aa29..f945250 100644 --- a/app/medwings/views.py +++ b/app/medwings/views.py @@ -1,8 +1,67 @@ +from datetime import timedelta + from django.shortcuts import render +from django.http import HttpResponse, JsonResponse +from django.contrib.auth.decorators import login_required +from django.views.decorators.http import require_http_methods +from django.utils import timezone + +from . import models +@require_http_methods(["GET"]) def index(request): return render(request, 'medwings/index.html') + +@require_http_methods(["GET"]) def dashboard(request): return render(request, 'medwings/dashboard.html') + +@require_http_methods(["GET"]) +def mews_status(request): + if not request.user.is_authenticated: + return HttpResponse('Unauthorized', status=401) + + request.user.apiaccount.update_records() + + ten_minutes_ago = timezone.now() - timedelta(minutes=10) + blood_pressure_record = models.BloodPressureRecord.objects.filter(user=request.user).filter(recorded__gte=ten_minutes_ago).order_by('-recorded').first() + body_temp_record = models.BodyTempRecord.objects.filter(user=request.user).filter(recorded__gte=ten_minutes_ago).order_by('-recorded').first() + heart_rate_record = models.HeartRateRecord.objects.filter(user=request.user).filter(recorded__gte=ten_minutes_ago).order_by('-recorded').first() + spo2_level_record = models.Spo2LevelRecord.objects.filter(user=request.user).filter(recorded__gte=ten_minutes_ago).order_by('-recorded').first() + respiration_score_record = models.RespirationScoreRecord.objects.filter(user=request.user).filter(recorded__gte=ten_minutes_ago).order_by('-recorded').first() + + data = { + 'blood_pressure_value': blood_pressure_record.value_systolic_mmhg if blood_pressure_record else None, + 'body_temp_value': body_temp_record.value_celsius if body_temp_record else None, + 'heart_rate_value': heart_rate_record.value_bpm if heart_rate_record else None, + 'spo2_level_value': spo2_level_record.value_percent if spo2_level_record else None, + 'respiration_score_value': respiration_score_record.value_severity if respiration_score_record else None, + 'mews_value': None, + } + + if (blood_pressure_record + and body_temp_record + and heart_rate_record + and spo2_level_record + and respiration_score_record + ): + mews_record = models.MewsRecord( + user=request.user, recorded=timezone.now(), + value_n=models.MewsRecord.calculate_mews_value( + blood_pressure_record.value_systolic_mmhg, + body_temp_record.value_celsius, + heart_rate_record.value_bpm, + spo2_level_record.value_percent, + respiration_score_record.value_severity + ), + blood_pressure_record=blood_pressure_record, + body_temp_record=body_temp_record, + heart_rate_record=heart_rate_record, + respiration_score_record=respiration_score_record, + ) + mews_record.save() + data['mews_value'] = mews_record.value_n + + return JsonResponse(data)