Skip to content

feat: estorno v3 (POST /v2/charges/{uuid}/refunds) - #44

Merged
Fábio Rodrigues (FabioMR) merged 2 commits into
mainfrom
fabio.rodrigues/feat/estorno-v3
Oct 14, 2026
Merged

Fábio Rodrigues (FabioMR) merged 2 commits into
mainfrom
fabio.rodrigues/feat/estorno-v3

Conversation

@FabioMR

@FabioMR Fábio Rodrigues (FabioMR) commented Oct 14, 2026 •

Copy link
Copy Markdown
Contributor

A Barte vai descontinuar os endpoints atuais de estorno e substituí-los pelo novo fluxo: um endpoint só para estorno total e parcial, assíncrono e com idempotência.

O que muda

  • create_refund(charge_id, amount, idempotency_key): chama POST /v2/charges/{uuid}/refunds com o header x-idempotency-key.
    • Devolve um ChargeRefund, normalmente em PROCESSING. O resultado final vem em Charge.refunds ou no webhook do domínio CHARGE.
    • Repetir a chamada com a mesma chave e o mesmo valor devolve o mesmo estorno.
    • Valor com mais de duas casas decimais é recusado, e não arredondado.
  • Charge.refunds: a lista de estornos que o GET /v2/charges/{uuid} já devolvia e o SDK descartava.
    • Todos os campos de ChargeRefund são opcionais, porque itens antigos vêm sem uuid e sem idempotencyKey.
    • O campo entra como argumento nomeado (kw_only=True, default None), para não quebrar os construtores de Charge e PixCharge, inclusive as chamadas por posição.
  • _request aceita headers por requisição. A chave de idempotência não pode ir para os headers da sessão, que é compartilhada entre chamadas.
  • refund_charge, partial_refund_charge, get_refund e Charge.refund passam a emitir DeprecationWarning, sem remoção. O estorno parcial feito pelo fluxo antigo só aparece no GET /v2/charges/partial-refund/{id}, então esses métodos ainda são necessários durante a transição.

O status HTTP de um erro, por exemplo o 409 de conflito de idempotência, está em BarteError.response.status_code.

Testes

  • Casos novos em tests/test_client.py, com payloads reais do sandbox. Os testes antigos de estorno passam a conferir o aviso de depreciação.
  • Contrato validado no sandbox da Barte: 202, repetição idempotente, 409 BAR-0466 e 400 BAR-0451.

Depois do merge, a versão sai como v0.16.0.

Adiciona create_refund com x-idempotency-key e refunds[] na cobrança. Os endpoints antigos de estorno ficam marcados como depreciados, sem remoção.
Copilot AI balanced review requested due to automatic review settings October 14, 2026 15:25

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

O novo campo obrigatório quebra a compatibilidade dos construtores públicos de Charge e PixCharge.

1 open finding
What changed in this PR

Adiciona ao SDK o novo fluxo assíncrono de estorno da Barte, mantendo os métodos legados durante a transição.

Alterações:

  • Introduz create_refund com chave de idempotência por requisição.
  • Expõe estornos em Charge.refunds e exporta ChargeRefund.
  • Adiciona avisos de depreciação e testes do novo fluxo.
File Description
tests/​test_client.py Testa estornos, validação, conflito e depreciação.
barte/​models.py Adiciona ChargeRefund e Charge.refunds.
barte/​client.py Implementa o endpoint e headers por requisição.
barte/​__init__.py Exporta ChargeRefund.

🧠 Review effort: Balanced


💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread barte/models.py Outdated
Sem default, o campo virava obrigatório nos construtores de Charge e PixCharge. Com kw_only e default None, as chamadas antigas continuam valendo, inclusive por posição.
Comment thread barte/models.py
@FabioMR
Fábio Rodrigues (FabioMR) merged commit 8316bce into main Oct 14, 2026
16 checks passed
@FabioMR
Fábio Rodrigues (FabioMR) deleted the fabio.rodrigues/feat/estorno-v3 branch October 14, 2026 18:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

2 participants