---
# System prepended metadata

title: Conciliação Transaction + Payout

---

# Conciliação Transaction + Payout



## Fluxo de funcionamento (Parceiro CaaS)
- Hoje, para uma **Account** associada a um parceiro, o processo de pay-out é representado pelo documento de **PaymentGroup**.

- Um **PaymentGroup** é um conjunto de **Payments**. Porém, a maioria dos parceiros criam **PaymentGroups** com apenas um único **Payment** associado.

- Cada payment possui dois possíveis estados finais: <span style="color:green">**Completed**</span> e <span style="color:red">**ProcessedWithError**</span> .

- Quando um **Payment** atinge o status de <span style="color:green">**Completed**</span>, é criado uma **Transaction** de débito na **Account** do parceiro.

- Nessa transação de débito, temos duas formas de identificar a qual pagamento ele está associado:
    - Através da propriedade **Links**, procurando pelo objeto que possui `DocumentType == 5`.
    ![](https://i.imgur.com/5aWUQHd.png)
    
    - Através da propriedade **TransactionBankId**, que é constituída de uma string formada da seguinte forma: *"Debit Transaction from paymentId: {paymentId}, paymentGroupId: {paymentGroupId} and externalId: {externalId}"*
    ![](https://i.imgur.com/NkjUyoF.png)

- No lado do Payment, temos uma propriedade que armazena o id da Transaction associada a ele: `Payments[0].TransactionId`
    ![](https://i.imgur.com/qJ7xt3B.png)

## Fluxo de funcionamento - Statement Account
- O conceito de **StatementAccount** no CaaS propõe persistir, sem nenhum tratamento, todas as transações de uma conta bancária.
- Para isso, é acessado o endpoint de extrato nas APIs dos bancos que estamos integrados.
- No geral, a transação persistida é armazenada contendo os seguintes identificadores principais:
    - **Id**: Identificador único gerado pelo CaaS
    - **TransactionBankId**: Identificador no extrato da instituição
    - **Description**: Descrição da transação no extrato
    - **Amount**: Valor da transação
    - **Counterpart**: Dados do usuário que recebeu/realizou a transação
    - **Timestamp**: Horário da trasnsação
    ![](https://i.imgur.com/HesOsOe.png)

:::info
:exclamation: **IMPORTANTE**

Hoje **NÃO HÁ** uma maneira direta de conciliar uma         **Transaction** de statement com uma **Transaction** da conta do parceiro. 

A alternatira é fazer uma tentativa de conciliação indireta por:
 - Timestamp
 - Amount
 - Counterpart
 - Description (para alguns poucos casos).
:::


## Propostas de melhorias
### Conciliação de transações PIX
Toda transação PIX possui um identificador único, denominado **EndToEndId**, que possui 32 caracteres e geralmente é iniciado por "**E**" *(ex.: E710278662022102118010882257046P)*.

Com isso, podemos realizar mudanças para persistir esse **EndToEndId** nos documentos de **Payment** e **Transaction**, permitindo assim um match direto entre as entidades, tanto de *StatementAccount* quanto de *PartnerAccount*.

Em termos de implementação a idéia é:
- Incluir EndToEndId de Payments via Pix na propriedade **TransactionHash** do documento de **Payment**.
- Incluir EndToEndId nas Transactions originadas de transações via Pix, na propriedade **TransactionHash** do documento de **Transaction**.
- Implementar lógica nos adapter para recuperar o EndToEnd das transações criados a partir do endpoint de extrato (fluxo de *StatementAccount*)
    - **Necessário analisar viabilidade em cada adapter em específico**
        - [x] BS2 :+1: 
        - [ ] Genial (Legacy)
        - [ ] Genial 

### Conciliação de transações TED
Como esse tipo de transação carece de um idenficador único, não é possível implementar uma forma de conciliação direta.

Para isso, será necessário continuar realizando a forma indireta de tentativa de conciliação detalhada acima. 


