Vendas
Nova Venda
Nova Venda (CPFL)

Nova venda CPFL

Essa aba contem informações especificas para novas vendas feitas para a CPFL

Especificações

Antes dos detalhes da requisição de uma nova venda, é importante se atentar às seguintes regras da CPFL:

Novas Vendas

1 - O envio de novas vendas para a CPFL é feito diariamente (somente 1x), somente em dia útil.

2 - Vendas requisitadas ao Motor RCE antes das 15h (3PM), serão enviadas para a CPFL no mesmo dia, se for dia útil

3 - Vendas requisitadas ao Motor RCE após às 15h (3PM) serão enviadas para a CPFL no próximo dia útil

Retornos

A CPFL tem um fluxo de retornos assíncrono diário, normalmente feito pela parte da manhã, retornando resultados referentes a vendas feitas em D-1. Por exemplo, uma venda feita no dia 13/05/2024, provavelmente terá a sua aprovação ou rejeição informada pela CPFL no dia 14/05/2024.

Uma venda feita em uma sexta-feira terá o seu a sua aprovação ou rejeição na próxima segunda-feira.

A CPFL nos notifica diariamente, 4 tipos de retornos referentes a venda: aprovação, rejeição, faturamento, pagamento e estornos (ocorrem quando o cliente solicita o cancalamento/estorno da cobrança diretamente com a concessionária).

Existem detalhes especificos referentes aos retornos dos tipos rejeições e pagamento.

Rejeições

Existem 3 contextos de rejeições dentro da CPFL, que são: rejeição crítica, rejeição não crítica e rejeição devido a instalação já faturada no mês.

1 - Rejeição Não Crítica

Ocorre quando a CPFL retorna que a cobrança foi rejeitada devido a uma das rejeições não críticas. Nesse caso é importante entender que a cobrança ainda vai ser tentada mais 3x, antes de ser cancelada. Quando recebemos uma rejeição desse tipo, nós geramos uma notificação do tipo Cobrança Rejeitada. Para mais detalhes, siga a documentação disponível aqui.

2 - Rejeição Crítica

Ocorre quando a CPFL retorna que a cobrança foi rejeitada devido a uma das rejeições críticas. Isso pode ocorrer tanto na primeira cobrança, quando nas seguintes cobranças de recorrencias. Nesse caso todas as cobranças futuras da venda são canceladas, mas ainda teremos retornos referentes a cobranças anteriores. Nesse caso nós geramos uma notificação do tipo Venda Cancelada. Para mais detalhes, siga a documentação disponível aqui.

3 - Rejeição devido a instalação já faturada no mês

Ocorre quando a CPFL retorna que a cobrança foi rejeitada devido a conta de energia do cliente já ter sido faturada no mês atual. Isso ocorre pois dentro da CPFL existem janelas de faturamento, e isso infelizmente não está sobre o controle do Motor de Recorrencia. Nesses casos, a cobrança vai ser re-agendada para o primeiro dia últil do próximo mês. Por exemplo, se uma venda feita no dia 12/06/2024 receber um retorno referente a esse tipo, vamos tentar enviar a cobrança novamente no dia 01/07/2024.

Pagamentos

No caso da CPFL, existe a possibilidade do cliente parcelar uma cobrança. Então é possivel que existam 2 pagamentos para o mesmo mês de referência. Por exemplo, se uma cobrança de R$ 50 for cobrada no mês de Março, e o cliente solicitar o parcelamento em 2x, é possível que no mês de Abril existam 2 retornos de pagamento, um referente ao parcelamento, e outro referente a cobrança da recorrência.

Especificações objeto address

O objeto endereço se refere as informações da UC em que será feita a inclusão de uma nova venda

CampoDescriçãoTipoValidaçãoObrigatório
neighborhoodBairrostringMin. 3SIM
installationNumberNumera impressa na contastringMin. 7 / Máx 11SIM
addressEndereço (Rua, Av)stringValida presença do campoSIM
addressNumberNúmero da residenciastringValida presença do campoSIM
cityCidadestringValida presença do campoSIM
zipCodeCEPstringCEP VálidoSIM

Especificações objeto client

O objeto client se refere ao titular da conta energia, quando não houver um responsável finaceiro. Caso contrário, se refere ao responsável pela aquisição da venda/serviço, e então deve existir o objeto financialResponsible na requisição.

CampoDescriçãoTipoValidaçãoObrigatório
firstNameNomestringValida presença do campoSIM
lastNameSobrenomestringValida presença do campoSIM
cpfCPFstringCPF VálidoSIM
numberOnDealershipPN do Clientestring10 DígitosSIM
birthdateData de nascimentostringData válida, formato YYYY-MM-DDSIM
rgRGstringRG VálidoSIM
phoneNumberTelefonestring11 Digitos - DD + NúmeroSIM
isFinancialResponsibleSe é resp. financeirobooleanValida presença do campoSIM

