Summary
entries update falha com 400 Bad Request ("Erro inesperado") ao alterar um lançamento parcelado (com parcela/agenda). Só é possível editar lançamentos simples; qualquer parcela retorna erro e não é atualizada.
Description
O comando entries update reconstrói o payload do PUT a partir do lançamento existente (fetchEntry), mas descarta campos que só existem em lançamentos parcelados. A API /v1/lancamentos/{id} rejeita o PUT quando esses campos ausentes fazem parte do registro original.
Campos presentes no lançamento cru (fetchEntry) mas omitidos no payload de entries update (src/commands/entries.ts, ~L505–536):
parcela (ex.: "8/18")
agendaId
plastico (id do plástico do cartão)
dataCompetencia
categoriaPai
Como o payload é montado do zero em vez de partir do objeto retornado por fetchEntry, esses campos se perdem e o PUT falha para qualquer parcela.
Steps to Reproduce
- Ter um cartão de crédito com uma compra parcelada (ex.: fatura da Ourocard).
- Pegar o ID de uma parcela:
mdcli cards invoice -a Ourocard --month 2026-07 --json
- Tentar corrigir o valor da parcela:
mdcli entries update 310368343 --value=-301.20 --json
Expected vs. Actual Results
Esperado: o valor da parcela é atualizado e a API retorna o lançamento atualizado.
Atual: a requisição falha:
✗ API request failed: 400 Bad Request - {"type":1,"error":"Erro inesperado","status":400}
O lançamento não é alterado.
Workaround
Fazer o PUT preservando o objeto cru — buscar via fetchEntry(id), sobrescrever apenas valor/valorPrevisto/valorEfetivo (negativo para despesa) mantendo parcela, agendaId, plastico, dataCompetencia, categoriaPai, e então updateEntry(id, payload). Isso atualiza a parcela com sucesso.
Sugestão de correção
Em src/commands/entries.ts, montar o payload a partir de um spread do lançamento existente ({ ...existing, ...overrides }) em vez de listar os campos manualmente, ou incluir explicitamente parcela, agendaId, plastico, dataCompetencia e categoriaPai no payload quando presentes no registro.
Environment
- mdcli: 1.0.0
- OS: macOS 26.5.1 (arm64)
- Runtime: Bun 1.3.12 / Node v26.0.0
- Auth: Browser session (Chrome)
- Frequência: 100% reproduzível em lançamentos parcelados; lançamentos simples não são afetados.
Additional
Labels sugeridas: bug.
Summary
entries updatefalha com 400 Bad Request ("Erro inesperado") ao alterar um lançamento parcelado (comparcela/agenda). Só é possível editar lançamentos simples; qualquer parcela retorna erro e não é atualizada.Description
O comando
entries updatereconstrói o payload do PUT a partir do lançamento existente (fetchEntry), mas descarta campos que só existem em lançamentos parcelados. A API/v1/lancamentos/{id}rejeita o PUT quando esses campos ausentes fazem parte do registro original.Campos presentes no lançamento cru (
fetchEntry) mas omitidos no payload deentries update(src/commands/entries.ts, ~L505–536):parcela(ex.:"8/18")agendaIdplastico(id do plástico do cartão)dataCompetenciacategoriaPaiComo o payload é montado do zero em vez de partir do objeto retornado por
fetchEntry, esses campos se perdem e o PUT falha para qualquer parcela.Steps to Reproduce
mdcli cards invoice -a Ourocard --month 2026-07 --jsonExpected vs. Actual Results
Esperado: o valor da parcela é atualizado e a API retorna o lançamento atualizado.
Atual: a requisição falha:
O lançamento não é alterado.
Workaround
Fazer o PUT preservando o objeto cru — buscar via
fetchEntry(id), sobrescrever apenasvalor/valorPrevisto/valorEfetivo(negativo para despesa) mantendoparcela,agendaId,plastico,dataCompetencia,categoriaPai, e entãoupdateEntry(id, payload). Isso atualiza a parcela com sucesso.Sugestão de correção
Em
src/commands/entries.ts, montar o payload a partir de um spread do lançamento existente ({ ...existing, ...overrides }) em vez de listar os campos manualmente, ou incluir explicitamenteparcela,agendaId,plastico,dataCompetenciaecategoriaPaino payload quando presentes no registro.Environment
Additional
Labels sugeridas:
bug.