Ao mover R$ 500 da conta corrente para a reserva, a conta corrente perde R$ 500 e a reserva ganha R$ 500. O patrimônio consolidado permanece igual. Se o relatório classificar cada ponta como receita ou despesa, os totais mensais ficam inflados mesmo com o saldo correto.
Extrato e relatório respondem a perguntas diferentes
O extrato explica por que o saldo da conta mudou. O relatório de receitas e despesas descreve o que entrou ou saiu como receita ou gasto no período. Uma transferência entre contas próprias pode aparecer nos dois extratos e ficar fora das duas categorias do relatório. Se houver uma tarifa de R$ 2, registre a tarifa separadamente como despesa.
Em uma modelagem de duas pontas, use um identificador de transferência comum e grave os dois movimentos juntos. A operação precisa atualizar ambas as contas de forma atômica ou preservar um registro do qual os dois saldos sejam derivados. Em uma implementação com saldos materializados, teste transferências simultâneas em sentidos opostos e defina uma ordem estável de bloqueio das contas.
O efeito do recorte
Se o usuário filtra apenas a conta corrente, o movimento de R$ 500 ainda deve explicar a variação de saldo dessa conta. Se filtra ambas, o efeito líquido é zero. Preserve a classificação de transferência nos dois casos. Se o produto exibe entradas e saídas de caixa, rotule esse indicador de forma distinta de receitas e despesas.
Uma massa de teste pequena resolve boa parte da ambiguidade: saldo inicial de R$ 1.000, transferência de R$ 500 e tarifa de R$ 2. O saldo consolidado termina em R$ 998, com despesa de R$ 2.
Transações no PostgreSQL · Testes de integração de uma API Go