Skip to content
21 changes: 18 additions & 3 deletions lambdas/models/report/bulk_upload_report_output.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ def __init__(
self.total_deceased = set()
self.total_restricted = set()
self.total_ingested = set()
self.total_in_review = set()

def get_total_successful_nhs_numbers(self) -> list:
if self.total_successful:
Expand Down Expand Up @@ -52,6 +53,16 @@ def get_total_restricted_count(self) -> int:
def get_total_ingested_count(self) -> int:
return len(self.total_ingested)

def get_total_in_review_count(self) -> int:
return len(self.total_in_review)

def get_total_in_review_percentage(self) -> str:
review_percentage = "0"
if self.total_ingested:
review_rate = (len(self.total_in_review) / len(self.total_ingested)) * 100
review_percentage = f"{review_rate:.2f}".rstrip("0").rstrip(".")
return f"{review_percentage}%"

@staticmethod
def get_sorted(to_sort: set) -> list:
return sorted(to_sort, key=lambda x: x[0]) if to_sort else []
Expand Down Expand Up @@ -144,9 +155,12 @@ def set_unique_failures(self):
for patient in patients_to_remove:
self.failures_per_patient.pop(patient)

for patient_data in self.failures_per_patient.values():
reason = patient_data.get(MetadataReport.Reason)
self.unique_failures[reason] = self.unique_failures.get(reason, 0) + 1
for nhs_number, patient_data in self.failures_per_patient.items():
if patient_data.get(MetadataReport.SentToReview):
self.total_in_review.add(nhs_number)
else:
reason = patient_data.get(MetadataReport.Reason)
self.unique_failures[reason] = self.unique_failures.get(reason, 0) + 1

def get_unsuccessful_reasons_data_rows(self):
return [
Expand Down Expand Up @@ -174,6 +188,7 @@ def populate_report(self):
self.total_suspended.update(report.total_suspended)
self.total_deceased.update(report.total_deceased)
self.total_restricted.update(report.total_restricted)
self.total_in_review.update(report.total_in_review)
ods_code_success_total[report.uploader_ods_code] = report.total_successful

for reason, count in report.unique_failures.items():
Expand Down
15 changes: 15 additions & 0 deletions lambdas/services/bulk_upload_report_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,8 @@ def generate_individual_ods_report(
total_successful_percentage=ods_report.get_total_successful_percentage(),
total_registered_elsewhere=ods_report.get_total_registered_elsewhere_count(),
total_suspended=ods_report.get_total_suspended_count(),
total_in_review=ods_report.get_total_in_review_count(),
total_in_review_percentage=ods_report.get_total_in_review_percentage(),
total_deceased=ods_report.get_total_deceased_count(),
extra_rows=ods_report.get_unsuccessful_reasons_data_rows(),
)
Expand Down Expand Up @@ -127,6 +129,8 @@ def generate_summary_report(self, ods_reports: list[OdsReport]):
total_successful_percentage=summary_report.get_total_successful_percentage(),
total_registered_elsewhere=summary_report.get_total_registered_elsewhere_count(),
total_suspended=summary_report.get_total_suspended_count(),
total_in_review=summary_report.get_total_in_review_count(),
total_in_review_percentage=summary_report.get_total_in_review_percentage(),
total_deceased=summary_report.get_total_deceased_count(),
total_restricted=summary_report.get_total_restricted_count(),
extra_rows=summary_report.success_summary + summary_report.reason_summary,
Expand Down Expand Up @@ -335,6 +339,8 @@ def write_summary_data_to_csv(
total_successful_percentage: str,
total_registered_elsewhere: int,
total_suspended: int,
total_in_review: int = None,
total_in_review_percentage: str = None,
total_deceased: int = None,
total_restricted: int = None,
extra_rows: list = [],
Expand All @@ -345,6 +351,15 @@ def write_summary_data_to_csv(
writer.writerow(["Type", "Description", "Count"])
writer.writerow(["Total", "Total Ingested", total_ingested])
writer.writerow(["Total", "Total Successful", total_successful])

if total_in_review is not None:
writer.writerow(["Total", "Total In Review", total_in_review])

if total_in_review_percentage is not None:
writer.writerow(
["Total", "Review Percentage", total_in_review_percentage],
)

writer.writerow(
["Total", "Successful Percentage", total_successful_percentage],
)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
Type,Description,Count
Total,Total Ingested,16
Total,Total Successful,10
Total,Total In Review,0
Total,Review Percentage,0%
Total,Successful Percentage,62.5%
Total,Successful - Registered Elsewhere,2
Total,Successful - Suspended,2
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
Type,Description,Count
Total,Total Ingested,8
Total,Total Successful,5
Total,Total In Review,0
Total,Review Percentage,0%
Total,Successful Percentage,62.5%
Total,Successful - Registered Elsewhere,1
Total,Successful - Suspended,1
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
Type,Description,Count
Total,Total Ingested,8
Total,Total Successful,5
Total,Total In Review,0
Total,Review Percentage,0%
Total,Successful Percentage,62.5%
Total,Successful - Registered Elsewhere,1
Total,Successful - Suspended,1
Expand Down
Loading
Loading