Validações adicionais:

  • 1 - Os campos numberOnDealership, cpf, rg e phoneNumber não são obrigatórios no objeto client, se, e SOMENTE SE, o cliente não for o resp. financeiro, isso é, o campo isFinancialResponsible tiver valor false.
  • 2 - Se o campo isFinancialResponsible tiver valor false, a requisição deve conter o objeto financialResponsible, especificado mais abaixo.
  • 3 - Se o campo isFinancialResponsible tiver valor true, a requisição não pode conter o o objeto `financialResponsible.

Especificações objeto sale

O objeto sale se refere aos dados da venda que será enviada para a concessionária.

CampoDescriçãoTipoValidaçãoObrigatório
productIdId do produtonumberValida tipo, e se está registrado no Motor RCESIM
dealershipIdId da concessionárianumberValida tipo, e se é código válidoSIM
shouldChargeFeeSe possui cobrança de adesãobooleanValida tipo e presençaSIM
externalIdId de controle externostringValida apenas tipoNÃO
startChargingAtData para início da cobrançastringData válida, formato YYYY-MM-DDNÃO

Validações adicionais:

  • 1 - Um cpf (de cliente ou resp. financeiro) não pode possuir mais de 1 venda referente a um mesmo produto que não esteja em análise, processando ou venda ativa
  • 2 - O campo shouldChargeFee só deve ser informado como true se o produto tiver o valor de sua taxa de adesão configurado no Motor RCE, caso contrário a requisição será recusada

Especificações objeto financialResponsible

O objeto financialResponsible se refere ao titular da conta energia, quando quem está solicitando uma nova cobrança não for o titular da conta de energia da instalação.

CampoDescriçãoTipoValidaçãoObrigatório
firstNameNomestringValida presença do campoSIM
lastNameSobrenomestringValida presença do campoSIM
cpfCPFstringCPF VálidoSIM
numberOnDealershipPN do Clientestring10 DígitosSIM
birthdateData de nascimentostringData válida, formato YYYY-MM-DDSIM
rgRGstringRG VálidoSIM
phoneNumberTelefonestring11 Digitos - DD + NúmeroSIM

Validações adicionais:

  • 1 - O financialResponsible só deve estar presente na requisição, se, e SOMENTE SE, o cliente não for o resp. financeiro, isso é, o campo isFinancialResponsible do objeto client tiver valor false. Caso contrário, a requisição será recusada

Exemplo de Requisição

{
  "address": {
    "neighborhood": "Cool Neighborhood",
    "installationNumber": "32785909",
    "address": "3rd Avenue",
    "addressNumber": "1234",
    "city": "Springfield",
    "zipCode": "66542439"
  },
  "client": {
    "firstName": "John",
    "lastName": "Doe",
    "cpf": "84403202055",
    "numberOnDealership": "1234567890",
    "birthdate": "1992-04-12",
    "rg": "9839233",
    "phoneNumber": "11987653287",
    "isFinancialResponsible": true
  },
  "sale": {
    "productId": 1,
    "dealershipId": 3,
    "externalId": "123-456-789",
    "shouldChargeFee": true,
    "startChargingAt": "2024-07-10"
  }
}

Schema de Responses

HTTP Code - 200

Venda feita com sucesso

{
    "message": "Sale created with success!",
    "saleId": "3020cce6-6e5e-4587-ae98-89b8e38b3a64"
}

HTTP Code - 422

  • Venda ativa já existente para o cpf solicitado
{
    "message": "Invalid input error",
    "reason": "Active sale for cpf and same product already exists",
    "code": 422
}
  • Cobrança de adesão solicitada para produto que não possui o valor da taxa configurada no Motor RCE
{
    "message": "Invalid input error",
    "reason": "No fee value for this product, make the request again with shouldChargeFee = false",
    "code": 422
}

HTTP Code - 400

  • Venda solicitada com campo isFinancialResponsible com valor false, mas o objeto financialResponsible não está presente no corpo da requisição
{
    "message": "Request body for new sale on CPFL is invalid",
    "code": 400,
    "invalidFieldsErrors": [
        {
            "field": "body",
            "message": "financialResponsible object is required when isFinancialResponsible is false on client object, and cannot be present when isFinancialResponsible is true on client object"
        }
    ]
}

HTTP Code - 401

  • Requisição não autorizada
{
    "message": "Unauthorized"
}