Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Bed to consultation Update #652

Merged
merged 2 commits into from
Dec 12, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions care/facility/api/serializers/daily_round.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@
from rest_framework.exceptions import ValidationError
from rest_framework.generics import get_object_or_404

from care.facility.api.serializers.bed import BedSerializer
from care.facility.models import CATEGORY_CHOICES, PatientRegistration
from care.facility.models.bed import Bed
from care.facility.models.daily_round import DailyRound
from care.facility.models.notification import Notification
from care.facility.models.patient_base import ADMIT_CHOICES, CURRENT_HEALTH_CHOICES, SYMPTOM_CHOICES
Expand Down Expand Up @@ -52,6 +54,10 @@ class DailyRoundSerializer(serializers.ModelSerializer):
last_edited_by = UserBaseMinimumSerializer(read_only=True)
created_by = UserBaseMinimumSerializer(read_only=True)

bed_object = BedSerializer(read_only=True)

bed = serializers.UUIDField(source="bed.external_id", allow_null=True, required=False)

class Meta:
model = DailyRound
read_only_fields = (
Expand Down Expand Up @@ -172,4 +178,13 @@ def validate(self, obj):
if validated["review_time"] <= 0:
raise ValidationError({"review_time": [f"This field value is must be greater than 0."]})

if "bed" in validated:
external_id = validated.pop("bed")["external_id"]
if external_id:
# TODO add authorisation checks
bed_object = Bed.objects.filter(external_id=external_id).first()
if not bed_object:
raise ValidationError({"bed": [f"Obeject not found."]})
validated["bed_id"] = bed_object.id

return validated
7 changes: 7 additions & 0 deletions care/facility/api/viewsets/bed.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,16 @@ def get_queryset(self):
return queryset


class AssetBedFilter(filters.FilterSet):
asset = filters.UUIDFilter(field_name="asset__external_id")
bed = filters.UUIDFilter(field_name="bed__external_id")


class AssetBedViewSet(ListModelMixin, RetrieveModelMixin, CreateModelMixin, UpdateModelMixin, GenericViewSet):
queryset = AssetBed.objects.all().select_related("asset", "bed").order_by("-created_date")
serializer_class = AssetBedSerializer
filter_backends = (filters.DjangoFilterBackend,)
filterset_class = AssetBedFilter

def get_queryset(self):
user = self.request.user
Expand Down
27 changes: 27 additions & 0 deletions care/facility/migrations/0280_auto_20211210_0038.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# Generated by Django 2.2.11 on 2021-12-09 19:08

from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

dependencies = [
('facility', '0279_auto_20211122_1138'),
]

operations = [
migrations.RemoveField(
model_name='historicalpatientregistration',
name='bed',
),
migrations.RemoveField(
model_name='patientregistration',
name='bed',
),
migrations.AddField(
model_name='dailyround',
name='bed',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='facility.Bed'),
),
]
102 changes: 26 additions & 76 deletions care/facility/models/daily_round.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
from multiselectfield import MultiSelectField

