> ## Documentation Index
> Fetch the complete documentation index at: https://docs.lerian.studio/llms.txt
> Use this file to discover all available pages before exploring further.

# Transferências internas (P2P)

> Mova fundos entre contas da sua instituição na hora, 24/7, sem roteamento pelo BACEN. O plugin detecta as transferências internas automaticamente.

As transferências P2P movem fundos entre contas da sua instituição na hora, 24 horas por dia. Uma transferência P2P pode ter uma tarifa. Veja [Configuração de tarifas](#fee-configuration) abaixo. A transferência nunca sai do seu sistema, então ela liquida de forma síncrona e dispensa a rede do BACEN.

## Quando usar o P2P

***

O P2P é o tipo certo de transferência sempre que o remetente e o destinatário têm contas na sua instituição. Os cenários comuns incluem:

* **Mover dinheiro entre as contas do próprio cliente**: um cliente transferindo da conta corrente para a conta poupança, ou entre duas contas que ele gerencia.
* **Pagar outro cliente da mesma instituição**: um cliente enviando dinheiro para um amigo, um familiar ou uma empresa que também é cliente de vocês.
* **Movimentações internas de tesouraria**: dividir saldos entre contas corporativas da mesma organização.
* **Divisão de pagamentos**: distribuir valores entre várias contas para folha, divisão de despesas ou cashback.

O plugin detecta o P2P automaticamente. Quando o ISPB do destinatário corresponde ao ISPB da sua instituição, o plugin roteia a transferência internamente. Quando outro core da sua instituição compartilha o seu ISPB, o plugin primeiro pergunta ao JD Courier qual core detém a conta do destinatário. Veja [Transferências entre cores](https://docs.lerian.studio/pt/interfaces/ted-jd/ted-cross-core.md). A sua integração de API é idêntica à do TED OUT, então você não precisa de um endpoint nem de uma lógica à parte. As duas contas devem estar na mesma organização do Midaz. Para contas em dois ledgers, veja [Transferências entre ledgers](#transfers-between-ledgers).

## Principais vantagens

***

| Aspecto | P2P | TED OUT |
| - | - | - |
| **Tempo de liquidação** | Tempo real (síncrona) | Pelo JD SPB |
| **Horário de funcionamento** | 24/7, incluindo fins de semana e feriados | Seg–Sex, 06:30–17:00 (padrão) |
| **Tarifa** | Configurável | Configurável |
| **Dependência do BACEN** | Nenhuma | Obrigatória (JD SPB) |

## Como funciona

***

O P2P reutiliza a mesma API do TED OUT, então a sua integração fica consistente entre os tipos de transferência. O processo tem duas etapas do ponto de vista do cliente:

![Diagrama do fluxo P2P](https://mintcdn.com/lerian-49cb71fc/TGLv2g3qhXqf0dqb/images/pt/d2/ted-how-it-works-p2p.svg?fit=max\&auto=format\&n=TGLv2g3qhXqf0dqb\&q=85\&s=38fd957779170eb10d4c6123e5a77f6a)

1. **Iniciar**: o cliente envia os dados da transferência. O plugin valida o destinatário e calcula a tarifa. O cliente vê o resumo da transferência antes de efetivá-la.
2. **Confirmar**: o cliente confirma. O plugin cria um débito + crédito atômico no Midaz. A transferência é concluída na hora.

O fluxo de duas etapas dá a você um momento natural para mostrar ao cliente uma tela de confirmação com o resumo completo da transferência antes de qualquer movimentação de fundos.

## Estados da transferência

***

![Diagrama da máquina de estados do P2P](https://mintcdn.com/lerian-49cb71fc/mQLt-YZp8XbLULFD/images/pt/d2/ted-state-machine-ted-p2p.svg?fit=max\&auto=format\&n=mQLt-YZp8XbLULFD\&q=85\&s=e571502db058bb06e977c608ff5a9b01)

| Estado | O que significa |
| - | - |
| `CREATED` | O cliente confirmou, e o plugin criou a transferência |
| `PROCESSING` | Transação atômica no Midaz em andamento |
| `COMPLETED` | Transferência liquidada, e os fundos se moveram |
| `FAILED` | O ledger recusou o lançamento; nenhum fundo se moveu |

> [!NOTE]
>
> O estado `PENDING` não se aplica às transferências P2P. O TED OUT usa `PENDING` enquanto o plugin prepara a mensagem para a JD. A retenção já existe desde `CREATED`. O P2P liquida inteiramente dentro do Midaz, então a transferência passa de `CREATED` por `PROCESSING` até `COMPLETED`. Uma transferência P2P não pode ser cancelada.

## Configuração de tarifas

***

> [!NOTE]
>
> O modo de tarifa, `MIDAZ_FEE_MODE`, decide quem cobra a tarifa de uma transferência P2P. Veja [Configuração do TED](https://docs.lerian.studio/pt/interfaces/ted-jd/ted-configuration.md).

## Validação do destinatário

***

O destinatário deve ter uma conta na mesma instituição. Quando você envia uma transferência, o plugin procura o destinatário no CRM. Ele compara os dados bancários que você informa: ISPB, agência, conta e documento do titular.

Se o plugin não acha o destinatário, ele rejeita a transferência e não move fundos. O cliente deve conferir os dados da conta e tentar de novo. Se as duas contas estão em organizações diferentes do Midaz, o plugin recusa a transferência com `422 BTF-0004`. Ele recusa dois ledgers diferentes da mesma forma, a menos que o tenant permita [transferências entre ledgers](#transfers-between-ledgers).

## Transferências entre ledgers

***

Um P2P pode mover fundos entre dois ledgers da mesma organização do Midaz. Isso vem desligado por padrão. Para ligar para um tenant, defina a política de tenant `p2p.cross_ledger_enabled` como `true` pela Admin API. O plugin lê essa configuração apenas quando você inicia uma transferência.

Uma transferência entre dois ledgers precisa de todos estes itens:

| Requisito | Recusa quando falta |
| - | - |
| Midaz 4.2.0 ou posterior, e o modo de tarifa `native` | `422 BTF-0005` |
| A configuração `crossLedger.enabled` nos dois [ledgers](https://docs.lerian.studio/pt/products/midaz/ledgers.md). Em cada ledger que valida rotas, a rota de transação de P2P também vincula uma rota de operação com a [entrada `crossLedger`](https://docs.lerian.studio/pt/products/midaz/transaction-routing-entities) | `422 BTF-0006` |
| O mesmo ativo nas duas contas | `422 BTF-0007` |
| Um pacote de tarifas no ledger de origem que cobra a tarifa além do valor | `422 BTF-3003` |

O plugin lança a transferência como um único grupo de ledgers do Midaz: os dois ledgers se movem, ou nenhum se move. A transferência guarda o ledger do pagador em `ledgerId`, o ledger do destinatário em `recipientLedgerId` e o grupo em `ledgerGroupId`.

## Devolver uma transferência P2P

***

Você pode estornar uma transferência P2P concluída com [Return a Transfer](https://docs.lerian.studio/pt/reference/interfaces/ted-jd/return-transfer.md). A requisição precisa da permissão `transfers:return`.

O ledger estorna a transação original na mesma requisição. A devolução é uma nova transferência `P2P` que debita a conta que recebeu a original e credita a conta que a pagou. O `originalTransferId` dela nomeia a original, que continua `COMPLETED`. A resposta é `COMPLETED`.

* Uma devolução precisa do Midaz 4.1.3 ou posterior, ou 4.2.0 ou posterior entre dois ledgers.
* A conta que recebeu a original deve ter o saldo para devolver.
* Um P2P tem no máximo uma devolução ativa, e uma devolução não pode ser devolvida.
* Se o resultado no ledger é desconhecido, a resposta é `503 BTF-2000`, e a devolução continua `CREATED`. Envie a mesma requisição de novo com uma nova chave `X-Idempotency`. Ela retoma essa devolução e nunca cria uma segunda.

## Integração técnica

***

O P2P usa os mesmos endpoints do TED OUT. Você não precisa de trabalho extra de integração além do fluxo de transferência de saída que já construiu.

* [Initiate Transfer](https://docs.lerian.studio/pt/reference/interfaces/ted-jd/initiate-transfer.md): POST /v1/transfers/initiate
* [Process Transfer](https://docs.lerian.studio/pt/reference/interfaces/ted-jd/process-transfer.md): POST /v1/transfers/process
* [Get Transfer](https://docs.lerian.studio/pt/reference/interfaces/ted-jd/retrieve-transfer.md): GET /v1/transfers/{transferId}

> [!NOTE]
>
> O campo `type` na resposta da transferência é `P2P`. As transferências P2P não têm `controlNumber`, porque não passam pelo JD SPB.

## Tratamento de erros

***

As transferências P2P são atômicas. Se qualquer parte falha, o Midaz não aplica nenhuma das pernas. Nenhum estado intermediário move fundos parcialmente nem deixa uma conta a descoberto.

Se uma transferência falha, o cliente fica com o mesmo saldo e pode tentar de novo. Se `/process` responde `500 BTF-9014`, o dinheiro se moveu, mas o plugin não registrou a transferência como concluída. Leia a transferência e envie de novo a mesma requisição `/process` com uma nova chave `X-Idempotency`. Não inicie uma nova transferência. Veja a [lista completa de erros](https://docs.lerian.studio/pt/reference/interfaces/ted-jd/ted-error-list.md) para os códigos de erro e a orientação de recuperação.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.