# 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.