Estes relatórios seguem o padrão COSIF e devem corresponder à estrutura XML definida pelo BACEN. Você pode adaptar a lógica ao seu próprio modelo de dados, mas o formato XML deve ser respeitado.
O que é o CADOC 4111?
O CADOC 4111 é um documento regulatório exigido pelo Banco Central do Brasil (BACEN) que reporta saldos diários de contas contábeis agrupados por código COSIF (Plano Contábil das Instituições do Sistema Financeiro Nacional).
O que o BACEN espera receber
- Saldos consolidados por código COSIF
- Data-base do relatório
- CNPJ da instituição (primeiros 8 dígitos)
- Tipo de remessa (
I= Inclusão,S= Substituição)
Requisitos de envio
| Documento | Prazo | Código STA |
|---|---|---|
| 4111 | Dia seguinte à data de referência (ou próximo dia útil) | ACOS011 |
O código STA identifica o tipo de documento no sistema de transmissão do BACEN. Use
ACOS011 ao enviar o CADOC 4111.Entendendo a estrutura de dados
Antes de construir o template, é essencial entender como os dados são organizados no ledger do Midaz.
Rotas de operação
As rotas de operação funcionam como classificadores contábeis. Cada rota possui:- Identificador único (
id): Usado internamente para relacionar operações - Código COSIF (
code): O código contábil de 10 dígitos que será reportado ao BACEN
Operações
As operações representam movimentações financeiras no ledger. Cada operação contém:- Conta associada (
account_id): Qual conta foi afetada - Rota (
route): ID da rota/classificação contábil aplicada - Saldo após a operação (
available_balance_after): O saldo da conta imediatamente após esta operação - Data e hora (
created_at): Quando a operação ocorreu
Relacionamento entre rotas e operações

Estrutura do CADOC
Formato base
O relatório CADOC deve ser um arquivo XML e deve seguir a estrutura definida pelo BACEN:Campos obrigatórios
Estes campos são obrigatórios e devem ser incluídos:<?xml version="1.0" encoding="UTF-8"?>
Sempre inicia o arquivo. Define a versão do XML e a codificação para que o sistema saiba como ler o conteúdo.
Tag <documento>
Envolve toda a estrutura do CADOC e inclui:
| Campo | Descrição | Formato |
|---|---|---|
codigoDocumento | Identificador fixo | "4111" |
cnpj | Primeiros 8 dígitos do CNPJ | Numérico, 8 posições |
dataBase | Data de referência | YYYY-MM |
tipoRemessa | Tipo de remessa | "I" ou "S" |
Se o seu primeiro envio foi rejeitado por erros, você ainda precisa usar
"I" na próxima tentativa. Use "S" apenas para substituir dados previamente aprovados.<contas>
Agrupa todas as entradas de contas do período de reporte.
Tag <conta>
codigoConta: Código COSIF da rota de operação (10 dígitos numéricos)saldoDia: Saldo consolidado em formato decimal (duas casas decimais)
Lógica de construção do template
Estrutura geral
O template segue uma lógica de agregação em dois níveis:- Primeiro nível: Iterar por todas as rotas de operação disponíveis
- Segundo nível: Para cada rota, somar os saldos das operações vinculadas
Cabeçalho do documento
O cabeçalho do XML deve conter:- Código do documento: Identificador fixo
4111 - CNPJ: Extraído dos dados da organização, limitado aos primeiros 8 dígitos
- Data-base: Data de geração do relatório no formato
YYYY-MM - Tipo de remessa:
Ipara inclusão
Iterando sobre as rotas
O template deve iterar por todas as rotas de operação registradas. Para cada rota:- Verificar o código COSIF: Apenas rotas com um código COSIF válido devem gerar linhas no relatório
- Filtrar operações: Selecionar apenas as operações pertencentes àquela rota específica
- Calcular o saldo: Somar os saldos das operações filtradas
Nem todas as rotas possuem um código COSIF preenchido. Rotas sem código são usadas para controles internos e não devem aparecer no relatório regulatório.
Filtrando operações por rota
A associação entre operações e rotas é feita por meio do identificador da rota. O template usa esse identificador para:- Acessar uma rota específica
- Encontrar todas as operações que referenciam essa rota
- Processar apenas essas operações na agregação
Somando saldos
Para cada conjunto de operações de uma rota, o template soma os saldos disponíveis. O campo utilizado é o saldo disponível após cada operação. A função de agregação itera por todas as operações que atendem aos critérios de filtro (mesma rota) e acumula os valores do campo de saldo.Usando o Reporter
Aqui está o template completo para gerar o CADOC 4111 no Reporter:
Detalhamento do código
Linha 1 - Declaração XML
Linha 2 - Elemento raiz <documento>
codigoDocumento="4111": Identificador fixo do tipo de documentocnpj: Acessa o documento legal da organização e extrai os primeiros 8 caracteres usando o filtroslicedataBase: Gera a data atual no formato exigido pelo BACEN usando a tagdate_timetipoRemessa="I": Indica inclusão de dados
Linha 4 - Início do loop for
op_route: Variável que recebe cada rota durante a iteração (nome escolhido para evitar conflito com o camporoutenas operações)midaz_transaction.operation_route: Coleção de todas as rotas de operação
Linha 5 - Condição if
Linha 6 - Elemento <conta>
codigoConta: Exibe o código COSIF da rota atualsaldoDia: Usa a tagsum_bypara somar saldos, filtrando apenas as operações cuja rota corresponde ao identificador da rota atual (op_route.id)
Linhas 7-8 - Fechamento dos blocos
Referência de tags e filtros
| Elemento | Tipo | Função |
|---|---|---|
{{ variable }} | Expressão | Exibe o valor de uma variável |
{% tag %} | Tag | Executa lógica (loop, condição, agregação) |
|slice:":8" | Filtro | Extrai os primeiros 8 caracteres |
for ... in | Tag | Itera por uma coleção |
if | Tag | Condição de execução |
sum_by ... by ... if | Tag | Soma valores com filtro condicional |
date_time | Tag | Gera data formatada |
Considerações sobre filtro de data
Exemplo de requisição com filtro de data
Para gerar o CADOC 4111 para um dia específico, envie uma requisiçãoPOST /v1/reports com o header X-Organization-Id e o seguinte corpo:
Explicação dos campos
| Campo | Descrição |
|---|---|
templateId | Identificador do template CADOC 4111 registrado no Reporter |
filters.midaz_transaction.operation | Indica que o filtro será aplicado à coleção de operações |
created_at.between | Filtra operações criadas dentro do intervalo especificado |
between[0] | Data e hora de início (meia-noite do dia desejado) |
between[1] | Data e hora de fim (último segundo do dia desejado) |
As datas devem estar no formato ISO 8601 com fuso horário UTC (
Z).Evolução do template e extração de saldos
Estamos trabalhando na evolução do nosso template principal para suportar agregação de saldos em conformidade com o BACEN CADOC 4111, que exige o saldo final do último dia útil. Enquanto essa funcionalidade está sendo desenvolvida, fornecemos uma versão alternativa para extrair esses saldos usando o template a seguir.
Template de extração
Este template auxiliar foi projetado para calcular saldos corretamente, garantindo a conformidade dos seus relatórios por meio dos seguintes passos:- Agrupar operações por conta
- Ordenar registros por data e hora
- Selecionar o último registro de cada conta para obter o saldo final
- Somar os saldos finais por código COSIF
Exemplo de template de extração
Saída da extração
O template exporta todas as operações em formato CSV, contendo:- Identificador da conta
- Alias da conta
- Código COSIF
- Data e hora da operação
- Saldo disponível
Boas práticas para construção de templates
Nomenclatura de variáveis
Use nomes descritivos e únicos para variáveis de iteração, evitando conflitos com nomes de campos das entidades.Validação de campos
Sempre verifique se campos opcionais possuem valores antes de utilizá-los. Campos vazios podem gerar linhas indesejadas no relatório.Formato de data
O BACEN exige datas no formatoYYYY-MM. Certifique-se de configurar o formato corretamente no template.
Tratamento do CNPJ
O CNPJ deve ser apresentado apenas com os primeiros 8 dígitos, sem formatação (pontos, barras ou hifens).Resumo dos componentes
| Componente | Fonte de dados | Uso no template |
|---|---|---|
| CNPJ | Organização (Onboarding) | Cabeçalho do documento |
| Código COSIF | Rota de operação (Transaction) | Identificador da conta |
| Saldo | Operação (Transaction) | Valor a ser agregado |
| Data-base | Função de data atual | Cabeçalho do documento |

