Pular para conteúdo

Informe Diário FIF — leitura

Leitura (← CVM) do dump mensal de open-data do Informe Diário de fundos (inf_diario_fi_AAAAMM), publicado no portal de dados abertos da CVM.

Veja também: Referência da API para cada símbolo público · Uso para instalação e o conceito geral.


Descrição

InformeDiarioReader baixa o ZIP mensal, extrai o CSV, valida o contrato (colunas obrigatórias + coluna de CNPJ coercível) e devolve um DataFrame com os tipos declarados aplicados — nunca a inferência do pandas.

Nota: este leitor consome o CSV de open-data — um artefato distinto do XML do padrão Informe Diário V4 produzido no Envio. Por isso ele tem o seu próprio contrato de colunas, e não reaproveita o schema de submissão.

Coluna Tipo Observação
TP_FUNDO_CLASSE, CNPJ_FUNDO_CLASSE, ID_SUBCLASSE str CNPJ_FUNDO_CLASSE deve ter ao menos um CNPJ válido.
DT_COMPTC date Data de competência.
VL_TOTAL, VL_QUOTA, VL_PATRIM_LIQ, CAPTC_DIA, RESG_DIA str Texto exato da CVM — nunca float; converta para Decimal ao calcular.
NR_COTST Int64 Inteiro nulável.

Exemplos

Ler o mês de referência

from datetime import date

from filings_cvm.ingestion.fi import InformeDiarioReader

# Qualquer dia do mês seleciona o dump; o padrão é hoje. Prefira um mês passado
# para dados completos — o mês corrente pode ainda não estar publicado.
df_ = InformeDiarioReader(date_ref=date(2025, 1, 15)).read()

print(df_.dtypes)
print(df_.head())

Converter valores monetários para Decimal

As colunas monetárias vêm como texto exato; converta no ponto em que for calcular:

from decimal import Decimal

df_["VL_PATRIM_LIQ"] = df_["VL_PATRIM_LIQ"].map(Decimal)

Persistir o artefato bruto (camada bronze)

Sem path_raw o ZIP é baixado num diretório temporário e descartado. Informando um caminho, o artefato bruto e intacto (o .zip e o CSV extraído) é gravado ali e mantido, antes de qualquer parsing — veja a visão geral da leitura.

from pathlib import Path

df_ = InformeDiarioReader(
    date_ref=date(2025, 1, 15),
    path_raw=Path("/data/bronze/cvm/informe_diario/202501"),
).read()

Ajustar o timeout

from filings_cvm.ingestion.fi import InformeDiarioReader

reader = InformeDiarioReader(date_ref=date(2025, 1, 15))
df_ = reader.read(int_timeout_s=60)   # timeout de download maior

O read levanta OSError (falha de download), ContractError (CSV viola o contrato) ou ValueError (o ZIP não contém CSV) — falha cedo, sem devolver dados parciais.