diff --git a/app/datalake/formatters.py b/app/datalake/formatters.py index 7b527be..a466861 100644 --- a/app/datalake/formatters.py +++ b/app/datalake/formatters.py @@ -8,15 +8,7 @@ from app.datalake.models import ( SMSRioPaciente, VitacarePaciente, - VitacareAtendimento, - VitacareCondicao, - VitacareAlergia, - VitacareEncaminhamento, - VitacareExameSolicitado, - VitacareIndicador, - VitacarePrescricao, - VitacareVacina, - VitacareProcedimentosClinicos + VitacareAtendimento ) @@ -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)] diff --git a/app/datalake/models.py b/app/datalake/models.py index 6f5aa52..58ec7e7 100644 --- a/app/datalake/models.py +++ b/app/datalake/models.py @@ -9,6 +9,7 @@ # dataset, etc must be provided. # ============================================= from typing import Optional +from datetime import datetime from pydantic import BaseModel @@ -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] @@ -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] @@ -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] @@ -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" \ No newline at end of file + dataset_is_public = False \ No newline at end of file