Skip to content

Instantly share code, notes, and snippets.

@fredkingham
Last active August 1, 2019 09:20
Show Gist options
  • Save fredkingham/7543353a09db4f44ea528499b0cc21c2 to your computer and use it in GitHub Desktop.
Save fredkingham/7543353a09db4f44ea528499b0cc21c2 to your computer and use it in GitHub Desktop.
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