Skip to content

igormichalski/QuantDesk

Repository files navigation

QuantDesk

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.


Stack

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)


Como rodar localmente

# 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

Scripts

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

Testes

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

API — Endpoints principais

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

Agentes de IA

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).

Deploy em produção

# 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 deploy

Variáveis obrigatórias no .env.prod:

POSTGRES_PASSWORD=
JWT_SECRET=
GROQ_API_KEY=

Arquitetura

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

Design System

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.

About

Full-stack SaaS platform tailored for the Brazilian financial market, integrating specialized AI agents to automate portfolio analysis, risk assessment, tax calculations, and asset rebalancing.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages