Skip to content

Peculium v0.9.0 — o motor de importação montava a carteira errada

Choose a tag to compare

@devtulio devtulio released this 04 Aug 00:27
· 9 commits to main since this release

Oito defeitos no motor de importação, achados conferindo um acervo completo — dez notas de corretagem e os relatórios da B3 do ano inteiro — contra a posição que a própria corretora informa.

A carteira saía com R$ 12.689,33 onde o certo eram R$ 9.630,65. Depois das correções ela fecha nos R$ 9.630,65, papel por papel.

Ativo Antes Agora
KLBN4 570 285
SNAG11 190 100
XPCA11 140 100
Tesouro IPCA+ ausente R$ 2.079,13
Recibo de subscrição ausente R$ 38,56
Cadastros de corretora 6 3

A nota duplicava o negócio na primeira vez que via um papel

O pior em consequência. A reconciliação com a B3 rodava antes de o usuário informar o ticker — e sem ticker não há como casar, então o negócio entrava de novo por cima do que já viera do extrato. Um papel com 285 cotas aparecia com 570.

Da segunda nota em diante o apelido já existia e reconciliava certo, o que escondia o problema e fazia parecer intermitente.

A reconciliação passou a acontecer depois de o ticker ser resolvido. A mesma função é chamada duas vezes: no conferir, para a tela, e no gravar, com o que o usuário respondeu.

A B3 agrupa execuções que a nota detalha

Num dia real o extrato trouxe 68+12 cotas e a nota 1+11+68. Casar linha a linha não fecha nunca.

Agora casa pelo agregado do dia, conferindo quantidade e valor — só a quantidade colaria a nota no negócio errado quando há duas ordens do mesmo papel no dia com preços diferentes. Totais que não batem não são reconciliados: aí são negócios diferentes de verdade, e apagar o da B3 perderia lançamento.

A compra de Tesouro Direto era descartada em silêncio

O importador jogava fora toda linha "Compra" da Movimentação com o motivo "já vem no relatório de Negociação". Tesouro Direto não passa pela bolsa, então não vem — e eram R$ 2.079,13 de patrimônio sumindo sem aviso nenhum.

O preço da subscrição era jogado fora

A linha "Direitos de Subscrição - Exercido" traz preço unitário e valor da operação, e o programa dizia ao usuário que a B3 não informava o preço. Não era verdade. A subscrição exercida vira lançamento sozinha, e as outras cinco linhas de uma subscrição deixaram de pedir atenção à toa.

Renda fixa: datas e códigos diferentes dos dois lados

A nota é do dia da negociação e o extrato registra a liquidação — 18/06 contra 22/06 num caso real, e o mesmo aporte entrava duas vezes. Entrou uma janela de seis dias.

E o mesmo CDB virava dois ativos: a nota que não traz código utilizável gera um ticker derivado, enquanto a B3 usa o código dela. Agora casam por quantidade, preço unitário e emissor.

Os avisos mandavam fazer o que o sistema recusa

Papel recebido sem pagamento — presente, promoção — não entra como COMPRA, que exige preço maior que zero. Quem recebeu um BDR de brinde caía num beco sem saída. Os avisos passaram a apontar BONIFICAÇÃO, que é o caminho que existe.

Uma corretora, um cadastro

A mesma corretora chega com nomes diferentes em cada documento: XP INVESTIMENTOS CCTVM S/A, a mesma com ponto final, XP INVESTIMENTOS e o nome societário por extenso — quatro grafias, mais duas do Inter. Casando pelo texto cru eram seis cadastros para três corretoras, e a posição por instituição perdia o sentido.

O nome passou a ser reduzido ao de fantasia — sem acento, pontuação nem forma societária — e isso vira chave única.

Esquema versão 4

Coluna chave em instituicoes, com índice único. A migração funde as duplicadas de cofres antigos, repontando os lançamentos antes de apagar a cópia e preservando o CNPJ que só existir na que vai sumir.


15 testes novos. As nove proteções foram verificadas por mutação — neutralizar cada uma faz o teste correspondente falhar. 381 unitários e 38 E2E.

O Windows pode barrar o executável (Smart App Control): use Peculium.cmd ou rode do código-fonte.