SEMTRAS · Santarém · Pedidos e Autorização
Um pedido tem sete status e só anda por transições previstas. Cada uma exige uma permissão, uma checagem da Policy e, às vezes, que um módulo esteja ligado. Abaixo está o diagrama completo. Escolha quem você é e percorra o pedido: o diagrama mostra em verde o que você pode fazer agora e em âmbar o que está bloqueado, com o motivo.
Cada número é uma transição. Clique num número para ver quem dispara e o que acontece.
Nenhuma transição escolhida. Reprovado, Cancelado e Atendido são estados finais: nada sai deles.
De para .
Quem: , com .
Módulo: .
Para percorrer o pedido inteiro, troque de perfil a cada passo: o que o Solicitante faz, o Gestor não faz, e vice-versa.
Ainda não existe pedido. Use a transição 1 ao lado para criar um.
Pedido 2026/000087 · Setor de Atendimento · dados fictícios
| Item | Solic. | Aprov. | Distrib. | Saldo | A entregar |
|---|---|---|---|---|---|
A SEMTRAS usa uma etapa só: o pedido cai numa caixa de entrada vista pela NSUAS 1 e pela NSUAS 2, e o veredito de um servidor de qualquer uma já decide. A quantidade aprovada nesta demonstração é sempre igual à solicitada.
passa para
O sistema recusa com 403 e registra a tentativa. Primeiro motivo: .
Não saem do estado atual
Cada transição grava quem fez, quando e de qual status para qual. É a trilha de auditoria do pedido.
Nada aconteceu ainda.
| Quando | Quem | O quê | Status |
|---|---|---|---|
| →, |
| # | Transição | De | Para | Quem | Permissão | Módulo |
|---|---|---|---|---|---|---|
|
enum StatusPedido: string
{
case Rascunho = 'rascunho';
case EnviadoParaAprovacao = 'enviado_para_aprovacao';
case Aprovado = 'aprovado';
case Reprovado = 'reprovado';
case ParcialmenteAtendido = 'parcialmente_atendido';
case Atendido = 'atendido';
case Cancelado = 'cancelado';
/** @return list<self> */
public function proximos(): array
{
return match ($this) {
self::Rascunho => [self::EnviadoParaAprovacao, self::Cancelado],
self::EnviadoParaAprovacao => [self::EnviadoParaAprovacao, self::Aprovado, self::Reprovado, self::Cancelado],
self::Aprovado => [self::ParcialmenteAtendido, self::Atendido, self::Cancelado],
self::ParcialmenteAtendido => [self::ParcialmenteAtendido, self::Atendido],
self::Reprovado, self::Atendido, self::Cancelado => [],
};
}
}
// Pedido::transicionar() é o único caminho para mudar o status
public function transicionar(StatusPedido $para): void
{
throw_unless(in_array($para, $this->status->proximos(), true),
TransicaoInvalida::class);
$this->update(['status' => $para]);
}
A Policy responde “este usuário pode agora?” e o enum responde “esse caminho existe?”. Os dois têm de concordar. No banco, um CHECK garante que o status é um dos sete valores.
Status do PDF e transições propostas · pedido, setores e horários fictícios · fonte: docs/requisitos/analise-requisitos.md, seções 2 e 4. Permissões em docs/fluxos/05-perfis-e-permissoes.html, módulos em docs/fluxos/06-mapa-de-modulos.html e fluxo completo em docs/fluxos/01-fluxo-do-sistema.html.