Um relatório pode apresentar pagamentos acima do total bancário mesmo quando os arquivos de origem não contêm movimentos repetidos. O erro pode surgir ao combinar duas listas que possuem várias linhas para a mesma nota. Cada item passa a aparecer ao lado de cada pagamento, e a soma dessa tabela aumenta os valores sem criar uma nova operação.
Neste laboratório, o assistente técnico contábil consegue reproduzir o problema, identificar as linhas produzidas pelo cruzamento e conferir uma alternativa que preserva os totais. Todos os documentos, códigos e valores são fictícios. Não há dados de clientes, pagamentos reais ou resultado obtido pela Costa Nova.
Uma nota pode ter vários itens e vários pagamentos
O conjunto contém três notas. A primeira tem dois itens e dois pagamentos parciais. Os pagamentos possuem o mesmo valor, mas identificadores diferentes. A segunda tem um item e um pagamento. A terceira tem um item e nenhum pagamento na base fictícia, que foi definida como completa para este exercício.
| Nota | Itens individualizados | Pagamentos individualizados | Total dos itens | Total recebido |
|---|---|---|---|---|
| N1 | I1, R$ 600, e I2, R$ 400 | P1, R$ 300, e P2, R$ 300 | R$ 1.000 | R$ 600 |
| N2 | I3, R$ 500 | P3, R$ 200 | R$ 500 | R$ 200 |
| N3 | I4, R$ 700 | Nenhum no conjunto completo | R$ 700 | R$ 0 |
| Total | Quatro itens | Três pagamentos | R$ 2.200 | R$ 800 |
O saldo nominal do exercício é R$ 1.400. Não se aplicam juros, correção, descontos ou regras de imputação. O propósito é conferir a construção da base, antes de qualquer cálculo financeiro adicional.
Como quatro combinações alteram uma nota de mil reais
Ao cruzar itens e pagamentos pelo código N1, surgem quatro pares: I1 com P1, I1 com P2, I2 com P1 e I2 com P2. Os itens de R$ 600 e R$ 400 aparecem duas vezes. Cada pagamento de R$ 300 também aparece duas vezes. A tabela passa a mostrar R$ 2.000 em itens e R$ 1.200 em pagamentos para uma nota de R$ 1.000.
O erro não está na soma. Ela executa corretamente uma instrução sobre uma tabela cuja unidade deixou de ser item ou pagamento e passou a ser combinação entre os dois. Acrescentar uma fórmula de soma mais precisa não corrige essa mudança de unidade.
| Procedimento | Linhas resultantes | Itens somados | Pagamentos somados | Diferença nominal |
|---|---|---|---|---|
| Cruzamento que exige pagamento correspondente | 5 | R$ 2.500 | R$ 1.400 | R$ 1.100 |
| Cruzamento que também conserva o item sem pagamento | 6 | R$ 3.200 | R$ 1.400 | R$ 1.800 |
| Totais separados por nota, depois relacionados | 3 | R$ 2.200 | R$ 800 | R$ 1.400 |
O primeiro procedimento exclui N3, além de multiplicar N1. O segundo preserva N3, mas mantém a multiplicação. Portanto, conservar registros sem correspondência é necessário para a cobertura desse exemplo e insuficiente para validar as somas.
Somar valores diferentes também não resolve
Uma tentativa de correção seria somar somente valores monetários distintos. Isso reduziria os pagamentos a R$ 500, correspondentes a R$ 300 mais R$ 200. O pagamento P2 desapareceria porque possui o mesmo valor de P1. Identidade de valor não é identidade de operação.
A alternativa demonstrada agrega cada fonte por nota antes do relacionamento. Os quatro itens tornam três totais de faturamento, os três pagamentos tornam dois totais de recebimento e o cadastro das três notas mantém N3 na saída. A diferença por nota fica em R$ 400, R$ 300 e R$ 700.
Em dados reais, uma nota pode depender também de emitente, série e estabelecimento para ser identificada. O exercício adota códigos globais únicos como premissa explícita. Aplicar sua chave curta a outro sistema sem conferir essa premissa pode juntar documentos diferentes.
Arquivos para testar os três resultados
O pacote contém o cadastro de notas, itens, pagamentos, resultados esperados e consultas SQL. O programa opcional verificar.py usa a biblioteca padrão do Python, executa as consultas em uma base SQLite temporária em memória e confere os totais. Não envia documentos à internet nem acessa a contabilidade de uma empresa.
A documentação oficial do PostgreSQL sobre junções explica a formação de uma linha para cada correspondência. A base e as contas acima são uma demonstração própria. O arquivo SQL usa operações também testadas no SQLite e não exige instalar um servidor PostgreSQL.
Ao apresentar o achado em assistência técnica contábil, preserve as duas fontes, a chave utilizada, a contagem de linhas e a consulta executada. Esse diagnóstico é diferente de encontrar extratos importados em duplicidade. Aqui, as linhas de origem são únicas. A multiplicação nasce da transformação e não comprova pagamento duplicado ou desvio financeiro.
