Skip to content

Commit

Permalink
Store review_interval and use it to compute next review_time (#1042)
Browse files Browse the repository at this point in the history
* Add review_interval to store the minutes for next review

* add migrations
  • Loading branch information
Ashesh3 authored Oct 12, 2022
1 parent 0beaa72 commit d49d446
Show file tree
Hide file tree
Showing 4 changed files with 65 additions and 31 deletions.
36 changes: 21 additions & 15 deletions care/facility/api/serializers/daily_round.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ class DailyRoundSerializer(serializers.ModelSerializer):
action = ChoiceField(
choices=PatientRegistration.ActionChoices, write_only=True, required=False
)
review_time = serializers.IntegerField(default=-1, write_only=True, required=False)
review_interval = serializers.IntegerField(default=-1, required=False)

taken_at = serializers.DateTimeField(required=True)

Expand Down Expand Up @@ -111,18 +111,19 @@ def update(self, instance, validated_data):
{"consultation": ["Discharged Consultation data cannot be updated"]}
)

if "action" in validated_data or "review_time" in validated_data:
if "action" in validated_data or "review_interval" in validated_data:
patient = instance.consultation.patient

if "action" in validated_data:
action = validated_data.pop("action")
patient.action = action

if "review_time" in validated_data:
review_time = validated_data.pop("review_time")
if review_time >= 0:
if "review_interval" in validated_data:
review_interval = validated_data.pop("review_interval")
if review_interval >= 0:
instance.consultation.review_interval = review_interval
patient.review_time = localtime(now()) + timedelta(
minutes=review_time
minutes=review_interval
)
patient.save()

Expand Down Expand Up @@ -199,18 +200,19 @@ def create(self, validated_data):
self.update_last_daily_round(cloned_daily_round_obj)
return self.update(cloned_daily_round_obj, validated_data)

if "action" in validated_data or "review_time" in validated_data:
if "action" in validated_data or "review_interval" in validated_data:
patient = validated_data["consultation"].patient

if "action" in validated_data:
action = validated_data.pop("action")
patient.action = action

if "review_time" in validated_data:
review_time = validated_data.pop("review_time")
if review_time >= 0:
if "review_interval" in validated_data:
review_interval = validated_data.pop("review_interval")
if review_interval >= 0:
validated_data["consultation"].review_interval = review_interval
patient.review_time = localtime(now()) + timedelta(
minutes=review_time
minutes=review_interval
)
patient.save()

Expand Down Expand Up @@ -253,17 +255,21 @@ def validate(self, obj):

if "action" in validated:
if validated["action"] == PatientRegistration.ActionEnum.REVIEW:
if "review_time" not in validated:
if "review_interval" not in validated:
raise ValidationError(
{
"review_time": [
"review_interval": [
"This field is required as the patient has been requested Review."
]
}
)
if validated["review_time"] <= 0:
if validated["review_interval"] <= 0:
raise ValidationError(
{"review_time": ["This field value is must be greater than 0."]}
{
"review_interval": [
"This field value is must be greater than 0."
]
}
)

if "bed" in validated:
Expand Down
41 changes: 25 additions & 16 deletions care/facility/api/serializers/patient_consultation.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ class PatientConsultationSerializer(serializers.ModelSerializer):
choices=PatientRegistration.ActionChoices, write_only=True, required=False
)

review_time = serializers.IntegerField(default=-1, write_only=True, required=False)
review_interval = serializers.IntegerField(default=-1, required=False)

last_edited_by = UserBaseMinimumSerializer(read_only=True)
created_by = UserBaseMinimumSerializer(read_only=True)
Expand Down Expand Up @@ -104,7 +104,9 @@ def get_icd11_diagnoses_object(self, consultation):
return self.get_icd11_diagnoses_objects_by_ids(consultation.icd11_diagnoses)

def get_icd11_provisional_diagnoses_object(self, consultation):
return self.get_icd11_diagnoses_objects_by_ids(consultation.icd11_provisional_diagnoses)
return self.get_icd11_diagnoses_objects_by_ids(
consultation.icd11_provisional_diagnoses
)

class Meta:
model = PatientConsultation
Expand Down Expand Up @@ -138,18 +140,20 @@ def update(self, instance, validated_data):
instance.discharge_date = localtime(now())
instance.save()

if "action" in validated_data or "review_time" in validated_data:
if "action" in validated_data or "review_interval" in validated_data:
patient = instance.patient

if "action" in validated_data:
action = validated_data.pop("action")
patient.action = action

if "review_time" in validated_data:
review_time = validated_data.pop("review_time")
if review_time >= 0:
if "review_interval" in validated_data:
review_interval = validated_data.pop("review_interval")
if review_interval >= 0:
instance.review_interval = review_interval
instance.save()
patient.review_time = localtime(now()) + timedelta(
minutes=review_time
minutes=review_interval
)
patient.save()

Expand Down Expand Up @@ -190,11 +194,11 @@ def update(self, instance, validated_data):
def create(self, validated_data):

action = -1
review_time = -1
review_interval = -1
if "action" in validated_data:
action = validated_data.pop("action")
if "review_time" in validated_data:
review_time = validated_data.pop("review_time")
if "review_interval" in validated_data:
review_interval = validated_data.pop("review_interval")

# Authorisation Check

Expand Down Expand Up @@ -259,8 +263,9 @@ def create(self, validated_data):

if action != -1:
patient.action = action
if review_time > 0:
patient.review_time = localtime(now()) + timedelta(minutes=review_time)
if review_interval > 0:
consultation.review_interval = review_interval
patient.review_time = localtime(now()) + timedelta(minutes=review_interval)

patient.save()
NotificationGenerator(
Expand Down Expand Up @@ -314,17 +319,21 @@ def validate(self, attrs):

if "action" in validated:
if validated["action"] == PatientRegistration.ActionEnum.REVIEW:
if "review_time" not in validated:
if "review_interval" not in validated:
raise ValidationError(
{
"review_time": [
"review_interval": [
"This field is required as the patient has been requested Review."
]
}
)
if validated["review_time"] <= 0:
if validated["review_interval"] <= 0:
raise ValidationError(
{"review_time": ["This field value is must be greater than 0."]}
{
"review_interval": [
"This field value is must be greater than 0."
]
}
)
from care.facility.static_data.icd11 import ICDDiseases

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 2.2.11 on 2022-09-29 11:16

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('facility', '0321_merge_20220921_2255'),
]

operations = [
migrations.AddField(
model_name='patientconsultation',
name='review_interval',
field=models.IntegerField(default=-1),
),
]
1 change: 1 addition & 0 deletions care/facility/models/patient_consultation.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ class PatientConsultation(PatientBaseModel, PatientRelatedPermissionMixin):
prescriptions = JSONField(default=dict) # Deprecated
procedure = JSONField(default=dict)
suggestion = models.CharField(max_length=4, choices=SUGGESTION_CHOICES)
review_interval = models.IntegerField(default=-1)
referred_to = models.ForeignKey(
"Facility",
null=True,
Expand Down

0 comments on commit d49d446

Please sign in to comment.