Skip to content

Commit

Permalink
Merge pull request #1549 from BLSQ/WC2-471-ETL_Child-exit-by-death-no…
Browse files Browse the repository at this point in the history
…t-showing-in-dashboard

WC2-471: Child exit by death not showing in dashboard
  • Loading branch information
butofleury committed Aug 13, 2024
2 parents 2843a40 + 17a13b1 commit 348f8cb
Show file tree
Hide file tree
Showing 3 changed files with 173 additions and 155 deletions.
142 changes: 118 additions & 24 deletions plugins/wfp/common.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
from .models import *
from iaso.models import *
import datetime
from datetime import date
from datetime import datetime, timedelta, date


class ETL:
Expand All @@ -18,10 +17,11 @@ def delete_beneficiaries(self):

def retrieve_entities(self):
steps_id = ETL().steps_to_exclude()
updated_at = datetime.date(2023, 7, 10)
updated_at = date(2023, 7, 10)
beneficiaries = (
Instance.objects.filter(entity__entity_type__name=self.type)
# .filter(entity__id__in=[1, 42, 46, 49, 58, 77, 90, 111, 322, 323, 330, 196, 226])
# .filter(entity__id__in=[1, 42, 46, 49, 58, 77, 90, 111, 322, 323, 330, 196, 226, 254,315, 424, 430, 431, 408, 19, 230, 359])
# .filter(entity__id__in=[230, 359, 254])
.filter(json__isnull=False)
.filter(form__isnull=False)
.filter(updated_at__gte=updated_at)
Expand All @@ -39,8 +39,12 @@ def retrieve_entities(self):
"updated_at",
"form",
"entity__deleted_at",
"source_created_at",
)
.order_by(
"entity_id",
"source_created_at",
)
.order_by("created_at", "entity_id")
)
return beneficiaries