from care.facility.models import CATEGORY_CHOICES, PatientBaseModel
from care.facility.models.bed import Bed
from care.facility.models.json_schema.daily_round import (
BLOOD_PRESSURE,
FEED,
Expand Down Expand Up @@ -124,6 +125,9 @@ class InsulinIntakeFrequencyType(enum.Enum):
recommend_discharge = models.BooleanField(default=False, verbose_name="Recommend Discharging Patient")
other_details = models.TextField(null=True, blank=True)
medication_given = JSONField(default=dict) # To be Used Later on

bed = models.ForeignKey(Bed, on_delete=models.PROTECT, null=True, blank=True)
# admitted_to is set to be deprecated over the next major release
admitted_to = models.IntegerField(choices=ADMIT_CHOICES, default=None, null=True, blank=True)
last_updated_by_telemedicine = models.BooleanField(default=False)
created_by_telemedicine = models.BooleanField(default=False)
Expand Down Expand Up @@ -168,24 +172,16 @@ class InsulinIntakeFrequencyType(enum.Enum):
)
right_pupil_light_reaction_detail = models.TextField(default=None, null=True, blank=True)
glasgow_eye_open = models.IntegerField(
default=None,
null=True,
validators=[MinValueValidator(1), MaxValueValidator(4)],
default=None, null=True, validators=[MinValueValidator(1), MaxValueValidator(4)],
)
glasgow_verbal_response = models.IntegerField(
default=None,
null=True,
validators=[MinValueValidator(1), MaxValueValidator(5)],
default=None, null=True, validators=[MinValueValidator(1), MaxValueValidator(5)],
)
glasgow_motor_response = models.IntegerField(
default=None,
null=True,
validators=[MinValueValidator(1), MaxValueValidator(6)],
default=None, null=True, validators=[MinValueValidator(1), MaxValueValidator(6)],
)
glasgow_total_calculated = models.IntegerField(
default=None,
null=True,
validators=[MinValueValidator(3), MaxValueValidator(15)],
default=None, null=True, validators=[MinValueValidator(3), MaxValueValidator(15)],
)
limb_response_upper_extremity_right = models.IntegerField(
choices=LimbResponseChoice, default=LimbResponseType.UNKNOWN.value
Expand All @@ -200,16 +196,8 @@ class InsulinIntakeFrequencyType(enum.Enum):
choices=LimbResponseChoice, default=LimbResponseType.UNKNOWN.value
)
bp = JSONField(default=dict, validators=[JSONFieldSchemaValidator(BLOOD_PRESSURE)])
pulse = models.IntegerField(
default=None,
null=True,
validators=[MinValueValidator(0), MaxValueValidator(200)],
)
resp = models.IntegerField(
default=None,
null=True,
validators=[MinValueValidator(10), MaxValueValidator(70)],
)
pulse = models.IntegerField(default=None, null=True, validators=[MinValueValidator(0), MaxValueValidator(200)],)
resp = models.IntegerField(default=None, null=True, validators=[MinValueValidator(10), MaxValueValidator(70)],)
rhythm = models.IntegerField(choices=RythmnChoice, default=RythmnType.UNKNOWN.value)
rhythm_detail = models.TextField(default=None, null=True, blank=True)
ventilator_interface = models.IntegerField(
Expand All @@ -225,58 +213,36 @@ class InsulinIntakeFrequencyType(enum.Enum):
validators=[MinValueValidator(0), MaxValueValidator(30)],
)
ventilator_pip = models.IntegerField(
default=None,
null=True,
validators=[MinValueValidator(0), MaxValueValidator(100)],
default=None, null=True, validators=[MinValueValidator(0), MaxValueValidator(100)],
)
ventilator_mean_airway_pressure = models.IntegerField(
default=None,
null=True,
validators=[MinValueValidator(0), MaxValueValidator(40)],
default=None, null=True, validators=[MinValueValidator(0), MaxValueValidator(40)],
)
ventilator_resp_rate = models.IntegerField(
default=None,
null=True,
validators=[MinValueValidator(0), MaxValueValidator(100)],
default=None, null=True, validators=[MinValueValidator(0), MaxValueValidator(100)],
)
ventilator_pressure_support = models.IntegerField(
default=None,
null=True,
validators=[MinValueValidator(0), MaxValueValidator(40)],
default=None, null=True, validators=[MinValueValidator(0), MaxValueValidator(40)],
)
ventilator_tidal_volume = models.IntegerField(
default=None,
null=True,
validators=[MinValueValidator(0), MaxValueValidator(1000)],
default=None, null=True, validators=[MinValueValidator(0), MaxValueValidator(1000)],
)
ventilator_oxygen_modality = models.IntegerField(
choices=VentilatorOxygenModalityChoice, default=VentilatorOxygenModalityType.UNKNOWN.value
)
ventilator_oxygen_modality_oxygen_rate = models.IntegerField(
default=None,
null=True,
validators=[MinValueValidator(0), MaxValueValidator(50)],
default=None, null=True, validators=[MinValueValidator(0), MaxValueValidator(50)],
)
ventilator_oxygen_modality_flow_rate = models.IntegerField(
default=None,
null=True,
validators=[MinValueValidator(0), MaxValueValidator(70)],
default=None, null=True, validators=[MinValueValidator(0), MaxValueValidator(70)],
)
ventilator_fi02 = models.IntegerField(
default=None,
null=True,
validators=[MinValueValidator(21), MaxValueValidator(100)],
default=None, null=True, validators=[MinValueValidator(21), MaxValueValidator(100)],
)
ventilator_spo2 = models.IntegerField(
default=None,
null=True,
validators=[MinValueValidator(0), MaxValueValidator(100)],
)
etco2 = models.IntegerField(
default=None,
null=True,
validators=[MinValueValidator(0), MaxValueValidator(200)],
default=None, null=True, validators=[MinValueValidator(0), MaxValueValidator(100)],
)
etco2 = models.IntegerField(default=None, null=True, validators=[MinValueValidator(0), MaxValueValidator(200)],)
bilateral_air_entry = models.BooleanField(default=None, null=True, blank=True)
ph = models.DecimalField(
decimal_places=2,
Expand All @@ -286,16 +252,8 @@ class InsulinIntakeFrequencyType(enum.Enum):
null=True,
validators=[MinValueValidator(0), MaxValueValidator(10)],
)
pco2 = models.IntegerField(
default=None,
null=True,
validators=[MinValueValidator(10), MaxValueValidator(200)],
)
po2 = models.IntegerField(
default=None,
null=True,
validators=[MinValueValidator(10), MaxValueValidator(400)],
)
pco2 = models.IntegerField(default=None, null=True, validators=[MinValueValidator(10), MaxValueValidator(200)],)
po2 = models.IntegerField(default=None, null=True, validators=[MinValueValidator(10), MaxValueValidator(400)],)
hco3 = models.DecimalField(
decimal_places=2,
max_digits=4,
Expand All @@ -305,9 +263,7 @@ class InsulinIntakeFrequencyType(enum.Enum):
validators=[MinValueValidator(5), MaxValueValidator(80)],
)
base_excess = models.IntegerField(
default=None,
null=True,
validators=[MinValueValidator(-20), MaxValueValidator(20)],
default=None, null=True, validators=[MinValueValidator(-20), MaxValueValidator(20)],
)
lactate = models.DecimalField(
decimal_places=2,
Expand All @@ -334,9 +290,7 @@ class InsulinIntakeFrequencyType(enum.Enum):
validators=[MinValueValidator(1), MaxValueValidator(10)],
)
blood_sugar_level = models.IntegerField(
default=None,
null=True,
validators=[MinValueValidator(0), MaxValueValidator(700)],
default=None, null=True, validators=[MinValueValidator(0), MaxValueValidator(700)],
)
insulin_intake_dose = models.DecimalField(
decimal_places=2,
Expand All @@ -356,14 +310,10 @@ class InsulinIntakeFrequencyType(enum.Enum):
output = JSONField(default=list, validators=[JSONFieldSchemaValidator(OUTPUT)])
total_output_calculated = models.DecimalField(decimal_places=2, max_digits=6, blank=True, default=None, null=True)
dialysis_fluid_balance = models.IntegerField(
default=None,
null=True,
validators=[MinValueValidator(0), MaxValueValidator(5000)],
default=None, null=True, validators=[MinValueValidator(0), MaxValueValidator(5000)],
)
dialysis_net_balance = models.IntegerField(
default=None,
null=True,
validators=[MinValueValidator(0), MaxValueValidator(5000)],
default=None, null=True, validators=[MinValueValidator(0), MaxValueValidator(5000)],
)
pressure_sore = JSONField(default=list, validators=[JSONFieldSchemaValidator(PRESSURE_SORE)])
nursing = JSONField(default=list, validators=[JSONFieldSchemaValidator(NURSING_PROCEDURE)])
Expand Down
5 changes: 0 additions & 5 deletions care/facility/models/patient.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@
Ward,
pretty_boolean,
)
from care.facility.models.bed import Bed
from care.facility.models.mixins.permissions.facility import FacilityRelatedPermissionMixin
from care.facility.models.mixins.permissions.patient import PatientPermissionMixin
from care.facility.models.patient_base import (
Expand Down Expand Up @@ -255,10 +254,6 @@ class TestTypeEnum(enum.Enum):
null=True, blank=True, verbose_name="Date Patient is Declared Positive"
)

# Organization Attributes

bed = models.ForeignKey(Bed, on_delete=models.PROTECT, null=True, blank=True)

# Permission Scopes

assigned_to = models.ForeignKey(
Expand Down