Caixa
em desenvolvimentoControle financeiro pessoal em Go, feito para responder uma pergunta: para onde o meu dinheiro vai? O extrato entra por OFX, CSV, e-mail do banco ou Telegram, e a categorização é determinística, sem IA no caminho crítico.
GoPostgreSQLDockerCaddyTelegram Bot APIIMAPPWAWebSocket
demo://caixa · navegávelTela cheia ⇱
O que ele faz
- Tokenizador de OFX escrito do zero (SGML, Windows-1252, dinheiro em inteiro e nunca em float, com teste de fuzz)
- Leitor do extrato CSV do Bradesco, que não exporta OFX: identidade sintetizada por impressão e ordinal, então duas linhas iguais no mesmo dia não colapsam
- Categorização por regras com precedência total (prioridade, depois exata > prefixo > contém > regex, depois tamanho e id), provada por teste que embaralha a ordem das regras
- Outbox transacional: o evento é gravado na mesma transação do lançamento e o worker consome com FOR UPDATE SKIP LOCKED, testado com dois consumidores concorrentes
- Bot de Telegram próprio, sem biblioteca: a pergunta de categoria vai com teclado inline e a resposta vira regra aprendida
- Conciliação por pontuação (valor, data, Jaccard de trigramas, meio e origem): acima de 85 concilia, entre 60 e 84 vira provisório para revisão
- Relatório mensal com cinco detectores determinísticos, congelados em golden files; o gasto atípico usa mediana e MAD, porque o próprio ponto fora da curva contamina a média
- Alerta de orçamento em 80% e 100% que chega uma vez só, garantido por constraint no banco e não por memória de processo
- PWA embutido no binário por go:embed: login argon2id, sessão em cookie HttpOnly, CSP estrita sem inline e tela que atualiza sozinha por LISTEN/NOTIFY
- Imagem Docker multi-stage distroless, sem root e com binário estático, atrás de Caddy com TLS automático