Saltar para o conteúdo principal
GoCardless API · invalid_state · reinstate

GoCardless mandate_not_inactive: o mandato não pode ser reativado

Reativar um mandato (reinstate) é voltar a apresentar aos bancos um mandato cancelado ou expirado. A GoCardless rejeita-o com mandate_not_inactive se o mandato já estiver ativo ou já estiver em apresentação. Com o conector só se pode pedir fora de produção, porque em produção a GoCardless restringe essa função.

FlexigoTech · Responsável: Víctor Gómez · Atualizado em 6 de novembro de 2026

O essencial

Módulo
GoCardless
Versões
Odoo 17, 18, 19 e 20
Verificado
no código do conector, versão 17.0, 18.0, 19.0 e 20.0 · nas fontes indicadas no fim
Leitura
4 min

O que diz a GoCardless

ReasonTipoTexto da GoCardless
mandate_not_inactiveinvalid_state«Mandate could not be reinstated» e «it is already active or being submitted.»

A GoCardless separa as duas partes do texto com um travessão. Na referência da API detalha: «This will fail with a mandate_not_inactive error if the mandate is already being submitted, or is active.». É um erro invalid_state, e para esses a GoCardless pede que se avise o utilizador e não se volte a tentar («invalid_state → inform the end user, do not allow retry.»).

Cartão do erro mandate_not_inactive da GoCardless
O reason, o seu tipo invalid_state, a ação de reativar (actions/reinstate) e o texto da GoCardless.

Que mandatos se podem reativar

A reativação tem mais condições do que o estado:

  • É uma função restrita: «Restricted this endpoint requires approved custom payment pages».
  • Só vale para um mandato cancelado através do Dashboard ou da API: «A mandate can only be reinstated if it has been cancelled through the dashboard or the API.». Um que cancelou o banco, não: «Any mandate that has been cancelled by the bank cannot be reinstated.».
  • Serve para mandatos cancelados ou expirados («Reinstates a cancelled or expired mandate to the banks.»), e um mandato pode voltar a ser apresentado até 10 vezes («Mandates can be resubmitted up to 10 times.»).

Depois de a pedir, o processo é o de uma adesão: chega resubmission_requested e depois, como diz a GoCardless, «so you will receive a submitted webhook, followed by a reinstated or failed webhook up to two working days later.».

O que o Odoo faz com o conector

Na ficha do método de pagamento do cliente, o conector mostra o botão «Reativar mandato (sandbox)». Só aparece se o mandato for da GoCardless, o fornecedor não estiver em produção (no Odoo 17, 18 e 19, o estado do fornecedor; no Odoo 20, a caixa de produção) e «Estado do mandato» for cancelled, failed ou expired.

Ao carregar nele:

  1. O conector pede à GoCardless a reativação desse mandato.
  2. Se a GoCardless a aceitar, o estado passa a reinstate_requested e na ficha do cliente fica «Foi pedida a reativação do mandato da GoCardless. Não poderá ser usado até o banco o confirmar.». O método de pagamento continua arquivado.
  3. Quando chega reinstated, o conector volta a dá-lo por válido: reativa-o e escreve «O mandato GoCardless pode voltar a ser usado (reinstated).».

Se a GoCardless responder mandate_not_inactive, o conector não o captura: o Odoo mostra «A GoCardless rejeitou o pedido.» com a mensagem da GoCardless, o reason e o request_id, e o mandato fica como estava. Acontece quando o Odoo acha que o mandato está morto e na GoCardless já está ativo ou em apresentação, porque os seus eventos ainda não chegaram ao Odoo. Depois de um pedido aceite, o botão deixa de aparecer, porque o estado passa a reinstate_requested.

A nota de que o mandato pode voltar a ser usado é escrita pelo conector ao aplicar o evento, sem ninguém à frente. Estes textos saem no idioma de quem lança a cobrança; se for uma ação agendada, como a renovação de uma subscrição, são escritos sem ninguém à frente: numa base de dados criada em português saem assim, e numa criada em inglês e passada depois para português, em inglês: «The GoCardless mandate is usable again (reinstated).».

Esquema: o que a GoCardless envia com mandate_not_inactive e o que o Odoo faz com o conector
Esquema feito a partir do código do conector (17.0, 18.0, 19.0 e 20.0) e da documentação da GoCardless.

