Design: cashbook¶
Status: vigente Data: 2026-09-27 ADR: fase 1 do caixa, domínio cashbook PRD: caixa pessoal e profissional
Objetivo¶
Receber a linha já normalizada, classificar com os tipos do importador e devolver o resultado do mês. O número é calculado no cashbook. A tela só exibe.
Fora deste desenho¶
Telas, rota e estados do admin estão em Admin. A leitura de OFX, CSV, PDF e do XLSX do cartão Itaú fica no bank. Open Finance, corretora e lançamento de imóvel não entram. message não lê caixa de e-mail. O Google Drive não é lido na fase 1.
Fluxo¶
flowchart LR
admin[Admin]
api[API]
inter[Pacote inter]
bank[Pacote bank]
cashbook[Dominio cashbook]
sqlite[SQLite ja classificado]
admin --> api
api --> bank
inter --> bank
bank --> cashbook
sqlite --> cashbook
cashbook --> admin
- O upload chega na API e o
banklê o arquivo. A linha gravada tem data, valor, descrição efitid. Em seguida obankpublicaTRANSACTIONS_CAPTURED. - A conta Inter da TESTTO já publica esse evento na coleta que existe. A fase 1 configura a conta da WMREIS no mesmo conector, com outro
x-conta-corrente. Nenhuma das duas entra por OFX. - O
cashbookconsome o evento, grava o movimento no livro da conta e classifica. A regra gravada, por ordem, ganha do classificador. - A carga do histórico copia o SQLite: a linha normalizada para o
banke o tipo já gravado para ocashbook. Esse arquivo cobre Milton e WMREIS, de 2024 a 2027. A TESTTO não está nele. O passado dela é o que ointerjá deixou nobank, e ocashbookclassifica essa coleta. - A API
/cashbookdevolve painel, revisão, lançamento manual, contas a vencer e plano de reserva.
Livros e contas¶
Três livros: Milton, TESTTO e WMREIS. Cada conta tem banco e produto, conta ou cartão. A identidade (provedor, agência e número) fica no bank. O vínculo com o livro está em Conta do bank.
O movimento nasce no livro da conta. Conta sem livro vai para a revisão e não entra no resultado.
Tipos¶
| Tipo | Efeito no resultado |
|---|---|
receita |
Receita real, se a categoria não estiver na revisão |
despesa |
Despesa real, se a categoria não estiver na revisão |
estorno |
Abate a despesa. No cartão, valor positivo da fatura |
interno |
Fora do resultado. Transferência dentro do mesmo livro |
retirada |
Fora do resultado. Transferência entre livros |
pagamento_fatura |
Fora do resultado. A compra já entrou no cartão |
investimento |
Fora do resultado |
patrimonial |
Fora do resultado |
emprestimo |
Fora do resultado |
ignorar |
Fora do resultado e da revisão |
No Santander não há fatura itemizada. O pagamento na conta corrente é despesa, não pagamento_fatura.
Estas categorias ficam na revisão e fora do resultado: "Pix para pessoas", "Outras entradas", "Sem categoria" e "Boleto sem favorecido".
Contrato¶
O mês é o mês calendário de data, no formato AAAA-MM. Entram no agregado as linhas com situação confirmado, sem duplicata e com tipo diferente de ignorar.
Arquivo repetido: o sha256 igual ao já gravado não é lido de novo. Linha repetida: a chave é conta, data, valor com duas casas, descrição normalizada nos primeiros 90 caracteres e fitid.
O painel, por livro e no consolidado, devolve receita real, despesa real, resultado e a série dos meses. Ao lado, sem entrar na conta: interno, retirada, pagamento_fatura, investimento, patrimonial e emprestimo. A tela não recalcula esses campos.
O lançamento manual grava conta, data, valor, descrição e um dos tipos. A data do manual é a mesma data do mês.
Fases de dados¶
- Três livros, conta e cartão, carga do SQLite, Inter da TESTTO e da WMREIS, upload lido no
bank, classificação com revisão e o agregado do painel. - Pasta do Drive por banco e label do Gmail. O
banklê o arquivo da pasta como lê o upload. Previsto de boleto e conciliação com o extrato. - Meta de reserva, reserva atual, gap, aportes e sobra investível. A sobra é o resultado real depois de completar a reserva.
O primeiro corte visível não espera este agregado nem a pasta do Drive. O lembrete está em Lembrete.
Acesso¶
O movimento segue o acesso ao DynamoDB. A lista é Query com cursor, no desenho do razão de imóvel. A partição é livro e mês, não o tenant inteiro. Não usa RepositoryBase nem Scan. Não grava em FinancialEntry.
Riscos¶
CSV instável por banco. O mapa de colunas fica na tarefa de arquivo, não neste corte. Pareamento que a regra não cobre vai para a revisão. A WMREIS ainda não está no header do Inter. Nenhum desses riscos autoriza gravar o caixa em FinancialEntry.