Como consultar dados da CVM em linguagem natural

Perguntar “quais empresas tiveram lucro em 2019?” e receber a resposta com números oficiais, sem escrever SQL. Este tutorial mostra o caminho completo: baixar as Demonstrações Financeiras Padronizadas da CVM, tratar os arquivos, montar um banco de dados local e conectar o querychat, pacote da Posit que traduz perguntas em consultas SQL. Inclui os cuidados de tratamento que separam um número correto de um número apenas plausível.

É possível perguntar "quais empresas tiveram lucro em 2019?" e receber a resposta com números tirados das demonstrações financeiras oficiais, sem escrever uma linha de SQL. O caminho é conectar um modelo de linguagem a um banco de dados montado com informações públicas da Comissão de Valores Mobiliários (CVM).

Neste tutorial mostramos como fazer isso com o querychat, um pacote da Posit que traduz perguntas em consultas SQL. O resultado é um sistema que responde sobre o balanço de centenas de companhias abertas brasileiras, exibindo sempre o código que gerou cada número.

Gráfico das dez maiores empresas por lucro em 2019 segundo dados da CVM, com a Petrobras liderando com 41 bilhões de reais
As dez maiores companhias abertas por lucro em 2019. Fonte: CVM, Demonstrações Financeiras Padronizadas.

Esse gráfico saiu de uma pergunta digitada em português. A Petrobras aparece com R$ 41 bilhões de lucro em 2019, seguida por Ambev e Eletrobras. O tutorial abaixo mostra o caminho até esse resultado.

Quer reproduzir este resultado?

O notebook completo em Python (download automático dos dados da CVM, tratamento dos arquivos, montagem do banco e configuração do querychat) vai para os assinantes do Boletim AM. Assine, é gratuito, e receba o código pronto para rodar no e-mail.

Assinar o Boletim AM e receber o código →

Como o querychat transforma pergunta em consulta

O querychat é um pacote de código aberto da Posit, disponível em R e em Python. Ele resolve um problema específico: dar acesso a uma base de dados para quem não domina SQL.

O ciclo de uma pergunta tem quatro etapas. O usuário escreve em linguagem natural, o modelo de linguagem traduz aquilo em uma consulta SQL, a consulta roda no banco de dados e o resultado volta acompanhado do código que o produziu.

A quarta etapa é a que sustenta a confiança no sistema. O modelo não inventa os números da resposta: ele escreve a consulta, e quem calcula é o banco de dados. Como o SQL fica visível, dá para conferir se a pergunta foi interpretada do jeito certo.

O arranjo tem duas propriedades úteis para quem lida com informação sensível. Os dados não são enviados ao modelo, que recebe apenas a estrutura das tabelas e a pergunta, com os valores permanecendo no banco. E as ferramentas disponíveis ao modelo são somente de leitura, o que impede comandos que alterem ou removam registros.

Diagrama do fluxo do querychat: a pergunta em português vai para o modelo de linguagem, que recebe o esquema das tabelas e escreve a consulta SQL, executada no banco SQLite local que devolve a resposta com o SQL à vista
As cinco etapas de uma pergunta, do enunciado em português até a resposta auditável.

O diagrama deixa claro o ponto que costuma gerar dúvida sobre privacidade. O modelo de linguagem trabalha apenas com o esquema, que são os nomes das tabelas e das colunas. Os valores ficam no banco, dentro da sua máquina, e é lá que o cálculo acontece.

Os dados: o que a CVM publica

A base do exercício são as Demonstrações Financeiras Padronizadas, documento que toda companhia de capital aberto é obrigada a enviar anualmente à CVM. São dados públicos, gratuitos, e cobrem centenas de empresas.

Usamos três demonstrativos. O Balanço Patrimonial Ativo registra bens e direitos da empresa. O Balanço Patrimonial Passivo traz obrigações e patrimônio líquido. E a Demonstração do Resultado apresenta receitas, custos e o lucro do período.

Os arquivos vêm em formato longo, o que significa que cada linha corresponde a uma conta contábil de uma empresa em um ano. Uma mesma companhia aparece em dezenas de linhas, e o valor desejado é localizado pelo código da conta. O lucro do período, por exemplo, é a conta 3.11; a receita de vendas é a 3.01.