Expand Down Expand Up @@ -69,19 +73,28 @@ def steps_to_exclude(self):
def program_mapper(self, visit):
program = None
if visit:
if visit.get("programme") is not None and visit.get("programme") != "NONE":
program = visit.get("programme")
if visit.get("programme") is not None:
if visit.get("programme") != "NONE":
program = visit.get("programme")
else:
program = ""
elif visit.get("_programme") is not None:
if visit.get("_programme") != "NONE":
program = visit.get("_programme")
else:
program = ""
elif visit.get("program") is not None:
if visit.get("program") == "NONE":
program = "TSFP"
elif visit.get("program") != "NONE":
program = visit.get("program")
if visit.get("previous_discharge_program", None) is not None:
program = visit.get("previous_discharge_program", None)
elif visit.get("program") != "NONE":
program = visit.get("program")
else:
program = ""
elif visit.get("program_two") is not None and visit.get("program_two") != "NONE":
program = visit.get("program_two", None)
elif visit.get("discharge_program") is not None and visit.get("discharge_program") != "NONE":
program = visit.get("discharge_program")
elif visit.get("_programme") is not None and visit.get("_programme") != "NONE":
program = visit.get("_programme")
elif visit.get("new_programme") is not None and visit.get("new_programme") != "NONE":
program = visit.get("new_programme")
elif (
Expand Down Expand Up @@ -133,7 +146,9 @@ def admission_criteria(self, visit):

def exit_type(self, visit):
exit_type = None
if (visit.get("new_programme") is not None and visit.get("new_programme") == "TSFP") and (
if visit.get("new_programme", None) is not None and visit.get("new_programme", None) == "NONE":
exit_type = visit.get("reason_for_not_continuing", None)
elif (visit.get("new_programme") is not None and visit.get("new_programme") == "TSFP") and (
visit.get("transfer__int__") is not None and visit.get("transfer__int__") == "1"
):
exit_type = "transfer_to_tsfp"
Expand Down Expand Up @@ -181,6 +196,8 @@ def exit_type(self, visit):
def exit_type_converter(self, exit_type):
if exit_type == "dismissedduetocheating":
return "dismissed_due_to_cheating"
if exit_type == "dismissal":
return "dismissed_due_to_cheating"
elif exit_type == "transferredout":
return "transferred_out"
elif exit_type == "voluntarywithdrawal":
Expand All @@ -197,6 +214,8 @@ def admission_type_converter(self, admission_type):
return "referred_from_sc"
elif admission_type == "returned_from_sc":
return "referred_from_sc"
elif admission_type == "returnee":
return "returned_referral"
else:
return admission_type

Expand All @@ -218,7 +237,69 @@ def group_followup_steps(self, steps, admission):
followUp_steps.insert(0, admission)
return followUp_steps

def journey_Formatter(self, visit, anthropometric_visit_form, followup_forms, current_journey):
def exit_by_defaulter(self, visits, visit, anthropometric_visit_forms):
exit = None
next_visit_date = ""
next_visit_days = 0
nextSecondVisitDate = ""
missed_followup_visit = 0
if visit["form_id"] in [
"child_assistance_follow_up",
"child_assistance_admission",
"wfp_coda_pbwg_assistance",
"wfp_coda_pbwg_assistance_followup",
]:
if visit.get("next_visit__date__", None) is not None and visit.get("next_visit__date__", None) != "":
next_visit_date = visit.get("next_visit__date__", None)
elif (
visit.get("new_next_visit__date__", None) is not None
and visit.get("new_next_visit__date__", None) != ""
):
next_visit_date = visit.get("new_next_visit__date__", None)

if visit.get("next_visit_days", None) is not None and visit.get("next_visit_days", None) != "":
next_visit_days = visit.get("next_visit_days", None)
elif (
visit.get("number_of_days__int__", None) is not None and visit.get("number_of_days__int__", None) != ""
):
next_visit_days = visit.get("number_of_days__int__", None)
elif (
visit.get("OTP_next_visit", None) is not None
and visit.get("OTP_next_visit", None) != ""
and visit.get("OTP_next_visit") != "--"
):
next_visit_days = visit.get("OTP_next_visit", None)
elif (
visit.get("TSFP_next_visit", None) is not None
and visit.get("TSFP_next_visit", None) != ""
and visit.get("TSFP_next_visit") != "--"
):
next_visit_days = visit.get("TSFP_next_visit", None)
elif (
visit.get("tsfp_next_visit", None) is not None
and visit.get("tsfp_next_visit", None) != ""
and visit.get("tsfp_next_visit") != "--"
):
next_visit_days = visit.get("tsfp_next_visit", None)
elif (
visit.get("otp_next_visit", None) is not None
and visit.get("otp_next_visit", None) != ""
and visit.get("otp_next_visit") != "--"
):
next_visit_days = visit.get("otp_next_visit", None)

if next_visit_date is not None and next_visit_date != "":
nextSecondVisitDate = datetime.strptime(next_visit_date[:10], "%Y-%m-%d").date() + timedelta(
days=int(next_visit_days) + 1
)
missed_followup_visit = self.missed_followup_visit(
visits, anthropometric_visit_forms, next_visit_date[:10], nextSecondVisitDate, next_visit_days
)
if missed_followup_visit > 1 and next_visit_date != "" and nextSecondVisitDate != "":
exit = {"exit_type": "defaulter", "end_date": nextSecondVisitDate}
return exit

def journey_Formatter(self, visit, anthropometric_visit_form, followup_forms, current_journey, visits, index):
if visit["form_id"] == anthropometric_visit_form:
current_journey["instance_id"] = visit.get("instance_id", None)
current_journey["start_date"] = visit.get("start_date", None)
Expand All @@ -232,20 +313,33 @@ def journey_Formatter(self, visit, anthropometric_visit_form, followup_forms, cu
current_journey["admission_type"] = self.admission_type(visit)
current_journey["programme_type"] = self.program_mapper(visit)
current_journey["org_unit_id"] = visit.get("org_unit_id")

current_journey["visits"].append(visit)
exit = None
followup_forms.append(anthropometric_visit_form)
if visit["form_id"] in followup_forms:
end_date = visit.get("end_date", visit.get("created_at", ""))
end_date = visit.get("end_date", visit.get("source_created_at", ""))
current_journey["end_date"] = (
end_date if end_date is not None else visit.get("created_at", None).strftime("%Y-%m-%d")
end_date if end_date is not None else visit.get("source_created_at", None).strftime("%Y-%m-%d")
)
current_journey["discharge_weight"] = visit.get("discharge_weight", None)
current_journey["weight_difference"] = visit.get("weight_difference", None)
current_journey["exit_type"] = self.exit_type(visit)

followup_forms.append(anthropometric_visit_form)
if visit["form_id"] in followup_forms:
current_journey["visits"].append(visit)

if index > 0:
index = index - 1
exit = self.exit_by_defaulter(visits, visits[index], followup_forms)
if (
exit is not None
and current_journey.get("exit_type", None) is None
and current_journey.get("start_date") is not None
):
current_journey["exit_type"] = exit["exit_type"]
current_journey["end_date"] = exit["end_date"]
duration = (
datetime.strptime(datetime.strftime(exit["end_date"], "%Y-%m-%d"), "%Y-%m-%d")
- datetime.strptime(current_journey["start_date"], "%Y-%m-%d")
).days
current_journey["duration"] = duration
return current_journey

def assistance_to_step(self, assistance, visit, instance_id):
Expand Down Expand Up @@ -361,7 +455,7 @@ def save_visit(self, visits, journey):
visit_number = 0
for current_visit in visits:
visit = Visit()
visit.date = current_visit["date"]
visit.date = current_visit.get("date", None)
visit.number = visit_number
visit.journey = journey
orgUnit = OrgUnit.objects.get(id=current_visit["org_unit_id"])
Expand Down Expand Up @@ -397,10 +491,10 @@ def missed_followup_visit(self, visits, formIds, next_visit__date__, secondNextV
if visit["form_id"] in formIds:
if visit.get("visit_date") is not None:
currentVisitDate = visit.get("visit_date", None)[:10]
elif visit.get("date", None) is not None:
currentVisitDate = visit.get("date", None)[:10]
elif visit.get("_visit_date", None) is not None:
currentVisitDate = visit.get("_visit_date", None)[:10]
elif visit.get("date", None) is not None:
currentVisitDate = visit.get("date", None)[:10]

today = date.today().strftime("%Y-%m-%d")
if next_visit__date__ == "" and secondNextVisitDate == "":
Expand Down
Loading

0 comments on commit 348f8cb

Please sign in to comment.