Planejamento financeiro inteligente com cálculos financeiros e inteligência artificial.
Sobre • Funcionalidades • Tecnologias • Instalação • API
O Fortuna é uma API desenvolvida para uma aplicação de planejamento financeiro pessoal.
O objetivo do projeto é ajudar usuários a transformar objetivos financeiros em metas reais e mensuráveis. A aplicação permite definir um patrimônio desejado ou uma renda mensal através de dividendos, calcular aportes necessários, estimar o tempo para alcançar uma meta e acompanhar a evolução do patrimônio.
Além dos cálculos financeiros, o projeto utiliza o Google Gemini para analisar metas e gerar planejamentos personalizados.
- Quanto preciso investir mensalmente para atingir R$ 100.000?
- Quanto tempo vou demorar para alcançar determinado patrimônio?
- Quanto preciso acumular para gerar uma renda mensal com dividendos?
- Como novos aportes afetam o tempo necessário para atingir uma meta?
- Qual estratégia posso seguir para alcançar meu objetivo financeiro?
O Fortuna foi desenvolvido como parte do Google Gemini Hackathon 2025, utilizando a inteligência artificial do Google Gemini como um dos recursos centrais do projeto.
A proposta foi combinar planejamento financeiro com IA para ajudar usuários a transformar objetivos pessoais em metas financeiras mais claras e práticas.
O Gemini é utilizado para analisar informações relacionadas às metas do usuário e gerar orientações e planejamentos personalizados, complementando os cálculos financeiros realizados pela aplicação.
Dentro do projeto, o Google Gemini pode ser utilizado para:
- Analisar objetivos financeiros
- Ajudar o usuário a estruturar suas metas
- Interpretar informações financeiras relacionadas aos objetivos
- Gerar planejamentos personalizados
- Tornar a experiência de planejamento financeiro mais interativa
O projeto foi pensado para mostrar como a inteligência artificial pode ser usada além de conversas genéricas, integrando o Gemini diretamente à lógica de uma aplicação real de planejamento financeiro.
- Cadastro de usuários
- Autenticação com JWT
- Atualização de perfil
- Exclusão de conta
- Upload de foto de perfil
- Criação de metas
- Metas baseadas em patrimônio
- Metas baseadas em dividendos mensais
- Simulação de cenários financeiros
- Cálculo do aporte mensal necessário
- Cálculo do tempo necessário para atingir uma meta
- Atualização dos cálculos após movimentações
- Registro de aportes
- Registro de retiradas
- Atualização do patrimônio acumulado
- Recalculo das projeções da meta
Integração com o Google Gemini para:
- Analisar objetivos financeiros
- Ajudar na definição de metas
- Gerar planejamentos personalizados
O projeto foi desenvolvido utilizando:
- Node.js
- TypeScript
- Express
- CockroachDB
- PostgreSQL
- Knex.js
- Google Gemini
- JWT
- Bcrypt
- Multer
- PM2
src/
│
├── configs/ # Configurações da aplicação
├── controllers/ # Controllers da API
├── database/ # Conexão e configurações do banco
├── middleware/ # Middlewares
├── providers/ # Providers e integrações
├── routes/ # Rotas da API
├── service/ # Serviços e regras de negócio
├── utils/ # Utilitários
│
├── knexfile.ts # Configuração do Knex
└── server.ts # Inicialização do servidor
Antes de começar, você precisa ter instalado:
- Node.js
- npm
- Uma instância PostgreSQL ou CockroachDB
git clone https://github.com/iDimaBR/gemini-hackaton-backend.gitEntre na pasta do projeto:
cd gemini-hackaton-backendInstale as dependências:
npm installCrie um arquivo .env na raiz do projeto.
DATABASE_URL=
AUTH_SECRET=
GEMINI_API_KEY=
PORT=3333| Variável | Descrição |
|---|---|
| DATABASE_URL | URL de conexão com o banco de dados |
| AUTH_SECRET | Chave utilizada para autenticação JWT |
| GEMINI_API_KEY | Chave da API do Google Gemini |
| PORT | Porta da aplicação |
⚠️ Nunca envie credenciais reais para repositórios públicos.
npm run devA API estará disponível em:
http://localhost:3333
Para compilar o projeto:
npm run buildnpm startO projeto utiliza Knex.js para gerenciamento do banco de dados.
npm run migratenpm run migrate:make nome_da_migrationnpm run rollbackA API utiliza JWT (JSON Web Token) para proteger rotas autenticadas.
Após realizar login, envie o token no header:
Authorization: Bearer SEU_TOKENBase URL local:
http://localhost:3333
POST /api/users{
"name": "João Silva",
"email": "joao@email.com",
"password": "123456",
"birthday": "2002-12-21T22:44:58.698Z"
}| Campo | Tipo | Descrição |
|---|---|---|
| name | string | Nome do usuário |
| string | Email da conta | |
| password | string | Senha |
| birthday | date | Data de nascimento |
🔒 Requer autenticação.
PUT /api/users{
"name": "João Silva",
"email": "joao@email.com",
"password": "nova_senha",
"old_password": "senha_atual",
"birthday": "2002-12-21T22:44:58.698Z"
}🔒 Requer autenticação.
GET /api/users🔒 Requer autenticação.
DELETE /api/users/:id| Parâmetro | Tipo | Descrição |
|---|---|---|
| id | number | ID do usuário |
🔒 Requer autenticação.
PATCH /api/users/pictureA requisição deve utilizar:
multipart/form-data
| Campo | Tipo |
|---|---|
| picture | file |
GET /api/files/:filenameExemplo:
/api/files/foto-do-usuario.png
POST /api/sessions{
"email": "joao@email.com",
"password": "123456"
}{
"user": {
"id": 1,
"name": "João Silva",
"email": "joao@email.com"
},
"token": "JWT_TOKEN"
}Utilize o token retornado nas rotas protegidas.
🔒 Requer autenticação.
GET /api/goalsRetorna as metas pertencentes ao usuário autenticado.
🔒 Requer autenticação.
GET /api/goals/:id| Parâmetro | Tipo | Descrição |
|---|---|---|
| id | number | ID da meta |
🔒 Requer autenticação.
POST /api/goals{
"name": "Meu primeiro R$ 100 mil",
"patrimony": 100000,
"type_goal": false,
"initial_patrimony": 10000,
"time_desired": 5,
"monthly_aport": 0,
"dividends": 0,
"rate": 0.01
}{
"name": "Segundo salário",
"patrimony": 0,
"dividends": 2000,
"type_goal": true,
"initial_patrimony": 10000,
"time_desired": 10,
"monthly_aport": 0,
"rate": 0.01
}| Campo | Tipo | Descrição |
|---|---|---|
| name | string | Nome da meta |
| patrimony | number | Patrimônio desejado |
| dividends | number | Renda mensal desejada |
| type_goal | boolean | Tipo da meta |
| initial_patrimony | number | Patrimônio inicial |
| time_desired | number | Tempo desejado |
| monthly_aport | number | Aporte mensal |
| rate | number | Taxa de rendimento estimada |
true → Meta baseada em dividendos
false → Meta baseada em patrimônio
🔒 Requer autenticação.
Permite calcular diferentes cenários financeiros antes de criar ou atualizar uma meta.
POST /api/goals/preview{
"name": "Segundo salário",
"patrimony": 100000,
"dividends": 756,
"type_goal": true,
"initial_patrimony": 0,
"time_desired": 10,
"monthly_aport": 567,
"rate": 0.012
}A simulação retorna informações como:
- Aporte necessário para atingir uma meta
- Tempo estimado para alcançar o objetivo
- Patrimônio necessário
- Projeção baseada na taxa de rendimento
🔒 Requer autenticação.
POST /api/goals/transaction{
"aport": 1000,
"aport_type": true,
"goal_id": 32
}| Campo | Tipo | Descrição |
|---|---|---|
| aport | number | Valor da movimentação |
| aport_type | boolean | Tipo da movimentação |
| goal_id | number | ID da meta |
true → Aporte
false → Retirada
🔒 Requer autenticação.
PUT /api/goals/:goal_id{
"name": "Meu primeiro milhão",
"patrimony": 1000000,
"monthly_aport": 5000,
"rate": 0.01
}🔒 Requer autenticação.
DELETE /api/goals/:idO Fortuna utiliza o Google Gemini para tornar o planejamento financeiro mais personalizado.
POST /api/gemini/analyzeA IA analisa os dados financeiros enviados e ajuda a interpretar o objetivo.
{
"name": "Comprar uma casa",
"patrimony": 500000,
"initial_patrimony": 50000,
"time_desired": 10,
"monthly_aport": 3000,
"rate": 0.01
}POST /api/gemini/defineA inteligência artificial ajuda o usuário a estruturar uma meta financeira a partir de seu objetivo.
GET /api/gemini/plan/:goal_idGera um planejamento personalizado utilizando os dados da meta cadastrada.
| Comando | Descrição |
|---|---|
| npm run dev | Executa a aplicação em desenvolvimento |
| npm run build | Compila o projeto TypeScript |
| npm start | Executa a aplicação em produção |
| npm run migrate | Executa as migrations |
| npm run migrate:make | Cria uma migration |
| npm run rollback | Reverte a última migration |
A aplicação utiliza:
- JWT para autenticação
- Bcrypt para hash de senhas
- Middlewares para proteção de rotas
- Variáveis de ambiente para credenciais sensíveis
Nunca envie arquivos .env contendo credenciais reais para o GitHub.
Feito para transformar objetivos financeiros em metas mais claras e mensuráveis. 💰