Balancete FI — leitura¶
Leitura (← CVM) do balancete mensal dos fundos de investimento: uma linha por fundo/classe ×
mês de competência × conta contábil, com o saldo da conta. Fonte: balancete_fi_AAAAMM.zip, do
dataset FI/DOC/BALANCETE.
Veja também: Referência da API · META · Proveniência.
Descrição¶
| formato | ZIP de 1 membro (balancete_fi_AAAAMM.csv), ;, UTF-8/ASCII puro (lido como ISO-8859-1), CRLF, sem aspas |
| partição | por mês (_AAAAMM) — o date_ref seleciona ano e mês |
| série | 201501 … em diante (141 arquivos no diretório; o CKAN lista só os 12 últimos) |
| tamanho | ~6,8 MB (2015) · 13,4 MB (2023) · 14,7 MB zipado / 153 MB CSV / 2.191.291 linhas (202609) |
| chave única | nenhuma é afirmada (grão natural: fundo/classe × data × conta) |
Um padrão de nome, dois schemas — o corte é 202311¶
| regime | meses | colunas | bloco-chave | reader |
|---|---|---|---|---|
| legado | 201501–202310 |
5 | CNPJ_FUNDO |
BalanceteFiPre202311Reader |
| fundo/classe | 202311– |
6 | TP_FUNDO_CLASSE + CNPJ_FUNDO_CLASSE |
BalanceteFiReader |
O corte foi medido sobre os headers publicados (todo mês de 202302 a 202312, mais amostras
de 2015 a 2022), não deduzido da RCVM 175 nem herdado do Perfil Mensal, cujo corte é 202312:
aqui a troca chega um mês antes. Por isso o reader legado se chama pela data medida, não por
uma norma — nome é afirmação.
As 4 colunas finais são idênticas nos dois regimes; mesmo assim são dois contracts, cada um
gerado do seu header publicado e pinado a tests/fixtures/balancete_fi/*_header.csv. Pedir a um
reader o mês do outro levanta ValueError nomeando o irmão, antes de baixar 14 MB.
Os 6 campos do fundo/classe são os mesmos do balancete_fie (FIE), mas cada dataset é pinado à sua
própria fonte.
Tipagem¶
Só DT_COMPTC vira datetime.date (ISO, 100% preenchida). Todo o resto é texto exato:
VL_SALDO_BALCTE é numeric(23,2) na META, sempre com 2 casas e com negativos (~19%) — nunca
float; CD_CONTA_BALCTE é char(8) (~470 contas distintas) e PLANO_CONTA_BALCTE é COFI em
todas as linhas medidas.
CNPJ_FUNDO[_CLASSE]é a única coluna de CNPJ (tuple_cnpj_cols): 100% bem formada, pontuada.TP_FUNDO_CLASSEvoltaFIem202311, mas em202609já misturaCLASSES - FIF(2.190.840) eFI(451) — a grafia da CVM é preservada.- ⚠️ Em
201501, 22 linhas chegam comCD_CONTA_BALCTEeVL_SALDO_BALCTEvazios; vazio volta vazio. Em202310,202311e202609não há células vazias.
Política de retry¶
Padrão do repo: 5 tentativas com espera exponencial limitada (~2, 4, 8, 10 s) em _RETRY_POLICY;
retry_policy= por instância sobrescreve. Cada leitura baixa ~14 MB.
META¶
meta_balancete_fi.txt — .txt solto, 6 campos = o header de 202311 em diante, sem
CNPJ_FUNDO. Logo a META não é oráculo do contrato legado (registrado em
_META_UNDESCRIBED_READERS). Declara VL_SALDO_BALCTE como numeric precisão 23 / escala 2.
Exemplos¶
from datetime import date
from pathlib import Path
from opendata_cvm.ingestion.fi import BalanceteFiPre202311Reader, BalanceteFiReader
# Regime atual (202311 em diante)
df_ = BalanceteFiReader(date_ref=date(2025, 6, 15)).read()
print(df_[["CNPJ_FUNDO_CLASSE", "CD_CONTA_BALCTE", "VL_SALDO_BALCTE"]].head())
# Série histórica (201501–202310)
df_pre = BalanceteFiPre202311Reader(date_ref=date(2020, 1, 15)).read()
# Guardar o ZIP bruto para a bronze de um datalake
df_ = BalanceteFiReader(date_ref=date(2025, 6, 15), path_raw=Path("/data/bronze")).read()