O SICONFI é o sistema da Secretaria do Tesouro Nacional (STN) responsável por receber, validar e consolidar as informações contábeis e fiscais de estados, Distrito Federal e municípios brasileiros. Ele centraliza os relatórios exigidos pela Lei de Responsabilidade Fiscal (LRF) e pela Lei nº 4.320/1964, incluindo:
RREO (Relatório Resumido da Execução Orçamentária) — publicado bimestralmente, apresenta receitas e despesas do ente
RGF (Relatório de Gestão Fiscal) — publicado quadrimestralmente, apresenta limites de gastos com pessoal, dívida e garantias
DCA (Declaração de Contas Anuais) — balanços contábeis anuais dos entes federativos
FINBRA (Finanças do Brasil) — base consolidada de receitas e despesas municipais
MSC (Matriz de Saldos Contábeis) — dados contábeis no padrão PCASP
O SICONFI possui uma API REST pública sem necessidade de autenticação, permitindo consultas programáticas a todos esses conjuntos de dados para mais de 5.500 municípios e 27 unidades federativas.
As respostas são retornadas em JSON por padrão, com estrutura {"items": [...], "hasMore": true/false}. Alguns endpoints também aceitam o parâmetro formato=csv.
import requestsimport pandas as pdBASE_URL = "https://apidatalake.tesouro.gov.br/ords/siconfi/tt"def consultar_rreo(codigo_ibge: str, exercicio: int, bimestre: int = None): """ Consulta o Relatório Resumido da Execução Orçamentária (RREO) de um ente federativo. Args: codigo_ibge: Código IBGE do município ou estado exercicio: Ano do exercício fiscal bimestre: Número do bimestre (1 a 6, opcional) Returns: DataFrame com dados do RREO """ url = f"{BASE_URL}/rreo" params = { "id_ente": codigo_ibge, "an_exercicio": exercicio, "limit": 5000, } if bimestre: params["nr_periodo"] = bimestre registros = [] offset = 0 while True: params["offset"] = offset response = requests.get(url, params=params) response.raise_for_status() dados = response.json() items = dados.get("items", []) registros.extend(items) if not dados.get("hasMore", False): break offset += len(items) return pd.DataFrame(registros)# Exemplo: RREO de São Paulo (3550308), exercício 2024, 6º bimestredf_rreo = consultar_rreo("3550308", 2024, 6)print(f"Registros: {len(df_rreo)}")if not df_rreo.empty: print(df_rreo[["no_conta", "vl_previsao_inicial", "vl_realizado"]].head(10))
def consultar_rgf(codigo_ibge: str, exercicio: int, quadrimestre: int = None): """ Consulta o Relatório de Gestão Fiscal (RGF) de um ente federativo. Args: codigo_ibge: Código IBGE do ente exercicio: Ano do exercício fiscal quadrimestre: Número do quadrimestre (1 a 3, opcional) Returns: DataFrame com dados do RGF """ url = f"{BASE_URL}/rgf" params = { "id_ente": codigo_ibge, "an_exercicio": exercicio, "limit": 5000, } if quadrimestre: params["nr_periodo"] = quadrimestre response = requests.get(url, params=params) response.raise_for_status() dados = response.json() registros = dados.get("items", dados) return pd.DataFrame(registros)# Exemplo: RGF do Estado de Minas Gerais (31), exercício 2024df_rgf = consultar_rgf("31", 2024, 3)print(f"Registros RGF: {len(df_rgf)}")if not df_rgf.empty: print(df_rgf.head())
def consultar_dca(codigo_ibge: str, exercicio: int): """ Consulta a Declaração de Contas Anuais (DCA) de um ente federativo. Args: codigo_ibge: Código IBGE do ente exercicio: Ano do exercício Returns: DataFrame com dados do balanço anual """ url = f"{BASE_URL}/dca" params = { "id_ente": codigo_ibge, "an_exercicio": exercicio, "limit": 5000, } registros = [] offset = 0 while True: params["offset"] = offset response = requests.get(url, params=params) response.raise_for_status() dados = response.json() items = dados.get("items", []) registros.extend(items) if not dados.get("hasMore", False): break offset += len(items) return pd.DataFrame(registros)# Exemplo: DCA do Estado do Rio de Janeiro (33), exercício 2023df_dca = consultar_dca("33", 2023)print(f"Registros DCA: {len(df_dca)}")if not df_dca.empty: print(df_dca.head())
Nem todos os municípios enviam seus relatórios no prazo legal. Municípios menores frequentemente apresentam dados incompletos ou ausentes.
Cobertura temporal
A API cobre dados a partir de 2015 para a maioria dos relatórios. Dados anteriores podem estar disponíveis apenas via download de arquivos no site do SICONFI.
Padronização contábil
A implantação do PCASP (Plano de Contas Aplicado ao Setor Público) foi gradual; dados anteriores a 2015 podem seguir planos de contas diferentes.
Complexidade dos anexos
Cada relatório (RREO, RGF) possui múltiplos anexos com estruturas de dados distintas. É necessário conhecer a estrutura para filtrar corretamente.
Paginação obrigatória
Resultados são paginados com hasMore; consultas amplas (ex: todos os municípios de um estado) exigem múltiplas requisições.
Sem documentação Swagger
A API não possui documentação Swagger/OpenAPI interativa. Os parâmetros disponíveis precisam ser descobertos por tentativa ou pela documentação textual.
Periodicidade variável
RREO é bimestral, RGF é quadrimestral, DCA é anual. A consolidação entre diferentes periodicidades exige cuidado.
Qualidade dos dados
Os dados são autodeclarados pelos entes. Erros de preenchimento e inconsistências são possíveis, especialmente em municípios de menor porte.