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

# Lista de erros do SILOC

> Consulte os códigos de erro do SILOC, o status HTTP que cada um carrega, e a ação que o resolve.

**Formato do erro**

O SILOC retorna erros como problem details RFC 9457:

```json JSON theme={null}
{
  "type": "https://errors.lerian.studio/v1/SILOC-0007",
  "title": "Not Found",
  "status": 404,
  "detail": "participant not found",
  "code": "SILOC-0007"
}
```

**Definições de campos**

* **`type`** – Uma URI que identifica o erro no catálogo de erros da Lerian, construída como `https://errors.lerian.studio/v1/<code>`. Esta URI repete `code`, então ela não separa dois status que compartilham um código.
* **`title`** – O texto do status HTTP (por exemplo, `Not Found`).
* **`status`** – O código de status HTTP.
* **`detail`** – Uma explicação legível por humanos desta ocorrência. Um `500` e um `SILOC-0023` substituem o texto por `internal error`, para que a causa interna permaneça dentro do trilho. O texto varia por ocorrência, e um `403` pode trazer a mensagem que o serviço de autorização reportou. Não baseie sua lógica nele.
* **`code`** – O código estável e legível por máquina (`SILOC-NNNN`). Baseie sua lógica no par de `status` e `code`, não em `code` isoladamente. Um código pode aparecer sob mais de um status, e cada status precisa de uma ação diferente. Por exemplo, `SILOC-0022` é um 400 para um corpo que não é JSON válido e um 422 para um valor que viola uma regra de domínio. Uma requisição que falha na validação de schema traz `SILOC-0022`, e `errors` nomeia os campos com falha.
* **`errors`** – Uma lista opcional de detalhes em nível de campo, cada um com o `location` que leu, um `message` e o `value` encontrado ali. Uma recusa do gate de autorização ou de idempotência traz, em vez disso, uma lista `violations` vazia.

As tabelas abaixo listam os códigos que o SILOC retorna, agrupados por status HTTP.

## 400, 413, 415: Corpo da requisição recusado

***

| Status | `code` | Descrição | `detail` |
| - | - | - | - |
| 400 | SILOC-0022 | O corpo da requisição está ausente ou não é um JSON válido. Envie um corpo JSON que siga o schema da operação. | `request body is required`, `validation failed` |
| 413 | SILOC-0022 | O corpo da requisição atingiu o limite de 1 MiB. Envie um corpo menor. | `request body is too large limit=1048576 bytes` |
| 415 | SILOC-0022 | A requisição declara um `Content-Type` que não é JSON. Envie o corpo como `application/json`. | `validation failed` |

## 401: Chamador não identificado

***

| `code` | Descrição | `detail` |
| - | - | - |
| SILOC-0004 | A requisição chegou sem um bearer token, ou com uma credencial que o serviço de autorização não aceita. | `Missing Token`, ou `Unauthorized` |
| SILOC-0003 | Uma requisição que altera estado chegou ao gate de idempotência sem um chamador identificado para atribuir o `X-Idempotency`. | `authenticated principal unavailable` |
| SILOC-0401 | Uma operação de certificado chegou ao trilho sem uma identidade de chamador para registrar. | `authorized actor identity is unavailable` |

## 403: Chamador recusado

***

| `code` | Descrição | `detail` |
| - | - | - |
| LCS-NNNN | A licença da Lerian recusa a requisição. Verifique a licença em `LICENSE_KEY` ou `LICENSE_FILE_PATH`. | Nenhum. O corpo traz `code`, `title` e `message`. |
| SILOC-0005 | O serviço de autorização recusou este chamador para o recurso e a ação que a requisição direciona, ou, na aprovação de um fechamento, o chamador é o operador que pediu o fechamento. | `Forbidden`, a mensagem que o serviço de autorização reportou, ou `the operator who asked to close this message cannot approve it` |

## 404: Não encontrado

***

| `code` | Descrição | `detail` |
| - | - | - |
| SILOC-0007 | O path ou a query nomeou um recurso que o trilho não possui. Verifique o identificador, ou liste a coleção para encontrar um válido. | `participant not found`, `certificate not found`, `alert not found`, `relay failure not found`, `quarantined frame not found`, `cycle not found`, `settlement instruction not found`, `multilateral result not found`, `no outbound instruction with that id`, `homologation scenario not found`, `business calendar year not covered`, `no card message with that id`, `no card command with that id` |

## 409: Conflitos

***

