> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devmob.app.br/llms.txt
> Use this file to discover all available pages before exploring further.

# Notifications

> Fluxo de notificação persistida e estado por destinatário.

Notification representa o conteúdo compartilhado. NotificationRecipient representa o estado individual de cada usuário que recebeu a notificação.

## Fluxo

```mermaid theme={null}
sequenceDiagram
    participant Domain as Domain event
    participant API as DEVMOB API
    participant Inbox as Inbox/Realtime
    participant User as User

    Domain->>API: Evento de negócio exige notificação
    Note over API: Resolve audiência e destinatários
    API->>API: Cria Notification
    API->>API: Cria NotificationRecipient por usuário
    API-->>Inbox: Publica entrega in-app/realtime
    Inbox-->>User: Mostra notificação
    User->>API: Marca como lida ou arquivada
```

## Etapas

| Etapa                  | Ator                      | Momento                                        | Efeito                                                                |
| ---------------------- | ------------------------- | ---------------------------------------------- | --------------------------------------------------------------------- |
| Decisão                | Fluxo de negócio          | Quando uma mudança precisa aparecer no produto | Define tipo, audiência, prioridade e recurso relacionado.             |
| Criação                | Sistema                   | Após a decisão                                 | Cria Notification com título, corpo, contexto e payload não sensível. |
| Distribuição           | Sistema                   | Depois de criar Notification                   | Cria NotificationRecipient para cada usuário destinatário.            |
| Entrega                | Sistema realtime ou inbox | Quando a notificação chega ao usuário          | Preenche `deliveredAt` quando aplicável.                              |
| Leitura                | Usuário destinatário      | Quando abre ou marca como lida                 | Preenche `readAt` e muda o recipient para `READ`.                     |
| Arquivamento           | Usuário destinatário      | Quando decide remover da visão ativa           | Preenche `archivedAt` e muda o recipient para `ARCHIVED`.             |
| Expiração/cancelamento | Sistema ou rotina         | Quando a notificação não deve mais ser ativa   | Impede novas entregas.                                                |

## Regras

* O estado de leitura é sempre por usuário.
* O mesmo usuário não deve ter dois recipients para a mesma Notification.
* O front resolve a navegação pelo `type`, `resourceDomain`, `resource` e `resourceId`.
* `payload` deve conter apenas dados necessários para renderização ou roteamento.
* `OPS` cobre Company e Cooperative; não existe audiência `COOPERATIVE`.
* Notificação cancelada não deve criar novos recipients.
* Notificação expirada não deve aparecer como ativa.

## Tipos iniciais

| Grupo         | Exemplos                                                                                    |
| ------------- | ------------------------------------------------------------------------------------------- |
| Support       | Chamado criado, nova mensagem, atribuição ou mudança de status.                             |
| Operations    | Rota aguardando aprovação, rota aprovada/rejeitada, status de viagem ou evento operacional. |
| Sales/Billing | Order confirmado/cancelado, pagamento confirmado/falho, ticket cancelado.                   |
| Benefits      | Solicitação de benefício aprovada ou rejeitada.                                             |
| Export        | Exportação concluída ou falhou.                                                             |

Veja a modelagem em [Notification](/data-modelling/communication/notification).
