Peculium v0.9.0 — o motor de importação montava a carteira errada
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.