CDA — V4¶
Envio (→ CVM) do padrão CDA V4 (Composição e Diversificação das Aplicações,
PadraoXMLCDANetV4.aspx).
Veja também: Referência da API para cada símbolo público · Uso para instalação e o conceito geral.
Descrição¶
Monte um CdaDocument (um CdaHeader + até 1000 CdaInform, um por fundo/classe, todos da mesma
competência) e serialize com Cda().export(...). O XML usa o namespace urn:cda, COD_DOC=3 e
VERSAO=4.0; o arquivo é gravado em windows-1252.
| Modelo | Tag XML | Papel |
|---|---|---|
CdaDocument |
DOC_ARQ |
header + informs (até 1000 fundos). |
CdaHeader |
CAB_INFORM |
dt_compt em MM/AAAA, dt_gerac_arq em DD/MM/AAAA. |
CdaInform |
INFORM |
Um fundo: cnpj_fdo, vl_pl e as listas de blocos de ativos. |
CdaTitPub / CdaCotas / CdaSwap |
TIT_PUB / COTAS / SWAP |
Blocos 1 a 3. |
CdaDemaisCodif |
DEMAIS_CODIF |
Demais ativos codificados. |
CdaDepPrazoTitIf / CdaTitAgroCredPriv |
DEP_PRAZO_TIT_IF / TIT_AGRO_CRED_PRIV |
Blocos 5 e 6. |
CdaInvExt / CdaDemaisNCodif |
INV_EXT / DEMAIS_N_CODIF |
Blocos 7 e 8. |
CdaAplic, CdaNegoc, CdaPosFim |
APLIC, NEGOC, POS_FIM |
Aplicação, negócios do mês e posição final. |
Ordem dos blocos: o writer sempre emite os blocos na ordem exigida pela CVM (títulos públicos, cotas, swap, demais codificados, depósitos a prazo, agro/crédito privado, exterior, não codificados).
Escalas (truncadas com ROUND_DOWN, vírgula decimal na saída): VL_PL 21 inteiras + 2;
VL_*_NEGOC e MERC_POS_FIM 15 + 2; QTDE_* 15 + 6; TIT_POS_FIX_PR_INDEX, TIT_POS_FIX_CUPOM
e TIT_PRE_FIX_TAXA_CONTR 3 + 6. Passe str/Decimal, nunca float.
Validações vindas da página da CVM:
- Quais
COD_TP_APLICcada bloco aceita (tabela Blocos x Tipos de Aplicações). - Matriz da Tabela A:
EMPR_LIGADA, vendas, aquisições e quantidade final são obrigatórios, opcionais ou proibidos conforme o tipo de aplicação; quantidade e valor andam juntos. - Tabela B: o
COD_TP_ATIVdeve ser compatível com oCOD_TP_APLIC. - Pós-fixado exige
TIT_POS_FIX_INDEX(indexador da Tabela D); pré-fixado exige a taxa contratada.CLASSIF_RISCOexiste se, e somente se,ST_CLASSIF_RISCOéS. - CNPJ/CPF validados por dígito verificador. Conforme a página, zeros à esquerda são omitidos na saída.
- Datas
DD/MM/AAAAprecisam existir no calendário (31/02/2024é recusada), em todos os campos de data. Textos livres e códigos não podem ser vazios, em branco, nem conter tabulação ou quebra de linha, devem caber emwindows-1252e não podem conter caracteres de controle proibidos em XML; a validação recusa antes de gravar, e o arquivo só é aberto depois de o conteúdo estar codificado, então uma falha de codificação nunca apaga um envio anterior (disco cheio no meio da gravação não é coberto). - Quantidades de vendas/aquisições são não negativas;
NEGOCvazio é recusado;ATIVO_EXTsó existe emINV_EXT. NoSWAP,MERC_POS_FIMfica dentro dePOS_FIM(CdaSwapPosFim), como na página. - Valores numéricos nunca aceitam
float.VALOR_AT_EXTé, segundo a página, apenas "campo numérico (float)", sem escala nem faixa: é mantido exato e gravado como informado (vírgula decimal), mas precisa ser finito.
Limites conhecidos (a página da CVM não decide; não são validados):
- Tabelas E (códigos de swap), G (países) e H (bolsas/balcões) não são enumeradas: só a forma
SWP+ 3 caracteres deCOD_SWAPé checada. QTDE_DIAS_CONFIDé limitado a 90 dias; o teto de 30 dias das classes "curto prazo" e "referenciado" depende da classe do fundo, que o documento não carrega.TP_NEGOC(Tabela F: 1 ou 2) é opcional e não é cruzado com a Tabela A; a página não diz quando é obrigatório.CNPJ_INSTIT_FINANCé opcional ("caso exista coobrigação"), sem relação imposta comST_TIT_GARANT_SEGURO.- O tamanho máximo de
COD_SELIC,COD_ATIV,COD_SUBCLASSE,COD_BV_MERC,COD_ATIVO_BV_MERCeDESC_ATIV_VINCnão é informado pela página; só se exige que não sejam vazios. - A página não diz se
LISTA_INFORMouLISTA_ATIVpodem ir vazias; o writer as emite como recebe. O teto de 15 MB do arquivo não é verificado.
Os blocos COTAS, DEP_PRAZO_TIT_IF e INV_EXT não têm a tag COD_TP_APLIC no XML (o tipo é
implícito: 197, 74 e 189), portanto cod_tp_aplic deve ficar vazio neles.
Exemplos¶
Um fundo com uma posição em ações¶
from layouts_cvm import Cda
aplic = dict(
cod_tp_aplic=37,
empr_ligada="N",
qtde_dias_confid=0,
negoc=dict(
tp_negoc=1,
qtde_vendas_negoc="0", vl_vendas_negoc="0",
qtde_aquis_negoc="100", vl_aquis_negoc="3500.00",
),
pos_fim=dict(qtde_pos_fim="100", merc_pos_fim="3550.00"),
)
doc = dict(
header=dict(dt_compt="03/2024", dt_gerac_arq="05/04/2024"),
informs=[
dict(
cnpj_fdo="11.222.333/0001-81",
vl_pl="1000000.00",
demais_codif=[
dict(
cod_ativ="PETR4", cod_tp_ativ=1, dt_ini_vigen="01/01/2020", aplic=aplic
)
],
)
],
)
xml = Cda().export(doc) # devolve a string
Cda().export(doc, "cda_202403.xml") # ou grava o arquivo (windows-1252)