Cancelamento de apólices

O cancelamento de apólices ocorre em 2 modalidades, a depender da situação: agendado e imediato. Esse processo é iniciado ao fazer uma chamada na API GraphQL para a mutation CancelPolicy.

Cancelamento Agendado

Para criar um cancelamento agendado o parceiro deve enviar uma data no atributo scheduledTo. Alguns detalhes sobre esse atributo:

  • a data recebida será o último dia em que a apólice estará ativa;
  • a data é válida se estiver entre o dia de hoje e o final da vigência da apólice;
  • o processo do cancelamento ocorrerá no dia seguinte a data agendada. Ex: um agendamento para o dia 09/11/2023 será processado no dia 10/11/2023.

Exemplo de payload para cancelamento agendado:

mutation {
  cancelPolicy(
    input: {
      attributes: {
        policyNumber: "987654321"
        product: AUTO
        reason: "cancellation"
        integrationId: CANCELAMENTO_SEGURADO_GCS
        scheduledTo: "2023-11-15"
        bankAccount: {
          bank: { code: "104", digit: "0", name: "Caixa" }
          agency: { number: "5555", digit: "1" }
          account: { number: "74321", digit: "5", operation: "001" }
        }
      }
    }
  ) {
    success
    policyCancellation {
      amountToRefund
      errors {
        attribute
        messages {
          code
          description
        }
      }
      message
      protocolNumber
      refundMethod
      scheduledTo
      status
    }
  }
}

Resposta da API

{
  "data": {
    "cancelPolicy": {
      "success": true,
      "policyCancellation": {
        "status": "scheduled",
        "scheduledTo": "2023-11-16",
        "protocolNumber": "202311161642E0022977",
        "message": "O Cancelamento da apólice 987654321 foi agendado para o dia 2023-11-15. Na data agendada, o cancelamento será efetivado caso não seja aberto um sinistro até lá.",
        "amountToRefund": "789.95",
        "refundMethod": "PaymentMethod::PartnerInvoice",
        "errors": null
      }
    }
  }
}

Cancelamento Imediato

Para criar um cancelamento imediato o parceiro deve solicitar o cancelamento sem enviar uma data no payload.

Exemplo de payload para cancelamento imediato, sem scheduledTo nos atributos:

mutation {
  cancelPolicy(
    input: {
      attributes: {
        policyNumber: "987654321"
        product: AUTO
        reason: "cancellation"
        integrationId: CANCELAMENTO_SEGURADO_GCS
        bankAccount: {
          bank: { code: "104", digit: "0", name: "Caixa" }
          agency: { number: "5555", digit: "1" }
          account: { number: "74321", digit: "5", operation: "001" }
        }
      }
    }
  ) {
    success
    policyCancellation {
      amountToRefund
      errors {
        attribute
        messages {
          code
          description
        }
      }
      message
      protocolNumber
      refundMethod
      scheduledTo
      status
    }
  }
}

Resposta da API:

{
  "data": {
    "cancelPolicy": {
      "success": true,
      "policyCancellation": {
        "status": "pending",
        "scheduledTo": null,
        "protocolNumber": "202311091631E1181322",
        "message": "Beleza! Foi concluída a solicitação de cancelamento da apólice. Em alguns minutos o cliente receberá um email com a carta de cancelamento.",
        "amountToRefund": "932.17",
        "refundMethod": "PaymentMethod::DebitAccount",
        "errors": null
      }
    }
  }
}

Dados bancários para estorno

Baseado em algumas condições, o cancelamento pode ou não ter devolução de valores. Por esse motivo, é necessário receber os dados bancários na chave bankAccount, os quais serão usados para estorno. Os dados exigidos estão definidos no BankAccountInput.

Obs: parceiros que utilizam checkout externo devem cadastrar previamente na Youse uma conta para devolução de valores no cancelamento. Por esse motivo, nesses casos não é necessário enviar dados bancários no payload de cancelamento, já que a conta estará cadastrada no sistema.

Exemplo de payload enviando dados bancários:

mutation {
  cancelPolicy(
    input: {
      attributes: {
        policyNumber: "987654321"
        product: AUTO
        reason: "cancellation"
        integrationId: CANCELAMENTO_SEGURADO_GCS
        bankAccount: {
          bank: { code: "104", digit: "0", name: "Caixa" }
          agency: { number: "5820", digit: "1" }
          account: { number: "74346", digit: "5", operation: "001" }
        }
      }
    }
  ) {
    success
    policyCancellation {
      amountToRefund
      errors {
        attribute
        messages {
          code
          description
        }
      }
      message
      protocolNumber
      refundMethod
      scheduledTo
      status
    }
  }
}

