def FacilityCapacitySummary(): capacity_objects = FacilityCapacity.objects.all().select_related( "facility", "facility__state", "facility__district", "facility__local_body") capacity_summary = {} current_date = localtime(now()).replace(hour=0, minute=0, second=0, microsecond=0) for capacity_object in capacity_objects: facility_id = capacity_object.facility.id if facility_id not in capacity_summary: capacity_summary[facility_id] = FacilitySerializer( capacity_object.facility).data capacity_summary[facility_id]["availability"] = [] capacity_summary[facility_id]["availability"].append( FacilityCapacitySerializer(capacity_object).data) for i in list(capacity_summary.keys()): facility_summary_obj = None if FacilityRelatedSummary.objects.filter( s_type="FacilityCapacity", facility_id=i, created_date__gte=current_date).exists(): facility_summary_obj = FacilityRelatedSummary.objects.get( s_type="FacilityCapacity", facility_id=i, created_date__gte=current_date) else: facility_summary_obj = FacilityRelatedSummary( s_type="FacilityCapacity", facility_id=i) facility_summary_obj.data = capacity_summary[i] facility_summary_obj.save() return True
def FacilityCapacitySummary(): capacity_objects = FacilityCapacity.objects.all().select_related( "facility", "facility__state", "facility__district", "facility__local_body") capacity_summary = {} current_date = localtime(now()).replace(hour=0, minute=0, second=0, microsecond=0) for facility_obj in Facility.objects.all(): # Calculate Actual Patients Discharged and Live in this Facility patients_in_facility = PatientRegistration.objects.filter( facility_id=facility_obj.id).select_related( "state", "district", "local_body") capacity_summary[facility_obj.id] = FacilitySerializer( facility_obj).data capacity_summary[facility_obj.id][ "actual_live_patients"] = patients_in_facility.filter( is_active=True).count() discharge_patients = patients_in_facility.filter(is_active=False) capacity_summary[facility_obj.id][ "actual_discharged_patients"] = discharge_patients.count() capacity_summary[facility_obj.id]["availability"] = [] for capacity_object in capacity_objects: facility_id = capacity_object.facility.id if facility_id not in capacity_summary: capacity_summary[facility_id] = FacilitySerializer( capacity_object.facility).data if "availability" not in capacity_summary[facility_id]: capacity_summary[facility_id]["availability"] = [] capacity_summary[facility_id]["availability"].append( FacilityCapacitySerializer(capacity_object).data) for i in capacity_summary: facility_summary_obj = None if FacilityRelatedSummary.objects.filter( s_type="FacilityCapacity", facility_id=i, created_date__gte=current_date).exists(): facility_summary_obj = FacilityRelatedSummary.objects.get( s_type="FacilityCapacity", facility_id=i, created_date__gte=current_date) else: facility_summary_obj = FacilityRelatedSummary( s_type="FacilityCapacity", facility_id=i) facility_summary_obj.data = capacity_summary[i] facility_summary_obj.save() return True
def PatientSummary(): facility_objects = Facility.objects.all() patient_summary = {} for facility_object in facility_objects: facility_id = facility_object.id if facility_id not in patient_summary: latest_patient_consultations = ( PatientConsultation.objects.filter(facility=facility_id).distinct("patient").values("pk") ) facility_patients = PatientConsultation.objects.filter(pk__in=Subquery(latest_patient_consultations)) icu = Q(patient__is_active=True) & Q(admitted_to=2) ventilator = Q(patient__is_active=True) & Q(admitted_to=3) isolation = Q(patient__is_active=True) & Q(admitted_to=1) home_quarantine = Q(patient__is_active=True) & Q(suggestion="HI") total_patients_icu = facility_patients.filter(icu).count() total_patients_ventilator = facility_patients.filter(ventilator).count() total_patients_isolation = facility_patients.filter(isolation).count() total_patients_home_quarantine = facility_patients.filter(home_quarantine).count() facility_patients_today = facility_patients.filter(created_date__startswith=now().date()) today_patients_icu = facility_patients_today.filter(icu).count() today_patients_isolation = facility_patients_today.filter(isolation).count() today_patients_ventilator = facility_patients_today.filter(ventilator).count() today_patients_home_quarantine = facility_patients_today.filter(home_quarantine).count() patient_summary[facility_id] = { "facility_name": facility_object.name, "district": facility_object.district.name, "total_patients_icu": total_patients_icu, "total_patients_ventilator": total_patients_ventilator, "total_patients_isolation": total_patients_isolation, "total_patients_home_quarantine": total_patients_home_quarantine, "today_patients_icu": today_patients_icu, "today_patients_ventilator": today_patients_ventilator, "today_patients_isolation": today_patients_isolation, "today_patients_home_quarantine": today_patients_home_quarantine, } for i in list(patient_summary.keys()): object_filter = Q(s_type="PatientSummary") & Q(created_date__startswith=now().date()) if FacilityRelatedSummary.objects.filter(facility_id=i).filter(object_filter).exists(): facility = FacilityRelatedSummary.objects.filter(object_filter).get(facility_id=i) facility.created_date = now() facility.data.pop("modified_date") if facility.data == patient_summary[i]: pass else: facility.data = patient_summary[i] latest_modification_date = now() facility.data.update({"modified_date": latest_modification_date.strftime("%d-%m-%Y %H:%M")}) facility.save() else: modified_date = now() patient_summary[i].update({"modified_date": modified_date.strftime("%d-%m-%Y %H:%M")}) FacilityRelatedSummary(s_type="PatientSummary", facility_id=i, data=patient_summary[i]).save() return True
def FacilityCapacitySummary(): capacity_objects = FacilityCapacity.objects.all().select_related( "facility", "facility__state", "facility__district", "facility__local_body") capacity_summary = {} for capacity_object in capacity_objects: facility_id = capacity_object.facility.id if facility_id not in capacity_summary: capacity_summary[facility_id] = FacilitySerializer( capacity_object.facility).data capacity_summary[facility_id]["availability"] = [] capacity_summary[facility_id]["availability"].append( FacilityCapacitySerializer(capacity_object).data) for i in list(capacity_summary.keys()): FacilityRelatedSummary(s_type="FacilityCapacity", facility_id=i, data=capacity_summary[i]).save() return True
def TriageSummary(): facilities = Facility.objects.all() current_date = localtime(now()).replace(hour=0, minute=0, second=0, microsecond=0) for facility in facilities: facility_patient_data = FacilityPatientStatsHistory.objects.filter( facility=facility).aggregate( total_patients_visited=Sum("num_patients_visited"), total_patients_home_quarantine=Sum( "num_patients_home_quarantine"), total_patients_isolation=Sum("num_patients_isolation"), total_patients_referred=Sum("num_patient_referred"), total_patients_confirmed_positive=Sum( "num_patient_confirmed_positive"), total_count=Count("id"), ) total_count = facility_patient_data.get("total_count", 0) total_patients_home_quarantine = facility_patient_data.get( "total_patients_home_quarantine", 0) total_patients_referred = facility_patient_data.get( "total_patients_referred", 0) total_patients_isolation = facility_patient_data.get( "total_patients_visited", 0) total_patients_visited = facility_patient_data.get( "total_patients_isolation", 0) total_patients_confirmed_positive = facility_patient_data.get( "num_patient_confirmed_positive", 0) if total_count: avg_patients_home_quarantine = int(total_patients_home_quarantine / total_count) avg_patients_referred = int(total_patients_referred / total_count) avg_patients_isolation = int(total_patients_isolation / total_count) avg_patients_visited = int(total_patients_visited / total_count) avg_patients_confirmed_positive = int( total_patients_confirmed_positive / total_count) else: avg_patients_home_quarantine = 0 avg_patients_referred = 0 avg_patients_isolation = 0 avg_patients_visited = 0 avg_patients_confirmed_positive = 0 facility_triage_summarised_data = { "facility_name": facility.name, "district": facility.district.name, "total_patients_home_quarantine": total_patients_home_quarantine, "total_patients_referred": total_patients_referred, "total_patients_isolation": total_patients_isolation, "total_patients_visited": total_patients_visited, "total_patients_confirmed_positive": total_patients_confirmed_positive, "avg_patients_home_quarantine": avg_patients_home_quarantine, "avg_patients_referred": avg_patients_referred, "avg_patients_isolation": avg_patients_isolation, "avg_patients_visited": avg_patients_visited, "avg_patients_confirmed_positive": avg_patients_confirmed_positive, } facility_triage_summary = FacilityRelatedSummary.objects.filter( s_type="TriageSummary", facility=facility, created_date__gte=current_date).first() if facility_triage_summary: facility_triage_summary.data = facility_triage_summarised_data else: facility_triage_summary = FacilityRelatedSummary( s_type="TriageSummary", facility=facility, data=facility_triage_summarised_data) facility_triage_summary.save()
def FacilityCapacitySummary(): capacity_objects = FacilityCapacity.objects.all().select_related( "facility", "facility__state", "facility__district", "facility__local_body") capacity_summary = {} current_date = localtime(now()).replace(hour=0, minute=0, second=0, microsecond=0) for facility_obj in Facility.objects.all(): # Calculate Actual Patients Discharged and Live in this Facility patients_in_facility = PatientRegistration.objects.filter( facility_id=facility_obj.id).select_related( "state", "district", "local_body") capacity_summary[facility_obj.id] = FacilitySerializer( facility_obj).data capacity_summary[facility_obj.id][ "actual_live_patients"] = patients_in_facility.filter( is_active=True).count() discharge_patients = patients_in_facility.filter(is_active=False) capacity_summary[facility_obj.id][ "actual_discharged_patients"] = discharge_patients.count() capacity_summary[facility_obj.id]["availability"] = [] temp_inventory_summary_obj = {} summary_objs = FacilityInventorySummary.objects.filter( facility_id=facility_obj.id) for summary_obj in summary_objs: burn_rate = FacilityInventoryBurnRate.objects.filter( facility_id=facility_obj.id, item_id=summary_obj.item.id).first() log_query = FacilityInventoryLog.objects.filter( facility_id=facility_obj.id, item_id=summary_obj.item.id, created_date__gte=current_date) start_log = log_query.order_by("created_date").first() end_log = log_query.order_by("-created_date").first() start_stock = summary_obj.quantity if start_log: start_stock = start_log.current_stock - start_log.quantity_in_default_unit end_stock = start_stock if end_log: end_stock = end_log.current_stock total_consumed = 0 temp1 = log_query.filter(is_incoming=False).aggregate( Sum("quantity_in_default_unit")) if temp1: total_consumed = temp1["quantity_in_default_unit__sum"] total_added = 0 temp2 = log_query.filter(is_incoming=True).aggregate( Sum("quantity_in_default_unit")) if temp2: total_added = temp2["quantity_in_default_unit__sum"] if burn_rate: burn_rate = burn_rate.burn_rate temp_inventory_summary_obj[summary_obj.item.id] = { "item_name": summary_obj.item.name, "stock": summary_obj.quantity, "unit": summary_obj.item.default_unit.name, "is_low": summary_obj.is_low, "burn_rate": burn_rate, "start_stock": start_stock, "end_stock": end_stock, "total_consumed": total_consumed, "total_added": total_added, "modified_date": summary_obj.modified_date.astimezone().isoformat(), } capacity_summary[ facility_obj.id]["inventory"] = temp_inventory_summary_obj for capacity_object in capacity_objects: facility_id = capacity_object.facility.id if facility_id not in capacity_summary: capacity_summary[facility_id] = FacilitySerializer( capacity_object.facility).data if "availability" not in capacity_summary[facility_id]: capacity_summary[facility_id]["availability"] = [] capacity_summary[facility_id]["availability"].append( FacilityCapacitySerializer(capacity_object).data) for i in capacity_summary: facility_summary_obj = None if FacilityRelatedSummary.objects.filter( s_type="FacilityCapacity", facility_id=i, created_date__gte=current_date).exists(): facility_summary_obj = FacilityRelatedSummary.objects.get( s_type="FacilityCapacity", facility_id=i, created_date__gte=current_date) else: facility_summary_obj = FacilityRelatedSummary( s_type="FacilityCapacity", facility_id=i) facility_summary_obj.data = capacity_summary[i] facility_summary_obj.save() return True
def PatientSummary(): facility_objects = Facility.objects.all() patient_summary = {} for facility_object in facility_objects: facility_id = facility_object.id if facility_id not in patient_summary: patient_summary[facility_id] = { "facility_name": facility_object.name, "district": facility_object.district.name, "facility_external_id": str(facility_object.external_id), } patients = PatientRegistration.objects.filter( is_active=True, last_consultation__discharge_date__isnull=True, last_consultation__facility=facility_object, ) # Get Total Counts for admitted_choice in ADMIT_CHOICES: db_value = admitted_choice[0] text = admitted_choice[1] filter = {"last_consultation__" + "admitted_to": db_value} count = patients.filter(**filter).count() clean_name = "total_patients_" + "_".join(text.lower().split()) patient_summary[facility_id][clean_name] = count home_quarantine = Q(last_consultation__suggestion="HI") total_patients_home_quarantine = patients.filter( home_quarantine).count() patient_summary[facility_id][ "total_patients_home_quarantine"] = total_patients_home_quarantine # Apply Date Filters patients_today = patients.filter( last_consultation__created_date__startswith=now().date()) # Get Todays Counts today_patients_home_quarantine = patients_today.filter( home_quarantine).count() for admitted_choice in ADMIT_CHOICES: db_value = admitted_choice[0] text = admitted_choice[1] filter = {"last_consultation__" + "admitted_to": db_value} count = patients_today.filter(**filter).count() clean_name = "today_patients_" + "_".join(text.lower().split()) patient_summary[facility_id][clean_name] = count # Update Anything Extra patient_summary[facility_id][ "today_patients_home_quarantine"] = today_patients_home_quarantine for i in list(patient_summary.keys()): object_filter = Q(s_type="PatientSummary") & Q( created_date__startswith=now().date()) if (FacilityRelatedSummary.objects.filter( facility_id=i).filter(object_filter).exists()): facility = FacilityRelatedSummary.objects.filter( object_filter).get(facility_id=i) facility.created_date = now() facility.data.pop("modified_date") if facility.data == patient_summary[i]: pass else: facility.data = patient_summary[i] latest_modification_date = now() facility.data.update({ "modified_date": latest_modification_date.strftime("%d-%m-%Y %H:%M") }) facility.save() else: modified_date = now() patient_summary[i].update( {"modified_date": modified_date.strftime("%d-%m-%Y %H:%M")}) FacilityRelatedSummary(s_type="PatientSummary", facility_id=i, data=patient_summary[i]).save() return True