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

# Regras de negócio do TED Lerian

> Como o TED Lerian aplica a janela de funcionamento, os limites de uso, as tarifas, a idempotência, os prazos regulatórios e as regras de dados pessoais.

## Janela de funcionamento

***

A janela efetiva de um dia combina três fontes. `GET /v1/policy/window` retorna qual delas decidiu (`source`).

* **A grade oficial do STR**, publicada pelo Lerian SPB. As mudanças de grade que o STR anuncia durante o dia valem sem reinício.
* **O cut-off da instituição**, opcional, sempre igual ou anterior ao fechamento oficial. O TED Lerian recusa um horário posterior com `TED-0081`.
* **O calendário de feriados nacionais**, mantido por ano. Um ano carregado cobre todas as datas dele. Carregue o próximo ano antes de 1º de dezembro. Repetir a carga com as mesmas datas é inofensivo.

| Situação | Resposta quando você envia uma TED |
| - | - |
| Fora da grade ou depois do cut-off | `422 TED-0020`, nada reservado |
| Fim de semana ou feriado | `422 TED-0021`, nada reservado |
| Não foi possível determinar a janela, ou o calendário de feriados do ano não está carregado | `503 TED-0022`. O TED Lerian recusa em vez de adivinhar. |
| Transferência interna | A janela do STR não se aplica |

## Limites de uso

***

* Por conta de origem: um máximo por transferência, um total por dia e um total por mês, por dia e mês do calendário no horário de Brasília (`America/Sao_Paulo`). Os tetos seguem a ordem transferência ≤ dia ≤ mês. Um teto ausente significa sem teto.
* O TED Lerian confere os tetos contra o valor mais a estimativa de tarifa. Depois da reserva, os limites contam o valor mais a tarifa que o Midaz cobrou.
* Uma instituição deve configurar os seus limites antes da primeira TED. Sem eles, o TED Lerian recusa cada envio com `503 TED-0080`.
* Acima de um limite, o TED Lerian recusa a TED antes da reserva com `422 TED-0030`. A resposta indica o limite.
* Uma transferência rejeitada ou cancelada os libera de novo.
* Com `enabled=false`, os limites não contam nada e não recusam nada.
* Apenas o administrador os altera. Cada alteração registra quem a fez e quando.

## Tarifas

***

* Os [pacotes de tarifas do Midaz](https://docs.lerian.studio/pt/products/midaz/fees/using-fee-engine.md) do seu ledger precificam cada TED, exceto uma TED que uma conta com um [plano de tarifas](https://docs.lerian.studio/pt/products/midaz/fees/account-plans.md) ativo envia. O plano cobra essa conta, não os pacotes de tarifas, e só quando uma tarifa do plano corresponde à TED.
* O TED Lerian marca cada lançamento que faz no Midaz com chaves de metadados. Um pacote de tarifas seleciona por elas com `metadataSelector`:
  * `tedOperation`, uma de:
    * `ted_sent`: uma TED que você envia.
    * `ted_internal`: uma transferência interna.
    * `ted_received`: uma TED recebida.
    * `ted_refund`: o valor creditado de volta quando outra instituição devolve a sua TED, se a tarifa não for reembolsada.
  * `tedPurposeCode`: o código de finalidade da TED.
* Um pacote que não seleciona por `tedOperation` também pode precificar TEDs recebidas e reembolsos.
* Em uma TED que você envia, o pacote deve cobrar toda tarifa do remetente. Se o pacote aplicado tirar alguma tarifa do valor enviado, o TED Lerian cancela a reserva e recusa a TED com `503 TED-0080`. Ele faz o mesmo quando não consegue ler esse pacote. Nada vai para o STR.
* A cotação de tarifa é uma estimativa. O TED Lerian a calcula a partir do pacote de tarifas que a configuração de runtime `fee.package_id` indica. Sem essa configuração, a estimativa é zero.
* A tarifa que o Midaz cobrou do remetente aparece no `feeAmount` da transferência, depois da reserva ou depois da liquidação de uma transferência interna.
* Se o TED Lerian não consegue obter a estimativa, ele recusa a cotação e o envio com `503 TED-0040`.
* Em uma TED recebida, o TED Lerian credita o valor integral. Um pacote de tarifas que a precifica deve deduzir a tarifa do crédito (`isDeductibleFrom: true`). A tarifa então aparece em `feeAmount` e o valor creditado em `creditedAmount`.
* Em uma TED recebida ou em um reembolso, o Midaz cobra de `@external/BRL` uma tarifa que não é dedutível, e o cliente recebe o valor integral.
* Quando outra instituição devolve uma TED, o TED Lerian não reembolsa a tarifa de envio por padrão. A instituição pode ligar o reembolso, e `returned.feeRefunded` mostra o que aconteceu.

## Idempotência e requisições duplicadas

***

* Toda escrita precisa do header `X-Idempotency`: de 1 a 128 caracteres ASCII imprimíveis. Sem ele, a resposta é `400 TED-0011`.
* A mesma chave com o mesmo corpo retorna a resposta original com `X-Idempotency-Replayed: true`. O TED Lerian não cria nenhuma transferência nova. Uma chave nova em uma devolução ou em uma decisão de revisão já aplicada recebe `409 TED-0060`.
* `X-TTL` define por quantos segundos o TED Lerian repete a resposta (padrão 300). Apenas o TTL da primeira requisição vale.
* No `POST /v1/transfers`, a mesma chave com a mesma requisição, `metadata` incluído, também repete a resposta depois do `X-TTL`. A resposta é `201` com `X-Idempotency-Replayed: true` e a transferência no estado atual.
* Uma requisição com a mesma chave e outro corpo recebe `422 TED-0012`. No `POST /v1/transfers`, uma requisição posterior com a mesma chave nunca cria uma segunda transferência.
* Uma requisição com a mesma chave ainda em andamento recebe `409 TED-0013` com `Retry-After`.
* Com uma chave nova, `POST /v1/transfers` recusa uma requisição materialmente idêntica na mesma janela antiduplicidade (5 minutos por padrão) com `409 TED-0014`.

## Prazos regulatórios

***

| Prazo | Começa em | Termina em | Limite |
| - | - | - | - |
| Do débito ao envio | A reserva do débito | O envio ao STR | 30 min |
| Da liquidação ao crédito | A liquidação interbancária no STR | O crédito ao recebedor | 60 min |
| Da liquidação à devolução | A liquidação interbancária no STR | A devolução | 60 min |

`GET /v1/operations/sla` mostra p50, p95 e p99 de cada prazo, os estouros do dia e os itens em risco.

## Dados pessoais

***

* **Respostas da API:** o nome e o CPF ou CNPJ do remetente e do recebedor vêm completos, para os papéis com permissão de lê-los.
* **Logs:** o TED Lerian mascara documentos e nomes.
* **Eventos de TEDs enviadas** (`transfer.*`) não trazem dados da contraparte.
* **Eventos de TEDs recebidas** (`incoming_transfer.*`) trazem o recebedor, cliente da própria instituição, completo. O remetente, cliente de outra instituição, vem mascarado.
* A descrição em texto livre de uma TED recebida é publicada como a instituição remetente a escreveu.

## Isolamento entre instituições

***

Cada registro pertence a uma instituição. A instituição sempre vem do token autenticado, nunca de um campo da requisição. Um identificador de outra instituição responde como não encontrado (`404`), sem revelar que existe.

## Auditoria

***

Cada transferência tem uma linha do tempo que nunca é editada. Ela registra cada mudança de status com a data e a hora, a origem (`API`, `RAIL`, `STR`, `LEDGER`, `WORKER`, `OPERATOR`, `SYSTEM`), o motivo oficial e, nas ações de operador, quem agiu. O TED Lerian não apaga nenhum registro de negócio.


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