Construtor de Modelos DCF
Visão Geral
Este skill cria modelos DCF de qualidade institucional para valuation de ações, seguindo os padrões da banca de investimento. Cada análise produz um modelo Excel detalhado (com análise de sensibilidade incluída na parte inferior da planilha DCF).
Ferramentas
- Por padrão, use todas as informações fornecidas pelo usuário e servidores MCP disponíveis para obtenção de dados.
Restrições Críticas — Leia Estas Primeiro
Estas restrições se aplicam a toda a construção do modelo DCF. Revise antes de começar:
Ambiente: Office JS vs Python/openpyxl:
- Se estiver executando dentro do Excel (Office Add-in / ambiente Office JS): Use Office JS diretamente — NÃO use Python/openpyxl. Escreva fórmulas via
range.formulas = [["=D19*(1+$B$8)"]]. Nenhuma etapa de recálculo separada é necessária; o Excel calcula nativamente. Userange.format.*para estilo. A mesma regra de fórmulas em vez de valores fixos se aplica: defina.formulas, nunca.values, para células derivadas. - Se estiver gerando um arquivo .xlsx independente (sem sessão Excel ao vivo): Use Python/openpyxl conforme descrito abaixo e execute
recalc.pyantes da entrega. - O restante deste skill usa exemplos openpyxl — traduza para chamadas da API Office JS quando estiver nesse ambiente, mas todos os princípios (strings de fórmula, comentários de célula, pontos de verificação de seção, loops de tabela de sensibilidade) se aplicam de forma idêntica.
⚠️ Armadilha de células mescladas no Office JS: Ao construir cabeçalhos de seção com células mescladas, NÃO chame .merge() e depois defina .values no intervalo mesclado — o Office JS ainda reporta as dimensões originais do intervalo e lançará InvalidArgument: The number of rows or columns in the input array doesn't match the size or dimensions of the range. Em vez disso, escreva o valor apenas na célula superior esquerda e, em seguida, mescle e formate o intervalo completo:
// ERRADO — lança InvalidArgument:
const hdr = ws.getRange("A7:H7");
hdr.merge();
hdr.values = [["MARKET DATA & KEY INPUTS"]]; // array 1×1 vs intervalo 1×8 → falha
// CORRETO — valor primeiro em uma única célula, depois mescle + formate o intervalo:
ws.getRange("A7").values = [["MARKET DATA & KEY INPUTS"]];
const hdr = ws.getRange("A7:H7");
hdr.merge();
hdr.format.fill.color = "#1F4E79";
hdr.format.font.bold = true;
hdr.format.font.color = "#FFFFFF";
Isso se aplica a todo cabeçalho de seção mesclado no DCF (dados de mercado, blocos de cenário, projeção de fluxo de caixa, valor terminal, resumo de valuation, tabelas de sensibilidade).
Fórmulas em vez de valores fixos (NÃO NEGOCIÁVEL):
- Toda projeção, margem, fator de desconto, VP e célula de sensibilidade DEVE ser uma fórmula Excel ativa — nunca um valor calculado em Python e escrito como número
- Ao usar openpyxl:
ws["D20"] = "=D19*(1+$B$8)"está correto;ws["D20"] = receita_calculadaestá ERRADO - Os únicos números fixos permitidos são: (1) dados históricos brutos, (2) direcionadores de premissas (taxas de crescimento, entradas de WACC, g terminal), (3) dados de mercado atuais (preço da ação, saldo de dívida)
- Se você se pegar calculando algo em Python e escrevendo o resultado — PARE. O modelo deve se ajustar quando o usuário alterar uma premissa.
Verifique Passo a Passo com o Usuário (NÃO construa de ponta a ponta):
- Após a recuperação de dados → mostre ao usuário o bloco de entradas brutas (receita, margens, ações, dívida líquida) e confirme antes de projetar
- Após as projeções de receita → mostre a linha superior projetada e as taxas de crescimento, confirme antes de construir a estrutura de margens
- Após a construção do FCF → mostre o cronograma completo de FCF, confirme a lógica antes de calcular o WACC
- Após o WACC → mostre o cálculo e as entradas, confirme antes de descontar
- Após o valor terminal + VP → mostre a ponte de equity (EV → valor do equity → valor por ação), confirme antes das tabelas de sensibilidade
- Capture erros em cada etapa — uma premissa de margem errada descoberta após a construção das tabelas de sensibilidade significa reconstruir tudo downstream
Tabelas de Sensibilidade:
- Use um número ÍMPAR de linhas e colunas (padrão: 5×5, às vezes 7×7) — isso garante uma célula central verdadeira
- Célula central = caso base. Construa os valores dos eixos de forma que o cabeçalho da linha do meio e o cabeçalho da coluna do meio sejam exatamente iguais às premissas reais do modelo (por exemplo, se o WACC base = 9,0%, a linha do meio é 9,0%; se g terminal = 3,0%, a coluna do meio é 3,0%). O resultado da célula central deve, portanto, ser igual ao preço implícito real da ação do modelo — esta é a verificação de sanidade de que a tabela foi construída corretamente.
- Destaque a célula central com o preenchimento azul médio (
#BDD7EE) + fonte em negrito para que seja imediatamente visível qual célula é o caso base. - Preencha TODAS as células (tipicamente 3 tabelas × 25 células = 75) com fórmulas de recálculo DCF completas
- Use loops openpyxl (ou loops Office JS) para escrever fórmulas programaticamente
- SEM texto de espaço reservado, SEM aproximações lineares, SEM etapas manuais necessárias
- Cada célula deve recalcular o DCF completo para aquela combinação de premissas
Comentários de Célula:
- Adicione comentários de célula À MEDIDA QUE cada valor fixo é criado
- Formato: "Fonte: [Sistema/Documento], [Data], [Referência], [URL se aplicável]"
- Toda entrada azul deve ter um comentário antes de passar para a próxima seção
- Não adie para o final nem escreva "TODO: adicionar fonte"
Planejamento do Layout do Modelo:
- Defina TODAS as posições de linha das seções ANTES de escrever qualquer fórmula
- Escreva TODOS os cabeçalhos e rótulos primeiro
- Escreva TODOS os divisores de seção e linhas em branco em segundo lugar
- DEPOIS escreva as fórmulas usando as posições de linha fixadas
- Teste as fórmulas imediatamente após a criação
Recálculo de Fórmulas:
- Execute
python recalc.py model.xlsx 30antes da entrega - Corrija TODOS os erros até que o status seja "sucesso"
- Zero erros de fórmula permitidos (#REF!, #DIV/0!, #VALUE!, etc.)
Blocos de Cenário:
- Crie blocos separados para os casos Baixo/Base/Alto
- Mostre as premissas horizontalmente ao longo dos anos de projeção dentro de cada bloco
- Use fórmulas SE:
=SE($B$6=1,[célula Baixo],SE($B$6=2,[célula Base],[célula Alto])) - Verifique se as fórmulas referenciam as células corretas do bloco de cenário
Fluxo de Trabalho do Processo DCF
Etapa 1: Recuperação e Validação de Dados
Busque dados de servidores MCP, dados fornecidos pelo usuário e da web.
Prioridade de Fontes de Dados:
- Servidores MCP (se configurados) — Dados financeiros estruturados de provedores como Daloopa
- Dados Fornecidos pelo Usuário — Históricos financeiros de suas pesquisas
- Pesquisa/Busca na Web — Preços atuais, beta, dívida e caixa quando necessário
Lista de Verificação de Validação:
- Verifique dívida líquida vs caixa líquido (crítico para valuation)
- Confirme ações diluídas em circulação (verifique recompras/emissões recentes)
- Valide se as margens históricas são consistentes com o modelo de negócios
- Compare as taxas de crescimento da receita com benchmarks do setor
- Verifique se a alíquota de imposto é razoável (tipicamente 21-28%)
Etapa 2: Análise Histórica (3-5 anos)
Analise e documente:
- Tendências de crescimento da receita: Calcule CAGR, identifique direcionadores
- Progressão das margens: Acompanhe margem bruta, margem EBIT, margem FCF
- Intensidade de capital: D&A e CapEx como % da receita
- Eficiência do capital de giro: Variações de NWC como % do crescimento da receita
- Métricas de retorno: Tendências de ROIC, ROE
Crie tabelas resumo mostrando:
Métricas Históricas (LTM):
Receita: $X milhões
Crescimento da receita: CAGR de X%
Margem bruta: X%
Margem EBIT: X%
D&A % da receita: X%
CapEx % da receita: X%
Margem FCF: X%
Etapa 3: Construir Projeções de Receita
Metodologia:
- Comece com a receita real mais recente (LTM ou ano fiscal mais recente)
- Aplique taxas de crescimento para cada ano de projeção
- Mostre tanto os valores em dólares QUANTO a % de crescimento calculada
Estrutura da Taxa de Crescimento:
- Ano 1-2: Crescimento mais alto refletindo visibilidade de curto prazo
- Ano 3-4: Moderação gradual em direção à média do setor
- Ano 5+: Aproximando-se da taxa de crescimento terminal
Estrutura da Fórmula:
- Receita(Y