Skip to content

entries update falha (400) em lançamentos parcelados por omitir campos da parcela no payload #10

Description

@fm1randa

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

  1. Ter um cartão de crédito com uma compra parcelada (ex.: fatura da Ourocard).
  2. Pegar o ID de uma parcela: mdcli cards invoice -a Ourocard --month 2026-07 --json
  3. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions