---
# System prepended metadata

title: Planejamento integração com IG (importação de dados e registro de transações)

---

# Planejamento integração com IG (importação de dados e registro de transações)

## Objetivos

- Importar dados da collection **capturehardwares** para popular a tabela de **terminals** no **term-api e cardprocessor**.
- Importar dados da collection **companies** para popular as tabelas de **merchants** e **isos** no **term-api e cardprocessor**.
- Processar as transações de **compra** (confirmadas) do **cardprocessor** no **IG**.
- Processar os estornos do **cardprocessor** (confirmados) no **IG**.

## Alterações necessárias no IG

### Alterações em capturehardwares do IG

- Adicionar o valor **hash** no campo **software_provider**: https://github.com/hashlab/infinity-gauntlet/blob/d2f75bd6798e3349dc578660ad3344c3652d6c4b/src/application/core/models/capture-hardware.js#L19
- Adicionar o valor **d195** no campo **terminal_model**: https://github.com/hashlab/infinity-gauntlet/blob/d2f75bd6798e3349dc578660ad3344c3652d6c4b/src/application/core/models/capture-hardware.js#L41

### Alterações em affiliations do IG

- Permitir o valor **hash** no campo **internal_provider**:
    - https://github.com/hashlab/infinity-gauntlet/blob/d2f75bd6798e3349dc578660ad3344c3652d6c4b/src/application/core/services/company.js#L1506
    - https://github.com/hashlab/infinity-gauntlet/blob/d2f75bd6798e3349dc578660ad3344c3652d6c4b/src/application/core/services/company.js#L1821

### Implementar interfaces para operar no IG

- https://github.com/hashlab/infinity-gauntlet/blob/master/src/application/core/interfaces/acquirer.js
- https://github.com/hashlab/infinity-gauntlet/blob/master/src/application/core/interfaces/capture-software.js
- https://github.com/hashlab/infinity-gauntlet/blob/master/src/application/core/interfaces/subacquirer.js

Implementar da maneira mais **dummy** possível, uma vez que a transação passa pela **hash** agora.

## Fluxo de importação de dados do IG

O plano inicial é fazer o processo mais simples possível, que seria um cronjob executando a cada x minutos (acredito que inicialmente a cada 10min), esse job pegaria os dados do MongoDB e faria o sync com os bancos do termapi e cardprocessor.

### Carregando o hardware

Pegar todos os capturehardwares que tenham os campos **provider** e **software_provider** igual a **hash**, além disso usar o campo **updated_at** para limitar o número de resultados (ex: pegar todos os hardwares que foram alterados de x horas pra cá).

Na imagem abaixo temos os dados de uma entrada recente em capturehardwares (ignore o software_provider igual a celer):

![](https://i.imgur.com/VCeZC7D.png)

### Carregando o affiliation

Carregar o affiliation com base nos campos **provider** e **company_id** do hardware e verificar se o campo **internal_provider** é igual a **hash**.

Na imagem abaixo temos os dados de uma entrada em affiliations:

![](https://i.imgur.com/KohEtzG.png)

### Carregando company (merchant)

Carregar a company com base no campo **company_id** do hardware.

Na imagem abaixo temos os dados de uma entrada em companies:

![](https://i.imgur.com/41IbPsx.png)

### Carregando company primária (iso)

Carregar a company com base no campo **parent_id** do merchant.

Na imagem abaixo temos os dados de uma entrada em companies:

![](https://i.imgur.com/e9YIU11.png)

### Criação dos dados no termapi e cardprocessor

Com todo o contexto em mãos (**terminal**, **merchant** e **iso**) devem ser criadas (ou atualizadas) as entradas nas tabelas **terminals**, **merchants** e **isos**.

O plano inicial é que esse processo de importação seja executado de forma periódica (cronjob do kubernetes), como todas as entradas no IG tem o campo updated_at, podemos usar um filtro e pegar apenas as mudanças recentes para não impactar o MongoDB.

## Injetar transações no IG

Vamos criar um webhook **/cardprocessor_webhook** no IG de forma semelhante com o que foi feito na integração com **Celer/Pagseguro**.

Esse endpoint deve ser **privado para uso da hash** isso vai evitar a necessidade de **autenticação/autorização/verificação dos dados enviados**.

Os payload enviado no POST já vai estar no formato esperado pelo IG, o endpoint do webhook vai pegar esse payload e injetar na fila do rabbitmq usando o **TransactionService.queueRegister()**.

- https://github.com/hashlab/infinity-gauntlet/blob/d2f75bd6798e3349dc578660ad3344c3652d6c4b/src/application/core/services/webhooks/pags-webhook/index.js#L19
- https://github.com/hashlab/infinity-gauntlet/blob/d2f75bd6798e3349dc578660ad3344c3652d6c4b/src/application/core/services/webhooks/pags-webhook/register-transaction.js#L57

### Alterações no IG

- Disponibilizar o endpoint **/cardprocessor_webhook** para receber as transações.

### Alterações no cardprocessor

- Criar uma tabela de webhooks onde os mesmos serão registrados.
- Criar um registro na tabela de webhooks sempre que ocorrer uma confirmação de compra ou estorno.
- Após o registro na tabela, realizar a request enviando a informação para o IG.
- Se a resposta tiver o status_code 200 ou 201, atualizar o registro de webhook com o status de sucesso. Em caso de um status_code diferente registrar o status como falha.
- Em caso de erro, registrar que ocorreu uma falha e a uma nova tentantiva será realizada quando o sistema de manutenção de transações pendentes rodar.