O que fazer

  1. Se aparecer mandate_not_inactive, procure o mandato no Dashboard da GoCardless. Se estiver ativo ou em apresentação, não há nada a reativar: espere que cheguem os seus eventos. A tarefa que de hora a hora recupera os eventos em falta trá-los.
  2. Se o mandato foi cancelado pelo banco, não tente: a GoCardless não reativa esses. Peça ao cliente um mandato novo.
  3. Em produção, o conector não oferece a reativação: o caminho é um mandato novo assinado pelo cliente.
  4. Para testar, use o sandbox da GoCardless com o fornecedor em testes.

Porque é que o botão só aparece fora de produção?

Porque a GoCardless restringe a reativação a quem tem páginas de pagamento próprias aprovadas, e o conector só a oferece fora de produção.

Quanto tempo demora a voltar a ser válido o mandato?

O que demorarem os bancos: segundo a GoCardless, depois de resubmission_requested chega submitted e, até dois dias úteis depois, reinstated ou failed conforme respondam os bancos. Até lá, o conector não o usa.

Com o nosso conector

No Odoo 17, 18, 19 e 20 o conector só oferece reativar um mandato cancelado, falhado ou expirado, e só fora de produção, e não volta a usá-lo até a GoCardless confirmar a reativação com o seu evento.

Continue a ler

GoCardless mandate_expired: o mandato caducou por não ser usadoA GoCardless marca um mandato como expired quando não se tenta cobrar com ele durante todo o período de inatividade. O que faz o Odoo e como continuar a cobrar.GoCardless MD01: mandate_cancelled e authorisation_disputed num débito SEPAO código SEPA MD01 chega na GoCardless como mandate_cancelled ou authorisation_disputed, num débito falhado, devolvido ou cancelado. O que o Odoo faz com ele.Erro mandate_is_inactive da GoCardless ao criar uma cobrança a partir do OdooA GoCardless responde mandate_is_inactive ao criar um pagamento com um mandato cancelado, falhado ou expirado. Porquê e como o conector o resolve no Odoo.
Verificado no código do conector (versão 17.0, 18.0, 19.0 e 20.0) e nas fontes indicadas

Fontes

  • docs.gocardless.com/docs/api-reference/responses-and-errors
  • docs.gocardless.com/docs/api-reference/mandate
  • docs.gocardless.com/docs/api-reference/events/mandate
  • Código do módulo: flexigo_payment_gocardless: const.py, linha 134 em 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: views/payment_token_views.xml, linha 23 em 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: views/payment_token_views.xml, linha 22 em 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: i18n/pt.po, linha 1071 em 17.0 (d203ee6), linha 1071 em 18.0 (e2ab18b), linha 1071 em 19.0 (ce7f5a3) e linha 1093 em 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: models/payment_token.py, linha 176 em 17.0 (d203ee6), linha 176 em 18.0 (e2ab18b), linha 176 em 19.0 (ce7f5a3) e linha 175 em 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: models/payment_token.py, linha 173 em 17.0 (d203ee6), linha 173 em 18.0 (e2ab18b), linha 173 em 19.0 (ce7f5a3) e linha 172 em 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: i18n/pt.po, linha 1079 em 17.0 (d203ee6), linha 1079 em 18.0 (e2ab18b), linha 1079 em 19.0 (ce7f5a3) e linha 1101 em 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: models/payment_token.py, linha 170 em 17.0 (d203ee6), linha 170 em 18.0 (e2ab18b), linha 170 em 19.0 (ce7f5a3) e linha 169 em 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: models/payment_provider.py, linha 397 em 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: models/payment_provider.py, linha 462 em 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: i18n/pt.po, linha 558 em 17.0 (d203ee6), linha 558 em 18.0 (e2ab18b), linha 558 em 19.0 (ce7f5a3) e linha 564 em 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: const.py, linha 158 em 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: models/payment_token.py, linha 77 em 17.0 (d203ee6), linha 77 em 18.0 (e2ab18b), linha 77 em 19.0 (ce7f5a3) e linha 76 em 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: i18n/pt.po, linha 1253 em 17.0 (d203ee6), linha 1253 em 18.0 (e2ab18b), linha 1253 em 19.0 (ce7f5a3) e linha 1265 em 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: views/payment_token_views.xml, linha 15 em 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: i18n/pt.po, linha 847 em 17.0 (d203ee6), linha 847 em 18.0 (e2ab18b), linha 847 em 19.0 (ce7f5a3) e linha 869 em 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: const.py, linha 117 em 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
  • github.com/odoo/odoo/blob/20.0/addons/account_payment/views/account_move_views.xml
  • github.com/odoo/odoo/blob/17.0/odoo/http.py
  • Código do módulo: flexigo_payment_gocardless: __manifest__.py, linha 31 em 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)