Last active
August 1, 2019 09:20
-
-
Save fredkingham/7543353a09db4f44ea528499b0cc21c2 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from odonto.models import Demographics | |
from odonto.episode_categories import FP17Episode | |
from opal.models import Episode | |
from dateutil.relativedelta import relativedelta | |
import datetime | |
from odonto import episode_categories | |
from odonto.odonto_submissions import models | |
def dupe_nhs_numbers(episode): | |
demo = episode.patient.demographics() | |
if not demo.nhs_number: | |
return None | |
qs = Demographics.objects.exclude( | |
id=demo.id | |
).filter( | |
nhs_number=demo.nhs_number | |
) | |
if qs: | |
return qs | |
def dupe_names(episode): | |
demo = episode.patient.demographics() | |
if not demo.first_name: | |
return | |
if not demo.surname: | |
return | |
if not demo.date_of_birth: | |
return | |
qs = Demographics.objects.exclude( | |
id=demo.id | |
).filter( | |
first_name=demo.first_name | |
).filter( | |
surname=demo.surname | |
).filter( | |
date_of_birth=demo.date_of_birth | |
) | |
if qs: | |
return qs | |
def dup_fp17s(episode): | |
possibles = episode.patient.episode_set.filter( | |
category_name=FP17Episode.display_name | |
).filter( | |
stage='Submitted' | |
).exclude(id=episode.id) | |
if possibles: | |
return possibles | |
def has_dupes(episode): | |
if dupe_nhs_numbers(episode): | |
return True | |
return dupe_names(episode) or dup_fp17s(episode) | |
def unsent_fp17s(): | |
episodes = Episode.objects.filter( | |
stage="Submitted" | |
).filter( | |
category_name=episode_categories.FP17Episode.display_name | |
) | |
episodes = episodes.exclude( | |
id__in=models.Submission.objects.filter( | |
state=models.Submission.SUCCESS | |
).values_list('episode_id', flat=True).distinct() | |
) | |
return episodes.exclude( | |
id__in=models.Submission.objects.filter( | |
state=models.Submission.SENT | |
).values_list('episode_id', flat=True).distinct() | |
) | |
def old_unsent_fp17s(): | |
episodes = unsent_fp17s() | |
two_mo = datetime.date.today() - relativedelta( | |
months=2 | |
) | |
episodes = episodes.filter( | |
fp17incompletetreatment__completion_or_last_visit__lte=two_mo | |
) | |
return episodes | |
def old_dupes(): | |
episodes = old_unsent_fp17s() | |
result =[] | |
for i in episodes: | |
if has_dupes(i.id): | |
result.append(i) | |
return result | |
def old_non_dupes(): | |
episodes = old_unsent_fp17s() | |
result =[] | |
for i in episodes: | |
if not has_dupes(i.id): | |
result.append(i) | |
return result |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment