Skip to content

CDA FIIM/FIE — Posições por lote e aplicações em fundos de índice

Stable ID: cvm.fundos.cda_fi/fiim

Contexto semântico

Nome: CDA FIIM/FIE — Posições por lote e aplicações em fundos de índice

O que contém: Posições de lotes de ativos e aplicações do fundo em instrumentos de investimento vinculados ao layout FIIM/FIE, com quantidade, custo e valor de mercado por lote quando publicados.

Por que consultar: Use para investigar posições de FIIM/FIE e exposições cuja unidade analítica é o lote, não apenas o ativo agregado.

Escopo e limitações: A granularidade por lote é esperada; somas sem as dimensões do lote podem duplicar ou ocultar posições contraditórias.

Aliases e nomes oficiais: FIIM, FIE, fiim, lotes de posição

Evidências:

  • catalogo/cvm.yml — cda_fi/fiim
  • docs/catalog/deep_docs.yml — cda_fi/fiim
  • https://dados.cvm.gov.br/dataset/fi-doc-cda

Comece aqui: guia de acesso aos dados

Readiness (label, not a promise): declared:tolerada_com_residuo · materialized:none · queryable:unknown

Declared (catalog YAML)

field value
dataset cda_fi
parte historico_1822 layout zip_multi_tabela
parte historico_1822 vigencia ate=202212, de=201801
chave (parte historico_1822) tp_fundo, cnpj_fundo, dt_comptc, tp_aplic, tp_ativo, cd_ativo, ds_ativo, dt_venc, cpf_cnpj_emissor, emissor, tp_negoc, dt_ini_vigencia, cd_selic, id_doc
chave_status (parte historico_1822, declared) tolerada_com_residuo
max_linhas_excedentes (parte historico_1822) 20
max_grupos_residuais (parte historico_1822) 5
politica_dedup_silver (parte historico_1822) keep_first
dt_linha_desde (parte historico_1822) 2019-01-01
source URL (parte historico_1822) https://dados.cvm.gov.br/dados/FI/DOC/CDA/DADOS/HIST/cda_fi_{aaaa}.zip
parte corrente_2023 layout zip_multi_tabela
parte corrente_2023 vigencia ate=202311, de=202301
chave (parte corrente_2023) tp_fundo, cnpj_fundo, dt_comptc, tp_aplic, tp_ativo, cd_ativo, ds_ativo, dt_venc, cpf_cnpj_emissor, emissor, tp_negoc
chave_status (parte corrente_2023, declared) tolerada_com_residuo
max_linhas_excedentes (parte corrente_2023) 20
max_grupos_residuais (parte corrente_2023) 15
politica_dedup_silver (parte corrente_2023) keep_first
source URL (parte corrente_2023) https://dados.cvm.gov.br/dados/FI/DOC/CDA/DADOS/cda_fi_{aaaamm}.zip
parte corrente_2024 layout zip_multi_tabela
parte corrente_2024 vigencia ate=202401, de=202312
chave (parte corrente_2024) tp_fundo_classe, cnpj_fundo_classe, dt_comptc, tp_aplic, tp_ativo, cd_ativo, ds_ativo, dt_venc, cpf_cnpj_emissor, emissor, tp_negoc
chave_status (parte corrente_2024, declared) tolerada_com_residuo
max_linhas_excedentes (parte corrente_2024) 20
max_grupos_residuais (parte corrente_2024) 10
politica_dedup_silver (parte corrente_2024) keep_first
source URL (parte corrente_2024) https://dados.cvm.gov.br/dados/FI/DOC/CDA/DADOS/cda_fi_{aaaamm}.zip
parte corrente_202402 layout zip_multi_tabela
parte corrente_202402 vigencia ate=202604, de=202402
chave (parte corrente_202402) tp_fundo_classe, cnpj_fundo_classe, dt_comptc, tp_aplic, tp_ativo, cd_ativo, ds_ativo, dt_venc, cpf_cnpj_emissor, emissor, tp_negoc
chave_status (parte corrente_202402, declared) tolerada_com_residuo
max_linhas_excedentes (parte corrente_202402) 20
max_grupos_residuais (parte corrente_202402) 350
politica_dedup_silver (parte corrente_202402) keep_first
source URL (parte corrente_202402) https://dados.cvm.gov.br/dados/FI/DOC/CDA/DADOS/cda_fi_{aaaamm}.zip
parte corrente_202605 layout zip_multi_tabela
parte corrente_202605 vigencia ate=(unknown — not declared anywhere), de=202605
chave (parte corrente_202605) tp_fundo_classe, cnpj_fundo_classe, dt_comptc, tp_aplic, tp_ativo, cd_ativo, ds_ativo, dt_venc, cpf_cnpj_emissor, emissor, tp_negoc
chave_status (parte corrente_202605, declared) tolerada_com_residuo
max_linhas_excedentes (parte corrente_202605) 20
max_grupos_residuais (parte corrente_202605) 250
politica_dedup_silver (parte corrente_202605) keep_first
source URL (parte corrente_202605) https://dados.cvm.gov.br/dados/FI/DOC/CDA/DADOS/cda_fi_{aaaamm}.zip

Divergent declarations: this table name is declared in more than one parte with differing chave/status — inspect each parte above.

Operator notes (verbatim from the catalog comments)

parte historico_1822

# O zip publico atual nao carrega cda_fiim_2018.csv. vigencia impede
# que o unpacker exija o membro antes de 2019; dt_linha_desde mantem
# a mesma fronteira no split por linha e no silver.
# TOLERADA_COM_RESIDUO (medido 2026-08-25, zips 2018/2022, split por
# DT_COMPTC): a chave base de 11 colunas (mesma da corrente_2023)
# deixa 8 grupos residuais em 201812 — todos de fundos de indice
# (ETFs) carregando LFT CD_ATIVO=210100 em multiplas series. Fechado
# somando DT_INI_VIGENCIA (serie/vencimento do titulo publico — o
# mesmo LFT em datas 2019..2023 e ativos distintos), CD_SELIC (codigo
# Selic do titulo — separa series NTN-B com mesmo DT_VENC, ex. IRF-M
# P2 CD_SELIC 100000 vs 950199) e ID_DOC (identificador do documento
# de declaracao — separa fundo com 2 documentos no mesmo mes, ex.
# MIRAE 202206 ID_DOC 322354/322376). excess=0 em 201806/201812;
# 1 grupo residual em 202206 e 202212 (HASHDEX CRYPTO METAVERSE,
# CD_ATIVO="META 11 CLA", EMISSOR="HASHDEX META 11", DT_VENC
# 2050-12-31: 2 lotes do mesmo ativo com QT_POS_FINAL/VL_MERC_POS_FINAL
# distintos — posicao por LOTE, residuo e a regra, nao excecao; nenhuma
# coluna separa os 2 lotes). exact_dup_groups=0 em toda medicao.
# Colunas estruturais NULL (whitelisted): em 2018 o fiim e quase
# inteiro titulo publico (TP_ATIVO/DS_ATIVO/DT_VENC/CD_SELIC 100%
# NULL — CD_ATIVO+DT_INI_VIGENCIA carregam a identidade); em 2022
# diversifica (CD_ATIVO 14.7% NULL, EMISSOR 85.5%, CPF_CNPJ_EMISSOR
# 92.9%, DT_VENC 89.2%, DS_ATIVO 90.5% — ativo sem codigo publico;
# TP_NEGOC 1.71% NULL). TP_APLIC/TP_FUNDO/CNPJ_FUNDO/DT_COMPTC/ID_DOC
# sempre preenchidos.

parte corrente_2023

# TOLERADA_COM_RESIDUO (re-medido 2026-08, zips reais 202301/202311):
# excess=10 em 202301 (4,467) e 2 em 202311 (4,683); 0 grupos
# exatos, 3 e 2 grupos residuais nao-exatos. DECISAO DE DOMINIO
# (usuario, 2026-08-20): FIIM/FIE carrega uma posicao por LOTE, nao
# por ativo — o mesmo titulo negociado em momentos diferentes tem
# agio/deságio proprio e portanto valor diferente na mesma
# competencia (ex.: mesmo emissor/vencimento/tipo, dois lotes com
# taxas efetivas distintas). Residuo e a regra, nao excecao.
# Confirmado nos 3 grupos de 202301: nenhum e duplicata — todos tem
# QT_POS_FINAL/VL_MERC_POS_FINAL genuinamente diferentes entre as
# linhas do mesmo grupo (ex.: fundo 45.823.821/0001-66, CD_ATIVO
# "210100", 8 linhas de 743 a 3.838 unidades — a soma das 8 bate
# 99,99% do VL_PATRIM_LIQ do fundo, R$272,55mi vs R$272,52mi — se
# fosse duplicata a soma estouraria o PL). excess_excl_null_keys=0
# em toda medicao: o residuo so aparece onde colunas da propria
# chave sao NULL. NULL nao e confidencialidade temporaria (DT_CONFID_APLIC,
# ~3 meses apos dt_comptc, ja modelada pela tabela fie_confid/confid
# separada) — e estrutural: ativo ilíquido/privado sem codigo
# publico catalogado pela CVM (ex.: lote imobiliario so com
# CD_ATIVO de registro, sem TP_ATIVO/DS_ATIVO/EMISSOR). Whitelisted
# com % medido em 202301: tp_ativo 5,7%, cd_ativo 13,2%, ds_ativo
# 90,1%, dt_venc 89,4%, cpf_cnpj_emissor 94,4%, emissor 86,9%. Cap
# excesso exato 20 (medido 0 — exact_dup_groups=0 em toda
# competencia medida, nunca houve duplicata byte-identica aqui).
# Cap grupos residuais 15 (~5x o maximo desta era, 3) — ver
# corrente_202402 para o cap desta era mais ativa (ate 238 grupos).
# Cada grupo residual vai para _residuos.json.

parte corrente_2024

# TOLERADA_COM_RESIDUO (re-medido 2026-08, zips reais 202312/202401):
# excess=2 em 202312 (4,622) e 2 em 202401 (4,712); 0 grupos
# exatos, 2 grupos residuais nao-exatos em cada. Mesma decisao de
# dominio da era corrente_2023 (ver la o raciocinio completo e o
# exemplo com verificacao de VL_PATRIM_LIQ): FIIM/FIE e posicao por
# LOTE, residuo e a regra (lotes com agio/deságio proprio, valor
# diferente), nao excecao. excess_excl_null_keys=0: residuo so
# onde a propria chave e NULL — estrutural (ativo sem codigo
# publico), nao confidencialidade temporaria (essa ja e coberta
# por fie_confid/confid). Whitelisted com % medido: tp_ativo
# 3,5-3,7%, cd_ativo ~13%, ds_ativo ~90%, dt_venc ~91%,
# cpf_cnpj_emissor ~94%, emissor ~87%. Cap excesso exato 20
# (medido 0). Cap grupos residuais 10 (~5x o maximo desta era, 2).

parte corrente_202402

# TOLERADA_COM_RESIDUO (re-medido 2026-08, zips reais): excess=406
# em 202603 (22,150) e 229 em 202604 (18,278); 0 grupos exatos, 238
# e 114 grupos residuais nao-exatos. Mesma decisao de dominio da
# era corrente_2023 (ver la o exemplo com VL_PATRIM_LIQ): FIIM/FIE
# e posicao por LOTE, residuo e a regra. excess_excl_null_keys=0:
# residuo so onde a propria chave tem NULL (FIAGRO CPR com
# identificadores NULL diferindo so em VL_MERC_POS_FINAL; ativos
# externos tipo IT NOW RUSSELL com cd_ativo=1, distinguiveis so
# por emissor/QT_POS_FINAL) — estrutural, nao confidencialidade
# temporaria (essa e coberta por fie_confid/confid, separadas).
# Whitelisted com % medido: tp_ativo 35-41%, cd_ativo 72-75%,
# ds_ativo 68-71%, dt_venc 89-93%, cpf_cnpj_emissor 53-55%,
# emissor 52-53%, tp_negoc 32-36% (esta ultima so aparece nesta
# era e na corrente_202605). Cap excesso exato 20 (medido 0). Cap
# grupos residuais 350 (~1,5x o maximo desta era, 238 — a mais
# ativa medida; ajustar se o backfill historico revelar volume
# maior).

parte corrente_202605

# TOLERADA_COM_RESIDUO (sweep 202605-202607, todos os meses locais):
# maximo em 202606 = 18.503 linhas, 292 excess totais, 1 excess
# exato e 210 grupos residuais nao-exatos; 202605=78/64 e
# 202607=50/45 (excess/grupos residuais). Caps 20/250. Mesma
# decisao de dominio da era corrente_2023: FIIM/FIE e posicao por LOTE;
# residuo e a regra. excess_excl_null_keys=0: residual so onde a
# propria chave tem NULL (FIAGRO CPR com colunas NULL diferindo so
# em valor; ativos externos distinguiveis apenas por
# emissor/QT_POS_FINAL) — estrutural, nao confidencialidade
# temporaria (coberta por fie_confid/confid, separadas).
# Whitelisted com % medido na versao anterior: tp_ativo 40%,
# cd_ativo 67%, ds_ativo 72%, dt_venc 94%, cpf_cnpj_emissor 53%,
# emissor 51%, tp_negoc 35%. Cap excesso exato 20 (medido 0). Cap
# residual 185 (~1,5x o maximo mais recente, 122).

Observed runs (from meta/runs manifests)

Last good run:

field value
timestamp 20261002T134942
outcome ok
exit_code 0
rows_written 7271029
source_sha256
manifest_path C:\Users\plini\Repos\ciano-lake\data\meta\runs\cda_fi\20261002T134942.json
competencia (scoped) (unscoped — not period-specific proof)

Latest failed attempt (kept distinct from the last good run):

