Automação
Comente LANCAMENTO no Instagram @gastaomatos

Lançar Boleto e Comprovante no Caixa com IA

Lançamento manual sempre acaba quebrando porque ninguém quer parar pra digitar 12 boletos por dia. Tirar foto e a IA cuidar do resto é o caminho mais curto pra um fluxo de caixa que de fato existe.

Por que entrada manual sempre acaba quebrando

  • Digitar lançamento é fricção pura, depois de 2 dias todo mundo abandona
  • Lançamento atrasado vira fim de mês surpresa
  • Categorização errada quebra o relatório por categoria
  • Múltiplos sócios usando o mesmo sistema = padrão diferente, dado sujo
  • Anexar comprovante exige outro fluxo manual, fica perdido

Stack

  • Next.js 16 com App Router
  • Drizzle ORM + Neon Postgres
  • shadcn/ui + Tailwind CSS v4
  • Anthropic Claude API com Vision (claude-3-5-sonnet)
  • UploadThing ou Vercel Blob pra armazenar a imagem
  • Stack Auth pra login
  • Deploy Vercel

Prompt completo para Claude Code

Cole no Claude Code dentro de uma pasta vazia:

prompt
Crie um sistema de lançamento financeiro com OCR por IA em Next.js 16.

Schema (Drizzle + Neon):

transactions (
  id text primary key,
  user_id text not null,
  type text not null,  // entrada | saida
  amount integer not null,  // em centavos
  due_date date not null,
  paid_at date,
  vendor text,
  category text,
  description text,
  attachment_url text,  // url do comprovante salvo
  status text default 'pendente',  // pendente | pago | atrasado
  created_at timestamp default now()
)

attachments (
  id text primary key,
  user_id text not null,
  transaction_id text references transactions(id),
  file_url text not null,
  file_type text not null,  // image | pdf
  ocr_result jsonb,  // o JSON cru retornado pela IA
  created_at timestamp default now()
)

Fluxo principal:

1. Tela /novo: input file que aceita foto (câmera ou galeria) ou PDF
2. Upload via UploadThing pra storage seguro
3. Server Action processUpload(fileUrl):
   a) baixa o arquivo no servidor
   b) se for PDF, converte primeira página em imagem (sharp ou pdf-to-png)
   c) chama Claude com Vision:

      const response = await anthropic.messages.create({
        model: 'claude-3-5-sonnet-20241022',
        max_tokens: 1024,
        messages: [{
          role: 'user',
          content: [
            { type: 'image', source: { type: 'base64', media_type: 'image/png', data: base64 } },
            {
              type: 'text',
              text: `Você lê boletos, notas fiscais e comprovantes.

              Extraia em JSON:
              {
                'type': 'saida' (boleto a pagar) ou 'entrada' (recebimento),
                'amount_brl': valor em reais (float),
                'due_date': 'YYYY-MM-DD' (data de vencimento),
                'paid_at': 'YYYY-MM-DD' ou null (data de pagamento se for comprovante),
                'vendor': nome do fornecedor/cliente,
                'category': uma de [aluguel, energia, agua, internet, salarios, fornecedor, impostos, marketing, outros],
                'description': em 1 linha o que é,
                'confidence': 0 a 1 (quão certo você está)
              }

              Se não conseguir ler, retorne { error: 'motivo' }. Não invente valor.`
            }
          ]
        }})

   d) se confidence < 0.7 OU response contém error: voltar pra tela de fallback
      onde o usuário digita manualmente
   e) se confidence >= 0.7: mostrar preview em modal com os campos preenchidos
      e botão "Confirmar lançamento"
   f) usuário confirma: insert no transactions + insert no attachments com ocr_result cru

4. Tela /transactions lista todos os lançamentos com filtro por status, categoria e data.

5. Tela /dashboard mostra entrada do mês, saídas do mês, fluxo dos próximos 30 dias
   (cruza transactions com due_date dentro da janela).

Categorias padrão (editáveis em /config):
aluguel, energia, agua, internet, salarios, fornecedor,
impostos, marketing, manutencao, software, outros

