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 dagemransack 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
TransactionsReportimplementaremos 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']
