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

# Pré-requisitos

> O que precisa estar pronto antes da sua primeira chamada ao Lender: os serviços de que ele depende, as migrations, a configuração que a originação exige e o token que carrega o analista.

O Lender precisa de um conjunto pequeno de coisas prontas antes da primeira chamada de API. Esta página lista essas coisas na ordem em que você as configura. Quando cada item aqui estiver pronto, siga o [Início rápido](https://docs.lerian.studio/pt/products/lender/lender-quick-start.md) para originar um empréstimo.

## Serviços de que o Lender depende

***

| Serviço | Versão | Por que o Lender precisa |
| - | - | - |
| **PostgreSQL** | 17 | O armazenamento de dados principal. Cada produto, proposta, cronograma e intenção de lançamento vive aqui. |
| **Valkey** (compatível com Redis) | 8 | Registros de idempotência, cache e rate limit. |
| **Provedor de identidade** | — | Emite os tokens bearer contra os quais o Lender autoriza cada rota. |
| **Midaz** | — | O ledger que o lançamento de desembolso alcança. Opcional para o seu primeiro empréstimo. |
| **RedPanda** | — | O backbone de eventos do catálogo de eventos. Obrigatório. |

PostgreSQL, Valkey e RedPanda são obrigatórios: o Lender não inicia sem o backbone de eventos. Um provedor de identidade é obrigatório quando a autorização de rota está habilitada, que é o padrão. Produção exige um. Um primeiro empréstimo não precisa de Midaz. Leia [Lançamentos no ledger](#ledger-postings) abaixo para saber o que fica esperando.

## Rode o Lender localmente

***

O Lender é um único serviço Go. Uma execução local precisa do toolchain Go na versão 1.26 ou posterior, Docker com Compose e Make.

**1. Crie o arquivo de ambiente**

`make set-env` copia `config/.env.example` para `config/.env`. Edite esse arquivo para cada ajuste desta página.

**2. Suba as dependências**

`make up` sobe as dependências do Compose e o serviço na porta `8080`.

**3. Aplique as migrations**

`make migrate-up` aplica as migrations. Veja a próxima seção.

**4. Rode com live reload**

`make dev` roda o serviço com o Air.

## Aplique as migrations

***

O Lender não migra o banco de dados quando sobe. Você aplica as migrations por fora, a partir de um conjunto no diretório `migrations`. A imagem do container carrega um binário `/migrate` que aplica esse conjunto.

O conjunto também popula o **registro de jurisdições**: duas jurisdições ativas, `BR` para o Brasil e `XX`, a base genérica. Nenhuma API cria uma jurisdição. O binário em produção carrega o comportamento de cada perfil, e a tabela registra quais códigos esse binário conhece. Leia [Jurisdições](https://docs.lerian.studio/pt/products/lender/jurisdictions.md) para saber o que um perfil decide.

## Configuração obrigatória

***

O outbox em PostgreSQL é obrigatório e é inicializado automaticamente. Configure a autenticação quando o seu deploy habilita a autorização de rota.

### Um subject autenticado: `PLUGIN_AUTH_ENABLED=true`, o padrão

O Lender registra quem agiu em cada proposta de empréstimo. Ele lê o analista responsável a partir do subject do token bearer, não do corpo da requisição. Cada chamada de proposta de empréstimo precisa, portanto, de uma identidade autenticada.

`PLUGIN_AUTH_ENABLED` tem `true` como padrão. Defina `PLUGIN_AUTH_HOST` com o endereço do seu provedor de identidade.

Depois, envie um token bearer em cada chamada. O token precisa de uma claim de subject não vazia, e o mesmo subject deve criar, aprovar e desembolsar a proposta.

O Lender define os papéis e as permissões dele em um arquivo de seed. Carregue esse seed no seu provedor de identidade. O papel do analista precisa destas permissões:

| Recurso | Ações |
| - | - |
| `loan_product` | `write` |
| `accounting` | `write` |
| `loan_applications` | `preview:schedule`, `create`, `approve`, `disburse` |
| `loan_accounts` | `read` |

### Um destino durável de lançamento: sempre presente

Um empréstimo desembolsado registra a intenção de lançamento dele de forma durável. O Lender inicializa o outbox transacional em PostgreSQL em cada deploy, na mesma transação de banco de dados que move a proposta para `disbursed`. `OUTBOX_ENABLED` não existe.

O dispatcher repassa cada intenção depois, na cadência que `OUTBOX_DISPATCH_INTERVAL_SEC` define. Leia [Contabilidade e rodadas de apropriação](https://docs.lerian.studio/pt/products/lender/accounting-and-accrual-runs.md) para saber o que o ledger recebe.

## Lançamentos no ledger

***

Aponte o Lender para o Midaz quando você quiser que os lançamentos caiam no ledger:

| Variável | Objetivo |
| - | - |
| `MIDAZ_LEDGER_BASE_URL` | O endereço do ledger. |
| `MIDAZ_OAUTH_TOKEN_URL` | Onde o Lender pega as credenciais de ledger dele. |
| `MIDAZ_LEDGER_ORGANIZATION_ID`, `MIDAZ_LEDGER_ID` | O destino padrão de lançamento. |

O empréstimo é originado com ou sem essas variáveis. Enquanto você não configurar um endpoint de ledger, as intenções de lançamento ficam duráveis no outbox e o lançamento no ledger espera. Configure o ledger antes de esperar contabilizações.

## Padrões de tenant

***

`DEFAULT_TENANT_ID` identifica o tenant, e deve ser um UUID válido. As migrations vinculam o tenant padrão, `11111111-1111-1111-1111-111111111111`, a `BR`. Se você definir outro `DEFAULT_TENANT_ID`, adicione a linha dele em `public.tenant_jurisdictions`, ou o Lender recusa as requisições dele com 403.

## Streaming de eventos

***

O Lender não sobe sem o backbone de eventos. Defina `STREAMING_ENABLED=true`, aponte `STREAMING_BROKERS` para o RedPanda e defina `STREAMING_CLOUDEVENTS_SOURCE=lender`. O Lender valida esses valores quando sobe.

## Checklist

***

* PostgreSQL 17, Valkey 8 e RedPanda acessíveis.
* Migrations aplicadas.
* `STREAMING_ENABLED=true` e `STREAMING_BROKERS` definidos.
* Quando a autorização de rota está habilitada, garanta que o provedor de identidade está acessível e use um token bearer com um subject e cada permissão da tabela acima.
* `DEFAULT_TENANT_ID` um UUID válido.

## Próximos passos

***

> [card] [Início rápido](https://docs.lerian.studio/pt/products/lender/lender-quick-start.md)
>
> Sete chamadas de um banco de dados vazio até um empréstimo desembolsado.

> [card] [Configuração e deploy](https://docs.lerian.studio/pt/products/lender/configuration-and-deploy.md)
>
> O formato completo do container, a superfície de ambiente mais ampla e o caminho de lançamento no ledger.


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