Recompra de Ações — leitura¶
Leitura (← CVM) dos programas de recompra de ações das companhias abertas
(cia_aberta_recompra_acoes.zip), publicados no
portal de dados abertos.
Ver também: Referência da API · Uso · os datasets
DOCdo mesmo root: IPE, VLMO, FCA, CGVN, FRE, DFP, ITR.
Com este dataset o portal root cia_aberta/ fica COMPLETO.
Os 3 membros¶
ZIP snapshot, 0,09 MB, nenhum ragged. Os três se juntam por ID_Programa.
| reader | membro | cols | linhas | o que é |
|---|---|---|---|---|
RecompraAcoesReader |
cia_aberta_recompra_acoes |
11 | 1.916 | o programa |
RecompraAcoesIntermediariosReader |
..._intermediarios |
3 | 4.269 | corretoras do programa |
RecompraAcoesQuantidadesReader |
..._quantidades |
5 | 2.381 | quantidades por tipo/classe |
ID_Programa é único no registro (1.916 distintos em 1.916 linhas) e repete nos satélites —
um programa pode listar várias corretoras e vários tipos de ação.
⚠️⚠️ Este dataset NÃO segue os vizinhos do DOC — quatro divergências medidas¶
- É SNAPSHOT ⇒ sem
date_ref. Os 7 datasets doDOCsão<ds>_cia_aberta_AAAA.zip; este tem URL fixa, no molde dosCAD. Um único arquivo cobre de 1997 até hoje (~28 anos), e a CVM sobrescreve no lugar — só umpath_rawpersistido guarda o retrato de um dia. - ⚠️ O nome é INVERTIDO:
cia_aberta_recompra_acoes.zippõe o root primeiro, ao contrário dedfp_cia_aberta_AAAA.zip(dataset primeiro). Derivar do padrão doDOCerraria. - ⚠️ Colunas em CamelCase (
CNPJ_Companhia,Data_Deliberacao) — como o CGVN, e não como DFP/ITR/FCA, que usamCNPJ_CIA/DT_REFER. Não há convenção do root, só medição por dataset; o teste usa o DFP como contra-exemplo vivo. - ⚠️ Dois dos três membros não têm NENHUMA coluna de data — só o registro tem, e tem duas.
⚠️⚠️ quantidades não declara coluna de CNPJ — porque não tem nenhuma¶
O membro identifica apenas o programa a que pertence. Seu tuple_cnpj_cols é vazio, e isso é
decisão medida, não esquecimento: declarar uma coluna inventaria algo que a fonte não tem (e um
contrato que nomeia coluna inexistente falha toda leitura).
Como "vazio" e "esquecido" são indistinguíveis num diff, o teste afirma os três de uma vez — o
vazio e os dois irmãos que declaram (CNPJ_Companhia e CNPJ_Intermediario, ambos 100%
válidos: 355 e 116 valores distintos).
Tipagem¶
Colunas de data: só no registro — Data_Deliberacao e Data_Final_Prazo, ambas 100% ISO e
sem branco. Todo o restante é texto exato, incluindo ID_Programa (identificador) e
Quantidade_* (contagens).
⚠️ Várias colunas chegam parcialmente vazias, e vazio volta vazio — sem placeholder, sem zero:
| coluna | vazias |
|---|---|
Classe_Acao |
2.322 / 2.381 (97,5%) — ação ordinária não tem classe |
Quantidade_Acoes_Preferenciais |
1.064 / 1.916 |
Quantidade_Acoes_Ordinarias |
405 / 1.916 |
Finalidade_Compra |
306 / 1.916 |
Motivo |
304 / 1.916 |
Tipo_Operacao |
302 / 1.916 |
⚠️ META¶
meta_cia_aberta_recompra_acoes.zip — medida de duas formas independentes: HEAD 200, e a
listagem do diretório META/, onde é o único arquivo. As outras 5 grafias candidatas dão
404, inclusive o infixo _txt que é o correto do DFP e do ITR neste mesmo root.
Uso¶
from pathlib import Path
from filings_cvm.ingestion.cia_aberta import (
RecompraAcoesIntermediariosReader,
RecompraAcoesQuantidadesReader,
RecompraAcoesReader,
)
# O registro dos programas (sem date_ref — é um snapshot):
df_programas = RecompraAcoesReader().read()
# Guardando o .zip cru na bronze (a CVM sobrescreve o arquivo no lugar):
df_programas = RecompraAcoesReader(path_raw=Path("/data/bronze/cvm/recompra")).read()
# Os satélites, para juntar por ID_Programa a jusante:
df_corretoras = RecompraAcoesIntermediariosReader().read()
df_quantidades = RecompraAcoesQuantidadesReader().read()
# Só os programas em andamento:
df_ativos = df_programas[df_programas["Situacao"] == "Em Andamento"]