A API de Viagens a Serviço do Portal da Transparência disponibiliza dados sobre viagens realizadas por servidores públicos federais a serviço do governo. Os dados incluem destino, motivo, valores de diárias e passagens, órgão do servidor e período da viagem.
Esses dados permitem monitorar os gastos com deslocamento de servidores, identificar padrões de viagem atípicos, verificar a justificativa das viagens e comparar custos entre órgãos. São especialmente úteis para identificar gastos excessivos, viagens sem justificativa clara ou padrões de deslocamento que possam indicar uso indevido de recursos públicos.
import requestsimport pandas as pdAPI_KEY = "SEU_TOKEN_AQUI"BASE_URL = "https://api.portaldatransparencia.gov.br/api-de-dados"headers = { "chave-api-dados": API_KEY, "Accept": "application/json",}def listar_viagens( data_ida_de: str, data_ida_ate: str, codigo_orgao: str = None, pagina: int = 1,): """ Lista viagens a serviço em um período. Args: data_ida_de: Data de ida a partir de (DD/MM/AAAA) data_ida_ate: Data de ida até (DD/MM/AAAA) codigo_orgao: Código SIAFI do órgão (opcional) pagina: Número da página Returns: Lista de viagens em formato dict """ url = f"{BASE_URL}/viagens" params = { "dataIdaDe": data_ida_de, "dataIdaAte": data_ida_ate, "pagina": pagina, } if codigo_orgao: params["codigoOrgao"] = codigo_orgao response = requests.get(url, headers=headers, params=params) response.raise_for_status() return response.json()# Exemplo: viagens do Ministério da Economia em janeiro/2024viagens = listar_viagens("01/01/2024", "31/01/2024", "25000")df = pd.DataFrame(viagens)print(f"Viagens retornadas: {len(df)}")print(df[["nomeServidor", "destino", "valorDiarias", "valorPassagens"]].head())
import timedef coletar_viagens_periodo(data_ida_de: str, data_ida_ate: str, max_paginas: int = 10): """ Coleta viagens de múltiplas páginas. Args: data_ida_de: Data de ida a partir de (DD/MM/AAAA) data_ida_ate: Data de ida até (DD/MM/AAAA) max_paginas: Número máximo de páginas Returns: DataFrame com as viagens coletadas """ todas = [] for pagina in range(1, max_paginas + 1): dados = listar_viagens(data_ida_de, data_ida_ate, pagina=pagina) if not dados: break todas.extend(dados) time.sleep(2) # Respeitar rate limit return pd.DataFrame(todas)df_viagens = coletar_viagens_periodo("01/01/2024", "31/03/2024", max_paginas=5)if not df_viagens.empty: # Total de gastos total_diarias = df_viagens["valorDiarias"].sum() total_passagens = df_viagens["valorPassagens"].sum() print(f"Total de diárias: R$ {total_diarias:,.2f}") print(f"Total de passagens: R$ {total_passagens:,.2f}") print(f"Total geral: R$ {total_diarias + total_passagens:,.2f}") # Ranking por órgão gastos_por_orgao = ( df_viagens.groupby("nomeOrgao") .agg({"valorDiarias": "sum", "valorPassagens": "sum"}) .assign(total=lambda x: x["valorDiarias"] + x["valorPassagens"]) .sort_values("total", ascending=False) ) print("\nTop 10 órgãos por gasto com viagens:") print(gastos_por_orgao.head(10))