Project

General

Profile

Download (5.12 KB) Statistics
| Branch: | Tag: | Revision:
3ed29cb7 Mikaël Ates
# -*- coding: utf-8 -*-
import datetime

0853d495 Mikaël Ates
def get_acts_of_the_day(date, service=None):
3ed29cb7 Mikaël Ates
from models import EventAct
0853d495 Mikaël Ates
if service:
return EventAct.objects.filter(date__year=date.year,
date__month=date.month, date__day=date.day,
services__pk__icontains=service.pk).order_by('date')
3ed29cb7 Mikaël Ates
return EventAct.objects.filter(date__year=date.year,
date__month=date.month, date__day=date.day).order_by('date')


0853d495 Mikaël Ates
def unlock_all_acts_of_the_day(date, service=None):
1aae39b5 Mikaël Ates
for act in get_acts_of_the_day(date, service):
if not act.is_billed:
72dbfaca Mikaël Ates
act.validation_locked = False
act.save()
3ed29cb7 Mikaël Ates
0853d495 Mikaël Ates
def are_all_acts_of_the_day_locked(date, service=None):
for act in get_acts_of_the_day(date, service):
3ed29cb7 Mikaël Ates
if not act.validation_locked:
return False
return True


0853d495 Mikaël Ates
def get_acts_not_locked_of_the_day(date, service=None):
3ed29cb7 Mikaël Ates
acts = []
0853d495 Mikaël Ates
for act in get_acts_of_the_day(date, service):
3ed29cb7 Mikaël Ates
if not act.validation_locked:
acts.append(act)
return acts


0853d495 Mikaël Ates
def get_days_with_acts_not_locked(start_day, end_day, service=None):
3ed29cb7 Mikaël Ates
num_days = abs((start_day - end_day).days) + 1
days_list = [start_day + datetime.timedelta(days=x) \
for x in range(0, num_days)]
result = []
for day in days_list:
0853d495 Mikaël Ates
if not are_all_acts_of_the_day_locked(day, service):
3ed29cb7 Mikaël Ates
result.append(day)
return result


0853d495 Mikaël Ates
def get_days_with_all_acts_locked(start_day, end_day, service=None):
3ed29cb7 Mikaël Ates
num_days = abs((start_day - end_day).days) + 1
days_list = [start_day + datetime.timedelta(days=x) \
for x in range(0, num_days)]
result = []
for day in days_list:
0853d495 Mikaël Ates
if are_all_acts_of_the_day_locked(day, service):
3ed29cb7 Mikaël Ates
result.append(day)
return result


93895776 Mikaël Ates
def automated_validation(date, service, user, commit=True):
3ed29cb7 Mikaël Ates
nb_acts_double = 0
nb_acts_validated = 0
93895776 Mikaël Ates
nb_acts_abs_non_exc = 0
nb_acts_abs_exc = 0
nb_acts_annul_nous = 0
nb_acts_annul_famille = 0
nb_acts_abs_ess_pps = 0
nb_acts_enf_hosp = 0
0853d495 Mikaël Ates
acts_of_the_day = get_acts_of_the_day(date, service)
93895776 Mikaël Ates
for act in acts_of_the_day:
if act.is_state('ABS_NON_EXC'):
nb_acts_abs_non_exc = nb_acts_abs_non_exc + 1
if act.is_state('ABS_EXC'):
nb_acts_abs_exc = nb_acts_abs_exc + 1
if act.is_state('ANNUL_NOUS'):
nb_acts_annul_nous = nb_acts_annul_nous + 1
if act.is_state('ANNUL_FAMILLE'):
nb_acts_annul_famille = nb_acts_annul_famille + 1
if act.is_state('ABS_ESS_PPS'):
nb_acts_abs_ess_pps = nb_acts_abs_ess_pps + 1
if act.is_state('ENF_HOSP'):
nb_acts_enf_hosp = nb_acts_enf_hosp + 1

3ed29cb7 Mikaël Ates
nb_acts_total = len(acts_of_the_day)
patients = {}
if service.name == 'CMPP':
# Verification des actes en doubles
acts = [act for act in acts_of_the_day \
93895776 Mikaël Ates
if act.get_state().state_name in ('VALIDE', 'NON_VALIDE',
'ACT_DOUBLE')]
3ed29cb7 Mikaël Ates
for act in acts:
if act.patient not in patients:
patients[act.patient] = []
patients[act.patient].append(act)
for patient, acts in patients.items():
if len(acts) > 1:
# Si plusieurs actes pour un même patient le même jour
# On valide le premier, s'il n'est pas déja validé.
# Les autres sont marqués actes en double
found_one = False
1aae39b5 Mikaël Ates
acts_t = []
3ed29cb7 Mikaël Ates
for act in acts:
1aae39b5 Mikaël Ates
if act.is_billed:
found_one = True
c756ec89 Mikaël Ates
nb_acts_validated = nb_acts_validated + 1
1aae39b5 Mikaël Ates
else:
acts_t.append(act)
for act in acts_t:
3ed29cb7 Mikaël Ates
if not found_one:
93895776 Mikaël Ates
if not act.is_state('VALIDE') and commit:
3ed29cb7 Mikaël Ates
act.set_state('VALIDE', author=user, auto=True)
found_one = True
nb_acts_validated = nb_acts_validated + 1
else:
93895776 Mikaël Ates
if commit:
act.set_state('ACT_DOUBLE', author=user, auto=True)
3ed29cb7 Mikaël Ates
nb_acts_double = nb_acts_double + 1
else:
9f81a4a0 Mikaël Ates
if not acts[0].is_state('VALIDE') and commit:
3ed29cb7 Mikaël Ates
acts[0].set_state('VALIDE', author=user, auto=True)
93895776 Mikaël Ates
nb_acts_validated = nb_acts_validated + 1
3ed29cb7 Mikaël Ates
else:
acts = [act for act in acts_of_the_day if act.is_state('NON_VALIDE')]
for act in acts:
93895776 Mikaël Ates
if commit:
act.set_state('VALIDE', author=user, auto=True)
3ed29cb7 Mikaël Ates
nb_acts_validated = nb_acts_validated + 1
93895776 Mikaël Ates
3ed29cb7 Mikaël Ates
# Acts locking
for act in acts_of_the_day:
93895776 Mikaël Ates
if commit:
act.validation_locked = True
act.save()
if service.name == 'CMPP' and commit:
3ed29cb7 Mikaël Ates
for patient, _ in patients.items():
patient.create_diag_healthcare(user)
a4b52050 Mikaël Ates
patient.automated_switch_state(user)
93895776 Mikaël Ates
return (nb_acts_total, nb_acts_validated, nb_acts_double,
nb_acts_abs_non_exc, nb_acts_abs_exc, nb_acts_annul_nous,
nb_acts_annul_famille, nb_acts_abs_ess_pps,
nb_acts_enf_hosp)