Oracle3
Oracle3: 예측시장 거래 엔진·MCP 서버
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Tino — contador pessoal (PF e MEI) App de finanças pessoais para quem cuida do dinheiro sozinho, em casal ou em família, com modo MEI. Feito sobre a mesma stack do ERP Controllares: Next.js (App Router), Prisma + PostgreSQL, Tailwind, Radix e autenticação por JWT em cookie httpOnly. Retomando o projeto? Leia docs/COMECAR-AQUI.md — em cinco minutos você sabe tanto quanto a última sessão.README 전문 보기 ↗
Resumo consolidado dos pedidos, entregas e próximos passos (02/10): documento temporário de continuidade. Este resumo prevalece sobre checkpoints antigos.
Retomada atual: Estado de 02/10/2026. Leia antes dos checkpoints anteriores.
App de finanças pessoais para quem cuida do dinheiro sozinho, em casal ou em família, com modo MEI.
Feito sobre a mesma stack do ERP Controllares: Next.js (App Router), Prisma + PostgreSQL, Tailwind,
Radix e autenticação por JWT em cookie httpOnly.
Retomando o projeto? Leia docs/COMECAR-AQUI.md — em cinco minutos você sabe
tanto quanto a última sessão.
Estado atualizado em 01/10/2026: entregas, decisões finais e próximos passos.
FITID do banco).O banco e o .env já estão prontos nesta máquina. No dia a dia são dois comandos:
npm run db:start
npm run dev
Depois abra http://localhost:3000, crie sua conta e responda as sete perguntas do Tino — é ele
que monta seu painel a partir das respostas. Dá para pular e cadastrar tudo depois.
Para desligar o banco: npm run db:stop.
Postgres 17 roda a partir de binários portáteis em %LOCALAPPDATA%\tino-pg, sem serviço do
Windows e sem privilégio de administrador (o instalador oficial exige UAC; este caminho não).
Como não é serviço, ele não sobe sozinho ao ligar o computador — daí o npm run db:start.
Recriar do zero, se um dia precisar:
# baixe postgresql-17-windows-x64-binaries.zip, extraia em %LOCALAPPDATA%\tino-pg
initdb -D %LOCALAPPDATA%\tino-pg\data -U tino --pwfile=senha.txt -E UTF8 --locale=C
pg_ctl -D %LOCALAPPDATA%\tino-pg\data -l pg.log -o "-p 5432" start
psql -U tino -h 127.0.0.1 -d postgres -c "CREATE DATABASE tino;"
npx prisma migrate deploy
JWT_SECRET não tem valor padrão de propósito: subir sem ele assinaria sessão com segredo público.
Saldo negativo em conta não é tratado como uma dívida à parte: é o próprio saldo, com juros incidindo sobre ele. Modelar como dívida separada contaria o mesmo buraco duas vezes (uma no saldo, outra no passivo) e faria a sobra do mês ficar parada ao lado de uma dívida a 8% — o oposto do que acontece na conta real, onde qualquer entrada abate o negativo na hora.
Fatura de cartão é diferente e entra como dívida de verdade: ela só diminui quando é paga.
Em vez de abrir um painel vazio, o app conversa. Sete passos, todos puláveis:
Pulou? Em Configurações → Conversa inicial dá para responder depois. Nada é apagado — o que você responder soma ao que já existe.
Conta no negativo vira dívida de cheque especial a 8% ao mês (o teto legal), já no topo do plano de pagamento — é quase sempre o juro mais caro que uma pessoa física paga. Ajuste para a taxa do seu contrato em Configurações.
Um site não consegue ler notificações do Android — quem lê é um app de automação no seu aparelho, que repassa o texto. A parte que recebe já está pronta:
| Caminho | Como funciona |
|---|---|
| Notificação do banco | MacroDroid ou Tasker: gatilho "notificação recebida" filtrando o app do banco, ação POST para /api/capturar com Authorization: Bearer SUA_CHAVE. |
| Telegram | Gere a chave, mande /conectar SUA_CHAVE ao bot. Depois é só escrever "uber 18" ou encaminhar o PDF da fatura. |
| Dentro do app | Campo único em Anotar: escreva como falaria. |
As instruções passo a passo, com o endereço já preenchido, ficam na tela Anotar.
Detalhes que importam:
O app é feito para o telefone: barra inferior com as cinco telas do dia a dia, e o resto acessível pela fileira de atalhos. Dá para instalar na tela inicial e abrir sem barra de navegador.
Na mesma rede (Wi-Fi de casa) — funciona hoje:
npm run db:start e npm run dev;http://SEU_IP:3000 (o npm run dev mostra o endereço em "Network");O computador precisa estar ligado e no mesmo Wi-Fi. É a forma mais rápida, e não expõe nada para fora da sua rede.
De qualquer lugar: aí é preciso publicar o app (Vercel ou similar) com um Postgres na nuvem, ou abrir um túnel temporário. Publicado, o endereço também serve para a captura por notificação funcionar fora de casa.
Os ícones são gerados por node scripts/icones.mjs — o PNG é montado à mão com zlib, para não
trazer uma dependência de imagem só para desenhar um símbolo.
npm test
138 testes sobre o motor de cálculo, rodando com o runner nativo do Node (sem dependência extra) em meio segundo. Cobrem centavos e arredondamento, Tabela Price, CET por bisseção, estratégias de quitação, metas, aposentadoria, limite do MEI, competências e janela do mês, categorização, leitor de notificação, simulador de cenários e o parecer.
Boa parte fixa regressões que aconteceram de verdade durante o desenvolvimento — cada uma tem o comentário do que quebrou. Os testes foram verificados revertendo a correção e conferindo que falham: um deles não falhava, era teatro, e foi reescrito até pegar o caso real.
node scripts/demo.mjs
Cria um lar fictício ("Casa da Marina") com seis meses de histórico: 251 lançamentos, quatro parcelamentos em andamento, três dívidas, orçamento estourando em algumas categorias, três metas e capturas esperando conferência. Serve para ver todas as telas com dados coerentes — a soma dos lançamentos bate com os saldos, e as parcelas batem com as faturas.
Entrar: [email protected] / demo12345. Para remover: node scripts/demo.mjs --limpar.
Média das faixas dos indicadores, com teto pela pior delas: se algum indicador está crítico a nota não passa de 55, e com a conta no negativo não passa de 40. Sem esse teto a média premiava quem tem quatro indicadores bons e um crítico — a tela mostrava nota 84 ao lado do rótulo "situação crítica". Em finanças o pior item manda: estar sem reserva não é compensado por ter pouco custo fixo.
Indicador sem base real não recebe faixa. Se você não lançou nenhuma receita no mês, a taxa de poupança aparece marcada como "sem faixa", explicando que usou a renda declarada — dar nota a uma sobra que ninguém viu acontecer seria elogiar um número inventado.
Puxar dados direto do seu banco exige ser instituição autorizada pelo Banco Central ou contratar um agregador já certificado (Pluggy, Belvo e similares). Não há caminho legítimo fora disso: qualquer solução que peça a senha do seu banco é raspagem de tela, viola o contrato da instituição e coloca sua credencial em risco.
O app já está pronto para os dois cenários:
OPEN_FINANCE_PROVIDER | Comportamento |
|---|---|
sandbox (padrão) | Dados fictícios determinísticos, para desenvolver e testar o fluxo inteiro. Bloqueado em produção. |
pluggy | Integração real. Preencha PLUGGY_CLIENT_ID e PLUGGY_CLIENT_SECRET (os nomes antigos OPEN_FINANCE_CLIENT_ID/_SECRET continuam aceitos). |
A tela é /conectar, também no menu Movimento. Sem as duas chaves ela não finge conexão nenhuma:
diz que o Open Finance ainda não está configurado e leva para o import de arquivo, que já funciona.
Criar a conta na Pluggy, aceitar os termos e gerar o par de chaves é ação de conta e de dinheiro —
isso é feito por você, no painel deles, e o valor é colado no .env.
Trocar de agregador é escrever um arquivo em src/lib/open-finance/provedores/ implementando
ProvedorOpenFinance. Nenhuma tela muda.
Em qualquer provedor: a autenticação acontece no site do banco, o app recebe só permissão de leitura, o consentimento tem prazo (12 meses no padrão do BCB) e o app avisa antes de expirar. Revogar é um botão em Configurações.
Sem ANTHROPIC_API_KEY o Tino funciona pelo motor de regras: saldo, gastos por categoria, dívidas,
metas, reserva, projeção, empréstimo e MEI. Com a chave, ele também responde o que fugir desses temas,
usando apenas o panorama financeiro enviado no contexto.
Limites que ele respeita sem exceção: não recomenda ativo, corretora ou aplicação específica (atividade regulada), e em questão tributária explica o funcionamento mas manda confirmar com contador.
prisma/schema.prisma modelo de dados (dinheiro sempre em centavos Int)
src/lib/financeiro.ts Price, CET, amortização, metas, aposentadoria, MEI
src/lib/categorizar.ts dicionário + regras que aprendem
src/lib/importar/ OFX, CSV, PDF e deduplicação
src/lib/open-finance/ contrato + provedores (sandbox, Pluggy)
src/lib/parcelamentos.ts parcelas datadas e compromisso futuro
src/lib/tino/ panorama, diagnóstico, alertas, plano de pagamento, simulador, chat
src/lib/captura/ leitor de notificação bancária e ponte com o celular
src/app/(app)/ telas autenticadas
src/app/api/ rotas
Não há seed com dados de exemplo: o app começa vazio e aprende com você no primeiro acesso. Para carregar histórico de verdade, use Importar com o OFX, CSV ou PDF do seu banco.