1

Pitch: Trackerr, o copiloto da minha carteira que prefere dizer "não sei" a te recomendar uma ação

Eu tinha investimento em três corretoras, uma exchange e uma planilha que só eu entendia. Todo mês a mesma rotina: baixar extrato, somar posição, conferir se algum papel tinha crescido demais, e em maio descobrir que tinha esquecido de pagar uma DARF em outubro. Qualquer app de carteira resolvia a primeira parte. O resto, que é justamente onde se perde dinheiro, continuava comigo.

Meu SaaS

O Trackerr junta a carteira inteira num lugar só e coloca uma IA pra ler esse contexto. Ela não escolhe ativo por você. Ela aponta o que está fora da estratégia que você mesmo definiu e mostra a fonte de cada afirmação.
Um copiloto que entrega uma lista do que fazer

A maioria dos "insights de IA" que vejo por aí é um parágrafo genérico do tipo "sua carteira está diversificada, continue assim". No Trackerr cada insight chega com quatro coisas obrigatórias: prioridade, confiança do modelo (%), número de fontes e um link pra trilha de auditoria. Se falta alguma delas, o insight não é exibido.

Um exemplo real de saída:

PETR4 está 2,9 p.p. acima do seu limite. Aparar 1.200 ações libera R$ 49,5k sem mexer no yield projetado.

O número vem da política de investimento cadastrada pelo usuário, e não de uma opinião do modelo. A IA só coloca em palavras uma diferença que o código já calculou.

"Não recomendar" é garantido pelo código

Esse ponto me tirou o sono. Uma IA que responde perguntas sobre a sua carteira está a um passo de virar recomendação de investimento, e aí entra CVM. Colocar "não recomende nada" no prompt de sistema não resolve, porque o modelo às vezes ignora.

Por isso a trava fica depois da geração. Toda resposta do RAG passa por um validador determinístico antes de chegar ao usuário:

RECOMMENDATION_PATTERN = re.compile(
    r"\b(compre|comprar|venda|vender|recomendo|recomendamos|recomendação|"
    r"invista|investir)\b",
    re.IGNORECASE,
)

DEFINITIVE_TAX_CLAIM_PATTERN = re.compile(
    r"\b(você deve pagar|o valor devido é|está isento de pagar|"
    r"o imposto devido é)\b",
    re.IGNORECASE,
)

Se a resposta bate em algum desses padrões, ela é descartada. O disclaimer também não depende do modelo: quem chama o RAG anexa o aviso sempre, então não existe caminho em que ele some porque o LLM "esqueceu".

O RAG usa pgvector num Postgres próprio do serviço de IA, separado do banco transacional. Toda busca filtra por user_id na camada de repositório, e esse filtro não é opcional. Vazar dado de um usuário pra outro é tratado como incidente P0.

Imposto calculado sem LLM

Ainda em desenvolvimento

O imposto é a parte que mais assusta quem investe, e eu decidi que a IA não calcula nada ali. Existe um motor fiscal feito só de regras, com teste unitário, que faz a apuração mensal:

ganho de capital em ações, FIIs e ETFs, cada classe com seu próprio saldo de prejuízo a compensar;
isenção de R$ 20 mil/mês em vendas de ações;
DARF do mês com valor já calculado.

A importação aceita CSV e nota de corretagem em PDF. O primeiro parser foi o do BTG, porque era a minha corretora e eu tinha as notas pra testar. A IA entra só depois, pra explicar em português o resultado que o motor gerou. Ela nunca produz o número.

RI Inteligente: o release de resultados resumido

Você digita um ticker, filtra por tipo de documento (release, fato relevante, aviso de dividendos/JCP, DFs…), escolhe o PDF e clica em "Gerar resumo IA". Recebe os destaques, as limitações do documento e o aviso de que o texto foi gerado por IA.

Resumir o mesmo release pra mil usuários custaria mil chamadas de LLM. A chave de cache usa o hash do conteúdo:

return ri-summary:${documentId}:${contentHash}:v1;

O segundo usuário que pede o mesmo documento recebe cacheHit: true e aiCalls: 0. Se a empresa republicar o PDF corrigido, o hash muda e o resumo é gerado de novo. O v1 no final serve pra invalidar todo o cache de uma vez quando eu mudar o prompt.

A interface muda conforme o nível de quem usa

O mesmo dado pode aparecer de três jeitos:

Iniciante: "Um ativo virou 11% da sua carteira. Concentração alta significa que um único papel move muito o seu resultado."
Intermediário: "PETR4 está 2,9 p.p. acima do seu limite…"
Avançado: "PETR4 responde por 19,4% do VaR (peso 10,9%, beta 1,18). A 7% o VaR cai para R$ 35,8k e o TE de 6,4% para 5,1%."

O nível é sugerido a partir de sinais de uso (quais telas você abre, que métricas consulta), mas fica sempre visível na barra do topo com o motivo da sugestão, e você troca com um clique. A regra que segui: os números nunca mudam, só o vocabulário e a quantidade de detalhe. Nada fica escondido. O modo Iniciante tem um atalho "ver como analista".

Corretoras e exchanges, sempre em modo leitura

A sincronização com exchanges usa CCXT por trás de uma interface de provider. Adicionar uma exchange nova significa registrar um provider, sem mexer no resto do sistema. O usuário gera uma chave de API somente leitura, que é guardada cifrada com AES-256 e nunca tem permissão pra saque ou ordem. Senhas usam Argon2, e o login tem 2FA.

Coisas pequenas que fazem diferença
Toda métrica tem um tooltip com a definição em linguagem simples e a fórmula com a janela usada: "(retorno − taxa livre de risco) ÷ volatilidade · 252 dias".
O que ainda está em desenvolvimento aparece desfocado com "avise-me quando lançar", em vez de sumir ou virar placeholder vazio. Prefiro mostrar o que vem pela frente do que lançar pela metade.
Tem tema claro e escuro, paleta de command palette (⌘K), e o cancelamento é feito pelo próprio painel, sem falar com ninguém. A carteira continua disponível no plano gratuito depois de cancelar.

Carregando publicação patrocinada...