O tratamento dos dados, etapa por etapa

Baixar os arquivos é a parte fácil. O trabalho real está no tratamento, e cada ajuste feito aqui resolve um problema que, se ignorado, produz números errados sem dar nenhum aviso.

Codificação e separador decimal

Os arquivos da CVM usam codificação latina e vírgula como separador decimal, padrão brasileiro. Sem informar isso na leitura, os acentos são corrompidos e os valores numéricos entram como texto, o que inviabiliza qualquer cálculo.

Individual ou consolidado

A CVM publica dois arquivos por demonstrativo. O individual traz apenas a controladora; o consolidado inclui as controladas. A mesma empresa aparece nos dois, com valores diferentes: a Petrobras registra R$ 40,1 bilhões de lucro no individual e R$ 41,0 bilhões no consolidado.

Ler os dois arquivos faria cada companhia surgir duplicada, com dois lucros distintos e nenhuma indicação de qual usar. Optamos pelo consolidado, que é a visão habitual em análises de empresas listadas.

Escala da moeda

Este é o ajuste mais traiçoeiro. Uma coluna dos arquivos informa se o valor está em unidades ou em milhares de reais, e as companhias não seguem um padrão único: algumas reportam em reais, outras em milhares.

Comparar os valores brutos sem essa correção produz rankings sem sentido, colocando empresas de porte médio à frente das maiores do país. Nada no processamento acusa o erro, e o resultado parece plausível. A correção é simples, e consiste em multiplicar por mil os valores marcados como milhares.

Ordem do exercício

Cada arquivo anual traz o exercício mais recente e o anterior. Como baixamos vários anos, o exercício anterior já consta no arquivo do ano passado, e manter os dois faria o mesmo número ser contado duas vezes. Ficamos apenas com o registro mais recente de cada ano.

Ao fim do processo, os dados tratados vão para um banco SQLite, um arquivo único na pasta de trabalho, com uma tabela por demonstrativo. Nesta execução foram 29.414 registros na Demonstração do Resultado, 53.565 no ativo e 92.281 no passivo, cobrindo 453 companhias.

A descrição dos dados é o que faz a diferença

Conectar o querychat ao banco exige três elementos: a conexão, o modelo de linguagem e a descrição dos dados. O terceiro é o que mais afeta a qualidade das respostas, e costuma ser o mais negligenciado.

As colunas da CVM têm nomes abreviados que não são autoexplicativos. VL_CONTA, DENOM_CIA, CD_CONTA: sozinhos, esses rótulos não dizem ao modelo o que significam. Descrever cada coluna e indicar quais códigos correspondem a lucro, receita ou ativo total é o que transforma consultas erráticas em consultas precisas.

Essa descrição funciona como o briefing que se daria a um analista recém-chegado antes de pedir a primeira análise. Quanto mais claro o contexto, menor a chance de a pessoa buscar o número errado.

Um detalhe prático desse briefing: orientamos o modelo a filtrar pelo código da conta, não pela descrição em texto, porque os arquivos da CVM contêm variações de grafia e erros de digitação. Há registros com "Receita de Venda de Bens e/ou Seviços", sem o "r". O código da conta é padronizado e não sofre desse problema.

O que as respostas revelam

Com o sistema montado, as perguntas produzem resultados verificáveis. A comparação entre 2019 e 2020 é um bom teste, porque o período cobre o impacto da pandemia sobre os balanços.

Gráfico da variação do lucro das companhias abertas entre 2019 e 2020, com a Petrobras registrando queda de 34,7 bilhões de reais e a Vale alta de 33,6 bilhões
Maiores variações de lucro entre 2019 e 2020, em R$ bilhões. Fonte: CVM, Demonstrações Financeiras Padronizadas.

A Petrobras concentra a maior queda, com R$ 34,7 bilhões a menos. Companhias aéreas e educação aparecem logo atrás, o que é coerente com os setores mais atingidos pelas restrições. Na direção oposta, a Vale ganhou R$ 33,6 bilhões, puxada pelo preço do minério de ferro.

