Skip to content

Commit

Permalink
Inclui bloco try/except para tratar os logs de erro quando a competên…
Browse files Browse the repository at this point in the history
…cia solicitada ainda não estiver disponível na função principal_outros do ETL relatorio_producao_profissional_conduta_tipo_atendimento e ajusta os logs da função de extração
  • Loading branch information
maaottoni committed Jul 27, 2023
1 parent 68359a7 commit ea60254
Show file tree
Hide file tree
Showing 2 changed files with 86 additions and 32 deletions.
Original file line number Diff line number Diff line change
@@ -1,31 +1,33 @@
import warnings

warnings.filterwarnings("ignore")

import pandas as pd
from datetime import date

from impulsoetl.loggers import logger, habilitar_suporte_loguru
from impulsoetl.sisab.utilitarios_sisab_relatorio_producao import extrair_producao_por_municipio
from impulsoetl.sisab.utilitarios_sisab_relatorio_producao import transformar_producao_por_municipio
import pandas as pd

from impulsoetl.loggers import habilitar_suporte_loguru, logger
from impulsoetl.sisab.utilitarios_sisab_relatorio_producao import (
extrair_producao_por_municipio,
transformar_producao_por_municipio,
)

def extrair_relatorio(
periodo_competencia: date)-> pd.DataFrame():

def extrair_relatorio(periodo_competencia: date) -> pd.DataFrame():

df_consolidado = pd.DataFrame()

try:
df_parcial = extrair_producao_por_municipio(
tipo_producao="Atendimento individual",
competencias=[periodo_competencia],
selecoes_adicionais={
"Conduta":"Selecionar Todos",
"Categoria do Profissional":"Selecionar Todos",
"Conduta": "Selecionar Todos",
"Categoria do Profissional": "Selecionar Todos",
"Tipo de Atendimento": "Selecionar Todos",
},
).pipe(transformar_producao_por_municipio)

).pipe(transformar_producao_por_municipio)

df_consolidado = df_consolidado.append(df_parcial)

except ValueError as e:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,26 +1,32 @@
import warnings
warnings.filterwarnings("ignore")

import pandas as pd
warnings.filterwarnings("ignore")
import time
import traceback
from datetime import date

import pandas as pd
from prefect import flow
from sqlalchemy.orm import Session
from prefect import flow

from impulsoetl import __VERSION__
from impulsoetl.bd import Sessao

from impulsoetl.loggers import logger, habilitar_suporte_loguru
from impulsoetl.sisab.relatorio_producao_profissional_conduta_tipo_atendimento.extracao import extrair_relatorio
from impulsoetl.sisab.relatorio_producao_profissional_conduta_tipo_atendimento.tratamento import tratamento_dados
from impulsoetl.loggers import habilitar_suporte_loguru, logger
from impulsoetl.sisab.excecoes import SisabExcecao
from impulsoetl.sisab.relatorio_producao_profissional_conduta_tipo_atendimento.extracao import (
extrair_relatorio,
)
from impulsoetl.sisab.relatorio_producao_profissional_conduta_tipo_atendimento.tratamento import (
tratamento_dados,
)
from impulsoetl.utilitarios.bd import carregar_dataframe


@flow(
name="Obter Relatório de Produção por Profissional, Contuta e Tipo de Atendimento (Painel AGP)",
description=(
"Extrai, transforma e carrega os dados de produção da Atenção Primária à Saúde "
+"por problema/condição avaliada, a partir do Sistema de Informação em Saúde da Atenção "
+ "por problema/condição avaliada, a partir do Sistema de Informação em Saúde da Atenção "
+ "Básica do SUS."
),
retries=0,
Expand All @@ -34,21 +40,67 @@ def relatorio_profissional_conduta_atendimento(
tabela_destino: str,
periodo_competencia: date,
periodo_id: str,
unidade_geografica_id: str
)-> None:
unidade_geografica_id: str,
) -> None:

logger.info("Extraindo relatório da competencia {}, ...".format(periodo_competencia))
tempo_inicio_etl = time.time()

df_extraido = extrair_relatorio(
periodo_competencia = periodo_competencia
)

df_tratado = tratamento_dados(
df_extraido=df_extraido,
periodo_id=periodo_id,
unidade_geografica_id=unidade_geografica_id,
operacao_id = "064540b9-78b9-766c-8130-cdc0f1ed5828"

logger.info(
"Extraindo relatório da competencia {}, ...".format(
periodo_competencia
)
)

carregar_dataframe(
sessao=sessao, df=df_tratado, tabela_destino=tabela_destino
try:

df_extraido = extrair_relatorio(
periodo_competencia=periodo_competencia
)

df_tratado = tratamento_dados(
df_extraido=df_extraido,
periodo_id=periodo_id,
unidade_geografica_id=unidade_geografica_id,
)

carregar_dataframe(
sessao=sessao, df=df_tratado, tabela_destino=tabela_destino
)

except (KeyError, pd.errors.ParserError):
traceback_str = traceback.format_exc()
enviar_erro = SisabExcecao("Competência indisponível no SISAB")
enviar_erro.insere_erro_database(
sessao=sessao,
traceback_str=traceback_str,
operacao_id=operacao_id,
periodo_id=periodo_id,
)

logger.error("Data da competência do relatório não está disponível")
return 0

except Exception as mensagem_erro:
traceback_str = traceback.format_exc()
enviar_erro = SisabExcecao(mensagem_erro)
enviar_erro.insere_erro_database(
sessao=sessao,
traceback_str=traceback_str,
operacao_id=operacao_id,
periodo_id=periodo_id,
)

logger.error(mensagem_erro)
return 0

tempo_final_etl = time.time() - tempo_inicio_etl

logger.info(
"Terminou ETL para "
+ "da comepetência`{periodo_competencia}` "
+ "em {tempo_final_etl}.",
periodo_competencia=periodo_competencia,
tempo_final_etl=tempo_final_etl,
)

0 comments on commit ea60254

Please sign in to comment.