| `code` | Descrição | `detail` |
| - | - | - |
| SILOC-0009 | A requisição colide com um estado que o trilho já possui, ou com um comando que já consumiu este `X-Idempotency`. Releia o estado atual antes de repetir a requisição. Isso inclui um certificado cuja autoridade e série já estão registradas, e um pedido de fechamento de uma requisição de saída que não está retida, que já aguarda sua aprovação, cuja resposta retida ainda pode ser reproduzida ou cujo ciclo LBTR um fechamento posterior registrado mantém aberto. | `a participant with this ISPB already exists`, `the active credential cannot be disabled; revocation was not recorded`, `alert is already inactive`, `notification config was modified concurrently; re-read and retry with the current version`, `a run is already in progress for this scenario; wait for it to finish`, `a request with this idempotency key is still being processed; retry once it completes`, `the idempotency key was already used with a different request`, `an earlier request with this idempotency key ran and its answer cannot be replayed; reconcile the original request, and never retry it with a new key` |
| SILOC-0026 | Um `LTR0002` ou `LTR0008` nomeia uma operação cuja resposta anterior está `SUBMITTED`, `DISPATCHED` ou `ANSWERED`. O trilho não armazenou nada. Uma resposta anterior que terminou em `FAILED` ou `REFUSED` reabre a operação, e uma confirmação `LTR0002` ou `LTR0008` respondida (`C`) ainda aceita uma resposta `D` para a mesma operação. | `an answer to this operation is already live: a new one is accepted only after it failed or was refused` |

## 422: Erros de validação

***

| `code` | Descrição | `detail` |
| - | - | - |
| SILOC-0022 | A requisição está bem formada, mas viola uma regra de domínio, ou traz um valor que o trilho não consegue interpretar. Corrija o campo que a resposta nomeia e envie a requisição novamente. | `validation failed`, `X-Idempotency header is required on a state-changing request`, `X-Idempotency must be at most 255 characters`, `invalid pagination cursor`, `participantId must be a valid uuid`, `certificateId must be a valid uuid`, `id must be a valid uuid`, `authorized actor identity is unavailable`, `from/to must be an RFC 3339 date-time`, `decidedAt must be an RFC 3339 timestamp`, `movementDate must be a date in YYYY-MM-DD form`, `id must be a uuid`, um `movementDate` posterior a hoje em Brasília em um `LTR0002` ou `LTR0008`, um campo inválido em um pedido de fechamento, `invalid command: <date> is not a business day, so its LBTR cycle is closed all day` em uma alteração de cronograma com `windowSeq` 3, ou a regra que um comando de cartão viola |
| SILOC-0025 | Uma decisão `LTR0002` ou `LTR0008` chegou fora do ciclo LBTR do seu `movementDate`: depois das 17h30 de Brasília ou do fechamento posterior que um operador registrou para esse dia, ou em um dia que não é dia útil. Qualquer outra requisição de saída nomeia um `DtMovto` cujo dia já terminou em Brasília. Somente uma consulta pode nomear um dia passado. O trilho não armazenou nada. | `the LBTR cycle of the movementDate is closed: it runs 06h40 to 17h30 Brasília, or to the later close an operator recorded for that day, on business days only, and the câmara takes no LBTR decision outside it`, ou `the movement day of DtMovto has ended in Brasília: a request leaves only on the day it claims, and only a query may name a past day` |

## 500: Erros do servidor

***

| `code` | Descrição | `detail` |
| - | - | - |
| SILOC-0500 | Uma falha inesperada do servidor. O trilho mascara a causa e retorna um texto fixo. Repita a requisição, e cite o identificador de trace da resposta se a falha persistir. | `internal error` |

## 503: Trilho não pode responder

***

| `code` | Descrição | `detail` |
| - | - | - |
| SILOC-0001 | O trilho não conseguiu chegar a uma decisão sobre este chamador. O serviço de autorização não respondeu, ou o deploy não consegue autorizar com sua configuração atual. | `Service Unavailable` |
| SILOC-0002 | O armazenamento de idempotência falhou antes de o comando executar, então o comando não executou. Repita com o mesmo `X-Idempotency`. | `the idempotency store is unavailable, so this command did not run; retry it with the same key` |
| SILOC-0023 | Este deploy não tem uma perna de envio para a Núclea, então não consegue enviar a mensagem solicitada. | `internal error` |
| SILOC-0024 | A perna de envio para a Núclea não está em execução neste deploy, o queue manager do SILOC da Núclea não está acessível, ou o certificado de assinatura ou o certificado da câmara não pode ser usado: ele não está registrado, está revogado ou fora da validade, a custódia não consegue assinar com ele, ou a chave da custódia não corresponde a ele. O trilho não armazenou nada. Repita com o mesmo `X-Idempotency` quando ela se recuperar. Quando o queue manager recusa a configuração deste deploy, `detail` nomeia a configuração a corrigir. | `internal error`, `Núclea is unavailable: the SILOC queue manager cannot be reached, so the message was not stored; retry once it recovers`, ou a configuração que o queue manager recusou, seguida de `the message was not stored, retry once it is fixed` |

> [!NOTE]
>
> Um 503 que traz `SILOC-0002` significa que o comando não executou. Repita com o mesmo `X-Idempotency`. Quando só o recibo de um comando que executou se perde, o trilho devolve a resposta do próprio comando com o header `X-Idempotency-Fenced`. Quando a resposta de uma requisição anterior não pode ser reproduzida, o trilho responde 409 `SILOC-0009`. Concilie a requisição original e nunca a repita sob uma chave nova.


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