Para ativar a funcionalidade do SPLIT, atualmente utilizamos a ativação via toggle, fez sentido para controlarmos os fluxos de funcionamento iniciais e também prevenção contra erros graves, porém agora precisamos disponibilizar a ativação da funcionalidade de forma visivel para a quipe Vindi e ao Merchant. Pensando nisso, a proposta de ativação da funcionalidade ficou a cargo de utilizarmos Extensões e Integrações
.
A proposta é inserir uma integração para ativação da funcionalidade do Split e verificar se o merchant possui algum Gateway Vindi Pagamentos (Yapay) ativo para instalar.
-
Quando o merchant não possuir nenhum gateway Vindi Pagamentos ativo, devemos impedir a instalação da extensão
-
Quando o merchant possui um Gateway Vindi pagamentos ativo ele poderá seguir com a instalação
-
Quando Merchant consegue ativar a funcionalidade e pode edita-la
Obs: Os textos precisam de revisão pelo time de design e produto.
Atualmente, utilizamos a verificação de toggle ativo para as validação do Split. Precisamos modificar estas validações para que olhem para a ativação da integração de SPLIT do merchant.
- Atualmente fazemos a verificação de toggle em:
- https://github.com/vindi/recurrent/blob/master/app/models/merchant.rb#L397
- Aqui precisaremos criar uma nova validação onde teremos que olhar para a integração do SPlit que o merchant possua ou não ativa.
- https://github.com/vindi/recurrent/blob/master/app/models/gateway/vindi/transaction_affiliates_params.rb#L8
- Aqui precisaremos utilizar o método
split_payment?
presente no merchant
- Aqui precisaremos utilizar o método
- https://github.com/vindi/recurrent/blob/master/app/models/merchant.rb#L397
OBS: Antes de subir esta tarefa, precisamos instalar as integrações para os merchants presentes atualmente no toggle.
Para que o projeto do Cobrador consiga efetuar a geração correta da fatura do Cliente da Vindi, precisaremos:
- Criar um produto no Merchant Vindi que refira-se a precificação do SPLIT
- Ao ativar a flag de split em qualquer gateway na Plataforma, precisaremos adicionar o produto do SPLIT na assinatura do Merchant.
- O produto nunca deverá ser removido da assinatura.
Em produção, no Merchant Vindi, precisamos criar um produto referente a utilização do SPLIT, similar ao que criamos para o Renova Cartões por exemplo:
Precisamos nos atentar e documentar o valor que inserimos no campo Calculo
, pois utilizaremos este valor na regra do Cobrador e na inserção do produto na assinatura do merchant.
Precisamos adicionar o produto criado para SPLIT na assinatura do merchant com a Vindi. Para isso podemos utilizar o serviço Subscribable
PR de exemplo: https://github.com/vindi/recurrent/pull/5963
No recurrent precisaremos criar uma maneira de conseguirmos requerir via API apenas as transações que utilizaram-se de uso da funcionalidade SPLIT de acordo com seu tipo, merchant e período de tempo. Atualmente o cobrador utiliza-se do relatório de transações, portanto precisaremos inserir um novo parâmetro de pesquisa na geração do relatório de transações.
- Atualmente o cobrador utiliza o endpoint de esportações
v1/exports
, este endpoint utiliza-se dos filtros ja presentes no relatório de transações para aproveitar-se do resurso dagem
ransack para efetuar consultas de forma segura e facilitada. Atualmente o fluxo consiste em:- No endpoint, chamamos o serviço de criar exportações: https://github.com/vindi/recurrent/blob/master/app/api/v1/exports.rb#L63
- O Serviço chama a classe Export: https://github.com/vindi/recurrent/blob/master/app/services/export/create.rb#L77
- E utiliza o método
export!
para gerar o arquivo: https://github.com/vindi/recurrent/blob/master/app/services/export/create.rb#L80 - O metodo export, utiliza-se do filtro padrão de transações chamado de Transaction Report, porém este filtro não contem nenhuma clausula para filtrarmos apenas transações com
split
. Para isso implementaremos um parâmetro booleano que trabalhará na estratégia de consulta, utilizando um inner join para relacionar e retornar apenas transações com affiliados, ou seja, que utilziam Split. - Dentro da classe
TransactionsReport
implementaremos uma regra parecida com essa, que verificará o parâmetro de filtro, e quando requisitado retornará apenas transações que utilizaram do split.
def collection @collection = if query['with_split'] == true super.joins(:transaction_affiliates) else super end end
Precisaremos inserir a regra de contagem de utilização, iremos fazer algo parecido com o que fizemos na precificação do renova cartões, que aconteceu aqui:
De acordo com o código do produto, iremos ao relatório de Transações, conforme fazemos aqui, algumas vezes.
when 'codigo_do_produto_criado_para_precificar_split_no_merchant_vindi_em_producao'
client = Cobrador::RecurrentClient.new
response = client.create_export(
{
report: 'TransactionsReport',
query: {
created_at_date_gteq: period_start_on,
created_at_date_lteq: period_end_on,
gateway_acquirer_eq: 'yapay',
with_split: true, # Nova flag de busca que adicionaremos
transaction_type_not_in: [3, 6, 7] # Capture, Void, Renew
},
entities: [
'transaction.customer',
'transaction.payment_method',
'transaction.gateway'
]
},
{ headers: { 'Vindi-Merchant-Id' => code } }
)['export']
export_id = response['id']
usage_size = response['number_of_records']