Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allergies + Medicine + Minor fixes #207

Merged
merged 2 commits into from
Aug 20, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
76 changes: 47 additions & 29 deletions app/routers/frontend.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"])
Expand Down Expand Up @@ -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")
Expand Down
18 changes: 11 additions & 7 deletions app/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Loading