Estados de Ciclo de Vida
Máquinas de estado para cada domínio com transições permitidas. Estados terminais não possuem transições de saída. Os métodos de transição validam movimentos permitidos e disparam eventos middag/{domain}/status_changed.
Entitlement
| De | Transições Permitidas |
|---|---|
active | suspended, expired, cancelled |
suspended | active, cancelled |
expired | active, cancelled |
cancelled | (terminal) |
Quote
| De | Transições Permitidas |
|---|---|
draft | sent, cancelled |
sent | viewed, accepted, rejected, expired |
viewed | accepted, rejected, expired |
accepted | paid, cancelled |
paid | fulfilled |
fulfilled | (terminal) |
rejected | (terminal) |
expired | (terminal) |
cancelled | (terminal) |
Environment
| De | Transições Permitidas |
|---|---|
provisioning | active, cancelled |
active | maintenance, suspended, decommissioned |
maintenance | active |
suspended | active, decommissioned |
decommissioned | (terminal) |
Service
Definido no enum ServiceStatus com allowedTransitions():
| De | Transições Permitidas |
|---|---|
proposal | approved, cancelled |
approved | in_progress, cancelled |
in_progress | on_hold, delivered, cancelled |
on_hold | in_progress, cancelled |
delivered | closed, in_progress |
closed | (terminal) |
cancelled | (terminal) |
Ticket
Definido no enum TicketStatus com allowedTransitions():
| De | Transições Permitidas |
|---|---|
open | in_progress, waiting, cancelled |
in_progress | waiting, resolved, cancelled |
waiting | in_progress, cancelled |
resolved | closed, in_progress |
closed | (terminal) |
cancelled | (terminal) |
Contract
| De | Transições Permitidas |
|---|---|
draft | active, cancelled |
active | suspended, expired, renewed, cancelled |
suspended | active, cancelled |
expired | renewed |
renewed | (terminal) |
cancelled | (terminal) |
Aplicação de Transições
As transições de status são validadas nos serviços de domínio antes da persistência:
php
// Enum ServiceStatus
public function allowedTransitions(): array
{
return match ($this) {
self::Proposal => ['approved', 'cancelled'],
self::Approved => ['in_progress', 'cancelled'],
// ...
self::Closed => [],
self::Cancelled => [],
};
}Transições inválidas lançam InvalidArgumentException. O evento status_changed é disparado somente após uma transição bem-sucedida.
Relacionados
- Labels de Status -- Todos os valores de status
- Pontos de Extensão -- Eventos
status_changed