Sistema de registro de gastos e controle financeiro via WhatsApp.
Manda uma mensagem no grupo → a IA categoriza o gasto → salva no banco de dados → responde com confirmação + piada.
Mensagem no WhatsApp
↓
Evolution API (recebe e encaminha)
↓
Spring Boot (processa o webhook)
↓
OpenAI (classifica categoria e valor)
↓
PostgreSQL (salva o gasto)
↓
Resposta no grupo com confirmação + percentual da meta + piada
Exemplos de mensagens:
mercado 150
academia 90
roupa 1800 em 6x
ifood 45
Resposta:
✅ Mercado registrado — R$ 150,00
🟢 Acumulado: R$ 150,00 / R$ 1.700,00 (8,8%)
Só 8,8% da meta do mercado... ou você tá comendo capim? 🌿
| Camada | Tecnologia |
|---|---|
| Backend | Java 17 + Spring Boot 3.5 |
| Banco de dados | PostgreSQL 16 |
| Cache | Redis 7 |
| Evolution API v2.3.7 | |
| IA | OpenAI GPT-4o-mini |
| Migrations | Flyway |
| Infraestrutura | Docker + Docker Compose |
Arquitetura: Hexagonal (Ports & Adapters) com Clean Architecture.
- Docker e Docker Compose
- Conta na OpenAI com créditos
- Número de WhatsApp dedicado para o bot
1. Clone o repositório
git clone https://github.com/joaoluckemeier/expense-tracker.git
cd expense-tracker2. Configure as variáveis de ambiente
cp .env.example .envPreencha o .env com seus valores:
| Variável | Descrição |
|---|---|
OPENAI_API_KEY |
Chave da API OpenAI |
EVOLUTION_API_KEY |
Chave de autenticação da Evolution API |
WEBHOOK_SECRET |
String aleatória para validação do webhook |
AUTHORIZED_GROUP_JID |
JID do grupo WhatsApp autorizado (ex: 123456@g.us) |
DB_USERNAME |
Usuário do PostgreSQL |
DB_PASSWORD |
Senha do PostgreSQL |
3. Suba os serviços
docker compose up -d4. Conecte o WhatsApp
Acesse o manager da Evolution API, crie uma instância e conecte via QR code ou código de pareamento.
5. Registre o webhook
curl -X POST "http://localhost:8081/webhook/set/NOME_DA_INSTANCIA" \
-H "apikey: $EVOLUTION_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"webhook": {
"enabled": true,
"url": "http://SEU_IP:8080/webhook",
"headers": { "X-Webhook-Secret": "SEU_WEBHOOK_SECRET" },
"byEvents": false,
"base64": false,
"events": ["MESSAGES_UPSERT"]
}
}'6. Cadastre suas metas
Acesse o Adminer em http://localhost:8082 e insira metas na tabela goals por categoria.
7. Pronto!
Mande uma mensagem no grupo configurado e o sistema responde automaticamente.
- ✅ Classificação automática de categoria via IA
- ✅ Registro de gastos parcelados (
roupa 1800 em 6x) - ✅ Controle de metas por categoria
- ✅ Status visual com emojis (🟢 🟡 🟠 🔴)
- ✅ Piada personalizada gerada pela IA a cada registro
- ✅ Validação de grupo autorizado
- ✅ Segurança via webhook secret token
src/main/java/com/joaoluckemeier/expense_tracker/
├── adapter/
│ ├── in/webhook/ # Recebe mensagens do WhatsApp
│ └── out/
│ ├── ai/ # Integração com OpenAI
│ ├── messaging/ # Envio de respostas via Evolution API
│ └── persistence/ # Repositórios JPA
├── config/ # Configuração dos beans
└── domain/
├── model/ # Entidades e DTOs
├── port/ # Interfaces (ports)
└── usecase/ # Regras de negócio