From f6b336f130bd884d147200155969b4265c439e61 Mon Sep 17 00:00:00 2001 From: Pedro Nascimento Date: Tue, 20 Aug 2024 13:47:57 -0300 Subject: [PATCH 1/3] feat: Update patient summary retrieval logic --- app/routers/frontend.py | 66 ++++++++++++++++++++++++++--------------- 1 file changed, 42 insertions(+), 24 deletions(-) diff --git a/app/routers/frontend.py b/app/routers/frontend.py index 253af4e..43814bc 100644 --- a/app/routers/frontend.py +++ b/app/routers/frontend.py @@ -128,32 +128,50 @@ async def get_patient_summary( cpf: str, ) -> PatientSummary: - if cpf == '19530236069': - raise HTTPException(status_code=404, detail="Patient not found") - elif cpf == '11111111111': - raise HTTPException(status_code=400, detail="Invalid CPF") + query = f""" + with + base as (select '{cpf}' as cpf), + alergias_grouped as ( + select + cpf, + alergias as allergies + from `saude_historico_clinico.alergia` + where cpf = '{cpf}' + ), + medicamentos_cronicos_single as ( + select + cpf, + med.nome as nome_medicamento + from `saude_historico_clinico.medicamentos_cronicos`, + unnest(medicamentos) as med + where cpf = '{cpf}' + ), + medicamentos_cronicos_grouped as ( + select + cpf, + array_agg(nome_medicamento) as continuous_use_medications + from medicamentos_cronicos_single + group by cpf + ) + select + alergias_grouped.allergies, + medicamentos_cronicos_grouped.continuous_use_medications + from base + left join alergias_grouped on alergias_grouped.cpf = base.cpf + left join medicamentos_cronicos_grouped on medicamentos_cronicos_grouped.cpf = base.cpf + """ + results_json = read_sql( + query, + from_file="/tmp/credentials.json" + ).to_json(orient="records") + + result = json.loads(results_json) + if len(result) > 0: + return result[0] return { - "allergies": [ - "Sulfonamidas", - "Ácaros do pó", - "Penicilina", - "Medicamentos anticonvulsivantes", - "Gatos", - "Gramíneas", - "Picadas de abelhas", - "Picadas de vespas", - "Preservativos", - "Luvas de látex", - ], - "continuous_use_medications": [ - "Losartana potássica", - "Enalapril maleato", - "Besilato de anlodipino", - "Captopril", - "Clonazepam", - "Enalapril", - ], + "allergies": [], + "continuous_use_medications": [] } @router.get("/patient/filter_tags") From bd5c8251c22ccf3b590be9f508c85b18b97705c5 Mon Sep 17 00:00:00 2001 From: Pedro Nascimento Date: Tue, 20 Aug 2024 14:06:52 -0300 Subject: [PATCH 2/3] fix: clinica da saude path + fix: timestamp convertion error --- app/routers/frontend.py | 10 +++++----- app/utils.py | 18 +++++++++++------- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/app/routers/frontend.py b/app/routers/frontend.py index 43814bc..4f88312 100644 --- a/app/routers/frontend.py +++ b/app/routers/frontend.py @@ -71,15 +71,15 @@ async def get_patient_header( if len(patient_record["contato"]["telefone"]) > 0: telefone_principal = patient_record["contato"]["telefone"][0]["valor"] - clinica_principal = {} - if len(patient_record["clinica_familia"]) > 0: - clinica_principal = patient_record["clinica_familia"][0] - - equipe_principal = {} + clinica_principal, equipe_principal = {}, {} medicos, enfermeiros = [], [] if len(patient_record["equipe_saude_familia"]) > 0: equipe_principal = patient_record["equipe_saude_familia"][0] + # Pega Clínica da Família + if equipe_principal["clinica_familia"]: + clinica_principal = equipe_principal["clinica_familia"] + for equipe in patient_record["equipe_saude_familia"]: medicos.extend(equipe["medicos"]) enfermeiros.extend(equipe["enfermeiros"]) diff --git a/app/utils.py b/app/utils.py index ca0b6ae..5dc8003 100644 --- a/app/utils.py +++ b/app/utils.py @@ -125,18 +125,22 @@ async def get_instance(Model, table, slug=None, code=None): def read_timestamp(timestamp: int, output_format=Literal['date','datetime']) -> str: + if output_format == 'date': + denominator = 1000 + str_format = "%Y-%m-%d" + elif output_format == 'datetime': + denominator = 1 + str_format = "%Y-%m-%d %H:%M:%S" + else: + raise ValueError("Invalid format") + try: - value = datetime(1970, 1, 1) + timedelta(seconds=timestamp) + value = datetime(1970, 1, 1) + timedelta(seconds=timestamp/denominator) except Exception as exc: logger.error(f"Invalid timestamp: {timestamp} from {exc}") return None - if output_format == 'datetime': - return value.strftime("%Y-%m-%d %H:%M:%S") - elif output_format == 'date': - return value.strftime("%Y-%m-%d") - else: - raise ValueError("Invalid format") + return value.strftime(str_format) def normalize_case(text): # TODO From 8d556ec8facd26e2a3f89b8c7b5b5b67cc997a6b Mon Sep 17 00:00:00 2001 From: Pedro Nascimento Date: Wed, 21 Aug 2024 12:20:04 -0300 Subject: [PATCH 3/3] feat: Sort patient encounters by entry_datetime --- app/routers/frontend.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/routers/frontend.py b/app/routers/frontend.py index 4f88312..f255d01 100644 --- a/app/routers/frontend.py +++ b/app/routers/frontend.py @@ -243,4 +243,7 @@ async def get_patient_encounters( } encounters.append(encounter) + # Sort Encounters by entry_datetime + encounters = sorted(encounters, key=lambda x: x['entry_datetime'], reverse=True) + return encounters