Skip to content

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 ​

DeTransições Permitidas
activesuspended, expired, cancelled
suspendedactive, cancelled
expiredactive, cancelled
cancelled(terminal)

Quote ​

DeTransições Permitidas
draftsent, cancelled
sentviewed, accepted, rejected, expired
viewedaccepted, rejected, expired
acceptedpaid, cancelled
paidfulfilled
fulfilled(terminal)
rejected(terminal)
expired(terminal)
cancelled(terminal)

Environment ​

DeTransições Permitidas
provisioningactive, cancelled
activemaintenance, suspended, decommissioned
maintenanceactive
suspendedactive, decommissioned
decommissioned(terminal)

Service ​

Definido no enum ServiceStatus com allowedTransitions():

DeTransições Permitidas
proposalapproved, cancelled
approvedin_progress, cancelled
in_progresson_hold, delivered, cancelled
on_holdin_progress, cancelled
deliveredclosed, in_progress
closed(terminal)
cancelled(terminal)

Ticket ​

Definido no enum TicketStatus com allowedTransitions():

DeTransições Permitidas
openin_progress, waiting, cancelled
in_progresswaiting, resolved, cancelled
waitingin_progress, cancelled
resolvedclosed, in_progress
closed(terminal)
cancelled(terminal)

Contract ​

DeTransições Permitidas
draftactive, cancelled
activesuspended, expired, renewed, cancelled
suspendedactive, cancelled
expiredrenewed
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 ​