Peculium v0.9.3 — todo CDB e o Tesouro entravam como ação
Um defeito só, com dois sintomas — e a duplicação de aportes de renda fixa era o segundo deles.
Todo CDB e o Tesouro entravam como AÇÃO
A lista de classes de ativo estava replicada três vezes no JavaScript, e duas das cópias não tinham RF nem TESOURO.
Quando a classe real não está entre as opções, o <select> cai na primeira — ACAO — e é esse valor que a tela devolve ao gravar. Todo CDB e o Tesouro Direto entravam classificados como ação.
A duplicação vinha daí
A reconciliação da nota de renda fixa com o extrato filtra por classe. Com o CDB marcado como ação, ela deixava de achar o lançamento que veio da B3 e criava outro: o mesmo aporte entrava duas vezes.
Dois defeitos aparentes, uma causa.
Duas defesas
Uma lista só, no topo do arquivo, com as sete classes. Barata, e resolve o caso conhecido.
O Python passou a ignorar a escolha da tela onde ele tem certeza. A gravação só aceita a classe que a interface manda nos tickers em que o programa pediu confirmação — um código que começa com CDB é renda fixa e ponto; TESOURO- é Tesouro. O sufixo 11, que é genuinamente ambíguo entre FII, ETF e unit, continua sendo decidido por quem importa.
Essa segunda defesa é a que importa: ela vale para a próxima lista que divergir, que ainda não sabemos qual é. Defeito de tela não pode corromper o razão.
Por que nada pegou
A tela de conferência do extrato da B3 não tinha nenhum teste de interface, e a ponte falsa usada nos testes nem sequer cobria esse caminho de importação — só nota de corretagem, nota de renda fixa e retrato de posição.
Agora cobre, com um ativo de cada natureza: um que o programa sabe classificar sozinho e um que ele pergunta.
4 testes de tela e 1 de unidade novos, todos verificados por mutação. 393 unitários e 42 E2E.
Quem já importou com uma versão anterior precisa apagar e reimportar: os ativos gravados estão com a classe errada, e isso não se corrige sozinho.
O Windows pode barrar o executável (Smart App Control): use Peculium.cmd ou rode do código-fonte.