From c71b1991adb0feb3c58fa2517df3c75028e6c2c7 Mon Sep 17 00:00:00 2001 From: fredkingham Date: Fri, 10 Jun 2022 15:08:39 +0100 Subject: [PATCH 1/3] Removes all the logic referenced by mean times to diagnosis as this feature was removed at the users request in d2da738e45a8fce97e288253797ba75e5f8219b5 --- .../commands/generate_clinic_facts.py | 32 +------------------ 1 file changed, 1 insertion(+), 31 deletions(-) diff --git a/rbhl/management/commands/generate_clinic_facts.py b/rbhl/management/commands/generate_clinic_facts.py index d777e62d..5901589d 100644 --- a/rbhl/management/commands/generate_clinic_facts.py +++ b/rbhl/management/commands/generate_clinic_facts.py @@ -2,11 +2,10 @@ Generates the clinic activity facts """ import datetime -from collections import defaultdict from django.core.management.base import BaseCommand from django.db import transaction from opal.models import Episode -from rbhl.models import ClinicLog, Diagnosis, Fact, Referral +from rbhl.models import ClinicLog, Fact import logging logger = logging.getLogger('commands') @@ -32,8 +31,6 @@ def get_five_year_episodes(cls): cliniclog__clinic_date__lt=five_year_range[1] ).distinct().prefetch_related( "cliniclog_set", - "referral_set", - "diagnosis_set" ) def handle(self, *args, **kwargs): @@ -53,15 +50,6 @@ def process(self, *args, **options): label=Fact.MEAN_CLINIC_PATIENTS_PER_YEAR, value_int=referral_mean ) - episode_ids = set(five_year_episodes.values_list('id', flat=True)) - diagnosis = Diagnosis.objects.filter( - episode_id__in=episode_ids - ).exclude( - date=None - ).order_by("date") - episode_id_to_diagnosis = defaultdict(list) - for i in diagnosis: - episode_id_to_diagnosis[i.episode_id].append(i) diagnosed_count = 0 # Diagnosis % is calclated by the @@ -78,21 +66,3 @@ def process(self, *args, **options): label=Fact.FIVE_YEAR_MEAN_KNOWN_DIAGNOSIS, value_int=mean_diagnosis_percent ) - - # Diagnosis time is calculated the time from our first diagnosis - # after the referral date - total_days = 0 - count_with_diagnosis = 0 - for episode in five_year_episodes: - referral = Referral.get_recent_referral_for_episode(episode) - if referral and referral.date_of_referral: - diagnoses = episode.diagnosis_set.all() - diagnoses = [i for i in diagnoses if i.date] - diagnosis_after_referral = [ - i for i in diagnoses if i.date > referral.date_of_referral - ] - if diagnosis_after_referral: - diagnosis = diagnosis_after_referral[0] - days_to_diagnosis = diagnosis.date - referral.date_of_referral - total_days += days_to_diagnosis.days - count_with_diagnosis += 1 From 20374d95bf33ed222c0c5ce8f9b4c86879c05d7c Mon Sep 17 00:00:00 2001 From: fredkingham Date: Fri, 10 Jun 2022 15:09:46 +0100 Subject: [PATCH 2/3] Changes cls into self as this is not a class method --- rbhl/management/commands/generate_clinic_facts.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rbhl/management/commands/generate_clinic_facts.py b/rbhl/management/commands/generate_clinic_facts.py index 5901589d..cf26b730 100644 --- a/rbhl/management/commands/generate_clinic_facts.py +++ b/rbhl/management/commands/generate_clinic_facts.py @@ -11,7 +11,7 @@ class Command(BaseCommand): - def get_five_year_episodes(cls): + def get_five_year_episodes(self): today = datetime.date.today() if today.month > 9: five_year_range = ( From 99a561cbd8d1280a0323f488c852ea2ed121ea1b Mon Sep 17 00:00:00 2001 From: fredkingham Date: Fri, 10 Jun 2022 15:16:51 +0100 Subject: [PATCH 3/3] Move the save logic into its own little transaction --- .../commands/generate_clinic_facts.py | 26 ++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/rbhl/management/commands/generate_clinic_facts.py b/rbhl/management/commands/generate_clinic_facts.py index cf26b730..dce87ec7 100644 --- a/rbhl/management/commands/generate_clinic_facts.py +++ b/rbhl/management/commands/generate_clinic_facts.py @@ -41,15 +41,27 @@ def handle(self, *args, **kwargs): raise @transaction.atomic + def save_facts(self, mean_clinic_patients_per_year, mean_known_diagnosis): + Fact.objects.filter( + label__in=[ + Fact.MEAN_CLINIC_PATIENTS_PER_YEAR, + Fact.FIVE_YEAR_MEAN_KNOWN_DIAGNOSIS + ] + ).delete() + Fact.objects.create( + label=Fact.MEAN_CLINIC_PATIENTS_PER_YEAR, + value_int=mean_clinic_patients_per_year + ) + Fact.objects.create( + label=Fact.FIVE_YEAR_MEAN_KNOWN_DIAGNOSIS, + value_int=mean_known_diagnosis + ) + def process(self, *args, **options): five_year_episodes = self.get_five_year_episodes() episode_count = five_year_episodes.count() referral_mean = round(episode_count/5) - Fact.objects.create( - label=Fact.MEAN_CLINIC_PATIENTS_PER_YEAR, - value_int=referral_mean - ) diagnosed_count = 0 # Diagnosis % is calclated by the @@ -61,8 +73,4 @@ def process(self, *args, **options): diagnosed_count += 1 mean_diagnosis_percent = round(diagnosed_count/episode_count * 100) - Fact.objects.filter(label=Fact.FIVE_YEAR_MEAN_KNOWN_DIAGNOSIS).delete() - Fact.objects.create( - label=Fact.FIVE_YEAR_MEAN_KNOWN_DIAGNOSIS, - value_int=mean_diagnosis_percent - ) + self.save_facts(referral_mean, mean_diagnosis_percent)