Plataforma SaaS de análise de carteira de investimentos com agentes de IA para o mercado brasileiro.
Reúne suas posições em ações, FIIs, ETFs e Tesouro Direto e entrega análises de risco, tributação, rebalanceamento e notícias — geradas por agentes de IA especializados, em linguagem humana.
Frontend: Angular 18+ (Signals, standalone components) · Design System próprio · Apache ECharts · Storybook 10
Backend: Node.js 20 · Fastify 5 · Prisma ORM · PostgreSQL 16 · Redis 7 · Groq API (Llama 3.3 70B)
Financeiro: decimal.js para todos os cálculos · Schema estrito com Decimal(18,2) / Decimal(18,6)
# Pré-requisitos: Node.js 20+, Docker
git clone https://github.com/seu-usuario/quantdesk && cd quantdesk
npm install
cp .env.example .env # Edite e adicione GROQ_API_KEY
docker compose up -d # Postgres + Redis
npm run db:migrate # Migrations + seed (65 ativos B3)
npm run dev:api # API em :3001
npm run dev:web # Frontend em :4200| Comando | Descrição |
|---|---|
npm run dev |
API + frontend em paralelo |
npm run test:api |
17 testes unitários da domain layer |
npm run db:migrate |
Aplica migrations e seed |
npm run storybook |
Design System (Storybook 10) |
npm run lint |
ESLint em todos os projetos |
A suíte de testes foca nos cálculos financeiros críticos — preço médio, tributação, métricas de risco — onde bugs causariam dano direto ao usuário. A camada de domínio é completamente isolada de I/O (banco, HTTP), permitindo testes rápidos e determinísticos.
17 passed
position-builder (6): buy, average PM, sell preserves PM, full sell, multi-asset, split
swing-trade-tax (4): isento, acima limite, FII, JCP
volatility (2): retornos diários, annualised
pm-calculator (5): compra simples, média ponderada, venda parcial, venda total, eventos
| Método | Rota | Descrição |
|---|---|---|
POST |
/api/auth/register |
Cadastro |
POST |
/api/auth/login |
Login → JWT |
GET |
/api/portfolios |
Listar carteiras |
POST |
/api/portfolios |
Criar carteira |
GET |
/api/portfolios/:id/positions |
Posições com PM |
POST |
/api/portfolios/:id/operations |
Nova operação |
POST |
/api/portfolios/:id/import/csv |
Importar CSV |
POST |
/api/portfolios/:id/import/pdf |
Importar nota PDF (Groq) |
POST |
/api/portfolios/:id/import/confirm |
Confirmar importação |
GET |
/api/quotes?tickers=PETR4,VALE3 |
Cotações (cache 15 min) |
GET |
/api/quotes/:ticker/history |
Histórico de preços |
GET |
/api/dashboard/summary |
Resumo consolidado |
POST |
/api/agents/run |
Disparar agente → 202 |
GET |
/api/agents/run/:id |
Status do agente |
GET |
/api/agents/history/:portfolioId |
Histórico de análises |
GET |
/api/assets?q=PETR |
Busca de ativos |
GET |
/api/portfolios/:id/proventos?year=2024 |
Dividendos e JCP recebidos |
GET |
/api/portfolios/:id/ir?year=2024 |
Relatório IR completo |
GET |
/api/portfolios/:id/performance?period=1y |
Série de retorno vs BOVA11 + CDI |
GET |
/api/alerts |
Listar alertas de preço |
POST |
/api/alerts |
Criar alerta |
DELETE |
/api/alerts/:id |
Excluir alerta |
PATCH |
/api/alerts/:id/toggle |
Ativar/desativar alerta |
GET |
/api/watchlist |
Watchlist com cotações |
POST |
/api/watchlist |
Adicionar à watchlist |
DELETE |
/api/watchlist/:ticker |
Remover da watchlist |
GET |
/api/user/profile |
Perfil + stats + preferências |
PUT |
/api/user/profile |
Atualizar nome/email |
POST |
/api/user/change-password |
Alterar senha |
PUT |
/api/user/preferences |
Salvar preferências de notificação |
GET |
/api/user/export |
Export JSON de todos os dados |
DELETE |
/api/user/account |
Excluir conta (requer senha) |
GET |
/api/portfolios/:id/allocation |
Alocação atual + desvio vs meta |
PUT |
/api/portfolios/:id/allocation/target |
Salvar meta de alocação |
GET |
/api/portfolios/:id/allocation/rebalance?cash=1000 |
Plano de rebalanceamento |
| Agente | Modelo | Ferramentas |
|---|---|---|
| Risco | llama-3.3-70b-versatile | Posições, histórico, HHI pré-computado |
| Tributação | llama-3.3-70b-versatile | Operações, imposto pré-calculado pelo domínio |
| Rebalanceamento | llama-3.3-70b-versatile | Posições, alocação-alvo |
| Notícias | llama-3.1-8b-instant | RSS InfoMoney/UOL + posições |
Todos os agentes usam fire-and-forget com polling a cada 2 s (ver ADR-007).
# Build da imagem da API
docker build -f apps/api/Dockerfile -t quantdesk-api .
# Stack completa (API + Postgres + Redis)
cp .env.prod .env
docker compose -f docker-compose.prod.yml up -d
# Rodar migrations em produção
docker compose -f docker-compose.prod.yml run --rm api npx prisma migrate deployVariáveis obrigatórias no .env.prod:
POSTGRES_PASSWORD=
JWT_SECRET=
GROQ_API_KEY=
Veja os ADRs para as decisões arquiteturais.
quantdesk/
├── apps/
│ ├── api/ # Fastify 5 + Prisma
│ │ ├── src/
│ │ │ ├── domain/ # Lógica pura (testável sem DB)
│ │ │ ├── modules/ # Routes + services por domínio
│ │ │ ├── jobs/ # Cron EOD
│ │ │ └── plugins/ # Redis, JWT, multipart
│ │ └── prisma/ # Schema + migrations + seed
│ └── web/ # Angular 18 SPA
│ └── src/app/
│ ├── core/ # Services, models, guards
│ ├── layout/ # Sidebar, shell
│ └── pages/ # Dashboard, Carteiras, Agentes, Import
├── libs/
│ └── ui/ # Design System (11 componentes + Storybook)
└── docs/adr/ # ADR-001 a ADR-007
11 componentes primitivos com histórias Storybook:
QdButton · QdBadge · QdInput · QdSelect · QdCard · QdModal · QdStatCard · QdPriceDisplay · QdAllocationBar · QdFileUpload · QdEmptyState · QdTable · QdToggle
Disclaimer: QuantDesk não é uma instituição financeira regulada pela CVM. Análises geradas pelos agentes são informativas e não constituem recomendação de investimento.