O fim da planilha estática: Por que construí um motor estocástico de fluxo de caixa

O fim da planilha estática: Por que construí um motor estocástico de fluxo de caixa
Photo by Markus Spiske / Unsplash

Qualquer pessoa que já operou uma tesouraria ou geriu as finanças de uma empresa sabe de uma verdade inconveniente: o Excel aceita qualquer coisa.

Quando você projeta um fluxo de caixa tradicional, você está lidando com um modelo determinístico. Você diz para a planilha que vai receber R$ 50 mil no dia 15, e que vai pagar R$ 30 mil no dia 20. A planilha faz a conta e te diz que no fim do mês vai sobrar R$ 20 mil. Parece ótimo, certo?

O problema é que o mundo real não obedece planilhas. Clientes atrasam, a inadimplência acontece e choques macroeconômicos mudam as regras do jogo do dia para a noite. Basear a liquidez de uma empresa em um "cenário médio" é um dos maiores riscos que um CFO pode correr. É o que na estatística chamamos de falha das médias.

Foi exatamente para resolver essa cegueira matemática que decidi desenvolver o Algoritmo de Liquidez Preditiva.

Trocando a certeza ilusória por probabilidade real

A ideia do projeto era sair da projeção estática e entrar no mundo estocástico aplicando simulações de Monte Carlo. Em vez de calcular um único futuro irrealista, o motor cria até 100.000 "universos paralelos" para o caixa da empresa nos próximos 90 dias.

Ele faz isso injetando "ruídos" diários nas receitas e despesas (usando a Transformada de Box-Muller para gerar uma distribuição normal) e aplicando um risco de default.

O resultado não é um número fixo, mas sim uma matriz de probabilidade que me permite responder a duas perguntas cruciais de governança:

  1. Qual o Liquidity at Risk (LaR)? Ou seja, com 95% de confiança, qual é o pior cenário de caixa possível no final do trimestre?
  2. Qual a Probabilidade de Ruína? Aqui está o pulo do gato. Uma empresa pode terminar o mês no azul, mas ter "quebrado" no dia 15 porque as despesas caíram antes das receitas. O algoritmo escaneia toda a trajetória e acusa se o caixa cruzou a linha zero no meio do caminho.

Sob o capô: O desafio da performance

Fazer as contas é a parte fácil. O desafio de engenharia de software foi fazer tudo isso rodar no navegador do usuário sem travar a máquina.

Calcular 100.000 cenários de 90 dias significa gerar e desenhar cerca de 9 milhões de pontos de dados na tela. Se eu usasse o ciclo normal do Javascript misturado com bibliotecas pesadas de gráficos, a aba do navegador ia congelar por vários segundos.

Para resolver isso, fui direto para os fundamentos:

  • Web Workers: Isolei todo o motor de cálculo em uma thread separada. Enquanto o robô faz a matemática bruta, a interface do usuário continua fluida.
  • Canvas API: Abandonei bibliotecas prontas. O gráfico "espaguete" que mostra as linhas de sobrevivência (em azul) e de insolvência (em vermelho) é desenhado nativamente usando a Canvas API com Javascript puro (Vanilla).
  • Infra: Tudo isso foi empacotado e servido via Nginx em um container Docker na minha infraestrutura.

O resultado é um processamento quase instantâneo. A resposta visual sai na casa dos milissegundos.

Teste você mesmo

Deixei a aplicação no ar para quem quiser fazer um stress test e ver como as linhas de risco se comportam quando as despesas se aproximam demais das receitas.

🔗 Você pode acessar a ferramenta aqui: liquidez.matheusrocha.cloud

Lá dentro da aplicação, também incluí uma aba inteira de documentação abrindo a "caixa preta" do algoritmo, detalhando a equação diferencial que usei no código.

Se você trabalha com engenharia financeira, dados ou tesouraria, faz o teste lá e me diz o que achou da abordagem.

Read more