Skip to content

Repository files navigation

Valor Justo

Vale a pena comprar aquela empresa que está à venda?

Você acha um anúncio: padaria em João Pessoa, R$ 500 mil, "fatura R$ 120 mil por mês". O anúncio não diz se o preço faz sentido. Este projeto diz.

Cola a URL do anúncio ou digita os números à mão, e sai um índice de compra de 0 a 100 com o fluxo de caixa por trás: VPL, TIR, payback e os critérios eliminatórios — aqueles que reprovam o negócio independentemente do resto.

Valor Justo

O que tem aqui

  • Valuation de verdade, não regra de bolso: fluxo de caixa projetado, custo de capital, financiamento, capital de giro e saída. O cálculo é auditável em public/js/calculo.js.
  • Base de 2.544 anúncios reais conferidos, o Brasil inteiro, por cidade e UF.
  • Importação por URL: lê a página do anúncio e extrai nome, preço, faturamento e categoria. Allowlist de domínio contra SSRF.
  • Consulta de CNPJ em três fontes da Receita em paralelo: situação, idade, porte, regime, sócios, e os alertas que isso levanta.
  • Paywall por créditos com cobrança via Mercado Pago — o pagamento é sempre reconferido na API do gateway, nunca confiando só no webhook.

Rodar em um minuto

Precisa de JDK 21. Nada mais — nem Maven, nem banco, nem Docker.

./mvnw -DskipTests package
STORE=file java -jar target/valorjusto.jar

No Windows (PowerShell): .\mvnw.cmd -DskipTests package e depois $env:STORE="file"; java -jar target\valorjusto.jar.

Abre http://localhost:8080/. O estado vai para data/*.json — é o modo de desenvolvimento, sem as garantias do banco.

Com Postgres é docker compose up. Os detalhes estão na documentação de arquitetura.

Stack

Camada Escolha Por quê
Backend Java 21, Spring Boot 3.5 pacote único, uma classe por responsabilidade
Banco PostgreSQL com o cadastro em JSONB SQL explícito, sem JPA
Front HTML/CSS/JS, sem framework e sem bundler a ordem de carga é a lista de <script>
Deploy um container por responsabilidade, ou imagem única docker compose ou qualquer PaaS

Sem framework no front e quase sem dependência no back: o projeto foi zero-dependência por muito tempo, e Spring entrou por decisão explícita, não por hábito.

Testes

./mvnw test
bash ferramentas/smoke.sh

O smoke.sh sobe um servidor limpo e percorre o contrato de cada rota — paywall, permissão de escrita, crédito, rate-limit e CSP. É o que pega o que quebra em silêncio. Os dois rodam na CI a cada push e pull request, junto com o build das imagens Docker e um grep que garante que nenhum <script> inline ou atributo on* voltou para o public/.

Documentação

A documentação de arquitetura tem o resto: estrutura de arquivos, todas as rotas da API, como a base de anúncios foi coletada e filtrada, o modelo financeiro, as decisões de segurança e os dois caminhos de deploy.

Estado do projeto

Funciona e está em uso. A tradução da DATABASE_URL — onde errar significa mandar a senha do banco em texto puro — é lógica pura em UrlPostgres, coberta por teste unitário que não precisa de banco: loopback em qualquer grafia, IPv6 literal, nome de serviço do compose e sslmode escrito à mão têm caso de teste cada um.

About

Avalia se vale a pena comprar uma empresa a venda no Brasil: indice de compra 0-100, VPL, TIR e payback.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages