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

# Parceiros no Reporter

> Restrinja a credencial de um parceiro no Reporter às instituições ou aos templates que você escolher, diga a ele como nomeá-los em cada requisição, e leia as recusas que ele recebe.

Um [parceiro](https://docs.lerian.studio/pt/platform/access-manager/features/partners/overview) pode chamar o Reporter com uma credencial própria. No Reporter, você restringe essa credencial a algumas instituições, a alguns templates, ou aos dois. Esta página mostra como escolher esse escopo, o que cada escolha alcança e o que o parceiro recebe quando sai dele.

Todo parceiro do Reporter precisa de escopo: pelo menos uma instituição ou um template.

## Passo a passo

***

**1. Escolha com o que o parceiro trabalha**

Escolha o escopo mais estreito que cobre o que o parceiro precisa. Cada linha é uma restrição que você pode adicionar. O **campo na API** é o `field` de uma entrada de escopo; o Console mostra o nome da primeira coluna.

| Restrição | Campo na API | O que o parceiro alcança | O que é recusado |
| - | - | - | - |
| **Instituição** | `institutionId` | Os relatórios das próprias instituições: criá-los, listá-los, e lê-los e baixá-los por ID sob a instituição. O cadastro da própria instituição. Inscrever as próprias instituições em documentos regulatórios e gerar as remessas delas. | Outras instituições, um relatório que não nomeia instituição, a lista de instituições, os templates, e toda rota que lê um relatório por ID sem nomear a instituição. |
| **Template** | `templateId` | Os próprios templates e o conteúdo deles. Os relatórios dos próprios templates: criá-los, listá-los, e lê-los e baixá-los por ID sob o template. | Outros templates, um relatório que não nomeia template, a lista de templates, as instituições, gerar remessas regulatórias, e toda rota que lê um relatório por ID sem nomear o template. |

As duas restrições podem ser combinadas. Um parceiro restrito pelas duas nomeia uma instituição e um template do escopo dele em toda requisição sobre relatórios, e lê um relatório por ID só sob os dois. Cada valor é o ID que o Reporter devolve quando você cria a [instituição](https://docs.lerian.studio/pt/products/reporter/console/managing-institutions.md) ou o template.

O catálogo de escopo lista todas as restrições do Reporter. Leia-o com [Consultar o catálogo de escopo de um produto](https://docs.lerian.studio/pt/reference/platform/access-manager/retrieve-a-product-s-scope-catalog.md) para `reporter`.

Algumas regras valem para todo escopo:

* Uma requisição que não nomeia um item de um tipo restrito é recusada quando atua sobre relatórios. Por exemplo, um parceiro restrito a algumas instituições não pode listar todos os relatórios do seu tenant.
* Uma query que lista vários valores é recusada quando qualquer um deles está fora do escopo. Um campo de corpo aceita um valor: uma lista nele é recusada com `400`.
* As rotas que atuam sobre o tenant inteiro são recusadas a todo parceiro: fontes de dados, prazos, métricas, eventos, as listas de templates e de instituições, o catálogo regulatório, as inscrições regulatórias e os mapeamentos delas, e as correções, a aprovação e a proveniência de uma remessa regulatória.

**2. Dê ao parceiro as permissões e o escopo**

Crie o parceiro, ou altere-o, no [Console](https://docs.lerian.studio/pt/platform/access-manager/features/partners/console.md) ou com a [API do Identity](https://docs.lerian.studio/pt/platform/access-manager/features/partners/api.md). O identificador do produto é `reporter`.

* Adicione pelo menos uma entrada de escopo do Reporter. Sem ela, o Access Manager recusa o parceiro com `400` e `IDE-1060`.
* Marque os recursos e as ações. O máximo que você pode dar é o que o papel `reporter-editor-role` tem no seu tenant.

O Access Manager confere cada escrita que você dá contra o escopo. Uma escrita que atua sobre o tenant inteiro nunca é dada a um parceiro, e é recusada com `400` e `IDE-1056`. O Console marca a linha como **Fora do escopo**. No Reporter, essas escritas são:

* Criar, alterar ou excluir templates, fontes de dados, prazos e instituições.
* Alterar ou excluir uma inscrição regulatória e o mapeamento dela.
* Aprovar uma remessa regulatória (`regulatory-approval`).

As escritas que um parceiro pode receber são `reports` com `post`, para gerar relatórios, e `regulatory` com `post`, para inscrever as próprias instituições e gerar as remessas delas.

**3. Crie a aplicação dele no Reporter**

Crie a aplicação do parceiro com o produto `reporter`. Veja [Criar as aplicações do parceiro](https://docs.lerian.studio/pt/platform/access-manager/features/partners/api.md#create-the-partners-applications) no guia da API, ou [no Console](https://docs.lerian.studio/pt/platform/access-manager/features/partners/console.md#create-the-partners-applications). Envie o client ID e o client secret ao parceiro por um canal seguro.

**4. Diga ao parceiro como nomear os itens dele**

Nas rotas que leem um relatório, o path traz a instituição, o template ou os dois, conforme a rota que o parceiro escolhe. Nas outras rotas, o parceiro os nomeia nas queries e nos corpos que o Reporter já tem. Só as restrições que o parceiro tem são conferidas: cada valor que ele nomeia para uma delas tem que estar dentro do escopo dele. Um parceiro restrito só por template pode nomear qualquer instituição.

| Rotas | Escritas | Leituras e rotas por ID |
| - | - | - |
| Relatórios: `/v1/reports` | Para criar: corpo `institution` e `templateId` | Para listar: query `institution_id` ou `institutionId`, e `template_id` ou `templateId` |
| Relatórios por ID: `/v1/institutions/{institutionId}/reports/{id}`, `/v1/templates/{templateId}/reports/{id}`, `/v1/institutions/{institutionId}/templates/{templateId}/reports/{id}`, cada uma também com `/download` | Nenhuma: as rotas só leem | Path `institutionId` para um parceiro restrito por instituição, `templateId` para um restrito por template, e os dois para um restrito pelos dois |
| Instituições: `/v1/institutions/{institutionId}` | Nenhuma: as escritas nunca são dadas a um parceiro | Path `institutionId` |
| Templates: `/v1/templates/{templateId}`, `/v1/templates/{templateId}/content` | Nenhuma: as escritas nunca são dadas a um parceiro | Path `templateId` |
| Remessas regulatórias: `/v1/regulatory/subscriptions`, `/v1/institutions/{institutionId}/regulatory/reports` | Para inscrever: corpo `institution`. Para gerar uma remessa: path `institutionId`, e corpo `subscriptionId` com uma inscrição dessa instituição | Nenhuma: as leituras atuam sobre o tenant inteiro |

Um parceiro lê um relatório por ID só pelas rotas que nomeiam a instituição ou o template dele. `GET /v1/reports/{id}` e o `/download` dele são recusados a todo parceiro. Para gerar uma remessa, um parceiro usa `/v1/institutions/{institutionId}/regulatory/reports`. `POST /v1/regulatory/reports` é recusado a todo parceiro.

Um relatório de outra instituição ou de outro template, pedido sob o path do próprio parceiro, responde `404` com `RPT-0011`. É a mesma resposta de um ID que não existe. O mesmo vale para uma inscrição regulatória de outra instituição, enviada sob a instituição do próprio parceiro.

> [!WARNING]
>
> O que o parceiro vê num relatório é o que o template e a fonte de dados leem. O Reporter limita as linhas a uma instituição só pelo escopo da instituição: as linhas de cada fonte de dados que pertencem a ela. Antes de dar uma instituição a um parceiro, confira se o escopo da instituição nomeia as linhas dela em toda fonte de dados que os templates dele leem.
>
> Um parceiro restrito só por template não fica limitado a uma instituição: ele pode gerar os templates dele para qualquer instituição. Dê a esse parceiro templates e fontes de dados feitos só para ele. Se um parceiro lê linhas que não são dele, o template, a fonte de dados ou o escopo da instituição está configurado errado. É um erro de configuração, não de autorização, e a correção está nessa configuração.

**5. Confirme que funciona**

Esta conferência supõe que o parceiro tem o recurso `reports` com a ação `get` no Reporter, e um escopo restrito a uma ou mais instituições. Use a credencial do parceiro. Leia um relatório de uma instituição dentro do escopo dele. A resposta é `200`:

```bash theme={null}
REPORTER_BASE_URL="https://reporter.<your-domain>"        # your Reporter base URL
REPORTER_BEARER_TOKEN="paste-the-partner-access-token-here"
INSTITUTION_ID="paste-an-institution-id-in-the-scope-here"
REPORT_ID="paste-a-report-id-of-that-institution-here"

curl -s -o /dev/null -w '%{http_code}\n' \
  -H "Authorization: Bearer ${REPORTER_BEARER_TOKEN}" \
  "${REPORTER_BASE_URL}/v1/institutions/${INSTITUTION_ID}/reports/${REPORT_ID}"
```

Envie a mesma requisição com uma instituição fora do escopo. A resposta é `403`. Para ver o código, tire o `-o /dev/null`: o corpo da resposta traz `AUT-1020`.

## Se algo falhar

***

| Código | Status | O que significa | O que fazer |
| - | - | - | - |
| `AUT-1020` | 403 | A requisição está fora das permissões ou fora do escopo do parceiro, ou não nomeia um item que o escopo exige. | Confira se a requisição nomeia a instituição ou o template no campo dessa rota, com um valor do escopo do parceiro. Confira também se o parceiro tem a permissão dessa rota. |
| `RPT-0011` | 404 | O relatório ou a inscrição regulatória não existe, ou pertence a outra instituição ou outro template que não o que o path nomeia. Nada é lido nem alterado. | Confira o ID, e a instituição ou o template no path. |
| Sem código | 400 | Um campo de corpo recebeu uma lista de valores. | Envie uma instituição ou um template no campo. |
| `AUT-1009` | 401 | O parceiro está suspenso. | Reative o parceiro. |
| `AUT-1010` | 401 | A requisição está fora da janela de validade do parceiro. | Altere a janela de validade. |

A resposta não diz se foram as permissões ou o escopo que recusaram a requisição. Isso é proposital: um parceiro não consegue usar uma recusa para descobrir quais instituições ou templates existem fora do escopo dele.

Para todos os outros códigos, veja a [lista de erros do Reporter](https://docs.lerian.studio/pt/reference/products/reporter/reporter-error-list.md). Para as recusas ao criar ou alterar um parceiro, veja os [códigos de erro](https://docs.lerian.studio/pt/platform/access-manager/features/partners/api.md#error-codes) no guia da API.


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