> ## Documentation Index
> Fetch the complete documentation index at: https://documentacao.legitimuz.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Status de verificação

> Os cinco valores de status, os três que são desfecho, e por que expirado não é um deles.

Toda verificação tem um `status`. O conjunto é fechado, com cinco valores.

| Status       | O que significa                                       |
| ------------ | ----------------------------------------------------- |
| `not_opened` | criada, o titular ainda não abriu                     |
| `started`    | o titular abriu e está no meio da jornada             |
| `approved`   | passou                                                |
| `reproved`   | não passou                                            |
| `review`     | terminou sem decisão automática e aguarda um analista |

## Transitórios e decididos

Os cinco se dividem em dois grupos, e a divisão importa:

<Columns cols={2}>
  <Card title="Transitórios" icon="hourglass">
    `not_opened` e `started`. A jornada ainda pode mudar de rumo.
  </Card>

  <Card title="Decididos" icon="circle-check">
    `approved`, `reproved` e `review`. Há uma decisão persistida.
  </Card>
</Columns>

Só os decididos aparecem no corpo de
[`verification.decided`](/webhooks/events#verificationdecided). Um evento de desfecho nunca
anuncia uma verificação que não terminou.

## review não é recusa

`review` é uma verificação que precisa de gente. Ela pode virar `approved` ou `reproved` depois que
um analista decide no dashboard, e quando isso acontece,
[`verification.decided`](/webhooks/events#verificationdecided) dispara de novo.

Trate `review` como pendência, nunca como negativa.

## Expirado não é status

Uma verificação tem `expires_at`. Passado esse instante, ela não pode mais ser aberta, mas o
`status` dela **não muda**.

Uma verificação expirada sem ter sido aberta continua em `not_opened`. Para saber se ela ainda vale,
compare `expires_at` com o agora; não procure um valor `expired` no enum, porque ele não existe.

```ts title="Verificação expirada" theme={null}
const expirada =
  new Date(verificacao.expires_at) < new Date() &&
  (verificacao.status === "not_opened" || verificacao.status === "started");
```

<Tip>
  Expiração como filtro por data, e não como status, evita um trabalho periódico que reescreve
  linhas, e evita que o status de uma verificação mude sozinho enquanto ninguém olha.
</Tip>

## Próximo passo

<Card title="verification.decided" icon="broadcast" href="/webhooks/events#verificationdecided" horizontal>
  Como o status chega ao seu backend.
</Card>
