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

# Aprovações de revisão manual

> Como duas pessoas decidem uma operação do Lerian SPI em revisão manual pela API do Cabine.

Uma operação MED do Lerian SPI pode estar em revisão manual. Duas pessoas a resolvem pela API do Cabine. Uma pessoa propõe a resolução. Outra pessoa a aprova ou a rejeita. Depois de uma aprovação, a API do Cabine envia a decisão ao [Lerian SPI](https://docs.lerian.studio/pt/rails/spi/what-is-lerian-spi.md).

O Cabine não tem tela para essas aprovações: chame a API do Cabine.

## Permissões

Conceda `br-spi-operations:update` no Lerian SPI apenas à aplicação da API do Cabine. Uma aplicação que tem essa permissão pode resolver uma revisão manual diretamente, sem proposta e sem uma decisão separada.

A API do Cabine aceita uma proposta ou uma decisão apenas do login de uma pessoa, nunca de uma credencial de aplicação. A pessoa que decide deve ser diferente da pessoa que propôs.

Os membros de `admin-group` (o grupo de administradores do Access Manager), `br-desk-admin-group` e `br-desk-operator-group` podem propor e decidir. Os membros de `br-desk-viewer-group` podem listar e ler as aprovações. Veja [Acesso e papéis](https://docs.lerian.studio/pt/rails/cabine/cabine-access-and-roles.md).

## Propor uma resolução

[Propose an operation approval resolution](https://docs.lerian.studio/pt/reference/rails/cabine/propose-an-operation-approval-resolution-maker.md) cria a aprovação. A requisição leva estes campos.

| Campo | Descrição |
| - | - |
| `operationId` | O UUID da operação do Lerian SPI em revisão manual. |
| `action` | `ATTACH_BACEN_RESOURCE` vincula à operação o recurso do BACEN que você encontrou. `CONFIRM_NOT_APPLIED` declara que o BACEN nunca recebeu a tentativa. |
| `bacenResourceId` | O UUID do recurso do BACEN. Envie-o com `ATTACH_BACEN_RESOURCE`. Não o envie com `CONFIRM_NOT_APPLIED`. |
| `digest` | O `requestFingerprint` da operação: 64 caracteres hexadecimais minúsculos. Leia-o com [Get DICT MED operation status](https://docs.lerian.studio/pt/reference/rails/spi/dict/get-regulatory-operation.md). |
| `note` | Um motivo opcional, de até 500 caracteres. |

```bash theme={null}
curl -X POST "$CABINE_API_URL/v1/operation-approvals" \
  -H "Authorization: Bearer $CABINE_BEARER_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "operationId": "01930000-0000-7000-8000-000000000000",
    "action": "CONFIRM_NOT_APPLIED",
    "digest": "2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae",
    "note": "BACEN has no record of this attempt."
  }'
```

A resposta traz o `approvalId` e o `decisionDeadline`. O estado é `requested`. Enquanto uma proposta anterior para a mesma operação espera uma decisão dentro da sua janela, uma nova proposta retorna `409` com o código `DESK-0005`.

## Decidir

[Approve or reject an operation approval workflow](https://docs.lerian.studio/pt/reference/rails/cabine/approve-or-reject-an-operation-approval-workflow-checker.md) registra a decisão. Envie `decision` como `approved` ou `rejected`, com um `note` opcional de até 500 caracteres.

```bash theme={null}
curl -X POST "$CABINE_API_URL/v1/operation-approvals/$CABINE_APPROVAL_ID/decision" \
  -H "Authorization: Bearer $CABINE_BEARER_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"decision": "approved"}'
```

Uma decisão sobre uma aprovação já decidida retorna `409` com o código `DESK-0005`. Uma rejeição não é enviada ao Lerian SPI. A operação continua em revisão manual.

Para encontrar aprovações, use [List operation approval workflows](https://docs.lerian.studio/pt/reference/rails/cabine/list-operation-approval-workflows.md). Filtre com `status` igual a `requested`, `approved`, `rejected` ou `expired`. Para ler uma aprovação, use [Get one operation approval workflow](https://docs.lerian.studio/pt/reference/rails/cabine/get-one-operation-approval-workflow.md).

## Janela de decisão

A pessoa que decide tem 24 horas a partir da proposta. Um administrador pode mudar esse período com `DESK_OPERATION_APPROVAL_DECISION_WINDOW`. Veja [Variáveis de ambiente da API do Cabine](https://docs.lerian.studio/pt/rails/cabine/cabine-environment-variables.md).

Uma decisão depois da janela retorna `410` com o código `DESK-0006`. Proponha a operação de novo. Depois da janela, a API do Cabine define o estado como `expired` na sua próxima verificação.

## Entrega ao Lerian SPI

Uma aprovação é enviada a [Resolve regulatory operation](https://docs.lerian.studio/pt/reference/rails/spi/dict/resolve-regulatory-operation.md) no Lerian SPI. A API do Cabine faz a primeira tentativa quando a decisão é registrada. A resposta da decisão não traz a entrega. Leia a aprovação para ver o campo `delivery`. Ele aparece depois da primeira tentativa. Ele tem `outcome`, `attemptCount`, `lastStatusCode` e `lastAttemptAt`.

| Resultado | Significado | O que fazer |
| - | - | - |
| `pending` | O Lerian SPI não aceitou a decisão. A API do Cabine tenta de novo. | Leia a aprovação de novo mais tarde. |
| `succeeded` | O Lerian SPI aceitou a decisão. | Nada. |
| `refused` | O Lerian SPI respondeu `422`: a decisão não é válida para a operação, por exemplo porque o `digest` não confere. A API do Cabine não tenta de novo. | Proponha de novo com dados corretos. |
| `exhausted` | Todas as tentativas falharam. A API do Cabine não tenta de novo. | Leia a operação no Lerian SPI. Se ela ainda está em revisão manual, confira as configurações da API do Cabine para o Lerian SPI e proponha de novo. |

Por padrão, uma nova tentativa espera pelo menos 30 segundos depois da primeira tentativa que falhou. A espera dobra a cada falha, até 30 minutos. A API do Cabine faz no máximo 20 tentativas. Os administradores definem esses valores com as variáveis `DESK_APPROVAL_DELIVERY_*`.

## Erros

A API do Cabine retorna os códigos da [lista de erros da API do Cabine](https://docs.lerian.studio/pt/reference/rails/cabine/cabine-error-list.md).


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