Há um cuidado metodológico embutido nesse gráfico. Nem todas as companhias aparecem nos dois exercícios: são 367 empresas com lucro declarado em 2019 e 435 em 2020. Comparar a soma de cada ano confrontaria conjuntos diferentes de empresas e produziria uma conclusão equivocada, sugerindo até crescimento agregado onde houve queda. A comparação correta usa apenas as 359 companhias presentes em ambos os anos, e aí o lucro somado cai de R$ 152,9 bilhões para R$ 107,7 bilhões.

Empresa Lucro 2019 (R$ bi) Lucro 2020 (R$ bi) Variação
Petrobras 40,97 6,25 −84,8%
Ambev 12,19 11,73 −3,7%
Eletrobras 10,74 6,39 −40,5%
Itaúsa 10,57 7,34 −30,5%
BB Seguridade 6,66 3,85 −42,2%
JBS 6,46 4,65 −28,0%
Telefônica Brasil 5,00 4,77 −4,6%
CSN Mineração 3,66 4,03 +10,0%

As oito maiores empresas de 2019 e seu resultado no ano seguinte. Fonte: CVM.

As ferramentas por trás

querychat — traduz as perguntas em SQL, executa no banco e devolve o resultado com o código à vista.
chatlas — padroniza o acesso aos modelos de linguagem, o que permite trocar de provedor mudando uma linha.
pandas — faz a leitura e o tratamento dos arquivos da CVM.
SQLAlchemy — conecta o banco SQLite ao querychat, permitindo consultar sob demanda em vez de carregar tudo na memória.

O que o exercício revela

  • O contexto vale mais que o modelo. Boa parte dos erros de consulta desaparece ao explicar o significado das colunas. Trocar por um modelo mais caro raramente resolve o que uma boa descrição resolve.
  • O tratamento dos dados continua sendo o trabalho. Escala da moeda, escolha entre individual e consolidado, amostras diferentes entre anos: nenhuma ferramenta de linguagem natural identifica esses problemas por você.
  • O SQL visível é o mecanismo de controle. Uma consulta que filtra a conta errada devolve um número plausível e incorreto. Ler o código gerado leva segundos e mostra exatamente qual conta foi somada e qual período entrou no cálculo.

Considerações finais

Este exercício mostra algo que era impensável há poucos anos: com dados públicos e um punhado de linhas de código, monta-se uma interface de consulta que qualquer pessoa da equipe usa, sem treinamento em SQL.

O Python é a ferramenta certa para esse tipo de trabalho porque reúne, no mesmo ambiente, a coleta dos dados, o tratamento, a conexão com o banco e a camada de inteligência artificial. Não é preciso alternar entre programas nem exportar planilhas entre etapas.

O alcance vai além deste exercício. O mesmo caminho, que consiste em coletar, tratar, armazenar e consultar, se repete em quase todo problema de análise de dados. O que muda é a aplicação:

  • Analista de investimentos: compara indicadores de dezenas de companhias sem montar planilhas manuais a cada trimestre.
  • Economista: cruza séries macroeconômicas com dados setoriais de empresas, em uma base própria.
  • Controller e área financeira: abre os números da empresa para consulta do time comercial, sem virar gargalo de relatórios.
  • Auditoria e risco: investiga inconsistências contábeis conferindo a consulta que produziu cada número.
  • Jornalista de dados: apura sobre balanços de companhias abertas com dados oficiais e rastreáveis.

Aprender a linguagem é o que abre a porta para todas essas frentes.

Você viu como funciona. Agora aprenda a construir

Coletar dados públicos, tratar arquivos que vêm fora do padrão, montar um banco e conectar modelos de linguagem: é esse o percurso que a formação ensina, do zero, com aplicações em economia e finanças. Quem quer acesso a todas as formações tem o AM Black, a assinatura anual.

Conheça a formação →Ver o AM Black →

Leia também:

 

Compartilhe esse artigo

Facebook
Twitter
LinkedIn
WhatsApp
Telegram
Email
Print
Análise Macro © 2011 / 2026

comercial@analisemacro.com.br – Rua Visconde de Pirajá, 414, Sala 718
Ipanema, Rio de Janeiro – RJ – CEP: 22410-002

como podemos ajudar?

Preencha os seus dados abaixo e fale conosco no WhatsApp