Exemplo de payload para checkout externo, sem os dados bancários (omitindo bankAccount):

mutation {
  cancelPolicy(
    input: {
      attributes: {
        policyNumber: "987654321"
        product: AUTO
        reason: "cancellation"
        integrationId: CANCELAMENTO_SEGURADO_GCS
      }
    }
  ) {
    success
    policyCancellation {
      amountToRefund
      errors {
        attribute
        messages {
          code
          description
        }
      }
      message
      protocolNumber
      refundMethod
      scheduledTo
      status
    }
  }
}

Motivos de cancelamento

A API permite receber os motivos de cancelamento listados no Enum CancellationReasonEnum.

Obs: o motivo de cancelamento por inadimplência (nonpayment) só será aceito para parceiros que usam checkout externo.

Resumo das regras de cancelamento

Vigência ApóliceParcelamentoTipo de ChekoutAgendável?Data de cancel.Gera estorno?Exige dados bancários
Anual1xexternosimusa data recebidasimnão
Anual1xinternonãoimediatosimsim
Anual4xinterno/externonãoimediatosimsim
Anual10xinterno/externonãoimediatosimsim
Bianual12xinterno/externosim1 dia antes da próx. parcelanãosim

Erros na criação do cancelamento

Abaixo alguns exemplos de retorno da API nos casos em que o cancelamento pode ser recusado.

  • Dados bancários inválidos
{
  "data": {
    "cancelPolicy": {
      "success": false,
      "policyCancellation": {
        "status": null,
        "scheduledTo": null,
        "protocolNumber": null,
        "message": null,
        "amountToRefund": null,
        "refundMethod": null,
        "errors": [
          {
            "attribute": "base",
            "messages": [
              {
                "code": "bank_account",
                "description": "{:account_number=>[\"não é válido\"], :account_digit=>[\"não é válido\", \"é muito longo (máximo: 1 caracter)\"], :agency_number=>[\"não é válido\", \"é muito longo (máximo: 5 caracteres)\"], :agency_digit=>[\"não é válido\", \"é muito longo (máximo: 1 caracter)\"]}"
              }
            ]
          }
        ]
      }
    }
  }
}
  • Apólice não tem status válido (active ou pending)
{
  "data": {
    "cancelPolicy": {
      "success": false,
      "policyCancellation": {
        "status": null,
        "scheduledTo": null,
        "protocolNumber": null,
        "message": null,
        "amountToRefund": null,
        "refundMethod": null,
        "errors": [
          {
            "attribute": "base",
            "messages": [
              {
                "code": "Cancellation Request",
                "description": "Invalid policy status"
              }
            ]
          }
        ]
      }
    }
  }
}
  • Sinistro aberto
{
  "data": {
    "cancelPolicy": {
      "success": false,
      "policyCancellation": {
        "status": null,
        "scheduledTo": null,
        "protocolNumber": null,
        "message": null,
        "amountToRefund": null,
        "refundMethod": null,
        "errors": [
          {
            "attribute": "base",
            "messages": [
              {
                "code": "Cancellation Request",
                "description": "Claim in progress"
              }
            ]
          }
        ]
      }
    }
  }
}
  • Já existe um cancelamento agendado/em andamento (scheduled ou pending)
{
  "data": {
    "cancelPolicy": {
      "success": false,
      "policyCancellation": {
        "status": null,
        "scheduledTo": null,
        "protocolNumber": null,
        "message": null,
        "amountToRefund": null,
        "refundMethod": null,
        "errors": [
          {
            "attribute": "base",
            "messages": [
              {
                "code": "Cancellation Request",
                "description": "Ongoing cancellation with status: scheduled"
              }
            ]
          }
        ]
      }
    }
  }
}
  • Já existe um cancelamento aprovado
{
  "data": {
    "cancelPolicy": {
      "success": false,
      "policyCancellation": {
        "status": null,
        "scheduledTo": null,
        "protocolNumber": null,
        "message": null,
        "amountToRefund": null,
        "refundMethod": null,
        "errors": [
          {
            "attribute": "base",
            "messages": [
              {
                "code": "Cancellation Request",
                "description": "Cancellation already approved"
              }
            ]
          }
        ]
      }
    }
  }
}