Esempio n. 1
0
def regras_gerais_atendidas(paciente, tratamento):
    
    ats = Atendimento.objects.filter(paciente = paciente, status='A').order_by('-instancia_tratamento__data')
    dic_retorno = {'sucesso':False, 'mensagem':None}

    # somente os tratamentos nas salas 1, 2, 3 e 4 são verificados, pois qualquer paciente pode fazer check-in na
    # quinta-feira na sala 5.
    if tratamento.id in [1,2,3,4,12]:
        if len(ats) == 0:
            dic_retorno['mensagem']='Paciente sem atendimentos registrados. Deve retornar para as segundas-feiras'
            return dic_retorno
        else:
            # último atendimento na casa há mais de 3 meses
            if ats[0].instancia_tratamento.data < get_data_limite():
                dic_retorno['mensagem']='Último atendimento realizado há mais de 3 meses. Encaminhar paciente para a coordenação.'
                return dic_retorno

    # somente pacientes com agendamento na desobsessão podem fazer checkin.
    if tratamento.id == 8:
        agenda = AgendaAtendimento.objects.filter(paciente = paciente, agenda_tratamento__tratamento = tratamento, \
            status='A')
        if not agenda:
            dic_retorno['mensagem']='Paciente não agendado para a Desobsessão. Favor encaminhá-lo para a coordenação.'
            return dic_retorno

    # regra básica:
    # se o paciente está fazendo um checkin para algum tratamento,
    # será necessário verificar se ele já cumpriu as 4 manutenções.
    # para tal, simplesmente verificamos se o último atendimento foi manutenção ou primeira vez e se
    # nos últimos 180 dias houve 4 manutenções.
    if tratamento.id in [1,2,3,4,5,12]:
        if ats:
            if ats[0].instancia_tratamento.tratamento.descricao_basica[:4] == "Manu" or \
                ats[0].instancia_tratamento.tratamento.descricao_basica[:4] == "Prim":
                data_limite = datetime.today().date() - timedelta(days=180)
                manuts = Atendimento.objects.filter(paciente = paciente, status='A', \
                    instancia_tratamento__tratamento__descricao_basica__startswith="Manu", \
                    instancia_tratamento__data__gte=data_limite)
                if len(manuts) < 4:
                   dic_retorno['mensagem']='Paciente ainda não finalizou as manutenções da segunda-feira.'
                   return dic_retorno
    
    # caso feliz :)
    dic_retorno['sucesso']=True
    return dic_retorno
Esempio n. 2
0
def relatorio_pacientes_geral(ativo, tratamento):
    mensagem = ''
    tps = TratamentoPaciente.objects.filter(status='A', tratamento=tratamento).order_by("paciente__nome")
    pacientes = []
    count = 0
    for tp in tps:
        paciente = {}
        paciente["nome"] = tp.paciente.nome
        at = Atendimento.objects.filter(paciente=tp.paciente).order_by("-instancia_tratamento__data")
        if len(at) > 0:
            ult_atendimento = at[0]
            paciente["ult_atendimento"] = ult_atendimento.instancia_tratamento.data

            count_det_prio = tp.paciente.detalheprioridade_set.count()
            if count_det_prio == 1:
                paciente["prioridade"] = tp.paciente.detalheprioridade_set.get().get_tipo_display()
            else:
                paciente["prioridade"] = ""

            voluntarios = Voluntario.objects.filter(paciente = tp.paciente, ativo=True)
            if len(voluntarios) == 1:
                paciente["voluntario"] = voluntarios[0].get_tipo_display()
            else:
                paciente["voluntario"] = ""

            data_limite = get_data_limite()
            if data_limite < ult_atendimento.instancia_tratamento.data:
                paciente["ativo"]=True
            else:
                paciente["ativo"]=False
            if (ativo == "S" and paciente["ativo"]) or (ativo == "N" and not paciente["ativo"]) or (ativo == "T"):
                pacientes.append(paciente)
                count += 1
                paciente["count"] = count

    return pacientes, mensagem