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

Feat/loaded at column #192

Merged
merged 5 commits into from
Aug 13, 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
37 changes: 2 additions & 35 deletions app/datalake/formatters.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,7 @@
from app.datalake.models import (
SMSRioPaciente,
VitacarePaciente,
VitacareAtendimento,
VitacareCondicao,
VitacareAlergia,
VitacareEncaminhamento,
VitacareExameSolicitado,
VitacareIndicador,
VitacarePrescricao,
VitacareVacina,
VitacareProcedimentosClinicos
VitacareAtendimento
)


Expand Down Expand Up @@ -44,29 +36,4 @@ def format_vitacare_encounter(raw_record: dict) -> List:

flattened = flatten(raw_record, dict_max_depth=3)

rows = [VitacareAtendimento(**flattened)]

for field_name, FieldModel in [
('condicoes', VitacareCondicao),
('alergias_anamnese', VitacareAlergia),
('encaminhamentos', VitacareEncaminhamento),
('exames_solicitados', VitacareExameSolicitado),
('indicadores', VitacareIndicador),
('prescricoes', VitacarePrescricao),
('vacinas', VitacareVacina),
('procedimentosClinicos', VitacareProcedimentosClinicos),
]:
if field_name not in raw_record['data']:
continue

for fields in raw_record['data'].pop(field_name) or []:
rows.append(
FieldModel(
patient_cpf=raw_record.get("patient_cpf"),
atendimento_id=raw_record.get("source_id"),
source_updated_at=raw_record.get("source_updated_at"),
**fields
)
)

return rows
return [VitacareAtendimento(**flattened)]
139 changes: 5 additions & 134 deletions app/datalake/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
# dataset, etc must be provided.
# =============================================
from typing import Optional
from datetime import datetime
from pydantic import BaseModel


Expand All @@ -19,6 +20,7 @@ class SMSRioPaciente(BaseModel):
patient_cpf: str
source_updated_at: str
source_id: Optional[str]
datalake_loaded_at: str = datetime.now().isoformat()
data__nome: Optional[str]
data__nome_mae: Optional[str]
data__nome_pai: Optional[str]
Expand Down Expand Up @@ -63,6 +65,7 @@ class VitacarePaciente(BaseModel):
patient_code: str
source_updated_at: str
source_id: Optional[str]
datalake_loaded_at: str = datetime.now().isoformat()
data__ap: Optional[str]
data__id: Optional[str]
data__cep: Optional[str]
Expand Down Expand Up @@ -153,6 +156,7 @@ class VitacareAtendimento(BaseModel):
patient_code: str
source_updated_at: str
source_id: str
datalake_loaded_at: str = datetime.now().isoformat()
data__unidade_ap: str
data__unidade_cnes: str
data__profissional__cns: Optional[str]
Expand Down Expand Up @@ -189,137 +193,4 @@ class Config:
partition_by_date = True
partition_column = "source_updated_at"
biglake_table = True
dataset_is_public = False


class VitacareProcedimentosClinicos(BaseModel):
patient_cpf: str
atendimento_id: str
source_updated_at: str
procedimentoClinico: str
observacao: Optional[str]

class Config:
dataset_id = "brutos_prontuario_vitacare"
table_id = "procedimentos_clinicos_eventos"
partition_by_date = True
partition_column = "source_updated_at"
biglake_table = True
dataset_is_public = False


class VitacareCondicao(BaseModel):
patient_cpf: str
atendimento_id: str
source_updated_at: str
cod_cid10: str
cod_ciap2: Optional[str]
estado: str
data_diagnostico: str

class Config:
dataset_id = "brutos_prontuario_vitacare"
table_id = "condicoes_eventos"
partition_by_date = True
partition_column = "source_updated_at"
biglake_table = True
dataset_is_public = False


class VitacareAlergia(BaseModel):
patient_cpf: str
atendimento_id: str
source_updated_at: str
descricao: str

class Config:
dataset_id = "brutos_prontuario_vitacare"
table_id = "alergia_anamnese_eventos"
partition_by_date = True
partition_column = "source_updated_at"
biglake_table = True
dataset_is_public = False


class VitacareEncaminhamento(BaseModel):
patient_cpf: str
atendimento_id: str
source_updated_at: str
descricao: str

class Config:
dataset_id = "brutos_prontuario_vitacare"
table_id = "encaminhamento_eventos"
partition_by_date = True
partition_column = "source_updated_at"


class VitacarePrescricao(BaseModel):
patient_cpf: str
atendimento_id: str
source_updated_at: str
nome_medicamento: str
cod_medicamento: str
quantidade: str
uso_continuado: bool

class Config:
dataset_id = "brutos_prontuario_vitacare"
table_id = "prescricao_eventos"
partition_by_date = True
partition_column = "source_updated_at"


class VitacareExameSolicitado(BaseModel):
patient_cpf: str
atendimento_id: str
source_updated_at: str
nome_exame: str
cod_exame: str
quantidade: str
material: str
url_resultado: Optional[str]
data_solicitacao: str

class Config:
dataset_id = "brutos_prontuario_vitacare"
table_id = "exames_solicitados_eventos"
partition_by_date = True
partition_column = "source_updated_at"


class VitacareVacina(BaseModel):
patient_cpf: str
atendimento_id: str
source_updated_at: str
nome_vacina: str
cod_vacina: str
dose: str
lote: str
datahora_aplicacao: str
datahora_registro: str
diff: str
calendario_vacinal_atualizado: bool
dose_vtc: str
tipo_registro: str
estrategia_imunizacao: str

class Config:
dataset_id = "brutos_prontuario_vitacare"
table_id = "vacinas_eventos"
partition_by_date = True
partition_column = "source_updated_at"


class VitacareIndicador(BaseModel):
patient_cpf: str
atendimento_id: str
source_updated_at: str
nome: str
valor: str

class Config:
dataset_id = "brutos_prontuario_vitacare"
table_id = "indicadores_eventos"
partition_by_date = True
partition_column = "source_updated_at"
dataset_is_public = False
Loading