Fallback se OCR falhar:
Tela /novo/manual com formulário shadcn (form, input, select, calendar).
Mesmo Server Action createTransaction com validação Zod.
Sempre disponível, mesmo quando OCR funcionar bem.

Server Actions com validação Zod:
- uploadFile
- processUpload
- createTransaction
- updateTransaction
- deleteTransaction
- markAsPaid

Auth:
Stack Auth, todas as queries filtram por user_id.

Componentes shadcn necessários:
button, input, card, dialog, form, select, calendar,
badge, table, alert, label, separator, sonner

Variáveis de ambiente:
DATABASE_URL
ANTHROPIC_API_KEY
UPLOADTHING_TOKEN
STACK_PROJECT_ID + STACK_SECRET_SERVER_KEY + STACK_PUBLISHABLE_CLIENT_KEY

Deploy: Vercel com integração Neon e UploadThing.

Como conectar ao seu sistema financeiro

  • Se você já tem o gerenciador financeiro do guia FINANCEIRO, esse módulo entra como rota /novo dentro do mesmo app
  • Compartilha o mesmo schema de transactions, só adiciona a tabela attachments e o campo attachment_url
  • Pra integrar com outro sistema (Conta Azul, Bling, Tiny), o resultado do OCR fica num webhook que dispara para a API deles
  • A maior parte das integrações exige só 30 linhas extras com axios + token do sistema externo
  • O fluxo da foto continua o mesmo, muda só o destino final

OCR + classificação por IA

  • Claude Vision lê boleto, nota fiscal e comprovante bancário com taxa de acerto acima de 90% pra valor e data
  • Categoria é sugerida pela IA e o usuário aprova ou troca no preview
  • Comprovantes (PIX, débito) são reconhecidos como type = entrada ou saida pelo contexto
  • PDF com várias páginas: converte só a primeira (a maioria dos boletos cabe nela)
  • Confidence < 0.7 cai pro fallback manual com os campos pré-preenchidos pelo que deu pra ler

Categorias padrão

  • aluguel: contrato de imóvel comercial ou residencial
  • energia, agua, internet: contas de utilidade pública
  • salarios: folha de pagamento de funcionários ou pró-labore
  • fornecedor: NF de fornecedor de produto ou serviço
  • impostos: DAS, DARF, IPTU, IPVA, INSS
  • marketing: tráfego pago, ferramenta de marketing, agência
  • manutencao: conserto de equipamento, reforma
  • software: assinatura de SaaS recorrente
  • outros: pra tudo que não bate em categoria acima

Perguntas frequentes

O Claude Vision lê boleto manuscrito?

Lê, mas com taxa de acerto bem menor (60 a 70%). Pra manuscrito vale o fallback manual com os campos já pré-preenchidos pelo que a IA conseguiu identificar. Pra boleto impresso e nota fiscal eletrônica, a taxa fica acima de 90%.

Preciso de servidor com GPU pra rodar OCR?

Não. O Claude roda na nuvem da Anthropic, você só envia a imagem em base64 pela API. Custo é cerca de R$ 0,03 por imagem processada. Pra 200 boletos por mês, fica em torno de R$ 6.

E se o boleto tiver código de barras só?

Pra extrair valor a partir de código de barras puro, melhor usar uma lib específica de leitura de boleto bancário (FEBRABAN) em Node, como bankslip-validator. A IA cobre o caso onde o boleto vem com layout visual completo (a grande maioria).

Onde fica salva a foto?

No UploadThing ou Vercel Blob, conforme o que você configurar. Por padrão fica privada, só acessível pelo usuário autenticado. O link no attachment_url é assinado e expira após 24h se você quiser uma camada extra de segurança.

Funciona com nota fiscal de serviço?

Funciona. NFS-e (serviços) e NF-e (produtos) seguem layouts padronizados que o Claude lê bem. Em prefeituras com layout muito custom, vale validar o OCR nas primeiras 10 notas e ajustar o prompt se necessário.

Quer implementar isso?

Me chama no WhatsApp. Ajudo você a configurar ou implemento pra você.

Quero ajuda no WhatsApp
DT

Gastão Matos

@gastaomatos