field value
timestamp 20260825T173137
outcome error
exit_code 1
error blc_1: Quality check failed: [PASS] row_count: 18,344 rows (validates > 0)
[FAIL] chave_status: chave_status 'pendente' — tabela nao promove. Bloqueada por decisao de catalogo (chave incompleta ou nao verificada), nao por regressao de dados. Ver catalogo/cvm.yml para a chave declarada e a nota. Gate nao executou a query de unicidade.; blc_2: Quality check failed: [PASS] row_count: 29,010 rows (validates > 0)
[FAIL] chave_status: chave_status 'pendente' — tabela nao promove. Bloqueada por decisao de catalogo (chave incompleta ou nao verificada), nao por regressao de dados. Ver catalogo/cvm.yml para a chave declarada e a nota. Gate nao executou a query de unicidade.; blc_3: Quality check failed: [PASS] row_count: 432 rows (validates > 0)
[FAIL] chave_status: chave_status 'pendente' — tabela nao promove. Bloqueada por decisao de catalogo (chave incompleta ou nao verificada), nao por regressao de dados. Ver catalogo/cvm.yml para a chave declarada e a nota. Gate nao executou a query de unicidade.; blc_4: Quality check failed: [PASS] row_count: 49,734 rows (validates > 0)
[FAIL] chave_status: chave_status 'pendente' — tabela nao promove. Bloqueada por decisao de catalogo (chave incompleta ou nao verificada), nao por regressao de dados. Ver catalogo/cvm.yml para a chave declarada e a nota. Gate nao executou a query de unicidade.; blc_5: Quality check failed: [PASS] row_count: 11,030 rows (validates > 0)
[FAIL] chave_status: chave_status 'pendente' — tabela nao promove. Bloqueada por decisao de catalogo (chave incompleta ou nao verificada), nao por regressao de dados. Ver catalogo/cvm.yml para a chave declarada e a nota. Gate nao executou a query de unicidade.; blc_6: Quality check failed: [PASS] row_count: 5,818 rows (validates > 0)
[FAIL] chave_status: chave_status 'pendente' — tabela nao promove. Bloqueada por decisao de catalogo (chave incompleta ou nao verificada), nao por regressao de dados. Ver catalogo/cvm.yml para a chave declarada e a nota. Gate nao executou a query de unicidade.; blc_7: Quality check failed: [PASS] row_count: 58 rows (validates > 0)
[FAIL] chave_status: chave_status 'pendente' — tabela nao promove. Bloqueada por decisao de catalogo (chave incompleta ou nao verificada), nao por regressao de dados. Ver catalogo/cvm.yml para a chave declarada e a nota. Gate nao executou a query de unicidade.; blc_8: Quality check failed: [PASS] row_count: 43,997 rows (validates > 0)
[FAIL] chave_status: chave_status 'pendente' — tabela nao promove. Bloqueada por decisao de catalogo (chave incompleta ou nao verificada), nao por regressao de dados. Ver catalogo/cvm.yml para a chave declarada e a nota. Gate nao executou a query de unicidade.
manifest_path C:\Users\plini\Repos\ciano-lake\data\meta\runs\cda_fi\20260825T173137.json
competencia (scoped) (unscoped)

Observed residuals (tolerada_com_residuo evidence)

(none observed — either the table has no residual tolerance, or the coverage inventory has not run; absence is not proof of absence)

Materialized (coverage inventory, per environment)

(no coverage inventory available — run tools/coverage_inventory.py collect and pass the JSONL to the publisher; without it nothing is claimed about what physically exists)

Deep documentation (curated, grounded in the declarations above)

Fund-of-funds and derivative lot-level positions. Duplicates are the expected shape of lot data: measured exact duplicate groups = 0 across every competência probed; residual groups are genuinely contradictory lot rows (same lot, two published quantities) — CVM's contradiction, not a key design gap. Rows are per lot, so summing positions is only safe with the lot semantics in mind.

Grain: one row per position lot (tp_aplic/tp_ativo/cd_ativo + lot attributes)

Units: Quantities in shares/lots (QT_); values in BRL (VL_). Position identity for public bonds carries CD_ATIVO + DT_INI_VIGENCIA (series), CD_SELIC and ID_DOC (declaration document).

Safe-join guidance:

  • Join only on the declared 14-column key or a declared subset; there is no single position identifier. Summing VL_MERC_POS_FINAL without the lot dimension double-counts contradictory lot rows collapsed by silver keep_first.
  • Identification columns (cd_ativo/ds_ativo/dt_venc/emissor/...) are structurally NULL for illiquid/private assets (whitelisted per era); NULL there is not a data error.

Evidence references:

  • catalogo/cvm.yml — fiim entries (corrente + historico_1822, measured 2026-08-25)
  • Traycer artifact design-tolerada-com-residuo (VL_PATRIM_LIQ-sum verification method)

Postgres-queryable

(unknown — publication state is a publisher fact, filled at publication time; it is never inferred from materialization)